skills/WORKFLOW.md
dan d8c2e92f0a Initial commit: Agentic coding skills repository
- Add comprehensive documentation (README, WORKFLOW, DEPLOYMENT)
- Add skill template for creating new skills
- Port worklog skill from dotfiles (org-mode session documentation)
- Port update-spec-kit skill from dotfiles (ecosystem updates)
- Include spec-kit framework for structured development
- Add OpenCode commands for spec-kit workflow integration

Repository provides unified skill development for both Claude Code and OpenCode agents.
2025-11-08 10:55:15 -08:00

463 lines
9.9 KiB
Markdown

# Skill Development Workflow
This document describes the complete workflow for developing, testing, and deploying skills for agentic coding.
## Overview
Skills are developed in this repository and then deployed to either (or both):
- **Claude Code** (`~/.claude/skills/`)
- **OpenCode** (`~/.config/opencode/skills/`)
The workflow supports both manual development and spec-kit-driven development.
## Development Approaches
### Approach 1: Manual Development
Quick iteration for simple skills or updates.
1. **Create skill directory**:
```bash
cp -r skills/template skills/your-skill-name
```
2. **Edit SKILL.md**:
- Update frontmatter (name, description)
- Fill in "When to Use" section
- Document the process/instructions
- List requirements
3. **Add helper scripts** (if needed):
```bash
# Create scripts in skills/your-skill-name/scripts/
vim skills/your-skill-name/scripts/helper.sh
chmod +x skills/your-skill-name/scripts/helper.sh
```
4. **Add templates** (if needed):
```bash
# Create templates in skills/your-skill-name/templates/
vim skills/your-skill-name/templates/output-template.txt
```
5. **Update README.md**:
- Write user-facing documentation
- Include usage examples
- Document prerequisites
6. **Test locally** (see Testing section below)
### Approach 2: Spec-Kit Development
Structured approach for complex skills or when you want full specification.
1. **Create feature specification**:
```bash
# In OpenCode or Claude Code
/speckit.specify "Create a skill for [description]"
```
2. **Clarify requirements** (if needed):
```bash
/speckit.clarify
```
3. **Create implementation plan**:
```bash
/speckit.plan
```
4. **Implement the skill**:
```bash
/speckit.implement
```
5. **Test and iterate**
The spec-kit approach creates structured documentation in `.specify/specs/` that captures the full design and implementation process.
## Skill Structure
### Required Files
Every skill must have:
```
skill-name/
├── SKILL.md # Primary skill definition (required)
└── README.md # User documentation (required)
```
### Optional Components
Add as needed:
```
skill-name/
├── scripts/ # Helper bash scripts
│ └── helper.sh
├── templates/ # File templates for generated content
│ └── template.txt
└── examples/ # Example outputs
└── example.txt
```
### SKILL.md Structure
The SKILL.md file is what the agent reads. It must include:
**Frontmatter** (YAML):
```yaml
---
name: skill-name
description: One-line description for agent discovery
---
```
**Required Sections**:
1. Title and overview
2. "When to Use" - Explicit triggers
3. Process/Instructions - Step-by-step for agent
4. Requirements - Dependencies
**Optional Sections**:
- Context Gathering
- Helper Scripts
- Templates
- Guidelines
- Error Handling
- Examples
## Testing
### Local Testing
**Option 1: Symlink to agent directory**
For Claude Code:
```bash
ln -s $(pwd)/skills/your-skill-name ~/.claude/skills/your-skill-name
```
For OpenCode:
```bash
ln -s $(pwd)/skills/your-skill-name ~/.config/opencode/skills/your-skill-name
```
**Option 2: Copy for testing**
```bash
# Copy to Claude Code
cp -r skills/your-skill-name ~/.claude/skills/
# Copy to OpenCode
cp -r skills/your-skill-name ~/.config/opencode/skills/
```
### Test Cases
1. **Script Testing** (if skill has scripts):
```bash
# Test each script independently
cd skills/your-skill-name
./scripts/helper.sh --test-args
```
2. **Agent Testing**:
- Open Claude Code or OpenCode
- Navigate to a test project
- Use natural language trigger from "When to Use" section
- Verify agent invokes skill correctly
- Check output matches expectations
3. **Edge Cases**:
- Test with missing dependencies
- Test in non-git repositories (if applicable)
- Test with empty or minimal input
- Test error handling
### Validation Checklist
Before deploying:
- [ ] SKILL.md has correct frontmatter
- [ ] "When to Use" section has clear triggers
- [ ] Process instructions are step-by-step
- [ ] All helper scripts are executable
- [ ] README.md has installation instructions
- [ ] Examples are provided
- [ ] Scripts handle errors gracefully
- [ ] Tested with both Claude Code and OpenCode (if applicable)
## Deployment
### Development Deployment
For active development, use symlinks:
```bash
# Claude Code
ln -s $(pwd)/skills/your-skill-name ~/.claude/skills/your-skill-name
# OpenCode
ln -s $(pwd)/skills/your-skill-name ~/.config/opencode/skills/your-skill-name
```
This allows you to edit in the repo and see changes immediately.
### Production Deployment
#### Manual Deployment
Copy skills to the appropriate directories:
```bash
# Deploy to Claude Code
cp -r skills/skill-name ~/.claude/skills/
# Deploy to OpenCode
cp -r skills/skill-name ~/.config/opencode/skills/
```
#### Nix Home Manager Deployment
For NixOS users, add to your home configuration:
```nix
# home.nix or equivalent
{
# Claude Code skills
home.file.".claude/skills/your-skill-name" = {
source = /path/to/skills/skills/your-skill-name;
recursive = true;
};
# OpenCode skills
home.file.".config/opencode/skills/your-skill-name" = {
source = /path/to/skills/skills/your-skill-name;
recursive = true;
};
}
```
Then rebuild:
```bash
sudo nixos-rebuild switch --flake .#hostname
```
#### OpenCode Plugin Configuration
Ensure the opencode-skills plugin is enabled:
```json
// ~/.config/opencode/config.json
{
"plugin": ["opencode-skills"]
}
```
## Version Control
### Commit Guidelines
Follow these commit message conventions:
- `feat(skill-name): Add new feature`
- `fix(skill-name): Fix bug in script`
- `docs(skill-name): Update documentation`
- `refactor(skill-name): Restructure code`
- `test(skill-name): Add tests`
### Branching Strategy
For new skills:
```bash
git checkout -b feature/new-skill-name
```
For updates:
```bash
git checkout -b fix/skill-name-issue
```
### Pull Request Template
When submitting a skill:
```markdown
## Skill: [Name]
### Description
[Brief description of what the skill does]
### Testing
- [ ] Tested with Claude Code
- [ ] Tested with OpenCode
- [ ] Scripts are executable
- [ ] Examples included
- [ ] Documentation complete
### Deployment Notes
[Any special deployment considerations]
```
## Troubleshooting
### Skill Not Discovered
**Claude Code:**
- Check file exists: `ls ~/.claude/skills/skill-name/SKILL.md`
- Verify frontmatter is valid YAML
- Restart Claude Code
- Check Claude Code logs
**OpenCode:**
- Check file exists: `ls ~/.config/opencode/skills/skill-name/SKILL.md`
- Verify opencode-skills plugin is enabled
- Restart OpenCode
- Check plugin loaded: Look for skills in OpenCode output
### Scripts Fail
- Verify scripts are executable: `chmod +x scripts/*.sh`
- Test scripts independently
- Check for missing dependencies
- Verify paths are correct (use absolute paths when possible)
### Agent Doesn't Use Skill
- Make "When to Use" section more explicit
- Use more specific trigger phrases in user request
- Check description in frontmatter is clear
- Verify skill is appropriate for the task
## Best Practices
### 1. Clear Triggers
Make the "When to Use" section explicit:
**Good**:
```markdown
## When to Use
Invoke this skill when the user requests:
- "Create a worklog"
- "Document today's work"
- "Write a session summary"
```
**Bad**:
```markdown
## When to Use
Use this for documentation.
```
### 2. Step-by-Step Instructions
The agent needs procedural instructions:
**Good**:
```markdown
1. Gather git context using: `git status`
2. Run helper script: `./scripts/extract-metrics.sh`
3. Read template from: `./templates/output.txt`
4. Fill in template with gathered information
5. Save to: `docs/output/YYYY-MM-DD-topic.txt`
```
**Bad**:
```markdown
Gather information and create output.
```
### 3. Self-Contained Scripts
Scripts should work from any directory:
**Good**:
```bash
#!/usr/bin/env bash
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SKILL_DIR="$(dirname "$SCRIPT_DIR")"
# Use absolute paths
cat "$SKILL_DIR/templates/template.txt"
```
**Bad**:
```bash
#!/usr/bin/env bash
cat templates/template.txt # Fails if not in skill directory
```
### 4. Error Handling
All scripts should handle errors:
```bash
#!/usr/bin/env bash
set -euo pipefail # Exit on error, undefined vars, pipe failures
# Check prerequisites
if ! command -v git &> /dev/null; then
echo "Error: git not found" >&2
exit 1
fi
# Validate input
if [ $# -lt 1 ]; then
echo "Usage: $0 <argument>" >&2
exit 1
fi
```
### 5. Documentation
Every skill needs both SKILL.md (for agent) and README.md (for humans):
- **SKILL.md**: Procedural, step-by-step, for agent execution
- **README.md**: Conceptual, examples, for human understanding
## Examples
### Simple Skill (No Scripts)
```
hello-world/
├── SKILL.md # Instructions for agent
└── README.md # User documentation
```
SKILL.md might instruct the agent to simply output a greeting based on context.
### Complex Skill (Full Structure)
```
worklog/
├── SKILL.md # Agent instructions
├── README.md # User guide
├── scripts/
│ ├── extract-metrics.sh # Git statistics
│ ├── suggest-filename.sh # Filename generation
│ └── find-related-logs.sh # Search previous logs
├── templates/
│ └── worklog-template.org # Output template
└── examples/
└── example-worklog.org # Sample output
```
The agent follows SKILL.md to orchestrate all components.
## Contributing
See [README.md](./README.md) for contribution guidelines.
## See Also
- [README.md](./README.md) - Repository overview
- [skills/template/](./skills/template/) - Template for new skills
- [Claude Code Skills Documentation](https://docs.claude.com/en/docs/claude-code/skills)
- [OpenCode Skills Plugin](https://github.com/opencode-ai/opencode-skills)