Our review
Guide for creating modular skills that extend Claude Code's capabilities with specialized knowledge, workflows, and tool integrations.
Strengths
- Clear structure and guiding principles (conciseness, degrees of freedom, progressive disclosure)
- Concrete examples of correct and incorrect directory/file structures
- Efficient context usage via three-level loading (metadata, SKILL.md, bundled resources)
Limitations
- Specific to Claude Code; not applicable to other AI coding assistants
- Requires strict adherence to directory naming and file casing rules
- Assumes basic familiarity with Markdown and YAML frontmatter
Use this skill when you want to create or update a skill to give Claude Code specialized procedures or integrations.
Do not use it for standalone scripts, simple configurations, or tasks that don't require modular packaging.
Security analysis
SafeThe skill uses a single, deterministic bash command to execute a known Python initialization script with no external network access, file destruction, or execution of arbitrary code. The operation is limited to scaffolding a local skill directory. No sensitive data exfiltration or safety bypass.
No concerns found
Examples
Create a skill named 'git-commit' that provides Claude with a workflow for writing conventional commit messages with type, scope, and description.Create a skill named 'pdf-processing' that bundles a Python script to rotate PDF pages and includes a reference doc for PyMuPDF usage.Create a skill named 'data-analyzer' that provides knowledge on pandas and matplotlib, with templates for common analysis scripts.name: meta:claude-code:create-skill description: Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations. allowed-tools: Bash(python3 ./.claude/commands/meta/claude-code/init_skill.py*)
Skill Creator for Claude Code
Create skills in Claude Code's skill directory.
References:
- @context/blocks/docs/prompting.md - Writing standards
- @context/blocks/construct/claude-code-permissions.md - allowed-tools configuration
About Skills
Skills are modular packages providing specialized knowledge, workflows, and tools. Transform Claude from general to specialized agent with procedural knowledge.
What Skills Provide
- Specialized workflows - Multi-step procedures
- Tool integrations - File formats, APIs
- Domain expertise - Schemas, business logic
- Bundled resources - Scripts, references, templates
Core Principles
Concise is Key
Context window is public good. Only add what Claude doesn't know. Challenge each piece: "Does Claude need this?"
Default: Claude is smart. Add only non-obvious info.
Set Appropriate Degrees of Freedom
High freedom (text): Multiple valid approaches, context-dependent Medium freedom (pseudocode/params): Preferred pattern, some variation Low freedom (scripts): Fragile operations, consistency critical
Critical Structure Requirements
MANDATORY: Every skill MUST be structured as a directory, NOT a single file.
Required structure:
- Directory named
skill-name/(lowercase letters, numbers, hyphens only) - Containing
SKILL.mdfile (UPPERCASE, exactly this filename)
Correct examples:
- ✅
git-commit/SKILL.md - ✅
pdf-processing/SKILL.md - ✅
data-analyzer/SKILL.md
Wrong examples:
- ❌
git-commit.md(single file, not directory) - ❌
git-commit/skill.md(lowercase) - ❌
git-commit/README.md(wrong filename)
Anatomy
skill-name/
├── SKILL.md (required - UPPERCASE)
│ ├── YAML frontmatter (name, description)
│ └── Markdown instructions
├── reference.md (optional - root-level docs)
├── examples.md (optional - root-level docs)
├── scripts/ (optional)
│ └── helper.py - Executable code
└── templates/ (optional)
└── template.txt - Files used in output
SKILL.md (required)
- Frontmatter (YAML):
nameanddescription- triggers when Claude uses skill - Body (Markdown): Instructions for using skill
Bundled Resources (optional)
Scripts (scripts/) - Executable code for deterministic/repeated tasks
- Token efficient, deterministic
- May execute without loading to context
- Examples:
scripts/rotate_pdf.py,scripts/fill_form.py
Reference docs (root-level .md files) - Docs loaded as needed
- Database schemas, API docs, detailed workflows
- Keeps SKILL.md lean
- Load only when Claude determines needed
- Examples:
reference.md,api_docs.md,workflows.md - Note: These are individual files at root, NOT in a
references/subdirectory
Templates (templates/) - Files used as assets/starting points
- Templates, boilerplate code, starter files
- Used in final output by copying/modifying
- Examples:
templates/starter-project/,templates/document.docx
What NOT to Include
No auxiliary docs:
- README.md
- INSTALLATION_GUIDE.md
- QUICK_REFERENCE.md
- CHANGELOG.md
Only info needed for AI agent to work.
Progressive Disclosure
Three-level loading:
- Metadata - Always in context (~100 words)
- SKILL.md body - When triggered (<5k words)
- Bundled resources - As needed (unlimited)
Keep SKILL.md <500 lines. Split when approaching limit.
Pattern: High-level guide with references
## Quick start
[core example]
## Advanced
- **Forms**: See ./forms.md
- **API**: See ./api-reference.md
Skill Creation Process
- Understand skill with concrete examples
- Plan reusable contents (scripts, references, assets)
- Initialize skill (run init_skill.py)
- Edit skill (implement resources, write SKILL.md)
- Iterate based on usage
Step 1: Understanding with Concrete Examples
Skip if usage patterns clear.
Ask for concrete examples:
- "What functionality should skill support?"
- "Examples of usage?"
- "What triggers this skill?"
Avoid overwhelming - ask most important questions first.
Conclude when functionality clear.
Step 2: Planning Reusable Contents
Analyze each example:
- How to execute from scratch?
- What scripts/references/assets help?
Example: pdf-editor
- Query: "Rotate this PDF"
- Analysis: Same code each time →
scripts/rotate_pdf.py
Example: frontend-webapp-builder
- Query: "Build todo app"
- Analysis: Same boilerplate →
templates/hello-world/starter project
Example: big-query
- Query: "How many users logged in today?"
- Analysis: Re-discovering schemas →
schema.md(root-level reference)
Output: List of reusable resources needed.
Step 3: Initialize Skill
Skip if skill exists.
Run init script from repo root:
python3 ./.claude/commands/meta/claude-code/init_skill.py <skill-name> --path <output-directory>
Example:
python3 ./.claude/commands/meta/claude-code/init_skill.py brainwriting --path ./.claude/skills
Creates:
- Skill directory
- SKILL.md template with frontmatter
- Example resource directories
- Example files (customize/delete)
Step 4: Edit Skill
Start with Resources
Implement resources first: scripts, reference docs, templates. May need user input (brand assets, docs).
Test scripts - run to verify no bugs. Delete unused example files.
Update SKILL.md
Writing: Use imperative/infinitive form.
Frontmatter:
name: Skill namedescription: What it does + when to use. Specific, comprehensive, direct. Claude uses this to choose from 100+ skills.
Body: Instructions for using skill and resources.
Step 5: Validate Skill
Script will:
- Validate skill (YAML, structure, naming, descriptions)
Default priority:
./.claude/skills/(project-local)~/.claude/skills/(user-global)- Custom path if specified
Validation checks:
- YAML frontmatter format, required fields
- Naming conventions, directory structure
- Description quality
- File organization, resource references
If validation fails, fix errors and re-run.
Step 6: Iterate
Test skill on real tasks. Notice struggles → identify improvements → implement → test.
Next.js App Router Expert
Development
A skill that turns Claude into a Next.js App Router expert.
README Generator
Development
Creates professional and comprehensive README.md files for your projects.
API Documentation Writer
Development
Generates comprehensive API documentation in OpenAPI/Swagger format.