← AI Example Skills
Skill Builder
Engineering/skill-builderScaffolds a new Claude skill following best practices — the meta-skill for building more skills.
Anatomy of a skill
A skill is just a markdown file. The frontmatter at the top — a name and a description — tells the assistant when to reach for this skill. Everything below is the body: the instructions, workflow, and know-how it follows once loaded. That is the whole idea — capture expertise once, in plain text, and summon it by name.
The full skill
---
name: skill-builder
description: Creates a new Claude Code skill following best practices. Use when the user wants to build, create, write, or scaffold a new skill, slash command, or Claude Code plugin. Triggers on phrases like "build a skill", "create a skill", "new slash command", "add a skill", "scaffold a skill", "I want a skill that", "make a skill for". Always use this skill when skill authoring is the goal — even if the user doesn't say "skill" explicitly.
disable-model-invocation: true
argument-hint: [skill-name or description]
---
# Skill Builder
Scaffold and author a new Claude Code skill following best practices.
## Phase 1 — Gather Requirements
Ask (if not provided via `$ARGUMENTS`):
1. **What should this skill do?** (one-sentence description)
2. **Where should it live?**
| Location | Path | Scope |
|---|---|---|
| Personal | `~/.claude/skills/<name>/` | All your projects |
| Project | `.claude/skills/<name>/` | This project/team only |
| Plugin | `<plugin>/skills/<name>/` | Where plugin is enabled |
Priority when names conflict: enterprise > personal > project.
3. **How is it invoked?** User types `/skill-name`, Claude auto-invokes, or both
4. **Does it need supporting files?** References, examples, scripts, or asset templates
Don't proceed until intent is clear. Keep questions to 2–3 at a time.
Use answers to drive all subsequent decisions.
## Phase 2 — Determine Frontmatter
Choose frontmatter fields based on the skill's nature:
| Scenario | Frontmatter to use |
|---|---|
| Workflow with side effects (deploy, commit, send) | `disable-model-invocation: true` |
| Background knowledge only, no slash command needed | `user-invocable: false` |
| Read-only skill | `allowed-tools: Read, Grep, Glob` |
| Heavy research or exploration | `context: fork` + `agent: Explore` |
| User passes an argument | add `argument-hint: [what-it-accepts]` |
See [references/frontmatter-fields.md](references/frontmatter-fields.md) for the complete field reference.
## Phase 3 — Write the Description
The description is the **primary discovery mechanism**. Follow these rules:
- **Third person only**: "Processes X and returns Y" — never "I can help you…"
- **Include trigger phrases**: Concrete user phrasings that should load this skill
- **Be specific**: File types, domain terms, concrete scenarios
- **Be slightly pushy**: Push toward inclusion to combat Claude's undertriggering tendency
- **Max 1024 chars, no XML tags**
Draft the description before writing anything else. See [references/patterns.md](references/patterns.md) for good/bad examples and the pushy-description pattern.
## Phase 4 — Design the Skill Body
Structure the SKILL.md body using this hierarchy:
**In SKILL.md** (keep under 500 lines):
- Core concepts and essential procedures
- Workflow overview with checklists for multi-step flows
- Pointers to supporting files
**In references/** (detailed content):
- API docs, schemas, advanced patterns, troubleshooting
- Add a table of contents for files > 100 lines
**In examples/** (runnable code):
- Complete, copy-paste-ready examples
**In scripts/** (deterministic utilities):
- Executable helpers Claude runs without loading into context
- Must handle errors explicitly and document non-obvious constants
**In assets/** (templates):
- Boilerplate that appears verbatim in output
Always reference supporting files explicitly from SKILL.md — Claude won't discover them otherwise.
### Writing Style
- **Imperative/infinitive**: "Configure X", "Run Y", "Validate input"
- **Never second person**: Avoid "You should…", "You need to…"
## Phase 5 — Create the Files
1. Determine the skill directory path (personal or project-local)
2. Create the directory structure
3. Write `SKILL.md` with frontmatter + body
4. Write any `references/`, `examples/`, `scripts/`, or `assets/` files needed
5. Reference all supporting files from SKILL.md
## Phase 6 — Run the Shipping Checklist
Before finishing, verify every item in [references/checklist.md](references/checklist.md).
Report which items pass and flag any that need attention. Fix any failures before declaring the skill complete.
**If skill doesn't trigger**: Make description more specific with clearer trigger phrases.
**If skill triggers too often**: Narrow description or add `disable-model-invocation: true`.
**If skill is excluded from context**: Run `/context` to check — descriptions compete for a 2% context window budget (~16,000 chars). Shorten the description or set `SLASH_COMMAND_TOOL_CHAR_BUDGET` to increase the limit.
## Naming Conventions
- Lowercase, hyphens only, max 64 chars
- Prefer gerund form: `processing-pdfs`, `analyzing-spreadsheets`
- Acceptable: noun phrases (`pdf-processing`) or action verbs (`process-pdfs`)
- Avoid: `helper`, `utils`, `tools`, `data`, anything with `anthropic` or `claude`
## String Substitutions Available in Skills
| Variable | Meaning |
|---|---|
| `$ARGUMENTS` | All text after the skill name |
| `$ARGUMENTS[N]` | Nth argument (0-indexed) |
| `$N` | Shorthand for `$ARGUMENTS[N]` |
| `${CLAUDE_SESSION_ID}` | Current session ID |
## Additional Resources
- Advanced patterns (subagents, dynamic context, visual output, etc.): [references/patterns.md](references/patterns.md)
- Complete frontmatter field docs: [references/frontmatter-fields.md](references/frontmatter-fields.md)
- Shipping checklist: [references/checklist.md](references/checklist.md)
Some skills also bundle reference files (checklists, templates) alongside this SKILL.md. Want to build your own? Start with the Skill Builder skill.