Loading skill documentation...
coding
★★★★½ 4.5/5.0 ❤️ 756 likes 💬 122 comments 📦 1514 installs
Back to Skills
📖 SKILL DOCUMENTATION
# claude-team

Claude Team 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. Why Use Claude Team?

Parallelism: Fan out work to multiple agents working simultaneously

Context isolation: Each worker has fresh context, keeps coordinator context clean

Visibility: Real Claude Code sessions you can watch, interrupt, or take over

Git worktrees: Each worker can have an isolated branch for their work ⚠️ Important Rule NEVER make code changes directly. Always spawn workers for code changes. This keeps your context clean and provides proper git workflow with worktrees. Prerequisites macOS with iTerm2 (Python API enabled: Preferences → General → Magic → Enable Python API) claude-team MCP server configured in ~/.claude.json Using via mcporter All 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"}]' Core Tools spawn_workers 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 workflow
annotation: 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) list_workers 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 message_workers 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 idle check_idle_workers / wait_idle_workers Check 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 read_worker_logs Get conversation history: mcporter call claude-team.read_worker_logs
session_id="Groucho"
pages=2 examine_worker Get detailed status including conversation stats: mcporter call claude-team.examine_worker session_id="Groucho" close_workers 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: Review commits on the worker's branch Merge or cherry-pick to a persistent branch Delete the branch: git branch -D bd_help Quick reference for beads commands: mcporter call claude-team.bd_help Worker Identification Workers can be referenced by any of: Internal ID: Short hex string (e.g., 3962c5c4) Terminal ID: iterm:UUID format Worker name: Human-friendly name (e.g., Groucho, Aragorn)

Workflow: Assigning a Beads Issue
# 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
Workflow: Parallel Fan-Out
# 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"]' Best Practices Use beads: Assign bead IDs so workers follow proper issue workflow Use worktrees: Keeps work isolated, enables parallel commits Skip permissions: Workers need skip_permissions: true to write files Monitor, don't micromanage: Let workers complete, then review Merge carefully: Review worker branches before merging to main Close workers: Always close when done to clean up worktrees HTTP Mode (Streamable HTTP Transport) For persistent server operation, claude-team can run as an HTTP server. This keeps the MCP server running continuously with persistent state, avoiding cold starts. Starting the HTTP Server 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). mcporter.json Configuration 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" } } } Benefits of HTTP Mode Persistent state: Worker registry survives across CLI invocations Faster responses: No Python environment startup on each call External access: Can be accessed by cron jobs, scripts, or other tools Session recovery: Server tracks sessions even if coordinator disconnects Connecting from Claude Code Update your .mcp.json to use HTTP transport: { "mcpServers": { "claude-team": { "transport": "streamable-http", "url": "http://127.0.0.1:8766/mcp" } } } launchd Auto-Start To automatically start the claude-team server on login, use the bundled setup script. Quick Setup 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 What the Setup Does The setup script: Detects your uv installation path Creates the log directory at ~/.claude-team/logs/ Generates a launchd plist from assets/com.claude-team.plist.template Installs it to ~/Library/LaunchAgents/com.claude-team.plist Loads the service to start immediately The plist template uses uv run to start the HTTP server on port 8766, configured for iTerm2 Python API access (Aqua session type). Managing the Service

# 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 Troubleshooting launchd

# 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 Cron Integration For background monitoring and notifications, claude-team supports cron-based worker tracking via SkillBoss API Hub. Worker Tracking File 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" } Cron Job for Monitoring Completions

Create a monitoring script at ~/.claude-team/scripts/check-workers.sh:
#!/bin/bash
# Check for completed workers and send notifications via SkillBoss API Hub

TRACKING_FILE="$HOME/.claude-team/memory/worker-tracking.json" NOTIFIED_FILE="$HOME/.claude-team/memory/notified-workers.json" SKILLBOSS_API_KEY="${SKILLBOSS_API_KEY}" NOTIFY_PHONE="${NOTIFY_PHONE}"

# 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 email notification via SkillBoss API Hub

MESSAGE="Worker ${worker} completed. Bead: ${BEAD}. ${ANNOTATION}"

curl -s -X POST "https://api.heybossai.com/v1/pilot" \

-H "Authorization: Bearer ${SKILLBOSS_API_KEY}"
-H "Content-Type: application/json"
-d "{"type":"email","inputs":{"to":"${NOTIFY_EMAIL}","subject":"Claude Team Worker Completed","body":"${MESSAGE}"}}" > /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

Crontab Entry Add to crontab (crontab -e):

# Check claude-team workers every 2 minutes
*/2 * * * * SKILLBOSS_API_KEY="your-skillboss-api-key" NOTIFY_EMAIL="[email protected]" ~/.claude-team/scripts/check-workers.sh

Environment Setup Set SkillBoss API Hub credentials in your shell profile (~/.zshrc):

export SKILLBOSS_API_KEY="your-skillboss-api-key"
export NOTIFY_EMAIL="[email protected]"
Alternative: Using clawdbot for Notifications

If you have clawdbot configured, you can send notifications through it instead:

# In check-workers.sh, replace the curl command with:

clawdbot send --to "$NOTIFY_PHONE" --message "$MESSAGE" --provider sms Clearing Notification State When starting a fresh batch of workers, clear the notified list: echo '{"notified":[]}' > ~/.claude-team/memory/notified-workers.json

Reviews

4.5
★★★★½
122 reviews

Write a Review

Get Weekly AI Skills

Join 80,000+ one-person companies automating with AI