AO

CLI reference

Every `ao` command, every flag, drawn from the source.

All commands support --help. Use that in place of re-reading this page.

Command tree

ao
├── start [project]             Start orchestrator + dashboard (auto-creates config on first run)
├── stop [project]              Stop orchestrator + dashboard
├── status                      Show all sessions with PR and CI status
├── spawn [issue]               Spawn a single agent session
├── batch-spawn <issues...>     Spawn sessions for multiple issues, with duplicate detection
├── send <session> [message…]   Send a message to a session with busy detection
├── review-check [project]      Check PRs for review comments and trigger agents
├── dashboard                   Start the web dashboard on its own
├── open [target]               Open session(s) in terminal tabs
├── verify [issue]              Mark an issue as verified (or failed) after staging check
├── doctor                      Run install, environment, and runtime health checks
├── update                      Check for updates and upgrade AO
├── init                        (deprecated — use ao start)
├── config-help                 Print the config schema and a guide
├── session                     ls, attach, kill, cleanup, restore, claim-pr, remap
├── setup                       openclaw
└── plugin                      list, search, create, install, update, uninstall

Core commands

ao start [project]

Start orchestrator agent and dashboard (auto-creates config on first run, adds projects by path/URL)

FlagDefaultPurpose
--no-dashboardSkip starting the dashboard server
--no-orchestratorSkip starting the orchestrator agent
--rebuildClean and rebuild the dashboard before starting
--devUse Next.js dev server with hot reload (monorepo only; ignored in npm installs)
--interactivePrompt to configure config settings

Positional [project] — project id, local path, or repo URL. If omitted and no config exists in cwd, AO creates agent-orchestrator.yaml.

If AO is already running, you'll get an interactive prompt to open/restart/spawn-new/quit. Non-TTY callers get info + process.exit(0).

ao stop [project]

Stop orchestrator agent and dashboard

FlagDefaultPurpose
--purge-sessionDelete the mapped OpenCode session when stopping
--allStop all running AO instances on this machine

ao status

Show all sessions with branch, activity, PR, and CI status

FlagDefaultPurpose
-p, --project <id>Filter to one project
--jsonOutput JSON
-w, --watchRefresh continuously
--interval <seconds>5Refresh interval

--watch and --json are mutually exclusive. Falls back to tmux session discovery if no config is found.

ao spawn [issue]

Spawn a single agent session

FlagDefaultPurpose
--openOpen the session in a terminal tab
--agent <name>config defaultOverride the agent plugin (claude-code, codex, cursor, aider, opencode)
--claim-pr <pr>Immediately claim an existing PR for the spawned session
--assign-on-githubAssign the claimed PR to the authenticated GitHub user
--prompt <text>Use an inline prompt instead of an issue (max 4096 chars, newlines stripped)

Positional [first] — issue identifier. The project is auto-detected from cwd.

The old two-arg form ao spawn &lt;project&gt; &lt;issue&gt; is rejected with an error. Use -p or run from inside a worktree.

ao batch-spawn <issues...>

Spawn sessions for multiple issues with duplicate detection

FlagDefaultPurpose
--openOpen sessions in terminal tabs

Skips duplicates within the batch and any issues that already have an active session.

ao send <session> [message...]

Send a message to a session with busy detection and retry

FlagDefaultPurpose
-f, --file <path>Send contents of a file instead of an inline message
--no-waitDon't wait for the session to become idle before sending
--timeout <seconds>600Max seconds to wait for idle

Positional: <session> required, [message...] variadic. One of inline message or --file is required. Long messages (>200 chars or multiline) go via tmux paste-buffer + temp file.

ao review-check [project]

Check PRs for review comments and trigger agents to address them

FlagDefaultPurpose
--dry-runShow what would happen; don't nudge agents

Checks all projects if [project] is omitted.

ao dashboard

Start the web dashboard

FlagDefaultPurpose
-p, --port <port>config port or 3000Port to listen on
--no-openDon't open the browser
--rebuildClean stale Next.js artifacts and rebuild

If the build looks stale you'll see a suggestion to run ao dashboard --rebuild.

ao open [target]

Open session(s) in terminal tabs

FlagDefaultPurpose
-w, --new-windowOpen in a new terminal window instead of a tab

Positional [target] — session name, project id, or "all". Defaults to all sessions. Falls back to printing the dashboard URL when the native terminal helper isn't available (anywhere but macOS + iTerm2).

ao verify [issue]

Mark an issue as verified (or failed) after checking the fix on staging

FlagDefaultPurpose
-p, --project <id>Required if multiple projects
--failMark as failed instead of passing
-c, --comment <msg>Custom comment to add
-l, --listList all issues with the merged-unverified label

[issue] is required unless --list is passed.

ao doctor

Run install, environment, and runtime health checks

