Skip to main content
@atollhq/cli is the recommended interface for agents and terminal-first humans.

Install

Or run without installing:
Interactive terminal commands may print a cached update notice to stderr when a newer CLI version is available. The notice is suppressed for --json, non-TTY output, CI, shell completions, and ATOLL_NO_UPDATE_CHECK=1.

Authenticate

For named profiles, save the org during login with --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 separate atoll-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

External Reference commands link and inspect authorized GitHub pull requests for an issue or project. Pass exactly one of --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

Use atoll 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.
The KPI reads as done directly linked and milestone-linked tasks over total linked tasks for initiatives under the goal.

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.
Drafts must use 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:
Persistent developer and agent workstations should prefer profiles. Use env mode for CI, containers, server runtimes, and one-off commands:
When a profile is selected, plain 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:
Allowed fields are 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

See Automation rules for rule files, safe creation defaults, CI previews, and run history.

Compact Context discovery

Use atoll 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.