Step 1: Determine Skill scope
First, understand what the Skill should do:
- Ask clarifying questions:
- What specific capability should this Skill provide?
- When should Claude use this Skill?
- What tools or resources does it need?
- Is this for personal use or team sharing?
- Keep it focused: One Skill = one capability
- Good: "PDF form filling", "Excel data analysis"
- Too broad: "Document processing", "Data tools"
Step 2: Choose Skill location
Determine where to create the Skill:
Personal Skills (~/.claude/skills/):
- Individual workflows and preferences
- Experimental Skills
- Personal productivity tools
Project Skills (.claude/skills/):
- Team workflows and conventions
- Project-specific expertise
- Shared utilities (committed to git)
Step 3: Create Skill structure
Create the directory and files:
```bash
# Personal
mkdir -p ~/.claude/skills/skill-name
# Project
mkdir -p .claude/skills/skill-name
```
For multi-file Skills:
```
skill-name/
βββ SKILL.md (required)
βββ reference.md (optional)
βββ examples.md (optional)
βββ scripts/
β βββ helper.py (optional)
βββ templates/
βββ template.txt (optional)
```
Step 4: Write SKILL.md frontmatter
Create YAML frontmatter with required fields:
```yaml
---
name: skill-name
description: Brief description of what this does and when to use it
---
```
Field requirements:
- Lowercase letters, numbers, hyphens only
- Max 64 characters
- Must match directory name
- Good: pdf-processor, git-commit-helper
- Bad: PDF_Processor, Git Commits!
- Max 1024 characters
- Include BOTH what it does AND when to use it
- Use specific trigger words users would say
- Mention file types, operations, and context
Optional frontmatter fields:
- allowed-tools: Restrict tool access (comma-separated list)
```yaml
allowed-tools: Read, Grep, Glob
```
Use for:
- Read-only Skills
- Security-sensitive workflows
- Limited-scope operations
Step 5: Write effective descriptions
The description is critical for Claude to discover your Skill.
Formula: [What it does] + [When to use it] + [Key triggers]
Examples:
β
Good:
```yaml
description: Extract text and tables from PDF files, fill forms, merge documents. Use when working with PDF files or when the user mentions PDFs, forms, or document extraction.
```
β
Good:
```yaml
description: Analyze Excel spreadsheets, create pivot tables, and generate charts. Use when working with Excel files, spreadsheets, or analyzing tabular data in .xlsx format.
```
β Too vague:
```yaml
description: Helps with documents
description: For data analysis
```
Tips:
- Include specific file extensions (.pdf, .xlsx, .json)
- Mention common user phrases ("analyze", "extract", "generate")
- List concrete operations (not generic verbs)
- Add context clues ("Use when...", "For...")
Step 6: Structure the Skill content
Use clear Markdown sections:
```markdown
# Skill Name
Brief overview of what this Skill does.