Skill Validator
Run automated checks against 62 rules covering frontmatter, structure, content, files, references, security, hooks, and MCP.
Quick Start
scripts/validate_skill.py /path/to/skill-directory
With severity filter:
scripts/validate_skill.py /path/to/skill --min-severity warning
Validation Categories
| Category |
Rules |
Checks |
| Frontmatter |
FM001-FM018 |
Required fields, naming, description, context/agent, maxTurns, memory, disable-model-invocation |
| Structure |
SS001-SS006 |
Line limits, progressive disclosure |
| Content |
CW001-CW009 |
Writing style, terminology, string substitution, dynamic context injection, ultrathink |
| Files |
FO001-FO007 |
Naming conventions, forbidden files |
| References |
RI001-RI003 |
Broken links, orphan files |
| Security |
SC001-SC005 |
eval/exec, undocumented constants |
| Hooks |
HK001-HK003 |
Hook structure, handler format, matcher format |
| MCP |
MC001 |
MCP server configuration format |
Severity Levels
| Level |
Action |
| CRITICAL |
Must fix before publishing |
| ERROR |
Should fix |
| WARNING |
Consider fixing |
| SUGGESTION |
Optional improvement |
Output Example
=== Skill Validation Report: my-skill ===
Summary: 0 critical, 1 error, 2 warnings, 1 suggestion
[ERROR] SS002: SKILL.md exceeds 500 lines (523 lines)
Location: SKILL.md
Fix: Split content into WORKFLOW.md, EXAMPLES.md, TROUBLESHOOTING.md
[WARNING] CW001: Second-person language detected
Location: SKILL.md:45
Found: "You should create..."
Fix: Use imperative: "Create..."
Command Options
--min-severity {critical,error,warning,suggestion} # Filter output
--format {text,json} # Output format
--ignore RULE1,RULE2 # Skip specific rules
Common Issues
"False positive on second-person"
- Context-appropriate "you" may be acceptable
- Use
--ignore CW001 to suppress
"Script security warning"
- Add inline comment:
# skill-validator: ignore SC001
"Hook/MCP validation incomplete"
- Install PyYAML for full nested structure validation:
pip install pyyaml
See TROUBLESHOOTING.md for complete issue handling.
References
- EXAMPLES.md - Real validation outputs
- references/RULES_REFERENCE.md - Complete rules documentation
1---2name: skill-validator3description: Validate skills against Anthropic best practices for frontmatter, structure, content, file organization, hooks, MCP, and security (62 rules in 8 categories). Use when creating new skills, updating existing skills, before publishing skills, reviewing skill quality, or when user mentions "validate skill", "check skill", "skill best practices", "skill review", or "lint skill".4---56# Skill Validator78Run automated checks against 62 rules covering frontmatter, structure, content, files, references, security, hooks, and MCP.910## Quick Start1112```bash13scripts/validate_skill.py /path/to/skill-directory14```1516With severity filter:1718```bash19scripts/validate_skill.py /path/to/skill --min-severity warning20```2122## Validation Categories2324| Category | Rules | Checks |25|----------|-------|--------|26| **Frontmatter** | FM001-FM018 | Required fields, naming, description, context/agent, maxTurns, memory, disable-model-invocation |27| **Structure** | SS001-SS006 | Line limits, progressive disclosure |28| **Content** | CW001-CW009 | Writing style, terminology, string substitution, dynamic context injection, ultrathink |29| **Files** | FO001-FO007 | Naming conventions, forbidden files |30| **References** | RI001-RI003 | Broken links, orphan files |31| **Security** | SC001-SC005 | eval/exec, undocumented constants |32| **Hooks** | HK001-HK003 | Hook structure, handler format, matcher format |33| **MCP** | MC001 | MCP server configuration format |3435## Severity Levels3637| Level | Action |38|-------|--------|39| CRITICAL | Must fix before publishing |40| ERROR | Should fix |41| WARNING | Consider fixing |42| SUGGESTION | Optional improvement |4344## Output Example4546```47=== Skill Validation Report: my-skill ===4849Summary: 0 critical, 1 error, 2 warnings, 1 suggestion5051[ERROR] SS002: SKILL.md exceeds 500 lines (523 lines)52 Location: SKILL.md53 Fix: Split content into WORKFLOW.md, EXAMPLES.md, TROUBLESHOOTING.md5455[WARNING] CW001: Second-person language detected56 Location: SKILL.md:4557 Found: "You should create..."58 Fix: Use imperative: "Create..."59```6061## Command Options6263```bash64--min-severity {critical,error,warning,suggestion} # Filter output65--format {text,json} # Output format66--ignore RULE1,RULE2 # Skip specific rules67```6869## Common Issues7071**"False positive on second-person"**72- Context-appropriate "you" may be acceptable73- Use `--ignore CW001` to suppress7475**"Script security warning"**76- Add inline comment: `# skill-validator: ignore SC001`7778**"Hook/MCP validation incomplete"**79- Install PyYAML for full nested structure validation: `pip install pyyaml`8081See [TROUBLESHOOTING.md](TROUBLESHOOTING.md) for complete issue handling.8283## References8485- [EXAMPLES.md](EXAMPLES.md) - Real validation outputs86- [references/RULES_REFERENCE.md](references/RULES_REFERENCE.md) - Complete rules documentation