Skill Creator
A skill is a prompt the agent loads only for certain work, sometimes with
scripts. Two things make one good: it loads exactly when it should, and it
costs as little context as the task allows. Everything below serves those.
Before writing one
- List
plugins/*/skills/ and check nothing already covers the job. Overlap
is worse than a gap: two descriptions competing for the same request means
the wrong one loads half the time. Extend the existing skill instead.
- Know who reads it. Skills in this repo run under whatever agent a
contributor uses, so write for judgment, not for one model's quirks.
The description is the contract
The description is all the agent sees when deciding whether to load a skill,
and every skill's description sits in context at once. Hosts truncate long
ones, so length is a shared budget, not a per-skill choice.
- One or two sentences, about 25 words: what it does, then the situation it
is for.
Tune how a game feels — input forgiveness, hit stop, screen shake — with concrete numbers.
- Name the boundary when a neighbour exists:
Generating frames is pixel-art / animated-spritesheets. Not for building a game for them.
- No lists of trigger phrases, no superlatives, no "the foundational skill".
A description that fires on anything adjacent is a description that loads
the wrong instructions.
SKILL.md is a router
Reading a skill spends context and brings in guidance that may not apply.
Keep the root short — under ~150 lines — and let it point outward:
- What and when, in a paragraph.
- The moves: the three to six things the agent actually does, with the
numbers, commands and traps that matter. Concrete facts (
snapshotArea
needs a preserveDrawingBuffer-free path; strip cells are 128px; hold the
CDP client or coarse-pointer emulation is lost) earn their place. Itinerary
does not: models handle order and nuance, so a numbered recipe that
prescribes every step now constrains more than it helps.
- Pointers: one line per reference or script saying when to open it.
references/ carries depth (schemas, cookbooks, long workflows),
scripts/ carries deterministic or fragile work, assets/ carries files
that get copied rather than read.
- Verification: how the agent proves the output works without a human —
a harness, a script, a headless recipe. A skill whose result cannot be
checked will ship broken output confidently.
Skills with several distinct workflows make the root a pure index: a line
per workflow and where it lives, nothing else.
Where learnings go
A durable lesson that changes what a user gets — a pitfall, a number, a
prompt rule, a harness trap — belongs in the skill that produced it: the
router if it is short, a reference if it needs room, the script's docstring
or --help if it is about running the script. Session memory is for the
agent's own continuity and never reaches the next reader. When you learn
something while using a skill, land it there in the same change.
Bundled scripts
Resolve a skill's own files through SKILL="${CLAUDE_SKILL_DIR}" plus the
4-dir probe fallback (.agents/skills .claude/skills ~/.agents/skills ~/.claude/skills). Claude Code substitutes ${CLAUDE_SKILL_DIR} in the
SKILL.md body — code fences included — for project, global and --plugin-dir
loads; ${CLAUDE_PLUGIN_ROOT} stays literal outside plugins. A script in
another plugin's skill cannot resolve from a plugin install: tell the agent
to load the owning skill. Contract + test recipe: references/composability.md.
Process
- Write the description first; if it will not fit 25 words, the scope is
wrong.
- Draft the router. Move anything the agent would not need on every run
into
references/.
node $SKILL/scripts/quick-validate.mjs <skill> for frontmatter and
structure, node $SKILL/scripts/analyze-skill.mjs <skill> for the quality
read ($SKILL resolves per the snippet in any skill in this repo).
pnpm dogfood to sync .claude/skills/, commit the symlink.
Pointers
references/anti-patterns.md — the failure modes to check a draft against:
template trap, checklist syndrome, generic guidance, context blindness,
over-engineering.
references/variation-patterns.md — when a skill produces creative output
and keeps converging on the same result.
references/philosophy-patterns.md — framing a domain's mental model when
the skill must teach judgment rather than a procedure.
references/composability.md — skills that hand off to each other; how to
draw the boundary and who owns overlap.
references/workflows.md, references/output-patterns.md — sequential and
conditional workflow shapes; report templates.
examples/before-after.md — two real rewrites from this repo: a description
trimmed to its trigger, and a 494-line root cut to a router.
scripts/init-skill.mjs scaffolds; scripts/upgrade-skill.mjs suggests
edits for an existing skill; scripts/package-skill.mjs zips one for
distribution.
1---2name: skill-creator3description: Create or revise a skill in this repo: short trigger-precise descriptions, a router-style SKILL.md over references and scripts, quality checks.4---56# Skill Creator78A skill is a prompt the agent loads only for certain work, sometimes with9scripts. Two things make one good: it loads exactly when it should, and it10costs as little context as the task allows. Everything below serves those.1112## Before writing one1314- List `plugins/*/skills/` and check nothing already covers the job. Overlap15 is worse than a gap: two descriptions competing for the same request means16 the wrong one loads half the time. Extend the existing skill instead.17- Know who reads it. Skills in this repo run under whatever agent a18 contributor uses, so write for judgment, not for one model's quirks.1920## The description is the contract2122The description is all the agent sees when deciding whether to load a skill,23and every skill's description sits in context at once. Hosts truncate long24ones, so length is a shared budget, not a per-skill choice.2526- One or two sentences, about 25 words: what it does, then the situation it27 is for. `Tune how a game feels — input forgiveness, hit stop, screen shake —28with concrete numbers.`29- Name the boundary when a neighbour exists: `Generating frames is pixel-art30/ animated-spritesheets.` `Not for building a game for them.`31- No lists of trigger phrases, no superlatives, no "the foundational skill".32 A description that fires on anything adjacent is a description that loads33 the wrong instructions.3435## SKILL.md is a router3637Reading a skill spends context and brings in guidance that may not apply.38Keep the root short — under ~150 lines — and let it point outward:3940- **What and when**, in a paragraph.41- **The moves**: the three to six things the agent actually does, with the42 numbers, commands and traps that matter. Concrete facts (`snapshotArea`43 needs a `preserveDrawingBuffer`-free path; strip cells are 128px; hold the44 CDP client or coarse-pointer emulation is lost) earn their place. Itinerary45 does not: models handle order and nuance, so a numbered recipe that46 prescribes every step now constrains more than it helps.47- **Pointers**: one line per reference or script saying when to open it.48 `references/` carries depth (schemas, cookbooks, long workflows),49 `scripts/` carries deterministic or fragile work, `assets/` carries files50 that get copied rather than read.51- **Verification**: how the agent proves the output works without a human —52 a harness, a script, a headless recipe. A skill whose result cannot be53 checked will ship broken output confidently.5455Skills with several distinct workflows make the root a pure index: a line56per workflow and where it lives, nothing else.5758## Where learnings go5960A durable lesson that changes what a user gets — a pitfall, a number, a61prompt rule, a harness trap — belongs in the skill that produced it: the62router if it is short, a reference if it needs room, the script's docstring63or `--help` if it is about running the script. Session memory is for the64agent's own continuity and never reaches the next reader. When you learn65something while using a skill, land it there in the same change.6667## Bundled scripts6869Resolve a skill's own files through `SKILL="${CLAUDE_SKILL_DIR}"` plus the704-dir probe fallback (`.agents/skills .claude/skills ~/.agents/skills71~/.claude/skills`). Claude Code substitutes `${CLAUDE_SKILL_DIR}` in the72SKILL.md body — code fences included — for project, global and `--plugin-dir`73loads; `${CLAUDE_PLUGIN_ROOT}` stays literal outside plugins. A script in74another plugin's skill cannot resolve from a plugin install: tell the agent75to load the owning skill. Contract + test recipe: `references/composability.md`.7677## Process78791. Write the description first; if it will not fit 25 words, the scope is80 wrong.812. Draft the router. Move anything the agent would not need on every run82 into `references/`.833. `node $SKILL/scripts/quick-validate.mjs <skill>` for frontmatter and84 structure, `node $SKILL/scripts/analyze-skill.mjs <skill>` for the quality85 read (`$SKILL` resolves per the snippet in any skill in this repo).864. `pnpm dogfood` to sync `.claude/skills/`, commit the symlink.8788## Pointers8990- `references/anti-patterns.md` — the failure modes to check a draft against:91 template trap, checklist syndrome, generic guidance, context blindness,92 over-engineering.93- `references/variation-patterns.md` — when a skill produces creative output94 and keeps converging on the same result.95- `references/philosophy-patterns.md` — framing a domain's mental model when96 the skill must teach judgment rather than a procedure.97- `references/composability.md` — skills that hand off to each other; how to98 draw the boundary and who owns overlap.99- `references/workflows.md`, `references/output-patterns.md` — sequential and100 conditional workflow shapes; report templates.101- `examples/before-after.md` — two real rewrites from this repo: a description102 trimmed to its trigger, and a 494-line root cut to a router.103- `scripts/init-skill.mjs` scaffolds; `scripts/upgrade-skill.mjs` suggests104 edits for an existing skill; `scripts/package-skill.mjs` zips one for105 distribution.