← blog heidar rudyi ● blog
A clay panel of toggle switches on black: most of them flipped down and dull lilac, only three flipped up and glowing lime-yellow
Installed, listed, and never once flipped on · AI illustration
/ notes from the court · agents

I audited 25,693 public Claude Skills. 37% never say when to use them.

agents august 2026 · github-wide 19 min read by heidar rudyi

On 16 August 2026 I pulled every SKILL.md file I could find on GitHub — 203,973 of them across 3,703 repositories — and audited a capped random sample of 25,693 against the official Agent Skills specification. The result is not that these skills are badly written. It is that a large share of them cannot be selected in the first place: 37.5% have a description that never says when the skill applies, and the description is the only thing the model sees when it decides. A further 17.8% fail the published spec outright. And the signal everyone sorts by — stars — predicts none of it: the correlation between a repository's popularity and its skill being valid is r = −0.02. Effectively zero.

25,693
skill files audited
37.5%
never say when to use them
17.8%
fail the official spec
−0.02
correlation: stars vs valid
Straight to the finding that matters ↓
the short version

A skill that cannot be triggered is not a skill. It is a document.

own research, 16 august 2026 · method disclosed · raw counts in the piece

definition · the short answer

A Claude Skill is a folder with a SKILL.md file in it: YAML frontmatter that says what the skill is and when it applies, followed by markdown instructions the model reads once it decides to use it. The format is an open standard — Agent Skills — and it works across several AI tools, not only Claude Code.

The mechanism that matters is progressive disclosure, and it has three levels. At startup, only the name and description of every installed skill are loaded — roughly a hundred tokens each. The body of SKILL.md loads only once the model decides the skill is relevant. Bundled files under scripts/, references/ and assets/ load later still, if at all.

Read that again, because the entire finding of this piece sits inside it. The decision to use your skill is made from the description alone. Everything you wrote in the body — the careful steps, the edge cases, the examples — is invisible at the moment of selection. If the description does not say when the skill applies, the body never gets read. The skill is installed, it is listed, it looks fine, and it does nothing.

01

How I collected the corpus

The method first, because every number after it is worth exactly as much as the rule that produced it.

I did not want a hand-picked list, because hand-picked lists are how you end up describing the ten skills someone already liked. I wanted the population.

Using the GitHub API I searched five ways — the topics claude-skills, claude-skill and agent-skills, plus repository name and description matches, plus repositories whose README mentions SKILL.md — and collected 4,313 repositories. For each one I fetched the full file tree and recorded every path ending in SKILL.md. That produced 203,973 skill files across 3,703 repositories.

Downloading all of them would have been both slow and dishonest. The distribution is brutally skewed: the median repository holds 2 skill files, while the largest single repository holds 23,793. Four mega-dumps alone would have supplied a third of the corpus and the whole study would really have been a study of those four repositories.

So I capped the sample at 20 files per repository, chosen at random inside each repo with a fixed seed, which yields 25,693 files from all 3,703 repositories — 12.6% of the population, with every repository represented and none able to dominate. Twelve files failed to download. That is the corpus behind every number below.

>
Data card: seven failure modes measured across 25,693 public Claude Skills — 37.5 percent with no trigger in the description, 31.4 percent using fields outside the six-field spec, 27.2 percent with a duplicated name, 17.8 percent failing the spec outright, 11.3 percent whose name does not match the folder, 7.2 percent over 500 lines, 1.5 percent re-publishing a first-party skill
Seven ways a skill fails before anyone gets to judge what is inside it.
What this corpus is not. It is GitHub only. Skills sold privately, shipped inside plugins, or kept in company repos are not here. It also cannot tell you whether a skill works — only whether the model can find it and whether it matches the published format. Those are the two questions that come before "is it any good", and almost nobody checks them.
02

37.5% of descriptions never say when to use the skill

The specification is explicit about what a description is for. It "should describe both what the skill does and when to use it" and "should include specific keywords that help agents identify relevant tasks". Anthropic's own engineering write-up puts it plainly: pay special attention to the name and description, because "Claude will use these when deciding whether to trigger the skill".

I tested every description for any language that states a condition — use when, when the user, whenever, invoke when, apply when, trigger, and a dozen more patterns. Generous by design: a single match counts as a pass.

9,647 of 25,693 descriptions — 37.5% — contain no such cue at all. They describe a capability and stop. Here are real ones, quoted verbatim from the corpus, from repositories with tens of thousands of stars:

  • "Control Eight Sleep pods (status, temperature, alarms, schedules)."
  • "Drive and script tldraw offline canvases with an agent."
  • "Debug Python with pdb, breakpoint(), post-mortem inspection, and debugpy remote attach."
  • "Launch the interactive web dashboard to visualize a codebase's knowledge graph"
  • "Replace with description of the skill and when Claude should use it."

