muster
A terminal workspace for running CLI agents and dev processes side by side.
muster runs your agents, dev servers, log tails, and build watchers as panes in a single terminal and manages their lifecycle: start, stop, restart, and auto-restart on failure.
It's been my daily driver for running local work for a while. This is the cleaned-up cut I opened up, done with help of the AI.
Features
- Runs each process under its own PTY and renders it live. A process that exits keeps its last screen.
- Full lifecycle control: start/stop, restart, force-kill, pause/resume (SIGSTOP/SIGCONT), command-level graceful shutdown, and auto-restart on failure.
- A projects tree in the sidebar for switching between workspaces.
- Live config reload: edits are reconciled into the running workspace, adding new processes and dropping removed ones while leaving running ones untouched.
- Processes can be added and autostart toggled directly from the TUI.
- A failed process raises an alert visible from any pane.
Getting started
Requires a recent Rust toolchain.
From a source checkout:
Press ? in the app for the full keymap:
j/kor arrows to move,Enter/lto open,hto go backsstart/stop,rrestart,ppause,xforce-kill,ttoggle autostartaadd a process,nnew project,oswitch projects,dremove a projectC-adetaches from a focused pane; the same commands work asC-achords while attachedqto quit
Configuration
A workspace is a YAML file with three sections: agents, terminals, and
commands. The grouping controls how processes appear in the sidebar. Commands
can additionally opt into graceful shutdown.
agents:
- name: claude
command: claude
description: coding agent
autostart: false
terminals:
- name: shell
command: null # null runs your login shell
description: your login shell
commands:
- name: clock
command: while true; do date +%T; sleep 1; done
restart: on_failure
stop:
signal: terminate
grace_period: 5s
autostart: false
autostart:nulluses the default (agents and terminals start with the workspace, commands wait fors), or settrue/falseexplicitly. Toggle it live witht.restart:never,on_failure,always, ornullto never restart.working_dir: launch directory; inherits the workspace directory whennull.stop: optional and valid only on commands. Commands default toterminate(SIGTERM) with a5sgrace period. Set bothsignal(terminateorinterrupt) and a human-readablegrace_periodsuch as5sor1mto override that policy.
For commands, s and r send the effective graceful signal to the whole process
group, wait for its grace period, then use SIGKILL if it is still alive. x
always force-kills the selected process immediately. Agents, terminals, project
switches, and quitting always use immediate kill.
muster run
muster run registers a command into a project and runs it in place, without
opening the config:
The target is --project if given, otherwise $MUSTER_PROJECT (exported into
every pane), otherwise --config. Shell quoting is preserved and --project has
tab completion.
Status
Single user, Unix only.