Create new skills, modify existing skills, and understand skill architecture. Use when users want to create a skill from scratch, learn YAML.
Skill Architecture
Comprehensive guide for creating effective Claude Code skills following Anthropic's official standards with emphasis on security and progressive disclosure architecture.
Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
Scope: Claude Code Agent Skills (~/.claude/skills/), not Claude.ai API skills
Self-Evolution Protocol
This skill — and every skill it creates — must actively evolve through use. This section is placed first because it governs all other sections.
During execution, watch for these signals: friction in instructions, missing edge cases, better patterns discovered, repeated manual steps, drift between documentation and reality.
Before writing any change, pass all three admission gates:
Gate
Question
Fail →
VALUE
Does this fix a real problem observed empirically, not speculated?
Skip
REDUNDANCY
Is this already documented or obvious from the code?
Skip
FRESHNESS
Will this still be true next month, or is it ephemeral?
Skip
Most executions should produce no evolution. Convergence to stability is success, not stagnation.
When all gates pass: Pause current work → fix SKILL.md or references → log in evolution-log.md with trigger + evidence → resume. Do NOT defer — the next invocation inherits whatever you leave behind.
What never passes the gate: Major structural changes (discuss with user first), speculative improvements without empirical evidence, cosmetic preferences.
When to Use This Skill
Use this skill when:
Creating new Claude Code skills from scratch
Learning skill YAML frontmatter and structure requirements
Validating skill file format and portability
Understanding progressive disclosure patterns for skills
Task Templates
Select the appropriate template before starting skill work -- templates encode common workflows and prevent missing steps that cause silent failures.
See Task Templates for all templates (A-F) and the quality checklist.
Template
Purpose
A
Create New Skill
B
Update Existing Skill
C
Add Resources to Skill
D
Convert to Self-Evolving Skill
E
Troubleshoot Skill Not Triggering
F
Create Lifecycle Suite
Post-Change Checklist (Self-Maintenance)
After modifying THIS skill (skill-architecture):
Templates and 6 Steps tutorial remain aligned
Skill Quality Checklist reflects current best practices
Skills are modular, self-contained packages that extend Claude's capabilities with specialized knowledge, workflows, and tools. Think of them as "onboarding guides" for specific domains -- transforming Claude from general-purpose to specialized agent with procedural knowledge no model fully possesses.
What Skills Provide
Specialized workflows - Multi-step procedures for specific domains
Tool integrations - Instructions for working with specific file formats or APIs
Domain expertise - Company-specific knowledge, schemas, business logic
Bundled resources - Scripts, references, assets for complex/repetitive tasks
Skill Discovery and Precedence
Skills are discovered from multiple locations. When names collide, higher-precedence wins:
Enterprise (managed settings) -- highest
Personal (~/.claude/skills/)
Project (.claude/skills/ in repo)
Plugin (namespaced: plugin:skill-name)
Nested (monorepo .claude/skills/ in subdirectories -- auto-discovered)
--add-dir (CLI flag, live change detection) -- lowest
Management commands:
claude plugin enable <name> / claude plugin disable <name> -- toggle plugins
claude skill list -- show all discovered skills with source location
Monorepo support: Claude Code automatically discovers .claude/skills/ directories in nested project roots within a monorepo. No configuration needed.
cc-skills Plugin Architecture
This section applies specifically to the cc-skills marketplace plugin structure. Generic standalone skills are unaffected.
Canonical Structure
plugins/<plugin>/
└── skills/
└── <skill-name>/
└── SKILL.md <- single canonical file (context AND user-invocable)
skills/<name>/SKILL.md is the single source of truth. The separate commands/ layer was eliminated -- it required maintaining two identical files per skill and caused Skill() invocations to return "Unknown skill". See migration issue for full context.
How Skills Become Slash Commands
Two install paths, both supported:
Path
Mechanism
Notes
Automated (primary)
mise run release:full -> sync-commands-to-settings.sh reads skills/*/SKILL.md -> writes ~/.claude/commands/<plugin>:<name>.md
Place the SKILL.md under plugins/<plugin>/skills/<name>/SKILL.md. No commands/ copy needed. The validator (bun scripts/validate-plugins.mjs) checks frontmatter completeness.
Quick summary: Gather requirements -> Plan resources -> Initialize -> Edit SKILL.md -> Validate -> Register and iterate.
Testing and Iteration
Good skills emerge through testing and feedback, not from getting the first draft perfect. After writing or updating a skill, verify it works by running it against realistic prompts.
Write Test Prompts
Come up with 2-3 realistic test prompts -- the kind of thing a real user would actually say. Not abstract requests, but concrete tasks with enough detail to exercise the skill. Share them with the user for confirmation before running.
Run and Evaluate
For each test prompt, run the skill and examine the output:
Did the skill trigger? If not, the description may need stronger trigger language.
Did it follow the workflow? Check whether instructions were followed or ignored.
Was the output useful? Compare against what you'd expect from a skilled human.
When subagents are available, run with-skill and without-skill versions in parallel to measure the skill's actual value-add. When not available, run test cases yourself as a sanity check.
Iterate Based on Feedback
After evaluating results, improve the skill and retest. Keep iterating until the user is satisfied or feedback is consistently positive. Key principles for each iteration:
Generalize from specific feedback. Skills will be used across many different prompts. Avoid overfitting to test cases with fiddly, narrow fixes. If a pattern keeps failing, try a different approach or metaphor rather than adding more constraints.
Keep the skill lean. Every section must earn its tokens. Read the execution transcripts -- if the skill causes the model to waste time on unproductive steps, cut those instructions and see what happens.
Explain the why, not just the what. LLMs respond better to understanding why a rule exists than to being commanded with rigid directives. Instead of "ALWAYS do X", explain: "Do X because skipping it causes Y, which leads to Z." This produces more robust behavior that generalizes to novel situations.
Look for repeated work across test cases. If every test run independently creates the same helper script or takes the same multi-step approach, bundle that script in scripts/ so future invocations don't reinvent the wheel.
Bundle common patterns as scripts. When test runs reveal that the model writes similar boilerplate code every time, extract it into a bundled script. This saves tokens and improves reliability.
Skill Writing Principles
These principles (aligned with Anthropic's official guidance) apply to all skill content:
Imperative form: "Run the script", "Check the output" -- not passive or indirect phrasing.
Explain reasoning over rigid rules: If you find yourself writing MUST/NEVER/ALWAYS in all caps, that's a signal to reframe. Explain the reasoning so the model internalizes the principle rather than treating it as an arbitrary constraint. The model is smart -- help it understand, don't just command it.
Pushy descriptions for triggering: Claude tends to undertrigger skills. Descriptions should actively claim territory: "Use this skill whenever the user mentions X, Y, or Z, even if they don't explicitly ask for it." Include negative triggers too: "Do NOT use for A or B."
Natural language descriptions: Write descriptions as sentences a human could read, not keyword lists. "Use this skill whenever..." is better than "TRIGGERS - keyword1, keyword2".
Keep execution out of descriptions: Descriptions tell Claude when to trigger. The skill body tells Claude how to execute. Don't mix them.
See Writing Guide for extended guidance with examples.
Skill Anatomy
skill-name/
├── SKILL.md # Required: YAML frontmatter + instructions
├── scripts/ # Optional: Executable code (Python/Bash)
├── references/ # Optional: Documentation loaded as needed
│ └── evolution-log.md # Required for self-evolving: Change history
└── assets/ # Optional: Files used in output
YAML Frontmatter (Required)
See YAML Frontmatter Reference for the complete field reference, invocation control table, permission rules, description guidelines, and YAML pitfalls.
This section is placed last so it is the final thing processed before the skill exits — maximizing recency effect.
Every skill MUST include a Post-Execution Reflection section — workflow skills, task skills, and capability skills alike. This is a structural requirement, not advisory. Without it, errors and drift repeat silently across sessions. Task-pattern skills are just as susceptible: scripts change interfaces, parameters get added, error messages drift from documentation.
After this skill completes, reflect before closing
Locate yourself. — Find this SKILL.md's canonical path (Glob for this skill's name) before editing. All corrections target THIS file and its sibling references/ — never other documentation.
What failed? — Fix the instruction that caused it. If it could recur, add it as an anti-pattern.
What worked better than expected? — Promote it to recommended practice. Document why.
What drifted? — Any script, reference, or external dependency that no longer matches reality gets fixed now.
Pass the admission gates. — Apply the Self-Evolution Protocol (top of this file). VALUE + REDUNDANCY + FRESHNESS must all pass before writing any change.
Log it. — Every change gets an evolution-log entry with trigger, fix, and evidence.
Do NOT defer. The next invocation inherits whatever you leave behind.
Template: Workflow / Stepwise Skills
For skills with multiple phases, evolution-log, and references/:
## Post-Execution Reflection
After this skill completes, reflect before closing the task:
0.**Locate yourself.** — Find this SKILL.md's canonical path before editing.
1.**What failed?** — Fix the instruction that caused it.
2.**What worked better than expected?** — Promote to recommended practice.
3.**What drifted?** — Fix any script, reference, or dependency that no longer matches reality.
4.**Log it.** — Evolution-log entry with trigger, fix, and evidence.
Do NOT defer. The next invocation inherits whatever you leave behind.
Template: Task-Pattern Skills
For single-action skills wrapping a CLI command or script:
## Post-Execution Reflection
After this skill completes, check before closing:
1.**Did the command succeed?** — If not, fix the instruction or error table that caused the failure.
2.**Did parameters or output change?** — If the script's interface drifted, update Usage examples and Parameters table to match.
3.**Was a workaround needed?** — If you had to improvise (different flags, extra steps), update this SKILL.md so the next invocation doesn't need the same workaround.
Only update if the issue is real and reproducible — not speculative.