The tmux vs cmux debate, with herdr now firmly in the mix, is really a debate about what a terminal multiplexer is for in 2026. For nineteen years the answer was simple: keep shells alive across disconnects and tile them on one screen. Then developers started running three, five, or ten AI coding agents at once, and the question changed to which of those agents is waiting on me right now. tmux 3.7c, released August 17, 2026, is still the incumbent that every server has. cmux, a native macOS terminal built on libghostty by Manaflow, reached 26,000 GitHub stars in seven months by answering the agent question with a sidebar and notifications. herdr, a single Rust binary that runs inside whatever terminal you already have, reached 33,000 stars in five months and was just adopted as a default in Omarchy Quattro. We run tmux on every host in our fleet at Petronella Technology Group, Inc., we run more coding agents in parallel than we would like to admit, and we evaluated cmux and herdr from their documentation, source, release notes, and issue trackers for this comparison. Every claim below is tied to a primary source at the end.
Short version: tmux remains the right answer for servers, SSH, and anything you have to script or audit. cmux is the best experience if you live on a Mac and want a native GUI that knows what your agents are doing. herdr is the most interesting of the three, because it gives you agent state, worktrees, and orchestration on Linux, macOS, and Windows without leaving the terminal, at the cost of being five months old. The rest of this guide explains what each one actually does, where each one is weak, and what a security-conscious team should check before rolling any of them out.
The Three Contenders
tmux is a terminal multiplexer written in C, ISC licensed, authored and maintained by Nicholas Marriott since 2007. Its model is a server that manages sessions, sessions that contain windows, and windows that contain panes, each pane a pseudo-terminal. Multiple clients can attach to the same session. Detach with the prefix key and d, reattach with tmux attach. The project has about 48,900 GitHub stars and officially supports OpenBSD, FreeBSD, NetBSD, Linux, macOS, and Solaris. Our tmux configuration guide covers the config we use across the fleet.
cmux is an open source, Ghostty-based macOS terminal with vertical tabs and notifications for AI coding agents, built by Manaflow, Inc., a three-person Y Combinator company founded by Lawrence Chen and Austin Wang. It is a native Swift and AppKit application that uses libghostty as a rendering library, and the README is explicit that it is not a fork of Ghostty. The repository was created January 28, 2026, the latest stable release is v0.64.22 from August 3, 2026, and the license is GPL-3.0-or-later with commercial terms available. It requires macOS 14 or later. Linux and Windows are not supported, and the Linux request, issue 330, remains open. We wrote a standalone Cmux explainer earlier this year that covers the regulated-team angle in more depth.
herdr calls itself the runtime your coding agents live on. It is a single Rust binary that runs as a background server with a TUI client built on Ratatui, so it works inside any terminal emulator. Created by Can Celik and first tagged March 27, 2026, it is Apache-2.0 licensed after a relicense from AGPL in July, ships every week or two, and stands at v0.8.2 from August 19, 2026. The company, Herdr, Inc., joined Y Combinator in August and has said the runtime stays free and open while the features it builds on top, connecting multiple clients, VPS hosts, and sandboxes, are where the business will be. Windows support became generally available in v0.8.2. Omarchy Quattro, the Arch-based distribution we compared in our Omarchy Quattro vs NixOS guide, now ships herdr alongside tmux.
One disambiguation note, because search results are messy here. There are at least three unrelated projects called cmux: the GSM 07.10 serial multiplexer tools, a shell helper named cmux that wraps Claude Code worktrees, and a Windows terminal called cmux-windows. This article is about Manaflow's cmux only.
tmux vs cmux: Architecture and Platform
The single biggest difference is not features. It is where the program lives.
tmux and herdr are terminal-side. They run inside your terminal emulator, whether that is Ghostty, Kitty, Alacritty, Windows Terminal, or a raw console over SSH. That means they work everywhere, including on the server you are logged into, and they inherit whatever rendering, fonts, and protocol support the outer terminal provides. It also means they must re-implement a screen model in the middle, which is the source of most tmux complaints about colors, scrollback, and graphics.
cmux is the terminal emulator. There is no middle layer. libghostty does the rendering with GPU acceleration, cmux draws the sidebar, splits, and browser panes natively, and the result is the smoothest experience of the three. The cost is portability: the native cmux app exists on macOS 14 and later only. Manaflow also ships a separate Rust product, cmux TUI, for macOS, Linux, and Windows, installable with npx cmux, which is a terminal-side multiplexer without the GUI sidebar, GPU renderer, or embedded browser; this article compares the macOS app. The docs describe an iOS companion app in TestFlight, and a phase-one cross-platform platform module with Linux CI was merged in July, but as of this writing there is no Linux or Windows build of the app itself. If your workstation runs Linux, as ours do, the cmux app is not a candidate, and that alone settles the tmux vs cmux question for a large share of readers.
herdr splits the difference. It is a TUI, so it renders inside your terminal, but it was written in 2026 with the kitty graphics protocol and mouse-first interaction in mind. The v0.8.0 release fixed kitty graphics staying visible during host repaints, which tmux still does not render at all. The prefix key is Ctrl+b, the same as tmux, and the config lives in ~/.config/herdr/config.toml.
Version and maturity matter here. tmux 3.7, released June 26, 2026, added floating panes, line numbers in copy mode, progress-bar forwarding to the outer terminal, and control-mode hang fixes, and 3.7c is the third bug-fix release since. That is a project with two decades of edge cases handled. cmux has shipped 51 stable releases since February and carries roughly 1,800 open issues and 2,800 open pull requests. herdr is at 0.8. Neither newcomer is unstable in our reading of the trackers, but both are moving fast, and a team that values a quiet tool should weight that.
Persistence, Detach, and What Survives a Reboot
This is the classic multiplexer job, and the three answer it differently.
tmux keeps sessions alive in its server process until the server dies. Detach, close the terminal, come back tomorrow, and the shell and whatever was running in it are still there. A reboot kills the server, and restoring layouts across reboots is a plugin job: tmux-resurrect saves and restores sessions, windows, panes, working directories, and running programs, and tmux-continuum saves continuously and restores automatically at startup. Both are widely used, both are MIT, and both had their last commits in August 2024.
herdr uses the same background-server model and is candid about the boundaries. Detaching keeps processes running. A server restart or reboot loses the processes but restores the layout from a snapshot, optionally replays pane history, and natively resumes supported agents such as Claude Code and Codex through their own resume mechanisms. Pane history replay is off by default, and the documentation gives the reason plainly: security concerns about storing secrets. We appreciate a project that turns a convenience off for that reason.
cmux restores window, workspace, and pane layout, working directories, scrollback on a best-effort basis, and browser history, and resumes agents through hooks installed by cmux hooks setup. The docs state that cmux does not checkpoint arbitrary live process state. Sensitive environment keys are dropped from stored resume commands, and only trusted bindings auto-run. In practice, if you close cmux, your shells are gone and your agents come back through resume, which is a different contract from a tmux session that never stopped.
If you need a process to keep running while you are disconnected, tmux and herdr do that. cmux does not, unless the process is on a remote host under a remote tmux, which brings us to SSH.
Remote and SSH Workflows
tmux on the remote host is the standard here and needs no explanation. What is worth knowing is how the other two relate to it.
cmux's own documentation says lots of people happily run cmux with SSH and tmux together. cmux ssh user@host uploads a versioned helper binary to the remote at ~/.cmux/bin/cmuxd-remote/ on first connection, browser panes can route through the remote network, and a Mosh transport is available for Mosh 1.4 or later. cmux can also attach to remote tmux sessions natively through a bridge, labeled beta, that requires tmux 3.2 or newer on the host and uses control mode over SSH ControlMaster. That is a genuinely good design: the persistence lives in tmux on the server, and the agent-aware GUI lives in cmux on the laptop. It is also one more binary you are placing on every server you touch, which a change-controlled environment should notice.
herdr runs the client locally as a thin client over SSH with herdr --remote host, which lets it bridge local desktop features such as image clipboard paste into the remote session. Since v0.8.2 a Windows machine can act as a client to a Linux or macOS server, but Windows cannot be a herdr remote host, and direct terminal attach is Unix-only.
For iTerm2 users, tmux's control mode, tmux -CC, has for years shown every tmux window as a native tab with no prefix keys. The Claude Code agent-teams documentation still names tmux -CC in iTerm2 as the suggested entry point for split-pane mode, which tells you how central tmux remains to agent tooling.
Agent Awareness: Notifications, State, and Orchestration
This is the axis the two newcomers were built for, and it is where tmux is weakest.
tmux has no concept of an agent. It has windows, panes, hooks, and formats. You can get notifications out of a Claude Code session running inside tmux, but only if you set allow-passthrough on, extended-keys on, and the extkeys terminal feature in your config; the Claude Code terminal documentation warns that without those lines Shift+Enter submits instead of inserting a newline and desktop notifications and the progress bar never reach the outer terminal. Anyone who has wondered why their agent went quiet inside tmux has hit this. Once configured, tmux is a perfectly good place to run agents, which is why we do.
cmux treats an agent finishing as a first-class event. Notifications arrive as rings around panes, unread badges in the sidebar, a notification popover, and a macOS desktop notification, triggered by OSC 9, 99, or 777 sequences or by cmux notify from the CLI. Cmd+Shift+U jumps to the most recent unread. Desktop alerts are suppressed when the cmux window is focused and the sending workspace is active, which is the small detail that makes this usable. Claude Code integration is a hook script on Stop and PostToolUse calling the CLI. The sidebar shows git branch, linked PR status, working directory, listening ports, and the latest notification text per workspace, and the suggested pattern is one workspace per repository. cmux also ships a claude-teams mode that writes a fake tmux shim and sets the TMUX variables so Claude Code's experimental agent teams land in native cmux splits without real tmux installed.
herdr goes a step further from notification to state. Every agent pane is classified as blocked, working, done, idle, or unknown. Detection looks at the foreground process first, then at either integration lifecycle hooks or TOML manifests matched against the live terminal buffer, and the docs say herdr only marks a pane blocked when the visible bottom of the buffer matches a known approval, question, or permission prompt. It detects Claude Code, Codex, Cursor Agent, OpenCode, Copilot CLI, Gemini CLI, Pi, Qwen Code, Hermes, and more, with native session restore for 17 or more agents. Beyond notifications, herdr exposes herdr agent prompt, herdr agent wait, and herdr agent read, which means one agent, or a script, can drive another. Git worktrees are built in: herdr worktree create makes a checkout, opens it as a workspace, and groups it with the parent repository. If your workflow is one agent per worktree, herdr is the only one of the three that models that natively.
How much does any of this matter? The JetBrains Developer Ecosystem Survey 2026, covering more than 15,000 professional developers, found 90 percent using AI coding agents at work at least weekly and 68 percent daily, with Claude Code the most used agent at 39 percent. Nothing in that survey measures how many agents run in parallel, and we did not find a credible source that does, so we will not put a number on it. What we can say from our own fleet is that once you run more than two agents at a time, knowing which one is blocked on a permission prompt is the difference between throughput and babysitting.
tmux vs cmux vs herdr: Scripting and Automation APIs
All three are scriptable. The shape of the API differs.
tmux is driven by its own command language. send-keys types into a pane, control mode with -C or -CC turns tmux into a machine-readable protocol, hooks fire on events, and formats let you query almost any state. It is the reason tmux shows up inside so many other tools, including the remote bridge in cmux and the agent-teams feature in Claude Code. There is no JSON API, and there is no notion of an agent, so anything semantic you build on top is parsing screen text.
cmux exposes a JSON-RPC Unix socket at /tmp/cmux.sock and a CLI symlinked from the app bundle. Methods include listing and creating workspaces, splits, and panels, sending text and keys, notifications, status and progress, and an embedded browser automation API ported from agent-browser that can snapshot an accessibility tree, click, fill, evaluate JavaScript, and read console and network output. Terminal processes inherit workspace and surface identifiers in environment variables so scripts know where they are.
herdr uses newline-delimited JSON over a Unix domain socket at ~/.config/herdr/herdr.sock, or a named pipe on Windows, with methods for workspaces, tabs, panes, agents, event subscriptions, and plugins. The CLI mirrors it with server, session, workspace, worktree, tab, pane, agent, integration, and plugin groups, and herdr --skill emits instructions an agent can read to operate herdr itself. A plugin marketplace of GitHub-hosted manifests sits on top.
The gap for a security team is authentication. The herdr socket API documentation describes no authentication mechanism; the socket is a plain Unix domain socket under the user's config directory, so access is governed by file permissions alone. cmux offers three socket access modes, off, cmux processes only, and allow all, with the default limiting connections to processes spawned inside cmux terminals, and the docs recommend off or the default on shared machines. tmux's server socket has always relied on Unix permissions as well. None of this is unusual for a local developer tool, but if an agent can reach the socket, an agent can drive every other agent on the box, and that is a privilege boundary worth naming in your threat model. We covered the broader version of this problem in securing autonomous agents in the enterprise.
Security and Privacy Posture
We look at four things for any developer tool that touches every shell: what it phones home, what it auto-updates, what privileges it asks for, and what it stores.
tmux phones home to nothing, has no auto-update, asks for no special privileges, and stores what you tell it to. allow-passthrough is off by default. It is the easiest of the three to approve, and that is not a small thing in a change-controlled environment.
cmux ships with Sentry crash reporting and PostHog analytics enabled by default. A Send anonymous telemetry toggle was added in February 2026 and takes effect on the next launch, so an opt-out exists and should be part of your rollout checklist. Updates arrive through Sparkle, or through Homebrew if you install the cask. Two open items deserve a read before deployment. An open pull request, PR 1251, documents that the app carries the cs.disable-library-validation entitlement, which disables dynamic library signature checks, until the Ghostty framework is signed with a Developer ID certificate, along with the unsigned-executable-memory and JIT entitlements the renderer needs. Issue 7465 reports that zsh sessions are launched through a /bin/bash trampoline, which causes macOS privacy prompts to attribute to bash and nudges users toward granting Full Disk Access to /bin/bash. Neither is malicious, but neither had a maintainer response as of this writing, and a macOS endpoint policy that pins entitlements or TCC grants will trip on them. Our endpoint security guide covers how to reason about that class of exception.
herdr has no analytics telemetry that we could find in its README or documentation. It does make network calls by default: a user reported in June that herdr resolved herdr.dev every 30 minutes and fetched remote agent-detection manifests, and the maintainer added a configuration option to disable update checks the same day. The config reference documents an update channel used by background version checks. So the accurate statement is that herdr performs periodic update and manifest checks that you can turn off, not that it is silent. Pane-history replay is off by default because of secrets, the socket relies on file permissions, and the install path is the familiar curl-pipe-shell or a Homebrew core formula, with Nix builds available for people who want reproducibility.
For a team subject to a framework, the practical guidance is the same for all three: treat the multiplexer's socket as a control plane for every agent on the machine, restrict who can reach it, and keep agents that touch regulated data on infrastructure you control. Our private AI inference guide explains how we keep the model side on-premise so the terminal choice does not become a data-flow decision.
Rendering, Graphics, and Terminal Protocols
tmux's oldest weakness is that it sits between an application and the terminal. The Kitty terminal's FAQ goes as far as saying terminal multiplexers are a bad idea and lists what tmux breaks: images in Neovim and ranger, styled underlines, desktop notifications, the extended keyboard protocol, file transfer, and shell integration. Some of that has improved. tmux 3.6 added saving and restoring images in the alternate screen and forwards the OSC 4 palette; 3.7 forwards progress bars and added floating panes. But tmux does not render the kitty graphics protocol, and applications that emit raw kitty graphics inside tmux do not get them rendered unless they use tmux's passthrough sequence, which is what the allow-passthrough option enables. If you rely on inline images, that is a real limit, and our Kitty guide goes into the workarounds.
cmux inherits Ghostty's renderer, so anything current Ghostty draws, cmux draws, since it tracks a fork of Ghostty main, and it reads ~/.config/ghostty/config for themes, fonts, and colors. If you already run Ghostty, your look carries over.
herdr renders through Ratatui inside your emulator and passes kitty graphics through, so with a capable outer terminal you keep images. Mouse click, drag, and split are first-class rather than an option you turn on.
Zellij belongs in this paragraph for completeness. It is the other modern Rust multiplexer, at v0.45.1 as of August 28, 2026 with about 35,000 stars, and its 0.45 release added nested sessions, the kitty graphics protocol, and a mobile web UI. Its session resurrection saves layout and commands but does not preserve running processes, which is the same contract as herdr after a reboot. We compared it to tmux at length in our Zellij vs tmux guide; it has no agent-state model, which is why it is not one of the three here.
Which One Should You Use
Choose tmux if:
- You work on servers, over SSH, or on anything that is not a Mac.
- You need processes to survive disconnects without a resume dance.
- Your environment is change-controlled and a tool with no telemetry, no auto-update, and no entitlements is easier to approve.
- You want the tool every other tool already integrates with.
- You are fine adding three config lines so agent notifications pass through.
Choose cmux if:
- You are on macOS 14 or later and want a native, GPU-rendered GUI rather than a TUI.
- You want agent notifications, per-workspace git and PR status, and an embedded browser without any plugins.
- You are comfortable turning off telemetry and reviewing the two open entitlement and TCC issues with whoever owns your endpoint policy.
- You are happy to keep tmux on your servers and use cmux's bridge to reach it.
Choose herdr if:
- You run many agents in parallel and want blocked, working, done, and idle state instead of a bell.
- You want git worktree workspaces and agent-to-agent orchestration built in.
- You need one tool across Linux, macOS, and Windows, inside the terminal you already like.
- You accept a 0.8 release cadence and will disable the background update checks if your policy requires it.
Our own verdict for the tmux vs cmux vs herdr question, as a Linux-first shop: tmux everywhere by default, herdr on the workstations where the agent count justifies it, and cmux on the Macs of people who want it, with telemetry off. That is a boring answer, and boring is what we want from the thing that holds every shell.
How We Run Agents at Petronella Technology Group, Inc.
Every host in our fleet has tmux, and every long-running job, from model serving to overnight content pipelines, lives in a tmux or Zellij session so it survives a compositor crash or a dropped VPN. Our workstations are Linux, which rules cmux out for us today; we have one Mac in the lab where it would be a fair candidate. We run Claude Code, OpenCode, goose, and Hermes agents against on-fleet models, sometimes five or six at a time, and the babysitting problem this article describes is real for us. We evaluated herdr and cmux for this piece from their source, documentation, release notes, and issue trackers rather than from months of daily use, and we have said so wherever it matters. The security observations above come from reading the projects' own issues, not from a penetration test, and we would run one before approving either tool for a client environment. If you are wiring agents into a workstation for the first time, start with our Claude Code CLI guide and our guide to keeping coding agents safe.
FAQ
Is cmux a replacement for tmux?
Not on the server side. cmux is a macOS terminal emulator with agent-aware workspaces; it does not keep processes alive when it closes, and its own documentation describes running cmux with SSH and tmux together, including a native bridge to remote tmux sessions. On a Mac laptop it can replace a local tmux for tiling and notifications. On any server, and on any Linux or Windows machine, the app is not an option; cmux TUI is the closest Manaflow alternative there.
Does cmux run on Linux or Windows?
The native app does not. cmux requires macOS 14 or later on Apple Silicon or Intel. The Linux support request, issue 330, has been open since February 2026 with active discussion, and a phase-one platform module with Linux CI was merged in July, but there is no shipping Linux or Windows build of the app. Manaflow does publish a separate command-line product, cmux TUI, for macOS, Linux, and Windows, without the GUI. The Windows project called cmux-windows is unrelated.
What is herdr and how is it different from tmux?
herdr is a Rust terminal workspace manager for AI coding agents. Like tmux it is a background server plus a client inside your terminal, uses Ctrl+b as its prefix, and lets you detach and reattach. Unlike tmux it classifies every agent pane as blocked, working, done, idle, or unknown, restores supported agents natively after a restart, builds git worktrees into workspaces, and exposes a JSON socket API with agent prompt and wait methods. It is at version 0.8.2 and Apache-2.0 licensed.
Does tmux support the kitty graphics protocol?
No. tmux does not render kitty graphics; raw kitty image sequences inside tmux are filtered unless the application wraps them in DCS passthrough. A proof-of-concept was discussed in tmux issue 4902, closed in August 2026 in favour of pull request 5445, which remains open, and no released version renders them. herdr and Zellij 0.45 do pass kitty graphics through.
Why do Claude Code notifications not work inside tmux?
Because tmux blocks the escape sequences by default. Claude Code's terminal documentation says to add set -g allow-passthrough on, set -s extended-keys on, and set -as terminal-features 'xterm*:extkeys' to your tmux configuration; without them, desktop notifications and the progress bar never reach the outer terminal and Shift+Enter submits instead of inserting a newline. Claude Code also only sends desktop notifications by default in Ghostty, Kitty, and iTerm2.
Is cmux free?
Yes. The README states cmux is free, open source, and always will be, under GPL-3.0-or-later after a relicense from AGPL in March 2026. A paid Founder's Edition offers prioritized requests and early access to planned features, but no price is published in the repository or on the site, so we do not quote one.
Which one sends data off my machine?
tmux sends nothing. cmux enables Sentry crash reporting and PostHog analytics by default with a toggle to turn them off, and auto-updates through Sparkle. herdr has no analytics we could find but checks herdr.dev for updates and agent-detection manifests in the background by default, which can be disabled in its configuration.
Should regulated teams standardize on one of these?
Standardize on tmux for servers and anything inside a compliance boundary, because it is the easiest to justify and audit. Evaluate herdr or cmux for developer workstations outside the boundary, with telemetry and update checks configured to policy and the local socket treated as a control plane for every agent on the machine. Keep the models the agents talk to on infrastructure you control.
Need Help Running AI Agents Safely?
Petronella Technology Group, Inc. builds private AI workstations and inference clusters, hardens the endpoints developers run agents on, and maps the whole stack to the framework you are assessed against. If your team is scaling from one coding agent to many and the terminal is where that scaling hurts, start with our private AI services or talk to our engineering team.
Sources and Further Reading
- tmux repository and README, tmux releases, tmux CHANGES, tmux manual page, tmux Installing wiki
- TPM, tmux-resurrect, tmux-continuum
- tmux issue 4902, kitty graphics and Kitty FAQ
- cmux repository and README, cmux getting started, cmux TUI, cmux API, cmux SSH, cmux remote tmux, cmux session restore, cmux notifications, cmux Claude Code teams
- cmux PR 610, telemetry toggle, PR 1251, entitlements, issue 7465, bash trampoline, issue 330, Linux support
- Manaflow on Y Combinator
- herdr repository, herdr releases, herdr concepts, herdr agents, herdr session state, herdr persistence and remote, herdr CLI reference, herdr socket API, herdr config reference
- herdr issue 677, background network checks and Herdr is joining Y Combinator
- Omarchy v4.0.0 release notes
- Claude Code terminal configuration, Claude Code agent teams, Claude Code worktrees
- iTerm2 tmux integration
- Ghostty release notes and About Ghostty and libghostty
- Zellij releases and Zellij session resurrection
- JetBrains Developer Ecosystem Survey 2026, AI coding agent adoption
Free, practical, and specific to regulated environments. We will email it to you.
No spam. Unsubscribe anytime.