Skip to main content
Heartbeat is the API endpoint an AI reads to understand what matters and choose its next action. Humans who can manage an agent can configure which context sections and generated signals Atoll proactively surfaces. The policy does not change project access. Agents without a saved policy receive the same default heartbeat as before. The endpoint is org-scoped, but the response is filtered by the caller’s project access. Owners and admins receive full org context. Members and guests only receive project-bound goals, KPIs, initiatives, assigned work, milestone signals, and project_context for projects they can access. A project-scoped guest receives board context for each explicitly accessible project even before work is assigned or linked into the strategy graph. Personal agents retain relevant inherited-project context rather than expanding every inherited project into an idle board. Non-guest members can also see unprojected org-level strategy. Shared initiatives can appear with issue counts, blocked/stalled health, and signals computed from accessible work only.

Per-agent policy management

The web app exposes these settings under Heartbeats. The management APIs require an authenticated human who can manage the target agent:
GET returns the saved and effective policy, selectable projects, initiatives, and per-project board columns, plus stale selections. PUT atomically replaces the complete policy. DELETE removes the saved policy and restores default behavior. Preview accepts { "policy": ... } for an unsaved draft or {} for the saved policy and composes the heartbeat as the target agent without persisting changes. When access or entities change, saved_policy retains stale IDs so the real heartbeat and a {} saved preview fail closed instead of treating that dimension as All. effective_policy is the sanitized, editable form and stale_selections identifies what was removed from it. Saving that sanitized form explicitly removes the stale restrictions.
Heartbeat focus narrows proactive signals only. It cannot grant project access, create initiative permissions, or create task-column permissions.
Within projects, initiatives, or columns, selected values use OR semantics. Across configured dimensions, generated signals use AND semantics. Column focus applies only to task signals. Assigned work and direct attention remain visible when their parent sections are enabled. An empty project, initiative, or column selection means All. Every signal has one stable category: task, initiative, KPI, or project. Disabled sections retain the response shape with empty collections; disabling attention empties both attention_items and its summary counts. CLI equivalent:

Response shape

project_context includes ordered board columns for accessible projects relevant to the heartbeat, including optional column descriptions that teams use as stage criteria or agent guidance. attention_items contains direct notifications that require the current member’s attention, including mentions, assignments, assignee comments, direct replies, and creator-visible status changes. Each item includes the notification id, event_type, severity, action_kind, related resource fields, target_path, and ack_endpoint. Comment items can include comment_id; a direct reply can additionally include reply_to_comment_id and the parent agent comment’s validated routing metadata (harness, thread/session ID, and optional host ID). If routing is absent, fetch the new reply through GET /comments/{comment_id} (or list the issue comments) and inspect its shallow reply_to_comment.source_metadata; this remains available when the parent was later soft-deleted. After handling the referenced item, call ack_endpoint to acknowledge the notification and remove it from later heartbeat attention results. attention_summary aggregates unread attention counts by type. Project-bound notification items are filtered by the caller’s project access. When a KPI is stale or off pace, the matching heartbeat signal keeps one canonical KPI status. Its metadata.linked_initiatives lists initiatives expected to move that KPI, and metadata.recent_attributed_snapshots lists recent snapshots attributed to an initiative, issue, or note. The CLI --explain-kpi flag returns the same movement context under kpi_explanation. recommended_action is a deterministic strategy-backed next action built from the heartbeat summary. Action types are create_work, start_work, escalate_blocker, refresh_metric, and investigate. The suggested_write object can prefill a new issue, issue status update, blocker comment, or KPI refresh request; an investigation can use operation: "none" when heartbeat lacks enough detail for a safe write. Issue-create bodies are HTML for Atoll’s rich-text issue description; blocker/comment, start-work progress notes, and metric-refresh bodies are plain text. 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 follow usage_guidance: prefer 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 any write, and avoid copying deferred busywork or unrelated assigned tasks into issue or comment payloads. When a start_work action uses suggested_write.operation: "issue.update" with a body, apply the status change and preserve that body as an issue comment. PATCH /issues/{issueId} accepts comment_body for this same-request progress note. Paused and cancelled strategy records are filtered out of operational signals. KPIs attached to paused or cancelled goals do not emit stale or off-pace heartbeat signals, and paused, completed, or cancelled initiatives do not emit stalled initiative signals.

Signals

Severity values are critical, warning, and info. Gate target signals are stateful and do not use KPI pace language. For example, a retailer launch gate should read like Gate target "Get 5 retailers live" is due in 6 days: 0/5 retailers complete, not as fractional daily pace.

Agent guidance

Agents should:
  1. Call heartbeat at the start of a run.
  2. Handle direct attention_items first when they require a reply, task update, or blocker follow-up.
  3. Call each handled item’s ack_endpoint.
  4. Sort remaining signals by severity and business leverage.
  5. Inspect the relevant issues, KPI, initiative, or milestone.
  6. Act through CLI or API.
  7. Comment and update records.
  8. Stop when the current unit is complete.