A June post covered getting cmux set up so agent panes survive a reboot. Since then the setup has been running continuously, and three things went wrong that were worth filing (#30, #31, #32). Here is what held up and what did not.
How teammate tabs actually work
cmux claude-teams gives each teammate its own watchable cmux tab by impersonating tmux. It drops a shim at ~/.cmuxterm/claude-teams-bin/tmux:
#!/usr/bin/env bashexec "${CMUX_CLAUDE_TEAMS_CMUX_BIN:-cmux}" __tmux-compat "$@"
and sets $TMUX to a synthetic socket path. No tmux server exists anywhere. Claude Code thinks it is talking to tmux; cmux answers, and each new-window becomes a tab.
It works well. tmux -V returns tmux 3.4, and tmux list-windows enumerates your cmux workspaces:
0 m&a1 voitta2 agent-teams3 debedb
The catch is that the whole thing rests on PATH resolution, in two places.
Hop one: which tmux wins
If the launching process resolves tmux to real Homebrew tmux instead of the shim, real tmux tries to connect to a socket that was never a socket, and teammate spawn breaks outright.
On this machine Homebrew sat at PATH position 11 and the shim at 26. Both sources pushing it there were self-inflicted: my own cmux.json command re-prepended /opt/homebrew/bin, and so did .bash_profile. The fix is to prepend the shim directory in the workspace command.
Worth noting for anyone copying the June post: on cmux 0.64.16 cmux claude-teams now puts the shim at position 1 itself. The cmux.json prepend is belt-and-braces today, not the load-bearing fix. Which matters, because it is not what was actually broken.
Hop two: the shim’s own cmux
Look at the shim again. It execs bare cmux. And the cmux binary lives at /Applications/cmux.app/Contents/Resources/bin/cmux, which is not on a normal login shell’s PATH:
$ env -i HOME=$HOME /bin/bash -lc 'command -v cmux'$
So winning hop one buys you nothing if hop two loses:
$ env -i HOME=$HOME /bin/bash -lc \ 'export PATH="$HOME/.cmuxterm/claude-teams-bin:$PATH"; tmux -V'/Users/gregory/.cmuxterm/claude-teams-bin/tmux: line 3: exec: cmux: not found
One symlink fixes it:
ln -s /Applications/cmux.app/Contents/Resources/bin/cmux ~/.local/bin/cmux
$ env -i HOME=$HOME /bin/bash -lc \ 'export PATH="$HOME/.cmuxterm/claude-teams-bin:$PATH"; tmux -V'tmux 3.4
I had filed that symlink as an ergonomics nit — scripts otherwise need CMUX="${CMUX_BUNDLED_CLI_PATH:-/Applications/…/cmux}". It was not a nit. A shim on PATH whose own dependency is off PATH fails in a way that reads as a tmux problem.
The diagnostic that saved the most time
A queued teammate and a shadowed shim look identical from outside: the pane sits there, nothing tabs. They are distinguished by one check.
If ps shows no __tmux-compat process ever appeared, the spawn never reached tmux, so PATH is not your problem. In my case the launcher pane was in manual mode on and the teammate sat at ◯ indefinitely, having called nothing at all. I would have spent the evening on PATH.
The other habit worth keeping: read the live process environment, not the shell’s.
ps -Eww -o command= -p <pid> | tr ' ' '\n' | grep -E '^(TMUX|PATH)='
A pane’s shell will happily report a PATH the long-running agent inside it never saw.
What about reboot survival?
That part held. Across a real reboot on 0.64.16, all 7 panes came back on their exact resume commands, none silently dropped — including a teams-named pane, which now carries an agent-hook resume binding it did not have before.
One caveat the June post did not mention: identity is not preserved. Comparing session-com.cmuxterm.app-previous.json against the live session file, workspaceId and panel id share zero values across a restart. Restore recreates everything by replaying resume bindings. That is the mechanism behind rescued tabs landing on Claude Code’s “is this a project you trust?” prompt — folder trust was scoped to a workspace id that no longer exists.
If you go diffing those files yourself, the identity key is workspaceId, not id. Key on id and every workspace collapses to None, which reads as “ids are stable” — precisely backwards. I made that mistake on the first pass.
Net
Two config lines, both one-time:
ln -s /Applications/cmux.app/Contents/Resources/bin/cmux ~/.local/bin/cmux# and in cmux.json's teams command:export PATH="$HOME/.cmuxterm/claude-teams-bin:$PATH"
The setup from June is still the setup. What eroded was the environment around it — which is the recurring theme with long-lived agent sessions: nothing breaks, things merely get reordered underneath you.