The last one is not a joke. It is the untouched placeholder from a template, sitting in a repository with 169,662 stars, published as a skill. Nobody filled it in, and nothing in the tooling complains — because none of this is enforced.

The others are worse in a subtler way, because they look fine. "Debug Python with pdb" is accurate, specific, and useless at selection time: it names a tool, not a moment. Compare it with a description from the same corpus that does the job — "Use when about to claim work is complete, fixed, or passing, before committing or creating PRs". That one tells the model exactly which instant in a conversation it belongs to.

Data card comparing two versions of the same skill description: the failing one reads
The same skill, twice. Only the second one can ever be chosen.

There is a measurable tell. Descriptions with a trigger cue run to a median of 343 characters; those without run to 161. The failure is not subtlety. It is that people stopped writing after the first clause — they wrote a label, not an instruction. And the limit is nowhere near binding: the spec allows 1,024 characters, Claude Code truncates the listing at 1,536, and the median description in the wild is 265. There is roughly four times more room than anyone is using.

9,647 descriptions say what a skill does. Not one of them says when.
Histogram of description length across 25,693 skills against the 1,024-character limit, marking 161 characters for descriptions without a trigger, 265 as the overall median and 343 for descriptions that state a trigger
The limit is 1,024 characters. The median is 265. Almost nobody runs out of room.
03

Stars tell you nothing about whether a skill is valid

This is the one finding I did not expect — and the only one that changes what you do tomorrow.

This is the finding I did not expect, and it is the one with the most practical consequence, because stars are how everyone picks.

I split the corpus into four popularity bands and measured two things in each: the share failing a hard requirement of the spec, and the share whose description gives the model nothing to trigger on.

repository starsskill filesfail the specno trigger cue
0–91,0298.8%36.3%
10–997,3347.6%38.0%
100–9998,7838.3%38.6%
1,000+8,54710.9%36.3%

The bands are flat, and the most popular band is the worst on spec compliance. Across the whole corpus the correlation between a repository's star count and its skill being valid is r = −0.0226; between stars and having a trigger cue, r = −0.0358. Both are indistinguishable from no relationship at all.

Data card: four GitHub popularity bands with their spec failure rates — 8.8 percent at 0 to 9 stars, 7.6 percent at 10 to 99, 8.3 percent at 100 to 999, and 10.9 percent at 1,000 or more stars, with correlation r = minus 0.0226
Four popularity bands, one flat line. The most-starred band is the worst of them.

This is not mysterious once you see the mechanism. Stars measure whether people liked the idea of a repository — usually a curated list, a demo, or a name that spread. Nobody stars a repository after checking that its frontmatter validates. Large repositories also tend to be collections, assembled fast and in bulk, which is exactly the condition under which template placeholders survive.

The practical version: a skill from a 40,000-star repository is, if anything, slightly more likely to be broken than one from a repository with nine stars. Popularity is a signal about the packaging. It carries no information about the file you are about to install.

A skill from a 40,000-star repository is, if anything, slightly more likely to be broken than one from a repository with nine.
04

17.8% fail the specification outright

The Agent Skills spec is short and testable. name is required: 1–64 characters, lowercase letters, digits and hyphens only, no leading or trailing hyphen, no consecutive hyphens, and it must match the parent directory name. description is required: 1–1,024 characters, non-empty. Everything else is optional. A reference validator, skills-ref validate, checks exactly this.

Run those rules across the corpus:

hard failurefilesshare
name does not match its directory2,90511.3%
required name missing1,2034.7%
required description missing1,0644.1%
no frontmatter, or it is never closed9483.7%
name breaks the format rules7583.0%
description over 1,024 characters2721.1%
any hard failure4,58417.8%

The directory-name rule accounts for most of it, and it is the one people find pedantic until it bites: rename a folder, forget the frontmatter, and the skill quietly stops resolving the way you expect. Set that rule aside entirely and 9.0% still fail — 2,306 files that are missing a required field, have no readable frontmatter, or carry a malformed name.

Then there is the frontmatter itself. The spec defines exactly six fields: name, description, license, compatibility, metadata, allowed-tools. 31.4% of files use at least one field outside that set. Claude Code accepts a number of its own extensions, so many of those are harmless there — but 15.6% use a field that Claude Code rejects too, producing the error "Unexpected key(s) in SKILL.md frontmatter" on the distribution paths that validate strictly, such as claude.ai uploads and the Skills API.

The most common inventions are revealing: version (2,917 files), argument-hint (1,736), tags (1,012), author (988), category (623), triggers (531). People are reaching for a package manifest. The format is not one. A triggers: field in particular is wishful thinking — nothing reads it, and the 531 authors who wrote one had the right instinct and put it in a place where no model will ever look. That instinct belongs in the description.

05

