All posts

Do You Still Need tmux for AI Agents on a Mac? (2026)

·Terminal Candy ·6 min read

tmuxclaude-codeworkflowmacosagents

I ran tmux for nine years. I stopped about six months ago, and I want to be precise about why, because most of the "you don't need tmux anymore" takes are wrong in the same way.

The claim usually goes: modern terminals have tabs and splits, so the multiplexer is redundant. That is not the argument. Tabs were never why anyone used tmux.

What tmux is actually for

Three things, and only one of them has been replaced.

Persistence. The session outlives the client. Close the terminal, lose the SSH connection, reboot the laptop lid onto a train — the processes keep running and you reattach. Nothing in a terminal emulator does this, because the emulator is the thing that died.

Remote. You run tmux on the far end. The layout, the scrollback, and the running processes live on the server. Your local terminal is a dumb pipe.

Layout as a saved artifact. A named session with four panes in a specific arrangement, recreated by a script, identical every time.

Tabs and splits — the part terminals did replace — were always the least interesting feature.

What changed with agents

Here is the shift nobody planned for: coding agents are long-running foreground processes that produce a lot of output and occasionally need you.

That is exactly the workload tmux was built for, and it is also exactly the workload where tmux quietly hurts.

Scrollback becomes a second-class citizen. Inside tmux you are in tmux's copy mode, not your terminal's. Your terminal's find, its selection, its click-to-open-file-path, its GPU-accelerated smooth scroll — you gave all of those up. On a 40,000 line agent transcript, that matters more than it used to. Agent output is something you actually re-read.

Mouse reporting fights everyone. Claude Code, Aider, and most modern TUIs want the mouse. tmux wants the mouse. Your terminal wants the mouse. With set -g mouse on, dragging to select text inside an agent session gives you tmux's selection, or the agent's, and rarely the one you meant. Turn it off and you lose pane resizing by drag. There is no configuration that makes all three happy, only a choice about which one loses.

Notifications get swallowed. Terminal-level agent detection — the thing that tells you Claude Code has stopped and is waiting — generally works by watching the process tree and output of a session. Wrap everything in one tmux server and you have one process tree with N agents inside it. Some tools cope. Many report "an agent finished" without being able to say which pane. tmux has monitor-activity and bell-on-alert, but those fire on any output, and agents produce output constantly while thinking. You get an alert every two seconds, which is the same as no alerts.

Colors need a second config. Your careful theme is now filtered through tmux's default-terminal and terminal-overrides. Get tmux-256color wrong and truecolor silently degrades to 256 colors, and you spend an evening blaming your terminal. This is the single most common "my theme looks wrong" cause I see, and it is covered further in the best Claude Code themes.

None of this is tmux being bad. It is a 2007 tool doing exactly what it promised, being asked to sit between two things that both now want direct control of the terminal.

The honest decision tree

Keep tmux if you SSH into anything. This is not close. Remote persistence has no local substitute. If your agent runs on a dev box, a GPU instance, or a customer's server, run tmux there and stop reading.

Keep tmux if your work must survive a disconnect. Long migrations, multi-hour training runs, anything where "the laptop slept" is a real risk.

Keep tmux if you drive it entirely by keyboard and already have muscle memory. Nine years of prefix-c is a real asset. Do not throw it away for aesthetics.

Drop tmux if you are local-only on one Mac, running agents, and mostly reaching for it out of habit. That was me. My sessions were local, my machine does not reboot unexpectedly, and every actual benefit I was getting had moved into the terminal.

If you drop it, replace the parts you used

The mistake is going cold turkey and then missing three specific things.

Persistence for local work → just do not close the window. Genuinely. On a Mac that stays awake, a terminal window with a running process is as durable as a tmux session, and macOS's own resume brings windows back. If you need a process to survive the terminal, that process wants launchd or nohup, not a multiplexer.

Layouts → a shell function. Whatever tmuxinator config you had is usually four cd commands and a couple of splits. Most terminals can open a window with a layout from the CLI or a saved arrangement. Mine is a function that opens three sessions in three directories and starts one agent.

Named session switching → your terminal's session picker. This is the one people miss most, and it is the reason "just use tabs" fails past about eight tabs. prefix-s giving you a searchable list of named sessions is a real feature. If your terminal has no equivalent, you will feel it. If it does, you will not.

Per-pane identity → visual difference. In tmux every pane looks the same and you rely on position. Outside it, give each session a different look — that is the whole argument in skin your AI agent, and it is a straight upgrade over remembering that the bottom-left pane is the one running tests.

The hybrid that actually works

I did not fully quit. I run tmux only on remote machines, never locally, and my local terminal never nests inside one.

That single rule fixed everything. Locally: native scrollback, native selection, per-session agent alerts that name the session, one place where colors are configured. Remotely: full persistence, because that is where it earns its keep.

The one piece of config worth keeping either way, so a nested session cannot silently happen:

# in ~/.zshrc — refuse to nest
if [[ -n "$TMUX" ]]; then
  export TMUX_NESTED=1
fi

And on the remote side, so your local theme survives the trip:

# ~/.tmux.conf on the server
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",*256col*:Tc"
set -g mouse off

mouse off is deliberate. On a remote box you are almost certainly running an agent or an editor that wants the mouse more than tmux does.

Where I landed

tmux is not obsolete. It got narrower. It is now a remote-persistence tool that happens to also do panes, rather than the default wrapper around all terminal work.

If you are running agents locally on a Mac, the multiplexer is now sitting between you and the two things you care about most — readable scrollback and knowing when an agent needs you. That is a bad place for a middleman.

For the rest of the local setup — fonts, alerts, per-agent themes — the best terminal for Claude Code on Mac covers the whole stack.

Terminal Candy is a native macOS terminal built for exactly this: real scrollback, per-session skins, and agent detection that names the session that needs you. Apple Silicon, no Electron, $10 once with a 14 day trial. Try it.

Keep reading