Skills Development
Create skills that follow the Agent Skills specification—an open format supported by Claude Code, Cursor, VS Code, GitHub Copilot, Codex, and other agent products.
Workflow
- Discovery — Understand what the skill should do
- Archetype Selection — Choose the best pattern
- Initialization — Create skill structure
- Customization — Tailor to specific needs
- Validation — Verify quality before committing
Stage 1: Discovery
Ask about the skill:
- What problem does this skill solve?
- What are the main capabilities?
- What triggers should invoke it? (phrases users would say)
- Where should it live? (personal, project, or plugin)
Stage 2: Archetype Selection
| Archetype | Use When | Example | |-----------|----------|---------| | simple | Basic skill without scripts | Quick reference, style guide | | api-wrapper | Wrapping external APIs | GitHub API, Stripe API | | document-processor | Working with file formats | PDF extractor, Excel analyzer | | dev-workflow | Automating development tasks | Git workflow, project scaffolder | | research-synthesizer | Gathering and synthesizing information | Competitive analysis, literature review |
Stage 3: Directory Structure
skill-name/
├── SKILL.md # Required: instructions + metadata
├── scripts/ # Optional: executable code
├── references/ # Optional: documentation
└── assets/ # Optional: templates, resources
Stage 4: Frontmatter Schema
---
name: skill-name
description: What it does and when to use it. Include trigger keywords.
version: 1.0.0 # optional, recommended
license: Apache-2.0 # optional
compatibility: Requires git and jq # optional
metadata: # optional
author: your-org
category: development
tags: [testing, automation]
---
| Field | Required | Constraints |
|-------|----------|-------------|
| name | Yes | 2-64 chars, lowercase/numbers/hyphens, must match directory |
| description | Yes | 10-1024 chars, describes what + when |
| version | No | Semantic version (MAJOR.MINOR.PATCH) |
| license | No | License name or reference |
| compatibility | No | 1-500 chars, environment requirements |
| metadata | No | Object for custom fields |
Note: Platform-specific fields (e.g., Claude's allowed-tools, user-invocable) should be added per-platform. See claude-code.md for Claude Code extensions.
Custom Frontmatter
Custom fields must be nested under metadata:
---
name: my-skill
description: ...
metadata:
author: your-org
version: "1.0"
category: development
tags: [typescript, testing]
---
Top-level custom fields are not allowed and may cause parsing errors.
Description Formula
[WHAT] + [WHEN] + [TRIGGERS]
description: Extracts text and tables from PDF files, fills forms, merges documents. Use when working with PDF files or when the user mentions PDFs, forms, or document extraction.
Checklist:
- [ ] Explains WHAT (capabilities)
- [ ] States WHEN (trigger conditions)
- [ ] Includes 3-5 trigger KEYWORDS
- [ ] Uses third-person voice
- [ ] Under 200 words
Stage 5: Validation
Validation Checklist
A. YAML Frontmatter
- [ ] Opens with
---on line 1, closes with--- - [ ]
nameanddescriptionpresent (required) - [ ] Uses spaces, not tabs
- [ ] Special characters quoted
B. Naming
- [ ] Lowercase, numbers, hyphens only (1-64 chars)
- [ ] Matches parent directory name
- [ ] No
--, leading/trailing hyphens - [ ] No
anthropicorclaudein name
C. Description Quality
- [ ] WHAT: Explains capabilities
- [ ] WHEN: States "Use when..." conditions
- [ ] TRIGGERS: 3-5 keywords users would say
- [ ] Third-person voice (not "I can" or "you can")
D. Structure
- [ ] SKILL.md under 500 lines
- [ ] All referenced files exist
- [ ] No TODO/placeholder markers
- [ ] Progressive disclosure (details in
references/)
Report Format
# Skill Check: {skill-name}
**Status**: PASS | WARNINGS | FAIL
**Issues**: {critical} critical, {warnings} warnings
## Critical (must fix)
1. {issue with fix}
## Warnings (should fix)
1. {issue with fix}
## Strengths
- {what's done well}
Core Principles
Concise is key
Context window is shared. Only include what the agent doesn't already know. Challenge each paragraph—does it justify its token cost?
Third-person descriptions
Descriptions inject into system prompt:
- "Extracts text from PDFs"
- "I can help you extract text from PDFs"
Progressive disclosure
Keep SKILL.md under 500 lines. Move details to:
references/- Detailed docs, API referencesscripts/- Executable utilities (code never enters context)assets/- Templates, data files
Token loading:
- Metadata (~100 tokens): name + description at startup
- Instructions (<5000 tokens): SKILL.md body when activated
- Resources (as needed): files loaded only when referenced
Degrees of freedom
Match instruction specificity to task requirements:
- High freedom (text): Multiple valid approaches, use judgment
- Medium freedom (pseudocode): Preferred pattern with variation allowed
- Low freedom (scripts): Exact sequence required, no deviation
See patterns.md for detailed examples.
Naming Requirements
- Lowercase letters, numbers, hyphens only
- Cannot start/end with hyphen or contain
-- - Must match parent directory name
- Cannot contain
anthropicorclaude
Recommended: Gerund form (processing-pdfs, reviewing-code)
Platform-Specific Guidance
Skills are cross-platform, but each tool has specific implementation details:
- Claude Code: See claude-code.md for tool restrictions, testing, troubleshooting, and Claude-specific frontmatter extensions
- Codex CLI: See codex.md for discovery paths,
$skill-nameinvocation
See implementations.md for storage paths and invocations.md for activation patterns.
References
- steps-pattern.md - Composable skill workflows with dependencies
- patterns.md - Degrees of freedom, script design, variant organization
- best-practices.md - Community patterns, testing strategies
- quick-reference.md - Fast checklist and one-liners
- implementations.md - Per-tool storage paths
- invocations.md - How tools activate skills
- compatibility.md - Path compatibility matrix