A Windows desktop app (.NET 8 / WinForms / WebView2) for running and coordinating multiple Claude Code terminal sessions — with a kanban task board, inter-terminal messaging, per-task git isolation, institutional memory, and phone access.
- Multiple Terminal Sessions: Run multiple Claude Code instances in a docked, tabbed interface
- Kanban Task Workflow: Claim → plan → checklist (coding/testing/done) → continuation notes, with helpers and a review pipeline
- Inter-Terminal Messaging: Claude instances communicate with each other (and you) via MCP tools and an in-app chat
- Git Worktree Isolation: Each task/agent gets its own worktree, auto-merged and pruned on completion
- Multi-Connect (Phone Access): Reach your tasks and terminals from your phone over a private Tailscale network
- Presence-Aware Routing: mmWave + phone-BLE presence detection routes agent questions to the desktop or your phone
- Code Intelligence: Roslyn-based code graph (symbols, callers/callees, impact analysis) and an auto-generated subsystem wiki
- Institutional Memory: Queryable knowledge base + searchable session history/lineage
- Session Persistence: Resume sessions and maintain identity across restarts
- Startup Context Injection: Automatic task/plan context provided to terminals at session start
Full documentation is available online at clarionlive.github.io/multiterminal. The same HTML site ships with the app under docs/html/ — open it any time from the Help button (❓) in the toolbar, immediately right of History.
Highlights: Getting Started · Kanban Workflow · Git Worktrees · Multi-Connect (Phone) · Presence Sensors · Code Graph · Troubleshooting / FAQ
Note: The sections below (Plan System and the MCP Tools Reference) describe the original plan-centric workflow and an early tool set. Day-to-day work now centers on the Kanban Task Workflow — see the Kanban Workflow guide and the MCP Tools reference for the current surface.
The Plan System enables coordinated multi-agent workflows where multiple Claude terminals collaborate on a shared goal. Plans progress through defined phases with team assignments and decision tracking.
Plans track goals from inception to completion:
- Title & Description: What the plan aims to accomplish
- Content: Detailed implementation details
- Leader: Terminal responsible for coordination
- Status:
draft,active,paused,completed,abandoned
Phases represent workflow stages:
design- Planning and architecturecoding- Implementationtesting- Validation and QAcompleted- Done
Each phase can have a checklist of items to track progress.
Assignments link terminals to plans:
- Role:
leaderormember - Task Summary: What the terminal is working on
- Status:
assigned,in_progress,blocked,done
Decisions record important choices made during execution for future context.
- Leader creates a plan with
create_plan - Terminals are assigned via
assign_terminal - Work begins, assignments move to
in_progress - Leader advances phases with
update_phase - Decisions are recorded with
record_decision - Checklist items track phase completion
- Plan completes when all phases are done
When a terminal starts, it automatically receives:
- Active plan title, phase, and their assignment
- Phase checklist items
- Recent pool activity (shared learnings)
This enables terminals to resume work with full context.
The MultiTerminal MCP server exposes tools in three categories: Messaging, Plan Management, and Task Management.
Register this terminal for messaging.
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Friendly name (e.g., 'Alice', 'Bob') |
doc_id |
string | Yes | Value from $env:MULTITERMINAL_DOC_ID |
List all registered terminals available for messaging.
No parameters
Returns: Array of {id, name, docId}
Send a message to another terminal.
| Parameter | Type | Required | Description |
|---|---|---|---|
from_terminal_id |
string | Yes | Your terminal ID (from registration) |
to |
string | Yes | Target terminal name or ID |
message |
string | Yes | Message content |
Get pending messages sent to your terminal. Messages are removed after retrieval.
| Parameter | Type | Required | Description |
|---|---|---|---|
terminal_id |
string | Yes | Your terminal ID |
Send a message to all other registered terminals.
| Parameter | Type | Required | Description |
|---|---|---|---|
from_terminal_id |
string | Yes | Your terminal ID |
message |
string | Yes | Message to broadcast |
Get the Claude Code session ID for resuming a terminal identity.
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Identity name |
project_path |
string | No | Project path (defaults to cwd) |
List all known terminal identities for a project.
| Parameter | Type | Required | Description |
|---|---|---|---|
project_path |
string | No | Project path (defaults to cwd) |
Create a new plan with phases.
| Parameter | Type | Required | Description |
|---|---|---|---|
title |
string | Yes | Short plan title |
description |
string | No | Detailed goal description |
content |
string | No | Full implementation details |
leader_id |
string | No | Terminal name of leader |
set_active |
bool | No | Set as active immediately (default: true) |
Get the currently active plan with phases and assignments.
No parameters
Returns: Plan info, phases with checklists, assignments, recent decisions
Set an existing plan as the active plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
plan_id |
string | Yes | Plan ID to activate |
List all plans with their status.
No parameters
Returns: Array of plans with active/draft/completed counts
Advance or change the current phase of a plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
plan_id |
string | Yes | Plan ID |
new_phase |
string | Yes | Phase: design, coding, testing, completed |
Add a new checklist item to a phase.
| Parameter | Type | Required | Description |
|---|---|---|---|
plan_id |
string | Yes | Plan ID |
phase |
string | Yes | Phase name |
item_text |
string | Yes | Checklist item text |
Update a checklist item (mark done/undone).
| Parameter | Type | Required | Description |
|---|---|---|---|
plan_id |
string | Yes | Plan ID |
phase |
string | Yes | Phase name |
item_index |
int | Yes | Item index (0-based) |
done |
bool | Yes | Whether item is done |
Assign a terminal to a role/task within a plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
plan_id |
string | Yes | Plan ID |
terminal_name |
string | Yes | Terminal name to assign |
role |
string | No | leader or member (default: member) |
task_summary |
string | No | Summary of assigned task |
Get your assignment in the active plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
terminal_name |
string | Yes | Your terminal name |
Returns: Plan info, current phase, your assignment details
Update the status of an assignment.
| Parameter | Type | Required | Description |
|---|---|---|---|
plan_id |
string | Yes | Plan ID |
terminal_name |
string | Yes | Terminal whose assignment to update |
status |
string | Yes | assigned, in_progress, blocked, done |
blocked_by |
string | No | What's blocking (if status is blocked) |
Record a decision made during plan execution for future context.
| Parameter | Type | Required | Description |
|---|---|---|---|
plan_id |
string | Yes | Plan ID |
phase |
string | Yes | Phase when decision was made |
decision_text |
string | Yes | The decision |
rationale |
string | No | Why this decision was made |
decided_by |
string | No | Terminal name of decision maker |
MultiTerminal/
├── MCPServer/
│ ├── MultiTerminalMcpServer.cs # HTTP MCP server host
│ ├── Models/
│ │ ├── Plan.cs # Plan, PlanPhase, PlanAssignment, PlanDecision
│ │ ├── Message.cs # Inter-terminal messages
│ │ └── TerminalInfo.cs # Terminal registration
│ ├── Services/
│ │ ├── MessageBroker.cs # Message routing
│ │ ├── PoolCoordinator.cs # Shared memory/learnings
│ │ └── SessionDiscovery.cs # Session ID discovery
│ └── Tools/
│ ├── MessagingTools.cs # Messaging MCP tools
│ ├── PlanTools.cs # Plan management MCP tools
│ └── TaskTools.cs # Kanban task tools
├── Services/
│ ├── SessionDatabase.cs # SQLite for sessions/identities
│ └── PlanDatabase.cs # SQLite for plans/phases/assignments
└── Terminal/
└── TerminalDocument.cs # Terminal UI hosting
The MCP server runs on http://localhost:5050/mcp by default.
Configure Claude Code to use the MultiTerminal MCP server in your ~/.claude/settings.json or project's .claude/settings.json:
{
"mcpServers": {
"multiterminal": {
"url": "http://localhost:5050/mcp"
}
}
}See LICENSE file for details.