// compare
mmux vs workmux
Both tools give each parallel agent task its own git worktree. workmux is a CLI that pairs every worktree with a tmux window and treats tmux as the interface; mmux is a TUI of its own (sidebar, main pane, git panel) that runs on a hidden tmux session. The real question is whose interface you want to live in.
Last checked against workmux v0.1.276 on .
// tl;dr
Pick workmux if you already work in tmux (or kitty, WezTerm, Zellij) and want worktree-per-task automation added to that setup, if you want agents sandboxed in containers or VMs, or if you want merge options such as rebase, squash or merging into a branch other than main.
Pick mmux if you want one app per project that holds agents, terminals, dev servers and git without learning tmux, that restores your agents when you reopen it after a quit or crash, that hands the dev server to whichever worktree you start it in, and that sends desktop notifications even over SSH.
Both are free, open source and written in Rust. Each one wants to own worktree creation and cleanup, so in practice you pick one of them per repository.
At a glance
| Capability | mmux | workmux |
|---|---|---|
| Interface | Its own TUI on a hidden tmux session, with its own keys | Your tmux windows (or kitty, WezTerm, Zellij tabs), plus an optional sidebar and popup dashboard |
| Worktree plus agent in one step | yes: w, or mmux worktree new --prompt |
yes: workmux add -A "prompt", branch name generated from the prompt |
| New worktree setup | yes: worktrees.copy list and one setup command |
yes: Copy and symlink lists, post_create hooks, pane layouts |
| Merge and clean up | partly: M merges into the base branch; finished worktrees are removed after idle |
yes: workmux merge with --rebase, --squash, --into |
| Agent status at a glance | yes: Sidebar row colors, read from the terminal, no hooks | yes: Window name icons, sidebar, dashboard; hooks via workmux setup |
| Dev servers | yes: Process rows; one dev stack per repo, so ports stay the same | partly: Commands in tmux panes per worktree; port isolation is a documented recipe |
| Diff review and staging | yes: Git panel with per-file staging, branches, commits | yes: Dashboard diff view with per-hunk staging |
| Agent sandboxing | no: Not offered | yes: Docker, Podman, Apple Container or Lima VM |
| Restore after a crash | yes: Automatic on reopen, also after a quit | yes: workmux resurrect after a tmux or computer crash |
| Desktop notifications | yes: From bells and OSC 9/777, also over SSH | partly: merge --notification; no general agent alert found in the docs |
| Prebuilt binaries | macOS Apple Silicon, Linux arm64 and x86_64 | macOS arm64 and Intel, Linux arm64 and amd64 |
| License | GPLv3, free | MIT, free |
workmux facts from its documentation, README and the v0.1.276 release assets. "Not found in the docs" means we searched its full documentation and changelog and did not find the feature; it is not a confirmed absence.
What is workmux?
workmux, by Raine Virta, describes itself as "git worktrees + tmux windows for zero-friction parallel dev" [1][2]. One command, workmux add, creates a branch, a git worktree and a matching tmux window, copies or symlinks files such as .env and node_modules, runs post-create hooks and lays out your panes; workmux merge merges the branch and removes the worktree, the window and the local branch [1][4]. tmux is the main backend, with kitty, WezTerm and Zellij (experimental) as alternatives [1].
Its stated philosophy is that "tmux is the interface": instead of a separate app, agent status shows up as icons in tmux window names, in an optional sidebar pinned to every tmux window, and in a dashboard you open as a tmux popup [1][5][6][7]. Status comes from hooks that workmux setup installs for Claude Code, OpenCode, Codex, Copilot CLI, Pi, Oh My Pi, Gemini CLI, Grok and Antigravity CLI [5]. It also ships agent skills (/worktree, /coordinator, /merge) and optional sandboxing in containers or Lima VMs [8][9].
workmux is a Rust CLI under the MIT license, installed with a shell script, Homebrew, Cargo, mise or Nix. Version v0.1.276 was released on 2026-10-14 with binaries for macOS and Linux [2][3][10].
Where workmux is better
- Your terminal setup stays yours. workmux adds windows to the tmux session you already use, with your config, key bindings and status line, and it supports kitty, WezTerm and Zellij too [1]. mmux brings its own interface and keys and runs tmux out of sight, so a tuned tmux setup does not carry over.
- Sandboxed agents. workmux can run agents in Docker, Podman or Apple Container, or in a Lima VM, isolated from host secrets such as SSH keys and cloud credentials, and its docs spell out the threat model [9]. mmux has nothing comparable.
- More merge options.
workmux mergecan rebase, squash, merge into a branch other than main, or keep the worktree after merging, and the/mergeskill lets the agent rebase and resolve conflicts itself [4][8]. mmux'sMmerges into the branch the worktree came from. - Pull request and CI status. The workmux sidebar and dashboard can show a branch's pull request number and GitHub check status next to each agent [6][7].
- Hunk-level staging. The dashboard's patch mode stages individual hunks like
git add -p[11]. The mmux git panel stages whole files and directories. - More install paths. Prebuilt binaries for Intel Macs, plus Cargo, mise and Nix with a Home Manager guide [3][10]. mmux ships prebuilt binaries for Apple Silicon Macs and Linux only.
- Monorepo configs. workmux walks up from the current directory to the nearest
.workmux.yaml, so each package in a monorepo can have its own config [12].
Where mmux is better
- No tmux to learn. Type
mmuxin a project and you get a sidebar of agents, terminals and processes, a main pane and a git panel, usable with keys or the mouse, and with a layout for phone-width terminals. The tmux session underneath is created and configured for you. - Restore is automatic. Sessions survive closing the terminal or dropping SSH, and even after a quit, a crash or a restart-to-update, reopening the directory brings back your agents and terminals; Claude, Codex, Pi and Grok resume their conversation. workmux covers crashes with the
workmux resurrectcommand, which you run yourself [13]. - Dev servers are first class. Processes get their own rows with start, stop, restart and an optional
stop:teardown. Only one checkout of a repository runs a given process at a time: starting the dev server in a worktree stops it in the checkout that had it, solocalhost:3000is always the branch you last started it in. - Status without hooks. mmux reads an agent's working and ready state from the terminal itself (progress escapes or the terminal title), so there is nothing to install per agent CLI.
- Notifications over SSH. A bell or an OSC 9/777 notification from any session becomes a native desktop notification, delivered as an escape sequence, so it reaches your local machine when mmux runs on a remote box.
- Worktrees tidy themselves up. A worktree with nothing running, a clean tree and every commit merged or pushed is removed after 30 idle minutes (configurable, or
off); a branch with unmerged, unpushed work is never touched. We did not find an equivalent automatic cleanup in the workmux docs. - Agents can drive the whole session. The control CLI lets an agent read a dev server's output (
mmux read), wait for another agent (mmux wait), ask one a question and get the reply (mmux ask), or commit and merge a worktree (mmux commit --merge).
When to use which
Choose workmux when
- You live in tmux, kitty, WezTerm or Zellij and want worktree automation on top of it
- Agents should run in a container or VM, away from your SSH keys and credentials
- Your team merges with rebase or squash, or stacks branches with
--into - You want PR and CI check status next to each agent
- You are on an Intel Mac or install tools through Nix
Choose mmux when
- You want one window per project without building a tmux setup first
- Dev servers and scripts belong next to the agents, with logs agents can read
- Several worktrees should share one dev stack on the same ports
- You work over SSH and want notifications on your own machine
- You want agents back, mid-conversation, after a quit or crash without running anything
Moving from workmux to mmux
- Finish open workmux worktrees with
workmux merge, or clean them up withworkmux remove. mmux creates its own worktrees under~/.mmux/worktrees/. - Install mmux and run
mmux initin the project. - Carry over your
.workmux.yaml: files you copied or symlinked go intoworktrees.copy(files are copied, directories symlinked), apost_createinstall step becomesworktrees.setup, and dev server panes becomeprocesses. Agents go in~/.mmux/config.yaml. - Run
mmuxand presswfor a new worktree, or start one with an agent from the shell.
# ./mmux.yaml
name: my-project
processes:
- name: Dev server
cmd: npm
args: ["run", "dev"]
worktrees:
copy: [.env, .env.local, node_modules]
setup: pnpm install
mmux worktree new fix-auth --prompt "fix the login bug"
FAQ
What is the main difference between mmux and workmux?
Whose interface you work in. workmux is a CLI that creates a git worktree and a matching tmux window per task, and tmux (or kitty, WezTerm or Zellij) stays your interface. mmux is its own TUI with a sidebar of agents, terminals and dev processes, a main pane and a git panel, running on a hidden tmux session that you never have to configure.
Do I need to know tmux to use workmux or mmux?
workmux is built on the idea that tmux is the interface, so you navigate windows, panes and popups with tmux itself, or with kitty, WezTerm or Zellij as alternative backends. mmux needs tmux installed but keeps it out of sight: you move around with mmux's own sidebar keys and the mouse.
Do agents survive closing the terminal or a crash?
In both, agents keep running when the terminal closes, because they live in tmux. After a tmux or computer crash, workmux resurrect reopens the worktrees that had agents and resumes them. mmux restores its agents and terminals automatically when you reopen the directory, after a quit, a crash or a restart-to-update, and Claude, Codex, Pi and Grok agents resume their conversation.
Can either tool sandbox AI agents?
workmux can run agents in containers (Docker, Podman or Apple Container) or Lima VMs scoped to the worktree, isolated from host secrets such as SSH keys. mmux has no sandboxing; agents run as your user in the project or worktree directory.
Are mmux and workmux free?
Yes. Both are open source and written in Rust. mmux is licensed under GPLv3 and workmux under MIT. Neither project lists a paid tier.
Sources
- workmux documentation: What is workmux?
- workmux repository and README on GitHub (MIT license)
- workmux v0.1.276 release and binaries (2026-10-14)
- workmux documentation: merge command
- workmux documentation: status tracking
- workmux documentation: sidebar
- workmux documentation: dashboard
- workmux documentation: skills
- workmux documentation: sandbox
- workmux documentation: installation
- workmux documentation: patch mode
- workmux documentation: monorepos
- workmux documentation: resurrect command
- mmux documentation (usage, configuration, notifications)
Other comparisons
- mmux vs Agent DeckA Go session manager on tmux with agent status, forks, MCP and skill management and a web UI; mmux works per project, with dev processes and a git panel.
- mmux vs CCManagerA TUI for parallel agent CLIs across worktrees and projects that runs without tmux; mmux keeps agents alive in tmux and adds shells, processes and git.
- mmux vs Claude SquadRuns each agent in its own tmux session and git worktree; mmux creates worktrees on demand and adds dev processes and a git panel.
- mmux vs tmuxThe general-purpose terminal multiplexer mmux itself runs on: panes, windows and full configuration, with no notion of agents.
- mmux vs ZellijA Rust terminal workspace with tiled, floating and stacked panes, layouts, plugins and a web client; mmux trades layout freedom for an agent sidebar.
Try mmux
One binary for macOS, Linux and WSL. Run mmux in any project directory.
curl -fsSL https://mmux.org/install.sh | sh