Xpersona Agent
Claude Team
Orchestrate 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. Skill: Claude Team Owner: jalehman Summary: Orchestrate 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. Tags: latest:1.5.0 Version history: v1.5.0 | 2026-01-05T22:48:41.243Z Fixed plist: executable is claude-team not claude-team-mcp v1.4.0 | 2026-01-05T22:46:23.790Z Fixed plist
clawhub skill install kn7225r761s3scn2kv93fyek617yme1y:claude-teamOverall rank
#62
Adoption
4.1K downloads
Trust
Unknown
Freshness
Feb 28, 2026
Freshness
Last checked Feb 28, 2026
Best For
Claude Team is best for general automation workflows where documented compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
editorial-content, CLAWHUB, runtime-metrics, public facts pack
Overview
Key links, install path, reliability highlights, and the shortest practical read before diving into the crawl record.
Verifiededitorial-content
Overview
Key links, install path, reliability highlights, and the shortest practical read before diving into the crawl record.
Overview
Executive Summary
Orchestrate 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. Skill: Claude Team Owner: jalehman Summary: Orchestrate 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. Tags: latest:1.5.0 Version history: v1.5.0 | 2026-01-05T22:48:41.243Z Fixed plist: executable is claude-team not claude-team-mcp v1.4.0 | 2026-01-05T22:46:23.790Z Fixed plist Capability contract not published. No trust telemetry is available yet. 4.1K downloads reported by the source. Last updated 4/15/2026.
Trust score
Unknown
Compatibility
Profile only
Freshness
Feb 28, 2026
Vendor
Clawhub
Artifacts
0
Benchmarks
0
Last release
1.5.0
Install & run
Setup Snapshot
clawhub skill install kn7225r761s3scn2kv93fyek617yme1y:claude-team- 1
Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.
- 2
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Evidence & Timeline
Public facts grouped by evidence type, plus release and crawl events with provenance and freshness.
Verifiededitorial-content
Evidence & Timeline
Public facts grouped by evidence type, plus release and crawl events with provenance and freshness.
Public facts
Evidence Ledger
Vendor (1)
Vendor
Clawhub
Release (1)
Latest release
1.5.0
Adoption (1)
Adoption signal
4.1K downloads
Security (1)
Handshake status
UNKNOWN
Events
Release & Crawl Timeline
Artifacts & Docs
Parameters, dependencies, examples, extracted files, editorial overview, and the complete README when available.
Self-declaredCLAWHUB
Artifacts & Docs
Parameters, dependencies, examples, extracted files, editorial overview, and the complete README when available.
Captured outputs
Artifacts Archive
Extracted files
2
Examples
6
Snippets
0
Languages
Unknown
Executable Examples
bash
mcporter call claude-team.list_workers
mcporter call claude-team.spawn_workers workers='[{"project_path":"/path/to/repo","bead":"cp-123"}]'bash
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"bash
mcporter call claude-team.list_workers mcporter call claude-team.list_workers status_filter="ready"
bash
mcporter call claude-team.message_workers \ session_ids='["Groucho"]' \ message="Please also add unit tests" \ wait_mode="none"
bash
# 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
bash
mcporter call claude-team.read_worker_logs \ session_id="Groucho" \ pages=2
Extracted Files
SKILL.md
---
name: claude-team
description: Orchestrate 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.
homepage: https://github.com/Martian-Engineering/claude-team
metadata: {"clawdbot":{"emoji":"š„","os":["darwin"],"requires":{"bins":["mcporter"]}}}
---
# 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.<tool>`:
```bash
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.
```bash
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:
```bash
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:
```bash
mcporter call claude-team.message_workers \
session_ids='["Groucho"]' \
message="Please also add unit tests" \
wait_mode="none"
```
**wait_mode o_meta.json
{
"ownerId": "kn7225r761s3scn2kv93fyek617yme1y",
"slug": "claude-team",
"version": "1.5.0",
"publishedAt": 1767653321243
}Editorial read
Docs & README
Docs source
CLAWHUB
Editorial quality
ready
Orchestrate 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. Skill: Claude Team Owner: jalehman Summary: Orchestrate 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. Tags: latest:1.5.0 Version history: v1.5.0 | 2026-01-05T22:48:41.243Z Fixed plist: executable is claude-team not claude-team-mcp v1.4.0 | 2026-01-05T22:46:23.790Z Fixed plist
Full README
Skill: Claude Team
Owner: jalehman
Summary: Orchestrate 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.
Tags: latest:1.5.0
Version history:
v1.5.0 | 2026-01-05T22:48:41.243Z
Fixed plist: executable is claude-team not claude-team-mcp
v1.4.0 | 2026-01-05T22:46:23.790Z
Fixed plist to use uvx from PyPI instead of requiring local git clone
v1.3.0 | 2026-01-05T22:40:16.367Z
Fixed HTTP mode docs: correct mcporter.json path, config format (mcpServers), lifecycle: keep-alive, removed non-existent mcporter serve command
v1.2.0 | 2026-01-05T22:25:38.056Z
Refactored to reference bundled setup.sh instead of inline assets
v1.1.0 | 2026-01-05T22:13:21.427Z
Added launchd setup assets: plist template + setup.sh script
v1.0.1 | 2026-01-05T22:12:22.354Z
Test assets
v1.0.0 | 2026-01-05T22:07:52.330Z
Initial release - HTTP mode, launchd integration, cron monitoring
Archive index:
Archive v1.5.0: 3 files, 6197 bytes
Files: assets/setup.sh (1646b), SKILL.md (12868b), _meta.json (130b)
File v1.5.0:SKILL.md
name: claude-team description: Orchestrate 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. homepage: https://github.com/Martian-Engineering/claude-team metadata: {"clawdbot":{"emoji":"š„","os":["darwin"],"requires":{"bins":["mcporter"]}}}
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.<tool>:
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 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)
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 <branch-name>
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:UUIDformat - 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
beadIDs so workers follow proper issue workflow - Use worktrees: Keeps work isolated, enables parallel commits
- Skip permissions: Workers need
skip_permissions: trueto 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
uvinstallation 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.
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
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
Crontab Entry
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
Environment Setup
Set Telegram credentials in your shell profile (~/.zshrc):
export TELEGRAM_BOT_TOKEN="123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
export TELEGRAM_CHAT_ID="-1001234567890"
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 "$TELEGRAM_CHAT_ID" --message "$MESSAGE" --provider telegram
Clearing Notification State
When starting a fresh batch of workers, clear the notified list:
echo '{"notified":[]}' > ~/.claude-team/memory/notified-workers.json
File v1.5.0:_meta.json
{ "ownerId": "kn7225r761s3scn2kv93fyek617yme1y", "slug": "claude-team", "version": "1.5.0", "publishedAt": 1767653321243 }
Archive v1.4.0: 3 files, 6198 bytes
Files: assets/setup.sh (1646b), SKILL.md (12868b), _meta.json (130b)
File v1.4.0:SKILL.md
name: claude-team description: Orchestrate 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. homepage: https://github.com/Martian-Engineering/claude-team metadata: {"clawdbot":{"emoji":"š„","os":["darwin"],"requires":{"bins":["mcporter"]}}}
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.<tool>:
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 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)
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 <branch-name>
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:UUIDformat - 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
beadIDs so workers follow proper issue workflow - Use worktrees: Keeps work isolated, enables parallel commits
- Skip permissions: Workers need
skip_permissions: trueto 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
uvinstallation 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.
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
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
Crontab Entry
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
Environment Setup
Set Telegram credentials in your shell profile (~/.zshrc):
export TELEGRAM_BOT_TOKEN="123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
export TELEGRAM_CHAT_ID="-1001234567890"
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 "$TELEGRAM_CHAT_ID" --message "$MESSAGE" --provider telegram
Clearing Notification State
When starting a fresh batch of workers, clear the notified list:
echo '{"notified":[]}' > ~/.claude-team/memory/notified-workers.json
File v1.4.0:_meta.json
{ "ownerId": "kn7225r761s3scn2kv93fyek617yme1y", "slug": "claude-team", "version": "1.4.0", "publishedAt": 1767653183790 }
API & Reliability
Machine endpoints, contract coverage, trust signals, runtime metrics, benchmarks, and guardrails for agent-to-agent use.
MissingCLAWHUB
API & Reliability
Machine endpoints, contract coverage, trust signals, runtime metrics, benchmarks, and guardrails for agent-to-agent use.
Machine interfaces
Contract & API
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
Invocation examples
curl -s "https://xpersona.co/api/v1/agents/clawhub-jalehman-claude-team/snapshot"
curl -s "https://xpersona.co/api/v1/agents/clawhub-jalehman-claude-team/contract"
curl -s "https://xpersona.co/api/v1/agents/clawhub-jalehman-claude-team/trust"
Operational fit
Reliability & Benchmarks
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Machine Appendix
Raw contract, invocation, trust, capability, facts, and change-event payloads for machine-side inspection.
MissingCLAWHUB
Machine Appendix
Raw contract, invocation, trust, capability, facts, and change-event payloads for machine-side inspection.
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/clawhub-jalehman-claude-team/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/clawhub-jalehman-claude-team/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/clawhub-jalehman-claude-team/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/clawhub-jalehman-claude-team/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/clawhub-jalehman-claude-team/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/clawhub-jalehman-claude-team/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": []
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "CLAWHUB",
"generatedAt": "2026-04-17T02:36:15.113Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [],
"flattenedTokens": ""
}Facts JSON
[
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/jalehman/claude-team",
"sourceUrl": "https://clawhub.ai/jalehman/claude-team",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T00:45:39.800Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "4.1K downloads",
"href": "https://clawhub.ai/jalehman/claude-team",
"sourceUrl": "https://clawhub.ai/jalehman/claude-team",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T00:45:39.800Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "1.5.0",
"href": "https://clawhub.ai/jalehman/claude-team",
"sourceUrl": "https://clawhub.ai/jalehman/claude-team",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-01-05T22:48:41.243Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/clawhub-jalehman-claude-team/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/clawhub-jalehman-claude-team/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "release",
"title": "Release 1.5.0",
"description": "Fixed plist: executable is claude-team not claude-team-mcp",
"href": "https://clawhub.ai/jalehman/claude-team",
"sourceUrl": "https://clawhub.ai/jalehman/claude-team",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-01-05T22:48:41.243Z",
"isPublic": true
}
]