playbook/outfitter-agents/plugins/outfitter/templates/README.md

554 lines
13 KiB
Markdown

# Claude Code Templates
Copy-paste ready templates for all Claude Code component types. These templates follow best practices from the [Claude Code Documentation](https://docs.claude.com/en/docs/claude-code/overview).
## Directory Structure
```
templates/
├── slash-commands/ # Custom command templates
├── hooks/ # Event hook templates
├── skills/ # Agent skill templates
├── agents/ # Specialized agent templates
└── README.md # This file
```
## Quick Start
### Using Templates
1. **Choose a template** that matches your needs
2. **Copy to appropriate location**:
- Slash commands: `.claude/commands/` or `~/.claude/commands/`
- Hooks: `.claude/hooks/` (scripts) + `.claude/settings.json` (config)
- Skills: `.claude/skills/` or `~/.claude/skills/`
- Agents: `.claude/agents/` or `~/.claude/agents/`
3. **Replace placeholders** (search for `[YOUR_*]`)
4. **Test and iterate**
### Example: Create a Slash Command
```bash
# 1. Copy template
cp templates/slash-commands/simple.md .claude/commands/review.md
# 2. Edit the file, replace placeholders:
# [YOUR_DESCRIPTION] → "Review code for best practices"
# [YOUR_COMMAND_NAME] → "Code Review"
# [YOUR_PROMPT_INSTRUCTIONS] → Your instructions
# 3. Test it
claude
/review
```
## Templates Overview
### Slash Commands
Located in `slash-commands/`:
| Template | Use Case | Features |
|----------|----------|----------|
| `simple.md` | Basic command with no args | Simple prompt template |
| `with-args.md` | Command with arguments | `$1`, `$2`, `$ARGUMENTS` |
| `with-bash.md` | Command executing bash | `!` prefix for bash execution |
| `with-files.md` | Command reading files | `@` prefix for file references |
**Quick reference**:
- **Arguments**: `$1`, `$2`, `$ARGUMENTS`
- **Bash execution**: `!`git status``
- **File references**: `@src/file.ts`
- **Frontmatter**: `description`, `argument-hint`, `allowed-tools`
### Hooks
Located in `hooks/`:
| Template | Hook Type | Use Case |
|----------|-----------|----------|
| `post-tool-use-formatter/` | PostToolUse | Auto-format files after Write/Edit |
| `pre-tool-use-validator/` | PreToolUse | Validate operations before execution |
| `user-prompt-context/` | UserPromptSubmit | Add context to every prompt |
| `bash-validator/` | PreToolUse | Validate bash commands (Bun/TypeScript) |
**Each hook template includes**:
- `hooks.json` - Configuration with matchers
- Script file - Working implementation (Bash or TypeScript)
- Security best practices built-in
- Error handling patterns
**Installing a hook**:
```bash
# 1. Copy script to project
cp -r templates/hooks/post-tool-use-formatter/ .claude/hooks/
# 2. Add configuration to .claude/settings.json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit(*.ts)",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/format.sh",
"timeout": 30
}
]
}
]
}
}
# 3. Make script executable
chmod +x .claude/hooks/format.sh
```
### Skills
Located in `skills/`:
| Template | Complexity | Use Case |
|----------|------------|----------|
| `simple-skill/` | Simple | Single-file skill |
| `multi-file-skill/` | Complex | Skill with reference docs |
| `skill-with-scripts/` | Advanced | Skill using helper scripts |
**Skill template features**:
- Complete `SKILL.md` with frontmatter
- Best practices for descriptions
- Tool restrictions examples
- Progressive disclosure patterns
- Helper scripts (for advanced template)
**Creating a skill**:
```bash
# 1. Choose template
cp -r templates/skills/simple-skill/ .claude/skills/my-skill/
# 2. Rename template and edit
mv .claude/skills/my-skill/SKILL.template.md .claude/skills/my-skill/SKILL.md
# Replace all [YOUR_*] placeholders
# Update name and description (critical for discovery!)
# 3. Test
claude
# Skill will activate when description keywords are mentioned
```
### Agents
Located in `agents/`:
| Template | Specialization | Use Case |
|----------|---------------|----------|
| `code-reviewer.md` | Code review | Security, performance, quality analysis |
| `test-specialist.md` | Testing | TDD, test writing, coverage analysis |
| `documentation-generator.md` | Documentation | API docs, guides, architecture docs |
**Agent template features**:
- Complete role definition
- Detailed process workflows
- Best practices and patterns
- Output format guidelines
- Tool restrictions
**Using an agent template**:
```bash
# 1. Copy to project
cp templates/agents/code-reviewer.md .claude/agents/
# 2. Customize if needed
# Agents work out of the box, but you can adjust to your needs
# 3. Claude will use agents automatically when appropriate
```
## Template Customization Guide
### Common Placeholders
Replace these in all templates:
- `[YOUR_DESCRIPTION]` - Brief description of functionality
- `[YOUR_COMMAND_NAME]` - Name of the command/skill/agent
- `[YOUR_PROMPT_INSTRUCTIONS]` - Core instructions
- `[YOUR_ARG_HINT]` - Hint for arguments (e.g., `<file-path>`)
- `[YOUR_ALLOWED_TOOLS]` - Tool restrictions (e.g., `Read, Grep, Glob`)
- `[YOUR_SKILL_NAME]` - Name for skills
- `[CORE_CAPABILITY]` - What the skill/agent does
- `[language]` - Programming language for examples
- `[CODE_EXAMPLE]` - Working code example
### Frontmatter Fields
#### Slash Commands
```yaml
---
description: Brief description (shown in /help)
argument-hint: <arg1> [optional-arg2]
allowed-tools: Bash(git *), Read, Write
model: claude-3-5-haiku-20241022 # Optional: specific model
disable-model-invocation: false # Optional: prevent SlashCommand tool
---
```
#### Skills
```yaml
---
name: skill-name
description: What the skill does and when to use it. Include trigger keywords.
allowed-tools: Read, Grep, Glob # Optional: restrict tools
version: 1.0.0 # Optional: version tracking
---
```
#### Agents
```yaml
---
description: What this agent specializes in
capabilities:
- Capability 1
- Capability 2
allowed-tools: Read, Write, Edit # Optional: restrict tools
---
```
### Best Practices for Customization
#### 1. Write Specific Descriptions
```yaml
# ❌ Too vague
description: Helps with files
# ✅ Specific with triggers
description: Extract text and tables from PDF files, fill forms, merge documents. Use when working with PDF files or when users mention PDFs, forms, or document extraction.
```
#### 2. Include Working Examples
Always provide code examples that:
- Actually work (test them!)
- Are realistic (not just `foo`/`bar`)
- Include comments explaining non-obvious parts
- Show common use cases
#### 3. Follow the AAA Pattern for Examples
```typescript
// Arrange: Setup
const items = [{ price: 10 }, { price: 20 }];
// Act: Execute
const result = calculateTotal(items);
// Assert: Verify
expect(result).toBe(30);
```
#### 4. Security in Hooks
Always include:
```bash
set -euo pipefail # Fail on errors, undefined vars, pipe failures
# Quote variables
rm "$FILE_PATH" # ✅ Safe
rm $FILE_PATH # ❌ Unsafe
# Validate inputs
if echo "$FILE_PATH" | grep -q '\.\.'; then
echo "Path traversal detected" >&2
exit 2
fi
```
## Testing Your Components
### Testing Slash Commands
```bash
# 1. Create command
cp templates/slash-commands/simple.md .claude/commands/test.md
# 2. Edit and customize
# ...
# 3. Test in Claude
claude
/help # Verify it's listed
/test # Run the command
# Ctrl+R for transcript mode to see detailed execution
```
### Testing Hooks
```bash
# 1. Install hook
cp -r templates/hooks/post-tool-use-formatter/ .claude/hooks/
chmod +x .claude/hooks/format.sh
# 2. Add to settings.json
# ...
# 3. Test manually first
echo '{"tool_name":"Write","tool_input":{"file_path":"test.ts"}}' | .claude/hooks/format.sh
# 4. Test with Claude
claude
# Write a .ts file and watch hook execute
```
### Testing Skills
```bash
# 1. Create skill
cp -r templates/skills/simple-skill/ .claude/skills/my-test-skill/
# 2. Rename and customize
mv .claude/skills/my-test-skill/SKILL.template.md .claude/skills/my-test-skill/SKILL.md
# Focus on a SPECIFIC, CLEAR description with trigger keywords
# 3. Test discovery
claude --debug # Check skill loading logs
# 4. Test activation
claude
# Use trigger keywords from description in your prompt
```
## Common Patterns
### Pattern 1: Command with Git Context
```markdown
---
description: Review recent changes
allowed-tools: Bash(git *), Read
---
# Recent Changes Review
## Context
Recent commits: !`git log --oneline -5`
Uncommitted changes: !`git diff`
Current branch: !`git branch --show-current`
## Task
Review the changes above and summarize:
1. What changed
2. Potential issues
3. Suggested improvements
```
### Pattern 2: Validation Hook
```bash
#!/usr/bin/env bash
set -euo pipefail
INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
# Validate
if [[ -z "$FILE_PATH" ]]; then
echo "Error: No file path" >&2
exit 2 # Block and show to Claude
fi
# Check path traversal
if echo "$FILE_PATH" | grep -q '\.\.'; then
echo "❌ Path traversal blocked" >&2
exit 2
fi
echo "✓ Validation passed"
exit 0
```
### Pattern 3: Multi-File Skill
```
my-skill/
├── SKILL.md # Essential info + quick start
├── REFERENCE.md # Complete API documentation
├── EXAMPLES.md # Real-world use cases
└── scripts/
└── helper.sh # Helper utilities
```
In `SKILL.md`:
```markdown
## Quick Start
[Essential info here]
## Advanced Usage
See [REFERENCE.md](REFERENCE.md) for complete API documentation.
See [EXAMPLES.md](EXAMPLES.md) for real-world examples.
```
## Troubleshooting
### Command Not Found
**Problem**: `/my-command` not recognized
**Solutions**:
1. Check file location: `.claude/commands/my-command.md`
2. Check filename: lowercase, no spaces, `.md` extension
3. Restart Claude Code
### Hook Not Firing
**Problem**: Hook doesn't execute
**Solutions**:
1. Verify matcher syntax in `settings.json`
2. Check script is executable: `chmod +x script.sh`
3. Test script manually with sample input
4. Enable debug mode: `claude --debug`
### Skill Not Activating
**Problem**: Skill doesn't trigger when expected
**Solutions**:
1. Check description is specific with trigger keywords
2. Verify YAML frontmatter syntax (no tabs!)
3. Enable debug mode: `claude --debug`
4. Test by explicitly mentioning trigger keywords
### Script Permission Errors
**Problem**: Permission denied when running scripts
**Solutions**:
```bash
# Make executable
chmod +x .claude/hooks/*.sh
# Check permissions
ls -la .claude/hooks/
# Verify shebang
head -1 script.sh # Should be #!/usr/bin/env bash
```
## Advanced Customization
### Combining Templates
You can combine patterns from multiple templates:
```markdown
---
description: Deploy with validation
argument-hint: <environment>
allowed-tools: Bash(git *), Bash(docker *), Read
---
# Deploy Command
## Context
Git status: !`git status`
Docker images: !`docker images | head -5`
## Validation
Current environment: $1
Config file: @.env.$1
## Task
Deploy to $1 environment with:
1. Run tests
2. Build Docker image
3. Deploy to cluster
4. Verify health checks
```
### Creating Skill Suites
Organize related skills:
```
.claude/skills/
├── pdf-processing/
│ └── SKILL.md
├── excel-analysis/
│ └── SKILL.md
└── document-conversion/
└── SKILL.md
```
### Hook Chains
Combine multiple hooks:
```json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "./.claude/hooks/validate.sh"
}
]
}
],
"PostToolUse": [
{
"matcher": "Write|Edit(*.ts)",
"hooks": [
{
"type": "command",
"command": "./.claude/hooks/format.sh"
},
{
"type": "command",
"command": "./.claude/hooks/lint.sh"
}
]
}
]
}
}
```
## Resources
- **Official Docs**: [Claude Code Documentation](https://docs.claude.com/en/docs/claude-code/overview)
- **Skills Reference**: [Agent Skills Overview](https://docs.anthropic.com/en/docs/agents-and-tools/agent-skills/overview)
- **Authoring Skills**: See `claude-*` skills in outfitter for detailed guidance
## Contributing
Found an issue or want to improve a template?
1. Test your changes thoroughly
2. Ensure all placeholders are clearly marked
3. Include working examples
4. Update this README if adding new templates
## License
These templates are provided as-is for use with Claude Code.
---
**Last Updated**: 2025-10-20
**Template Version**: 1.0.0
**Compatible with**: Claude Code 1.0+