Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Writing conventions for skill0 documents — pyramid structure, line limits, and layout rules.
.claude/skills/x-cmd-skill0-writer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 58% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 220% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 247% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 38% | 0% |
Skill0 documents follow the pyramid principle: agents may read only the first 10–30 lines, so the most important information must come first. Detail beyond line 30 is the bonus, not the load.
sw-1200).tsv beside the doc, linked, so x tsv can query it. (sw-1250)SKILL.md onlyyaml--- name: <slug> # must equal the directory name description: <1-2 sentence summary an agent uses to decide whether to load> ---
name and description are load-bearing. Everything else nests under the metadata: block from yfm as comma-separated scalars — optional, and adds structure for indexing, discovery, and ontology hooks.
Sub-files carry no YFM. Only SKILL.md is filtered by a loader, so only it needs front matter. Every other file (references/*, usecase/*, EXAMPLE.md, *.report.md …) is read directly by an agent that already decided to open it — YFM there is pure token cost, restating a purpose the title and first line already give. Start those files at the # heading. Deviating needs a stated reason in the file itself.
For Chinese-localized versions, use a parallel SKILL.cn.md (one per skill). Don't mix languages inside a single file.
Live in skill0-writer.rule.yml. Run x rule lint skill0-writer.rule.yml and x rule check -r skill0-writer.rule.yml lib/skill0/. Coverage: YFM presence + name/description fields, name format, line count ≤ 100 (ideal 50), section order install → usage → advanced → links, English-only, no-intro / no-conclusion / no-repetition, no-orphan files.
After writing, review at line 30: would an agent who stops here form a wrong understanding?
If yes, move the critical qualifier earlier. The first 30 lines must give a correct (if incomplete) mental model. Beyond line 30, expand with detail — the pyramid is self-correcting.
Skills loaders (Claude Code, Cursor, Continue, etc.) load SKILL.md in two stages:
description: — auto-loaded into the agent's catalogfor matching. The agent reads the description to decide whether to load the skill.
Implications:
trigger-rich, terse.
cases, links to deeper docs.
Do not duplicate content across the two layers. Whatever the description conveys, the body should expand on it, not re-state the same surface. The body's leading paragraph in particular must not list the same features as the description — the body leads with reference, not with a second summary.
A practical test: if you delete the description entirely and read only the first 30 lines of the body, the agent should still see what the skill does and when to load it. If only the description carries that information, the body has nothing to add at the top — move the explanation into the body and let description carry the headline.
A skill body is a briefing for the LLM, not a course for a beginner.
x wkp / x rfc / x cve, NVD / MITRE / GHSA) and external sources. The body points; the agent re-fetches.A skill carries the solving angle, the convention, the output shape, and source pointers. It does not carry capability (the LLM already has it), static data (it rots), or tutorials (use sidecars).
Where specifics are too detailed or too current, push to a sidecar (references/, ANALYTICS.md) or external always-updated doc.
Collect two types: root links (entry points like llms.txt, docs index) and useful links (targeted links for the 20% of docs that cover 80% of use cases). List root first, useful after — AI understands order. No duplication unless emphasis is critical.
sw-1000-no-orphan-docs in skill0-writer.rule.yml.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 13,473 | 14,449 | +7% | 1 | 1 | 0% | 2,475 | 4,068 | +64% | 0 | 0 | — |
case-02 | fail→pass | 22,868 | 12,131 | -47% | 1 | 1 | 0% | 2,234 | 3,330 | +49% | 0 | 0 | — |
case-03 | fail→fail | 128,836 | 10,278 | -92% | 1 | 1 | 0% | 1,069 | 3,013 | +182% | 0 | 0 | — |
case-04 | fail→pass | 12,615 | 11,782 | -7% | 1 | 1 | 0% | 2,230 | 3,524 | +58% | 0 | 0 | — |
case-05 | fail→pass | 5,632 | 18,820 | +234% | 1 | 1 | 0% | 764 | 2,443 | +220% | 0 | 0 | — |
case-06 | fail→fail | 8,768 | 5,131 | -41% | 1 | 1 | 0% | 1,250 | 2,236 | +79% | 0 | 0 | — |
case-07 | fail→pass | 4,253 | 5,720 | +34% | 1 | 1 | 0% | 666 | 2,308 | +247% | 0 | 0 | — |
case-08 | fail→pass | 10,360 | 14,449 | +39% | 1 | 1 | 0% | 1,965 | 2,714 | +38% | 0 | 0 | — |
case-09 | pass→pass | 2,859 | 2,355 | -18% | 1 | 1 | 0% | 329 | 1,792 | +445% | 0 | 0 | — |
case-10 | pass→pass | 10,364 | 14,369 | +39% | 1 | 1 | 0% | 1,837 | 2,530 | +38% | 0 | 0 | — |
case-11 | fail→pass | 10,604 | 3,998 | -62% | 1 | 1 | 0% | 1,756 | 2,133 | +21% | 0 | 0 | — |
case-12 | fail→fail | 3,931 | 9,399 | +139% | 1 | 1 | 0% | 620 | 2,939 | +374% | 0 | 0 | — |
case-13 | fail→pass | 5,247 | 9,329 | +78% | 1 | 1 | 0% | 824 | 2,736 | +232% | 0 | 0 | — |
case-14 | fail→pass | 8,186 | 4,889 | -40% | 1 | 1 | 0% | 1,253 | 2,206 | +76% | 0 | 0 | — |
case-15 | fail→pass | 10,207 | 10,708 | +5% | 1 | 1 | 0% | 1,473 | 2,918 | +98% | 0 | 0 | — |
case-16 | pass→pass | 12,550 | 11,015 | -12% | 1 | 1 | 0% | 2,138 | 3,029 | +42% | 0 | 0 | — |
case-17 | pass→pass | 13,835 | 7,623 | -45% | 1 | 1 | 0% | 1,941 | 2,569 | +32% | 0 | 0 | — |
case-18 | fail→pass | 9,995 | 6,900 | -31% | 1 | 1 | 0% | 1,676 | 2,520 | +50% | 0 | 0 | — |
case-19 | pass→pass | 13,074 | 5,902 | -55% | 1 | 1 | 0% | 1,751 | 2,363 | +35% | 0 | 0 | — |
case-20 | pass→pass | 17,114 | 18,698 | +9% | 1 | 1 | 0% | 3,094 | 4,779 | +54% | 0 | 0 | — |
case-21 | pass→pass | 6,104 | 7,143 | +17% | 1 | 1 | 0% | 1,165 | 2,539 | +118% | 0 | 0 | — |
case-22 | pass→pass | 14,086 | 17,501 | +24% | 1 | 1 | 0% | 2,765 | 3,390 | +23% | 0 | 0 | — |
case-23 | pass→pass | 9,317 | 8,797 | -6% | 1 | 1 | 0% | 1,441 | 2,832 | +97% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +43 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.