Skill Development for Claude Code Plugins
Skills are modular packages that extend Claude's capabilities with specialized knowledge, workflows, and tools. Each skill has a required SKILL.md and optional bundled resources in scripts/, references/, and assets/.
Progressive Disclosure (3 levels)
| Level |
What |
When loaded |
Frontmatter name + description |
~100 tokens |
Always in context |
SKILL.md body |
< 5k tokens |
When skill triggers |
references/, scripts/, assets/ |
Unlimited |
On demand by Claude |
Target SKILL.md body: 150–200 lines (~1,500–2,000 words). Hard max: 500 lines. Move everything else to references/.
Skill Creation Process (Summary)
- Understand use cases — gather concrete examples from user
- Plan resources — identify what scripts/references/assets are needed
- Create structure —
mkdir -p skills/skill-name/{references,scripts,assets}
- Write SKILL.md — lean body (imperative form) + third-person description with trigger phrases
- Add resources — populate
references/, examples/, scripts/ as needed
- Validate & iterate — check structure, triggers, writing style, progressive disclosure
See references/skill-authoring-guide.md for detailed steps, examples, and common mistakes.
SKILL.md Frontmatter
Required fields:
name: skill-name # lowercase, hyphens only, matches directory
description: This skill should be used when the user asks to "phrase 1", "phrase 2"...
Valid epost-kit extensions:
user-invocable, disable-model-invocation, context, agent, keywords, platforms, triggers, agent-affinity
Invalid: version: — not a Claude Code frontmatter field.
Skill Connections
Declare relationships between skills using metadata.connections. Extracted into skill-index.json during init.
metadata:
connections:
extends: [parent-skill] # inherits from; parent loaded before this
requires: [dependency-skill] # must be co-loaded for this skill to work
conflicts: [incompatible-skill] # cannot coexist in same agent
enhances: [enhanced-skill] # optional complement; not required
Rules:
- Only declare direct relationships (not transitive)
extends implies the parent is loaded first — use for specializations (e.g., ios-a11y extends a11y)
requires means this skill is broken without the dependency — use sparingly
conflicts is bidirectional — if A conflicts B, B should conflict A
enhances is advisory — hints at useful pairings without hard dependency
Writing Style
- Description (frontmatter): Third person — "This skill should be used when the user asks to..."
- Body: Imperative/infinitive form — "Configure X", "Validate Y" (not "You should...")
Skill Directory Structures
Minimal:
skill-name/
└── SKILL.md
Standard (recommended):
skill-name/
├── SKILL.md
└── references/
└── detailed-guide.md
Complete:
skill-name/
├── SKILL.md
├── references/
│ ├── patterns.md
│ └── advanced.md
├── assets/
│ └── template.json
└── scripts/
└── validate.sh
Extended Thinking (ultrathink)
Anthropic supports the ultrathink keyword to trigger extended thinking in Claude models.
- When to use: complex multi-step orchestration, deep architecture decisions, root cause analysis with many unknowns
- When NOT to use: simple workflows, lookup tasks, CRUD operations, anything with a clear single answer
- How: include the word
ultrathink naturally in the skill body where deep reasoning is needed — Claude detects it and activates extended thinking mode
- Extended thinking increases token usage; use only where depth outweighs speed
CSO: Cognitive Skill Optimization
Skills only work if models follow the body, not just the description. CSO prevents the "Description Trap" — where a description that summarizes workflow causes the model to skip the skill body entirely.
Key rules:
- Description = triggering conditions ONLY (when/who/situation), never workflow steps
- Discipline skills MUST include: Iron Law block, Anti-Rationalization table, Red Flags list
- Close every loophole explicitly — models find workarounds to vague instructions
- Add foundational principle: "Violating the letter of the rules IS violating the spirit"
See references/cso-principles.md for the full guide with examples, bad/good descriptions, token budgets, and anti-rationalization table format.
agentskills.io Compliance Rules
SKILL.md MUST be in skill root (only .md in root)
- Reference docs →
references/, data files → assets/, scripts → scripts/
name: MUST be lowercase with hyphens only — no /, spaces, or underscores per spec
(Note: epost-kit uses / as a namespace extension, e.g. ios-a11y — intentional divergence)
Sub-Skill Routing
When this skill is active and user intent matches a sub-skill, delegate:
| Intent |
Sub-Skill |
When |
| Add new skill |
kit-add-skill |
/kit-add-skill, create skill |
| Optimize skill |
kit-optimize-skill |
/kit-optimize-skill, improve existing |
| Add new agent |
kit-add-agent |
/kit-add-agent, create agent |
| Add new hook |
kit-add-hook |
/kit-add-hook, create hook |
Reference Files
references/skill-authoring-guide.md — Step-by-step creation, writing style details, common mistakes, examples from plugin-dev
references/skill-structure.md — Full anatomy, bundled resource types, string substitutions, progressive disclosure deep-dive, validation checklist
references/description-validation-checklist.md — Checklist for validating skill description quality (form, length, keywords, anti-patterns)
1---2name: kit-skill-development3description: (ePost) This skill should be used when the user wants to "create a skill", "add a skill to plugin", "write a new skill", "improve skill description", "organize skill content", or needs guidance on skill structure, progressive disclosure, or skill development best practices for Claude Code plugins.4---5
6# Skill Development for Claude Code Plugins
7
8Skills are modular packages that extend Claude's capabilities with specialized knowledge, workflows, and tools. Each skill has a required `SKILL.md` and optional bundled resources in `scripts/`, `references/`, and `assets/`.
9
10## Progressive Disclosure (3 levels)
11
12| Level | What | When loaded |
13|-------|------|-------------|
14| Frontmatter `name` + `description` | ~100 tokens | Always in context |
15| `SKILL.md` body | < 5k tokens | When skill triggers |
16| `references/`, `scripts/`, `assets/` | Unlimited | On demand by Claude |
17
18**Target SKILL.md body: 150–200 lines (~1,500–2,000 words). Hard max: 500 lines. Move everything else to `references/`.**
19
20## Skill Creation Process (Summary)
21
221. **Understand use cases** — gather concrete examples from user
232. **Plan resources** — identify what scripts/references/assets are needed
243. **Create structure** — `mkdir -p skills/skill-name/{references,scripts,assets}`
254. **Write SKILL.md** — lean body (imperative form) + third-person description with trigger phrases
265. **Add resources** — populate `references/`, `examples/`, `scripts/` as needed
276. **Validate & iterate** — check structure, triggers, writing style, progressive disclosure
28
29See `references/skill-authoring-guide.md` for detailed steps, examples, and common mistakes.
30
31## SKILL.md Frontmatter
32
33**Required fields:**
34```yaml
35name: skill-name # lowercase, hyphens only, matches directory
36description: This skill should be used when the user asks to "phrase 1", "phrase 2"...
37```
38
39**Valid epost-kit extensions:**
40`user-invocable`, `disable-model-invocation`, `context`, `agent`, `keywords`, `platforms`, `triggers`, `agent-affinity`
41
42**Invalid:** `version:` — not a Claude Code frontmatter field.
43
44## Skill Connections
45
46Declare relationships between skills using `metadata.connections`. Extracted into `skill-index.json` during init.
47
48```yaml
49metadata:
50 connections:
51 extends: [parent-skill] # inherits from; parent loaded before this
52 requires: [dependency-skill] # must be co-loaded for this skill to work
53 conflicts: [incompatible-skill] # cannot coexist in same agent
54 enhances: [enhanced-skill] # optional complement; not required
55```
56
57**Rules:**
58- Only declare direct relationships (not transitive)
59- `extends` implies the parent is loaded first — use for specializations (e.g., `ios-a11y` extends `a11y`)
60- `requires` means this skill is broken without the dependency — use sparingly
61- `conflicts` is bidirectional — if A conflicts B, B should conflict A
62- `enhances` is advisory — hints at useful pairings without hard dependency
63
64## Writing Style
65
66- **Description (frontmatter):** Third person — "This skill should be used when the user asks to..."
67- **Body:** Imperative/infinitive form — "Configure X", "Validate Y" (not "You should...")
68
69## Skill Directory Structures
70
71**Minimal:**
72```
73skill-name/
74└── SKILL.md
75```
76
77**Standard (recommended):**
78```
79skill-name/
80├── SKILL.md
81└── references/
82 └── detailed-guide.md
83```
84
85**Complete:**
86```
87skill-name/
88├── SKILL.md
89├── references/
90│ ├── patterns.md
91│ └── advanced.md
92├── assets/
93│ └── template.json
94└── scripts/
95 └── validate.sh
96```
97
98## Extended Thinking (`ultrathink`)
99
100Anthropic supports the `ultrathink` keyword to trigger extended thinking in Claude models.
101
102- **When to use**: complex multi-step orchestration, deep architecture decisions, root cause analysis with many unknowns
103- **When NOT to use**: simple workflows, lookup tasks, CRUD operations, anything with a clear single answer
104- **How**: include the word `ultrathink` naturally in the skill body where deep reasoning is needed — Claude detects it and activates extended thinking mode
105- Extended thinking increases token usage; use only where depth outweighs speed
106
107## CSO: Cognitive Skill Optimization
108
109Skills only work if models follow the body, not just the description. CSO prevents the "Description Trap" — where a description that summarizes workflow causes the model to skip the skill body entirely.
110
111**Key rules:**
112- Description = triggering conditions ONLY (when/who/situation), never workflow steps
113- Discipline skills MUST include: Iron Law block, Anti-Rationalization table, Red Flags list
114- Close every loophole explicitly — models find workarounds to vague instructions
115- Add foundational principle: "Violating the letter of the rules IS violating the spirit"
116
117See `references/cso-principles.md` for the full guide with examples, bad/good descriptions, token budgets, and anti-rationalization table format.
118
119## agentskills.io Compliance Rules
120
121- `SKILL.md` MUST be in skill root (only `.md` in root)
122- Reference docs → `references/`, data files → `assets/`, scripts → `scripts/`
123- `name:` MUST be lowercase with hyphens only — **no `/`, spaces, or underscores** per spec
124 (Note: epost-kit uses `/` as a namespace extension, e.g. `ios-a11y` — intentional divergence)
125
126## Sub-Skill Routing
127
128When this skill is active and user intent matches a sub-skill, delegate:
129
130| Intent | Sub-Skill | When |
131|--------|-----------|------|
132| Add new skill | `kit-add-skill` | `/kit-add-skill`, create skill |
133| Optimize skill | `kit-optimize-skill` | `/kit-optimize-skill`, improve existing |
134| Add new agent | `kit-add-agent` | `/kit-add-agent`, create agent |
135| Add new hook | `kit-add-hook` | `/kit-add-hook`, create hook |
136
137## Reference Files
138
139- **`references/skill-authoring-guide.md`** — Step-by-step creation, writing style details, common mistakes, examples from plugin-dev
140- **`references/skill-structure.md`** — Full anatomy, bundled resource types, string substitutions, progressive disclosure deep-dive, validation checklist
141- **`references/description-validation-checklist.md`** — Checklist for validating skill description quality (form, length, keywords, anti-patterns)