Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when authoring an Agent Skill SKILL.md: follow the agentskills.io spec — WHEN: keyword with quoted triggers, lowercase-hyphen name, 60-word description, references/ and scripts/ dirs.
.claude/skills/agentskills-spec-authoring/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 97% | 229 |
| gemini-3.1-pro-previewlowest | 86% | 7 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.5-flashbest | +100% | — | 0% | 24 | 86d ago |
| gemini-3.6-flash | +59% | +96% | 0% | 22 | 54d ago |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | — | — |
| case-14 | ✗→✓ | ▲ Improved | — | — |
| case-08 | ✗→✓ | ▲ Improved | — | — |
| case-13 | ✗→✓ | ▲ Improved | — | — |
| case-12 | ✗→✓ | ▲ Improved | — | — |
Every Agent Skill's SKILL.md must match the agentskills.io specification exactly. This governs the YAML frontmatter shape, the trigger-phrase keyword, the directory layout, the reference-linking form, and the token budgets. Apply whenever you create, edit, or review a SKILL.md. The spec's choices are arbitrary and differ from the generic defaults a model reaches for — match them precisely.
name and description. Nothingelse is required.
name:a-z, 0-9, -). No spaces, nounderscores, no capitals.
-.--).claude- or anthropic-.description:>-) or blockscalar (|).
WHEN:.< >) anywhere in the frontmatter.WHEN: followed by concrete trigger phrases, eachwrapped in double quotes: WHEN: "create a skill", "review a skill PR".
WHEN: is the preferred trigger marker. USE FOR: is accepted but not preferred; do notreach for it by default.
DO NOT USE FOR: clause. The sole exception: a specialized skill that sharestrigger phrases with a broader skill needs DO NOT USE FOR: to avoid the broader skill capturing its prompts. Outside that disambiguation case it causes keyword contamination.
license, compatibility, and a metadata map (e.g.metadata.author, metadata.version). They are optional — omit when unused, never invent others.
SKILL.md. Not README.md, not skill.md, notSkill.md.
references/ directory. Executable code goes in ascripts/ directory. Output templates go in templates/; data files in assets/. Use those exact directory names — never docs/, lib/, bin/, or src/.
references/ use lowercase-hyphen names (api-reference.md, notAPIReference.md).
references/detail/more/file.md.[API notes](references/api.md), never[API notes](references/api/). A folder link does not load any content.
README.md:[Recipes](references/recipes/README.md).
[the API reference](references/api.md),not [references/api.md](references/api.md).
once (anchors are hints only), and nothing is cached between requests — so write each reference file as a self-contained unit.
SKILL.md: target under ~500 tokens (soft), hard ceiling ~5000 tokens. Limits are intokens, not words.
references/*.md: under ~1000 tokens each (soft), ~2000 hard. When a reference exceeds thelimit, split it into a folder with a README.md entry point.
yaml# BEFORE — generic default name: PDF_Table_Extractor
yaml# AFTER — agentskills.io-compliant (lowercase, hyphens, matches directory) name: pdf-table-extractor
yaml# BEFORE — folded scalar, prose "Use it when", no WHEN: keyword description: >- This skill helps users extract structured data and tables from PDF files. Use it whenever someone needs to parse or read a PDF document.
yaml# AFTER — inline double-quoted, WHAT first, then WHEN: with quoted phrases description: "Extracts structured data and tables from PDF files. WHEN: \"parse a PDF\", \"extract tables from PDF\", \"read a PDF document\"."
yaml# BEFORE — vague "Use for" prose, unquoted phrases description: "Reviews Terraform plans. Use for checking risky changes and drift."
yaml# AFTER — literal WHEN:, each phrase double-quoted description: "Reviews Terraform plans for risky changes. WHEN: \"review a terraform plan\", \"check for risky changes\", \"detect drift\"."
# BEFORE
my-skill/README.md# AFTER
my-skill/SKILL.md# BEFORE
my-skill/docs/api.md
my-skill/bin/helper.sh# AFTER
my-skill/references/api.md
my-skill/scripts/helper.shmarkdown<!-- BEFORE — folder link (loads nothing) and path-as-text --> See [references/recipes/](references/recipes/) for options.
markdown<!-- AFTER — file link with descriptive text --> See [the recipes index](references/recipes/README.md) for options.
# BEFORE — one 1500-token file
references/large-guide.md# AFTER — split into a folder with a README entry point
references/large-guide/README.md # overview + links
references/large-guide/setup.md
references/large-guide/usage.mdbroad skill both match the same prompt (e.g. both match "deploy to Azure"), the narrow skill must keep a DO NOT USE FOR: clause or the broad skill steals its prompts. Run the routing/integration tests before removing such a clause.
USE FOR: is valid, just not preferred. Existing skills using USE FOR: arecompliant; prefer WHEN: for new work and cross-model compatibility.
name. If the directory is my-skill, thename field must be my-skill — fix whichever is wrong, but they must agree.
[guide](references/guide.md#setup) still loads theentire file; never rely on partial loading.
description keyword-rich but short;front-load the most distinctive trigger phrases since not all skills stay visible under token limits.
name: My-Skill or name: my_skill; always name: my-skill.>-) or block (|) scalar for description; always an inlinedouble-quoted string.
WHEN: keywordwith double-quoted phrases.
README.md; always SKILL.md.docs/, lib/, or bin/; always references/ and scripts/./; always link a specific .md file.DO NOT USE FOR: by default; only for genuine trigger overlap.description; always lead with WHAT, then WHEN:.name (PDF-Extractor, pdf_extractor).>- description because it "reads nicer."WHEN: keyword.WHEN:.README.md out of habit.docs/ and scripts in bin/.references/recipes/ (folder) and assuming content loads.description run well past 60 words.name: lowercase/digits/hyphens, no --, no leading/trailing -, matches directory, not claude-/anthropic-.description: inline double-quoted, ≤60 words, WHAT then WHEN: with quoted phrases, no < >.USE FOR: (prefer WHEN:); no DO NOT USE FOR: unless disambiguating.SKILL.md; docs in references/, code in scripts/.SKILL.md < ~500 tokens; each reference < ~1000 tokens (split into a folder + README if larger).| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.5-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +59 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.5-flash | verified | 6/27/2026 | +100% |
Other measured skills in the registry, with their headline benchmark lift.