skill-verifier
Validate a Claude Code skill two ways, in one tool:
- Lint — deterministic static checks on
SKILL.md: frontmatter compliance (name/description limits, kebab-case, reserved words, unsupported fields), description quality (third-person, when-to-use, front-loaded triggers), structure / progressive disclosure (body ≤ 500 lines, reference links resolve and stay one level deep, TOC on long files), and content anti-patterns (backslash paths, time-sensitive phrasing, placeholders). - Trigger e2e — the part nothing else does. It spawns the real headless
Claude Code binary in an isolated config that contains only the skills you
choose, feeds it a corpus of prompts, and observes whether the candidate
skill's
Skilltool actually fires.
What it measures
Because skill selection routes through the model, each prompt is run N times and reported as a fire-rate — stats, not pass/fail:
- Success — how often it fires on prompts it should (candidate loaded alone).
- Success under collision — does it still win when its neighbor skills are loaded, and if not, which skill takes the prompt.
- Cleanliness — how often it correctly stays quiet on prompts it should not fire.
The engineer reads the numbers and decides whether the description is sharp
enough. Opt into a CI gate with --recall-min / --spec-min.
Use
node ~/.claude/skills/skill-verifier/scripts/skill-verifier.mjs lint <skill>
node ~/.claude/skills/skill-verifier/scripts/skill-verifier.mjs gen <skill> # scaffold a trigger corpus
node ~/.claude/skills/skill-verifier/scripts/skill-verifier.mjs e2e <skill> --model haiku
It pairs with skill-creator as the verification step before publishing. Dependency-free (Node 18+); reuses your existing Claude Code credentials for the isolated runs.