A skill that never triggers looks exactly like one that works. skillbench lints
skill files against 26 transparent checks, then reads real activation counts from
the session history your agent already keeps — and where nothing is recorded, it
says unmeasured, not unused.
Abridged from an actual run of --lint across every skill installed on
the machine this site was built on. Skill names generalized; every count and score
is what the linter printed. Nothing in it ever left that machine.
Yes — the machine this linter was written on scores poor. That is the point:
it reports what it finds. Every finding names the check, the skill and the severity,
and every check carries a “why it matters” and a “how to fix”
line. The checks live in
one file you can open,
and any check you disagree with switches off with --ignore.
Is it written right? 26 transparent checks across frontmatter, activation quality
— trigger phrases, negative boundary — body size, broken references, portability,
tool permissions and eval coverage. Runs on the repo you are developing
(--path) or on every skill installed across Claude Code, Codex CLI
and Gemini CLI.
02
/skillbench:coverage
Does it actually fire? Claude Code records which skill was active for each tool
call; coverage turns that into real activations per skill — calls, distinct
sessions, projects, recency — and lists the ones that never fired, with the
likeliest reason. Codex CLI and Gemini CLI do not record attribution; their
skills report as unmeasured, never as unused.
03
/skillbench:collide
Do two skills compete for the same request? An idf-weighted overlap score naming
the shared terms that blur the boundary, plus drift detection for skills mirrored
into several agent homes — are the copies still identical?
04 Trust
Claims you can check in the source.
No network calls. The scanner only reads skill files and session logs already on your disk —
skillbench.mjs contains no fetch, no sockets.
Unmeasured is not unused. Only Claude Code stores skill attribution; skills on Codex CLI and Gemini CLI are reported as unmeasured. Where there is no number, no number is shown.
No quota spent. Everything is read from disk. Live trigger testing — actually running should_trigger prompts — is deliberately deferred to v0.2 because it costs quota.
26 checks, no model judgement —
checks.mjs is a list you can read, and --selftest proves the engine against 20 fixtures without touching your data.
Symlinks are followed. Skills linked from a development repo are found and linted — a naive scanner silently misses every one of them.
MIT.LICENSE — no account, no signup, no telemetry.
05 Cloud
skillbench Cloud is in design.
The plugin stays free and local — that is a promise, not a phase. Cloud is the
optional layer for teams whose skills outnumber the people maintaining them:
Continuous measurement for a team skill library — lint and coverage tracked over time, not run by hand.
Regression history — how a description change affected trigger rate, before and after.
Pre-publish gate for marketplace publishers — a skill ships when it passes, not when it looks done.