Skill Author
Create skills that Claude can discover and use reliably. Based on Anthropic's official Agent Skills best practices (April 2026).
Core Philosophy
- Claude is already smart — only add context it doesn't have
- Context window is a shared resource — every token competes with conversation, other skills, and system prompt
- Test with real usage, not assumptions — iterate based on observed agent behavior
Skill Creation Workflow
- Identify the pattern: Complete a task manually with Claude. Note what context you repeatedly provided (schemas, rules, conventions, sequences).
- Draft SKILL.md: Write frontmatter + body following the structure below.
- Apply conciseness pass: For every paragraph, ask "Does Claude need this?" Remove what it already knows.
- Set degrees of freedom: Match specificity to task fragility (see Freedom Levels below).
- Bundle resources: Move detailed references and scripts to separate files. Keep SKILL.md as the table of contents.
- Test with fresh context: Use the skill on a real task in a new session. Observe what Claude misses, over-reads, or ignores.
- Iterate: Refine based on observed behavior, not assumptions.
- Validate: Run
skill-check to catch structural issues.
SKILL.md Structure
---
name: lowercase-hyphenated # 3-64 chars, no reserved words
description: "Action verb + what it does + 'Use when...' trigger. Max 1024 chars."
requiredApps: [app-slug] # Optional: connected accounts needed
---
Body sections (not all required, pick what fits):
| Section |
Purpose |
When to include |
| Quick start |
Fastest path to using the skill |
Always |
| Steps / Workflow |
Sequential procedure with checklist |
Multi-step tasks |
| Rules / Constraints |
Hard requirements |
When consistency matters |
| Output |
Concrete output example |
When skill produces artifacts |
| References |
Links to bundled files |
When >500 lines needed |
| Errors / Limitations |
Known failure modes |
When edge cases exist |
Freedom Levels
Match specificity to how fragile the operation is:
| Level |
When |
Instruction style |
| High |
Multiple valid approaches, context-dependent |
Text guidance, heuristics |
| Medium |
Preferred pattern exists, some variation OK |
Pseudocode or parameterized scripts |
| Low |
Fragile operations, exact sequence required |
Specific scripts, minimal parameters |
Analogy: narrow bridge with cliffs (low freedom) vs open field (high freedom).
Progressive Disclosure
SKILL.md = table of contents. Detailed content lives in separate files.
my-skill/
├── SKILL.md # Overview + workflow (<500 lines)
├── references/
│ ├── api-reference.md # Loaded when Claude needs API details
│ └── schemas.md # Loaded when Claude needs data shapes
├── scripts/
│ └── validate.py # Executed (not read into context)
└── cache/
└── user-ids.json # Discovered data, reused across runs
Rules:
- Keep references ONE level deep from SKILL.md (no nested chains)
- Reference files >100 lines should have a table of contents
- Scripts are executed via bash, not loaded into context (only output consumes tokens)
- Make execution intent clear: "Run
validate.py" (execute) vs "See validate.py" (read)
Description Writing
The description is how Claude selects this skill from 100+ options. It must work as a standalone trigger.
- Third person: "Processes Excel files..." not "I can help you..."
- Action verb first: "Extract, Generate, Validate, Transform..."
- Include trigger: "Use when..." clause
- Include negative trigger: "Do NOT use for..." when confusion is likely
- Be specific: Include key terms Claude would match against
Feedback Loops
For quality-critical tasks, always include a validation cycle:
Produce output → Validate (script or checklist) → Fix errors → Repeat
For batch/destructive operations, use plan-validate-execute:
- Analyze input → create plan file (e.g.,
changes.json)
- Validate plan with script → catch errors before execution
- Execute only after validation passes
Common Anti-Patterns
| Anti-pattern |
Fix |
| Explaining what Claude already knows |
Delete it |
| Hardcoded dates or versions |
Use "old patterns" section or omit |
| Inconsistent terminology (mix "field"/"box"/"element") |
Pick one term, use consistently |
| Multiple approaches offered when one is best |
Pick the best, commit to it |
| Magic numbers without justification |
Document the reasoning |
| Deeply nested file references |
Flatten to one level from SKILL.md |
| Assuming packages are installed |
Check availability, document deps |
Quality Checklist
Before shipping a skill:
1---2name: skill-author3description: Create and refine high-quality Agent Skills (SKILL.md + bundled resources). Use when the user wants to create a new skill, improve an existing one, or turn a workflow into a reusable skill package. Covers structure, progressive disclosure, conciseness, feedback loops, and the quality checklist. Do NOT use for skill validation (use skill-check) or for prompt engineering (use prompt-craft).4---56# Skill Author78Create skills that Claude can discover and use reliably. Based on Anthropic's official Agent Skills best practices (April 2026).910## Core Philosophy11121. **Claude is already smart** — only add context it doesn't have132. **Context window is a shared resource** — every token competes with conversation, other skills, and system prompt143. **Test with real usage, not assumptions** — iterate based on observed agent behavior1516## Skill Creation Workflow17181. **Identify the pattern**: Complete a task manually with Claude. Note what context you repeatedly provided (schemas, rules, conventions, sequences).192. **Draft SKILL.md**: Write frontmatter + body following the structure below.203. **Apply conciseness pass**: For every paragraph, ask "Does Claude need this?" Remove what it already knows.214. **Set degrees of freedom**: Match specificity to task fragility (see Freedom Levels below).225. **Bundle resources**: Move detailed references and scripts to separate files. Keep SKILL.md as the table of contents.236. **Test with fresh context**: Use the skill on a real task in a new session. Observe what Claude misses, over-reads, or ignores.247. **Iterate**: Refine based on observed behavior, not assumptions.258. **Validate**: Run `skill-check` to catch structural issues.2627## SKILL.md Structure2829```yaml30---31name: lowercase-hyphenated # 3-64 chars, no reserved words32description: "Action verb + what it does + 'Use when...' trigger. Max 1024 chars."33requiredApps: [app-slug] # Optional: connected accounts needed34---35```3637**Body sections** (not all required, pick what fits):3839| Section | Purpose | When to include |40|---------|---------|-----------------|41| Quick start | Fastest path to using the skill | Always |42| Steps / Workflow | Sequential procedure with checklist | Multi-step tasks |43| Rules / Constraints | Hard requirements | When consistency matters |44| Output | Concrete output example | When skill produces artifacts |45| References | Links to bundled files | When >500 lines needed |46| Errors / Limitations | Known failure modes | When edge cases exist |4748## Freedom Levels4950Match specificity to how fragile the operation is:5152| Level | When | Instruction style |53|-------|------|-------------------|54| **High** | Multiple valid approaches, context-dependent | Text guidance, heuristics |55| **Medium** | Preferred pattern exists, some variation OK | Pseudocode or parameterized scripts |56| **Low** | Fragile operations, exact sequence required | Specific scripts, minimal parameters |5758Analogy: narrow bridge with cliffs (low freedom) vs open field (high freedom).5960## Progressive Disclosure6162SKILL.md = table of contents. Detailed content lives in separate files.6364```65my-skill/66├── SKILL.md # Overview + workflow (<500 lines)67├── references/68│ ├── api-reference.md # Loaded when Claude needs API details69│ └── schemas.md # Loaded when Claude needs data shapes70├── scripts/71│ └── validate.py # Executed (not read into context)72└── cache/73 └── user-ids.json # Discovered data, reused across runs74```7576**Rules**:77- Keep references ONE level deep from SKILL.md (no nested chains)78- Reference files >100 lines should have a table of contents79- Scripts are executed via bash, not loaded into context (only output consumes tokens)80- Make execution intent clear: "Run `validate.py`" (execute) vs "See `validate.py`" (read)8182## Description Writing8384The description is how Claude selects this skill from 100+ options. It must work as a standalone trigger.8586- **Third person**: "Processes Excel files..." not "I can help you..."87- **Action verb first**: "Extract, Generate, Validate, Transform..."88- **Include trigger**: "Use when..." clause89- **Include negative trigger**: "Do NOT use for..." when confusion is likely90- **Be specific**: Include key terms Claude would match against9192## Feedback Loops9394For quality-critical tasks, always include a validation cycle:9596```97Produce output → Validate (script or checklist) → Fix errors → Repeat98```99100For batch/destructive operations, use **plan-validate-execute**:1011. Analyze input → create plan file (e.g., `changes.json`)1022. Validate plan with script → catch errors before execution1033. Execute only after validation passes104105## Common Anti-Patterns106107| Anti-pattern | Fix |108|---|---|109| Explaining what Claude already knows | Delete it |110| Hardcoded dates or versions | Use "old patterns" section or omit |111| Inconsistent terminology (mix "field"/"box"/"element") | Pick one term, use consistently |112| Multiple approaches offered when one is best | Pick the best, commit to it |113| Magic numbers without justification | Document the reasoning |114| Deeply nested file references | Flatten to one level from SKILL.md |115| Assuming packages are installed | Check availability, document deps |116117## Quality Checklist118119Before shipping a skill:120121- [ ] Description: action verb + what + "Use when..." + "Do NOT use for..."122- [ ] SKILL.md body: under 500 lines123- [ ] Each paragraph earns its token cost124- [ ] Freedom level matches task fragility125- [ ] References are one level deep126- [ ] Scripts handle errors explicitly (no punting to Claude)127- [ ] No time-sensitive information128- [ ] Consistent terminology throughout129- [ ] Tested with real usage in fresh context130- [ ] Feedback loop included for quality-critical outputs131- [ ] `skill-check` validation passed