DEV Community

Cover image for Claude Code subagents fail 2.8x more often than skills
Isaiah Kim
Isaiah Kim

Posted on Originally published at kynth.studio

Claude Code subagents fail 2.8x more often than skills

Publish a subagent with no description line and nobody's Claude Code will ever hand it a task. Your file sits in the repository looking correct, it parses, it installs, and the one sentence the agent reads to decide when to delegate is absent, so there is nothing to route on.

That failure is silent by construction. A run that never selects a subagent does not error. It does the work inline, finishes, and reports that it finished. The self-report is accurate about the outcome and says nothing about the file you spent an afternoon writing.

What the census found

On 2026-08-14 I read every Claude Code skill, subagent, plugin and marketplace repository that could be found on GitHub and skills, from source, and checked one thing: whether an agent runtime could register the file at all. Not whether it is good, not whether it is popular. 445,348 artefacts, of which 43,199 fail, 9.7 percent.

The aggregate hides the finding. Subagents fail at 21.9 percent, skills at 7.9 percent, and the gap is 2.8 times.

Kind Read from source Failing Rate name required description required
Subagent 71,430 15,669 21.9% Yes Yes
Skill 347,382 27,398 7.9% No, falls back to the directory name Recommended
Plugin 20,212 33 0.16% Not a frontmatter question, plugin.json must parse Not specified
Marketplace 6,324 99 1.6% Not a frontmatter question, the manifest must list at least one plugin Not specified

The failure causes, counted across all four kinds: 38,183 files whose settings block does not parse, 4,119 subagent files with no name, 1,799 subagent files with no description. A file can carry more than one, so those do not sum to the total.

Claude Code subagents fail 2.8x more often than skills, code

The same careless file is a working skill and a dead subagent

The reason subagents fail three times harder is not that the people writing them are worse. It is a difference between two pages of documentation.

Anthropic's subagent reference says "Only name and description are required" and marks both Required: Yes. The skills reference says "All fields are optional. Only description is recommended", marks name Required: No, and defaults it to the directory name. So one hurried block of settings at the top of a markdown file loads cleanly as a skill and dies as a subagent, and the author has no way to tell which of the two they wrote unless they read both pages.

That asymmetry is the whole 2.8x. It is a specification difference, not a culture difference.

A verdict that rests on someone else's sentence

Here is the part that made me change how the index stores its own rules. The pass or fail decision is exactly this, from src/data/census.json:

{
  "always": ["broken-frontmatter", "broken-manifest", "empty-marketplace"],
  "subagent_only": ["no-name", "no-description"],
  "note": "works=false is exactly these flags and nothing else. Every other flag is a score deduction, not a load verdict."
}
Enter fullscreen mode Exit fullscreen mode

no-name and no-description sit under subagent_only for one reason: two sentences on claude say so. If Anthropic revises either page, 15,669 subagent failures stop being failures and the headline number moves, without a line of my code changing.

So both sentences are stored in the product's claim register with a probe, which is the literal substring that has to still be present on the page. ops/qa/facts-gate.mjs --verify refetches both references and fails when a probe stops matching. Two dates are kept apart on purpose: asOf is the day a person read the source, lastVerified is the day a machine last confirmed the probe is still there, and --stamp may only move the second one. An HTTP 200 is not somebody having read the rule. Both probes last matched on 2026-09-04.

What I changed

I stopped treating a measured number as the thing that decays and started treating the rule underneath it as the thing that decays. The figures on the census page are my own measurements, so the only thing that can make them wrong is a bug in the export. The definition of "works" belongs to somebody else's documentation, and that is now the part with a probe on it and a gate that fails when it moves.

Toolproof publishes nine indexes that read AI agent tooling from source and record what they find, with the method for each one stated on the page. The census is free, CC-BY-4.0, and every figure above comes out of it.

A subagent with no description line never gets picked, so the rule that decides that is now stored with a probe and rechecked.

https://toolproof.kynth.studio/dv

Top comments (1)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.