A fast, zero-telemetry terminal workspace for local development and AI agent workflows.
A privacy-focused fork of cmux, built on Ghostty and native macOS technologies.
Upstream demo video · Upstream project
| Panes get a blue ring and tabs light up when coding agents need your attention |
|
| See all pending notifications in one place, jump to the most recent unread |
|
| Split a browser alongside your terminal with a scriptable API ported from agent-browser |
|
| Sidebar shows git branch, linked PR status/number, working directory, listening ports, and latest notification text. Split horizontally and vertically. |
|
zerocmux ssh user@remote creates a workspace for a remote machine. Browser panes route through the remote network so localhost just works. Drag an image into a remote session to upload via scp.
|
|
zerocmux claude-teams runs Claude Code's teammate mode with one command. Teammates spawn as native splits with sidebar metadata and notifications. No tmux required.
|
|
- Browser import — Import cookies, history, and sessions from Chrome, Firefox, Arc, and 20+ browsers so browser panes start authenticated
- Custom commands — Define project-specific actions in
cmux.jsonthat launch from the command palette - Scriptable — CLI and socket API to create workspaces, split panes, send keystrokes, and automate the browser
- Native macOS app — Built with Swift and AppKit, not Electron. Fast startup, low memory.
- Ghostty compatible — Reads your existing
~/.config/ghostty/configfor themes, fonts, and colors - GPU-accelerated — Powered by libghostty for smooth rendering
zerocmux does not collect analytics, usage events, crash reports, session data, terminal contents, command history, or workspace metadata.
Some inherited source code, agent hooks, and feed UI use the word "telemetry" for local status events. In zerocmux, those events are local app/socket/feed events, not external analytics.
Network access is limited to features that require it, such as:
- update checks, if enabled
- configured agent providers
- package or framework downloads during development builds
- browser panes and user-requested web navigation
- browser imports requested by the user
- SSH/remote sessions and remote file transfer
Release builds should use a zerocmux-owned update feed or ship with automatic update checks disabled. They should not use the upstream cmux appcast URL.
Prebuilt zerocmux releases are not published from this fork yet. Build from source with:
./scripts/setup.sh
./scripts/reload.sh --tag zerocmuxThe built app is written to Xcode DerivedData under a tag-specific directory.
zerocmux is a fork of cmux with a strict zero-telemetry stance. It keeps the core idea: a native macOS terminal workspace for running local development and AI agent sessions side by side, with Ghostty terminal rendering, browser panes, workspace tabs, notifications, and scriptable automation.
cmux was created for developers running many Claude Code and Codex sessions in parallel. Plain terminal splits and native macOS notifications do not provide much context when an agent needs attention, and large tab sets become difficult to scan.
The upstream project is a native macOS app built with Swift/AppKit and libghostty, rather than Electron or Tauri. It reads existing Ghostty config for themes, fonts, and colors.
The main additions are the sidebar and notification system. The sidebar has
vertical tabs that show git branch, linked PR status/number, working directory,
listening ports, and the latest notification text for each workspace. The
notification system picks up terminal sequences (OSC 9/99/777) and has a CLI
(zerocmux notify) you can wire into agent hooks for Claude Code, OpenCode, etc.
When an agent is waiting, its pane gets a blue ring and the tab lights up in
the sidebar. Cmd+Shift+U jumps to the most recent unread.
The in-app browser has a scriptable API ported from agent-browser. Agents can snapshot the accessibility tree, get element refs, click, fill forms, and evaluate JS. You can split a browser pane next to your terminal and have Claude Code interact with your dev server directly.
Everything is scriptable through the CLI and socket API — create workspaces/tabs, split panes, send keystrokes, open URLs in the browser.
zerocmux keeps the same non-prescriptive model: it is a terminal and browser with a CLI, and the rest is up to you.
zerocmux is a primitive, not a solution. It gives you a terminal, a browser, notifications, workspaces, splits, tabs, and a CLI to control all of it. It does not force you into an opinionated way to use coding agents. What you build with the primitives is yours.
The best developers have always built their own tools. Nobody has figured out the best way to work with agents yet, and the teams building closed products definitely haven't either. The developers closest to their own codebases will figure it out first.
Give a million developers composable primitives and they'll collectively find the most efficient workflows faster than any product team could design top-down.
Most upstream cmux concepts still apply while zerocmux preserves the old cmux
config paths, socket environment variables, and CLI alias as compatibility
shims. New docs and examples should use the zerocmux app and CLI names. Local
reference material lives in docs/ and machine-readable settings
schemas live in docs/data/.
| Shortcut | Action |
|---|---|
| ⌘ N | New workspace |
| ⌘ 1–8 | Jump to workspace 1–8 |
| ⌘ 9 | Jump to last workspace |
| ⌃ ⌘ ] | Next workspace |
| ⌃ ⌘ [ | Previous workspace |
| ⌘ ⇧ W | Close workspace |
| ⌘ ⇧ R | Rename workspace |
| ⌥ ⌘ E | Edit workspace description |
| ⌘ B | Toggle sidebar |
| ⌘ ⇧ E | Focus right sidebar |
| ⌃ 1 / ⌃ 2 / ⌃ 3 | Switch Files / Sessions / Feed when the right sidebar is focused |
| Shortcut | Action |
|---|---|
| ⌘ T | New surface |
| ⌘ ⇧ ] | Next surface |
| ⌘ ⇧ [ | Previous surface |
| ⌃ Tab | Next surface |
| ⌃ ⇧ Tab | Previous surface |
| ⌃ 1–8 | Jump to surface 1–8 |
| ⌃ 9 | Jump to last surface |
| ⌘ W | Close surface |
| Shortcut | Action |
|---|---|
| ⌘ D | Split right |
| ⌘ ⇧ D | Split down |
| ⌥ ⌘ ← → ↑ ↓ | Focus pane directionally |
| ⌘ ⇧ H | Flash focused panel |
Browser developer-tool shortcuts follow Safari defaults and are customizable in Settings → Keyboard Shortcuts.
Command palette navigation shortcuts, including ⌃ P, are also customizable and can be cleared so the keypress reaches the active terminal.
| Shortcut | Action |
|---|---|
| ⌘ ⇧ L | Open browser in split |
| ⌘ L | Focus address bar |
| ⌘ [ | Back |
| ⌘ ] | Forward |
| ⌘ R | Reload page |
| ⌥ ⌘ I | Toggle Developer Tools (Safari default) |
| ⌥ ⌘ C | Show JavaScript Console (Safari default) |
| Shortcut | Action |
|---|---|
| ⌘ I | Show notifications panel |
| ⌘ ⇧ U | Jump to latest unread |
| Shortcut | Action |
|---|---|
| ⌘ F | Find |
| ⌘ G / ⌘ ⇧ G | Find next / previous |
| ⌘ ⇧ F | Hide find bar |
| ⌘ E | Use selection for find |
| Shortcut | Action |
|---|---|
| ⌘ K | Clear scrollback |
| ⌘ C | Copy (with selection) |
| ⌘ V | Paste |
| ⌘ + / ⌘ - | Increase / decrease font size |
| ⌘ 0 | Reset font size |
| Shortcut | Action |
|---|---|
| ⌘ ⇧ N | New window |
| ⌘ ⇧ O | Reopen previous session |
| ⌘ , | Settings |
| ⌘ ⇧ , | Reload configuration |
| ⌘ Q | Quit |
Nightly builds are not published from this fork yet.
Quitting zerocmux saves the current session. On relaunch, zerocmux restores:
- Window/workspace/pane layout
- Working directories
- Terminal scrollback (best effort)
- Browser URL and navigation history
- Saved Claude Code and Codex sessions, when zerocmux has a resume token for the panel
If you need to reapply the last saved snapshot manually, use:
File > Reopen Previous Session⌘ ⇧ Ozerocmux restore-session
zerocmux does not restore arbitrary live terminal process state. tmux, vim, shells, and other tools without a zerocmux resume flow still reopen as normal terminals rather than resuming in-process state.
Open issues and pull requests in this fork. Keep changes scoped and preserve the zero-telemetry guarantee.
zerocmux is independent from the upstream cmux community channels. Upstream cmux links are left in this README only where they document inherited behavior.
zerocmux is open source under GPL-3.0-or-later.






