Docs / Control CLI

tmux-style control, terminal included.

A running QuorumTerm listens on a Unix control socket. The bundled quorum-term CLI talks to it like tmux: query state as JSON, drive splits and focus, publish agent metadata, or type into any pane — from scripts, hooks, or your own tools.

How it works

The CLI sends its argv as a JSON array over the socket and prints the one-line reply. Queries are answered from a state snapshot the GUI keeps current — they never touch the event loop. Actions are handed to the main thread and acknowledged immediately, fire-and-forget, exactly like tmux. Override the socket path with QUORUM_TERM_SOCK.

Driving it from a script or an agent? Lead with --format json (shorthand --json) and every reply — success or failure, including a GUI that isn't running — becomes exactly one line of JSON ready for jq: queries return {"ok":true,"data":…}, actions are acknowledged with {"ok":true}, and failures return {"ok":false,"error":…} with a non-zero exit code.

Queries (print JSON)

list-panes | lspEvery pane across all tabs
list-tabs | lstTabs with their panes
info | statusFull state: mode, active tab, tabs
agents [--state s]Panes with a detected agent; filter by idle/working/blocked

Tabs

new-tab | newwOpen a new tab (agent tab in agent mode)
next-tab / prev-tabCycle tabs
select-tab <n>Activate tab by index

Panes

split | splitwSplit focused pane / add agent side pane
focus <id>Focus a pane by id
close-pane [id]Close the focused pane, or one by id
move-pane <dest> [id]Move a pane into another tab, or `new`
break-pane [id]Pull a pane out into its own tab

Mode & worktrees

mode <agent|default>Switch the active tab's layout mode
worktree | wtOpen the worktree picker (⌘⇧W)
worktree up [path]Run the project's up scripts, one pane each
worktree down [path]Run down scripts, close the env panes

Metadata & input

report-agent …Publish status / title / display name for a pane, with TTLs
send-keys …Send tmux-style keys or literal text to any pane

send-keys

Each word is a tmux-style key name (Enter, Escape, C-c, M-x, F1F12, arrows, paging) or literal text. --literal forces plain text, --enter appends a carriage return, --pane targets any pane.

quorum-term send-keys "git status" Enter
quorum-term send-keys C-c
quorum-term send-keys --pane 3 --literal "npm run dev" --enter

# a full scripted layout
quorum-term split && quorum-term split
quorum-term send-keys --pane 2 --literal "claude" --enter
quorum-term --json agents --state blocked | jq .data