Skill Spec Audit
Check installed skills against the
agentskills.io specification and local conventions for metadata completeness.
Arguments
- Skill names: tokens after the command -> filter to those skills only
- --fix: automatically add missing fields (prompts for values)
- Default: scan all non-symlinked skills in
Spec Requirements (agentskills.io)
| Field | Required | Notes |
|---|
| Yes | 1-64 chars, lowercase, hyphens only, must match directory name |
| Yes | 1-1024 chars, non-empty |
| No | Max 500 chars, environment requirements |
| No | Arbitrary key-value map |
| No | Space-delimited tool list (experimental) |
Naming Conventions
Skill names follow the pattern:
[scope]-[platform/org]-[group]-[name]
Rules
- Lowercase, kebab-case, no consecutive hyphens, 2-4 words, max 40 chars
- Role-noun suffixes allowed (, , )
- Standardized action synonyms: (compliance), (broad analysis), (lookup), (classify+act)
Scope prefix (required)
| Scope | Prefix | Example |
|---|
| | , |
| | |
| (none) | , |
Platform prefix (when single-platform dependent)
| Platform | Prefix | When to use |
|---|
| GitHub | | Skill requires CLI or GitHub API |
| Git | | Skill requires git but not GitHub |
| Slack | | Skill requires Slack MCP server |
| Google Workspace | | Skill requires CLI |
Multi-platform or general skills stay unprefixed. If a skill touches 2+ platforms, no platform prefix — the scope prefix alone is enough.
Group prefix (when 2+ skills share a domain)
| Group | Skills in group |
|---|
| standup, report, reflection |
| dry-run, prereq-audit, spec-audit |
| writer, post-mining |
| release, release-prep |
| release-digest, incident-investigation, sync-skills-to-plugins |
When creating a new skill, check for existing siblings. If a second skill appears in the same domain, retroactively add a shared prefix to both.
Local Conventions (beyond spec)
These are project-specific conventions enforced on top of the spec:
| Field | Expected | Values |
|---|
| If skill accepts args | Short usage hint string |
| Always | Must be present (non-empty) |
| Always | , , or |
| If skill has side effects | List of operations requiring user confirmation |
Workflow
Phase 1: Discover Skills
- Glob for
~/.claude/skills/*/SKILL.md
- Also check
.claude/skills/*/SKILL.md
(project-level)
- Skip symlinks — those point to and have their own conventions
- If user specified skill names, filter to matching directories
- Read each SKILL.md frontmatter
Phase 2: Validate Each Skill
For each SKILL.md, check:
Spec compliance:
- exists, matches directory name, is lowercase with hyphens only, no consecutive hyphens, 1-64 chars
- exists, is non-empty, 1-1024 chars
- exists (warn if missing — not required by spec but expected locally)
Naming conventions:
- Scope prefix matches : for personal, for organization, none for generic
- Platform prefix present if skill depends on a single platform (, , , )
- No platform prefix if skill uses 2+ platforms
- Action synonym is standardized: not /, not
- No single-word names (must have at least one hyphen)
- Max 40 chars, 2-4 words
- Abbreviations only from allowlist: , , , , , ,
Local conventions:
- is present and non-empty
- is one of: , ,
- exists if the skill body references any of these patterns:
- Slack: , ,
- Git: , , ,
- GitHub: , , , , ,
- Calendar: ,
- Files: , ,
- Install: ,
- exists if the skill body references arg parsing, , or accepts parameters
Phase 3: Report
Print a table:
## Skill Spec Audit
| Skill | name | naming | desc | compat | author | scope | confirms | arg-hint | Issues |
|-------|------|--------|------|--------|--------|-------|----------|----------|--------|
| gh-dep-pr-triage | ok | ok | ok | ok | ok | ok | ok | — | 0 |
| p-blog-writer | ok | ok | ok | ok | ok | ok | ok | ok | 0 |
| new-skill | ok | MISS:scope-prefix | ok | MISS | MISS | MISS | WARN | — | 4 |
Legend: ok = present and valid, MISS = missing, WARN = likely needed but missing, — = not applicable
Summary: N skills checked, M fully compliant, X issues found
Phase 4: Fix (if --fix or user asks)
For each issue, prompt the user for the value or infer it:
| Field | Inference strategy |
|---|
| Scan for CLI tools, MCP servers in body -> suggest "Requires X, Y" |
| Infer from existing skills or ask user |
| Ask user: generic, personal, or organization? |
| Extract side-effect patterns from body, present list for confirmation |
| Extract from section if present, otherwise ask |
After fixing, use Edit to insert missing fields before the closing
.
Re-run validation and show updated table.
Determining
| Scope | Criteria |
|---|
| Works for anyone, no personal/org-specific data |
| References your specific accounts, channels, search terms, voice |
| References company repos, internal tools, team-specific workflows |
Determining
Only add
if the skill can perform
irreversible or externally-visible operations. Read-only skills (scanning, searching, reporting) do NOT need confirms.
Common confirms patterns:
| Operation | confirms entry |
|---|
| Post Slack message | |
| Merge PR | |
| Approve PR | |
| Create GitHub issue | |
| Create GitHub release | |
| Create calendar event | |
| Git commit | |
| Git push | |
| Write files | |
| Install tools | |
| Create PR | |
| Modify settings | |