Spawn Backends
Spawn Backends
Section titled “Spawn Backends”A backend determines how teammate Claude instances actually run. Claude Code supports three backends and auto-detects the best one based on your environment.
Experimental: Agent teams are disabled by default. Enable with
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMSin your settings or environment.
Related skills:
- Orchestrating - Primitives overview and quick reference
- Team Management - Creating and managing teams
- Error Handling - Troubleshooting backend issues
Backend Comparison
Section titled “Backend Comparison”| Backend | How It Works | Visibility | Persistence | Speed |
|---|---|---|---|---|
| in-process | Same Node.js process as leader | Hidden (background) | Dies with leader | Fastest |
| tmux | Separate terminal in tmux session | Visible in tmux | Survives leader exit | Medium |
| iterm2 | Split panes in iTerm2 window | Visible side-by-side | Dies with window | Medium |
teammateMode Setting
Section titled “teammateMode Setting”The default is "auto", which uses split panes if you’re already running inside a tmux session, and in-process otherwise.
Settings File Configuration
Section titled “Settings File Configuration”Set teammateMode in your settings.json:
{ "teammateMode": "in-process"}Valid values: "auto", "in-process", "tmux"
CLI Flag
Section titled “CLI Flag”Force a mode for a single session:
claude --teammate-mode in-processEnvironment Variable
Section titled “Environment Variable”export CLAUDE_CODE_SPAWN_BACKEND=in-processAuto-Detection Logic
Section titled “Auto-Detection Logic”Claude Code automatically selects a backend using this decision tree:
flowchart TD
A[Start] --> B{Running inside tmux?}
B -->|Yes| C[Use tmux backend]
B -->|No| D{Running in iTerm2?}
D -->|No| E{tmux available?}
E -->|Yes| F[Use tmux - external session]
E -->|No| G[Use in-process]
D -->|Yes| H{it2 CLI installed?}
H -->|Yes| I[Use iterm2 backend]
H -->|No| J{tmux available?}
J -->|Yes| K[Use tmux - prompt to install it2]
J -->|No| L[Error: Install tmux or it2]
Detection checks:
$TMUXenvironment variable -> inside tmux$TERM_PROGRAM === "iTerm.app"or$ITERM_SESSION_ID-> in iTerm2which tmux-> tmux availablewhich it2-> it2 CLI installed
in-process (Default)
Section titled “in-process (Default)”Teammates run as async tasks within the same Node.js process.
How it works:
- No new process spawned
- Teammates share the same Node.js event loop
- Communication via in-memory queues (fast)
- You don’t see teammate output directly
When it’s used:
- Not running inside tmux session
- Non-interactive mode (CI, scripts)
- Explicitly set via
teammateMode: "in-process"orCLAUDE_CODE_SPAWN_BACKEND=in-process
Layout:
┌─────────────────────────────────────────┐│ Node.js Process ││ ┌─────────┐ ┌─────────┐ ┌─────────┐ ││ │ Leader │ │Worker 1 │ │Worker 2 │ ││ │ (main) │ │ (async) │ │ (async) │ ││ └─────────┘ └─────────┘ └─────────┘ │└─────────────────────────────────────────┘Interaction: Use Shift+Up/Down to select a teammate, then type to send a message. Press Enter to view a session, Escape to interrupt, Ctrl+T to toggle the task list.
Pros:
- Fastest startup (no process spawn)
- Lowest overhead
- Works everywhere, no extra setup
Cons:
- Can’t see teammate output in real-time
- All die if leader dies
- Harder to debug
Teammates run as separate Claude instances in tmux panes/windows.
How it works:
- Each teammate gets its own tmux pane
- Separate process per teammate
- You can switch panes to see teammate output
- Communication via inbox files
When it’s used:
- Running inside a tmux session (
$TMUXis set) - tmux available and not in iTerm2
- Explicitly set via
teammateMode: "tmux"orCLAUDE_CODE_SPAWN_BACKEND=tmux
Layout modes:
- Inside tmux (native): Splits your current window
┌─────────────────┬─────────────────┐│ │ Worker 1 ││ Leader ├─────────────────┤│ (your pane) │ Worker 2 ││ ├─────────────────┤│ │ Worker 3 │└─────────────────┴─────────────────┘- Outside tmux (external session): Creates a new tmux session called
claude-swarm
# Your terminal stays as-is# Workers run in separate tmux session
# View workers:tmux attach -t claude-swarmNote: tmux has known limitations on certain operating systems and traditionally works best on macOS. Using
tmux -CCin iTerm2 is the suggested entrypoint.
Pros:
- See teammate output in real-time
- Teammates survive leader exit
- Can attach/detach sessions
- Works in CI/headless environments
Cons:
- Slower startup (process spawn)
- Requires tmux installed
- More resource usage
# Start tmux session firsttmux new-session -s claude
# Or force tmux backendexport CLAUDE_CODE_SPAWN_BACKEND=tmuxUseful tmux commands:
# List all panes in current windowtmux list-panes
# Switch to pane by numbertmux select-pane -t 1
# Kill a specific panetmux kill-pane -t %5
# View swarm session (if external)tmux attach -t claude-swarm
# Rebalance pane layouttmux select-layout tilediterm2 (macOS only)
Section titled “iterm2 (macOS only)”Teammates run as split panes within your iTerm2 window.
How it works:
- Uses iTerm2’s Python API via
it2CLI - Splits your current window into panes
- Each teammate visible side-by-side
- Communication via inbox files
When it’s used:
- Running in iTerm2 (
$TERM_PROGRAM === "iTerm.app") it2CLI is installed and working- Python API enabled in iTerm2 preferences
Layout:
┌─────────────────┬─────────────────┐│ │ Worker 1 ││ Leader ├─────────────────┤│ (your pane) │ Worker 2 ││ ├─────────────────┤│ │ Worker 3 │└─────────────────┴─────────────────┘Pros:
- Visual debugging - see all teammates
- Native macOS experience
- No tmux needed
- Automatic pane management
Cons:
- macOS + iTerm2 only
- Requires setup (it2 CLI + Python API)
- Panes die with window
- Not supported in VS Code’s integrated terminal, Windows Terminal, or Ghostty
Setup:
# 1. Install it2 CLIuv tool install it2# ORpipx install it2# ORpip install --user it2
# 2. Enable Python API in iTerm2# iTerm2 -> Settings -> General -> Magic -> Enable Python API
# 3. Restart iTerm2
# 4. Verifyit2 --versionit2 session listIf setup fails: Claude Code will prompt you to set up it2 when you first spawn a teammate. You can choose to:
- Install it2 now (guided setup)
- Use tmux instead
- Cancel
Backend in Team Config
Section titled “Backend in Team Config”The backend type is recorded per-teammate in config.json:
{ "members": [ { "name": "worker-1", "backendType": "in-process", "tmuxPaneId": "in-process" }, { "name": "worker-2", "backendType": "tmux", "tmuxPaneId": "%5" } ]}Checking Current Backend
Section titled “Checking Current Backend”# See what backend was detectedcat ~/.claude/teams/{team}/config.json | jq '.members[].backendType'
# Check if inside tmuxecho $TMUX
# Check if in iTerm2echo $TERM_PROGRAM
# Check tmux availabilitywhich tmux
# Check it2 availabilitywhich it2Troubleshooting Backends
Section titled “Troubleshooting Backends”| Issue | Cause | Solution |
|---|---|---|
| ”No pane backend available” | Neither tmux nor iTerm2 available | Install tmux: brew install tmux |
| ”it2 CLI not installed” | In iTerm2 but missing it2 | Run uv tool install it2 |
| ”Python API not enabled” | it2 can’t communicate with iTerm2 | Enable in iTerm2 Settings -> General -> Magic |
| Workers not visible | Using in-process backend | Start inside tmux or iTerm2 |
| Workers dying unexpectedly | Outside tmux, leader exited | Use tmux for persistence |
| Orphaned tmux sessions | Team wasn’t fully cleaned up | tmux ls then tmux kill-session -t <name> |