Install any skill in seconds. Free to start, no credit card required.
Get Started Free →This skill should be used when the user wants to create a new agent skill, scaffold a SKILL.md, validate an existing skill against repo rules, or refactor a skill to match this monorepo's conventions. Common triggers include "build a skill for X", "create a new skill", "scaffold a skill", "add a skill that does Y", "make me a skill", "audit this skill against our rules", and "refactor this skill to match repo conventions". Enforces kebab-case naming, verbatim trigger phrases, and selective XML f
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 75% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 93% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 76% | 0% |
Build, validate, and iterate agent skills in this monorepo. Bakes in the conventions every skill here follows: kebab-case naming, "Use when" trigger phrases in the description, and selective XML for example boundaries.
Clarify what the skill should do. Answer these before scaffolding:
skills/ already cover this? Run ls skills/ and skim each SKILL.md description.If overlap is >70%, propose extending the existing skill instead.
Apply references/naming.md. Quick check:
kebab-case-with-hyphens only^[a-z][a-z0-9-]+[a-z0-9]$bestpractices — use best-practices<domain>-<focus> (e.g., ts-best-practices) over generic <thing>-rulesSkills here are agent-agnostic: name and description are universally required (the skills CLI rejects skills missing either); the others are Claude Code extensions kept for cross-agent compatibility (other agents ignore them). Full schema in references/frontmatter.md.
yaml--- name: <skill-name> description: >- This skill should be used when [trigger condition]. Common triggers include "verbatim phrase 1", "verbatim phrase 2", and "verbatim phrase 3". [What it bakes in / what's distinctive]. Skip when [anti-trigger]. # --- Claude Code extensions (ignored by other agents) --- argument-hint: '[<optional-arg>]' user-invocable: true # Optional, defaults to false: # disable-model-invocation: true # set true to prevent the model from auto-loading this skill ---
name must exactly match the skill's directory name (kebab-case).
Description rules (full list):
"Use when" or "This skill should be used when"then, next, step 1, process, first — these get followed as instructions instead of treated as triggersSkip when clause naming what the skill does NOT doMarkdown headings (## ..., ### ...) for structure. XML _only_ inside these tags (when to use which):
<example> for full scenarios<good> / <bad> for contrast pairs<input> / <output> for tool-call boundariesTypical body sections (per the agents-skills baseline spec: "Step-by-step instructions, Examples of inputs and outputs, Common edge cases"):
## Workflow — numbered actions the agent takes## Examples — at least one <example> block## References — links to companion docsDo not add ## When to use / ## When NOT to use body sections. Routing signal (when to invoke, when to skip) lives only in the frontmatter description — that's all dispatchers see before activation. The body loads after activation and is for _executing_ the skill: workflow steps, examples, edge cases. Duplicating triggers in the body wastes tokens and creates drift risk.
Run pnpm skill-toolkit lint <name>. All error-severity findings must clear; warn and info are advisory. If any rule fails, fix the SKILL.md and re-run.
The full rule list lives in references/lint-checklist.md. The TS implementation in packages/skill-toolkit/src/lint/rules.ts is the enforcer.
If this is a discipline skill (one that enforces rules the agent might rationalize skipping — e.g., "always run tests", "never use any", "always use Result"), dispatch a subagent against a realistic prompt where the rule is tempting to skip. Read the response. When the agent explained why it skipped a rule, capture the excuse verbatim into a ## Rationalization table section at the bottom of SKILL.md.
Format:
markdown## Rationalization table | Skipped rule | Verbatim excuse | Why it's wrong | | --------------------------- | --------------------------------- | ----------------------------------------------- | | Always run the test | "the change is tiny so I'll skip" | Tiny changes still break behavior; run the test | | Use Result instead of throw | "this is just a quick prototype" | Prototypes leak into prod; use Result anyway |
Capturing excuses verbatim — not sanitized — is the point. Future agents recognize their own pattern. Skip this step only when the skill has no rules an agent could rationalize skipping (most reference skills, some pattern skills). Technique and discipline skills almost always benefit from a rationalization table.
Write to skills/<name>/:
SKILL.md — the skill bodyLICENSE — MIT (matches repo root)README.md — human-facing summaryOptional companions for non-trivial skills:
references/<topic>.md — deeper rules referenced from SKILL.mdtemplates/<thing>.template — boilerplate the skill scaffolds from<example> <input>User says: "build me a skill for parsing TOML config files"</input> <output>
*.toml files? Or any time the user mentions TOML?" Check skills/ for overlap (none).toml-config-parser (kebab-case, descriptive).<example> showing parse-validate-output.skills/toml-config-parser/{SKILL.md, README.md, LICENSE}.</output> </example>
<example> <good> description: >- This skill should be used when the user wants to refactor TypeScript code to follow functional patterns. Common triggers include "make this functional", "remove the class", and "use Result instead of throw". Bakes in factory functions over classes, Result<T,E> over exceptions, and immutable state. Skip when working with framework-required classes (PrismaClient, etc.). </good>
<bad> description: >- This skill helps with TypeScript. First it analyzes the code, then it refactors it. The process involves several steps. </bad>
The <bad> example fails three rules: no "Use when" phrase, no verbatim trigger phrases in quotes, contains anti-shortcut words ("first", "then", "process") that cause the agent to follow them as instructions instead of treating them as triggers. </example>
references/frontmatter.md — frontmatter schemareferences/naming.md — naming rulesreferences/description.md — description rules + anti-shortcut patternsreferences/xml-usage.md — when to use XML vs Markdownreferences/lint-checklist.md — full self-lint checklisttemplates/SKILL.md.template — boilerplate with placeholderstemplates/README.md.template — readme boilerplatetemplates/example-skill.md — fully-worked example skillOther measured skills in the registry, with their headline benchmark lift.