← Drift Assist

The assist CLI

Assist source at 95d075d

Once installed, assist manages everything:

CommandWhat it does
assist startStart the server (through the service unit when one is installed); prints the URL
assist stopStop the server
assist restartRestart the server
assist update [--check] [--json]Check/install a configured upstream update; restart separately
assist statusServer status + health check
assist logs [N|-f|--follow]Tail last N lines (default 100), or follow with -f/--follow
assist service install|uninstall|statusRun 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 tokenPrint the token file path, and the token itself only to a terminal
assist --versionPrint the version (and git commit in a checkout)
assist configPrint resolved paths, ports, env
assist roster [<role> [--family F]]List the model roster, or print one role command for scripts
assist doctorCheck 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 helpFull 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:

CodeStateMeaning
0idleThe pane went quiet with no prompt
10promptThe pane is quiet because it is asking something; a summary is printed
75workingThe 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.