Creates or updates skills with proper YAML frontmatter, progressive disclosure, and best practices per the open Agent Skills specification. Supports simple, tool-restricted, multi-file, and script-based skills. Use when creating new skills, authoring skills, extending agent capabilities, or when `--create-skill` or `--new-skill` flag is mentioned.
This skill is limited to using the following tools:
references/compatibility.mdreferences/implementations.mdreferences/invocations.mdCreate 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