mirror of
https://github.com/harivansh-afk/clanker-agent.git
synced 2026-04-15 04:03:27 +00:00
- 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
703 lines
15 KiB
Markdown
703 lines
15 KiB
Markdown
# clanker-teams Tool Reference
|
|
|
|
Complete documentation of all tools, parameters, and automated behavior.
|
|
|
|
---
|
|
|
|
## Table of Contents
|
|
|
|
- [Team Management](#team-management)
|
|
- [Teammates](#teammates)
|
|
- [Task Management](#task-management)
|
|
- [Messaging](#messaging)
|
|
- [Task Planning & Approval](#task-planning--approval)
|
|
- [Automated Behavior](#automated-behavior)
|
|
- [Task Statuses](#task-statuses)
|
|
- [Configuration & Data](#configuration--data)
|
|
|
|
---
|
|
|
|
## Team Management
|
|
|
|
### team_create
|
|
|
|
Start a new team with optional default model.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name for the team
|
|
- `description` (optional): Team description
|
|
- `default_model` (optional): Default AI model for all teammates (e.g., `gpt-4o`, `haiku`, `glm-4.7`)
|
|
|
|
**Examples**:
|
|
|
|
```javascript
|
|
team_create({ team_name: "my-team" });
|
|
team_create({ team_name: "research", default_model: "gpt-4o" });
|
|
```
|
|
|
|
---
|
|
|
|
### team_delete
|
|
|
|
Delete a team and all its data (configuration, tasks, messages).
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team to delete
|
|
|
|
**Example**:
|
|
|
|
```javascript
|
|
team_delete({ team_name: "my-team" });
|
|
```
|
|
|
|
---
|
|
|
|
### read_config
|
|
|
|
Get details about the team and its members.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
|
|
**Returns**: Team configuration including:
|
|
|
|
- Team name and description
|
|
- Default model
|
|
- List of members with their models and thinking levels
|
|
- Creation timestamp
|
|
|
|
**Example**:
|
|
|
|
```javascript
|
|
read_config({ team_name: "my-team" });
|
|
```
|
|
|
|
---
|
|
|
|
## Teammates
|
|
|
|
### spawn_teammate
|
|
|
|
Launch a new agent into a terminal pane with a role and instructions.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
- `name` (required): Friendly name for the teammate (e.g., "security-bot")
|
|
- `prompt` (required): Instructions for the teammate's role and initial task
|
|
- `cwd` (required): Working directory for the teammate
|
|
- `model` (optional): AI model for this teammate (overrides team default)
|
|
- `thinking` (optional): Thinking level (`off`, `minimal`, `low`, `medium`, `high`)
|
|
- `plan_mode_required` (optional): If `true`, teammate must submit plans for approval
|
|
|
|
**Model Options**:
|
|
|
|
- Any model available in your clanker configuration
|
|
- Common models: `gpt-4o`, `haiku` (Anthropic), `glm-4.7`, `glm-5` (Zhipu AI)
|
|
|
|
**Thinking Levels**:
|
|
|
|
- `off`: No thinking blocks (fastest)
|
|
- `minimal`: Minimal reasoning overhead
|
|
- `low`: Light reasoning for quick decisions
|
|
- `medium`: Balanced reasoning (default)
|
|
- `high`: Extended reasoning for complex problems
|
|
|
|
**Examples**:
|
|
|
|
```javascript
|
|
// Basic spawn
|
|
spawn_teammate({
|
|
team_name: "my-team",
|
|
name: "security-bot",
|
|
prompt: "Scan the codebase for hardcoded API keys",
|
|
cwd: "/path/to/project",
|
|
});
|
|
|
|
// With custom model
|
|
spawn_teammate({
|
|
team_name: "my-team",
|
|
name: "speed-bot",
|
|
prompt: "Run benchmarks on the API endpoints",
|
|
cwd: "/path/to/project",
|
|
model: "haiku",
|
|
});
|
|
|
|
// With plan approval
|
|
spawn_teammate({
|
|
team_name: "my-team",
|
|
name: "refactor-bot",
|
|
prompt: "Refactor the user service",
|
|
cwd: "/path/to/project",
|
|
plan_mode_required: true,
|
|
});
|
|
|
|
// With custom model and thinking
|
|
spawn_teammate({
|
|
team_name: "my-team",
|
|
name: "architect-bot",
|
|
prompt: "Design the new feature architecture",
|
|
cwd: "/path/to/project",
|
|
model: "gpt-4o",
|
|
thinking: "high",
|
|
});
|
|
```
|
|
|
|
---
|
|
|
|
### check_teammate
|
|
|
|
Check if a teammate is still running or has unread messages.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
- `agent_name` (required): Name of the teammate to check
|
|
|
|
**Returns**: Status information including:
|
|
|
|
- Whether the teammate is still running
|
|
- Number of unread messages
|
|
|
|
**Example**:
|
|
|
|
```javascript
|
|
check_teammate({ team_name: "my-team", agent_name: "security-bot" });
|
|
```
|
|
|
|
---
|
|
|
|
### force_kill_teammate
|
|
|
|
Forcibly kill a teammate's tmux pane and remove them from the team.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
- `agent_name` (required): Name of the teammate to kill
|
|
|
|
**Example**:
|
|
|
|
```javascript
|
|
force_kill_teammate({ team_name: "my-team", agent_name: "security-bot" });
|
|
```
|
|
|
|
---
|
|
|
|
### process_shutdown_approved
|
|
|
|
Initiate orderly shutdown for a finished teammate.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
- `agent_name` (required): Name of the teammate to shut down
|
|
|
|
**Example**:
|
|
|
|
```javascript
|
|
process_shutdown_approved({ team_name: "my-team", agent_name: "security-bot" });
|
|
```
|
|
|
|
---
|
|
|
|
## Task Management
|
|
|
|
### task_create
|
|
|
|
Create a new task for the team.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
- `subject` (required): Brief task title
|
|
- `description` (required): Detailed task description
|
|
- `status` (optional): Initial status (`pending`, `in_progress`, `planning`, `completed`, `deleted`). Default: `pending`
|
|
- `owner` (optional): Name of the teammate assigned to the task
|
|
|
|
**Example**:
|
|
|
|
```javascript
|
|
task_create({
|
|
team_name: "my-team",
|
|
subject: "Audit auth endpoints",
|
|
description:
|
|
"Review all authentication endpoints for SQL injection vulnerabilities",
|
|
status: "pending",
|
|
owner: "security-bot",
|
|
});
|
|
```
|
|
|
|
---
|
|
|
|
### task_list
|
|
|
|
List all tasks and their current status.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
|
|
**Returns**: Array of all tasks with their current status, owners, and details.
|
|
|
|
**Example**:
|
|
|
|
```javascript
|
|
task_list({ team_name: "my-team" });
|
|
```
|
|
|
|
---
|
|
|
|
### task_get
|
|
|
|
Get full details of a specific task.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
- `task_id` (required): ID of the task to retrieve
|
|
|
|
**Returns**: Full task object including:
|
|
|
|
- Subject and description
|
|
- Status and owner
|
|
- Plan (if in planning mode)
|
|
- Plan feedback (if rejected)
|
|
- Blocked relationships
|
|
|
|
**Example**:
|
|
|
|
```javascript
|
|
task_get({ team_name: "my-team", task_id: "task_abc123" });
|
|
```
|
|
|
|
---
|
|
|
|
### task_update
|
|
|
|
Update a task's status or owner.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
- `task_id` (required): ID of the task to update
|
|
- `status` (optional): New status (`pending`, `planning`, `in_progress`, `completed`, `deleted`)
|
|
- `owner` (optional): New owner (teammate name)
|
|
|
|
**Example**:
|
|
|
|
```javascript
|
|
task_update({
|
|
team_name: "my-team",
|
|
task_id: "task_abc123",
|
|
status: "in_progress",
|
|
owner: "security-bot",
|
|
});
|
|
```
|
|
|
|
**Note**: When status changes to `completed`, any hook script at `.clanker/team-hooks/task_completed.sh` will automatically run.
|
|
|
|
---
|
|
|
|
## Messaging
|
|
|
|
### send_message
|
|
|
|
Send a message to a specific teammate or the team lead.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
- `recipient` (required): Name of the agent receiving the message
|
|
- `content` (required): Full message content
|
|
- `summary` (required): Brief summary for message list
|
|
- `color` (optional): Message color for UI highlighting
|
|
|
|
**Example**:
|
|
|
|
```javascript
|
|
send_message({
|
|
team_name: "my-team",
|
|
recipient: "security-bot",
|
|
content: "Please focus on the auth module first",
|
|
summary: "Focus on auth module",
|
|
});
|
|
```
|
|
|
|
---
|
|
|
|
### broadcast_message
|
|
|
|
Send a message to the entire team (excluding the sender).
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
- `content` (required): Full message content
|
|
- `summary` (required): Brief summary for message list
|
|
- `color` (optional): Message color for UI highlighting
|
|
|
|
**Use cases**:
|
|
|
|
- API endpoint changes
|
|
- Database schema updates
|
|
- Team announcements
|
|
- Priority shifts
|
|
|
|
**Example**:
|
|
|
|
```javascript
|
|
broadcast_message({
|
|
team_name: "my-team",
|
|
content:
|
|
"The API endpoint has changed to /v2. Please update your work accordingly.",
|
|
summary: "API endpoint changed to v2",
|
|
});
|
|
```
|
|
|
|
---
|
|
|
|
### read_inbox
|
|
|
|
Read incoming messages for an agent.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
- `agent_name` (optional): Whose inbox to read. Defaults to current agent.
|
|
- `unread_only` (optional): Only show unread messages. Default: `true`
|
|
|
|
**Returns**: Array of messages with sender, content, timestamp, and read status.
|
|
|
|
**Examples**:
|
|
|
|
```javascript
|
|
// Read my unread messages
|
|
read_inbox({ team_name: "my-team" });
|
|
|
|
// Read all messages (including read)
|
|
read_inbox({ team_name: "my-team", unread_only: false });
|
|
|
|
// Read a teammate's inbox (as lead)
|
|
read_inbox({ team_name: "my-team", agent_name: "security-bot" });
|
|
```
|
|
|
|
---
|
|
|
|
## Task Planning & Approval
|
|
|
|
### task_submit_plan
|
|
|
|
For teammates to submit their implementation plans for approval.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
- `task_id` (required): ID of the task
|
|
- `plan` (required): Implementation plan description
|
|
|
|
**Behavior**:
|
|
|
|
- Updates task status to `planning`
|
|
- Saves the plan to the task
|
|
- Lead agent can then review and approve/reject
|
|
|
|
**Example**:
|
|
|
|
```javascript
|
|
task_submit_plan({
|
|
team_name: "my-team",
|
|
task_id: "task_abc123",
|
|
plan: "1. Add password strength validator component\n2. Integrate with existing signup form\n3. Add unit tests using zxcvbn library",
|
|
});
|
|
```
|
|
|
|
---
|
|
|
|
### task_evaluate_plan
|
|
|
|
For the lead agent to approve or reject a submitted plan.
|
|
|
|
**Parameters**:
|
|
|
|
- `team_name` (required): Name of the team
|
|
- `task_id` (required): ID of the task
|
|
- `action` (required): `"approve"` or `"reject"`
|
|
- `feedback` (optional): Feedback message (required when rejecting)
|
|
|
|
**Behavior**:
|
|
|
|
- **Approve**: Sets task status to `in_progress`, clears any previous feedback
|
|
- **Reject**: Sets task status back to `in_progress` (for revision), saves feedback
|
|
|
|
**Examples**:
|
|
|
|
```javascript
|
|
// Approve plan
|
|
task_evaluate_plan({
|
|
team_name: "my-team",
|
|
task_id: "task_abc123",
|
|
action: "approve",
|
|
});
|
|
|
|
// Reject with feedback
|
|
task_evaluate_plan({
|
|
team_name: "my-team",
|
|
task_id: "task_abc123",
|
|
action: "reject",
|
|
feedback: "Please add more detail about error handling and edge cases",
|
|
});
|
|
```
|
|
|
|
---
|
|
|
|
## Automated Behavior
|
|
|
|
### Initial Greeting
|
|
|
|
When a teammate is spawned, they automatically:
|
|
|
|
1. Send a message to the lead announcing they've started
|
|
2. Begin checking their inbox for work
|
|
|
|
**Example message**: "I've started and am checking my inbox for tasks."
|
|
|
|
---
|
|
|
|
### Idle Polling
|
|
|
|
If a teammate is idle (has no active work), they automatically check for new messages every **30 seconds**.
|
|
|
|
This ensures teammates stay responsive to new tasks, messages, and task reassignments without manual intervention.
|
|
|
|
---
|
|
|
|
### Automated Hooks
|
|
|
|
When a task's status changes to `completed`, clanker-teams automatically executes:
|
|
|
|
`.clanker/team-hooks/task_completed.sh`
|
|
|
|
The hook receives the task data as a JSON string as the first argument.
|
|
|
|
**Common hook uses**:
|
|
|
|
- Run test suite
|
|
- Run linting
|
|
- Notify external systems (Slack, email)
|
|
- Trigger deployments
|
|
- Generate reports
|
|
|
|
**See [Usage Guide](guide.md#hook-system) for detailed examples.**
|
|
|
|
---
|
|
|
|
### Context Injection
|
|
|
|
Each teammate is given a custom system prompt that includes:
|
|
|
|
- Their role and instructions
|
|
- Team context (team name, member list)
|
|
- Available tools
|
|
- Team environment guidelines
|
|
|
|
This ensures teammates understand their responsibilities and can work autonomously.
|
|
|
|
---
|
|
|
|
## Task Statuses
|
|
|
|
### pending
|
|
|
|
Task is created but not yet assigned or started.
|
|
|
|
### planning
|
|
|
|
Task is being planned. Teammate has submitted a plan and is awaiting lead approval. (Only available when `plan_mode_required` is true for the teammate)
|
|
|
|
### in_progress
|
|
|
|
Task is actively being worked on by the assigned teammate.
|
|
|
|
### completed
|
|
|
|
Task is finished. Status change triggers the `task_completed.sh` hook.
|
|
|
|
### deleted
|
|
|
|
Task is removed from the active task list. Still preserved in data history.
|
|
|
|
---
|
|
|
|
## Configuration & Data
|
|
|
|
### Data Storage
|
|
|
|
All clanker-teams data is stored in your home directory under `~/.clanker/`:
|
|
|
|
```
|
|
~/.clanker/
|
|
├── teams/
|
|
│ └── <team-name>/
|
|
│ └── config.json # Team configuration and member list
|
|
├── tasks/
|
|
│ └── <team-name>/
|
|
│ ├── task_*.json # Individual task files
|
|
│ └── tasks.json # Task index
|
|
└── messages/
|
|
└── <team-name>/
|
|
├── <agent-name>.json # Per-agent message history
|
|
└── index.json # Message index
|
|
```
|
|
|
|
### Team Configuration (config.json)
|
|
|
|
```json
|
|
{
|
|
"name": "my-team",
|
|
"description": "Code review team",
|
|
"defaultModel": "gpt-4o",
|
|
"members": [
|
|
{
|
|
"name": "security-bot",
|
|
"model": "gpt-4o",
|
|
"thinking": "medium",
|
|
"planModeRequired": true
|
|
},
|
|
{
|
|
"name": "frontend-dev",
|
|
"model": "haiku",
|
|
"thinking": "low",
|
|
"planModeRequired": false
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Task File (task\_\*.json)
|
|
|
|
```json
|
|
{
|
|
"id": "task_abc123",
|
|
"subject": "Audit auth endpoints",
|
|
"description": "Review all authentication endpoints for vulnerabilities",
|
|
"status": "in_progress",
|
|
"owner": "security-bot",
|
|
"plan": "1. Scan /api/login\n2. Scan /api/register\n3. Scan /api/refresh",
|
|
"planFeedback": null,
|
|
"blocks": [],
|
|
"blockedBy": [],
|
|
"activeForm": "Auditing auth endpoints",
|
|
"createdAt": "2024-02-22T10:00:00Z",
|
|
"updatedAt": "2024-02-22T10:30:00Z"
|
|
}
|
|
```
|
|
|
|
### Message File (<agent-name>.json)
|
|
|
|
```json
|
|
{
|
|
"messages": [
|
|
{
|
|
"id": "msg_def456",
|
|
"from": "team-lead",
|
|
"to": "security-bot",
|
|
"content": "Please focus on the auth module first",
|
|
"summary": "Focus on auth module",
|
|
"timestamp": "2024-02-22T10:15:00Z",
|
|
"read": false
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Environment Variables
|
|
|
|
clanker-teams respects the following environment variables:
|
|
|
|
- `ZELLIJ`: Automatically detected when running inside Zellij. Enables Zellij pane management.
|
|
- `TMUX`: Automatically detected when running inside tmux. Enables tmux pane management.
|
|
- `CLANKER_DEFAULT_THINKING_LEVEL`: Default thinking level for spawned teammates if not specified (`off`, `minimal`, `low`, `medium`, `high`).
|
|
|
|
---
|
|
|
|
## Terminal Integration
|
|
|
|
### tmux Detection
|
|
|
|
If the `TMUX` environment variable is set, clanker-teams uses `tmux split-window` to create panes.
|
|
|
|
**Layout**: Large lead pane on the left, teammates stacked on the right.
|
|
|
|
### Zellij Detection
|
|
|
|
If the `ZELLIJ` environment variable is set, clanker-teams uses `zellij run` to create panes.
|
|
|
|
**Layout**: Same as tmux - large lead pane on left, teammates on right.
|
|
|
|
### iTerm2 Detection
|
|
|
|
If neither tmux nor Zellij is detected, and you're on macOS with iTerm2, clanker-teams uses AppleScript to split the window.
|
|
|
|
**Layout**: Same as tmux/Zellij - large lead pane on left, teammates on right.
|
|
|
|
**Requirements**:
|
|
|
|
- macOS
|
|
- iTerm2 terminal
|
|
- Not inside tmux or Zellij
|
|
|
|
---
|
|
|
|
## Error Handling
|
|
|
|
### Lock Files
|
|
|
|
clanker-teams uses lock files to prevent concurrent modifications:
|
|
|
|
```
|
|
~/.clanker/teams/<team-name>/.lock
|
|
~/.clanker/tasks/<team-name>/.lock
|
|
~/.clanker/messages/<team-name>/.lock
|
|
```
|
|
|
|
If a lock file is stale (process no longer running), it's automatically removed after 60 seconds.
|
|
|
|
### Race Conditions
|
|
|
|
The locking system prevents race conditions when multiple teammates try to update tasks or send messages simultaneously.
|
|
|
|
### Recovery
|
|
|
|
If a lock file persists beyond 60 seconds, it's automatically cleaned up. For manual recovery:
|
|
|
|
```bash
|
|
# Remove stale lock
|
|
rm ~/.clanker/teams/my-team/.lock
|
|
```
|
|
|
|
---
|
|
|
|
## Performance Considerations
|
|
|
|
### Idle Polling Overhead
|
|
|
|
Teammates poll their inboxes every 30 seconds when idle. This is minimal overhead (one file read per poll).
|
|
|
|
### Lock Timeout
|
|
|
|
Lock files timeout after 60 seconds. Adjust if you have very slow operations.
|
|
|
|
### Message Storage
|
|
|
|
Messages are stored as JSON. For teams with extensive message history, consider periodic cleanup:
|
|
|
|
```bash
|
|
# Archive old messages
|
|
mv ~/.clanker/messages/my-team/ ~/.clanker/messages-archive/my-team-2024-02-22/
|
|
```
|