499 lines
9.4 KiB
Markdown
499 lines
9.4 KiB
Markdown
# Skill Creator Reference
|
|
|
|
Comprehensive reference for creating Claude Code skills.
|
|
|
|
## Table of Contents
|
|
|
|
- [Validation Rules](#validation-rules)
|
|
- [YAML Frontmatter Specification](#yaml-frontmatter-specification)
|
|
- [Description Best Practices](#description-best-practices)
|
|
- [File Organization](#file-organization)
|
|
- [Tool Restrictions](#tool-restrictions)
|
|
- [Testing Skills](#testing-skills)
|
|
|
|
## Validation Rules
|
|
|
|
### Name Requirements
|
|
|
|
**Format**: `^[a-z0-9-]+$`
|
|
|
|
- Only lowercase letters (a-z)
|
|
- Numbers (0-9)
|
|
- Hyphens (-)
|
|
- No spaces, underscores, or special characters
|
|
- Maximum length: 64 characters
|
|
|
|
**Valid examples**:
|
|
- `pdf-processor`
|
|
- `commit-helper`
|
|
- `log-analyzer-2`
|
|
- `api-client-gen`
|
|
|
|
**Invalid examples**:
|
|
- `PDF_Processor` (uppercase and underscore)
|
|
- `commit helper` (space)
|
|
- `log.analyzer` (period)
|
|
- `api-client!` (special character)
|
|
|
|
### Description Requirements
|
|
|
|
**Length**: Maximum 1024 characters
|
|
|
|
**Must include**:
|
|
1. What the skill does (capabilities)
|
|
2. When to use it (triggers)
|
|
3. Key terms for discovery
|
|
|
|
**Structure**:
|
|
```
|
|
[What it does]. [When to use it]. [Optional: Requirements].
|
|
```
|
|
|
|
**Good example**:
|
|
```
|
|
Extract text and tables from PDF files, fill forms, merge documents.
|
|
Use when working with PDF files, forms, or document extraction.
|
|
Requires pypdf and pdfplumber packages.
|
|
```
|
|
|
|
**Poor example**:
|
|
```
|
|
Helps with documents.
|
|
```
|
|
|
|
### YAML Frontmatter Rules
|
|
|
|
**Structure**:
|
|
```yaml
|
|
---
|
|
name: skill-name
|
|
description: Skill description
|
|
allowed-tools: Tool1, Tool2, Tool3 # Optional
|
|
---
|
|
```
|
|
|
|
**Rules**:
|
|
- Must start with `---` on line 1
|
|
- Must end with `---` before content starts
|
|
- Use spaces, not tabs
|
|
- Required fields: `name`, `description`
|
|
- Optional fields: `allowed-tools`
|
|
- Follow YAML syntax strictly
|
|
|
|
**Common errors**:
|
|
```yaml
|
|
# Error: Missing opening ---
|
|
name: skill-name
|
|
---
|
|
|
|
# Error: Tab character instead of spaces
|
|
---
|
|
name: skill-name # <- Tab here
|
|
---
|
|
|
|
# Error: Unquoted string with special chars
|
|
---
|
|
description: It's a skill # <- Apostrophe breaks YAML
|
|
---
|
|
|
|
# Fix: Quote strings with special chars
|
|
---
|
|
description: "It's a skill"
|
|
---
|
|
```
|
|
|
|
## YAML Frontmatter Specification
|
|
|
|
### Required Fields
|
|
|
|
#### name
|
|
- Type: String
|
|
- Format: `^[a-z0-9-]+$`
|
|
- Max length: 64 characters
|
|
- Must be unique within the skill directory
|
|
|
|
#### description
|
|
- Type: String
|
|
- Max length: 1024 characters
|
|
- Should be descriptive and include triggers
|
|
|
|
### Optional Fields
|
|
|
|
#### allowed-tools
|
|
- Type: String (comma-separated) or Array
|
|
- Valid tools: Read, Write, Edit, Glob, Grep, Bash, etc.
|
|
- Restricts which tools Claude can use with this skill
|
|
|
|
**String format**:
|
|
```yaml
|
|
allowed-tools: Read, Grep, Glob
|
|
```
|
|
|
|
**Array format**:
|
|
```yaml
|
|
allowed-tools:
|
|
- Read
|
|
- Grep
|
|
- Glob
|
|
```
|
|
|
|
## Description Best Practices
|
|
|
|
### Include What and When
|
|
|
|
**Structure**: `[Capabilities]. [When to use]. [Requirements].`
|
|
|
|
### Use Specific Triggers
|
|
|
|
Include terms users would actually say:
|
|
|
|
**Good**:
|
|
- "working with Excel files"
|
|
- "analyzing log files"
|
|
- "creating API clients"
|
|
- "when the user mentions PDFs"
|
|
|
|
**Poor**:
|
|
- "for data"
|
|
- "helps with files"
|
|
- "general purpose"
|
|
|
|
### Examples by Domain
|
|
|
|
#### File Processing
|
|
```
|
|
Process and analyze [file type] files, [specific operations].
|
|
Use when working with [file extensions], [user terms], or [tasks].
|
|
```
|
|
|
|
#### Development Tools
|
|
```
|
|
[Action] for [technology/framework], [specific features].
|
|
Use when [development task], [user scenario], or [technical context].
|
|
```
|
|
|
|
#### Analysis Skills
|
|
```
|
|
Analyze [data type] for [patterns/metrics], [output format].
|
|
Use when [analysis task], [debugging scenario], or [investigation type].
|
|
```
|
|
|
|
## File Organization
|
|
|
|
### Basic Structure
|
|
|
|
```
|
|
skill-name/
|
|
└── SKILL.md (required)
|
|
```
|
|
|
|
### With Supporting Files
|
|
|
|
```
|
|
skill-name/
|
|
├── SKILL.md (required)
|
|
├── REFERENCE.md (optional - detailed docs)
|
|
├── EXAMPLES.md (optional - more examples)
|
|
├── scripts/
|
|
│ ├── helper.py
|
|
│ └── validator.js
|
|
└── templates/
|
|
├── template1.txt
|
|
└── template2.md
|
|
```
|
|
|
|
### File Naming Conventions
|
|
|
|
- Use lowercase
|
|
- Use hyphens for spaces
|
|
- Use descriptive names
|
|
- Group by type in subdirectories
|
|
|
|
**Good**:
|
|
- `scripts/validate-input.py`
|
|
- `templates/api-client-template.ts`
|
|
- `docs/advanced-usage.md`
|
|
|
|
**Poor**:
|
|
- `Scripts/ValidateInput.py`
|
|
- `template.txt`
|
|
- `file1.md`
|
|
|
|
### Referencing Files
|
|
|
|
Use relative paths from SKILL.md:
|
|
|
|
```markdown
|
|
See [detailed documentation](REFERENCE.md).
|
|
For examples, check [EXAMPLES.md](EXAMPLES.md).
|
|
|
|
Run the helper:
|
|
```bash
|
|
python scripts/helper.py
|
|
```
|
|
```
|
|
|
|
## Tool Restrictions
|
|
|
|
Use `allowed-tools` to limit tool access for safety and focus.
|
|
|
|
### Common Patterns
|
|
|
|
#### Read-Only Skills
|
|
```yaml
|
|
allowed-tools: Read, Grep, Glob
|
|
```
|
|
|
|
Use for:
|
|
- Analysis tasks
|
|
- Log investigation
|
|
- Code review
|
|
- Documentation reading
|
|
|
|
#### Analysis with Execution
|
|
```yaml
|
|
allowed-tools: Read, Grep, Glob, Bash
|
|
```
|
|
|
|
Use for:
|
|
- Data analysis that needs computation
|
|
- Test execution
|
|
- Build analysis
|
|
|
|
#### Limited Write Access
|
|
```yaml
|
|
allowed-tools: Read, Write, Grep, Glob
|
|
```
|
|
|
|
Use for:
|
|
- Report generation
|
|
- Template expansion
|
|
- Safe file creation
|
|
|
|
### Available Tools
|
|
|
|
Common tools you can restrict to:
|
|
- **Read**: Read file contents
|
|
- **Write**: Create new files
|
|
- **Edit**: Modify existing files
|
|
- **Glob**: Find files by pattern
|
|
- **Grep**: Search file contents
|
|
- **Bash**: Execute shell commands
|
|
- **WebFetch**: Fetch web content
|
|
- **WebSearch**: Search the web
|
|
|
|
### When to Use Tool Restrictions
|
|
|
|
**Use restrictions when**:
|
|
- Skill should be read-only
|
|
- Skill has limited scope
|
|
- Security is important
|
|
- You want to prevent accidental modifications
|
|
|
|
**Don't restrict when**:
|
|
- Skill needs full flexibility
|
|
- Multiple operations required
|
|
- User might need varied access
|
|
|
|
## Testing Skills
|
|
|
|
### Pre-Testing Checklist
|
|
|
|
Before testing a new skill:
|
|
|
|
1. **Validate YAML**:
|
|
```bash
|
|
head -n 20 SKILL.md
|
|
# Check frontmatter format
|
|
```
|
|
|
|
2. **Check file location**:
|
|
```bash
|
|
# Personal
|
|
ls ~/.claude/skills/skill-name/SKILL.md
|
|
|
|
# Project
|
|
ls .claude/skills/skill-name/SKILL.md
|
|
|
|
# Plugin
|
|
ls plugin-name/skills/skill-name/SKILL.md
|
|
```
|
|
|
|
3. **Verify name format**:
|
|
- Lowercase, numbers, hyphens only
|
|
- No spaces or special characters
|
|
|
|
4. **Check description**:
|
|
- Includes what and when
|
|
- Contains trigger terms
|
|
- Under 1024 characters
|
|
|
|
### Testing Process
|
|
|
|
1. **Restart Claude Code**:
|
|
```bash
|
|
# Skills load at startup
|
|
claude
|
|
```
|
|
|
|
2. **Test with trigger phrases**:
|
|
- Use terms from your description
|
|
- Ask questions that match "when to use"
|
|
- Vary phrasing to test discovery
|
|
|
|
3. **Verify activation**:
|
|
- Skill should activate automatically
|
|
- Claude should follow instructions
|
|
- Supporting files should load when referenced
|
|
|
|
4. **Test edge cases**:
|
|
- Invalid inputs
|
|
- Missing dependencies
|
|
- Error conditions
|
|
|
|
### Debug Mode
|
|
|
|
Run with debug flag to see skill loading:
|
|
|
|
```bash
|
|
claude --debug
|
|
```
|
|
|
|
Look for:
|
|
- Skill discovery messages
|
|
- Loading errors
|
|
- YAML parse errors
|
|
- File not found errors
|
|
|
|
### Common Test Scenarios
|
|
|
|
#### Scenario 1: Does it activate?
|
|
```
|
|
User: [Use trigger phrase from description]
|
|
Expected: Skill activates and provides help
|
|
```
|
|
|
|
#### Scenario 2: Are restrictions working?
|
|
```
|
|
User: [Request that needs restricted tool]
|
|
Expected: Permission denied or alternative approach
|
|
```
|
|
|
|
#### Scenario 3: Do supporting files load?
|
|
```
|
|
User: [Ask question requiring reference docs]
|
|
Expected: Claude references the supporting file
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Skill Doesn't Activate
|
|
|
|
**Check**: Description specificity
|
|
- Add more trigger terms
|
|
- Be more explicit about when to use
|
|
- Include user vocabulary
|
|
|
|
**Check**: YAML validity
|
|
```bash
|
|
# View frontmatter
|
|
cat SKILL.md | head -n 10
|
|
```
|
|
|
|
**Check**: File location
|
|
```bash
|
|
# Verify SKILL.md exists in correct location
|
|
ls [path]/SKILL.md
|
|
```
|
|
|
|
### YAML Parse Errors
|
|
|
|
**Common causes**:
|
|
- Tabs instead of spaces
|
|
- Missing quotes around special characters
|
|
- Invalid structure
|
|
- Missing opening/closing `---`
|
|
|
|
**Fix**:
|
|
```yaml
|
|
# Before (broken)
|
|
---
|
|
description: It's broken
|
|
---
|
|
|
|
# After (fixed)
|
|
---
|
|
description: "It's fixed"
|
|
---
|
|
```
|
|
|
|
### Tool Restrictions Not Working
|
|
|
|
**Verify syntax**:
|
|
```yaml
|
|
# Correct
|
|
allowed-tools: Read, Grep, Glob
|
|
|
|
# Also correct
|
|
allowed-tools:
|
|
- Read
|
|
- Grep
|
|
- Glob
|
|
```
|
|
|
|
**Check tool names**:
|
|
- Use exact tool names (case-sensitive)
|
|
- Common names: Read, Write, Edit, Bash, Grep, Glob
|
|
- Separate with commas in string format
|
|
|
|
### Supporting Files Not Loading
|
|
|
|
**Check paths**:
|
|
- Use relative paths from SKILL.md
|
|
- Use forward slashes (/)
|
|
- Don't use absolute paths
|
|
|
|
**Check file exists**:
|
|
```bash
|
|
cd skill-directory
|
|
ls -la
|
|
# Verify all referenced files exist
|
|
```
|
|
|
|
## Best Practices Summary
|
|
|
|
### DO
|
|
|
|
- Keep skills focused on one capability
|
|
- Write specific, detailed descriptions
|
|
- Include trigger terms users would say
|
|
- Use tool restrictions for safety
|
|
- Provide concrete examples
|
|
- Test thoroughly before sharing
|
|
- Document requirements clearly
|
|
- Use progressive disclosure (supporting files)
|
|
|
|
### DON'T
|
|
|
|
- Create vague, generic descriptions
|
|
- Use invalid characters in names
|
|
- Make skills too broad
|
|
- Forget to include "when to use"
|
|
- Skip validation before testing
|
|
- Use absolute paths for supporting files
|
|
- Mix tabs and spaces in YAML
|
|
- Omit error handling guidance
|
|
|
|
## Version History
|
|
|
|
When documenting skill changes, use semantic versioning:
|
|
|
|
```markdown
|
|
## Version History
|
|
- v2.0.0 (2025-11-07): Breaking changes to API
|
|
- v1.1.0 (2025-10-15): Added new features
|
|
- v1.0.0 (2025-10-01): Initial release
|
|
```
|
|
|
|
This helps team members understand what changed between versions.
|