One terminal.
Many agents.

Claude Code in one tab, Codex in another, Gemini in a third — and you're the message bus between them. cmuxLayer gives AI agents programmatic control over terminal workspaces. Spawn, monitor, coordinate — all through MCP.

free · open source · 22 MCP tools

$ npm install -g cmuxlayer
0.2mssocket latency
22MCP tools
5agent CLIs
326tests passing
The status quo

You are the bottleneck

Four AI agents in four terminals. You're the message bus, the clipboard, and the status checker. That's not orchestration — that's overhead.

Without cmuxLayer
Alt-tab between 5 terminal windows
Copy-paste output from one agent to another
Manually check if each agent finished
One agent at a time, sequential work
~142ms per CLI subprocess call
With cmuxLayer
All agents visible in one split workspace
One agent reads another's screen directly
Auto-monitor with parsed status and done signals
Parallel multi-agent orchestration
0.1ms persistent socket (1,423x faster)

Use raw tmux if you run a single agent in a single session. Use cmuxLayer when you need agents to see each other's work.

claude ~ my-project
Spawn two agents — one for the API, one for the frontendSetting up both agents.┌─ spawn_agent(repo="api", model="sonnet", task="fix rate limiter") agent_id: sonnet-api-1743523200-f7a2 surface: surface:3 state: creating└─ cli: claude┌─ spawn_agent(repo="web", model="opus", task="add metrics page") agent_id: opus-web-1743523200-b4c1 surface: surface:4 state: creating└─ cli: claude┌─ read_screen(surface="surface:3", parsed_only=true) agent: claude status: working model: claude-sonnet-4-6 ctx: ██████████░░░░░░░░ 54% cost: $0.42└─ parsed_only: trueBoth agents are running. The API fix is 54% through context.
Workflow

Spawn. Split. Monitor. Read.

>_
Spawn
0.2ms
Pick a CLI, a repo, and a task. cmuxLayer opens the pane.
Split
0.2ms
Terminal or browser, any direction. Surfaces stack or tile.
Monitor
live
Context %, cost, state, errors. Parsed from raw screen output.
Read
0.2ms
Screen content, scrollback, or structured parsed data.
MCP tools

Every operation is a tool call

Core — terminal operations
list_surfacesEnumerate all surfaces across workspaces
new_splitCreate terminal or browser splits in any direction
send_inputType text into a surface as if from the keyboard
send_keySend key combos — Enter, Ctrl-C, Escape, arrows
read_screenCapture visible terminal output with optional scrollback
rename_tabSet the workspace tab title
notifyPush macOS notifications from any surface
set_statusUpdate sidebar status entries with icons and colors
set_progressShow a progress bar with label in the sidebar
close_surfaceClose a terminal or browser surface
browser_surfaceOpen a scriptable browser alongside terminal panes
Agent lifecycle — spawn and monitor
spawn_agentLaunch a Claude, Codex, Gemini, Cursor, or Kiro agent in a new pane
send_to_agentDeliver a message to a running agent
read_agent_outputCapture an agent’s latest terminal output
get_agent_stateCheck agent status: running, idle, waiting, done, error
list_agentsEnumerate all active agents across workspaces
wait_forBlock until an agent reaches a target state
wait_for_allBlock until multiple agents finish in parallel
stop_agentGracefully stop a running agent
killForce-kill an unresponsive agent process
my_agentsGet all children of a parent agent with live screen status
interactSend interactive input to an agent waiting for a response
Compatible with

Five CLI agents

Claude Code
Claude Code
Cursor
Cursor
Codex
Codex
Gemini CLI
Gemini CLI
Kiro
Kiro
Get started

Three steps

01
Install from npm
npm install -g cmuxlayer
02
Add to your MCP config
"cmuxlayer": { "command": "cmuxlayer" }
03
Ask your agent to split a pane
It just works.
See it work

Two agents. One orchestrator. Zero tab-switching.

Pair with BrainLayer to give orchestrated agents persistent memory across sessions.

Stop being the clipboard.

npm install. Add to MCP config. Start orchestrating.