Show HN: cmux - Ghostty-based terminal with vertical tabs and notifications
198 points| lawrencechen | 1 month ago |github.com | reply
I tried a few coding orchestrators but most of them were Electron/Tauri apps and the performance bugged me. I also just prefer the terminal since GUI orchestrators lock you into their workflow. So I built cmux as a native macOS app in Swift/AppKit. It uses libghostty for terminal rendering and reads your existing Ghostty config for themes, fonts, colors, and more.
The main additions are the sidebar and notification system. The sidebar has vertical tabs that show git branch, working directory, listening ports, and the latest notification text for each workspace. The notification system picks up terminal sequences (OSC 9/99/777) and has a CLI (cmux notify) you can wire into agent hooks for Claude Code, OpenCode, etc. When an agent is waiting, its pane gets a blue ring and the tab lights up in the sidebar, so I can tell which one needs me across splits and tabs. Cmd+Shift+U jumps to the most recent unread.
The in-app browser has a scriptable API ported from agent-browser [1]. Agents can snapshot the accessibility tree, get element refs, click, fill forms, evaluate JS, and read console logs. You can split a browser pane next to your terminal and have Claude Code interact with your dev server directly.
Everything is scriptable through the CLI and socket API – create workspaces/tabs, split panes, send keystrokes, open URLs in the browser.
Demo video: https://www.youtube.com/watch?v=i-WxO5YUTOs
Repo (AGPL): https://github.com/manaflow-ai/cmux
[+] [-] bdbz|1 month ago|reply
Main differentiators: - Based on tmux, so you can connect to a persistent session from multiple devices - Responsive, resizes sidebar based on mobile/desktop client connecting - Status indicator icons for major LLM CLIs (needs input/thinking) - Completely built into tmux, emulator-agnostic - Supports grouping of windows - Supports color and emoji-coding windows / panes / window groups - It's higly configurable using yaml
https://github.com/brendandebeasi/tabby
[+] [-] johnthedebs|1 month ago|reply
Some feedback (since you were asking for it elsewhere in the thread!). Happy to go into more detail about any of these if it's helpful:
- It's not obvious/easy to open browser dev tools (cmd-alt-i didn't work), and when I did find it (right click page -> inspect element) none of the controls were visible but I could see stuff happening when I moved my mouse over the panel
- Would be cool to borrow more of ghostty's behavior:
[+] [-] lawrencechen|1 month ago|reply
> hotkey overrides - I have some things explicitly unmapped / remapped in my ghostty config that conflict with some cmux keybindings and weren't respected
We need to be better about this; right now you can modify keyboard shorcuts with cmd+, in the GUI. Planning on making it a config file in the spirit of ghostty though, not sure if we want to reuse ghostty's config file though since it might become a maintenance burden for them...
> command palette (cmd-shift-p) for less-often-used actions + discoverability
yes
> cmd-z to "zoom in" to a pane is enormously useful imo
Thinking of the right way to design this. Like hypothetically we can expand it, but what happens if you make a vertical/horizontal split, or cmd+t to make a new tab? I guess we could just "merge" it back into the original space which would be pretty cool.
[+] [-] behrlich|1 month ago|reply
[+] [-] lawrencechen|1 month ago|reply
[+] [-] blorenz|1 month ago|reply
[+] [-] lawrencechen|1 month ago|reply
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.
[+] [-] sltr|1 month ago|reply
So I've been using cmux for a few hours this morning, and I like it. One thing I'd like to disable is the reordering of tab groups. Currently it shows the most recent notifications on top. This also makes the keyboard shortcut for a given conversation change all the time, which is a cognitive burden for me.
[+] [-] lawrencechen|1 month ago|reply
[+] [-] gavmor|1 month ago|reply
Currently experimenting with agent-of-empires for tmux+worktrees to parallelize code changes.
[+] [-] lawrencechen|1 month ago|reply
So you can make your own script that can make new panels/workspaces and just invoke it from the terminal:
I think we should make this easier though, open to suggestions![+] [-] snisarenko|1 month ago|reply
I currently use WaveTerm and it's pretty good. (But a bit laggy sometimes, i think it's electron based)
But both your terminal and waveterm are missing an important UX feature.
When you keep appending vertical terminals to the right (in the same view). They all get squished, to fit in the current window width.
Instead, I would love a horizontal scroll at the bottom, so I can have infinite termnial appending without having them squeezed to be smaller and smaller.
[+] [-] twostorytower|1 month ago|reply
[+] [-] lawrencechen|1 month ago|reply
The latest release (0.57.0) should fix it.
[+] [-] mikkupikku|1 month ago|reply
[+] [-] anta40|1 month ago|reply
[+] [-] jvican|1 month ago|reply
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.
[0]: https://github.com/neurosnap/zmx
[+] [-] lawrencechen|1 month ago|reply
[+] [-] rcarmo|1 month ago|reply
[+] [-] swah|1 month ago|reply
[+] [-] lawrencechen|1 month ago|reply
[+] [-] pupppet|1 month ago|reply
Would love to be able to color the sidebar tab.
Nice work!
[+] [-] lawrencechen|1 month ago|reply
[+] [-] boloust|1 month ago|reply
[+] [-] lawrencechen|1 month ago|reply
[+] [-] arjie|1 month ago|reply
[+] [-] lawrencechen|1 month ago|reply
[+] [-] AM1010101|1 month ago|reply
[+] [-] lawrencechen|1 month ago|reply
Docs: https://www.cmux.dev/docs/notifications
[+] [-] dchu17|1 month ago|reply
[+] [-] lawrencechen|1 month ago|reply
[+] [-] swah|1 month ago|reply
[+] [-] lawrencechen|1 month ago|reply
Would greatly appreciate it!
[+] [-] warthog|1 month ago|reply
[+] [-] rubyn00bie|1 month ago|reply
One question though, have you thought about trying to upstream any of this into Ghostty instead of making an entirely different app?
[+] [-] lawrencechen|1 month ago|reply
[+] [-] simlevesque|1 month ago|reply
[+] [-] goro-7|1 month ago|reply
[+] [-] aflat|1 month ago|reply
[+] [-] lawrencechen|1 month ago|reply