The assist CLI
Once installed, assist manages everything:
| Command | What it does |
|---|---|
assist start | Start the server (through the service unit when one is installed); prints the URL |
assist stop | Stop the server |
assist restart | Restart the server |
assist update [--check] [--json] | Check/install a configured upstream update; restart separately |
assist status | Server status + health check |
assist logs [N|-f|--follow] | Tail last N lines (default 100), or follow with -f/--follow |
assist service install|uninstall|status | Run Assist as a systemd --user unit (Linux) or launchd agent (macOS) |
assist expose [--ip ADDR] [--off] | Also listen on this host's LAN address, allow its origin, restart if running |
assist pair [--minutes N] [--url URL] | Open a short sign-in window; print the phone URL and a QR code |
assist token | Print the token file path, and the token itself only to a terminal |
assist --version | Print the version (and git commit in a checkout) |
assist config | Print resolved paths, ports, env |
assist roster [<role> [--family F]] | List the model roster, or print one role command for scripts |
assist doctor | Check prereqs, venv, .env, server health |
assist ls [--json] [--cwd] | List sessions and panes, optionally with working directories |
assist view <session> [-n N] [--pane P] | Capture a session pane |
assist send <session> [<text>|--file F] [--enter] [--pane P] [--wait] [--timeout N] [--autoyes] | Send text to a session pane, optionally waiting for it to settle |
assist wait <session> [--timeout N] [--pane P] [--autoyes] | Wait for a session pane to settle |
assist launch --session N [--cwd P] [--wait] [--role R (--family F|--against F)] | Create a bare shell; with --role, resolve and send its roster command |
assist kill <session> [--pane P] | Kill a tmux session |
assist purge --idle 24h [--yes] [--keep NAME ...] [--json] | Review content-idle sessions; --yes kills the checked set after a fresh identity/activity check |
assist autoyes <session> (--on|--off|--status) [--delay N] | Persistently set or inspect auto-yes; enabled delays are clamped to 0.1–30 seconds |
assist autoyes --global (--on|--off|--status) [--delay N] | Set or inspect the all-sessions switch |
assist studio [args] | Execute the Studio CLI found on PATH — sto first, then studio — or fail if neither is installed |
assist help | Full command reference |
The process commands delegate to ./assist-ctl, or to the service unit once assist service install has run. The container verbs are parked with the rest of the container tooling and are left out of assist help until that ends. The container commands hit the running server's HTTP API (/api/container/*), so the server must be running for them to work.
Each session verb (ls, view, send, wait, launch, kill, and autoyes) supports -h/--help; its generated help describes every argument and flag. --autoyes on send or wait is a temporary window scoped to that one wait and restores the prior state afterward. assist autoyes changes the persistent per-session setting instead; --delay is valid only with --on.
Model commands live only in ~/.config/drift-assist/roster.toml, seeded from roster.example.toml without overwriting an existing roster. Roles have no default family: choose one with --family, or use --against <author-family> when launching the one competing family as a judge. A single-family role needs no selection flag.
Auto-Yes answers permission prompts for you after a countdown, which means an agent stops asking before doing things you would otherwise have been asked about. It ships off, with a 5-second countdown, and SECURITY.md sets out what arming it hands over — including that it decides by pattern-matching pane text an agent may not have authored. Every start prints the current posture to the log, so an armed install is never a silent one.
assist autoyes --global sets the all-sessions switch (also in Settings → Auto-Yes → All Sessions). While it is on, every agent pane — claude, codex, opencode, cursor, gemini — in every session is armed at the one global delay, including sessions created later; per-session delays do not apply and /autoyes/set-delay returns 409. Plain shell panes stay manual, so apt, ssh host-key and stray (y/n) prompts are out of scope. A session armed by hand leaves them alone too unless you mark it shell-ok (autoyes.shell_ok in its project settings, or Shell panes in the Auto-Yes delay picker). Turning one session off while the switch is on records an opt-out that survives a restart. --status on a session says which rule applied: on (global, …), on (set here, …), off (opted out of global), or off (no agent pane).
After a successful ls, view, send, wait, or launch, the CLI prints a measured next: suggestion to stderr, leaving stdout safe for captures and pipelines. ls uses the first printed row's session name and omits the hint when there are no rows. Set ASSIST_NO_HINTS=1 to suppress hints for any command; assist ls --json suppresses them automatically so its stdout remains parseable JSON.
assist send prints a second stderr line, callback:, carrying the sentence that asks the receiving agent to message you back when it finishes or hits a question — so the sender can be told rather than poll assist wait. It is a suggestion; the sender decides whether to include it. The reply address is the caller's own tmux session (ASSIST_REPLY_TO overrides it), and the line is omitted when there is no such address — outside tmux nothing can be replied to — or when a session is sending to itself.
assist purge --idle 24h previews sessions whose content has stayed idle across all panes. Use --yes to kill the checked set, --keep NAME repeatedly to keep individual sessions, or --json for machine output. Pinned, prompt-waiting and in-view sessions start unchecked; Assist server sessions are excluded. The All tabs sheet offers the same review with a remembered 1h / 4h / 12h / 24h / 3d picker, editable checkboxes and a Kill count. Changed or recreated sessions are skipped at execution and reported. Human output includes next: hints; --json and ASSIST_NO_HINTS=1 suppress them.
Session wait commands use these exit codes:
| Code | State | Meaning |
|---|---|---|
0 | idle | The pane went quiet with no prompt |
10 | prompt | The pane is quiet because it is asking something; a summary is printed |
75 | working | The pane is still changing at the deadline; this is not an error, so re-run assist wait |
Shipped command help
assist — control the Drift Assist web terminal
Usage: assist <command> [args]
Server:
start Start the server (through the service unit if installed)
stop Stop the server
restart Restart the server
update [--check] [--json]
Check/install an upstream update; restart separately
status Show server status
logs [N | -f | --follow]
Tail last N lines (default 100), or follow
service install | uninstall | status
Keep it running across reboots (systemd --user / launchd)
Reach it from your phone:
expose [--ip ADDR] [--off]
Listen on this host's LAN address too, allow its
origin in .env, and restart if running
pair [--minutes N] [--url URL]
Open a short sign-in window; print the phone URL + QR
token Print the token file path (and the token, on a terminal)
Config & diagnostics:
config Print resolved paths, ports, and env
roster [ROLE] [--family F]
List model-family commands, or print one command
doctor Check prerequisites + server health
--version Print the version
Sessions:
ls [--json] [--cwd] List sessions and panes
view SESSION [-n N] [--pane P]
Capture a session pane
send SESSION [TEXT | --file F] [--enter] [--pane P]
[--wait] [--timeout N] [--autoyes]
Send text to a session pane
wait SESSION [--timeout N] [--pane P] [--autoyes]
Wait for a session pane to settle
launch --session N [--cwd P] [--cols C] [--rows R]
[--wait] [--timeout N] [--role R (--family F | --against F)]
Create a bare shell; takes no command
With --role, resolve and send its roster command
kill SESSION [--pane P]
Kill a tmux session
purge --idle 24h [--yes] [--keep NAME ...] [--json]
Review idle sessions; --yes kills the checked set
autoyes SESSION (--on | --off | --status) [--delay N]
Persistently set or inspect auto-yes
autoyes --global (--on | --off | --status) [--delay N]
Set or inspect the all-sessions switch
Auto-yes:
--autoyes on send/wait is temporary for that one wait and is restored
afterward. `assist autoyes` changes the persistent session setting.
`assist autoyes --global` arms every AGENT pane (claude/codex/opencode/
cursor/gemini) in every session at one delay, including sessions created
later. Plain shell panes stay manual unless that session was armed by
hand. A session turned off while the switch is on stays off.
Next-step hints:
Successful ls/view/send/wait/launch/purge commands print a measured `next:`
suggestion to stderr. Set ASSIST_NO_HINTS=1 to suppress it; ls --json
suppresses it automatically.
`send` also prints a `callback:` line offering the wording that asks the
receiving agent to report back to your own pane when it finishes or gets
stuck — take it or ignore it. The reply address is your tmux session, or
ASSIST_REPLY_TO; outside tmux there is nowhere to reply to, so the line
is omitted.
Wait exit codes:
0 idle — the pane went quiet, no prompt
10 prompt — quiet because it is asking something (summary printed)
75 working — still changing at the deadline; not an error, re-run `assist wait`
Studio (design hub):
studio [args] Run the Studio CLI on PATH (sto, else studio)
Misc:
help Show this message
Install / reinstall:
cd $ASSIST_HOME && ./install.sh
Version aliases: assist --version, assist -V, assist version. assist -h and assist --help show the top-level help; commands with argument help also accept -h and --help.