# ADF CLI reference

> Every command, flag, environment variable, slash command and key.

Source: https://github.com/christianbalevski/adf/blob/v0.7.4/docs/cli/reference.md (adf v0.7.4)

<!-- GENERATED by scripts/gen-cli-docs.ts from the code. Do not edit: run `npm run docs:cli`. CI fails when this file is stale. -->

Everything `adf` accepts, and every command and key of the terminal app, generated from the code. For task-oriented guides see the [ADF CLI docs](https://agentdocumentformat.org/cli).

- [Command line](#command-line): [commands](#commands), [daemon](#daemon), [options](#options), [terminal app options](#terminal-app-options), [environment](#environment)
- [Terminal app](#terminal-app): [views](#views), [slash commands](#slash-commands), [palette actions](#palette-actions), [keys](#keys)

## Command line

```text
Usage: adf [--url <daemon-url>] [--json] <command>
       adf [tui] [--view <id>] [--agent <id>] [--loop <name>]
       adf daemon [start|status|stop|restart|logs|token]
```

With no command, `adf` opens the terminal app. Commands that talk to the daemon start a local one in the background first when none answers (not with `--no-daemon` / `ADF_NO_AUTOSTART=1`, a remote `--url`, or next to a running ADF Studio). `<agent>` is an agent id, handle or name.

### Commands

| Command | Description |
|---|---|
| `adf tui` | The terminal app (the default) |
| `adf agents` | List loaded agents |
| `adf status <agent>` | Show runtime status |
| `adf start <agent>` | Start an agent and fire startup when applicable |
| `adf stop <agent>` | Stop and unload an agent |
| `adf unload <agent>` | Alias for stop |
| `adf loops <agent>` | List the agent's loops: main plus its inner (side) loops, parallel threads with their own history, e.g. a memory consolidator on a timer |
| `adf interrupt <agent> [--loop <name>]` | End the running turn; the loop goes idle and keeps accepting chats, timers and triggers |
| `adf abort <agent> [--loop <name>]` | Hard-abort the current turn without unloading; that loop stays stopped until the agent is reloaded (prefer interrupt) |
| `adf runtime [agent]` | Show daemon or agent runtime diagnostics |
| `adf providers` | Show provider configuration and agent resolution |
| `adf auth` | Show auth and credential presence |
| `adf auth login <chatgpt\|grok>` | Sign in to a subscription provider [--relay\|--loopback] chooses where the ChatGPT OAuth callback is served; defaults to relay when --url points at a remote daemon |
| `adf auth logout <chatgpt\|grok>` | Clear a subscription provider's tokens |
| `adf settings` | Show sanitized daemon runtime settings |
| `adf network` | Show mesh and WebSocket diagnostics |
| `adf network mesh [enable\|disable]` | Control daemon mesh registration |
| `adf network server [start\|stop\|restart]` | Control the mesh HTTP server |
| `adf network tools\|lan\|runtimes` | Show mesh tools, LAN addresses, or peers |
| `adf usage [agent]` | Show runtime or agent token usage |
| `adf config <agent>` | Show agent config |
| `adf files <agent>` | List agent files |
| `adf file <agent> <path>` | Print one agent file |
| `adf inbox <agent>` | List inbox messages |
| `adf outbox <agent>` | List outbox messages |
| `adf timers <agent>` | List timers |
| `adf tasks <agent>` | List tasks and pending approvals |
| `adf task <agent> <taskId>` | Show one task |
| `adf approve <agent> <taskId>` | Approve a pending task |
| `adf deny <agent> <taskId> [reason]` | Deny a pending task |
| `adf asks <agent>` | List pending ask requests |
| `adf answer <agent> <requestId> <answer>` | Answer a pending ask request |
| `adf identities <agent>` | List identity metadata without secret values |
| `adf mcp [agent]` | Show daemon MCP registrations or agent MCP state |
| `adf adapters [agent]` | Show daemon adapter registrations or agent adapter state |
| `adf events [agent]` | Follow daemon SSE events |
| `adf chat <agent> [--loop <name>] <message>` | Send chat (to main, or an inner loop) and print the accepted turn id |
| `adf identity` | Show the owner identity status |
| `adf identity new` | Create an owner identity; shows the 12-word seed phrase once — write it down |
| `adf identity restore` | Restore the owner identity from its seed phrase (typed at a hidden prompt; the same phrase as ADF Studio = the same owner) |
| `adf identity unlock\|lock` | Unlock/lock a passphrase-protected identity (machines without an OS keychain) |
| `adf templates` | List agent templates |
| `adf new [name] [--template <id>] [--provider <id>] [--model <id>] [--dir <path>] [--start]` | Create an agent from a template, sealed with the owner identity (like Studio) |

### Daemon

| Command | Description |
|---|---|
| `adf daemon [--port <n>] [--host <h>] [--settings <file>]` | Run the daemon in the foreground (Ctrl+C stops it; also ADF_DAEMON_PORT, ADF_DAEMON_HOST, ADF_DAEMON_SETTINGS, ADF_USER_DATA_DIR) |
| `adf daemon start [--port <n>] [--force]` | Start it in the background (what adf does on its own); --force skips the ADF Studio check |
| `adf daemon status` | Is it running: pid, uptime, version, log file |
| `adf daemon stop` | Stop it gracefully (agents unloaded, containers stopped) |
| `adf daemon restart` | Stop, then start in the background |
| `adf daemon logs [-f] [-n <lines>]` | Show the background daemon's log (-f follows) |
| `adf daemon token` | Print this machine's daemon access token (for clients on other machines: --token or ADF_DAEMON_TOKEN) |

`adf daemon --help`:

```text
Usage: adf daemon [--port <n>] [--host <h>] [--settings <file>]
       adf daemon start [--port <n>] [--force]
       adf daemon status | stop | restart [--port <n>]
       adf daemon logs [-f] [-n <lines>] [--port <n>]
       adf daemon token

Without a subcommand the daemon runs in the foreground (Ctrl+C stops it).
start runs it in the background, like adf does on its own when it needs one;
the log goes to <data dir>/logs/adf-daemon.log. stop is graceful: agents are
unloaded and compute containers stopped.

Every request but GET /health needs the daemon's access token. adf reads it
on this machine by itself (<data dir>/daemon-token, created on first start);
token prints it for a client elsewhere (--token or ADF_DAEMON_TOKEN there).
ADF_DAEMON_TOKEN overrides the file, and is required with a non-loopback
--host (plus ADF_DAEMON_ALLOWED_HOSTS for host names clients use).
Behind a reverse proxy on this host set ADF_DAEMON_BEHIND_PROXY=1: identity
secrets and stop then work only from adf on this host, against its loopback port.

Environment: ADF_DAEMON_PORT, ADF_DAEMON_HOST, ADF_DAEMON_SETTINGS,
ADF_USER_DATA_DIR, ADF_DAEMON_PIDFILE, ADF_DAEMON_TOKEN,
ADF_DAEMON_ALLOWED_HOSTS, ADF_DAEMON_BEHIND_PROXY
```

### Options

| Option | Description |
|---|---|
| `--url, -u <url>` | Daemon URL |
| `--token <token>` | Daemon access token (default: ADF_DAEMON_TOKEN, else the local daemon's token file) |
| `--json` | JSON output |
| `--no-daemon` | Never start the daemon automatically |
| `--version, -v` | Print the version |

### Terminal app options

`adf [tui] [options]` (`adf tui --help`). Any of these flags opens the terminal app.

| Option | Description |
|---|---|
| `--url, -u <url>` | Daemon URL (default ADF_DAEMON_URL or http://127.0.0.1:7385) |
| `--token <token>` | Bearer token (default: ADF_DAEMON_TOKEN, else the local daemon's token file) |
| `--view <id>` | Start view: chat \| files \| loops \| inspect \| fleet \| runtime |
| `--agent <id\|handle>` | Preselect an agent |
| `--loop <name>` | Preselect one of its loops (default main) |
| `--theme <name>` | adf (dark) \| adf-light \| adf-contrast \| adf-mono (also ADF_TUI_THEME) |
| `--mono` | No color (also NO_COLOR=1) |
| `--ascii` | ASCII glyphs (also ADF_TUI_ASCII=1) |
| `--no-alt-screen` | Render in the main screen buffer (also turns mouse mode off) |
| `--mouse` | Mouse mode, the default: the wheel scrolls what is under the pointer, a click expands a tool call or thinking, drag selects and copies, right-click pastes (Shift+drag, Option+drag in iTerm2: the terminal's own selection) |
| `--no-mouse` | The terminal's own mouse (also ADF_TUI_MOUSE=0, /mouse off; remembered) |
| `--no-kitty` | Never enable the kitty keyboard protocol (Shift+Enter; also ADF_TUI_KITTY=0) |
| `-h, --help` | Show this help |

### Environment

| Variable | Used by | Effect |
|---|---|---|
| `ADF_DAEMON_URL` | CLI, terminal app | Daemon URL (default `http://127.0.0.1:7385`); `--url` wins |
| `ADF_DAEMON_TOKEN` | CLI, terminal app | Daemon access token. Clients: sent as the bearer token (`--token` wins). Daemon: used instead of the `<data dir>/daemon-token` file; required with a non-loopback `--host` |
| `ADF_NO_AUTOSTART` | CLI, terminal app | `1`: never start the daemon automatically (same as `--no-daemon`) |
| `ADF_DAEMON_PORT` | daemon | Port for `adf daemon` (default `7385`); `adf daemon <sub>` also uses it when no `--url` / `--port` is given |
| `ADF_DAEMON_HOST` | daemon | Bind address for `adf daemon` (default `127.0.0.1`). Non-loopback needs `ADF_DAEMON_TOKEN` |
| `ADF_DAEMON_SETTINGS` | daemon | Settings file path; its folder is the data dir (token, pid file, logs, identity file). Clients use it to find the local token file |
| `ADF_USER_DATA_DIR` | daemon | Overrides the user data folder that holds the default settings file (shared with ADF Studio) |
| `ADF_DAEMON_PIDFILE` | daemon | Pid file path (default `<data dir>/adf-daemon.pid`, `adf-daemon-<port>.pid` for other ports) |
| `ADF_DAEMON_ALLOWED_HOSTS` | daemon | Extra Host names a non-loopback daemon accepts (comma or space separated, `name` or `name:port`): the names remote clients or a proxy use |
| `ADF_DAEMON_BEHIND_PROXY` | daemon | `1`: a reverse proxy on this host forwards to the daemon. Owner identity secrets and `daemon stop` then also need `<data dir>/daemon-local-proof`, which only `adf` on this host sends: run them on the host against its loopback port |
| `ADF_OWNER_PASSPHRASE` | daemon | Unlocks a passphrase-file owner identity at daemon start (machines without an OS keychain) |
| `ADF_OWNER_PASSPHRASE_FILE` | daemon | Same, read from the first line of this file |
| `ADF_SECRET_STORE` | daemon | `file` or `keychain`: where the owner phrase and provider keys are kept (default: the OS keychain when usable, else the passphrase file) |
| `ADF_KEYCHAIN` | daemon | `0` or `off`: never use the OS keychain |
| `ADF_TUI_THEME` | terminal app | Same as `--theme` |
| `ADF_TUI_ASCII` | terminal app | `1`: same as `--ascii` |
| `ADF_TUI_MOUSE` | terminal app | `0`: the terminal's own mouse, `1`: mouse mode; wins over the saved `/mouse` choice |
| `ADF_TUI_KITTY` | terminal app | `0`: same as `--no-kitty` |
| `ADF_TUI_SHIFT_ENTER` | terminal app | `1`: treat Shift+Enter as working from the start (your terminal sends it through a keybinding) |
| `ADF_TUI_FULL_HEIGHT` | terminal app | `1`: Windows: also use the bottom terminal row |
| `ADF_TUI_CLIPBOARD` | terminal app | `osc52`: copy only through the terminal (OSC 52), never pbcopy / clip / wl-copy / xclip |
| `ADF_TUI_PREFS` | terminal app | Where sidebar, mouse, stopped-agents filter and welcome choices are kept (default `<config dir>/adf-studio/tui-prefs.json`); `off`: session only |
| `ADF_EDITOR` | terminal app | External editor, before `VISUAL` and `EDITOR` (default `notepad` on Windows, else `nano`, then `vi`) |
| `VISUAL` | terminal app | External editor when `ADF_EDITOR` is not set |
| `EDITOR` | terminal app | External editor when `ADF_EDITOR` and `VISUAL` are not set |
| `NO_COLOR` | terminal app | Any value: no color (same as `--mono`); wins over `--theme` |
| `TERM` | terminal app | `dumb`: no color |

## Terminal app

### Views

| Key | View | Id (`--view`, `/view`) |
|---|---|---|
| `1` | Chat | `chat` |
| `2` | Files | `files` |
| `3` | Loops | `loops` |
| `4` | Inspect | `inspect` |
| `5` | Fleet | `fleet` |
| `6` | Runtime | `runtime` |

### Slash commands

Type `/` in the prompt; `Tab` completes names and arguments. Commands work from any view (some need a selected agent); the group is the view that owns it, and usually the one it opens. Unknown commands are reported, never sent to an agent.

#### Shell (every view)

| Command | Aliases | Description |
|---|---|---|
| `/help` | `/?` | Keys, commands and what loops are |
| `/quit` | `/exit` `/q` | Leave the terminal app (agents keep running in the daemon) |
| `/view <chat\|files\|loops\|inspect\|fleet\|runtime>` |  | Switch the main pane |
| `/agent <handle\|id> [loop]` | `/a` | Select an agent, and optionally one of its loops (default main) |
| `/refresh` | `/r` | Re-read agents, loops and approvals from the daemon |
| `/theme [adf\|adf-light\|adf-contrast\|adf-mono\|next]` |  | Pick a color theme (no argument opens the picker) |
| `/url [daemon-url] [--token <token>]` |  | Show the daemon URL, or reconnect to another daemon (for a remote daemon pass --token or set ADF_DAEMON_TOKEN) |
| `/auth` |  | Provider sign-in: ChatGPT and Grok status, sign in, sign out |
| `/login [chatgpt\|grok]` |  | Sign the daemon in to ChatGPT (browser) or Grok (device code) |
| `/logout <chatgpt\|grok>` |  | Sign the daemon out of ChatGPT or Grok (asks) |
| `/json [on\|off]` |  | Toggle raw JSON in Inspect and Runtime pages |
| `/sidebar [on\|off]` |  | Show or hide the fleet sidebar (Ctrl+B); remembered across launches |
| `/mouse [on\|off]` |  | Mouse mode (on, the default: click expands, drag selects + copies, right-click pastes, the wheel scrolls under the pointer; off: the terminal’s own mouse); remembered |
| `/terminal-setup` | `/terminal` | Shift+Enter for a newline in this terminal: what works now and how to set it up |
| `/identity [create\|restore\|unlock\|lock]` |  | Owner identity: status, create, restore from the 12 words, unlock, lock |
| `/new [name]` |  | Create a new agent from a template (sealed under your owner identity) |
| `/web [on\|off]` |  | The daemon’s web server that serves agent websites / APIs: status, start (on), stop (off, asks) |
| `/open-site [agent]` | `/site` | Open an agent’s website in the browser (starts the web server if it is stopped) |
| `/copy-site [agent]` |  | Copy an agent’s website URL |
| `/welcome` |  | What ADF is, and the getting-started checklist |
| `/channels [add [telegram\|discord\|slack\|email\|whatsapp] \| remove <channel>]` |  | The selected agent’s channels (Telegram, Discord, Slack, email, WhatsApp): state, add, remove |
| `/provider [add [preset] \| list \| remove <id>]` |  | Model providers: add one with an API key (stored in the daemon’s secret store), list, remove. Subscriptions: /login |
| `/mcp [add [catalog-name \| npm:pkg \| python:pkg \| https://url] \| remove <name> \| restart <name> \| logs <name>]` |  | The selected agent’s MCP servers: state, add (catalog, npm, Python, remote URL), restart, credentials, tools, logs, remove |
| `/templates [template-id]` |  | Agent templates: list, details, new, duplicate, rename, notes, default, review, reset, delete, edit in $EDITOR |
| `/skills [add [name \| https-url \| ./path] \| mute\|unmute\|remove <name> \| sources [add\|remove <url>]]` |  | The selected agent’s skills: preview, mute, edit, remove; add from the catalog, a URL or a local folder |
| `/context [loop]` |  | Context usage of the selected loop: total vs the auto-compact threshold, what fills it (prompt, files, tools, MCP, conversation), compact now |

#### Chat view

| Command | Aliases | Description |
|---|---|---|
| `/interrupt` | `/abort` | End the selected loop’s running turn; the loop goes idle and keeps working (Esc) |
| `/clear` |  | Clear the selected loop’s history (archived per the agent’s audit settings) |
| `/compact` |  | Summarize the selected loop’s history now to free context (not while it is mid-turn) |
| `/trigger <type> [json-data]` |  | Fire an ADF event into the selected loop (bypasses trigger config) |
| `/copy [n]` |  | Copy the last (or n-th last) reply of the selected loop to the clipboard |
| `/thinking` |  | Expand or collapse thinking blocks in chat (t) |
| `/approve [all\|always]` |  | Approve the selected loop’s pending tool call · all: every gated call (never protection overrides) · always: always approve that tool (asks) |
| `/reject [feedback]` |  | Reject the selected loop’s pending tool call; the agent sees the feedback |

#### Files view

| Command | Aliases | Description |
|---|---|---|
| `/files` |  | Browse the selected agent’s document, mind and files |
| `/open <path>` |  | Open a file of the agent in the viewer (fuzzy path; also document, mind) |
| `/edit <path>` |  | Edit a file of the agent in $VISUAL/$EDITOR, then confirm the write |
| `/doc` | `/document` | Show the agent document |
| `/mind` |  | Show the agent’s mind (its memory; inner loops such as a consolidator tend it) |
| `/new-file [path]` |  | Create a file in the agent (opens $EDITOR) |
| `/rm <path>` |  | Delete a file of the agent (asks first) |
| `/mv <from> <to>` |  | Rename or move a file of the agent |

#### Loops view

| Command | Aliases | Description |
|---|---|---|
| `/loop [<name> \| new [template \| <name> <goal…>] \| edit\|rm\|on\|off <name> \| send <name> <msg…> \| chat <name> \| schedule <name>]` |  | Loops: switch, create (templates), edit, enable/disable, delete, message or schedule an inner loop |
| `/main` |  | Back to the main loop |
| `/loops` |  | Loops manager: this agent's loops, timers, triggers and history |
| `/timers [all]` |  | Timers of this agent, or all agents' upcoming timers |
| `/timer add [--loop <name>] \| edit <id> \| rm <id>` |  | Create, edit or delete a timer (a timer with a loop runs that loop on a schedule) |
| `/triggers` |  | Triggers of this agent: enable/disable, edit targets and the loop each target wakes |
| `/history [loop]` |  | Browse a loop's persisted history (tokens per entry, filters) |

#### Inspect view

| Command | Aliases | Description |
|---|---|---|
| `/inspect [diag\|settings\|config\|usage\|mcp\|channels\|identity\|logs\|tables\|tasks\|events]` |  | Inspect the selected agent: status, settings, config, usage, MCP, channels, identities, logs, tables, its events |
| `/model [[provider/]model \| inherit]` |  | Change the selected agent › loop’s model (main: the agent config; an inner loop: its override, inherit clears it). No argument: picker |
| `/config [edit]` |  | The selected agent’s config (Inspect › Config); edit opens it in $EDITOR |
| `/tasks [pending\|active\|all]` |  | The selected agent’s tasks (Inspect › Tasks): approvals and async tool calls; y/n/a act on a call waiting for approval |
| `/instructions [edit]` |  | Edit the selected agent’s instructions (a dialog; edit opens $EDITOR) |
| `/tools [filter]` |  | The selected agent’s tools: enable, show, require approval, lock (built-in and MCP) |
| `/compaction [tokens\|default]` |  | Compaction threshold of the selected agent › loop (80000, 80k; default = main’s default / an inner loop inherits). No argument: every loop |

#### Fleet view

| Command | Aliases | Description |
|---|---|---|
| `/agents [running\|all \| interrupt\|abort <agent> [loop] \| refresh]` |  | Fleet overview; running/all: hide or show stopped tracked agents (remembered); interrupt an agent's running turns (abort = hard stop until reload); refresh |
| `/start [agent]` |  | Start an agent (runs its startup turn when it starts active); a stopped tracked agent is loaded first |
| `/stop [agent]` | `/unload` | Stop and unload an agent and all its loops (asks first) |
| `/load [path.adf] [--review] [--start]` |  | Load an .adf into the daemon (no path: file picker with Tab completion) |
| `/switch <agent>[/loop]` | `/sw` | Jump to an agent (fuzzy) or one of its loops and open the chat |
| `/autostart [dir…]` |  | Scan tracked directories and start every reviewed autostart agent (asks first) |
| `/track [dir]` |  | Track a folder of agents (its reviewed autostart agents load now and at every daemon start); no dir: folder picker |
| `/untrack <dir>` |  | Stop tracking a folder (asks; files are not touched; optionally unload its agents) |

#### Runtime view

| Command | Aliases | Description |
|---|---|---|
| `/runtime [status\|folders\|identity\|auth\|providers\|usage\|network\|compute\|mcp\|channels\|settings\|events]` |  | The daemon: status, owner identity, sign-in, providers, usage, network, compute, MCP, channels, settings, every agent’s events |
| `/status` |  | Daemon health, version, uptime and every agent’s loops (Runtime › Status) |
| `/usage` |  | Token usage across agents, by model (Runtime › Usage) |
| `/providers` |  | LLM providers and which agents use them (Runtime › Providers) |
| `/network` |  | Mesh, LAN and WebSocket status; mesh and server on/off (Runtime › Network) |
| `/compute` |  | Container runtime and containers (Runtime › Compute) |
| `/settings` |  | Daemon settings (secrets redacted) (Runtime › Settings) |
| `/events [type-filter…] [--agent] [--loop] [--all]` |  | Every agent’s live umbilical events (tail -f), e.g. /events tool. -turn.delta --agent (Runtime › Events) |

### Palette actions

`Ctrl+K` (or `Ctrl+P`, or `:` outside the prompt) searches these, plus views, agents, loops, slash commands and recent files.

#### Shell (every view)

| Action | Group | Shortcut |
|---|---|---|
| Refresh from daemon | Actions |  |
| Keys & commands | Actions | `?` |
| Next color theme | Actions |  |
| Toggle raw JSON in Inspect and Runtime | Actions |  |
| Show / hide the sidebar | Actions | `Ctrl+B` |
| Mouse mode on / off | Actions |  |
| Terminal setup: Shift+Enter newline | Actions |  |
| Quit TUI (agents keep running) | Actions | `Ctrl+C` |
| Owner identity | Actions |  |
| Create owner identity | Actions |  |
| Restore owner identity from seed phrase | Actions |  |
| Unlock owner identity | Actions |  |
| New agent | Actions | `n` |
| Provider sign-in | Actions |  |
| Sign in to ChatGPT | Actions |  |
| Sign in to Grok | Actions |  |
| Open agent website | Web | `w` |
| Copy agent website URL | Web | `Shift+w` |
| Start web server | Web |  |
| Stop web server… | Web |  |
| MCP servers of this agent | Actions |  |
| Add an MCP server | Actions |  |
| Welcome & getting started | Actions |  |
| Channels of this agent | Actions |  |
| Add Telegram channel | Actions |  |
| Add Discord channel | Actions |  |
| Add Slack channel | Actions |  |
| Add Email channel | Actions |  |
| Add WhatsApp channel | Actions |  |
| Connect a model provider | Actions |  |
| Agent templates | Actions |  |
| Skills of this agent | Actions |  |
| Add a skill | Actions |  |
| Context usage | Actions |  |

#### Chat view

| Action | Group | Shortcut |
|---|---|---|
| Interrupt running turn | Chat | `Esc` |
| Next loop | Chat | `Shift+→` |
| Previous loop | Chat | `Shift+←` |
| Toggle thinking blocks | Chat | `t` |
| Copy last reply | Chat | `c` |
| Fire a trigger into this loop… | Chat |  |
| Compact this loop’s history now | Chat |  |
| Clear this loop’s history… | Chat |  |
| Approve the pending tool call | Chat |  |
| Approve all pending tool calls | Chat |  |
| Always approve this tool… | Chat |  |
| Reject the pending tool call with feedback… | Chat |  |

#### Files view

| Action | Group | Shortcut |
|---|---|---|
| Show agent document | Files |  |
| Show agent mind | Files |  |
| Edit agent mind in $EDITOR | Files |  |
| New file… | Files |  |
| Browse files | Files |  |
| Show inbox | Files |  |
| Show outbox | Files |  |
| Show meta | Files |  |

#### Loops view

| Action | Group | Shortcut |
|---|---|---|
| New inner loop… | Loops |  |
| New loop from template: Memory consolidator | Loops |  |
| New loop from template: Researcher | Loops |  |
| New loop from template: Critic / reviewer | Loops |  |
| New loop from template: Reflector | Loops |  |
| Manage loops | Loops |  |
| Schedule the selected loop… | Loops |  |
| Timers | Loops |  |
| Upcoming timers (all agents) | Loops |  |
| Triggers | Loops |  |
| Loop history | Loops |  |
| Edit the selected loop… | Loops |  |

#### Inspect view

| Action | Group | Shortcut |
|---|---|---|
| Agent settings | Inspect |  |
| Edit agent instructions | Inspect |  |
| Agent tools | Inspect |  |
| Compaction threshold | Inspect |  |
| Show tasks | Inspect |  |
| Change model | Inspect |  |
| Edit agent config in $EDITOR | Inspect |  |
| Events of the selected loop only | Inspect |  |
| Inspect: Status | Inspect |  |
| Inspect: Settings | Inspect |  |
| Inspect: Config | Inspect |  |
| Inspect: Usage | Inspect |  |
| Inspect: MCP | Inspect |  |
| Inspect: Channels | Inspect |  |
| Inspect: Identities | Inspect |  |
| Inspect: Logs | Inspect |  |
| Inspect: Tables | Inspect |  |
| Inspect: Tasks | Inspect |  |
| Inspect: Events | Inspect |  |

#### Fleet view

| Action | Group | Shortcut |
|---|---|---|
| Track a folder… | Fleet | `f` |
| Untrack folder… | Fleet |  |
| Load agent file (.adf)… | Fleet | `o` |
| Start selected agent | Fleet | `s` |
| Stop + unload selected agent… | Fleet | `x` |
| Interrupt running turns of selected agent… | Fleet | `a` |
| Hard abort selected agent’s running loops (stopped until reload)… | Fleet |  |
| Autostart agents from tracked directories… | Fleet | `Shift+a` |
| Hide / show stopped agents (tracked, not loaded) | Fleet | `Shift+h` |
| Refresh fleet (agents, timers, inbox, runtime) | Fleet | `r` |
| Open selected agent + loop in chat | Fleet | `Enter` |

#### Runtime view

| Action | Group | Shortcut |
|---|---|---|
| Runtime: Status | Runtime |  |
| Runtime: Folders | Runtime |  |
| Runtime: Identity | Runtime |  |
| Runtime: Sign-in | Runtime |  |
| Runtime: Providers | Runtime |  |
| Runtime: Usage | Runtime |  |
| Runtime: Network | Runtime |  |
| Runtime: Compute | Runtime |  |
| Runtime: MCP | Runtime |  |
| Runtime: Channels | Runtime |  |
| Runtime: Settings | Runtime |  |
| Runtime: Events | Runtime |  |

### Keys

The same lists as `?` / `/help` in the app.

#### Global

| Keys | Action |
|---|---|
| `Ctrl+K` `Ctrl+P` | Command palette (also : when the prompt is not focused) |
| `Tab` `Shift+Tab` | Cycle focus: sidebar → main → prompt (a hidden sidebar is skipped); from the tab bar Tab goes to the first pane |
| `Ctrl+B` | Hide / show the fleet sidebar: full-width chat (also /sidebar; remembered) |
| `1-6` `Alt+1-6` | Switch view. The selected agent: 1 Chat 2 Files 3 Loops 4 Inspect · the app: 5 Fleet (every agent) 6 Runtime (the daemon) (bare digits outside the prompt) |
| `Shift+←` `Shift+→` | Previous / next loop of the selected agent, from anywhere (also Ctrl+←/→, except in a prompt with text) |
| `Alt+←` `Alt+→` | In the prompt: word left / right (also Alt+B / Alt+F, and Ctrl+←/→ while there is text) |
| `Home` `End` | In the prompt: line start / end (also Ctrl+A / Ctrl+E, Cmd+← / Cmd+→) |
| `Ctrl+Backspace` `Alt+Backspace` `Ctrl+W` | In the prompt: delete the word before the caret (Option+Backspace on a Mac) |
| `Ctrl+Delete` `Alt+d` | In the prompt: delete the word after the caret |
| `Cmd+Backspace` `Ctrl+U` | In the prompt: delete to the line start (Terminal.app sends nothing for Cmd+Backspace: use Ctrl+U) |
| `/` | Slash command (focuses the prompt) |
| `?` | This help (when the prompt is not focused) |
| `Esc` | In order: close the dialog or completion menu · end a view’s own mode (filter, search, viewer, a selected chat item) · (chat) interrupt the running turn · then focus the tab bar (from the sidebar, the main pane, or an empty prompt) |
| `←` `→` | Files, Loops, Inspect, Runtime: the view’s tabs (from its lists; not while typing a filter) |
| `Enter` `Backspace` | In a list: open the item (file, message, entry, task, row, event) · back one level (Esc too). Backspace never deletes |
| `Esc` `Esc` | Clear a prompt that has text (the next Esc goes to the tab bar) |
| `Ctrl+C` | Cancel dialog · clear the prompt · press twice to quit (agents keep running) |
| `Enter` | Send the prompt (to the selected agent › loop unless it starts with /). With a completion menu open: take the highlighted item; a /command with all its required arguments runs, else it is inserted to type them |
| `Shift+Enter` `Alt+Enter` `Ctrl+J` | Newline in the prompt (or end a line with \). Shift+Enter needs a terminal that tells it apart: /terminal-setup |
| `Ctrl+↑` `Ctrl+↓` | Prompt history (per agent › loop in Chat); ↑ ↓ too on the first / last line of text |
| `↑` `↓` | Chat, empty prompt: select the previous / next transcript item (Enter expands, Esc lets go; PgUp PgDn Home End scroll) · otherwise move in the text / completion menu |
| `Mouse` | Mouse mode (default): the wheel scrolls what is under the pointer; click selects / expands a tool call; drag selects + copies (double-click word, triple-click line); right-click pastes. Shift+drag (Option+drag iTerm2, Fn+drag Terminal.app): the terminal’s own selection. /mouse off: the terminal’s mouse |
| `w` | Fleet, Inspect › Status, Chat transcript: open the agent’s website (W copies the URL) · on the tab bar: web server on / off |
| `Tab` | In the prompt with a menu open: complete /commands, their arguments, @files (Chat) without running |

#### Tab bar

`Esc` focuses the view tabs in the header once nothing else takes it.

| Keys | Action |
|---|---|
| `←` `→` | Previous / next view: switches as you move (h l too; Home / End first / last). Left of 1 Chat is the agent label |
| `Enter` | On the agent label: switch agent / loop (also a click on it in mouse mode) |
| `Enter` `↓` | Into the view (Chat: its prompt) |
| `1-6` | Jump straight into a view |
| `Tab` `Shift+Tab` | Back into the panes (first / last) |
| `w` | Web server on / off (stopping asks); also a click on the header’s web badge in mouse mode, /web on\|off |

#### Sidebar

| Keys | Action |
|---|---|
| `↑` `↓` | Move; selects that agent › loop everywhere (PgUp PgDn Home End too) |
| `→` `←` | Expand an agent into its loops · collapse / back to the agent |
| `Space` | Expand or collapse the agent |
| `Enter` | Open the agent › loop in Chat |
| `a-z` | Type to filter agents and loops (Backspace edits, Esc clears) |

#### Dialogs

| Keys | Action |
|---|---|
| `y` `Enter` | Confirm |
| `n` `Esc` | Cancel |

#### 1 Chat

| Keys | Action |
|---|---|
| `Enter` | Send to the selected loop (queued while it runs) |
| `Shift+←` `Shift+→` | Previous / next loop tab (also Ctrl+←/→ on an empty prompt; ← → in the transcript) |
| `↑` `↓` | Select the previous / next transcript item (message, reply, thinking, tool call, notice, approval, marker): from an empty prompt or the transcript (j k). An item taller than the view scrolls inside first |
| `Enter` `Space` | Expand / collapse the selected item (tool call input + result, thinking, context, approval, wake). Mouse mode: click the item |
| `Esc` | Let go of the selected item (before interrupting) |
| `PgUp` `PgDn` | Scroll by pages (also while typing); the mouse wheel scrolls by lines |
| `Home` `End` | With an empty prompt: top, loading older history · follow live (g G in the transcript) |
| `Ctrl+↑` `Ctrl+↓` | Prompt history of this agent › loop (↑ ↓ too once the prompt has text, on its first / last line) |
| `Shift+Enter` `Alt+Enter` | Newline in the prompt (Ctrl+J, or \ then Enter; /terminal-setup for Shift+Enter) |
| `t` | Expand / collapse all thinking |
| `c` | Copy the selected item, else the last reply |
| `w` | Open the agent’s website (when it serves one; starts the web server if stopped) |
| `Esc` | Interrupt this loop’s running turn: it goes idle and keeps working (not a stop) |
| `Esc` `Esc` | Clear the prompt |
| `Tab` `Shift+Tab` | Leave the prompt for the transcript / sidebar (Esc never does) |
| `@` | In the prompt: complete an agent file path (Tab) |

Approvals and questions (the card under the transcript):

| Keys | Action |
|---|---|
| `y` | Approve: press twice, or once on a selected approval · resume a suspended agent. Mouse mode: click the card’s buttons |
| `a` | Always approve this tool for the agent (twice, then confirm; it won’t ask again). Not offered for protection overrides: those are one-time only · on a question card: answer it |
| `n` | Reject · shut a suspended agent down (asks) |
| `f` | Reject with feedback: the agent sees your text |
| `v` | Full details of the tool call |
| `/approve` | /approve [all\|always] · /reject [feedback]: the same from the prompt |

#### 2 Files

Files tab (tree):

| Keys | Action |
|---|---|
| `↑` `↓` | Move; the viewer previews the highlighted entry |
| `Enter` | Open the file in the viewer · open / close a folder |
| `Backspace` | Close the folder · go to the parent folder (never deletes) |
| `←` `→` | Tabs: Files · Inbox · Outbox · Meta |
| `Space` | Toggle a folder |
| `/` | Filter by path (fuzzy) |
| `e` | Edit in $EDITOR, then confirm the write (diff shown) |
| `n` | New file |
| `m` | Rename / move (a folder moves with its files) |
| `d` `Delete` | Delete (asks) |
| `p` | Protection: none → read_only → no_delete |
| `a` | Toggle authorized |
| `r` | Reload |

Viewer:

| Keys | Action |
|---|---|
| `Backspace` `Esc` | Back to the list (the entry stays selected) |
| `↑` `↓` | Scroll (j k; PgUp PgDn Space page; g G top/bottom) |
| `/` | Search, then n N next / previous hit |
| `e` | Edit this file |

Inbox · Outbox · Meta (read-only):

| Keys | Action |
|---|---|
| `Enter` | Read the message / entry (Backspace or Esc: back) |
| `/` | Filter |
| `f` | Status filter (inbox, outbox) |
| `r` | Reload |

#### 3 Loops

| Keys | Action |
|---|---|
| `←` `→` | Tabs: Loops · Timers · Triggers · History |

Loops tab:

| Keys | Action |
|---|---|
| `↑` `↓` | Select a loop (also selects it for Chat) |
| `Enter` | Chat with the loop |
| `n` | New inner loop: memory consolidator, researcher, critic, reflector or blank |
| `e` | Edit goal, tools, model, flags (diff + confirm) |
| `x` | Enable / disable |
| `s` | Send a one-off message |
| `t` | Schedule: a timer that wakes this loop |
| `c` | Clear its history (asks) |
| `d` `Delete` | Delete (asks; history archived to the audit log) |
| `h` | Its history |
| `r` | Refresh |

Timers tab:

| Keys | Action |
|---|---|
| `n` | new |
| `Enter` `e` | edit |
| `d` | delete |
| `f` | all agents |
| `r` | refresh |
| `o` | select that agent (all-agents list) |

Triggers tab:

| Keys | Action |
|---|---|
| `x` | enable/disable |
| `Enter` `e` | edit targets |
| `r` | refresh |

History tab:

| Keys | Action |
|---|---|
| `Enter` | open entry |
| `/` | filter text/tool |
| `f` | role |
| `<` `>` | older/newer |
| `l` | next loop |
| `c` | clear |
| `L` | previous loop |
| `i` | entry details |
| `r` | reload |

Loop and timer forms:

| Keys | Action |
|---|---|
| `↑` `↓` | Field |
| `←` `→` | Change a choice / toggle |
| `Ctrl+O` | Open the goal in $EDITOR |
| `Ctrl+S` | Review, then Enter / y applies |
| `Esc` | Cancel (from review: back to the form) |

#### 4 Inspect

| Keys | Action |
|---|---|
| `←` `→` | The selected agent’s tabs: Status Settings Config Usage MCP Channels Identities Logs Tables Tasks Events |

Other tabs:

| Keys | Action |
|---|---|
| `e` | Config: edit in $EDITOR (validated, changed keys confirmed; also /config edit) |
| `w` | Status: open the agent’s website (W copies its URL) |
| `Enter` | Logs / Tables: details · row |
| `f` | Logs: follow |
| `n` `p` | Tables: next / previous page |
| `r` | Reload |

Settings (instructions, tools, compaction, autonomy, messaging, host access):

| Keys | Action |
|---|---|
| `Enter` `Space` | Open the dialog (Instructions, Tools, Compaction, Visibility, Send mode) or flip the switch; Autonomous and Host access ask first |
| `e` | Edit the instructions in $EDITOR (also /instructions edit) |
| `l` | Lock / unlock that section for the agent (its sys_update_config; you can always change it) |
| `r` | Reload config and context use |

Tools dialog (/tools [filter]):

| Keys | Action |
|---|---|
| `Space` `Enter` | Enable / disable (on a group header: the whole group, locked tools skipped) |
| `v` | Show / hide in the agent’s tool list (hidden tools stay callable from code) |
| `r` | Require approval (restricted): an LLM call waits for you |
| `l` | Lock / unlock a built-in tool for the agent (locked: enable and show are fixed until unlocked) |
| `/` | Filter by name or description (Enter keeps it, Esc clears) |

Instructions dialog (/instructions):

| Keys | Action |
|---|---|
| `Ctrl+S` | Save (re-reads first; asks if they changed on the daemon meanwhile) |
| `Enter` | New line |
| `Ctrl+O` | Continue in $EDITOR |
| `Esc` | Cancel (asks when there are unsaved changes) |

Compaction dialog (/compaction [tokens\|default]):

| Keys | Action |
|---|---|
| `Enter` `e` | Set the threshold of main or an inner loop (80000 or 80k; default / inherit resets; empty keeps it) |
| `d` | Back to the default (main) or main’s threshold (an inner loop) |
| `c` | Compact that loop now (asks) |

Tasks (approvals and async tool calls; also /tasks):

| Keys | Action |
|---|---|
| `f` | Filter: pending · active (+ running) · all |
| `/` | Search tool, status, reason, loop, origin, args |
| `Enter` `Esc` | Detail (args, result, error, timestamps) · back |
| `y` `n` | Approve · reject the highlighted call waiting for approval |
| `a` | Always approve its tool (confirmed; not offered for one-time approvals) |
| `N` | Reject with feedback (the agent sees the text) |
| `A` | Approve all waiting calls (confirmed; protection overrides skipped) |

Events (this agent’s live umbilical events; every agent: Runtime › Events):

| Keys | Action |
|---|---|
| `↑` `↓` | Move; ↑ stops following (the wheel scrolls too) |
| `End` | Follow the newest again (also G) |
| `t` | Type filter, e.g. tool. -turn.delta |
| `l` | All loops / the selected loop |
| `/` | Search text (Esc clears) |
| `Space` | Pause / resume |
| `f` | Follow on / off |
| `Enter` | Full event |
| `c` | Clear |
| `x` | Reset filters |

#### 5 Fleet

| Keys | Action |
|---|---|
| `n` | New agent from a template (sets up your owner identity first if needed) |
| `i` | Owner identity: status, create, restore, unlock (I hides the banner) |
| `c` `r` `u` | With no agents and no ready identity: create, restore, unlock the owner identity |
| `↑` `↓` | Select an agent (j k) |
| `←` `→` | Select one of its loops (h l) |
| `Enter` | Open the agent › loop in Chat |
| `s` | Start the agent (a stopped one: load it into the daemon, then start it; one that needs review: review it first) |
| `H` | Hide / show stopped agents: tracked agents that are not loaded (also /agents running\|all; remembered) |
| `x` | Stop and unload the agent (asks; the .adf is kept) |
| `a` | Interrupt the turns running now (asks) |
| `w` | Open the agent’s website (starts the web server if it is stopped) |
| `W` | Copy the agent’s website URL |
| `o` | Load an .adf (Tab completes, ^R require review, ^S start after load) |
| `f` | Track a folder of agents (Tab completes folders): its reviewed autostart agents load now and at every daemon start · /untrack <dir> stops |
| `A` | Autostart: scan tracked directories (asks) |
| `r` | Refresh agents, timers, inbox and the daemon line |

#### 6 Runtime

| Keys | Action |
|---|---|
| `←` `→` | The daemon’s tabs: Status Folders Identity Sign-in Providers Usage Network Compute MCP Channels Settings Events |

Pages:

| Keys | Action |
|---|---|
| `r` | Reload the page |
| `Enter` | Identity: the identity dialog · Sign-in: the sign-in dialog |
| `c` `r` `u` | Identity: create / restore / unlock (when offered) |
| `Enter` | Folders: the selected folder’s agents (loaded, needs review, errors): review + accept + load, or load |
| `a` `d` | Folders: track a folder (its reviewed autostart agents load now) / stop tracking the selected one (asks; files untouched, optionally unload its agents) |
| `m` | Network: mesh on / off (asks) |
| `s` | Network: web server (serves agent sites, APIs, mesh delivery) start / stop (stopping asks) |
| `R` | Network: restart the web server (asks) |

Events (every agent’s live umbilical events):

| Keys | Action |
|---|---|
| `↑` `↓` | Move; ↑ stops following (the wheel scrolls too) |
| `End` | Follow the newest again (also G) |
| `t` | Type filter, e.g. tool. -turn.delta |
| `a` | All agents / the selected agent (Runtime only) |
| `l` | All loops / the selected loop |
| `/` | Search text (Esc clears) |
| `Space` | Pause / resume |
| `f` | Follow on / off |
| `Enter` | Full event |
| `c` | Clear |
| `x` | Reset filters |

#### Legend

| Glyph | Meaning |
|---|---|
| `● (*)` | Running: a turn is in progress (agent: in any of its loops; loop: in that loop) |
| `○ (o)` | Idle: loaded and waiting for work |
| `✗ (x)` | Disabled loop, or an agent in error / stopped |
| `↻ (@)` | A loop: ↻main is the agent itself, the rest are inner (side) loops |
| `!N` | N approvals or questions waiting for you |
| `«N` | N unread inbox messages |
| `in 1h` | Next timer wake of that loop |
| `● live / offline` | Header: live event stream to the daemon, or the daemon is not answering |
| `● web :7295 / ○ web off` | Header: the web server that serves agent websites / APIs (w on the tab bar, /web on\|off) |
