A few weeks ago I migrated my whole terminal stack to Ghostty and then hooked the tab titles to git repo names so I could tell my Claude Code panels apart. Ghostty has been good. Fast, clean, no AI panel chrome creeping in.
So why move again? Two things cmux does that Ghostty doesn't.
#Why cmux
cmux puts a vertical tab strip down the left edge, and each entry shows the git branch, the linked PR number and status, the working directory, and any ports the workspace is listening on. With four or five repos open across an afternoon, that sidebar is the project switcher I've been faking with tab titles for months.
#An embedded browser pane
This is the one I really wanted. When I'm reviewing a PR or stepping through a Plannotator plan, I want the page next to the terminal that produced it, not on a separate monitor in a different app. cmux ships a Chromium-based browser pane that splits like any other terminal pane. Open the PR, scroll on one side, type on the other.
That was enough to make me try it. The thing I didn't expect was how cheap "trying it" was.
#The "migration"
That's the whole thing.
cmux is built on libghostty, the same terminal engine Ghostty itself uses, and it reads my existing ~/.config/ghostty/config directly. Theme, font, and working directory all carried over without me touching a file.
I launched it, my Monokai Pro theme was already on, MonaspiceNe was already the font, the first window opened in ~/Developer/github. Done. No copy-paste, no symlink, no cmux.json, no rewrite of keybindings.
cmux also defaults macos-auto-secure-input to true, so Secure Keyboard Entry kicks in automatically at password prompts without any extra setup. Here's the entire config cmux is reading:
#What I'm getting that I wasn't before
Each workspace shows me the branch I'm on and the PR number and state for that branch. Glancing at the sidebar tells me which repo has a PR in review, which one has a draft, and which one I haven't pushed yet. I used to keep a GitHub tab open just to know that. Now it's two pixels to the left of my terminal.
#The browser pane
I split a workspace horizontally (terminal on the left, browser on the right) and point the browser at the PR. When the AI coding client in the terminal pane finishes a change, I refresh the diff on the right and review it without leaving the workspace. Same flow for plan review with Plannotator: the plan renders next to the agent that's about to execute it, and I'm reading both in the same window.
#Notifications
cmux picks up the OSC 9 / 99 / 777 sequences that agents emit and surfaces them in the sidebar entry for the workspace that fired them. So if a long-running task in the xylem workspace finishes while I'm in the copilot_here workspace, the xylem entry blinks at me. Whichever AI coding client you use (Claude Code, Codex, OpenCode, Aider, Copilot CLI), you can wire it through cmux notify to plug into this.
#Cleanup
Once I'd had a day with it and confirmed nothing was missing, removing the old terminal was a one-liner:
I left ~/.config/ghostty/config exactly where it was. cmux still reads it, and if I ever want to fall back to Ghostty I just brew install --cask ghostty again and everything snaps back into place.
The .zshrc tab-title hook stays put for the same reason. It's terminal-agnostic, just an escape sequence.
#What I'd tell you
If you're already on Ghostty and even mildly curious about the workspaces or the browser pane, the cost to try cmux is roughly zero. Your theme and font and tab titles all carry over the first time you launch, and if you don't like it you can drop back to Ghostty without losing any config.
Most stack swaps cost me an afternoon. This one cost me about as long as it took to drag a browser pane next to a terminal pane.
![]()
Gordon Beeming
Father • Husband • Triathlete • SSW Solution Architect

Comments
Nothing yet. Say the first thing.
Sign in to join the conversation.