MCP server for multi-session Claude Code coordination via Temporal
Multiple Claude Code sessions discover each other, exchange messages in real time, and coordinate work — across machines, not just localhost.
Each session registers as a player in Temporal. Players discover each other with ensemble, send messages with cue, and coordinate via a conductor that connects to external interfaces like Discord, Telegram, or the built-in TUI.
.md files. Ship lineups that assemble entire teams in one command.| 🔁 Ensemble Lineups | YAML configs that define a full team and recruit them all in one command |
| ⏰ Scheduling | One-shot and recurring message schedules with fan-out and failure notifications |
| 🎭 Player Types | Reusable agent definitions with 8 shipped types and three-tier lookup |
| 🖥️ Terminal UI | Chat-focused TUI with slash commands, overlays, and interactive wizards |
| 🌐 Cross-machine | Any session that can reach your Temporal server can join the ensemble |
| ⏸️ Hold / Pause / Resume | Pre-warm a full team before delivering tasks; pause and resume mid-session |
| 🤖 Copilot bridge | Mix Claude Code and GitHub Copilot CLI sessions in the same ensemble |
npm install -g claude-tempoPrerequisites: Node.js 18+, Temporal CLI, Claude Code
One command handles everything:
cd your-project
claude-tempo upThis starts Temporal, registers the MCP server, launches the daemon, and opens a conductor session. Then add players:
claude-tempo start # open a player session
claude-tempo status # see who's activeOr ask the conductor to recruit players from inside Claude Code.
claude-tempo server # start Temporal dev server
claude-tempo init # register MCP server globally
claude-tempo preflight # verify environment
claude-tempo conduct # start a conductor
claude-tempo start # start a playerclaude-tempo upgradeStops the daemon, installs the latest version, and restarts automatically. To upgrade to a specific version:
claude-tempo upgrade 0.22.0# Stop a specific player session
claude-tempo stop my-ensemble player-name
# Tear down everything (all sessions, schedulers, and Maestro workflows)
claude-tempo down --all
# Stop the background daemon
claude-tempo daemon stop📖 Full CLI reference → docs/cli.md
report calls and connects to external interfacesdefault.md with YAML frontmatter) that gives a player a named rolePlayers in one ensemble cannot see or message players in another:
claude-tempo conduct frontend # conduct the "frontend" ensemble
claude-tempo start backend # join the "backend" ensembleTools available inside Claude Code sessions connected to claude-tempo:
| Tool | Description |
|---|---|
ensemble | Discover active sessions |
cue | Send a message to a player by name |
recruit | Spawn a new Claude Code session |
report | Send updates to the conductor |
broadcast | Send a message to all active players |
recall | Read your own message history |
who_am_i | Get your identity, role, and player type |
📖 Full tools reference → docs/tools.md (includes schedule, stage, quality_gate, worktree, and all others)
claude-tempo up [ensemble] # first-time setup
claude-tempo conduct [ensemble] # start a conductor
claude-tempo start [ensemble] # start a player
claude-tempo status [ensemble] # list active sessions
claude-tempo release [ensemble] # release held players (unlock + deliver tasks)
claude-tempo pause [ensemble] # pause all sessions and the scheduler
claude-tempo resume [ensemble] # resume a paused ensemble
claude-tempo tui # open the terminal UI
claude-tempo daemon <sub> # manage the worker daemon
claude-tempo upgrade # update to latestRun claude-tempo --help or claude-tempo <command> --help for all flags.
📖 Full CLI reference → docs/cli.md
Define reusable team configurations as YAML files and load them in one command:
name: my-project
conductor:
instructions: "Coordinate the frontend and backend teams"
players:
- name: frontend
type: tempo-soloist
workDir: /repos/my-app
instructions: "Build the React dashboard"
- name: backend
type: tempo-soloist
workDir: /repos/my-api
instructions: "Implement the REST endpoints"
schedules:
- name: status-check
message: "Report your current progress"
target: all
every: 30mclaude-tempo up --lineup my-project.yaml # load from CLIOr from inside a session: "Load the my-project lineup"
📖 Lineups, player types, and shipped examples → docs/ensembles.md
Player types are reusable agent definitions — .md files with YAML frontmatter. Reference them by name in lineups:
players:
- name: arch
type: tempo-composer
- name: eng
type: tempo-soloistEight types ship out of the box: tempo-conductor, tempo-composer, tempo-soloist, tempo-tuner, tempo-critic, tempo-roadie, tempo-improv, tempo-liner. Four lineup presets are included: tempo-big-band, tempo-dev-team, tempo-review-squad, tempo-jam-session.
claude-tempo agent-types list # discover available types
claude-tempo agent-types init # copy shipped types to ~/.claude/agents/📖 Player types deep dive → docs/ensembles.md
claude-tempo config # interactive setup (Temporal address, namespace, API key)Settings persist in ~/.claude-tempo/config.json. Resolution order: CLI flags → env vars → config file → Temporal CLI config → defaults.
Key environment variables:
| Variable | Default | Description |
|---|---|---|
TEMPORAL_ADDRESS | localhost:7233 | Temporal server address |
TEMPORAL_NAMESPACE | default | Temporal namespace |
TEMPORAL_API_KEY | (none) | Temporal Cloud API key |
CLAUDE_TEMPO_ENSEMBLE | default | Ensemble name |
📖 Full configuration reference → docs/configuration.md
claude-tempo tui # multi-ensemble home screen
claude-tempo tui --ensemble my-ensemble # direct ensemble modeThe TUI provides a chat-focused shell for managing your ensemble:
@player message to message directly/recruit, /status, /schedule, /gates, /stages, /worktree, /go (release held), /pause, /resume, and more; type /help for the full list📖 TUI reference → docs/dashboard.md
Experimental — subject to breaking changes.
GitHub Copilot CLI sessions can join an ensemble using --agent copilot:
claude-tempo start myband --agent copilot -n copilot-1📖 Copilot bridge setup and limitations → docs/copilot.md
The daemon runs Temporal workers as a background process — it starts automatically on first use. Manage it explicitly with claude-tempo daemon start|stop|status|logs.
📖 Daemon reference → docs/daemon.md
git clone https://github.com/vinceblank/claude-tempo.git
cd claude-tempo && npm install
npm run build # compile TypeScript + pre-bundle workflows
npm test # run tests
npm link # link CLI for local testingImportant: Run
npm run buildafter changing workflow code (src/workflows/). The build pre-bundles workflows intoworkflow-bundle.jsso all workers use identical code.
See CLAUDE.md for project structure, conventions, and development setup. See docs/ARCHITECTURE.md for the three-layer session model (workflow / adapter / process). Pull requests welcome — run npm test before submitting.
recruit requires manual acknowledgment — Recruited sessions show a Claude Code confirmation prompt that must be acknowledged in the spawned terminal. This will be resolved once claude-tempo is a published approved channel plugin. Copilot bridge sessions are not affected.MIT
vinceblank/claude-tempo
March 29, 2026
April 13, 2026
TypeScript