cmux
A native, Ghostty-based macOS terminal with vertical tabs, agent-aware notifications, and a scriptable browser built for running many parallel AI coding agent sessions instead of juggling tmux panes.
cmux is an open source macOS terminal built by Manaflow, a Y Combinator (S2024) company, specifically for developers running multiple AI coding agents — Claude Code, Codex, Gemini CLI, OpenCode, Amp, and others — at the same time. Instead of wrapping a browser engine like the Electron and Tauri-based coding orchestrators it competes with, cmux is a native Swift/AppKit application built on a fork of Ghostty’s GPU-accelerated libghostty core, so it starts fast, uses little memory, and reads an existing ~/.config/ghostty/config for themes and fonts.
The problem it targets is notification opacity: when several agent sessions run in split panes, macOS notifications collapse into generic “waiting for input” banners with no way to tell which pane needs attention. cmux’s sidebar shows vertical tabs with git branch, linked PR status, working directory, listening ports, and the latest notification text per workspace; panes get a blue ring and their tab lights up when an agent is waiting, driven by real terminal escape sequences (OSC 9/99/777) and a cmux notify CLI hook that plugs into agent hooks.
Beyond notifications, cmux ships an in-app browser with a scriptable API ported from Vercel’s agent-browser project — agents can snapshot the accessibility tree, click, fill forms, and evaluate JS in a pane split next to the terminal — plus built-in SSH workspaces that route browser traffic through the remote host so localhost URLs just work, session restore across window/workspace/pane layout, and a public CmuxExtensionKit SDK so third parties can build their own sidebar extensions as macOS ExtensionKit app extensions.
The terminal client itself is fully open source under a dual GPL-3.0-or-later / commercial license. A separate, optional Cloud VMs feature (cmux vm new/ls/rm/exec/attach) provisions remote dev VMs through E2B or Freestyle, billed per team plan — that piece lives in a closed, hosted Next.js backend and is not required to use the terminal.
What You Get
- Vertical and horizontal tab sidebar showing git branch, linked PR status/number, working directory, listening ports, and the latest notification text per workspace
- Blue-ring and tab-light notification system driven by OSC 9/99/777 terminal escape sequences plus a
cmux notifyCLI hook wired into Claude Code, Codex, OpenCode, and other agent hooks - Native Swift/AppKit application built on a fork of libghostty (Ghostty’s GPU-accelerated rendering core) instead of an Electron or Tauri shell
- In-app scriptable browser, ported from Vercel’s agent-browser, that agents can drive via an accessibility-tree snapshot, click, fill, and JS-eval API, split alongside the terminal
- Built-in SSH workspaces (
cmux ssh user@remote) that route browser panes through the remote machine’s network so localhost URLs resolve correctly, with drag-and-drop image upload via scp - Session restore across window, workspace, and pane layout, working directories, and terminal scrollback, with native resume support for Claude Code, Codex, Grok, OpenCode, and several other agent CLIs
- Public CmuxExtensionKit SDK for building third-party sidebar extensions as macOS ExtensionKit app extensions, scoped to workspace metadata with no access to terminal buffers or secrets
- Optional, separately billed Cloud VMs (
cmux vm new/ls/rm/exec/attach) that provision remote agent workspaces on E2B or Freestyle infrastructure
Common Use Cases
- Running several Claude Code, Codex, or Gemini CLI sessions in parallel without losing track of which one is blocked waiting for input
- Developing against a remote machine over SSH while still using browser-based agent tooling that needs to reach a localhost dev server
- Standardizing team workflows with project-specific
cmux.jsoncustom commands launched from the command palette - Building custom sidebar tooling — ticket trackers, CI dashboards, deployment status — through the CmuxExtensionKit SDK
- Scanning many active workspaces at a glance for git branch, PR review status, and open ports before context-switching
Under The Hood
Architecture
cmux composes its native app from roughly fifty local Swift Package Manager modules under Packages/macOS, Packages/iOS, and Packages/Shared (for example CmuxTerminal, CmuxWorkspaces, CmuxSidebar, CmuxExtensionKit, and the auth/config packages shared with the iOS companion app), with a documented boundary between the public CmuxExtensionKit SDK and the internal CmuxSidebarProviderKit used by cmux’s own sidebar providers. That modular boundary is genuine, but a large share of app-level orchestration still funnels through two outsized files at the composition root — AppDelegate.swift and cmuxApp.swift — extended by dozens of AppDelegate+Feature.swift files (window docking, shortcut routing, notification delivery, and more) rather than being pushed down into packages. Terminal rendering itself is delegated entirely to a forked Ghostty core (the ghostty git submodule, built separately with Zig), and a companion Go module under daemon/remote implements a remote/tmux-compatible daemon, so the overall system is a native client with several independently buildable subsystems rather than a single monolith.
Tech Stack
The macOS and iOS clients target Swift 6.0 with AppKit and SwiftUI, Xcode/xcodebuild for builds, and a custom Bonsplit package (also maintained by Manaflow) for split-pane layout; the terminal core is a fork of Ghostty compiled with zig build -Demit-xcframework=true. The web/ directory is a separate Next.js 16 and React 19 application using Effect-TS (effect, @effect/platform, @effect/sql-pg) for typed backend workflows, Drizzle ORM against Postgres for VM and billing state, Stack Auth for authentication, and the E2B and Freestyle SDKs to provision the optional Cloud VM feature, deployed to Vercel with OpenTelemetry instrumentation, PostHog analytics, and Resend for transactional email. Bun is the package manager and test runner for the JS/TS side; Biome and ESLint 9 handle linting.
Code Quality
The native app carries an extensive Swift test suite — 334 files across cmuxTests and cmuxUITests — split between the older XCTest framework and Apple’s newer Swift Testing framework, suggesting an active migration between the two. A sampled test (covering agent session resume behavior) uses descriptive test names and behavior-level assertions rather than trivial smoke checks. No SwiftLint or SwiftFormat configuration is checked into the repo, so native-side style is not enforced by tooling as far as the source shows. CI is genuinely mature: .github/workflows/ci.yml does path-based change detection across macOS, web, Go, and agent-session-web areas before dispatching scoped jobs, backed by dedicated workflows for iOS TestFlight builds, cloud VM smoke/stress tests, and nightly release builds. The web side typechecks with TypeScript and lints with ESLint’s Next.js config.
What Makes It Unique
The distinguishing technical choice is treating terminal escape sequences as a first-class notification channel: cmux listens for OSC 9/99/777 sequences and exposes a cmux notify CLI that agent hooks call directly, turning a generic OS banner into pane-addressable state — a blue ring on the exact tab, aggregated in a notification panel with jump-to-latest-unread shortcuts. That’s paired with an in-app browser carrying a scriptable automation API ported from Vercel’s agent-browser project, letting an agent snapshot, click, and fill a live browser pane next to its terminal, and a security-scoped extension SDK (CmuxExtensionKit) that exposes only workspace metadata — not terminal buffers, environment variables, or secrets — to third-party sidebar extensions. Individually these are incremental ideas; combined in a native, non-Electron terminal purpose-built for multi-agent workflows, they’re a distinct take relative to the largely Electron/Tauri-based agent-orchestrator category.
Self-Hosting
Licensing Model cmux is dual-licensed: GNU GPL-3.0-or-later for open source use, with Manaflow separately offering a commercial license (contact founders@manaflow.com) for organizations that cannot comply with GPL terms. The macOS terminal application itself has no license key or feature gating.
Self-Hosting Restrictions None found for the terminal client — the sidebar, notifications, SSH workspaces, session restore, and extension SDK are all present in the open source app with no paid tier required.
Enterprise Features No enterprise-specific feature tier is documented for the terminal application itself in the repository.
Cloud vs Self-Hosted
A separate, optional Cloud VMs feature (cmux vm new/ls/rm/exec/attach, backed by E2B and Freestyle) provisions remote agent workspaces through a hosted Next.js backend (web/services/vms). It requires Stack Auth sign-in and is billed per team, with an active-VM-count limit resolved from the team’s plan (web/services/vms/entitlements.ts) — this is an optional hosted add-on layered on top of the open source client, not a restriction on the terminal itself.
License Key Required No, for the terminal application. The Cloud VMs add-on requires an authenticated, billed team account rather than a license key.
Related Apps
Ollama
AI Development · Developer Tools
Run Llama, Gemma, DeepSeek, and other open LLMs on your own machine with one command and an OpenAI-compatible API.
Ollama
MITLangflow
AI Agents · AI Development
Build, test, and deploy AI agents and RAG workflows visually with native API and MCP server export.
Langflow
MITDify
No Code Platforms · AI Development · Developer Tools
Visual LLM workflow platform with RAG pipelines, agent capabilities, and model management for building production AI applications.