Global JSON mode
atoll issue list --json --project ... or a configured default project, project_context contains the project board columns and optional column descriptions. atoll issue get --json and atoll issue view --json include status_column for the issue’s current status plus the same project_context when the issue has a project.
Diagnostics and errors are written to stderr.
Machine-readable JSON preserves API string data exactly. Human terminal output
removes ANSI/VT, control, and bidirectional formatting characters from
API-supplied strings before rendering.
Interactive update notices are also written to stderr and are suppressed in JSON, non-TTY, CI, and completion flows. Agents should read structured update state from the cli object instead of parsing human notices.
Heartbeat commands
page.next_cursor from the immediately previous page with --cursor until
page.has_more is false. Do not manufacture, skip, or replay a page cursor.
Only the terminal page contains page.ack_cursor; process all pages, then acknowledge
it with --ack.
Use --since <ack-cursor> for a delta read after a terminal cursor was
acknowledged. New, changed, and escalated groups are returned; unchanged
groups and expected waits are suppressed. Invalid cursors return 400. Stale
page cursors and unacknowledged since cursors return 409. A changed
policy, authorization set, or candidate set while paging returns
heartbeat_cursor_stale; restart without the cursor. An expired acknowledged
baseline returns a fresh response with delta.reset_required: true.
If the requested byte budget cannot fit the mandatory actionable record and
compact response envelope, the API returns 413 heartbeat_budget_too_small; no page cursor or terminal receipt advances.
Retry with a larger max_bytes through the API, or omit it to use the 16,384
byte default.
Use --signals-only for the same compact signal/attention view. Use --full
for the legacy full context; it cannot be combined with --since or
--cursor. Use --severity to narrow the returned signals.
Compact dependency groups identify the upstream blocker and release condition,
and may include an executable suggested_read. Expected waits are suppressed
for an unsatisfied dependency when the readable blocker is before its release
column and there is no active stall, threatened or overdue commitment, or
explicit deadline, gate, permission, or stale anomaly. An unowned backlog or
Todo blocker by itself is an ordinary wait and never alerts. Actionable groups
surface active stalls, threatened or overdue commitments, and explicit
anomalies; escalation metadata alone does not surface an expected wait.
For a bounded dependency investigation, use:
GET /api/orgs/{id}/issues/{issueId}/dependencies?view=chain. It returns
readable nodes, restricted-node tokens, normalized edges, release-condition
state, readiness counts, and an opaque continuation cursor. The cursor is
signed and revision-bound; if the dependency graph changes while paging, the
API returns 409 Stale dependency chain cursor. Restart without the cursor.
Compact JSON heartbeat responses include a cli object with the installed CLI
version, latest known npm version when available, and an update_available
boolean. Use --full when project_context, assigned work, and goal detail
are required.
Heartbeat JSON includes attention_items for direct current-member
notifications such as mentions, assignments, assignee comments, and
creator-visible status changes, plus attention_summary counts. Each attention
item includes an ack_endpoint; after handling the notification, call that
endpoint so it stops appearing in later heartbeat checks.
Private heartbeat JSON also includes execution_attention and
execution_attention_summary. resolved_unread contains answers to this
agent’s resolved human-attention requests. open contains current requests.
These queues remain separate from notification attention and follow the same
global 25-item and 16 KiB page budget. The CLI prints resolved answers first and
shows the exact versions needed for acknowledgement. A page acknowledgement
does not consume an execution-attention receipt.
The CLI also exposes notification acknowledgement directly:
attention ack consumes only the resolved receipt. It never resumes work.
Use the exact current versions from heartbeat or an execution readback; stale
versions and changed idempotency bodies fail without a replacement write.
Heartbeat JSON includes a top-level recommended_action when Atoll can
deterministically propose a strategy-backed next action from the current
context and signals. atoll heartbeat --signals-only --json keeps
attention_items, attention_summary, and recommended_action alongside the
filtered compact signals so polling agents do not lose direct notifications
or the action proposal.
Recommendation types include create_work, start_work, escalate_blocker, refresh_metric, and investigate. An investigation can use suggested_write.operation: "none" when heartbeat lacks enough detail for a safe write.
Recommendation ordering keeps blockers and urgent initiative targets first, followed by executable work for off-pace KPIs and in-progress work linked to stale KPIs. Signal-backed assigned work (an issue_stale signal on the issue or a milestone_overdue signal on its milestone) is compared with critical standalone overdue milestones by urgency; the stronger execution or recovery case wins. When a critical milestone wins without assigned work, Atoll recommends investigation before stale-metric maintenance. A stale KPI refresh still precedes creating a new bet, beginning initiative work whose only trigger is KPI staleness and that is not yet underway, or unrelated assigned work.
Agents should read recommended_action.usage_guidance before writing. Prefer recommended_action.suggested_write.operation when it still matches the current board, preserve KPI/initiative/initiative-target/why-now/expected-impact/first-step/success-criteria evidence in the resulting issue, KPI refresh, status update, or comment, and avoid copying deferred busywork or unrelated assigned tasks into write payloads. If a start_work recommendation uses issue.update with a body, update the status and preserve that body as an issue comment; PATCH /issues/{issueId} accepts comment_body for this same-request progress note.
Agent context
atoll agent-context emits a versioned JSON description of the CLI surface, selected profile/org context, command flags, enum values, and skill manifests. The skill_manifests field always lists the canonical Codex, Claude, and Gemini destinations. Each item includes its name, path, and exists state, including exists: false when a skill is not installed.
It also includes the same cli update metadata that heartbeat JSON returns.
The command manifest includes write flags that agents should discover instead
of hard-coding, including structured comment mention flags such as
comment add --mention-member and comment add --mention.
Skill paths
exists value for each destination.
