Install any skill in seconds. Free to start, no credit card required.
Get Started Free →davekilleen/skill-score
Grade a Dex skill against the shape-aware quality rubric and report a ship/revise/no verdict with the exact fixes.
Passed 15 of 19 test cases with the skill, and 6 of 19 without it.
and 10 more in the full report
10 fixed7 passed either way5 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 10 test cases the skill fixed. Same model, same prompt, with and without the skill.
Score a skill description that clearly states its outcome but does not mention any adjacent skill to avoid collision with. What is the penalty under Tier 1?
| Checked | Without skill | With skill |
|---|---|---|
| identifies failure under criterion T1.2 for missing anti-triggers | Passed | Passed |
| recommends naming the nearest neighbor skill to disambiguate routing | Missed | Passed |
The instructions your model reads when the skill loads.
Grade a skill the way the router and a real user will experience it — then say plainly whether it ships, and if not, exactly what to fix.
Two things make a skill good: it fires when it should (the description is the router) and it does the job safely and well when it fires (the body is a contract, not a how-to essay). This skill scores both, applies the hard safety gates that override the number, and returns a verdict.
Governing principle: hard on Core, gentle on the user's own creations. A Core / first-party skill that scores below the bar does not ship — that is a hard gate we hold ourselves to. A skill the user wrote for themselves is coached, never blocked: show the score, name the one change that would make it fire, offer to make it — but always create/keep their skill if they want it.
$TARGET: Optional.
triage, .agents/skills/triage/) → score that one skill.--all → portfolio pass over every shipped skill: routing collisions, stale references, bad frontmatter, and per-skill grades in one table.$ORIGIN: Optional. core (first-party, hard gate) or user (coach-don't-block). If omitted, infer: a -custom suffix or a path under .claude/skills-custom/ ⇒ user; anything else shipped in the repo ⇒ core.
The scoring math (Tier-1/Tier-2 point tally, length checks, when-trigger detection, reference-path existence, collision proximity) is deterministic. Run the script, don't recompute by hand:
python3 .agents/skills/skill-score/scripts/score_skill.py <path-to-skill-dir-or-SKILL.md> [--all] [--origin core|user] [--json]
The script returns the mechanical sub-scores, every hard-gate check it can decide from files alone, and a provisional grade. Then you (the model) do the judgment-only parts the script flags as NEEDS_MODEL: is the description actually distinguishable from its nearest neighbor in meaning (not just string distance)? Does the body inspect its own output before claiming success? Are the anti-triggers pointing at the right neighbor? Merge the script's tally with your judgment calls into the final verdict.
If the script cannot run (no Python), fall back to scoring by hand against the rubric below — say so in the output.
These come straight from the ratified synthesis. A skill cannot ship if:
test cases passed, vs 6 / 19 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.