Would love to hear what other features have been particularly beneficial to your dev style too. Some directions I'm interested in is having everything be programmable; so my coding agent can set up workspaces for me, click through browsers to test things, etc. And having a main Claude Code manage subagents that have their own easily visible terminal windows.
I went the similar path of going vertical tabs after having worked that way in iTerm2 for months. Here's what I currently have:
Project-based organization -- Group sessions by working directory with a visual icon strip sidebar.
Multiple session types -- Claude Code sessions, standalone terminal shells, and embedded browser tabs.
Session persistence -- Terminal output is logged and replayed on relaunch so you never lose context.
Session resume -- Claude Code sessions detect their session ID automatically and resume where you left off.
Planning mode -- Draft and refine plans in a built-in text editor, then send them to Claude with one click.
Planning templates -- Start plans from structured templates for bug reports, feature requests, code reviews, refactors, and more.
Auto-titling -- Generic session names are replaced with descriptive titles generated by Claude after the first exchange.
Theming -- Light and dark themes with full CSS variable control.
Native menus and keyboard shortcuts -- macOS-native menu bar with comprehensive shortcut coverage.
Resizable layout -- Adjustable sessions sidebar width with state persistence across restarts.
Dock badge -- macOS dock icon shows the number of actively working Claude sessions.
Pin and archive -- Pin important sessions to the top or archive completed ones to keep the list clean.
Session card view -- See all sessions in a sortable grid with activity stats, token counts, and quick actions.
File tracker -- See which files Claude creates, modifies, and deletes in a live sidebar panel.
Macros -- One-click buttons for frequently used commands like /clear or commit this work.
Remote mode -- Monitor and control sessions from your phone via an encrypted WebSocket relay.
It has become my development hub where I can iterate very quickly.
It doesn't have built-in notifications and there's no panel to see all the open sessions, but I wonder how hard that would be to add.
I've used zmx since I ran into it a few weeks ago. Uses libghostty as well. It's great because it allows me to replace tmux completely in all my ssh sessions, and can keep one session per assistant.
Currently experimenting with agent-of-empires for tmux+worktrees to parallelize code changes.
So you can make your own script that can make new panels/workspaces and just invoke it from the terminal:
git worktree add -b my-branch ../repo-my-branch
ws=$(cmux new-workspace 2>&1 | awk '{print $2}')
cmux send --workspace "$ws" "cd ../repo-my-branch && claude"
cmux send-key --workspace "$ws" Enter
I think we should make this easier though, open to suggestions!osascript << 'EOF' use framework "Foundation" use framework "AppKit"
set ghosttyIconPath to "/Applications/Ghostty.app/Contents/Resources/Ghostty.icns" set cmuxAppPath to "/Applications/cmux.app"
-- Read the icon file set iconImage to current application's NSImage's alloc()'s initWithContentsOfFile:ghosttyIconPath
-- Set it as the custom icon for cmux.app current application's NSWorkspace's sharedWorkspace()'s setIcon:iconImage forFile:cmuxAppPath options:0 EOF
((The ghost pairs well with Kiro, what can I say?))
Would love to be able to color the sidebar tab.
Nice work!
The latest release (0.57.0) should fix it.
cmux notify --title "Claude Code" --subtitle "Waiting" --body "Agent needs input"
And afaik, both Gemini/Kiro should have stop hooks. If they send OSC notifications, then notifications will "just work" as well.I have Karabiner Elements so I added it and it's amazing!
Want to fix this, how do I reproduce? Select with mouse and cmd+c seems to work for me.
https://gist.github.com/roshan/b2a073e2377f370ce83cf7c4ea6d8...
I'm on MacOS 15.7.4 on an M4 Max Macbook
One question though, have you thought about trying to upstream any of this into Ghostty instead of making an entirely different app?
Currently they share browser context. Adding isolated profiles is a good idea. Do you often use multiple agents in a single project and have them both work on different pages? I personally use multiple checkouts, and the problem for me is that agents working in the same project want to spin up the same dev server. And the dev servers will conflict unless I make different instances of the same project listen in their own port ranges (perhaps via a PORT env var).
We want to solve the latter by bringing better SSH support where the WebView will proxy directly to a remote machine or Docker container, so different workspaces in the vertical tabs can talk to their corresponding dev servers. But I want to hear more about your use case.
Also want some feedback on how we should implement it. Could make it a CLI command that opens a new vertical tab/workspace:
cmux ssh <host>
Or maybe a configurable dropdown next to the plus button.Curious why you aren't using Claude Code's stop/notification hook
> Separate Chrome profiles per agent is the brute-force fix, but it's expensive. The better pattern is treating browser access as a serialized resource — one agent gets it at a time, with the others queued.
Ports could also be another serialized resource. Another direction we're exploring is to give agents VMs that have Chrome + VNC preinstalled [1]. Prompting Claude to use Docker also goes a long way there.