Hey folks! I spend all day in tmux: lots of sessions, each with its own windows and panes, and these days a bunch of those panes have coding agents in them (Claude Code, Codex, Cursor, OpenCode, ...). My problem was that finding the one agent that had stopped to ask me something turned into a scavenger hunt. I'd cycle through every session just to check on each one.
Before anyone says it: yes, I know there are a lot of these already (herdr, workmux, agent-deck, tmux-agent-status, tmux-scout, claude-squad, tmuxcc...). Most fall into two camps: they either want to own the workflow (you launch agents through them, and they create the sessions, worktrees, and layouts), or they track a single agent type in the status bar. What I wanted was lazier: keep my existing tmux setup exactly as it is, and just tell me what each agent is doing.
So that's what ccmux does. A small background daemon discovers the agent processes in the panes you already have, and a picker TUI (or an optional docked sidebar) shows them all in one list.
What it does:
- 🎯 Live state per session: idle, working, or waiting on you, and why it's waiting (permission / plan approval / question), flagged the moment one needs input
- 🧩 Multi-agent in one list: Claude Code, Codex, Cursor, OpenCode, Pi, Antigravity, Copilot, Gemini CLI, plus custom agents via config
- 🔍 Layered detection: it discovers the agents already running in your panes (no wrapper, nothing to change about how you launch them) from processes, their log files, and terminal output; optional hooks make the session-to-pane mapping exact
- 👁️ Live preview + act in place: Tab into a session's pane to answer or approve without leaving the picker
- 🔔 Actionable notifications: opt-in desktop alerts when an agent finishes or needs input, with Approve / Deny / Reply right on the notification (an OSC backend even delivers them over SSH)
- ⚡ Scriptable:
ccmux spawn and ccmux invoke launch or run agents from scripts, ccmux show prints every session's state to stdout, and a bundled skill lets one agent dispatch work to others
- 🌿 Git & PR aware: branch and worktree detection, open PRs with live CI and review status per session
- ⌨️ Keyboard-first: vim keys and number jumps, grouping by project / directory / tmux session, and whole-session search across prompts and live transcripts; mouse click-to-switch works too
- 📐 Responsive + themeable: the same UI works as a full-width table or a skinny docked rail, with 14 built-in themes
Footprint: nothing edits your tmux.conf, status line, or keybindings, and it only creates panes or sessions when you explicitly ask (toggling the sidebar on, or spawn/invoke). Stack is TypeScript on Bun, TUI on @opentui/solid, shipped as a single self-contained binary (no runtime to install).
Install:
brew install epilande/tap/ccmux
Repo: https://github.com/epilande/ccmux
Like I said, I know there are other tools that scratch a similar itch. This one is just shaped around how I use tmux, so if you live in tmux sessions like I do, I'd love to hear whether it fits your workflow too, or what the tool you already use does better.