445,348 listings measured · 43,199 fail · 9.70% · scraped 2026-08-14 · edition 2026.1
The State of Agent Tooling
9.70% of the published Claude Code artefact ecosystem — 43,199 of 445,348 listings — fails a structural check and will not load as published. Nobody has measured this before, so there is nothing to compare it against yet. That is the point of publishing it.
What was measured
Every skill, subagent, plugin and marketplace SkillWorks could find on GitHub and skills.sh, read from source on 2026-08-14 and checked for whether an agent runtime could load it. Not whether it is any good, whether it is popular, or whether anyone maintains it — only whether the file it ships is structurally capable of being registered. 43,199 are not.
- Population
- 445,348 listings — 347,382 skills, 71,430 subagents, 20,212 plugins, 6,324 marketplaces.
- Failing
- 43,199 listings, 9.70% of the population.
- Method
- Static structural checks. Nothing is executed, no model judges anything, and no row is hand-curated. The full method.
- Denominator
- Everything found, including everything that failed. Nothing is dropped for being unreadable — a catalogue that omits what it could not process publishes a healthier ecosystem than exists.
Subagents are the broken half of the ecosystem
The aggregate rate hides the finding. Subagents fail at 21.9% — 2.8× the rate of skills — and the reason is structural rather than cultural: a subagent’s name and description are Required: Yes in Anthropic’s frontmatter reference, while a skill’s are not. The same careless file is a working skill and a dead subagent.
| Kind | Listings | Fail | Rate |
|---|---|---|---|
| Skills | 347,382 | 27,398 | 7.89% |
| Subagents | 71,430 | 15,669 | 21.9% |
| Plugins | 20,212 | 33 | 0.16% |
| Marketplaces | 6,324 | 99 | 1.57% |
Almost all of it is one defect
38,183 of the 43,199 failures — 88.4% of them — are a YAML block at the top of a file that does not parse. This is the cheapest class of bug in software and it is sitting in front of the most-copied artefacts in a fast-growing ecosystem, because nothing in the publishing path checks it. There is no registry gate, no CI convention, and no error surfaced to the author: the file is committed, the repository is starred, and the artefact silently never loads.
| Cause | Listings | What it means |
|---|---|---|
| Frontmatter does not parse | 38,183 | The YAML block at the top of the file is malformed, so nothing downstream can read a name, a description or a tool list out of it. |
| Subagent has no name | 4,119 | Required: Yes for a subagent, per Anthropic's frontmatter reference. Without it there is no identifier to register under. The same omission on a skill is not fatal — a skill falls back to its directory name — and this index published the opposite until 2026-08-02. |
| Subagent has no description | 1,799 | Also Required: Yes for a subagent. It is the sentence that tells Claude when to delegate, so an absent one leaves nothing to route on. |
| Manifest is not valid JSON | 128 | plugin.json or marketplace.json does not parse as JSON. |
| Marketplace lists no plugins | 99 | The manifest is valid and lists nothing, so there is nothing to install. |
Four things this number is not
Published here rather than left for someone else to find, because a census that only states its strengths is an advertisement.
- Not a count of distinct artefacts
- It counts listings — one artefact in one repository. The 445,348 come from 14,233 distinct repositories, an average of 31.3 apiece, because this ecosystem is overwhelmingly forked and vendored and the same file is counted once per repository carrying it. The failure rate is the citable figure; the population count is not a claim about how many different things exist. The failures concentrate too: 3,168 repositories account for all 43,199 of them.
- Not an execution result
- Nothing was run. A listing that passes every check here can still be useless, wrong, or dangerous. Passing means the file parses into something a runtime could register — a floor, not a verdict.
- Not a quality judgement
- No model scored anything and no human curated the list. Every fatal cause in the table above is a specific, checkable, arguable defect, and the row-level data is published so the argument can be had against the evidence.
- Not complete
- Discovery is bounded by GitHub’s search API, which is rate-limited and does not return everything. What discovery truncated is logged rather than hidden, but the population is a large sample of the public ecosystem, not the whole of it.
A correction published with the first edition
Preparing this census turned up a defect in the index that produced it. SkillWorks carried a missing-references flag — a skill naming a bundled file that is not in its repository — and it fired on 139,623 listings, 40.2% of every skill in the index. It was wrong roughly seven times in eight, from three bugs in one regular expression:
- The extension alternation put
jsahead ofjson, and JavaScript alternation is first-match — so everypackage.jsonwas captured as a missingpackage.js, and everyres.json(data)inside a fenced code block became a missing file calledres.js. 12,178 and 6,946 listings respectively. - Nothing scoped the match to the skill’s own bundle, so the most-reported “missing files” in the entire index were the framework names
Next.js(21,014) andNode.js(19,383), the skill’s ownSKILL.md(27,002), andCLAUDE.md(11,371) — a file that lives in the user’s project and never in the bundle. - A reference written
./run.shcould never resolve against the repository tree, so 1,498 listings were reported missing a file that was sitting right there.
Corrected, 18,657 skills — 5.37% — name a bundled file that is genuinely absent. The flag is a score deduction and was never a load verdict, so the 9.70% headline is unaffected: it comes from the fatal causes in the table above and from nothing else. The fix is in the open-source scraper these indexes share and lands in the index at the next nightly rebuild.
This is on the page rather than in a changelog because an index that publishes other people’s broken metadata has to publish its own.
The data
Published in full under CC BY 4.0, including every failing row, so the headline can be recomputed by anybody who wants to check it.
- census.json — every aggregate on this page, plus the exact rule that decides a failure.
- broken-listings.csv — 43,199 rows, one per failing listing, with its repository, path and the cause that condemned it.
- listings.csv.gz — the full population, 445,348 rows, on the archived record.
- The measurement vocabulary — what load rate, drift, shipping status and skill decay mean here, so a citation carries a definition with it.
Citing it
The dataset is archived on Zenodo with a permanent DOI, so a citation survives this site.
- This edition
- doi.org/10.5281/zenodo.21936490 — edition 2026.1, scraped 2026-08-14. Fixed forever; cite this one when you quote a figure.
- All editions
- doi.org/10.5281/zenodo.21936489 — always resolves to the newest census. Cite this one when you mean “the current figures”.
- Reference
- Kynth Studios (2026). The State of Agent Tooling 2026.1 — a structural census of the Claude Code artefact ecosystem. Zenodo. https://doi.org/10.5281/zenodo.21936490
Licensed CC BY 4.0 — reuse it, including commercially and including by the catalogues this masthead competes with. Attribution is the only condition.
