The index

Most skills are fine.
That is not the same as free.

A skill's frontmatter loads at session start for every skill you have installed, whether or not it ever fires, and its instructions load in full the moment it does. That is a budget too. So we graded every public Agent Skill in three repositories, pinned to exact commits, with the same command you can run against your own.

The Agent Skills Quality Index

efaimo v0.5.0 · 2026-09-04

97%

of the 36 public Agent Skills in this corpus score an A from check --skill. Most skills are fine. That is the finding, and it is not the same as free.

grade distribution

A 35
C 1

Nothing scored B, D, F. One skill carries an error-level finding.

what the median costs you

1,632

tokens of instructions, loaded the moment the skill triggers. The spec recommends staying under 5,000.

38.5 tokens of metadata, loaded at session start for every installed skill whether it fires or not.

The one that is not fine claude-api scores C (73), and it is also the heaviest in the corpus: 18,419 tokens of instructions, about 11 times the median. It is Anthropic's own skill for their own API, which is the useful part. A curated set maintained by the people who wrote the spec still has one, so a set nobody audits has more. 3 repositories, pinned to exact commits: anthropics-skills, anthropics-claude-cookbooks, obra-superpowers. Reproduce any row with npx efaimo check --skill <dir>.

And again, seven weeks later

efaimo v0.2.0 · 2026-07-17 → 2026-09-03

The index above is a photograph. This is the same three repositories at those same July commits, and then at HEAD seven weeks on, measured with one version of the tool on both sides so that anything that moved is the skills rather than the ruler.

what it costs you when it loads July September move
metadata always in context 2,154 2,137 -0.8%
body loads on trigger 87,308 93,454 +7.0%
referenced files loads on demand 138,980 224,289 +61.4%

Read the third row with the second one beside it. claude-api alone is 96.5% of the movement in that column, going from 81,236 to 163,786 tokens of referenced material. Take it out and the other 35 moved +4.8%. Adding the three rows together would give you one large percentage that describes none of them, so this page does not print that number anywhere.

Grades moved one way. Of the 36 skills present on both dates, 0 improved, 4 got worse and 32 held. claude-api C (73) → C (72), writing-skills A (90) → B (80), subagent-driven-development A (95) → B (85), brainstorming A (100) → A (99).

The uncomfortable reading points at us. This ruleset has a size threshold for metadata and one for the body, and none at all for referenced-file weight. The two columns being watched held. The one nothing was watching grew. That is what happens to any quantity with no instrument pointed at it, and the instrument was ours to build.

Both runs pin the corpus with the manifest and the tool with a tag, so you can reproduce either side: git checkout v0.2.0, then node scripts/skills-corpus.mjs and node scripts/skills-index.mjs. The full write-up and both raw runs are in the repository under research/skills-delta-2026-09-03/.

And ours, by the same rules

efaimo publishes skills too, so they are graded by the same call and kept out of every number above. A corpus statistic is a claim about work other people did; folding our own in would quietly make "97% score an A" a sentence about a population that includes the author. The build fails if the two ever merge.

skill grade metadata, always on body, on trigger referenced, on demand
efaimo A (100) 75 1,039 none
mcp-stateless-migration A (100) 104 1,517 3 files, 3,690
claim-sweep A (100) 92 1,657 2 files, 2,647
red-before-green A (100) 97 967 2 files, 2,601
honest-chart A (100) 91 923 3 files, 2,391
read-back A (100) 81 1,172 1 files, 1,717
unreleased-guard A (100) 96 1,143 1 files, 997
denominator A (100) 65 1,012 2 files, 1,906

The three level split is the whole reason to care: what a skill costs you when it is installed and idle is a different number from what it costs when it runs, and both are different from what it costs when it is read to the end.

And the comparison runs both ways. On the column this page opened with, the always resident one, our median is 91.5 tokens against the corpus median of 38.5: 2.4 times, with 8 of 8 above it. A description is what a host matches against, so ours enumerate the situations that should trigger them, and that trade is deliberate. What was not deliberate was paying for prose: four of them also explained how the skill works, in the one place that is resident whether the skill fires or not. That moved to the body, and installing all 8 of them now costs 701 tokens before any of them has done anything. On the column nobody counts, the referenced files the panel above shows growing fastest, our average is 1,994 tokens against 3,861, 52% of it, and 1 of our skills ship no referenced files at all. Both numbers are read out of the same run as the table above.

Install any of them

npx -y --allow-git=all github:efaimo-ai/mcp-stateless-migration
npx -y --allow-git=all github:efaimo-ai/claim-sweep
npx -y --allow-git=all github:efaimo-ai/red-before-green
npx -y --allow-git=all github:efaimo-ai/honest-chart
npx -y --allow-git=all github:efaimo-ai/read-back
npx -y --allow-git=all github:efaimo-ai/unreleased-guard
npx -y --allow-git=all github:efaimo-ai/denominator

Those are repository URLs, not package names, and that is the honest form today. The skills are not on npm yet. Printing the short form, npx and the skill's bare name, would hand you a command that 404s, and this site has one rule above the others: it describes what you can actually get. The commands above install nothing globally and there is nothing to clone. When the packages publish, each line loses its middle and nothing else here changes.

And nobody should enjoy typing --allow-git=all. npm 12 refuses git specs by default, which is a good default; that flag switches it off for the one command, and a narrower value is refused too. It was missing from these lines until 2026-09-04, which made every one of them fail with EALLOWGIT for anyone on current npm, while working perfectly on the machine they were written on, where npm was one major behind. The alternative is that a skill is markdown: copy SKILL.md and its references/ out of the repository and there is nothing to trust. Both of these disappear on publish, because npx plus a package name needs no flag on either major.

Which of those two paragraphs you are reading is not an editorial decision. It is read from a registry probe committed on 2026-09-04, and the build fails if a command here disagrees with it. The installer copies SKILL.md and its references/, reads every byte back, and refuses rather than guesses when what landed is not what it wrote. Add --global to install for every project instead of this one, --check to ask whether what you have is current, or --print to read the skill on stdout without installing anything.

efaimo is in the table above and not in that list, on purpose. It is the CLI, and its package ships a SKILL.md that gets graded like any other, but npx efaimo runs the auditor rather than installing a skill. A line that looks like the others and does something else is worse than no line.

What this is not A grade here is a lint-quality signal, not a security audit and not a measure of whether a skill helps. A well-formed skill can still make an agent worse at the task, which is a different question, measured a different way, on the commands page. The injection checks in check --skill are surface heuristics and are reported without ever moving a grade.