Your agents can't touch
the terminal. Fix that.

MCP server that gives AI agents programmatic control over terminal panes. Split, read, send, automate — through one Unix socket.

$ npm install cmuxlayer
0.2ms socket latency
22 MCP tools
5 agent CLIs
310 tests passing
claude ~ my-project
Spawn two agents — one for the API, one for the frontend Setting 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: true Both agents are running. The API fix is 54% through context.

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.

Every operation is a tool call

Core — terminal operations
list_surfaces Enumerate all surfaces across workspaces
new_split Create terminal or browser splits in any direction
send_input Type text into a surface as if from the keyboard
send_key Send key combos — Enter, Ctrl-C, Escape, arrows
read_screen Capture visible terminal output with optional scrollback
rename_tab Set the workspace tab title
notify Push macOS notifications from any surface
set_status Update sidebar status entries with icons and colors
set_progress Show a progress bar with label in the sidebar
close_surface Close a terminal or browser surface
browser_surface Open a scriptable browser alongside terminal panes
Agent lifecycle — spawn and monitor
spawn_agent Launch a Claude, Codex, Gemini, or Cursor agent in a new pane
send_to_agent Deliver a message to a running agent
read_agent_output Capture an agent's latest terminal output
get_agent_state Check agent status: running, idle, waiting, done, error
list_agents Enumerate all active agents across workspaces
wait_for Block until an agent reaches a target state
wait_for_all Block until multiple agents finish in parallel
stop_agent Gracefully stop a running agent
kill Force-kill an unresponsive agent process
interact Send interactive input to an agent waiting for a response

Five CLI agents

Claude Code
Claude Code
Cursor
Cursor
Codex
Codex
Gemini CLI
Gemini CLI
Kiro
Kiro

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.

Two agents. One orchestrator. Zero tab-switching.

Stop being the clipboard.

npm install. Add to MCP config. Start orchestrating.