Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:00:42 +08:00
commit cc49e355bc
37 changed files with 10917 additions and 0 deletions

View File

@@ -0,0 +1,649 @@
# Best Practices for Writing Claude Skills
Comprehensive guide to creating effective, maintainable, and discoverable skills.
## Core Principles
### 1. Be Concise
**Why**: Skills extend Claude's knowledge. Claude already has extensive capabilities - only add what's truly new.
**How**:
- Challenge every sentence: "Does Claude really need this?"
- Remove obvious information
- Keep SKILL.md under 500 lines
- Move extensive details to reference files
**Examples**:
```markdown
# Too verbose
## Processing Files
When you need to process files, first you should read them using the Read tool.
The Read tool is a built-in capability that allows you to access file contents.
After reading, analyze the content carefully.
# Concise (Claude knows this)
## Processing Files
Extract key metrics from each file and aggregate results.
```
### 2. Set Appropriate Degrees of Freedom
**Why**: Match specificity to task complexity and fragility.
**High Freedom**: For flexible, creative tasks where Claude can adapt
```markdown
Analyze the codebase and suggest architectural improvements.
```
**Low Freedom**: For fragile, sequence-critical, or safety-critical operations
```markdown
1. Backup database to `backups/db_YYYYMMDD.sql`
2. Run migration: `npm run migrate:up`
3. Verify migration: check `schema_version` table
4. If verification fails, rollback: `npm run migrate:down`
```
**Balance**:
```markdown
# Too restrictive (micro-managing)
1. Open the file
2. Read line 1
3. Parse the date
4. Store in variable called 'date'
# Appropriate
Extract the date from the first line using format YYYY-MM-DD.
Validate it's a valid date before proceeding.
```
### 3. Clear Naming
**Skill Names** (in frontmatter):
- Use gerund form (verb + -ing)
- Be specific and descriptive
- Avoid vague terms
```yaml
# Good
name: Analyzing Performance Metrics
name: Generating API Documentation
name: Processing Invoice PDFs
# Avoid
name: Helper
name: Utils
name: Manager
name: Processor
```
**Directory Names**:
```
# Good
performance-analyzer/
api-doc-generator/
invoice-processor/
# Avoid
helper/
utils/
thing/
```
### 4. Specific Descriptions
**Why**: The description determines when Claude chooses to use your skill.
**Formula**: [Action] [specific task] [key context/constraints]
```yaml
# Excellent
description: Analyzes React components for performance anti-patterns including unnecessary re-renders, missing memoization, and inefficient hooks usage
# Good
description: Processes invoice PDFs to extract vendor, date, items, and total with validation
# Too vague (Claude won't know when to use it)
description: Helps with documents
description: A useful utility
```
**Include key terms**:
```yaml
# Include technology names
description: Creates TypeScript React components with styled-components and Jest tests
# Include output formats
description: Converts CSV data to validated JSON following schema.org format
# Include constraints
description: Generates API documentation from JSDoc comments preserving examples and types
```
## Writing Effective Instructions
### Structure Your Instructions
```markdown
# Good structure
## Overview
Brief 1-2 sentence summary
## Prerequisites
What must exist or be true before starting
## Workflow
1. Step one with specifics
2. Step two with validation
3. Step three with output format
## Validation
How to verify success
## Examples
Concrete examples
```
### Be Specific About Outputs
```markdown
# Vague
Generate a report.
# Specific
Generate a report in markdown with:
- Summary section with key findings
- Metrics table with columns: metric, value, threshold, status
- Recommendations list ordered by priority
```
### Include Validation Steps
```markdown
# Without validation
1. Parse the configuration
2. Apply settings
3. Restart service
# With validation
1. Parse the configuration
2. Validate required fields exist: host, port, api_key
3. Apply settings
4. Verify service starts successfully (check port is listening)
```
### Provide Context for Decisions
```markdown
# No context
Use the fast algorithm.
# With context
Use the fast algorithm for files under 10MB.
For larger files, use the streaming algorithm to avoid memory issues.
```
## Progressive Disclosure
### When to Use Reference Files
Use reference files when:
- Background information exceeds 100 lines
- API documentation is comprehensive
- Multiple detailed examples are needed
- Content is optional/advanced
### Self-Contained Skills
**IMPORTANT**: Skills must be completely self-contained within their own directory.
**DO:**
- Reference files within the skill directory: `reference/api-docs.md`
- Include all necessary content within the skill structure
- Duplicate information if needed across multiple skills
**DON'T:**
- Reference files outside the skill directory (e.g., `../../CLAUDE.md`)
- Reference project files (e.g., `../other-skill/reference.md`)
- Depend on external documentation not in the skill directory
Why: Skills may be used in different contexts (personal, project, plugin) and must work independently without external dependencies.
### How to Reference
```markdown
# Good: Clear purpose, internal reference
For complete API reference, see `reference/api-docs.md`
See `reference/examples.md` for 10+ real-world examples
# Bad: External reference
See the project CLAUDE.md for more details
Refer to ../../docs/guide.md
# Too vague
More info in reference folder
```
### What Stays in SKILL.md
Keep in SKILL.md:
- Core workflow (the "what" and "how")
- Essential constraints
- 1-2 key examples
- Validation steps
- References to detailed docs (within skill directory)
Move to reference files:
- Extended background ("why" and history)
- Comprehensive API documentation
- Many examples
- Edge cases
- Troubleshooting guides
## Documentation Patterns
### Avoid Time-Sensitive Information
```markdown
# Avoid (will become outdated)
Use the new React hooks API introduced in version 16.8
# Better (timeless)
Use React hooks for state management
```
### Use Consistent Terminology
Pick terms and stick with them:
```markdown
# Inconsistent
1. Parse the document
2. Extract data from the file
3. Process the input
# Consistent
1. Parse the document
2. Extract data from the document
3. Process the document
```
### Write for the Model
Remember: Skills are for Claude, not humans.
```markdown
# Too human-centric
This is a really helpful tool that makes your life easier!
Everyone loves this workflow because it's so intuitive.
# Model-focused
Extract structured data from unstructured logs using these patterns.
```
### Provide Concrete Examples
```markdown
# Abstract
Process dates correctly.
# Concrete
Convert dates to ISO 8601 format:
- Input: "Jan 15, 2024" → Output: "2024-01-15"
- Input: "3/7/24" → Output: "2024-03-07"
```
## Tool Restrictions
### When to Restrict
Restrict tools (`allowed-tools`) when:
1. **Safety-critical operations**: Prevent unintended modifications
```yaml
allowed-tools: [Read, Grep, Glob] # Read-only analysis
```
2. **Enforcing workflow**: Must use specific tools in order
```yaml
allowed-tools: [Bash] # Only run provided scripts
```
3. **Compliance**: Must not modify certain files
```yaml
allowed-tools: [Read, Grep] # Audit mode
```
### Common Patterns
```yaml
# Analysis only
allowed-tools: [Read, Grep, Glob]
# File operations
allowed-tools: [Read, Write, Edit, Glob, Grep]
# Development
allowed-tools: [Read, Write, Edit, Bash, Glob, Grep]
# Script execution
allowed-tools: [Bash, Read]
```
### Don't Over-Restrict
```yaml
# Too restrictive (Claude can't be effective)
allowed-tools: [Read]
# Better (if editing is needed)
allowed-tools: [Read, Edit, Grep, Glob]
```
## Script Best Practices
### When to Use Scripts
Use scripts for:
- Deterministic operations (same input → same output)
- Complex calculations
- API calls
- System operations
- Validation logic
Don't use scripts for:
- What Claude can do better (analysis, decision-making)
- Simple operations
- One-off tasks
### Script Structure
```python
#!/usr/bin/env python3
"""
Brief description of what this script does.
Usage:
python script.py input.json output.json
Exit codes:
0: Success
1: Validation error
2: File error
"""
import sys
import json
def main():
# Clear error handling
if len(sys.argv) != 3:
print("Usage: script.py input.json output.json", file=sys.stderr)
sys.exit(1)
# Validate inputs
# Process data
# Output results
if __name__ == "__main__":
main()
```
### Script Documentation
In SKILL.md:
```markdown
## Validation
Run `scripts/validate.py` to verify output format:
\`\`\`bash
python scripts/validate.py output.json
\`\`\`
Returns exit code 0 on success, 1 on validation errors.
```
## Testing Skills
### Create Test Scenarios
Before writing extensive documentation:
```markdown
# Test scenarios
1. Input: Simple case
Expected: Standard output
2. Input: Edge case (empty file)
Expected: Handle gracefully
3. Input: Invalid data
Expected: Clear error message
```
### Iterative Development
1. Start with minimal SKILL.md
2. Test with Claude on real task
3. Note what Claude struggles with
4. Add specific guidance for those areas
5. Repeat until effective
### Evaluation Questions
- Does Claude discover the skill appropriately?
- Does Claude understand when NOT to use it?
- Are outputs consistent and correct?
- Does Claude handle edge cases?
- Is the skill too restrictive or too loose?
## Common Mistakes
### Mistake 1: Over-Explaining
```markdown
# Bad
The Read tool is a powerful capability that allows you to read files.
You should use it when you need to access file contents. Files are
stored on disk and contain data...
# Good
Read the configuration file and extract the database settings.
```
### Mistake 2: Vague Descriptions
```yaml
# Bad
description: Helps with things
# Good
description: Converts CSV sales data to quarterly revenue reports with charts
```
### Mistake 3: Missing Examples
```markdown
# Bad
Format the output appropriately.
# Good
Format output as JSON:
{
"metric": "response_time",
"value": 245,
"unit": "ms"
}
```
### Mistake 4: No Validation
```markdown
# Bad
1. Parse config
2. Apply changes
3. Done
# Good
1. Parse config
2. Validate required fields: api_key, endpoint, timeout
3. Apply changes
4. Verify: curl endpoint returns 200
```
### Mistake 5: Monolithic SKILL.md
```markdown
# Bad: Everything in SKILL.md (800 lines)
[200 lines of background]
[300 lines of API docs]
[300 lines of examples]
# Good: Progressive disclosure
# SKILL.md (200 lines)
- Core workflow
- Key example
- Reference to `reference/api-docs.md`
- Reference to `reference/examples.md`
```
## Skill Maintenance
### Versioning
If distributing via plugin:
- Increment plugin version in `plugin.json`
- Document changes in plugin changelog
- Test with current Claude model
### Evolution
As skills mature:
1. Monitor usage patterns
2. Refine based on real usage
3. Add missing edge cases
4. Remove unnecessary verbosity
5. Update examples
### Deprecation
When deprecating:
1. Update description: "DEPRECATED: Use skill-name-v2 instead"
2. Keep functional for transition period
3. Document migration path
4. Remove after transition
## Performance Optimization
### Reduce Token Usage
```markdown
# Higher token usage
Detailed explanation of every step with comprehensive background
information that Claude likely already knows from pre-training.
# Optimized
[Concise instructions referencing detailed docs in reference/ as needed]
```
### Faster Discovery
Make skills discoverable with specific descriptions:
```yaml
# Faster discovery (specific terms)
description: Processes Stripe webhook events for payment.succeeded and payment.failed
# Slower discovery (vague)
description: Handles webhooks
```
## Collaboration
### Team Skills
When creating skills for teams:
- Document project-specific conventions
- Include team workflow patterns
- Reference team tools and systems
- Use consistent terminology across team skills
### Skill Libraries
Organize related skills:
```
.claude/skills/
├── data-processing/
│ ├── csv-processor/
│ ├── json-transformer/
│ └── xml-parser/
└── code-generation/
├── react-components/
└── api-endpoints/
```
## Advanced Patterns
### Skill Composition
Reference other skills:
```markdown
This skill builds on the "Processing CSVs" skill.
First use that skill to parse the data, then apply the transformations below.
```
### Conditional Workflows
```markdown
If dataset < 1000 rows:
Process in-memory using standard algorithm
If dataset >= 1000 rows:
1. Split into chunks of 1000 rows
2. Process each chunk
3. Aggregate results
```
### Feedback Loops
```markdown
1. Generate initial output
2. Validate against schema
3. If validation fails:
- Review error messages
- Adjust output
- Re-validate
4. Repeat until valid
```
## Checklist for High-Quality Skills
Before finalizing a skill:
- [ ] Name uses gerund form and is specific
- [ ] Description is clear, specific, includes key terms
- [ ] SKILL.md is under 500 lines
- [ ] Examples are concrete and helpful
- [ ] Validation steps are included
- [ ] Tool restrictions are appropriate (if any)
- [ ] Scripts have error handling and documentation
- [ ] Reference files are well-organized
- [ ] Tested with real scenarios
- [ ] No time-sensitive information
- [ ] Consistent terminology throughout
- [ ] Clear when to use / when not to use
## Key Principles Summary
1. **Be concise**: Only what Claude doesn't know
2. **Be specific**: Clear names, descriptions, examples
3. **Be practical**: Test with real scenarios
4. **Be progressive**: Start simple, add detail as needed
5. **Be consistent**: Terminology, formatting, style
6. **Be validated**: Include verification steps
7. **Be discovered**: Specific descriptions with key terms
8. **Be maintained**: Update based on usage
Remember: Skills are extensions of Claude's capabilities. Make them focused, discoverable, and effective by following these practices.