clanker-agent/packages/clanker-teams/docs/guide.md
Harivansh Rathi 67168d8289 chore: rebrand companion-os to clanker-agent
- Rename all package names from companion-* to clanker-*
- Update npm scopes from @mariozechner to @harivansh-afk
- Rename config directories .companion -> .clanker
- Rename environment variables COMPANION_* -> CLANKER_*
- Update all documentation, README files, and install scripts
- Rename package directories (companion-channels, companion-grind, companion-teams)
- Update GitHub URLs to harivansh-afk/clanker-agent
- Preserve full git history from companion-cloud monorepo
2026-03-26 16:22:52 -04:00

396 lines
9.7 KiB
Markdown

# clanker-teams Usage Guide
This guide provides detailed examples, patterns, and best practices for using clanker-teams.
## Table of Contents
- [Getting Started](#getting-started)
- [Common Workflows](#common-workflows)
- [Hook System](#hook-system)
- [Best Practices](#best-practices)
- [Troubleshooting](#troubleshooting)
---
## Getting Started
### Basic Team Setup
First, make sure you're inside a tmux session, Zellij session, or iTerm2:
```bash
tmux # or zellij, or just use iTerm2
```
Then start clanker:
```bash
clanker
```
Create your first team:
> **You:** "Create a team named 'my-team'"
Set a default model for all teammates:
> **You:** "Create a team named 'Research' and use 'gpt-4o' for everyone"
---
## Common Workflows
### 1. Code Review Team
> **You:** "Create a team named 'code-review' using 'gpt-4o'"
> **You:** "Spawn a teammate named 'security-reviewer' to check for vulnerabilities"
> **You:** "Spawn a teammate named 'performance-reviewer' using 'haiku' to check for optimization opportunities"
> **You:** "Create a task for security-reviewer: 'Review the auth module for SQL injection risks' and set it to in_progress"
> **You:** "Create a task for performance-reviewer: 'Analyze the database queries for N+1 issues' and set it to in_progress"
### 2. Refactor with Plan Approval
> **You:** "Create a team named 'refactor-squad'"
> **You:** "Spawn a teammate named 'refactor-bot' and require plan approval before they make any changes"
> **You:** "Create a task for refactor-bot: 'Refactor the user service to use dependency injection' and set it to in_progress"
Teammate submits a plan. Review it:
> **You:** "List all tasks and show me refactor-bot's plan for task 1"
Approve or reject:
> **You:** "Approve refactor-bot's plan for task 1"
> **You:** "Reject refactor-bot's plan for task 1 with feedback: 'Add unit tests for the new injection pattern'"
### 3. Testing with Automated Hooks
Create a hook script at `.clanker/team-hooks/task_completed.sh`:
```bash
#!/bin/bash
# This script runs automatically when any task is completed
echo "Running post-task checks..."
npm test
if [ $? -ne 0 ]; then
echo "Tests failed! Please fix before marking task complete."
exit 1
fi
npm run lint
echo "All checks passed!"
```
> **You:** "Create a team named 'test-team'"
> **You:** "Spawn a teammate named 'qa-bot' to write tests"
> **You:** "Create a task for qa-bot: 'Write unit tests for the payment module' and set it to in_progress"
When qa-bot marks the task as completed, the hook automatically runs tests and linting.
### 4. Coordinated Migration
> **You:** "Create a team named 'migration-team'"
> **You:** "Spawn a teammate named 'db-migrator' to handle database changes"
> **You:** "Spawn a teammate named 'api-updater' using 'gpt-4o' to update API endpoints"
> **You:** "Spawn a teammate named 'test-writer' to write tests for the migration"
> **You:** "Create a task for db-migrator: 'Add new columns to the users table' and set it to in_progress"
After db-migrator completes, broadcast the schema change:
> **You:** "Broadcast to the team: 'New columns added to users table: phone, email_verified. Please update your code accordingly.'"
### 5. Mixed-Speed Team
Use different models for cost optimization:
> **You:** "Create a team named 'mixed-speed' using 'gpt-4o'"
> **You:** "Spawn a teammate named 'architect' using 'gpt-4o' with 'high' thinking level for design decisions"
> **You:** "Spawn a teammate named 'implementer' using 'haiku' with 'low' thinking level for quick coding"
> **You:** "Spawn a teammate named 'reviewer' using 'gpt-4o' with 'medium' thinking level for code reviews"
Now you have expensive reasoning for design and reviews, but fast/cheap implementation.
---
## Hook System
### Overview
Hooks are shell scripts that run automatically at specific events. Currently supported:
- **`task_completed.sh`** - Runs when any task's status changes to `completed`
### Hook Location
Hooks should be placed in `.clanker/team-hooks/` in your project directory:
```
your-project/
├── .clanker/
│ └── team-hooks/
│ └── task_completed.sh
```
### Hook Payload
The hook receives the task data as a JSON string as the first argument:
```bash
#!/bin/bash
TASK_DATA="$1"
echo "Task completed: $TASK_DATA"
```
Example payload:
```json
{
"id": "task_123",
"subject": "Fix login bug",
"description": "Users can't login with special characters",
"status": "completed",
"owner": "fixer-bot"
}
```
### Example Hooks
#### Test on Completion
```bash
#!/bin/bash
# .clanker/team-hooks/task_completed.sh
TASK_DATA="$1"
SUBJECT=$(echo "$TASK_DATA" | jq -r '.subject')
echo "Running tests after task: $SUBJECT"
npm test
```
#### Notify Slack
```bash
#!/bin/bash
# .clanker/team-hooks/task_completed.sh
TASK_DATA="$1"
SUBJECT=$(echo "$TASK_DATA" | jq -r '.subject')
OWNER=$(echo "$TASK_DATA" | jq -r '.owner')
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"Task '$SUBJECT' completed by $OWNER\"}" \
"$SLACK_WEBHOOK_URL"
```
#### Conditional Checks
```bash
#!/bin/bash
# .clanker/team-hooks/task_completed.sh
TASK_DATA="$1"
SUBJECT=$(echo "$TASK_DATA" | jq -r '.subject')
# Only run full test suite for production-related tasks
if [[ "$SUBJECT" == *"production"* ]] || [[ "$SUBJECT" == *"deploy"* ]]; then
npm run test:ci
else
npm test
fi
```
---
## Best Practices
### 1. Use Thinking Levels Wisely
- **`off`** - Simple tasks: formatting, moving code, renaming
- **`minimal`** - Quick decisions: small refactors, straightforward bugfixes
- **`low`** - Standard work: typical feature implementation, tests
- **`medium`** - Complex work: architecture decisions, tricky bugs
- **`high`** - Critical work: security reviews, major refactors, design specs
### 2. Team Composition
Balanced teams typically include:
- **1-2 high-thinking, high-model** agents for architecture and reviews
- **2-3 low-thinking, fast-model** agents for implementation
- **1 medium-thinking** agent for coordination
Example:
```bash
# Design/Review duo (expensive but thorough)
spawn "architect" using "gpt-4o" with "high" thinking
spawn "reviewer" using "gpt-4o" with "medium" thinking
# Implementation trio (fast and cheap)
spawn "backend-dev" using "haiku" with "low" thinking
spawn "frontend-dev" using "haiku" with "low" thinking
spawn "test-writer" using "haiku" with "off" thinking
```
### 3. Plan Approval for High-Risk Changes
Enable plan approval mode for:
- Database schema changes
- API contract changes
- Security-related work
- Performance-critical code
Disable for:
- Documentation updates
- Test additions
- Simple bug fixes
### 4. Broadcast for Coordination
Use broadcasts when:
- API endpoints change
- Database schemas change
- Deployment happens
- Team priorities shift
### 5. Clear Task Descriptions
Good task:
```
"Add password strength validation to the signup form.
Requirements: minimum 8 chars, at least one number and symbol.
Use the zxcvbn library for strength calculation."
```
Bad task:
```
"Fix signup form"
```
### 6. Check Progress Regularly
> **You:** "List all tasks"
> **You:** "Check my inbox for messages"
> **You:** "How is the team doing?"
This helps you catch blockers early and provide feedback.
---
## Troubleshooting
### Teammate Not Responding
**Problem**: A teammate is idle but not picking up messages.
**Solution**:
1. Check if they're still running:
> **You:** "Check on teammate named 'security-bot'"
2. Check their inbox:
> **You:** "Read security-bot's inbox"
3. Force kill and respawn if needed:
> **You:** "Force kill security-bot and respawn them"
### tmux Pane Issues
**Problem**: tmux panes don't close when killing teammates.
**Solution**: Make sure you started clanker inside a tmux session. If you started clanker outside tmux, it won't work properly.
```bash
# Correct way
tmux
clanker
# Incorrect way
clanker # Then try to use tmux commands
```
### Hook Not Running
**Problem**: Your task_completed.sh script isn't executing.
**Checklist**:
1. File exists at `.clanker/team-hooks/task_completed.sh`
2. File is executable: `chmod +x .clanker/team-hooks/task_completed.sh`
3. Shebang line is present: `#!/bin/bash`
4. Test manually: `.clanker/team-hooks/task_completed.sh '{"test":"data"}'`
### Model Errors
**Problem**: "Model not found" or similar errors.
**Solution**: Check the model name is correct and available in your clanker config. Some model names vary between providers:
- `gpt-4o` - OpenAI
- `haiku` - Anthropic (usually `claude-3-5-haiku`)
- `glm-4.7` - Zhipu AI
Check your clanker config for available models.
### Data Location
All team data is stored in:
- `~/.clanker/teams/<team-name>/` - Team configuration, member list
- `~/.clanker/tasks/<team-name>/` - Task files
- `~/.clanker/messages/<team-name>/` - Message history
You can manually inspect these JSON files to debug issues.
### iTerm2 Not Working
**Problem**: iTerm2 splits aren't appearing.
**Requirements**:
1. You must be on macOS
2. iTerm2 must be your terminal
3. You must NOT be inside tmux or Zellij (iTerm2 detection only works as a fallback)
**Alternative**: Use tmux or Zellij for more reliable pane management.
---
## Inter-Agent Communication
Teammates can message each other without your intervention:
```
Frontend Bot → Backend Bot: "What's the response format for /api/users?"
Backend Bot → Frontend Bot: "Returns {id, name, email, created_at}"
```
This enables autonomous coordination. You can see these messages by:
> **You:** "Read backend-bot's inbox"
---
## Cleanup
To remove all team data:
```bash
# Shut down team first
> "Shut down the team named 'my-team'"
# Then delete data directory
rm -rf ~/.clanker/teams/my-team/
rm -rf ~/.clanker/tasks/my-team/
rm -rf ~/.clanker/messages/my-team/
```
Or use the delete command:
> **You:** "Delete the team named 'my-team'"