Compact skill creator
Author a new skill, or improve an existing one, so it carries all its rules and intent in the
least text possible. Cost has two tiers: the description sits in context every session — the
skill's most expensive text — while the body loads only when the skill triggers. Both stay lean. Be
interactive: gather what you need, draft, then apply only on approval.
Compaction — always via compact-docs-writer
The compaction rules — the least-text principle, the removal-audit verification, and the
present-and-confirm with a measured word delta — live in
compact-docs-writer, the single source of truth; this skill never
restates or re-derives them. From the moment you draft (step 4) through self-review (step 5) and
present (step 6), always invoke compact-docs-writer and follow its workflow on the skill text —
reading it, applying its principles by hand, or naming it after a direct edit does not count. This
skill adds only the skill-specific layer: trigger taxonomy, agnosticism, progressive disclosure,
completion criteria, metadata, and the version-bump decision.
Trigger taxonomy — classify first
How a skill is triggered decides how its description is written. Classify into one:
- Mandatory — must auto-load whenever a task type is touched (e.g. "working on UI components",
"dealing with unit tests"). A silent miss defeats its purpose, so the description spends words
on a strict, concrete trigger: concrete verbs + the artifact ("when creating, editing, or
reviewing …").
- Manual — invoked by name: a
/command, or sibling skills/rules that reference it
explicitly. The by-name reference does all the routing, so trigger wording buys nothing: the
description is one short line of what the skill does — enough for a human choosing from a
list — never a body summary, never a "load when …" clause. When the skill format can block
model invocation (e.g. a disable-model-invocation flag), set it for Manual skills nothing
invokes programmatically — the description then costs no standing context; pair the flag with
type: flow — some agents hide flag-bearing skills even from manual invocation without it.
When sibling skills must drive this one, keep it model-invocable and mark it "invoke manually
only" in the description instead.
- Self-Evident — auto-loadable, but intent is obvious from a natural request (e.g. "fetch a
ticket"). Trigger words ≈ the task name, so a short description routes correctly without a
when/when-not clause.
Governing rule: description tokens are justified only by trigger precision, never by summary.
Compress within a type — but never starve a Mandatory trigger to save a few tokens.
In every type, never use : in the description — : in the unquoted value breaks some agents'
YAML parsers; avoid the character rather than quote it.
Two sharpeners for the trigger wording:
- One trigger per distinct path through the skill. Phrasings collapse only when they lead the
agent down the same path (true synonyms — "review a branch" / "check changes before merging");
never collapse triggers that name different inputs or modes (a PR link vs a bare branch name).
- Front-load the skill's leading word (see compact-docs-writer). When the description carries
the word the user's prompts and docs already use, the agent links that shared language to the
skill and fires it more reliably.
Placement corollary: the body loads only after the skill triggers, when the choice is already
made — so keep when-to-use and routing cues in the description (read before the choice), never
in the body, where they steer nothing.
Agnosticism
- Agent-agnostic — hard rule. Say "the agent" / "the session"; never vendor names ("Claude
Code", "Claude", etc.). When improving a skill, flag violations and fix the ones that are
framing; a clearly-marked agent-specific mechanism example with a generic fallback (e.g. a
memory/config discovery path) is deliberate — flag it at most, never strip it.
- Project-agnostic — best-effort. Default to generic wording. Couple to a project/framework/tool
only when the skill's purpose requires it; when you must, keep it explicit and contained —
declared up front or in a referenced doc — but skip a standalone declaration when the body already
names the coupled artifacts throughout, since restating them only duplicates.
- Tool-agnostic — follow the skill's stance. When a skill operates over an external tool/service
with interchangeable equivalents (design tools, trackers, cloud providers, …): if the skill is
already agnostic — treating such tools as a class, naming specific ones only as examples —
preserve that; new or edited content must stay generic, never hardcode a lone vendor as the
sole path. Otherwise it's a nice-to-have: prefer generic wording, and when unsure whether to
generalize or couple, ask the user.
- Sibling-decoupled: track dependencies. A skill may be installed with only its declared hard
dependencies, not the whole toolkit, so a link to a sibling that isn't a dependency can dangle.
Reference another skill only when it's a declared dependency or the link earns its keep
operationally (e.g. an actionable next-step handoff); never add orientation prose that merely
situates the skill among its siblings. An optional sibling gates its hand-off; gate the artifact
feeding it too only when, without the sibling, it isn't worth its run-time cost.
Progressive disclosure — when to split
A skill folder can hold a lean SKILL.md that references supporting .md docs. A referenced doc
loads only when the agent follows the pointer — that is the lever.
- Primary criterion: conditional relevance. Extract content needed only in a sub-case (rare
branch, long reference table, worked example, framework-specific detail). Keep always-needed
instructions inline.
- Size only modulates: large conditional chunks are strong candidates; tiny ones stay inline (a
pointer plus a round-trip can cost more than it saves). These are signals, not hard limits.
- Test: "Needed on every invocation, or only in a sub-case — and big enough that inlining taxes
every invocation? If both, extract it."
Completion criteria — steps end checkable
When a skill encodes steps, end each on a completion criterion the agent can check — done vs
not-done — and make it exhaustive where a partial pass could look complete ("every modified file
accounted for", not "produce a summary"). A vague criterion is what makes an agent wrap up early;
sharpening it is the first and cheapest fix. Only when a criterion stays irreducibly fuzzy and
later steps still tempt rushing should those later steps move out of sight (a follow-on skill or a
disclosed doc).
Workflow
- Detect mode. A path/skill argument → improve; none → create. To create, put the skill in its
own folder alongside existing skills, following the project's convention — ask the user if it's
unclear; folder name and
name field must match, in kebab-case.
- Intake — interview relentlessly to shared understanding. Before drafting, walk down each
branch of the skill's design tree, resolving dependencies between decisions one at a time —
never fire a fixed batch of questions once and then draft. Cover at least the purpose, trigger
type, and any unavoidable coupling, plus whatever each answer opens up. Ask one question at a
time, each with your recommended answer; if a question can be answered by exploring the codebase,
explore instead of asking. Scale depth to complexity (complex skill → more questions; simple →
few). The only limit: never interview for its own sake.
- Metadata. Always include the frontmatter fields; never hardcode their values. Creating: infer
defaults from context (sibling
SKILL.md files, git config user.name, repo LICENSE), ask the
user to confirm or override. Version starts at "1.0", or "0.x" when the author wants a trial
period before declaring the skill stable — ask which. Improving: preserve existing fields, and
flag any missing one.
- Draft (create) or improve (existing): get the skill's content right — the rules it
encodes, plus what improving adds (clarify where it's vague, under-specified, or missing a rule;
loop back to intake if gaps surface) — compacting it through compact-docs-writer as you write,
not in a later pass.
- Self-review before presenting — terse yes/no, skill-specific (compact-docs-writer runs the
compaction and removal-audit checks):
Wording agent-agnostic? Project coupling contained? Cross-references limited to declared
dependencies or a real operational benefit?
Trigger type identified, and the description written to fit it? Test it four ways, reading
only the description:
- would an agent open the skill for the intended task?
- would it skip a similar but unrelated task?
- does it match what the skill now does (no stale claim the body contradicts)?
- does it carry the skill's leading word itself — a paraphrase feels compliant but does no
invocation work?
Reword until all four hold.
No new or grown inline chunk meets the split test (progressive disclosure)?
Steps end on checkable, exhaustive completion criteria?
- Present & confirm through compact-docs-writer (diff + word delta measured from the files,
applied only on approval). In improve mode, always put the version-bump decision to the
user — asking after applying is fine, but the edit stays incomplete until the version is
settled; content approval (even given in advance) never covers it, so never let the question
drop. If the version was already raised since the last commit, fold the change into that
pending bump rather than bump again — and verify that pending state from git (version at HEAD
vs working tree), never from session memory: the repo may have moved concurrently.
1---2name: compact-skill-creator3description: Author or refine a skill for maximum token economy without losing intent. Use when creating any new skill or editing an existing `SKILL.md`.4license: MIT5---67# Compact skill creator89Author a new skill, or improve an existing one, so it carries **all** its rules and intent in the10**least text possible**. Cost has two tiers: the `description` sits in context *every* session — the11skill's most expensive text — while the body loads only when the skill triggers. Both stay lean. Be12interactive: gather what you need, draft, then apply only on approval.1314## Compaction — always via compact-docs-writer1516The compaction rules — the least-text principle, the removal-audit verification, and the17present-and-confirm with a measured word delta — live in18[compact-docs-writer](../compact-docs-writer/SKILL.md), the single source of truth; this skill never19restates or re-derives them. From the moment you draft (step 4) through self-review (step 5) and20present (step 6), **always** invoke compact-docs-writer and follow its workflow on the skill text —21reading it, applying its principles by hand, or naming it after a direct edit does not count. This22skill adds only the skill-specific layer: trigger taxonomy, agnosticism, progressive disclosure,23completion criteria, metadata, and the version-bump decision.2425## Trigger taxonomy — classify first2627How a skill is triggered decides how its `description` is written. Classify into one:2829- **Mandatory** — must auto-load *whenever* a task type is touched (e.g. "working on UI components",30 "dealing with unit tests"). A silent miss defeats its purpose, so the description **spends words**31 on a strict, concrete trigger: concrete verbs + the artifact ("when creating, editing, or32 reviewing …").33- **Manual** — invoked by name: a `/command`, or sibling skills/rules that reference it34 explicitly. The by-name reference does all the routing, so trigger wording buys nothing: the35 description is one short line of what the skill does — enough for a human choosing from a36 list — never a body summary, never a "load when …" clause. When the skill format can block37 model invocation (e.g. a `disable-model-invocation` flag), set it for Manual skills nothing38 invokes programmatically — the description then costs no standing context; pair the flag with39 `type: flow` — some agents hide flag-bearing skills even from manual invocation without it.40 When sibling skills must drive this one, keep it model-invocable and mark it "invoke manually41 only" in the description instead.42- **Self-Evident** — auto-loadable, but intent is obvious from a natural request (e.g. "fetch a43 ticket"). Trigger words ≈ the task name, so a short description routes correctly without a44 when/when-not clause.4546Governing rule: **description tokens are justified only by trigger precision, never by summary.**47Compress *within* a type — but never starve a Mandatory trigger to save a few tokens.4849In every type, never use `:` in the description — `: ` in the unquoted value breaks some agents'50YAML parsers; avoid the character rather than quote it.5152Two sharpeners for the trigger wording:5354- **One trigger per distinct path** through the skill. Phrasings collapse only when they lead the55 agent down the same path (true synonyms — "review a branch" / "check changes before merging");56 never collapse triggers that name different inputs or modes (a PR link vs a bare branch name).57- **Front-load the skill's leading word** (see compact-docs-writer). When the description carries58 the word the user's prompts and docs already use, the agent links that shared language to the59 skill and fires it more reliably.6061Placement corollary: the body loads only after the skill triggers, when the choice is already62made — so keep when-to-use and routing cues in the description (read *before* the choice), never63in the body, where they steer nothing.6465## Agnosticism6667- **Agent-agnostic — hard rule.** Say "the agent" / "the session"; never vendor names ("Claude68 Code", "Claude", etc.). When improving a skill, flag violations and fix the ones that are69 framing; a clearly-marked agent-specific mechanism example with a generic fallback (e.g. a70 memory/config discovery path) is deliberate — flag it at most, never strip it.71- **Project-agnostic — best-effort.** Default to generic wording. Couple to a project/framework/tool72 only when the skill's purpose requires it; when you must, keep it explicit and contained —73 declared up front or in a referenced doc — but skip a standalone declaration when the body already74 names the coupled artifacts throughout, since restating them only duplicates.75- **Tool-agnostic — follow the skill's stance.** When a skill operates over an external tool/service76 with interchangeable equivalents (design tools, trackers, cloud providers, …): if the skill is77 already agnostic — treating such tools as a class, naming specific ones only as examples —78 **preserve that**; new or edited content must stay generic, never hardcode a lone vendor as the79 sole path. Otherwise it's a nice-to-have: prefer generic wording, and when unsure whether to80 generalize or couple, ask the user.81- **Sibling-decoupled: track dependencies.** A skill may be installed with only its declared hard82 dependencies, not the whole toolkit, so a link to a sibling that isn't a dependency can dangle.83 Reference another skill only when it's a declared dependency or the link earns its keep84 operationally (e.g. an actionable next-step handoff); never add orientation prose that merely85 situates the skill among its siblings. An optional sibling gates its hand-off; gate the artifact86 feeding it too only when, without the sibling, it isn't worth its run-time cost.8788## Progressive disclosure — when to split8990A skill folder can hold a lean `SKILL.md` that references supporting `.md` docs. A referenced doc91loads **only when the agent follows the pointer** — that is the lever.9293- **Primary criterion: conditional relevance.** Extract content needed only in a sub-case (rare94 branch, long reference table, worked example, framework-specific detail). Keep always-needed95 instructions inline.96- **Size only modulates:** large conditional chunks are strong candidates; tiny ones stay inline (a97 pointer plus a round-trip can cost more than it saves). These are signals, not hard limits.98- Test: *"Needed on every invocation, or only in a sub-case — and big enough that inlining taxes99 every invocation? If both, extract it."*100101## Completion criteria — steps end checkable102103When a skill encodes steps, end each on a **completion criterion** the agent can check — done vs104not-done — and make it exhaustive where a partial pass could look complete ("every modified file105accounted for", not "produce a summary"). A vague criterion is what makes an agent wrap up early;106sharpening it is the first and cheapest fix. Only when a criterion stays irreducibly fuzzy and107later steps still tempt rushing should those later steps move out of sight (a follow-on skill or a108disclosed doc).109110## Workflow1111121. **Detect mode.** A path/skill argument → improve; none → create. To create, put the skill in its113 own folder alongside existing skills, following the project's convention — ask the user if it's114 unclear; folder name and `name` field must match, in kebab-case.1152. **Intake — interview relentlessly to shared understanding.** Before drafting, walk down each116 branch of the skill's design tree, resolving dependencies between decisions one at a time —117 never fire a fixed batch of questions once and then draft. Cover at least the purpose, **trigger118 type**, and any unavoidable coupling, plus whatever each answer opens up. Ask one question at a119 time, each with your recommended answer; if a question can be answered by exploring the codebase,120 explore instead of asking. Scale depth to complexity (complex skill → more questions; simple →121 few). The only limit: never interview for its own sake.1223. **Metadata.** Always include the frontmatter fields; never hardcode their values. Creating: infer123 defaults from context (sibling `SKILL.md` files, `git config user.name`, repo `LICENSE`), ask the124 user to confirm or override. Version starts at `"1.0"`, or `"0.x"` when the author wants a trial125 period before declaring the skill stable — ask which. Improving: preserve existing fields, and126 flag any missing one.1274. **Draft** (create) or **improve** (existing): get the skill's content right — the rules it128 encodes, plus what improving adds (clarify where it's vague, under-specified, or missing a rule;129 loop back to intake if gaps surface) — compacting it through compact-docs-writer as you write,130 not in a later pass.1315. **Self-review** before presenting — terse yes/no, skill-specific (compact-docs-writer runs the132 compaction and removal-audit checks):133 - Wording agent-agnostic? Project coupling contained? Cross-references limited to declared134 dependencies or a real operational benefit?135 - Trigger type identified, and the description written to fit it? Test it four ways, reading136 only the description:137 - would an agent open the skill for the intended task?138 - would it skip a similar but unrelated task?139 - does it match what the skill now does (no stale claim the body contradicts)?140 - does it carry the skill's leading word itself — a paraphrase feels compliant but does no141 invocation work?142143 Reword until all four hold.144 - No new or grown inline chunk meets the split test (progressive disclosure)?145 - Steps end on checkable, exhaustive completion criteria?1466. **Present & confirm** through compact-docs-writer (diff + word delta measured from the files,147 applied only on approval). In improve mode, **always put the version-bump decision to the148 user** — asking after applying is fine, but the edit stays incomplete until the version is149 settled; content approval (even given in advance) never covers it, so never let the question150 drop. If the version was already raised since the last commit, fold the change into that151 pending bump rather than bump again — and verify that pending state from git (version at HEAD152 vs working tree), never from session memory: the repo may have moved concurrently.