Ep 3: cmux — The Terminal Built for AI Agents
Released in 2026, cmux is based on the Ghostty engine and introduces vertical tabs, notification rings, and a robust Socket API to address the challenges of managing multiple AI Agents.
Core Philosophy
The bottleneck in running multiple Agents in parallel isn't computing power—it's human attention.
When running 5 Agents simultaneously, you need to know:
- Who needs input? (Agent is stuck waiting for your response)
- Who finished? (You can check the results)
- Who errored out? (Requires manual intervention)
Without a notification mechanism, you're forced to manually flip through tabs to check status—an efficiency disaster.
cmux's solution: Notification Rings. When an Agent needs your attention, its tab automatically flashes, accompanied by a system notification.
Installation
macOS (The only natively supported platform):
# Option 1: Homebrew (Recommended)
brew install --cask cmux
# Option 2: DMG download from official site
# https://cmux.com/
# Option 3: Manual download from GitHub
# https://github.com/nickelc/cmux/releases
Operating System Support
| System | Support | Notes |
|---|---|---|
| macOS 13+ | Native | Based on the Ghostty rendering engine |
| Linux | Community Alternative | Séance (Linux version, community-maintained) |
| Windows | Community Alternative | wmux (Windows version, community-maintained) |
Note: Linux and Windows versions are community projects and may lack the stability and features of the native macOS version.
Core Features
1. Vertical Tab Bar
A column of tabs on the left, each representing an Agent session. See all Agent statuses at a glance.
┌──────┬─────────────────────────────────┐
│ ▶ P1 │ │
│ P2 │ Claude Code Session │
│ ● P3 │ > /gsd-execute-phase 1 │
│ P4 │ │
│ P5 │ [Running task 3/12...] │
│ │ │
└──────┴─────────────────────────────────┘
- ▶ = Needs input
- ● = Notification (Completed/Error)
- Blank = Running normally
2. Notification Rings
When an Agent needs input, finishes a task, or errors out:
- A colored ring flashes on the corresponding tab.
- A macOS system notification pops up.
- Clicking the notification jumps directly to that Agent session.
3. Built-in Browser
Open a browser panel on the right to check documentation, read APIs, or review GitHub PRs—without leaving your terminal.
┌──────┬────────────────────┬────────────────────┐
│ Tab │ Claude Code │ Built-in Browser │
│ Bar │ Agent Session │ docs.anthropic.com │
│ │ │ │
└──────┴────────────────────┴────────────────────┘
4. Split Panels
Supports horizontal and vertical splitting to compare code or monitor two Agents side-by-side.
5. Socket API
Provides a full Socket API for batch management of Agents via scripts. See "Agent Interaction Mechanism" below.
Agent Interaction Mechanism
cmux offers some of the most powerful Agent interaction capabilities among all terminals:
flowchart TB
subgraph Script Automation
A[Startup Script] -->|Socket API| B[cmux Process]
B -->|Create Tab| C[Agent 1]
B -->|Create Tab| D[Agent 2]
B -->|Create Tab| E[Agent N...]
end
subgraph Notification Mechanism
C -->|Needs Input| F[Ring Flashing]
D -->|Task Complete| G[Desktop Alert]
E -->|Error| F
F --> H[Click to Jump]
G --> H
end
subgraph Human Intervention
H --> I[Input Response]
I --> C
end
style B fill:#4a9eff,color:#fff
style F fill:#ff6b6b,color:#fff| Interaction Mode | Support | Description |
|---|---|---|
| Socket API | Full | Real-time bidirectional communication; most powerful automation |
| Batch Management | Full | Python/Node/Bash scripts to control Agent lifecycles |
| Notification Rings | Unique | Automatic alerts when Agent status changes |
| Built-in Browser | Unique | Check docs without switching windows |
| AppleScript | Limited | Standard macOS support |
| CLI | Limited | Basic operations via cmux command |
Socket API Example:
# Python example: Batch starting 5 Claude Code Agents
import socket
import json
def send_cmux_command(command):
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect('/tmp/cmux.sock')
sock.send(json.dumps(command).encode())
response = sock.recv(4096)
sock.close()
return json.loads(response)
# Create 5 tabs, each starting a Claude Code instance
for i in range(1, 6):
send_cmux_command({
"action": "new_tab",
"name": f"agent-{i}",
"command": "claude"
})
10 Agent Parallel Management Workflow
sequenceDiagram
participant User as Developer
participant Script as Startup Script
participant Cmux as cmux
participant A1 as Agent 1
(Phase 1)
participant A2 as Agent 2
(Phase 2)
participant A3 as Agent 3
(Tests)
User->>Script: Run startup script
Script->>Cmux: Socket API: Create 3 tabs
Cmux->>A1: Start claude
Cmux->>A2: Start claude
Cmux->>A3: Start claude
Note over Cmux: Three tabs run in parallel
Notification rings monitor status
A1->>Cmux: ⏸ Needs user input
Cmux->>User: 🔔 Ring flashes + Desktop alert
User->>A1: Input decision
A1->>Cmux: ✅ Continue running
A2->>Cmux: ✅ Phase 2 complete
Cmux->>User: 🔔 Completion notification
A3->>Cmux: ❌ Test failed
Cmux->>User: 🔔 Error notification
User->>A3: Intervene to debugPros & Cons
| Pros | Cons |
|---|---|
| Specifically designed for multi-Agent use | Native support only on macOS |
| Notification rings solve attention management | No support for remote SSH scenarios |
| Fully programmable Socket API | AGPL-3.0 license restricts commercial use |
| Based on Ghostty = same rendering speed | Young community ecosystem (launched 2026.02) |
| Built-in browser saves window switching | Linux/Windows versions are community ports |
| Vertical tab bar for clear overview | No built-in AI features |
Best Use Cases
- Running 3-10 Agents in parallel locally on macOS
- Scenarios requiring Agent status notifications and attention management
- Standardized terminal solution for macOS-based teams