298 lines
7.6 KiB
Markdown
298 lines
7.6 KiB
Markdown
|
|
# Skill Best Practices
|
||
|
|
|
||
|
|
Comprehensive guidelines for creating effective Agent Skills.
|
||
|
|
|
||
|
|
## Progressive Disclosure Architecture
|
||
|
|
|
||
|
|
Skills work in three layers:
|
||
|
|
|
||
|
|
### Layer 1: Metadata (Always Loaded)
|
||
|
|
- **What**: YAML frontmatter with `name` and `description`
|
||
|
|
- **When**: Pre-loaded at every session start
|
||
|
|
- **Cost**: ~100 tokens per skill
|
||
|
|
- **Purpose**: Trigger detection
|
||
|
|
|
||
|
|
### Layer 2: Instructions (Triggered)
|
||
|
|
- **What**: Main SKILL.md content
|
||
|
|
- **When**: Loads when Claude determines skill applies
|
||
|
|
- **Cost**: Variable (keep under 1000 tokens)
|
||
|
|
- **Purpose**: Procedural guidance, workflows
|
||
|
|
|
||
|
|
### Layer 3: Resources (On-Demand)
|
||
|
|
- **What**: Additional files, scripts, reference materials
|
||
|
|
- **When**: Only when explicitly needed
|
||
|
|
- **Cost**: Only when accessed
|
||
|
|
- **Purpose**: Deep reference, examples
|
||
|
|
|
||
|
|
## Writing Effective Descriptions
|
||
|
|
|
||
|
|
The `description` field is your skill's trigger mechanism. Make it count.
|
||
|
|
|
||
|
|
### Good Descriptions
|
||
|
|
✓ **Specific use cases**: "Create and analyze Excel spreadsheets with formulas, formatting, and pivot tables"
|
||
|
|
✓ **Clear triggers**: "Use when building React components following atomic design principles"
|
||
|
|
✓ **Domain clarity**: "Debug Swift applications using LLDB for crashes, memory issues, and runtime errors"
|
||
|
|
|
||
|
|
### Poor Descriptions
|
||
|
|
✗ **Too vague**: "Helps with coding"
|
||
|
|
✗ **No trigger context**: "Python utilities"
|
||
|
|
✗ **Feature list without purpose**: "Has functions for A, B, and C"
|
||
|
|
|
||
|
|
### Template
|
||
|
|
```
|
||
|
|
[Action verb] [specific domain/task] [with/for/using] [key capabilities].
|
||
|
|
Use when [primary trigger scenario] [and optional secondary scenarios].
|
||
|
|
```
|
||
|
|
|
||
|
|
**Example**: "Create professional PowerPoint presentations with custom themes, charts, and animations. Use when building slide decks, pitch presentations, or visual reports."
|
||
|
|
|
||
|
|
## Skill File Structure
|
||
|
|
|
||
|
|
### Mandatory: SKILL.md
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
---
|
||
|
|
name: Your Skill Name # Max 64 chars
|
||
|
|
description: Clear description of usage # Max 1024 chars
|
||
|
|
---
|
||
|
|
```
|
||
|
|
|
||
|
|
### Optional: Additional Resources
|
||
|
|
|
||
|
|
```
|
||
|
|
my-skill/
|
||
|
|
├── SKILL.md # Main entry (required)
|
||
|
|
├── reference.md # Deep reference
|
||
|
|
├── examples.md # Code samples
|
||
|
|
├── workflows/ # Step-by-step procedures
|
||
|
|
│ ├── advanced.md
|
||
|
|
│ └── beginner.md
|
||
|
|
└── scripts/ # Executable utilities
|
||
|
|
└── helper.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
## SKILL.md Content Structure
|
||
|
|
|
||
|
|
### 1. Start with "When to Use This Skill"
|
||
|
|
|
||
|
|
```markdown
|
||
|
|
## When to Use This Skill
|
||
|
|
|
||
|
|
Use this skill when:
|
||
|
|
- [Primary scenario]
|
||
|
|
- [Secondary scenario]
|
||
|
|
- [Edge case to include]
|
||
|
|
|
||
|
|
Do NOT use this skill for:
|
||
|
|
- [Common confusion case]
|
||
|
|
- [Related but different scenario]
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Structure for Scannability
|
||
|
|
|
||
|
|
```markdown
|
||
|
|
## Quick Start
|
||
|
|
[Minimal example to get started]
|
||
|
|
|
||
|
|
## Core Workflows
|
||
|
|
### Workflow 1: [Name]
|
||
|
|
1. Step one
|
||
|
|
2. Step two
|
||
|
|
|
||
|
|
## Advanced Techniques
|
||
|
|
[Less common but powerful approaches]
|
||
|
|
|
||
|
|
## Common Pitfalls
|
||
|
|
[Known issues and how to avoid them]
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Include Concrete Examples
|
||
|
|
|
||
|
|
Always provide working examples, not abstract descriptions:
|
||
|
|
|
||
|
|
```markdown
|
||
|
|
## Example: Creating a User Authentication Module
|
||
|
|
|
||
|
|
**Scenario**: Building JWT-based auth for a Flask API
|
||
|
|
|
||
|
|
**Steps**:
|
||
|
|
1. Install dependencies: `pip install pyjwt flask-login`
|
||
|
|
2. Create auth.py with [specific structure]
|
||
|
|
3. Configure middleware in app.py
|
||
|
|
4. Add protected routes with @login_required
|
||
|
|
|
||
|
|
**Result**: Users can register, login, and access protected endpoints
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Reference Additional Files Explicitly
|
||
|
|
|
||
|
|
```markdown
|
||
|
|
## Deep Dive: Advanced Patterns
|
||
|
|
|
||
|
|
For comprehensive examples, see [examples.md](examples.md).
|
||
|
|
For API reference, consult [reference.md](reference.md).
|
||
|
|
```
|
||
|
|
|
||
|
|
## Optimizing for Token Efficiency
|
||
|
|
|
||
|
|
### When to Split Files
|
||
|
|
|
||
|
|
**Keep in SKILL.md if:**
|
||
|
|
- Information needed for 80%+ of use cases
|
||
|
|
- Content is under ~2000 tokens
|
||
|
|
- Steps are sequential and interdependent
|
||
|
|
|
||
|
|
**Split to separate file if:**
|
||
|
|
- Content is mutually exclusive (e.g., Python vs JavaScript examples)
|
||
|
|
- Material is reference-heavy (API docs, configuration options)
|
||
|
|
- Information is advanced/edge-case focused
|
||
|
|
|
||
|
|
### Code as Documentation
|
||
|
|
|
||
|
|
Executable scripts serve dual purposes:
|
||
|
|
1. **Tools Claude can run** without loading code into context
|
||
|
|
2. **Documentation by example** showing best practices
|
||
|
|
|
||
|
|
```markdown
|
||
|
|
## Generating Boilerplate
|
||
|
|
|
||
|
|
Run the initialization script:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
./scripts/init-project.sh my-app
|
||
|
|
```
|
||
|
|
|
||
|
|
This creates [description of what's created].
|
||
|
|
```
|
||
|
|
|
||
|
|
Claude can execute this without script code consuming context tokens.
|
||
|
|
|
||
|
|
## Development Workflow
|
||
|
|
|
||
|
|
### 1. Start with Evaluation
|
||
|
|
|
||
|
|
**Don't guess what skills you need.** Instead:
|
||
|
|
1. Run Claude on representative tasks
|
||
|
|
2. Identify where it struggles or asks repetitive questions
|
||
|
|
3. Capture successful patterns from those sessions
|
||
|
|
4. Codify into a skill
|
||
|
|
|
||
|
|
### 2. Iterate with Claude
|
||
|
|
|
||
|
|
Build skills collaboratively:
|
||
|
|
1. Work with Claude on a task
|
||
|
|
2. When you find a good solution, ask: "Should we capture this as a skill?"
|
||
|
|
3. Let Claude help structure the skill content
|
||
|
|
4. Test with new similar tasks
|
||
|
|
5. Refine based on actual usage
|
||
|
|
|
||
|
|
### 3. Monitor Trigger Accuracy
|
||
|
|
|
||
|
|
After creating a skill, test triggering:
|
||
|
|
|
||
|
|
**Test scenarios:**
|
||
|
|
- Direct requests that SHOULD trigger it
|
||
|
|
- Similar requests that SHOULD trigger it
|
||
|
|
- Related requests that should NOT trigger it
|
||
|
|
|
||
|
|
If triggering is unreliable, refine the `description` field.
|
||
|
|
|
||
|
|
### 4. Start Simple, Grow Organically
|
||
|
|
|
||
|
|
Begin with minimal SKILL.md:
|
||
|
|
- Clear metadata
|
||
|
|
- One core workflow
|
||
|
|
- A few examples
|
||
|
|
|
||
|
|
Add complexity only when needed:
|
||
|
|
- Split files when SKILL.md exceeds ~3000 tokens
|
||
|
|
- Add scripts when repeating same commands
|
||
|
|
- Create reference files for API documentation
|
||
|
|
|
||
|
|
## Common Anti-Patterns
|
||
|
|
|
||
|
|
### ❌ Generic Description
|
||
|
|
```yaml
|
||
|
|
description: Helps with coding
|
||
|
|
```
|
||
|
|
**Fix**: Be specific about domain and triggers
|
||
|
|
|
||
|
|
### ❌ No Process Defined
|
||
|
|
```markdown
|
||
|
|
You are a code reviewer. Review code.
|
||
|
|
```
|
||
|
|
**Fix**: Define step-by-step process
|
||
|
|
|
||
|
|
### ❌ All Tools Granted
|
||
|
|
```yaml
|
||
|
|
# Omitting tools when only reads needed
|
||
|
|
```
|
||
|
|
**Fix**: Whitelist minimum required tools
|
||
|
|
|
||
|
|
### ❌ Verbose Prompt
|
||
|
|
```markdown
|
||
|
|
You are an expert developer with 20 years of experience... [3000 words]
|
||
|
|
```
|
||
|
|
**Fix**: Be concise, focus on process and format
|
||
|
|
|
||
|
|
## Testing Skills
|
||
|
|
|
||
|
|
### Test Plan Template
|
||
|
|
|
||
|
|
```markdown
|
||
|
|
# Positive Tests (Should Activate)
|
||
|
|
1. "Create REST endpoint for user auth"
|
||
|
|
Expected: Activates
|
||
|
|
Actual: ___
|
||
|
|
|
||
|
|
# Negative Tests (Should NOT Activate)
|
||
|
|
1. "Write unit tests for API"
|
||
|
|
Expected: Does not activate
|
||
|
|
Actual: ___
|
||
|
|
|
||
|
|
## Results
|
||
|
|
- Precision: X%
|
||
|
|
- Recall: Y%
|
||
|
|
```
|
||
|
|
|
||
|
|
## Security Considerations
|
||
|
|
|
||
|
|
### Never Include
|
||
|
|
- Hardcoded credentials or API keys
|
||
|
|
- Personal identifying information
|
||
|
|
- Proprietary code without permission
|
||
|
|
- Instructions to make unsafe system changes
|
||
|
|
|
||
|
|
### Always Consider
|
||
|
|
- Can this skill be misused if shared?
|
||
|
|
- Does it access sensitive file locations?
|
||
|
|
- Are external dependencies from trusted sources?
|
||
|
|
|
||
|
|
## Skill Metadata Checklist
|
||
|
|
|
||
|
|
Before finalizing:
|
||
|
|
|
||
|
|
- [ ] Name is under 64 characters
|
||
|
|
- [ ] Description is under 1024 characters
|
||
|
|
- [ ] Description includes specific use cases
|
||
|
|
- [ ] Description mentions when to trigger
|
||
|
|
- [ ] SKILL.md has YAML frontmatter
|
||
|
|
- [ ] "When to Use This Skill" section present
|
||
|
|
- [ ] At least one concrete example
|
||
|
|
- [ ] No sensitive information
|
||
|
|
- [ ] File references are accurate
|
||
|
|
- [ ] Tested triggering scenarios
|
||
|
|
- [ ] Tested NOT triggering scenarios
|
||
|
|
|
||
|
|
## Summary
|
||
|
|
|
||
|
|
**Best practices in order of importance:**
|
||
|
|
|
||
|
|
1. **Write specific descriptions** with clear triggers
|
||
|
|
2. **Structure progressively** (metadata → core → details)
|
||
|
|
3. **Start simple** and grow based on actual needs
|
||
|
|
4. **Test thoroughly** with positive and negative scenarios
|
||
|
|
5. **Optimize tokens** by splitting appropriately
|
||
|
|
6. **Provide examples** not just theory
|
||
|
|
7. **Monitor usage** and refine based on feedback
|