create-ultimate-skill
Create Ultimate Skill
Creation Workflow
When creating a new skill based on user's request: $ARGUMENTS
Phase 1: Define Use Cases
Ask the user:
- Use cases: "Describe 2-3 specific scenarios where you'd want this skill to activate. What would you say to Claude, and what should it do?"
- Non-use cases: "What should this skill NOT be used for?" (defines negative triggers)
Phase 2: Choose Archetype and Scope
Ask the user:
- Archetype (see Archetypes section below)
- Triggers: What phrases should activate this skill?
- Scope: What's in scope vs out of scope?
Phase 3: Fetch Latest Documentation
Fetch the latest official skill documentation to verify current fields and constraints:
WebFetch: https://markdown.new/https://code.claude.com/docs/en/skills.md
Phase 4: Choose Save Location
Use AskUserQuestion:
- Personal (home folder):
~/.claude/skills/<skill-name>/- available in all projects - Project folder:
.claude/skills/<skill-name>/- project-specific - Existing plugin: ask which plugin, then
plugins/<plugin-name>/skills/
Phase 5: Create the Skill
Scaffold with init_skill.py or create manually:
python .claude/skills/create-ultimate-skill/scripts/init_skill.py <skill-name> --path <location>
Then write SKILL.md applying all rules below. Review with the checklist before presenting to user.
Phase 6: Summary
When complete, provide:
- Skill location and how to trigger it
- What it does
- Suggestions for improvement
- Testing prompts the user can try
Frontmatter Hard Rules
descriptionMUST be a single-line plain string. NEVER use YAML multi-line indicators (>-,|,>,|-). Multi-line descriptions break frontmatter parsing.allowed-toolsMUST be a single-line comma-separated string (e.g.allowed-tools: Read, Write, Edit). NEVER use YAML list syntax.
Required Fields
| Field | Constraints |
|---|---|
name |
Max 64 chars, [a-z0-9-] only, no "anthropic"/"claude" |
description |
Max 1024 chars, non-empty, no XML tags |
Optional Fields
| Field | Purpose | Example |
|---|---|---|
allowed-tools |
Limit tool access | Read, Grep, Glob |
model |
Override model | sonnet, opus |
context |
Isolation | fork |
agent |
Subagent type | Explore, Plan |
hooks |
Lifecycle events | PreToolUse, PostToolUse, Stop |
user-invocable |
Slash menu visibility | false to hide |
disable-model-invocation |
Block Skill tool | true |
See references/api-reference.md for full field documentation.
Archetypes
| Archetype | Best For | Structure |
|---|---|---|
| CLI Reference | Tool documentation | Commands grouped by function, minimal prose |
| Methodology | Workflows, processes | Philosophy + THE EXACT PROMPT + examples |
| Safety Tool | Validation, security | Threat model + risk tiers + rules |
| Orchestration | Multi-agent coordination | Quick start + APIs + integrations |
See references/archetypes.md for templates.
Description Rules
- Third person always ("Processes files" not "I help you")
- Include WHAT it does AND WHEN to trigger
- Specific trigger phrases users would say
- Add negative triggers ("Do NOT use for...") to prevent over-triggering
- Max 1024 characters
Template:
description: [What it does]. Use when [triggers]. Do NOT use for [exclusions].
Examples:
description: Extract text and tables from PDF files, fill forms, merge documents. Use when working with PDF files or when user mentions PDFs, forms, or document extraction.
description: Process and transform CSV data files. Use when working with CSV imports, exports, or data cleaning. Do NOT use for Excel files (.xlsx) or database queries.
SKILL.md Body Rules
- Imperative voice ("Extract the data", "Run validation")
- Never second person ("You should...")
- Concise - challenge each line: "Does Claude need this?"
- Under 500 lines, under 5,000 words (~2,000 ideal)
- Put critical instructions at the top of the file
- Use scripts for validation where possible - code is deterministic, language interpretation is not
- "Take your time to do this thoroughly" is more effective in user prompts than in SKILL.md
Structure Rules
skill-name/
├── SKILL.md # Core guidance only
├── references/ # Detailed docs (on-demand)
├── examples/ # Working code samples
└── scripts/ # Executable utilities
- References ONE level deep only - no chains
- Long files (>100 lines): include TOC
- Never include README.md in skill folder (SKILL.md IS the readme)
- Forward slashes only (no Windows paths)
Anti-Patterns
| Anti-Pattern | Fix |
|---|---|
| Vague descriptions | Specific triggers + negative triggers |
| Deeply nested references | One level deep |
| README.md in skill folder | Delete it - SKILL.md IS the readme |
>- or ` |
` in description |
| YAML list for allowed-tools | Comma-separated string |
Testing
Define success criteria before building:
- Quantitative: Trigger rate >90% of relevant queries, correct tool sequence, task completes without user intervention
- Qualitative: Output matches expected format, no hallucinated commands, consistent across sessions
Debug technique: Ask Claude "When would you use the [skill name] skill?" - the response reveals how Claude interprets the description.
Test three areas:
- Triggering: Direct trigger phrases, paraphrased requests, and edge cases that should NOT trigger
- Functional: Run each use case end-to-end, check output format and accuracy
- Performance: Compare skill-assisted vs manual - does the skill save time and improve quality?
Pro tip: Iterate on a single challenging task until Claude succeeds, then extract the winning approach into the skill. This grounds design in proven patterns rather than theory.
Iteration Signals
| Signal | Fix |
|---|---|
| Skill never activates | Add more trigger phrases to description |
| Wrong skill activates | Add "Do NOT use for..." negative triggers |
| Output is wrong | Refine SKILL.md instructions, add examples |
| Output is inconsistent | Reduce degrees of freedom, be more prescriptive |
Utility Scripts
init_skill.py
python .claude/skills/create-ultimate-skill/scripts/init_skill.py <skill-name> --path <location>
Creates SKILL.md with template, plus scripts/, references/, assets/ directories.
package_skill.py
python .claude/skills/create-ultimate-skill/scripts/package_skill.py <path/to/skill> [output-dir]
Validates and creates distributable zip. Checks frontmatter, naming, ensures no TODOs remain.
Skill Review Mode
When reviewing an existing skill (triggered by --review or "review my skill"):
- Read SKILL.md frontmatter, body, and supporting directories
- Categorise issues by severity:
- Critical: Won't trigger or wrong output (missing description, vague triggers, broken refs)
- Major: Significantly reduces effectiveness (>5,000 words, no progressive disclosure)
- Minor: Polish (inconsistent terminology, missing TOC, no negative triggers)
- Generate structured review report:
## Skill Review: [skill-name]
### Summary
[Assessment, word counts, structure]
### Description Analysis
**Current:** [description]
**Issues:** [with severity]
**Suggested:** "[improved version]"
### Issues by Severity
#### Critical ([count])
- [File]: [Issue] - [Fix]
#### Major ([count])
- [File]: [Issue] - [Fix]
#### Minor ([count])
- [File]: [Issue] - [Suggestion]
### Rating: [Pass / Needs Improvement / Needs Major Revision]
### Priority Fixes
1. [Highest impact]
2. [Second]
3. [Third]
Review Checklist
- Use cases: 2-3 concrete scenarios defined
- name: lowercase, hyphens, ≤64 chars
- description: single-line plain string, third person, specific triggers, ≤1024 chars
- description: negative triggers if needed
- SKILL.md body: <500 lines, <5,000 words
- No README.md in skill folder
- References: one level deep
- Forward slashes only
- Examples concrete, not abstract
Latest Documentation
Before finalising any skill's frontmatter, fetch the latest official documentation to check for new fields, changed constraints, or updated rules:
WebFetch: https://markdown.new/https://code.claude.com/docs/en/skills.md