A quarter of the ecosystem is the same skills, over and over

Names repeat heavily. 27.2% of files carry a name that at least one other file in the corpus also uses. The leaders read like a census of what people believe an agent should do first:

skill-creator 81 · pdf 53 · code-review 46 · frontend-design 42 · docx 36 · xlsx 35 · pptx 32 · handoff 30 · setup 27 · mcp-builder 27

the same skill, written again and again · 25,693 files
skill-creator81
a skill for writing skills — Anthropic ships one
pdf53
first-party, in the box since launch
code-review46
the most reinvented idea in the corpus
frontend-design42
first-party
docx36
first-party
handoff30
passing context between sessions
Counted across the sample. Blue marks a name that already ships with the product — 377 files, 1.5% of the corpus, re-publish a skill the user already has.

Look closely at that list. pdf, docx, xlsx, pptx, skill-creator, mcp-builder, canvas-design, frontend-design, brand-guidelines, webapp-testing — these are Anthropic's own first-party skills, the ones that ship in the box. 377 files in the corpus, 1.5%, are re-publications of a skill the user already has.

Bodies duplicate less than names: 95.2% of skill bodies are unique after whitespace normalisation, and 8.3% are byte-identical copies of another file, with the most-copied body appearing 21 times. Descriptions duplicate more — 13.1% are word-for-word identical to another skill's description, which is how you end up with two skills competing for the same trigger and neither winning cleanly.

So the ecosystem is not mostly plagiarism. It is mostly parallel invention: thousands of people writing their own code-review skill, independently, at the same time. Which is fine, except that it means the marketplace signal you are shopping in is dominated by the most obvious ideas, not the most useful ones.

06

Size: most skills are small, and the big ones are the problem

Both the spec and the Claude Code documentation give the same guidance: keep SKILL.md under 500 lines, keep the body under roughly 5,000 tokens, and move detail into referenced files that load only when needed.

The median skill is comfortable: 151 lines, 6,542 characters, 13 headings. The distribution:

under 50 lines 14.2% · 50–149 35.3% · 150–499 43.3% · 500 or more 7.2%

1,825 files exceed the 500-line guidance and 2,208 carry a body over roughly 5,000 tokens; the largest is 12,191 lines and 391,575 characters. Those are not skills, they are manuals that happen to load in one shot — and every token of them enters the context the moment the skill triggers, whether the task needed it or not.

At the other end, 3.4% have a body under 200 characters: a frontmatter block and a stub. And 963 files have no frontmatter fields at all. The median file carries just 3 frontmatter fields.

The healthy shape is unglamorous: a real description, 150 to 300 lines of instruction, and the reference material pushed into references/ where it costs nothing until it is needed. Most of the corpus is already there. The tail in both directions is where the damage sits.

07

The market is ten months old, and it is still accelerating

Repository creation dates put a hard edge on when this started. Before September 2025 the counts are noise — a handful of repositories a month, most of them unrelated projects that later added a skill. Then:

Oct 2025 106 · Nov 98 · Dec 119 · Jan 2026 339 · Feb 386 · Mar 561 · Apr 529 · May 433 · Jun 403 · Jul 308

October 2025 is when Anthropic shipped Agent Skills. Within five months the ecosystem was creating more than 500 new repositories a month, and it has stayed in the hundreds since.

It is also alive rather than abandoned, which surprised me given how much of it is broken. 55.8% of the files in the corpus were last pushed in August 2026 — the month I collected them — and 71.9% within the last two months. This is not a graveyard of weekend experiments. It is an active ecosystem that has simply never been checked against its own specification.

Bar chart of new skill repositories created per month: a handful before September 2025, then 106 in October 2025 when Agent Skills shipped, rising to a peak of 561 in March 2026 and staying in the hundreds through July
Agent Skills shipped in October 2025. The market has not slowed since.
08

Write a description that actually triggers

Ninety seconds per skill, and it is the difference between a file that runs and a file that sits there.

Everything above reduces to one repair, and it takes about ninety seconds per skill.

A description has two jobs, and most people do only the first. Job one: what this does. Job two: the moment it applies — stated in the words a user would actually type, not in the words you would use to categorise your own work.

what most people write

description: Generates social media content.

Names a capability. Matches nothing a person says. The model has no moment to attach it to, so it never loads the body — and you conclude the skill "doesn't work".

what gets selected

description: Turns a blog post, transcript or product page into platform-ready posts with hooks and hashtags. Use when the user asks for social posts, captions, a LinkedIn or Instagram version of something, or says they need to promote a piece of content.

Capability first, then four real phrasings a person would use. 251 characters — a quarter of the allowance.

