How I Tamed Terminal Chaos Across Many Projects
Two mobile products, each with its own dev, research, and marketing. In a standard terminal it was chaos. cmux turned dozens of tabs into 4 workspaces.
2 products, full stack, 1 person
I run Mooly (reading habit tracker, SwiftUI + Supabase) and Shieldly (mobile app, Flutter + Python/Modal) in parallel. For each product I handle development, competitor research, ASO, content, and analytics. Alone.
For a few weeks I did this in a standard terminal. Dozens of tabs, constant guessing "which tab is the Shieldly backend?", App Store Connect open somewhere in Chrome next to thirty other tabs. Context switching between products cost me 10-15 minutes each time. Not because the work was hard. Because finding the right window was hard.
Kuba recommended cmux. A native macOS app (Swift + AppKit, not Electron), terminal multiplexer with a GUI. Sidebar with tabs, split panes via ⌘D, built-in browser. Powered by libghostty. No .conf files, no prefix keys, no memorizing Ctrl+b. I installed it, opened it, and within an hour I had a setup I still use today.
4 workspaces, repeatable layout
I don't use one workspace per product. Development and growth are completely different work modes, so I separate them:
⌘1 Mooly Dev: agent, Xcode/simulator, Supabase/logs, git
⌘2 Mooly Growth: agent, App Store Connect, competitor research, keyword tracking
⌘3 Shieldly Dev: agent, flutter run, Modal backend, git
⌘4 Shieldly Growth: agent, Google Play Console, competing apps, A/B campaigns
Dev is always: agent, app, backend, git. Growth is always: agent, analytics, research, notes. Shieldly backend? ⌘3, Pane 2. Mooly analytics? ⌘2, Pane 1.
What this looks like in practice
Development. In Mooly Dev (⌘1) I assign an iOS widget implementation to an AI coding agent (Claude Code in my case). I jump to Shieldly Dev (⌘3), check the backend logs, see the deploy went through. Notification ring on ⌘1: the pane lights up with a colored ring. Widget done. I review, test on the simulator, approve. This is not multitasking. It's supervision. I decide what to build. AI speeds up implementation. Every PR goes through me.
Growth. This is where cmux proves its value more than in dev. Growth work is browser, notes, and research. In a normal setup it scatters across dozens of Chrome tabs.
Yesterday's Mooly Growth session (⌘2): search conversion dropped 8% in App Store Connect. I open screenshots from three competing reading trackers. Two changed their screenshot captions this week. I start the agent to compare their new keywords against mine. I note down a plan: new screenshots with phrases "reading streak" and "book habit tracker" to test. Shieldly Growth is the same but with Google Play Console and review mining: the agent extracts complaints from competitor reviews that could become Shieldly features.
Notification rings tie it all together. I'm in Shieldly Growth, ring on ⌘1: agent finished a refactor. Ring on ⌘2: draft App Store description ready. I jump over, review, return. No searching for windows, no checking every minute. Desktop notifications work even when cmux is minimized.
cmux vs tmux: what you gain, what you lose
I used tmux for years. Switching isn't free.
| Feature | tmux | cmux |
|---|---|---|
| Navigation | Ctrl+b + commands |
⌘1-8, sidebar, clicks |
| Notifications | none | rings, badges, desktop notifications |
| Browser | none | built-in (WebKit, no devtools) |
| AI-awareness | none | socket API, hooks, progress bars |
| Configuration | .tmux.conf | zero, reads Ghostty config |
| Remote (SSH) | yes | no |
| Linux | yes | no |
| Session persistence | yes (survives restart) | no |
| Maturity | 15+ years | early stage |
If you mostly work over SSH, cmux is not for you. If you work locally on multiple products with a mix of dev and marketing, the difference is clear.
cmux also exposes a unix socket (~/.cmux/cmux.sock) for programmatic control. Combined with agent hooks: agent finished work, cmux sends a ring. Build failed: ring. Automatically, no manual checking.
What cmux doesn't solve
I still have to decide which product needs attention in a given week. I still review every agent output, because AI can write code that passes tests but doesn't solve the right problem. cmux doesn't manage priorities. I do.
The app is young. Crashes happen once every few days. After a restart, workspaces disappear and have to be recreated. tmux would preserve them. It's annoying, but not enough to make me go back.
After 6 weeks
Both products have a regular release cycle: Mooly every 2 weeks, Shieldly every 3. ASO and marketing run in parallel with development instead of "when I find time." That's a change I attribute to growth having its own workspace with a dedicated layout, not a tab somewhere in Chrome.
cmux is a terminal multiplexer with a GUI and notifications. It's not perfect. But it lets me run 2 products full-scope without a team.
Install:
brew install --cask cmux. Free, open-source, macOS only.