FlagDefaultPurpose
--fixApply safe fixes for launcher and stale-temp issues
--test-notifySend a test notification through each configured notifier

Runs ao-doctor.sh for shell-level checks, then TypeScript checks (version freshness, plugin resolution, notifier connectivity). OpenClaw is the only notifier probed without side effects.

ao update

Check for updates and upgrade AO to the latest version

FlagDefaultPurpose
--skip-smokeSkip smoke tests after rebuilding (git installs only)
--smoke-onlyRun smoke tests without fetching or rebuilding (git installs only)
--checkPrint version info as JSON; don't upgrade

Behavior depends on how AO was installed — git, npm-global, pnpm-global, or unknown (manual instructions printed).

ao config-help

Show config schema and guide for creating agent-orchestrator.yaml

No flags.

ao init (deprecated)

Use ao start instead — it auto-creates config on first run.

Runs the same config-only bootstrap; kept for backward compatibility.

Session subcommands

ao session ls

List all sessions

FlagDefaultPurpose
-p, --project <id>Filter to one project
-a, --allInclude orchestrator sessions
--jsonOutput JSON

ao session attach <session>

Attach to a session's tmux window

No flags. Attaches via tmux attach-session. Only meaningful with runtime: tmux.

ao session kill <session>

Kill a session and remove its worktree

FlagDefaultPurpose
--purge-sessionDelete the mapped OpenCode session

ao session cleanup

Kill sessions where PR is merged or issue is closed

FlagDefaultPurpose
-p, --project <id>Filter to one project
--dry-runShow what would be cleaned up

ao session claim-pr <pr> [session]

Attach an existing PR to a session

FlagDefaultPurpose
--assign-on-githubAssign the PR to the authenticated user on GitHub

If [session] is omitted, falls back to AO_SESSION_NAME / AO_SESSION env vars.

ao session restore <session>

Restore a terminated or crashed session in-place

No flags. Relaunches the agent inside the same worktree and rewires session metadata.

ao session remap <session>

Re-discover and persist OpenCode session mapping for an AO session

FlagDefaultPurpose
-f, --forceOverride a stale mapping

Setup subcommands

ao setup openclaw

Connect AO notifications to an OpenClaw gateway

FlagDefaultPurpose
--url <url>OpenClaw webhook URL
--token <token>OpenClaw hooks auth token
--routing-preset <preset>urgent-only · urgent-action · all
--non-interactiveSkip prompts — auto-detect OpenClaw on localhost

Interactive mode (TTY) uses @clack/prompts. Writes to agent-orchestrator.yaml, ~/.openclaw/openclaw.json, and your shell profile. The token lands in YAML as ${OPENCLAW_HOOKS_TOKEN} — never committed raw.

Plugin subcommands

ao plugin list

List bundled marketplace plugins

FlagDefaultPurpose
--installedOnly show plugins present in your current config
--type <slot>Filter by slot: agent, runtime, tracker, scm, notifier, workspace, terminal
--refreshRe-fetch the marketplace catalog

ao plugin search <query>

Search the bundled marketplace catalog

No flags.

ao plugin create [directory]

Scaffold a new AO plugin package

FlagDefaultPurpose
--name <name>promptPlugin name
--slot <slot>promptWhich slot it implements
--description <text>promptManifest description
--author <name>promptPackage author
--package-name <name>derivednpm package name
--non-interactiveUse all flags without prompting

ao plugin install <reference>

Install a plugin into the current config

FlagDefaultPurpose
--url <url>Passed to ao setup openclaw when installing notifier-openclaw
--token <token>Same — passed through for the openclaw handshake

<reference> is a marketplace id, npm package name, or local path.

ao plugin update [reference]

Update installer-managed plugins in the current config

FlagDefaultPurpose
--allUpdate all managed plugins

Requires either [reference] or --all.

ao plugin uninstall <reference>

Remove a plugin from the current config

No flags.

Environment

A few env vars affect every command:

VariablePurpose
AO_DATA_DIROverride the ~/.agent-orchestrator base directory.
AO_LOG_LEVELerror · warn · info · debug · trace
AO_CONFIG_PATHAbsolute path to a specific agent-orchestrator.yaml. Overrides CWD-based search.
AO_SESSION_ID · AO_SESSION_NAMEAuto-set inside spawned sessions; used by claim-pr default
AO_PROJECT_IDSet by AO inside spawned sessions. Used by ao spawn to resolve the active project.
PORTNext.js dashboard port. Overrides config.port.
TERMINAL_PORTWebSocket mux server port (default 14800).
DIRECT_TERMINAL_PORTDirect PTY WebSocket port (default 14801).
NEXT_PUBLIC_TERMINAL_WS_PATHOverride the WebSocket path used by the terminal client (for reverse-proxy setups).

Agent-specific env vars are documented on each agent plugin's page.