Four rules that follow directly from the data:

  1. Put a "use when" clause in every description. 37.5% of the corpus does not, and that alone separates a skill that runs from one that sits there.
  2. Write the trigger in the user's words, not yours. The model matches against what someone typed. "Debug Python with pdb" describes the tool; "use when a test fails and the traceback is not enough" describes the moment.
  3. Use the room you have. The median description is 265 characters against a 1,024 limit. Three or four concrete trigger phrases cost you nothing and are the whole game.
  4. Then validate. Run skills-ref validate, or paste the file into the checker below. Nine percent of public skills fail a rule that takes one second to test.
paste a SKILL.md · nothing leaves your browser

Check your own skill against the spec

09

How to judge someone else's skill in sixty seconds

If you are installing rather than writing, the corpus suggests a short checklist. It is deliberately not "check the stars", because stars carry no signal here.

check 01
Read the description on its own
Cover the repository name and the README. Does it tell you when the skill fires? If it does not, it will not fire for you either — that is 37.5% of everything published.
check 02
Match the name to the folder
The spec requires them to be identical. 11.3% are not, and a mismatch is a reliable marker of a file nobody ever validated.
check 03
Look at the size, both ends
Over 500 lines and the whole file enters your context on every trigger. Under about 30 lines and it is usually a stub with nothing in it.
check 04
Check the box before you shop
1.5% of published skills are re-releases of ones you already have — pdf, docx, xlsx, skill-creator and the rest ship with the product.
check 05
Scan the frontmatter for invented fields
triggers:, tags: and version: do nothing at all. Their presence tells you the author never read the spec — which tells you what to expect from the rest of the file.
check 06
Then run it through a validator
Either skills-ref validate from the reference library, or the checker further up this page. It takes one second and catches the 9% that fail a hard rule of the specification.

None of this measures whether the instructions inside are any good. That still takes reading. But it removes the files that were never going to run, and on this evidence that is somewhere between a fifth and a third of what is on offer.

what I actually do

I build the skills I sell, and I run the audit above on my own before anyone else sees them.

Three of mine are production tools for image, video and directing work — each one ships with a briefing flow that learns how you work before it does anything. If you want the same treatment applied to your brand rather than your tooling, the audit is where that starts.

Get the audit → or see the work →
frequent questions

Questions people actually ask

What are Claude Skills?

A skill is a folder containing a SKILL.md file: YAML frontmatter with a name and a description, followed by markdown instructions. The description is loaded at startup so the model knows the skill exists; the instructions load only when it decides to use it. Optional scripts/, references/ and assets/ folders load later still. The format is an open standard called Agent Skills and works in more than one AI tool.

Why doesn't my Claude Skill trigger?

Almost always the description. It is the only thing the model sees when deciding, and 37.5% of public skills describe a capability without ever saying when it applies. Rewrite it as "what it does" plus "use when …" with two or three phrasings a user would really type. If it still does not fire, check that the frontmatter name matches the folder name — 11.3% of public skills fail that rule.

How long should a description be?

The spec allows 1,024 characters and Claude Code truncates the combined description at 1,536. The median public skill uses 265. Descriptions that contain a trigger cue run to a median of 343 characters versus 161 for those that do not. Somewhere between 250 and 500 characters is comfortable: capability, then concrete trigger phrases.

How long should SKILL.md be?

Under 500 lines — that is the stated guidance in both the specification and Anthropic's documentation, with the body kept under roughly 5,000 tokens. 7.2% of public skills exceed it. Everything above that line loads into context on every trigger, so long reference material belongs in references/, which loads only on demand.

Are skills with more GitHub stars better?

Not on any measure tested here. Across 25,693 files the correlation between repository stars and spec validity is r = −0.02, and between stars and having a usable trigger, r = −0.04. The most-starred band (1,000+) had the highest hard-failure rate at 10.9%. Stars measure interest in the repository, not the quality of the file inside it.

What fields can go in the frontmatter?

Six, per the spec: name, description, license, compatibility, metadata and allowed-tools. Claude Code adds its own extensions such as when_to_use and disable-model-invocation. Fields like version, tags, author or triggers are not read by anything — 31.4% of public skills use at least one field outside the spec.

Is there a validator?

Yes — skills-ref validate ./my-skill, from the reference library published alongside the specification. It checks frontmatter validity and naming conventions. The checker in this article runs the same class of rules in your browser without uploading anything.

How many public Claude Skills exist?

On 16 August 2026 I found 203,973 SKILL.md files across 3,703 public GitHub repositories, from 4,313 repositories searched. The real number is higher — that count excludes private repositories, skills bundled inside plugins, and anything sold outside GitHub.

When did Claude Skills launch?

Agent Skills arrived in October 2025, and the repository-creation data shows it clearly: 106 new skill repositories that month against a handful per month before. Creation peaked at 561 in March 2026 and has stayed in the hundreds since. 55.8% of the files in this corpus were last updated in the month they were collected.

sources