Skill Creator
$ARGUMENTS
Create a new skill following the Agent Skills standard.
Workflow
- Capture intent -- ask: what should the skill do? Who invokes it?
- Classify -- task, hybrid, or knowledge? (see Classification Guide below)
- Interview -- gather: framework, tools, scope, output format, constraints
- Write SKILL.md -- frontmatter + body, under 500 lines
- Create supporting files -- reference/, templates/, scripts/ as needed
- Test and iterate -- invoke, observe, refine
Frontmatter Reference
| Field |
Type |
Required |
Description |
name |
string |
yes |
Lowercase, hyphens only, max 64 chars |
description |
string |
yes |
Third person, max 1024 chars, include key terms |
effort |
low/medium/high/xhigh/max |
no |
Controls model thinking budget (xhigh added for Opus 4.7) |
disable-model-invocation |
bool |
no |
true = only user can trigger (task skills) |
user-invocable |
bool |
no |
false = knowledge skill, Claude auto-loads |
allowed-tools |
csv or YAML list |
no |
Restrict tool access for safety; YAML-style lists accepted |
disallowedTools |
csv or YAML list |
no |
Block specific tools (plugin-shipped agents) |
model |
string |
no |
Override default model (accepts full IDs like claude-opus-4-8) |
context |
string |
no |
fork to run in isolated subagent |
agent |
string |
no |
Agent type to use when context: fork |
skills |
csv |
no |
Auto-load skills for the invoked subagent |
argument-hint |
string |
no |
Shown in autocomplete, e.g. "[target]" |
hooks |
object |
no |
Lifecycle hooks (PreToolUse, PostToolUse, Stop) scoped to the skill invocation |
maxTurns |
int |
no |
Cap turns when skill spawns a subagent |
memory |
user/project/local |
no |
Persistent memory scope (agents only) |
Classification Guide
| Type |
When to use |
Key fields |
| Task |
User-triggered actions with side effects (build, deploy, commit) |
disable-model-invocation: true, allowed-tools |
| Hybrid |
Both user and Claude invoke (review, analyze) |
defaults |
| Knowledge |
Domain patterns Claude auto-loads (clean-code, api-patterns) |
user-invocable: false |
Writing Guidelines
- Description: third person ("Generates...", "Provides..."), min 50 chars, include searchable key terms and a trigger hint (e.g., "Use when..."). Short descriptions cause over-triggering — adjacent skills fight for the same query.
- Name: lowercase, hyphens, max 64 chars -- match the directory name
- Length: SKILL.md under 500 lines; use
reference/ for overflow
- Be concise: Claude is smart -- give structure, not lectures
- Degrees of freedom: be specific on format/constraints, flexible on implementation
- File references: max 1 level deep (e.g.,
reference/details.md)
- Use
$ARGUMENTS: place it early so user input is visible
- Tables over prose: for options, patterns, mappings
Mandatory Sections (meta-architect audit criteria)
Every SKILL.md must contain all five, or it will lower the toolkit quality score:
- Description ≥50 chars with trigger hint in frontmatter
- At least one concrete example — fenced code block or
## Example section
- Hard rules using uppercase markers:
MUST, NEVER, CRITICAL, MANDATORY, or DO NOT
- "When NOT to Use" section — list 2-3 adjacent skills and the boundary between them
- Under 500 lines — split into
reference/ if needed
These map directly to the mutation strategies in meta-architect.md:
add_example, add_constraint, add_edge_case, restructure.
Rules vs Gotchas — different semantic buckets
Split the "hard rules" criterion into two sections when both apply:
## Rules — prescriptive process constraints (always-true MUST / NEVER): "MUST form a testable hypothesis before changing code", "NEVER force-push main". Required in every skill.
## Gotchas — environment-specific traps the agent would miss without being told, taken from Anthropic's best practices. Example from their docs: "The users table uses soft deletes. Queries must include WHERE deleted_at IS NULL or results will include deactivated accounts." Add this section only when real domain traps exist — do not pad with a (none) placeholder.
Directory Structure
skill-name/
SKILL.md # Main instructions (required, <500 lines)
reference/ # Detailed docs (loaded on-demand)
templates/ # Reusable templates for output
scripts/ # Executable helper scripts
Only create subdirectories when the skill needs them. Most skills are a single SKILL.md.
SKILL.md Template
---
name: {name}
description: "{Third-person description, min 50 chars, with trigger hint like 'Use when...'}"
argument-hint: "[hint]"
allowed-tools: Read, Grep, Glob
---
# {Title}
$ARGUMENTS
{One-line purpose statement.}
## Usage
\`\`\`
/{name} [arguments]
\`\`\`
## What This Command Does
1. **Step one**
2. **Step two**
3. **Step three**
## Example
\`\`\`
/{name} example-argument
\`\`\`
{Expected observable behavior.}
## Rules
- **MUST** {non-negotiable rule 1}
- **NEVER** {forbidden action}
- **CRITICAL**: {safety constraint}
## Gotchas
- {environment-specific trap the agent would miss — concrete, not general}
- {non-obvious behavior of a tool, API, or data layout}
## When NOT to Use
- For {adjacent use case} -- use `/{other-skill}` instead
- For {another case} -- use `/{another-skill}`
- If {precondition} is not met
Leave out ## Gotchas entirely when the skill has no domain-specific traps — it is not mandatory, and a stub with nothing concrete is worse than no section.
Quality Checklist
Before finalizing, verify:
Evaluation
After creating the skill, test it:
- Invoke with a representative prompt
- Check output matches expected structure
- Verify dynamic injection (
$ARGUMENTS) works
- Test with varied argument patterns
- Confirm
allowed-tools are sufficient but not excessive
- Iterate: tighten instructions where output diverges
Installation
After creating the skill:
- Verify the skill directory exists under
app/skills/{name}/
- Update
skills-catalog.md if it exists
- Update
ARCHITECTURE.md skill counts if referenced
- Run
validate.sh if available
- Run
evaluate-skills.sh if available
Common Mistakes
| Mistake |
Fix |
| Description too vague |
Add specific terms: "Python", "REST API", "migration" |
| SKILL.md too long |
Move details to reference/ subdirectory |
Missing $ARGUMENTS |
Add after the H1 heading for task/hybrid skills |
| Over-specifying steps |
Give structure, let Claude fill details |
| Wrong classification |
Task = side effects, Knowledge = patterns, Hybrid = both |
1---2name: skill-creator3description: "Creates new skills from templates via guided workflow. Triggers: new skill, create skill, skill scaffold, skill template."4effort: high5disable-model-invocation: true6argument-hint: "[skill name or description]"7allowed-tools: Read, Write, Edit, Bash, Grep, Glob8---910# Skill Creator1112$ARGUMENTS1314Create a new skill following the Agent Skills standard.1516## Workflow17181. **Capture intent** -- ask: what should the skill do? Who invokes it?192. **Classify** -- task, hybrid, or knowledge? (see Classification Guide below)203. **Interview** -- gather: framework, tools, scope, output format, constraints214. **Write SKILL.md** -- frontmatter + body, under 500 lines225. **Create supporting files** -- reference/, templates/, scripts/ as needed236. **Test and iterate** -- invoke, observe, refine2425## Frontmatter Reference2627| Field | Type | Required | Description |28|-------|------|----------|-------------|29| `name` | string | yes | Lowercase, hyphens only, max 64 chars |30| `description` | string | yes | Third person, max 1024 chars, include key terms |31| `effort` | low/medium/high/xhigh/max | no | Controls model thinking budget (xhigh added for Opus 4.7) |32| `disable-model-invocation` | bool | no | `true` = only user can trigger (task skills) |33| `user-invocable` | bool | no | `false` = knowledge skill, Claude auto-loads |34| `allowed-tools` | csv or YAML list | no | Restrict tool access for safety; YAML-style lists accepted |35| `disallowedTools` | csv or YAML list | no | Block specific tools (plugin-shipped agents) |36| `model` | string | no | Override default model (accepts full IDs like `claude-opus-4-8`) |37| `context` | string | no | `fork` to run in isolated subagent |38| `agent` | string | no | Agent type to use when `context: fork` |39| `skills` | csv | no | Auto-load skills for the invoked subagent |40| `argument-hint` | string | no | Shown in autocomplete, e.g. `"[target]"` |41| `hooks` | object | no | Lifecycle hooks (`PreToolUse`, `PostToolUse`, `Stop`) scoped to the skill invocation |42| `maxTurns` | int | no | Cap turns when skill spawns a subagent |43| `memory` | user/project/local | no | Persistent memory scope (agents only) |4445## Classification Guide4647| Type | When to use | Key fields |48|------|-------------|------------|49| **Task** | User-triggered actions with side effects (build, deploy, commit) | `disable-model-invocation: true`, `allowed-tools` |50| **Hybrid** | Both user and Claude invoke (review, analyze) | defaults |51| **Knowledge** | Domain patterns Claude auto-loads (clean-code, api-patterns) | `user-invocable: false` |5253## Writing Guidelines5455- **Description**: third person ("Generates...", "Provides..."), **min 50 chars**, include searchable key terms **and a trigger hint** (e.g., "Use when..."). Short descriptions cause over-triggering — adjacent skills fight for the same query.56- **Name**: lowercase, hyphens, max 64 chars -- match the directory name57- **Length**: SKILL.md under 500 lines; use `reference/` for overflow58- **Be concise**: Claude is smart -- give structure, not lectures59- **Degrees of freedom**: be specific on format/constraints, flexible on implementation60- **File references**: max 1 level deep (e.g., `reference/details.md`)61- **Use `$ARGUMENTS`**: place it early so user input is visible62- **Tables over prose**: for options, patterns, mappings6364## Mandatory Sections (meta-architect audit criteria)6566Every SKILL.md must contain all five, or it will lower the toolkit quality score:67681. **Description ≥50 chars** with trigger hint in frontmatter692. **At least one concrete example** — fenced code block or `## Example` section703. **Hard rules** using uppercase markers: `MUST`, `NEVER`, `CRITICAL`, `MANDATORY`, or `DO NOT`714. **"When NOT to Use" section** — list 2-3 adjacent skills and the boundary between them725. **Under 500 lines** — split into `reference/` if needed7374These map directly to the mutation strategies in `meta-architect.md`:75`add_example`, `add_constraint`, `add_edge_case`, `restructure`.7677### Rules vs Gotchas — different semantic buckets7879Split the "hard rules" criterion into two sections when both apply:8081- **`## Rules`** — prescriptive process constraints (always-true MUST / NEVER): *"MUST form a testable hypothesis before changing code"*, *"NEVER force-push main"*. Required in every skill.82- **`## Gotchas`** — environment-specific traps the agent would miss without being told, taken from [Anthropic's best practices](https://agentskills.io/skill-creation/best-practices.md#gotchas-sections). Example from their docs: *"The `users` table uses soft deletes. Queries must include `WHERE deleted_at IS NULL` or results will include deactivated accounts."* Add this section only when real domain traps exist — do not pad with a `(none)` placeholder.8384## Directory Structure8586```87skill-name/88 SKILL.md # Main instructions (required, <500 lines)89 reference/ # Detailed docs (loaded on-demand)90 templates/ # Reusable templates for output91 scripts/ # Executable helper scripts92```9394Only create subdirectories when the skill needs them. Most skills are a single SKILL.md.9596## SKILL.md Template9798```markdown99---100name: {name}101description: "{Third-person description, min 50 chars, with trigger hint like 'Use when...'}"102argument-hint: "[hint]"103allowed-tools: Read, Grep, Glob104---105106# {Title}107108$ARGUMENTS109110{One-line purpose statement.}111112## Usage113114\`\`\`115/{name} [arguments]116\`\`\`117118## What This Command Does1191201. **Step one**1212. **Step two**1223. **Step three**123124## Example125126\`\`\`127/{name} example-argument128\`\`\`129130{Expected observable behavior.}131132## Rules133134- **MUST** {non-negotiable rule 1}135- **NEVER** {forbidden action}136- **CRITICAL**: {safety constraint}137138## Gotchas139140- {environment-specific trap the agent would miss — concrete, not general}141- {non-obvious behavior of a tool, API, or data layout}142143## When NOT to Use144145- For {adjacent use case} -- use `/{other-skill}` instead146- For {another case} -- use `/{another-skill}`147- If {precondition} is not met148```149150Leave out `## Gotchas` entirely when the skill has no domain-specific traps — it is not mandatory, and a stub with nothing concrete is worse than no section.151152## Quality Checklist153154Before finalizing, verify:155156- [ ] Description ≥50 chars, third-person, with trigger hint157- [ ] At least one concrete code-fenced example158- [ ] `## Rules` section with prescriptive MUST / NEVER / CRITICAL / MANDATORY159- [ ] `## Gotchas` section when the domain has real environment-specific traps (otherwise omit)160- [ ] `## When NOT to Use` section naming 2-3 adjacent skills161- [ ] SKILL.md under 500 lines162- [ ] No time-sensitive information (versions, dates)163- [ ] Consistent terminology throughout164- [ ] File references max 1 level deep165- [ ] Workflows have numbered steps166- [ ] Frontmatter fields match classification type167- [ ] `$ARGUMENTS` is present for task/hybrid skills168- [ ] `allowed-tools` is minimal (principle of least privilege)169170## Evaluation171172After creating the skill, test it:1731741. Invoke with a representative prompt1752. Check output matches expected structure1763. Verify dynamic injection (`$ARGUMENTS`) works1774. Test with varied argument patterns1785. Confirm `allowed-tools` are sufficient but not excessive1796. Iterate: tighten instructions where output diverges180181## Installation182183After creating the skill:1841851. Verify the skill directory exists under `app/skills/{name}/`1862. Update `skills-catalog.md` if it exists1873. Update `ARCHITECTURE.md` skill counts if referenced1884. Run `validate.sh` if available1895. Run `evaluate-skills.sh` if available190191## Common Mistakes192193| Mistake | Fix |194|---------|-----|195| Description too vague | Add specific terms: "Python", "REST API", "migration" |196| SKILL.md too long | Move details to `reference/` subdirectory |197| Missing `$ARGUMENTS` | Add after the H1 heading for task/hybrid skills |198| Over-specifying steps | Give structure, let Claude fill details |199| Wrong classification | Task = side effects, Knowledge = patterns, Hybrid = both |