| name | creating-skills |
| description | Creates high-quality Claude skills following official best practices. Use when the user asks to create a new skill, improve an existing skill, or needs guidance on skill authoring. Includes guided scoping, proper structure, naming conventions, progressive disclosure patterns, current frontmatter options, and quality validation. |
Creating High-Quality Claude Skills
Use this skill when creating or improving Claude skills to ensure they follow official best practices and work effectively across all Claude models.
Core Principles
Conciseness: Skills share the context window. Only include information Claude doesn't already have.
Appropriate Freedom: Match instruction detail to task needs:
- High freedom: Multiple valid approaches (use text instructions)
- Medium freedom: Preferred patterns with flexibility (use pseudocode/guidance)
- Low freedom: Exact sequences required (use specific bash/python scripts)
Progressive Disclosure: Keep SKILL.md under 500 lines. Split content into reference files when approaching this limit. All references must be one level deep.
Phase 1: Initial Clarification
BEFORE planning or writing the skill, use the AskUserQuestion tool to gather structured feedback on skill requirements — but only for questions the conversation hasn't already answered.
-
Instruction detail level: How much freedom should Claude have? (single select)
- High freedom — multiple valid approaches, text instructions only
- Medium freedom — preferred patterns with flexibility, pseudocode/guidance
- Low freedom — exact sequences required, specific scripts
-
Success criteria: How will success be measured? Suggest options contextually based on skill type. (multiSelect)
-
Invocation: Who triggers this skill? (single select)
- Claude, proactively when conditions match (default)
- Only the user, via slash command (
disable-model-invocation: true)
- Only Claude, never shown in the menu (
user-invocable: false)
-
Save location: where does the skill live? (single select; skip if the caller already specified it — e.g. codifying-tasks passes this in)
- This project only →
.claude/skills/<name>/
- All my projects →
~/.claude/skills/<name>/
Add 1–2 contextual questions only if essential to clarify workflow steps, inputs/outputs, or materials to include.
Phase 2: Design & Planning
-
Choose skill name
-
Write description
-
Plan content structure
-
Architecture diagram (optional) — for a multi-file skill with reference docs, templates, or branching flows, an ASCII diagram per reference/architecture-diagrams.md helps validate structure. Skip it for a simple single-file skill; don't spend tokens diagramming something trivial.
-
Present plan to user
- Proposed name, description, structure outline (and the diagram if you drew one)
- Adjust based on feedback before writing
Phase 3: Create Content
Write into the save location chosen in Phase 1 (<location>/skills/<name>/SKILL.md).
- Write SKILL.md — valid frontmatter, only non-obvious information, checklists for complex workflows
- Add supporting files if needed —
templates/, reference/, scripts/, one level deep, SKILL.md stays under 500 lines
- Implement feedback mechanisms identified in Phase 1 — validation checkpoints, quality loops, error handling
A brand-new skill may not load until the session restarts (or /reload-plugins for a plugin skill); tell the user rather than treating a not-yet-listed skill as broken.
Frontmatter Reference
Required shape (only description is strictly recommended; name defaults to the directory name):
---
name: skill-name-here
description: What this does and when to use it, with trigger keywords.
---
Optional fields worth knowing (current as of mid-2026):
| Field | Use for |
|---|
argument-hint | Autocomplete hint, e.g. [filename] [format] |
arguments | Named positional args for $name substitution ($ARGUMENTS = all) |
disable-model-invocation: true | User-only skills (side effects, cost) |
user-invocable: false | Claude-only skills (hidden from / menu) |
allowed-tools / disallowed-tools | Pre-grant or remove tools while the skill runs |
model, effort | Override model or effort for this skill |
context: fork + agent: | Run the skill in a forked subagent instead of the main loop |
paths | Glob patterns; skill activates only when working with matching files |
when_to_use | Extra trigger phrases appended to description (combined cap 1536 chars) |
Skills installed via a plugin are invoked namespaced: /plugin-name:skill-name. Design names that read well after the colon.
Content Organization
Single SKILL.md when: under 400 lines, tightly related, needed all at once.
Progressive disclosure when: approaching 500 lines, distinct topics, conditional/advanced detail:
SKILL.md (overview + core workflow)
├── templates/ # files the skill fills in or copies
└── reference/ # detail loaded only when needed (one level deep, never nested)
Content Principles
Challenge every detail — is it essential, non-inferable, non-duplicative?
Only unique information — what Claude doesn't know, or what's specific to this use case:
## Data Processing Requirements
Use pandas with these constraints:
- Preserve original column order (df.reindex())
- Handle timestamps in Pacific timezone
- Round currency values to 2 decimal places
Workflows with checklists for complex tasks:
1. **Analyze Input**
- [ ] Validate format
- [ ] Check required fields
2. **Process Data**
- [ ] Apply transformations
- [ ] Validate output
Feedback loops where quality matters:
1. Run validation
2. If errors found → review → fix → return to step 1
3. If passes → proceed
Scripts and Code Guidelines
- Error handling: scripts give specific, actionable messages (what failed, which rows, how to fix)
- File paths: forward slashes only —
data/input/file.csv
- Dependencies: documented, with configuration values explained (no magic numbers)
- MCP tools: fully qualified names (
ServerName:tool_name)
See reference/scripts-and-code.md for comprehensive guidance.
Phase 4: Quality Checklist
Structure:
Content:
Technical:
Phase 5: Verify the Skill Triggers Correctly
A skill that never fires (or fires on the wrong prompts) is a silent failure. Before calling it done, sanity-check the description against realistic prompts:
- Should-trigger: name 2–3 prompts a user would actually type for this task. Does the description's wording and keywords make Claude reach for the skill? If a plausible request wouldn't surface it, the description is too narrow or missing keywords.
- Should-NOT-trigger: name 1–2 adjacent prompts this skill should ignore (e.g. a generic question, a neighboring skill's job). Does the description risk over-firing or shadowing another skill? Tighten the scope if so.
For a non-trivial skill, run one real invocation (or, in a forked subagent, dry-run the workflow against a realistic input) and fix what breaks via the correcting-mistakes skill before shipping. Deploying an unexercised skill is deploying untested instructions.
Reference Files