Anthropic ships five skill plugins, not one, and its own ~100-token figure fits the one I could measure
anthropics/skills has no plugin.json, so nobody installs the repository: its marketplace offers five separate plugins. Across fifty runs the only plugin big enough to measure came in at 102 tokens per skill against a documented ~100. Not one of the other four gets a figure: three are single skills this harness pre-registered as below its resolution, and one of those prices out negative.
anthropics/skills is Anthropic’s own public repository of Agent Skills. This site has already held Anthropic’s documented per-skill figure against six trending third-party packs. This holds it against the vendor’s own, and the answer is more about my instrument than about Anthropic.
You cannot install it, and that is the first finding
There is no plugin.json in that repository. There is a .claude-plugin/marketplace.json, and it offers five separate plugins, each naming an explicit list of skills:
| Plugin | Skills | Median description |
|---|---|---|
example-skills |
12 | 288 chars |
document-skills |
4 | 835 chars |
discernment-nudge |
1 | 983 chars |
claude-api |
1 | 1,068 chars |
claude-academy-guide |
1 | 1,176 chars |
So “what does anthropics/skills cost” has five answers. Nobody installs the repository; they install one of these.
One thing that is not a discrepancy. The repository carries 20 SKILL.md files against 19 plugin entries. The extra is template/, a scaffold for writing your own skill. This site has previously found a pack shipping fewer skills than its repository contained, and this is not that: template/ is correctly excluded, and I checked before reaching for the familiar story.
What the documentation says
From the Agent Skills page, read on 2026-08-20:
| Level | When loaded | Token cost | Content |
|---|---|---|---|
| Level 1: Metadata | Always (at startup) | ~100 tokens per Skill | name and description from YAML frontmatter |
Only Level 1 is charged whether or not you use the skill, so it is the one that matters here.
Only one of the five gets a figure
Ten rounds each, on Claude Code 2.1.234, no skill ever invoked.
| Plugin | Skills | Per skill | Against ~100 |
|---|---|---|---|
example-skills |
12 | 102 | 1.0x |
document-skills |
4 | 207 to 257 | 2.1x to 2.6x |
discernment-nudge |
1 | −578 to 319 | not measurable |
claude-api |
1 | 272 to 470 | not measurable |
claude-academy-guide |
1 | 199 to 397 | not measurable |
The documented figure is almost exactly right for the one plugin big enough to check. 288 characters is an ordinary skill description, twelve skills is enough signal, and 102 against ~100 is as close as this instrument resolves.
The other three are not near-misses, they are non-measurements. A single skill’s cost is smaller than this harness’s own round-to-round noise. discernment-nudge ranges from minus 578 to plus 319 tokens, and installing a skill cannot make a session smaller. That range containing zero is the tell.
document-skills sits in between: four skills, a tied mode, so it gets a range and no point figure.
I had published three of those numbers, and I should not have
An earlier draft of this post put “102 to 470” in its title and gave discernment-nudge, claude-api and claude-academy-guide point figures of 319, 470 and 397.
The harness that produced this data says, in a docstring written before the first round ran:
three single-skill plugins are BELOW the resolution of this instrument and no point figure will be published for them, only the observed range
I wrote that, then published the point figures anyway. What happened in between is that I found a better estimator mid-run, its readings looked tight, and I let that retroactively relax a prior set before I saw any data. That is the exact thing writing the prior down is supposed to prevent. A better estimator found after the fact is a reason to run a new pre-registered test, not to reinterpret the one already running.
The ranges above are what the pre-registration promised, and they are why it was right.
Then the story I was going to tell fell over
The tidy version of this post was going to be: the documented figure fits ordinary descriptions and is three to five times low for Anthropic’s own long ones, so description length is what costs you.
That story rests on the three figures I just withdrew. So I measured description length directly instead, on 2.1.235, forty skills per cell, sweeping across the documented maximum:
| Description | Tokens, 40 skills | Per skill |
|---|---|---|
| 512 chars | 6,320 | 158 |
| 900 chars | 7,056 | 176 |
| 1,024 chars | 7,164 | 179 |
| 1,200 chars | 6,862 | 172 |
| 1,600 chars | 6,957 | 174 |
Tripling a description from 512 to 1,600 characters costs 637 tokens across forty skills. That is 0.015 tokens per character, against the 0.276 this site measured below 300 characters. Above roughly 500 characters, description length is close to free.
So the long-description plugins were never going to cost three to five times more for that reason. The apparent trend was an artefact of cells too small to measure, arranged in an order that happened to look like a slope.
This site has published something adjacent: that the per-character rate falls to 0.164 between 300 and 800 characters and reverses slightly between 800 and 1,500. This sweep does not re-verify that, and an earlier draft of this post claimed it did. Its lowest cell is 512 characters, so it never spans the 300-to-800 interval at all, and where the two do overlap it measures 0.047 rather than 0.164. What it establishes is its own thing: flat above 512, on this release, at forty skills.
Two of Anthropic’s own skills exceed Anthropic’s documented maximum
The same documentation page states, under Skill structure:
description: Must be non-empty, Maximum 1024 characters
claude-api ships a 1,068-character description and claude-academy-guide ships 1,176. Both are over.
Those two numbers were wrong when this post first went up, by three and two characters. The parser measuring them was a regex that did not understand YAML block scalars: description: |- and description: > put the value on indented lines, and the regex counted the block indicator and every line’s indentation as description text. It is now a YAML parse. The published medians on the rest of this site were audited against a real parse and none of them moved, because the other packs use no block scalars.
I cannot tell you whether that matters, and the honest reason is interesting. If Claude Code truncated descriptions at 1,024 characters, the 1,200 and 1,600 cells above would cost the same as the 1,024 cell. They do, within 302 tokens. But so does the 900 cell, which is below the limit and cannot be explained by truncation at it. The cost curve goes flat before the boundary, which hides the boundary. This sweep detects no knee at 1,024 and cannot rule one out either.
What can be said: the limit is documented under “Skill structure” alongside the name rules, two skills in the vendor’s own repository are past it, and whatever the consequence is, it does not show up as tokens.
The control that was making things worse
Every measurement on this site pairs against a floor re-measured in the same round. That removes noise when the noise is common to both calls. It is actively harmful when each call draws its own.
In the plugin run the floor itself returned three distinct values across ten rounds. Subtracting an independently noisy floor from a stable measurement adds its variance:
| Cell | Paired-delta spread | Absolute spread |
|---|---|---|
document-skills |
1,095 | 198 |
claude-api |
1,293 | 198 |
| 1000-skill curve cell | 897 | 0 |
That last row is from a separate re-measurement, and it is the clearest case: eight rounds returned the identical absolute context, while the paired delta of those same eight rounds spans 897 tokens.
The floor is the whole problem, and that row proves it: across those same eight rounds the floor cell alone spanned 897 tokens, while the 1000-skill measurement did not move at all. The spread in the paired delta is the floor’s, borrowed.
So the plugin corpus publishes two estimators side by side for all five cells: the mode of the per-round deltas, and the mode of the absolute minus the mode of the floor. They never disagree once. Both produce a value in three of the five and agree in all three; in the other two one estimator refuses a tied mode and the other does not, which is a missing value rather than a conflicting one. Choosing the mode over the mean is what protected those numbers. An earlier version of this paragraph claimed agreement across seven cells in two corpora; the second corpus never computed the second estimator, so there were only ever five.
No published figure on this site is withdrawn on the strength of this. What the pairing costs is confidence, not the value.
What to actually do with this
Do not price a plugin by its skill count alone. example-skills at twelve skills costs more in total than any of the single-skill plugins, and it is the one most people would install.
Install the plugin, not the repository. These five are separate. If you want PDF and Word handling you want document-skills, four skills, not the twelve in example-skills.
Keep descriptions short anyway, and not because of the bill. Above 500 characters the tokens are close to free, so cost is the wrong reason to trim. The right reason is that the text stops arriving: measured separately, a description stops reaching the model’s context between 1,400 and 1,550 characters, with no error and no warning. Cheap and absent are not the same thing, and an earlier draft of this post told you to stop worrying about length on the strength of the cost alone. That was wrong.
What this does not settle
Four of the five plugins have no figure here. Three are single skills refused by the pre-registration, and document-skills is refused for a tied mode. That is the finding, not a gap in it. A single skill sits inside this harness’s noise, which this site has now measured three separate times.
The description sweep is one skill count and one prose shape. Forty skills, descriptions cut from ordinary English. This site has measured that a description of code or symbols tokenises differently and that per-skill cost collapses somewhere between 200 and 400 skills; neither is tested here.
The 1,024 limit is undecided, for the reason given above.
Two releases. The plugin runs are 2.1.234 and the description sweep is 2.1.235, because Claude Code shipped between them. They are reported separately rather than pooled.
Controls
Reused, not re-implemented. Both harnesses import their fixture generators from the harnesses that produced this site’s published figures, so the numbers are comparable by construction. Re-implementing a fixture produced a phantom 27% drift here two days earlier, which is why this is done by import and the emitted file is asserted byte for byte.
Manifest-driven fixture. Each plugin installs exactly the skills its manifest names, counted back off disk every run.
Arrival control. Every run’s reply must be exactly OK, and the assembler asserts it before building. On third-party skill descriptions entering context that doubles as a prompt-injection check. Unlike most corpora on this site, this one publishes that assertion rather than the replies themselves: per-round context is in the file, the per-run reply record is not, so this control is verifiable only to the extent you trust the assembler that enforced it.
Isolation. --setting-sources project asserted onto the command line.
Nothing invoked. A trivial prompt, no skill body ever executed. Only the listing is priced.
Security scanned before running. No install hooks, no postinstall scripts, no credential access. Every pattern that matched was read in context and was a false positive: ANTHROPIC_API_KEY appears in README prose, run_eval( and .exec( are a function name and a regex method, and the outbound hosts are XML namespace URIs.
The fifty plugin runs are in anthropic-plugins-2-1-234.json. The description sweep is in desc-limit-2-1-235.json.