claude-teamOrchestrate multiple Claude Code workers via iTerm2 using the claude-team MCP server. Spawn workers with git worktrees, assign beads issues, monitor progress, and coordinate parallel development work.
Install via ClawdBot CLI:
clawdbot install jalehman/claude-teamRequires:
Claude-team is an MCP server that lets you spawn and manage teams of Claude Code sessions via iTerm2. Each worker gets their own terminal pane, optional git worktree, and can be assigned beads issues.
NEVER make code changes directly. Always spawn workers for code changes. This keeps your context clean and provides proper git workflow with worktrees.
~/.claude.jsonAll tools are called through mcporter call claude-team.:
mcporter call claude-team.list_workers
mcporter call claude-team.spawn_workers workers='[{"project_path":"/path/to/repo","bead":"cp-123"}]'
Create new Claude Code worker sessions.
mcporter call claude-team.spawn_workers \
workers='[{
"project_path": "/path/to/repo",
"bead": "cp-123",
"annotation": "Fix auth bug",
"use_worktree": true,
"skip_permissions": true
}]' \
layout="auto"
Worker config fields:
project_path: Required. Path to repo or "auto" (uses CLAUDE_TEAM_PROJECT_DIR)bead: Optional beads issue ID ā worker will follow beads workflowannotation: Task description (shown on badge, used in branch name)prompt: Additional instructions (if no bead, this is their assignment)use_worktree: Create isolated git worktree (default: true)skip_permissions: Start with --dangerously-skip-permissions (default: false)name: Optional worker name override (auto-picks from themed sets otherwise)Layout options:
"auto": Reuse existing claude-team windows, split into available space"new": Always create fresh window (1-4 workers in grid layout)See all managed workers:
mcporter call claude-team.list_workers
mcporter call claude-team.list_workers status_filter="ready"
Status values: spawning, ready, busy, closed
Send messages to one or more workers:
mcporter call claude-team.message_workers \
session_ids='["Groucho"]' \
message="Please also add unit tests" \
wait_mode="none"
wait_mode options:
"none": Fire and forget (default)"any": Return when any worker is idle"all": Return when all workers are idleCheck or wait for workers to finish:
# Quick poll
mcporter call claude-team.check_idle_workers session_ids='["Groucho","Harpo"]'
# Blocking wait
mcporter call claude-team.wait_idle_workers \
session_ids='["Groucho","Harpo"]' \
mode="all" \
timeout=600
Get conversation history:
mcporter call claude-team.read_worker_logs \
session_id="Groucho" \
pages=2
Get detailed status including conversation stats:
mcporter call claude-team.examine_worker session_id="Groucho"
Terminate workers when done:
mcporter call claude-team.close_workers session_ids='["Groucho","Harpo"]'
ā ļø Worktree cleanup: Workers with worktrees commit to ephemeral branches. After closing:
git branch -D Quick reference for beads commands:
mcporter call claude-team.bd_help
Workers can be referenced by any of:
3962c5c4)iterm:UUID formatGroucho, Aragorn)# 1. Spawn worker with a bead assignment
mcporter call claude-team.spawn_workers \
workers='[{
"project_path": "/Users/phaedrus/Projects/myrepo",
"bead": "proj-abc",
"annotation": "Implement config schemas",
"use_worktree": true,
"skip_permissions": true
}]'
# 2. Worker automatically:
# - Creates worktree with branch named after bead
# - Runs `bd show proj-abc` to understand the task
# - Marks issue in_progress
# - Implements the work
# - Closes the issue
# - Commits with issue reference
# 3. Monitor progress
mcporter call claude-team.check_idle_workers session_ids='["Groucho"]'
mcporter call claude-team.read_worker_logs session_id="Groucho"
# 4. When done, close and merge
mcporter call claude-team.close_workers session_ids='["Groucho"]'
# Then: git merge or cherry-pick from worker's branch
# Spawn multiple workers for parallel tasks
mcporter call claude-team.spawn_workers \
workers='[
{"project_path": "auto", "bead": "cp-123", "annotation": "Auth module"},
{"project_path": "auto", "bead": "cp-124", "annotation": "API routes"},
{"project_path": "auto", "bead": "cp-125", "annotation": "Unit tests"}
]' \
layout="new"
# Wait for all to complete
mcporter call claude-team.wait_idle_workers \
session_ids='["Groucho","Harpo","Chico"]' \
mode="all"
# Review and close
mcporter call claude-team.close_workers \
session_ids='["Groucho","Harpo","Chico"]'
bead IDs so workers follow proper issue workflowskip_permissions: true to write filesFor persistent server operation, claude-team can run as an HTTP server. This keeps the MCP server running continuously with persistent state, avoiding cold starts.
Run the claude-team HTTP server directly:
# From the claude-team directory
uv run python -m claude_team_mcp --http --port 8766
# Or specify the directory explicitly
uv run --directory /path/to/claude-team python -m claude_team_mcp --http --port 8766
For automatic startup on login, use launchd (see the "launchd Auto-Start" section below).
Once the HTTP server is running, configure mcporter to connect to it. Create ~/.mcporter/mcporter.json:
{
"mcpServers": {
"claude-team": {
"transport": "streamable-http",
"url": "http://127.0.0.1:8766/mcp",
"lifecycle": "keep-alive"
}
}
}
Update your .mcp.json to use HTTP transport:
{
"mcpServers": {
"claude-team": {
"transport": "streamable-http",
"url": "http://127.0.0.1:8766/mcp"
}
}
}
To automatically start the claude-team server on login, use the bundled setup script.
Run the setup script from the skill's assets directory:
# From the skill directory
./assets/setup.sh
# Or specify a custom claude-team location
CLAUDE_TEAM_DIR=/path/to/claude-team ./assets/setup.sh
The setup script:
uv installation path~/.claude-team/logs/assets/com.claude-team.plist.template~/Library/LaunchAgents/com.claude-team.plistThe plist template uses uv run to start the HTTP server on port 8766, configured for iTerm2 Python API access (Aqua session type).
# Stop the service
launchctl unload ~/Library/LaunchAgents/com.claude-team.plist
# Restart (re-run setup)
./assets/setup.sh
# Check if running
launchctl list | grep claude-team
# View logs
tail -f ~/.claude-team/logs/stdout.log
tail -f ~/.claude-team/logs/stderr.log
# Check for load errors
launchctl print gui/$UID/com.claude-team
# Force restart
launchctl kickstart -k gui/$UID/com.claude-team
# Remove and reload (if plist changed)
launchctl bootout gui/$UID/com.claude-team
launchctl bootstrap gui/$UID ~/Library/LaunchAgents/com.claude-team.plist
For background monitoring and notifications, claude-team supports cron-based worker tracking.
Claude-team writes worker state to ~/.claude-team/memory/worker-tracking.json:
{
"workers": {
"Groucho": {
"session_id": "3962c5c4",
"bead": "cp-123",
"annotation": "Fix auth bug",
"status": "busy",
"project_path": "/Users/phaedrus/Projects/myrepo",
"started_at": "2025-01-05T10:30:00Z",
"last_activity": "2025-01-05T11:45:00Z"
},
"Harpo": {
"session_id": "a1b2c3d4",
"bead": "cp-124",
"annotation": "Add API routes",
"status": "idle",
"project_path": "/Users/phaedrus/Projects/myrepo",
"started_at": "2025-01-05T10:30:00Z",
"last_activity": "2025-01-05T11:50:00Z",
"completed_at": "2025-01-05T11:50:00Z"
}
},
"last_updated": "2025-01-05T11:50:00Z"
}
Create a monitoring script at ~/.claude-team/scripts/check-workers.sh:
#!/bin/bash
# Check for completed workers and send notifications
TRACKING_FILE="$HOME/.claude-team/memory/worker-tracking.json"
NOTIFIED_FILE="$HOME/.claude-team/memory/notified-workers.json"
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN}"
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID}"
# Exit if tracking file doesn't exist
[ -f "$TRACKING_FILE" ] || exit 0
# Initialize notified file if needed
[ -f "$NOTIFIED_FILE" ] || echo '{"notified":[]}' > "$NOTIFIED_FILE"
# Find idle workers that haven't been notified
IDLE_WORKERS=$(jq -r '
.workers | to_entries[] |
select(.value.status == "idle") |
.key
' "$TRACKING_FILE")
for worker in $IDLE_WORKERS; do
# Check if already notified
ALREADY_NOTIFIED=$(jq -r --arg w "$worker" '.notified | index($w) != null' "$NOTIFIED_FILE")
if [ "$ALREADY_NOTIFIED" = "false" ]; then
# Get worker details
BEAD=$(jq -r --arg w "$worker" '.workers[$w].bead // "no-bead"' "$TRACKING_FILE")
ANNOTATION=$(jq -r --arg w "$worker" '.workers[$w].annotation // "no annotation"' "$TRACKING_FILE")
# Send Telegram notification
MESSAGE="š¤ Worker *${worker}* completed
š Bead: \`${BEAD}\`
š ${ANNOTATION}"
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d chat_id="$TELEGRAM_CHAT_ID" \
-d text="$MESSAGE" \
-d parse_mode="Markdown" > /dev/null
# Mark as notified
jq --arg w "$worker" '.notified += [$w]' "$NOTIFIED_FILE" > "${NOTIFIED_FILE}.tmp"
mv "${NOTIFIED_FILE}.tmp" "$NOTIFIED_FILE"
fi
done
Make it executable:
chmod +x ~/.claude-team/scripts/check-workers.sh
Add to crontab (crontab -e):
# Check claude-team workers every 2 minutes
*/2 * * * * TELEGRAM_BOT_TOKEN="your-bot-token" TELEGRAM_CHAT_ID="your-chat-id" ~/.claude-team/scripts/check-workers.sh
Set Telegram credentials in your shell profile (~/.zshrc):
export TELEGRAM_BOT_TOKEN="123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
export TELEGRAM_CHAT_ID="-1001234567890"
If you have clawdbot configured, you can send notifications through it instead:
# In check-workers.sh, replace the curl command with:
clawdbot send --to "$TELEGRAM_CHAT_ID" --message "$MESSAGE" --provider telegram
When starting a fresh batch of workers, clear the notified list:
echo '{"notified":[]}' > ~/.claude-team/memory/notified-workers.json
Generated Mar 1, 2026
A software development team uses Claude Team to assign multiple features or bug fixes from a project backlog to separate workers simultaneously. Each worker operates in an isolated git worktree, allowing parallel coding without context collisions, speeding up sprint completion while maintaining clean git history.
A tech lead spawns workers to review different modules of a legacy codebase in parallel, with each worker analyzing specific files or functions. They can suggest refactoring improvements or identify bugs, enabling comprehensive audits faster than manual or sequential reviews.
A QA engineering team assigns workers to write unit tests for various components of an application concurrently. Each worker focuses on a distinct module, generating test cases and coverage reports, which accelerates test suite development and improves code reliability.
A documentation team uses Claude Team to create or update technical docs for different API endpoints or software features. Workers can draft content in parallel based on code analysis, ensuring consistent and timely documentation updates across large projects.
A cybersecurity firm deploys workers to scan multiple repositories or code segments for vulnerabilities simultaneously. Each worker runs static analysis tools and reports findings, enabling rapid identification and prioritization of security issues in complex systems.
Offer Claude Team as a cloud-based service where development teams subscribe to access parallel AI agent orchestration. Revenue comes from monthly or annual licenses based on team size, number of workers, and advanced features like analytics dashboards.
Provide consulting services to large organizations for integrating Claude Team into their existing DevOps workflows. Revenue is generated through project-based fees for setup, customization, training, and ongoing support to optimize parallel development processes.
Distribute Claude Team as an open-source core tool with basic functionality free to use. Monetize by offering premium add-ons such as enhanced monitoring, priority support, or integrations with proprietary project management systems, driving revenue from upgrades.
š¬ Integration Tip
Ensure iTerm2's Python API is enabled and configure the MCP server in ~/.claude.json before use to avoid setup errors and streamline worker spawning.
Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
Provides a 7-step debugging protocol plus language-specific commands to systematically identify, verify, and fix software bugs across multiple environments.
A comprehensive skill for using the Cursor CLI agent for various software engineering tasks (updated for 2026 features, includes tmux automation guide).
Write, run, and manage unit, integration, and E2E tests across TypeScript, Python, and Swift using recommended frameworks.
Control and operate Opencode via slash commands. Use this skill to manage sessions, select models, switch agents (plan/build), and coordinate coding through Opencode.
Coding style memory that adapts to your preferences, conventions, and patterns for consistent coding.