@atollhq/cli is the recommended interface for agents and terminal-first humans.
Install
--json, non-TTY output, CI, shell completions, and ATOLL_NO_UPDATE_CHECK=1.
Authenticate
--org-id org-uuid or set it later with atoll config set-org org-uuid --profile <name>.
API keys are created in the web app:
- Agents for agent keys
- Settings > Integrations > Create API Key for integration keys
Headless local runner
Builds that include the real headless runner provide a separateatoll-runner
binary. It uses an existing named Atoll profile. The server controls identity,
intake, assignment, repository authorization, and lease eligibility.
run uses the pinned Codex SDK and runtime 0.153.4. Codex must be
authenticated. Each issue requires exactly one verified repository on its
project and a matching machine-local repo_ref binding. A local binding does
not grant server access. The runner checks the origin identity and exact base
commit, then creates an owned branch and worktree without changing the primary
checkout. Codex uses workspace-write, approval policy never, and disabled
sandbox network access. It does not use a global Codex executable as a fallback.
--dry-run performs a read-only dispatch check. Manage pause/resume in hosted
Atoll under Workspace Settings → Runners. Local intake is read-only; legacy
pause and resume commands return RUNNER_INTAKE_HOSTED_ONLY. Pausing new
intake does not cancel a held lease. The runner keeps local thread/worktree evidence
and never submits a replacement turn after an uncertain post-intent outcome.
An attention resume requires the exact retained thread and validated ownership;
there is no fallback to a new thread. Terminal branches and worktrees remain
available for inspection and are not deleted automatically.
Use atoll-runner --profile agent-a repositories remove repo-ref to remove an
unused local binding. This does not remove the server repository mapping or
local Git checkout.
run --ui enables the optional setup and diagnostics page at
http://127.0.0.1:4735; --ui-port selects another local port. ui --port 4735
opens diagnostics without starting work, including for a stopped runner or
malformed local config. Select the existing credential profile with --profile
at process start. Credentials never enter browser forms or responses.
The page lists server-authorized repositories, local bindings, Codex health,
local jobs/worktrees, uncertainty, and bounded redacted logs. Bindings use the
same runner config writer and never grant server authorization. Bind/remove
are blocked while a current job exists. Refresh, config validation, and Codex
preflight are non-destructive; there is no model retry or cleanup button.
A UI port or asset failure does not stop headless execution. Do not proxy this
loopback interface to another host. Service installation remains separate.
On macOS, service install creates a user-owned 0600 LaunchAgent with
canonical executable paths and no environment variables or credentials.
Service status and exact-owned uninstall remain available after profile or key
removal; installation remains authenticated.
Installation and package postinstall are passive unless this explicit command
is used. The parent runner closes local intake at SIGINT/SIGTERM, drains its
child with bounded TERM/KILL identity checks, and performs durable recovery
before admitting work after a possible wake. A wake may release a worker only to
finish an already durable result; stop never releases a worker. Hosted intake remains the source
of truth. See Local runner for service upgrade, uninstall,
protocol mismatch, and the source-checkout-only manual smoke. Loopback is the
normal default; repository owners can use the exact-target production
validation mode described in the internal AH-2088 runbook.
See Local runner for prerequisites, recovery, and diagnostics.
Common commands
--issue or --project; issue
selectors accept UUIDs or human identifiers, and project selectors accept
UUIDs, slugs, or exact names. Use --json to return all linked references in
the standard list envelope; the list operation is currently unpaginated. Get,
link, and unlink use the REST-compatible { externalReference } envelope.
Provider payloads and credentials are never returned.
atoll issue delivery-context <identifier> reads the authorized issue’s current
linked PR delivery context. Use --json to preserve the REST
{ deliveryContext } envelope. TTY output includes the full head SHA, current
review, actual required checks, configured workflow verification, freshness,
strongest blocker, and partial state. Required-check collection is disabled by
default; state disabled and aggregate none do not set partial. When the
server-only ATOLL_GITHUB_REQUIRED_CHECKS_READ_ENABLED=1 flag enables read-only
GitHub provider requests, partial or unavailable collection or aggregate
unknown sets partial.
atoll api get is a GET-only authenticated fallback for uncommon inspection gaps. It only accepts Atoll paths under /api/, and the CLI blocks /api/internal/*, billing, and KPI sync admin routes because some GET endpoints can run jobs or synchronize external state. Use typed commands for routine mutations and human-admin-gated workflows.
Executions and human attention
Useatoll execution to create, inspect, transition, and link evidence for an
execution. Use atoll attention to request human input and read its outcome.
See Executions and human attention for explicit
state versions, idempotency keys, and recovery after uncertain writes.
Internal KPI calculations
Use--internal-task-completion when a goal’s progress should be calculated from linked task completion instead of an external metric or manual snapshots.
KPI HTTP sync drafts
Agents can draft generic third-party KPI pollers with the CLI after a human admin has allowlisted the exact destination host. Agents cannot publish syncs or run network requests. Human admins complete approval in Atoll.GET, https, JSON, no redirects, no query strings, no request bodies, and no secret values. Use secret reference names only; admins enter the actual values in Atoll.
Global flags
Context resolution
The CLI resolves request context with these rules:
Relevant environment variables:
ATOLL_* env vars do not silently override profile context. Conflicting env values fail before network calls. Pass --profile, add repo-local .atoll/context.json, or opt into env mode.
Repo-local baseUrl values cannot reuse a saved profile key unless that same
base URL is stored in the profile. After verifying the repository and
destination host, set ATOLL_TRUST_REPO_BASE_URL=1 for a one-process explicit
override.
Repo-local context is intentionally non-secret. Commit it only when the defaults are safe for the repository:
profile, orgId, defaultProject, defaultTeam, and baseUrl. apiKey is rejected. If the file omits profile, use an explicit --profile or --env-mode; the CLI refuses to combine repo-local project/org defaults with an unrelated active profile.
Shell completion
Compact Context discovery
Useatoll context list --issue ATOLL-42 or --project project-slug to discover
bounded evidence before loading detail. Use --json for the REST envelope and
per-group continuation. See Context commands.
