Creates or updates skills with proper YAML frontmatter, progressive disclosure, and best practices per the open Agent Skills specification...
Create skills that follow the Agent Skills specificationβan open format supported by Claude Code, Cursor, VS Code, GitHub, and other agent products.
Clarify requirements
~/.claude/skills/) or project (.claude/skills/)?Choose template from templates/:
simple-skill.md - Single SKILL.md filetool-restricted-skill.md - Limited tool accessmulti-file-skill.md - With supporting filesscript-based-skill.md - Includes executable scriptsGenerate name
pdf-processing, code-review)processing-pdfs, analyzing-dataWrite SKILL.md
Add supporting files (if needed)
references/ - detailed documentationscripts/ - executable utilitiesassets/ - templates, data filesValidate
skills-ref validate ./my-skill or skills-checkskill-name/
βββ SKILL.md # Required: instructions + metadata
βββ scripts/ # Optional: executable code
βββ references/ # Optional: documentation
βββ assets/ # Optional: templates, resources
---
name: skill-name
description: What it does and when to use it. Include trigger keywords.
license: Apache-2.0 # optional
compatibility: Requires git and jq # optional
metadata: # optional
author: your-org
version: "1.0"
allowed-tools: Read Grep Glob # optional, experimental
---
# Skill Name
## Quick Start
[Minimal working example]
## Instructions
[Step-by-step guidance]
## Examples
[Concrete, runnable examples]
For cross-tool compatibility details, see the [references/](references/) directory.
| Field | Required | Constraints |
|---|---|---|
name |
Yes | 1-64 chars, lowercase/numbers/hyphens, must match directory |
description |
Yes | 1-1024 chars, describes what + when |
license |
No | License name or reference to bundled file |
compatibility |
No | 1-500 chars, environment requirements |
metadata |
No | Key-value pairs for additional info |
allowed-tools |
No | Space-delimited tool list (experimental) |
Refer to the Agent Skills Specification for complete schema.
The context window is shared. Only include what the agent doesn't already know. Challenge each paragraphβdoes it justify its token cost?
Descriptions inject into system prompt. Use third person:
Keep SKILL.md under 500 lines. Move details to:
references/ - Detailed docs, API referencesscripts/ - Executable utilities (code never enters context)assets/ - Templates, data filesToken loading:
[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.
Include trigger keywords that users would naturally say when they need this skill.
--anthropic or claudeRecommended: Gerund form (processing-pdfs, reviewing-code)
Use allowed-tools to limit capabilities (experimental):
# Read-only
allowed-tools: Read Grep Glob
# With shell access
allowed-tools: Bash(git:*) Bash(jq:*) Read
# Full access (default)
# Omit field entirely
Simple - Single SKILL.md file for basic capabilities
Tool-Restricted - Uses allowed-tools to limit tool access
Multi-File - SKILL.md with supporting references/ documentation
Script-Based - Includes executable scripts in scripts/
Use the official skills-ref library:
skills-ref validate ./my-skill
Or use skills-check for integrated validation and review.
Before finalizing, verify:
---)Use the skills-check skill to validate your skill before finalizing.
skills-check to validate and review# Find all skills
find ~/.claude/skills .claude/skills -name "SKILL.md" 2>/dev/null
# Check for tab characters (YAML requires spaces)
grep -P "\t" SKILL.md
# Find broken markdown links
grep -oE '\[[^]]+\]\([^)]+\)' SKILL.md | while read link; do
file=$(echo "$link" | sed 's/.*(\(.*\))/\1/')
[ ! -f "$file" ] && echo "Missing: $file"
done