Migrating from Ghostty to cmux
On this page5 sections ▾
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.
I moved to cmux for its workspace sidebar and embedded browser pane.
#Why cmux
#A sidebar that knows about my work
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.
#Install cmux and reuse the Ghostty config
brew install --cask cmuxcmux 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.
On the first launch, cmux used my Monokai Pro theme and MonaspiceNe font, and opened in ~/Developer/github. I didn't need to copy the config or change the 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:
window-theme = dark
theme = dark:Monokai Pro,light:Monokai Pro Light
font-family = "MonaspiceNe Nerd Font"
font-size = 13
copy-on-select = false
clipboard-trim-trailing-spaces = false
working-directory = /Users/gordonbeeming/Developer/github
window-inherit-working-directory = true
macos-auto-secure-input = true#Workspace 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:
brew uninstall --cask ghosttyI 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.
#Trying it with an existing Ghostty setup
My existing theme, font, and tab-title hook worked in cmux. Keeping the Ghostty config in place also made it easy to switch back if I needed to. The workspace sidebar and browser pane were the additions I wanted, so I kept cmux.