Claude skill spec audit
A lazy engineer's toolkit — why do it yourself when a Skill can?
npx -y skills add jackchuka/skills --skill claude-skill-spec-auditAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 15 stars15 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Audit skill SKILL.md files for compliance with the agentskills.io specification and house conventions. Checks frontmatter fields (name, description, compatibility, metadata, argument-hint), metadata sub-fields (author, scope, layer, confirms), and layer/suffix consistency. Use when adding new skills, reviewing skill quality, or ensuring all skills follow the spec. Triggers: "audit skills", "check skill spec", "skill compliance", "are my skills up to spec", "/claude-skill-spec-audit".
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
10.6 KB, as published. Nobody here has run it
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
~/.claude/skills/
Spec Requirements (agentskills.io)
| Field | Required | Notes |
|---|---|---|
name | Yes | 1-64 chars, lowercase, hyphens only, must match directory name |
description | Yes | 1-1024 chars, non-empty |
compatibility | No | Max 500 chars, environment requirements |
metadata | No | Arbitrary key-value map |
allowed-tools | No | Space-delimited tool list (experimental) |
Naming Conventions
Skill names follow the pattern: [scope]-[platform/org]-[group]-<name-with-layer-suffix>
Rules
- Lowercase, kebab-case, no consecutive hyphens, 2-4 words, max 40 chars
- Suffix encodes the layer (see "Layer Conventions" below)
- Standardized action synonyms:
audit(compliance),scan(broad analysis),search(lookup),triage(classify+act)
Scope prefix (required)
Derived from metadata.scope:
| Scope | Prefix | Example |
|---|---|---|
personal | p- | p-slack-triage, p-daily-standup |
organization | o- | o-org-release-digest |
generic | (none) | skill-spec-audit, gh-dep-pr-triage |
Platform prefix (when single-platform dependent)
| Platform | Prefix | When to use |
|---|---|---|
| GitHub | gh- | Skill requires gh CLI or GitHub API |
| Git | git- | Skill requires git but not GitHub |
| Slack | slack- | Skill requires Slack MCP server |
| Google Workspace | gws- | Skill requires gws 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 |
|---|---|
daily- | standup, report, reflection |
skill- | dry-run, prereq-audit, spec-audit |
blog- | writer, post-mining |
oss- | release, release-prep |
org- | 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.
Layer Conventions
Every skill is exactly one of four layers, declared via metadata.layer. The
suffix of the name must match the layer.
| Layer | metadata.layer | Suffix family | Example |
|---|---|---|---|
| Primitive | primitive | verb: -read, -list, -fetch, -search, -post, -insert, -append, -query, -get, -scan | gws-sheets-read |
| Renderer | renderer | format noun (-slides, -docs, -pdf, -card, -message) or agent noun (-writer, -explainer, -namer, -generator) | gws-slides, visual-explainer |
| Workflow | workflow | outcome noun: -digest, -deck, -report, -triage, -audit, -standup, -prep, -recap, -investigation | o-tailor-allhands-deck |
| Reference | reference | -shared | o-tailor-shared |
Reference skills must:
- End in
-shared. - Begin their description with:
"Internal reference loaded by other <prefix>-* skills. Do not invoke directly." - Not appear in user-facing trigger phrases.
See ~/.claude/skills/CONVENTIONS.md for full rationale.
Local Conventions (beyond spec)
These are project-specific conventions enforced on top of the spec:
| Field | Expected | Values |
|---|---|---|
argument-hint | If skill accepts args | Short usage hint string |
metadata.author | Always | Must be present (non-empty) |
metadata.scope | Always | generic, personal, or organization |
metadata.layer | Always | primitive, renderer, workflow, or reference |
metadata.confirms | 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
.agents/skills/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:
nameexists, matches directory name, is lowercase with hyphens only, no consecutive hyphens, 1-64 charsdescriptionexists, is non-empty, 1-1024 charscompatibilityexists (warn if missing — not required by spec but expected locally)
Naming conventions:
- Scope prefix matches
metadata.scope:p-for personal,o-for organization, none for generic - Platform prefix present if skill depends on a single platform (
gh-,git-,slack-,gws-) - No platform prefix if skill uses 2+ platforms
- Action synonym is standardized:
auditnotreview/check,scannotinspect - No single-word names (must have at least one hyphen)
- Max 40 chars, 2-4 words
- Abbreviations only from allowlist:
pr,cli,oss,dep,mcp,gh,gws
Local conventions:
metadata.authoris present and non-emptymetadata.scopeis one of:generic,personal,organizationmetadata.confirmsexists if the skill body references any of these patterns:
- Slack:
send_message,post message,post to Slack - Git:
git commit,git push,create commit,push to remote - GitHub:
merge,approve,create PR,create issue,create release,gh release - Calendar:
create event,insert event - Files:
save to,write to,create file - Install:
brew install,install
argument-hintexists if the skill body references arg parsing,## Arguments, 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 |
|---|---|
compatibility | Scan for CLI tools, MCP servers in body -> suggest "Requires X, Y" |
metadata.author | Infer from existing skills or ask user |
metadata.scope | Ask user: generic, personal, or organization? |
metadata.confirms | Extract side-effect patterns from body, present list for confirmation |
argument-hint | Extract from ## Arguments section if present, otherwise ask |
After fixing, use Edit to insert missing fields before the closing ---.
Re-run validation and show updated table.
Determining metadata.scope
| Scope | Criteria |
|---|---|
generic | Works for anyone, no personal/org-specific data |
personal | References your specific accounts, channels, search terms, voice |
organization | References company repos, internal tools, team-specific workflows |
Determining metadata.confirms
Only add confirms 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 | send Slack messages |
| Merge PR | merge PRs |
| Approve PR | approve PRs |
| Create GitHub issue | create GitHub issues |
| Create GitHub release | create GitHub releases |
| Create calendar event | create calendar event |
| Git commit | create git commit |
| Git push | push to remote |
| Write files | save to filesystem |
| Install tools | install missing tools |
| Create PR | create PR |
| Modify settings | modify settings files |