SW-SKL-031: Missing license and version metadata
Last updated 7 November 2026
| Fact | Value |
|---|---|
| Severity | Low |
| Checks | Skill package |
| Malicious indicator | No |
| OWASP Agentic Top 10 | ASI04 |
| OWASP MCP Top 10 | None mapped |
| NIST SP 800-53 | SR-3 (provisional mapping to SP 800-53 base controls) |
| First shipped in | Scanner 0.1.0 |
What it detects
This rule reads the skill's metadata. It looks at the frontmatter of SKILL.md for a license and a version, each at the top level or under a nested metadata mapping, and counts a field as present when it holds text that is not blank (a number such as 1.0 is read as text). It reports one finding when either is absent, with evidence such as "missing license, version".
The finding is on the first line of SKILL.md. The rule stays quiet in the cases the frontmatter rule already reports: when SKILL.md is missing, or its frontmatter is missing, not closed, not valid YAML or not a mapping. A frontmatter that parses but has a poor name or description still gets this finding for its missing fields, so a skill can have both.
Why it matters
A license tells a reader what they may do with the skill, and a version lets them tell the file they reviewed from a later one. Without either, a team that approved the skill cannot say which release it approved, and a change to it is harder to see. The scanner maps this rule to OWASP ASI04, Agentic Supply Chain Vulnerabilities, and to NIST SP 800-53 control SR-3, Supply Chain Controls and Processes.
It is the lowest severity because the file may be fine: the rule only asks for the facts that a package has to state about itself.
Example
This skill has a valid name and description in its frontmatter but no license and no version:
.claude/skills/plain-helper/SKILL.md
---
name: plain-helper
description: Formats a list of tasks as a checklist.
---
# Plain helper
Turn each task into one checklist line.The finding is on the first line, and its evidence lists both missing fields.
How to fix
Add a license line, with an identifier such as MIT or Apache-2.0 if that is what the skill is shared under, and a version line, and raise the version whenever the skill changes.
If it is a false positive
A skill kept inside a company repository may carry no license on purpose. Accept the finding with a note that says it is internal, or write the company's own license text as the value so the field is present.
If the finding is not a problem in your case, accept it with a note: in the dashboard a manager or owner can accept a finding and the note is kept with it; with the scanner on its own, add it to the baseline file with a reason and an expiry date.