A tmux command center for AI agents, panes, and long-running terminal work.
muxboard is the calm "what needs me?" layer above your tmux sessions: scan the fleet, see which agents are stuck, jump to the right pane, reply, broadcast, or keep watching.
You need tmux on the machine where you run muxboard. Download release binaries for Linux and macOS from the latest release, or install from source:
cargo install --git https://github.com/aanari/muxboard --lockedRun it from any tmux pane:
muxboardNot in tmux yet? Start tmux first, then run muxboard.
- See every tmux pane and agent in one scan-friendly board.
- Know which Codex, Claude Code, Opencode, or shell job needs attention.
- Jump, reply, broadcast, save fleets, and recover without losing tmux context.
- Stay local-first: no account, no cloud service, and no repo or worktree inspection.
Muxboard is tmux-native. It runs where tmux runs, so the same workflow works locally, over SSH, and on servers.
- Fleet: every pane, agent, and long-running job in one scan-friendly list.
- Details: the selected pane's state, blocker, action, and useful output.
- Output: a deeper, scrollable view when you ask for more.
- Footer: the next safe keys, always visible.
Power stays one layer down until you need it:
- send lists, named fleets, lane sends, and review-before-send broadcasts,
- tmux-native agent starts in the selected pane's directory,
- Browse for sessions and windows, Command Center for fleet triage,
- attention sorting, search, filters, muted alerts, desktop alerts, and terminal bell alerts,
- recent commands, macros, pane CPU/memory, and XDG-persisted state.
Muxboard ships a TPM-compatible tmux plugin in this repo. Install the binary first, then add:
set -g @plugin 'aanari/muxboard'Default key: prefix + M.
Useful presets:
- popup command center: quick overlay, leaves tmux layout untouched,
- dock: real tmux sidebar pane, best for long control sessions,
- drawer: temporary right-side overlay, closes cleanly after a jump,
- window: persistent control room.
See docs/tmux-plugin.md for plugin settings, dock/drawer behavior, status widgets, and advanced options.
The default path is intentionally small:
j/kto move,Enterto show the selected pane output while staying in muxboard,Escto back out of Output, Send, Browse, Command Center, or focused Details,gto show the selected pane in tmux while leaving muxboard running,vto live-preview tmux panes as you move;Entercommits,Escrestores your original pane,Spaceto add or remove panes from the send list,:to type a command for the current send list,ato continue a waiting pane when muxboard offers that action,sto ask panes for one-line summaries,xto clear the send list,/to search,qto quit.
Send rules:
- nothing in the send list -> selected pane,
- one or more panes in the send list -> send list,
- review multi-target sends require
Enterto confirm andEscto cancel.
Need more? Press .. More keeps advanced actions in context: Browse, Command Center, start agent, fleets, lane send, pane CPU/memory, alerts, filters, notifications, and pane sends.
Secondary keys:
Tabswitches focus between Fleet and Details when both surfaces are active,Lcycles layout: auto, side by side, stacked,rrefreshes,- on the Send surface,
]repeats the most recent command to the current send destination, - on the Send surface,
pthen a macro key pins the most recent command into a macro slot, default1-5, - on the Send surface, a macro key replays a saved macro slot, default
1-5, Escbacks out of active inputs and overlays.
Common More-menu keys, after pressing .. Labels adapt to the current surface:
Entershows output, returns to details, or opens a Browse window,[browses tmux sessions and windows,]shows Command Center,cmute selected alert,wunmute selected alert,amute all alerts,uunmute all alerts,icontinue waiting panes,esendEnterto the selected pane,ysendy+Enter,nsendn+Enter,zzoom the selected pane,+start a new agent in the selected pane's directory,tchange sort order,fchange visible panes,gsave a fleet,lchoose a saved fleet,ddelete the selected saved fleet,bsend to the selected lane,mtoggle pane CPU/memory,otoggle desktop notifications,vtoggle terminal bell,hcycle alert repeat delay,pcycle alert types.
Commands and macros support placeholders: {session}, {window}, {path}, {id}, {cmd}, {title}, and {lane}.
Muxboard uses XDG-style paths by default:
- config:
~/.config/muxboard/config.json - state:
~/.local/state/muxboard/state.json
By default, muxboard uses Auto: it inspects live tmux theme options, matches known safe themes when RGB is available, and falls back to System Colors. Use muxboard --theme-picker to choose manually, or script a dotfile choice with:
muxboard --theme auto
muxboard --theme system
# Same native-color preset, if that wording is clearer:
muxboard --theme terminal-colorsCreate a full editable config from the generated defaults:
config_dir="${XDG_CONFIG_HOME:-$HOME/.config}/muxboard"
mkdir -p "$config_dir"
muxboard --print-config-example > "$config_dir/config.json"Useful config fields:
layout_presetsupportsAuto,Horizontal, andVertical.ui_settings.theme.presetsupportsAuto,Calm,Contrast,Mono,TerminalNative,CatppuccinLatte,CatppuccinMocha,TokyoNight,GruvboxDark,GruvboxLight,Nord, andRosePine.- Kebab-case aliases like
auto,match-tmux,light,dark,system,system-colors,terminal-colors,native-colors,catppuccin-light,catppuccin-mocha,tokyo-night,gruvbox,rose-pine,terminal,ansi, andno-coloralso work. - Named themes are semantic mappings into muxboard's slots; use System Colors, stored as
TerminalNative, to follow your terminal palette. - Auto matching reads live tmux options, not terminal config files. Explicit theme config still wins.
- The older
theme_presetfield still works for existing configs. - Set
ui_settings.theme.overridesfor small custom touches, for example"accent": "#4078F2","warning": "#fc0", or"surface": "24".
To print ready-to-copy defaults:
muxboard --print-config-example
muxboard --print-default-keybindingsDesktop notification behavior:
- local GUI session: desktop notification plus terminal bell,
- SSH session: terminal bell and in-dashboard alerts only, no GUI notification attempts.
Terminal behavior:
- UTF-8 terminals get the normal clean bordered UI,
TERM=dumb, non-UTF-8 locales, orNO_COLORfall back to ASCII borders and plain styling.
Pane CPU/memory is host-local. It shows CPU and memory for each tmux pane PID on the host where muxboard is running. If a pane is an ssh client into another machine, the values reflect that local ssh process, not the remote workload behind it.
Structured fleet reports are host-agnostic. If an agent replies with STATUS=... | BLOCKER=... | NEXT=..., or emits a heartbeat like muxboard: status=...; blocker=...; next=..., muxboard will parse and surface that state in Fleet and Details.
Muxboard also reads conservative local status hints from recent Codex and Claude Code transcripts when they map cleanly to an obvious matching tmux pane. It uses that native signal for state, thread title, and review attention, while explicit tmux bridge hooks still take priority.
The animation above is synthetic and safe to share. To record your own GIF, MP4, or asciinema cast from the same private demo harness, see docs/demo.md.
V1 is intentionally tmux-first and agent-control-first. It does not inspect repos, branches, or worktrees; fleet control works the same for local panes, SSH panes, and generic long-running terminal jobs. VCS context belongs in V2 as an optional project layer, not as a dependency for the core dashboard.
Contributor workflow, verification commands, release checks, coverage, and probe/debug notes live in CONTRIBUTING.md.
Licensed under Apache-2.0. See LICENSE-APACHE.
