Guide

The gallager CLI

Everything the app can do to sessions, windows and panes, scriptable from the shell — including push notifications that tap through to the right pane.

Install

The CLI ships inside the app. Pick Gallager menu → Install Command Line Tool… and, after one admin prompt, gallager is on yourPATH (zsh completions optional). It talks to the running app over a local socket, so the app must be open. If you move the app, re-run the installer.

A taste of it

# Notify when a long build finishes — --push mirrors it to your iPhone,
# and tapping the notification jumps back to this exact pane
make build && gallager notify --title "Build done" --body "All green" --push

# Bootstrap a named session (no-op if it already exists)
gallager new-session --name work --path ~/code/proj --if-missing --color blue

# Split the current window and start tailing logs in the new pane
new=$(gallager split-pane right --json | jq -r '.result.id')
gallager send $'tail -f /tmp/build.log\n' --pane "$new"

# Show progress on the session row while a task runs
gallager set-progress indeterminate; ./long-task.sh; gallager set-progress clear

# At login: wait for the app, then launch an agent in a project
gallager wait-ready && gallager start-project ~/code/proj

The command families

Sessionslist-sessions, new-session, select-session, close-session, plus per-session flair: set-title, set-color, set-emoji, session-state, set-progress
Windows & panesnew-window, split-pane, select-pane, capture-pane --scrollback, rename and close
Inputsend <text> (literal — add --enter to actually run it) and send-key for enter/tab/escape/arrows
Notificationsnotify --title … --body …, with --push to deliver to paired iPhones
Editoredit <file> — opens the file in Gallager's editor and blocks until you submit or cancel
Projectslist-projects, start-project <path> to launch an agent session
Pluginsplugin list / install / update / enable / disable / logs / remove
Layoutsapply <file> — build whole sessions from a YAML/JSON description (a tmuxp superset), with --dry-run

Every command takes --json for scripting (errors come back as a structured envelope with a non-zero exit) and --pane /--window / --session to target explicitly.

How targeting works

Run inside a Gallager-managed pane and commands target that pane automatically (via $TMUX_PANE). Outside tmux, they fall back to the currently active pane — pass an explicit --pane in scripts. And since Gallager is real tmux underneath, every id you see (work,work:0, %3) is an ordinary tmux primitive; thetmux command itself remains the escape hatch for anything the CLI doesn't expose.

← All docs