Manage incidents and on-call
Turn an active customer-impacting problem into an owned, traceable response that your agent sets up and you check on a proof page.
On this page
All responder configuration writes use the server preview and confirmation flow in both MCP and the CLI. Discover the action with list_write_actions, call its declared door without confirm_token, and review the complete before, proposed, required scopes and external audience. After approval repeat identical arguments, adding the returned token. CLI commands omit --confirm-token for preview and repeat with it to apply; there is no local --yes bypass.
Responder configuration creates require a stable idempotency_key in MCP or --idempotency-key in the CLI. Keep it identical in preview, confirmation and retry. Identical creates return the first committed result; a different request under the same key is refused. One-time signing and heartbeat secrets are withheld on durable replay. Updates of schedules, contact methods, escalation policies and channels require the exact current updated_at as expected_version / --expected-version. Incoming-source edits and secret rotations require the current positive source version in that field. Template versions and catalog and monitor revisions keep their numeric fences. A conflict needs a new read, preview and approval.
Use an incident when a problem needs coordination, explicit ownership, or a durable timeline. A single Issue can often be handled directly without declaring an incident.
Your agent sets up on-call schedules, escalation policies, the response catalog and runbooks, and it declares and updates incidents, through MCP or the CLI. You open an incident's proof page to check the case. Contact methods and notification channels are set in the Console.
Use link_incident_signal after creating an incident to attach error or trace evidence.
The link action is available over MCP.
Every plan
Incident response, on-call schedules, escalation policies, response services and runbooks are on every plan. Plans differ only in limits, never in which features you can use.
Ask your agent
"Create a weekly on-call schedule for the platform team, then an escalation policy that pages the on-call person first and the whole team after 10 minutes."
"Declare a severity 1 incident called
Checkout unavailable. Link issue<issue-id>and thecheckoutservice, then give me the incident link."
| Job | MCP tool or action | CLI command |
|---|---|---|
| Create, read, change or delete an on-call schedule | create_oncall_schedule, get_oncall_schedule, list_oncall_schedules, update_oncall_schedule, delete_oncall_schedule |
anectico oncall schedules create, get, list, update, delete |
| Find who is on call at a time | resolve_oncall |
anectico oncall now <schedule-id> |
| Add or remove an override | create_oncall_override, delete_oncall_override |
anectico oncall overrides create <schedule-id>, anectico oncall overrides delete <override-id> |
| Manage escalation policies | create_escalation_policy, list_escalation_policies, update_escalation_policy, delete_escalation_policy |
anectico escalation create, list, get, update, delete |
| Manage response-catalog services | create_response_service, list_response_services, get_response_service, update_response_service, delete_response_service |
anectico service-catalog create, list, get, update, delete |
| Check where a service key would page now | preview_alert_routing |
anectico service-catalog preview |
| Manage runbooks | create_runbook, list_runbooks, get_runbook, revise_runbook, list_runbook_revisions, delete_runbook |
anectico runbooks create, list, get, revise, revisions, delete |
| Declare an incident | create_incident |
anectico incidents create <title> |
| List incidents or read one case file | list_incidents, get_incident |
anectico incidents list, anectico incidents view <incident-id> |
| Acknowledge, resolve or reopen | set_incident_status |
anectico incidents acknowledge, resolve, reopen |
| Change the title, description or severity | update_incident |
anectico incidents update <incident-id> |
| Comment, attach evidence, link or unlink a signal | comment_incident, add_incident_evidence, link_incident_signal, unlink_incident_signal |
anectico incidents comment, evidence, link, unlink |
| Read ownership or toggle a checklist step | get_incident_ownership, set_incident_checklist_step |
anectico incidents ownership <incident-id>, anectico incidents checklist <incident-id> <step-id> |
| Work an incident in Slack | create_incident_slack_channel, get_incident_slack_channel |
anectico incidents slack create, link, show |
| Follow a timeline as it grows | get_incident, read again |
anectico incidents watch <incident-id> |
| Delete an incident | delete_incident |
anectico incidents delete <incident-id> --yes |
Incident, response-catalog and runbook reads need incidents:read. Declaring or changing needs
incidents:write; opening also needs channels:read so its preview can show the enabled
notification channels before confirmation. Responding (comment, evidence, status, link, checklist) needs incidents:respond,
and deleting needs incidents:delete (unlinking a signal also needs it). Escalation policies use
escalation:read, escalation:write and escalation:delete. On-call schedules use oncall:read,
oncall:write and oncall:delete, together with members:read and projects:read; contact methods
use oncall:contacts:write. A response service also needs alerts:rules:write because each service
binds one alert rule. The MCP write tools preview first and apply on a second call with a
confirm_token; see MCP tools.
What your agent gets back
get_incident returns the incident's case file: its version, ordered timeline, evidence and linked signals.
anectico incidents view also reads delivery receipts when authorized. A lifecycle write must quote the current
version, so read the case file just before you change it. Every incident row from list_incidents
and get_incident, and the target of a write receipt such as create_incident, carries the link to
the incident's proof page in its url field when the key can name the project.
Delivery receipts say which channels were notified, so reading them needs channels:read as well as
incidents:read. Without it anectico incidents view still returns the incident, with an empty
deliveries list and a redactions entry that names deliveries and that scope: the receipts were
withheld, which is not the same as nothing having been sent. An empty deliveries with no such
entry means no receipt exists. get_incident does not carry receipts today; read them with
anectico incidents view or get_notification_delivery.
Open the proof
Open the url from the result. It opens the incident's proof page at
/view/incident/:id. The page is read-only, it names its project, and it has one action, Copy
link. It shows the incident's status and severity, the attributed timeline (latest first, with a
chronological order), the response plan with the assignee, the captured ownership and checklist,
linked signals, evidence, notification receipts, the Slack channel and the retrospective. A banner
shows when a response is waiting for a linked alert and whether it is pending, retrying, or failed.
The page changes nothing: to act, ask your agent.
Prepare on-call
Before relying on escalation:
- add personal contact methods. In the Console, open Connections and notifications
(
/connections), choose the Notifications tab, and use My contact methods. See Connect tools and notification delivery; - create an on-call schedule;
- add rotations and any temporary overrides;
- create an escalation policy; and
- send a test through the complete route.
Keep schedule ownership current. An escalation policy cannot compensate for stale contact methods.
Build an on-call schedule
Ask your agent to create a schedule with the timezone where its handoffs should be interpreted. A schedule has layers. Add members to a layer in rotation order, choose the rotation length and start time, and use active-window restrictions when a layer covers only particular days or hours. Rotation lengths must be positive whole seconds representable by the server; fractional or overflowing protobuf durations are rejected. A layer has no on-call member before its start time.
Schedules and overrides belong to one project. Anectico accepts only current members of the same organization in rotation layers and overrides; if membership cannot be verified, the change fails closed. An inactive schedule never resolves an on-call person and cannot page through escalation.
Layers stack: a later active layer overrides an earlier one. To check coverage, ask who is on call
now with resolve_oncall (CLI: anectico oncall now <schedule-id>; add --at for a specific
handoff time). The answer carries the time it was checked. A missing responder at that time is
different from an unavailable or restricted read; it does not describe continuous schedule coverage.
Rotation anchors and override boundaries are interpreted in the schedule or layer's selected IANA
timezone, not in the timezone of the machine that sends the request. Anectico rejects a wall time
that does not exist during a spring-forward gap or occurs twice during a fall-back fold; choose an
unambiguous time instead. For a repeatable handoff check, give resolve_oncall a fixed instant (an
RFC3339 time with an offset). A layer with no timezone of its own follows the schedule timezone.
Use an override for a dated coverage change such as leave or a shift swap. Set both start and end;
the underlying rotation resumes when the override expires. Override windows are half-open
([start, end)) and may touch, but overlapping windows on the same schedule are rejected so
coverage never depends on an ambiguous winner.
Create escalation policies
Ask your agent to create ordered levels. Each level waits its configured delay, then notifies one or more channels, members, or on-call schedules. Every level needs at least one target. The first level's delay counts from when the alert fires (or resumes), so a first-level delay gives responders a window to acknowledge before anyone is paged; set it to 0 to page immediately. Each later level's delay counts from the previous level, and a repeat waits the repeat interval before starting again at the first level.
Use later levels to broaden the audience when an alert remains unacknowledged. Repeating escalation
requires a repeat interval and an additional-passes limit (max_escalations). For example, a limit
of 3 allows the initial pass plus up to 3 more passes through the route. Configured routes are not
delivery receipts. Attach the policy to an alert rule and test the complete route. If a policy is
deleted, rules using it fall back to their own notification channels. Once an alert starts
escalating, its levels, delays, repeat settings, and targets are frozen for that run; editing,
shrinking, deactivating, or deleting the policy affects only future alerts. Acknowledgement and
resolution are terminal for the running escalation.
Escalation policies belong to one project. Policy lists, reads, edits, deletes, alert-rule routing and on-call schedule targets are scoped to that same project; a policy ID from another project is treated as not found. A target ID must refer to a member, channel or schedule that can be verified; free text is not accepted.
An update replaces the whole definition: a level left out of the update is deleted. Read the policy or schedule immediately before you change it, and avoid changing the same record at the same time as another person, because these updates do not detect concurrent changes.
Set up the response catalog
The response catalog answers "who owns this, through which policy, with which checklist" before an alert ever fires. Ask your agent to add a service: a stable key (the same key your alerts, monitors, or an incoming-alert source name), a name, and the escalation policy it pages through. An on-call schedule and a default runbook are optional. Each service binds exactly one alert rule; creating it fails if the escalation policy does not exist, is inactive, or has no levels, and nothing is left half-created. A service key is unique among your project's live services. Delete a service to free its key for reuse. Each project has a capacity limit; see service and runbook limits.
An external monitor can be owned by a service: give it the service's key and its failures page through this service's escalation policy instead of a policy of its own, and every incident they open carries this service's ownership and runbook. Deleting a service leaves the monitors it owned unable to page until you give them another service or their own routing.
Use preview_alert_routing (CLI: anectico service-catalog preview --service-key <key>) to check
where an alert naming a given key would go right now, before you rely on it. It reports whether the
key resolves to a live service, whether a fallback key was used, who is on call, which runbook
revision an incident would snapshot, and an explicit reason when it would not page: unknown key, no
routing coverage, nobody on call, or no runbook. Call it again to recheck the same key.
A runbook is a versioned checklist: up to 50 steps, each with a title, optional markdown detail, and up to 5 reference links. Links are references to open during an incident, never commands Anectico runs. Revising a runbook writes a new immutable revision; a service's default runbook always points at the runbook, and each incident that opens for it copies whichever revision is current at that moment. Editing the runbook afterward never changes an already-declared incident's checklist.
Declare an incident
When an Issue triggers the response, ask your agent to declare the incident from that Issue. Anectico carries the Issue link into the new case file. The title should be a short customer-facing symptom. The CLI supports these choices:
anectico incidents create "Checkout unavailable" \
--description "Customers cannot complete payment" \
--severity 1 \
--link-type error_group \
--link-ref <issue-id> \
--service-key checkout
Supported incident links are alert, error_group (Issue), and anomaly. Add another supported
signal with anectico incidents link <incident-id> --type <type> --ref <signal-id>. Use the linked Issue
to reach affected customers, traces, replays, releases, and external tickets.
Naming --service-key (or passing service_key to create_incident over MCP) declares the
incident against that response-catalog service and snapshots its owner and runbook at the moment the
incident opens, the same as an automatically opened one. See
Ownership and checklist below. An unknown or deleted key is refused. An
incident opened automatically when a cataloged service's alert escalates carries that same ownership
snapshot with no extra step. Read it back with anectico incidents ownership <incident-id> (below).
Anomaly findings are promoted automatically. The case file preserves the detector explanation, expected band, observed value, score, non-content labels, and detection time even if the original finding is later removed. Labels named after recorded-content conventions and the detector's opaque series key are not copied into the case title or durable snapshot.
Work from the case file
The case file starts with its attributed timeline. Linked issue impact is labeled as the issue's full history, rather than a total for the incident window. Supporting evidence, linked signals, notification receipts, Slack information, and the retrospective sit with the case on its proof page. The retrospective keeps the case summary and structured review together without combining their records.
Assigning a responder is separate from acknowledging an incident. Your agent can hand an
incident to a current teammate, or clear the responder. This needs
incidents:respond, not incidents:write. Preparing the change needs incidents:read; a
nonempty current or proposed responder also needs members:read.
Read get_incident or anectico incidents view ID -o json first and copy its exact project,
incident UUID and decimal-string version. Prepare through execute_external_action:
{"action":"assign_incident","arguments":{"incident_id":"INCIDENT_UUID","project_id":"PROJECT_UUID","assigned_to":"MEMBER_UUID","expected_version":"7"}}
The preview changes nothing. It shows current and proposed responders, observed version, current
membership, and that a linked external responder channel may be updated. Review it, then repeat
identical arguments with confirm_token from structuredContent.preview. Changed state,
a departed target, unavailable membership or hidden prior responder refuses the change.
A departed prior teammate is identified by the stored UUID and its disposition, without an
invented current name.
anectico incidents assign INCIDENT_UUID --to MEMBER_UUID --expected-version 7 -o json
anectico incidents assign INCIDENT_UUID --clear --expected-version 7 -o json
Choose exactly one of --to and --clear. Repeat the chosen command after review with
--confirm-token TOKEN. Clear sends an explicitly present empty assigned_to; omission is
invalid. Assignment-only PATCH /api/v1/incidents/ID uses this same confirmed path. Mixing
assignment with title, description, severity or retrospective is refused. Use the exact
snake_case assignment field names shown above.
An applied receipt identifies the authenticated actor, requested_version and
post_state_available. Its subject target carries the committed after_version and
changes with /assigned_to, alongside the incident proof link and effective project.
Read the case again to verify current assignment and version. MCP omits a hidden assignment
and names its members:read redaction; the native case file reports
assigned_to_withheld: true. An explicit empty assignment means unassigned.
Clearing an actually empty assignment does not need a roster lookup. Assignment
and its history are teammate control records, not a new tracked-customer relation, and follow
the incident's organization and project deletion.
An optional stable idempotency_key (--idempotency-key) can recover original mutation
metadata within the ten-minute retry cache. Recovery reports outcome: replayed and the
original versions, assignee and receipt metadata. Recovery checks current incident read authority
and member visibility before disclosing the original result; the receipt is not current state.
Beyond that cache, a consumed version conflicts. A lost response does not establish
failure: retain the same request and key, read back before deciding, and never substitute a new
version in an old confirmed request. Generic durable recovery is not promised. The stored
change and queued consequence do not prove notification delivery.
Slack's Assign to me button also remains available in the pinned summary (see Work an incident in Slack).
Record material changes as timeline comments (comment_incident, CLI: anectico incidents comment):
- what customers are experiencing;
- current impact and affected scope;
- evidence supporting the working cause;
- mitigation and rollback actions; and
- decisions that change the response.
Ask your agent to gather cited evidence from the Issue, traces and replays, then link the relevant underlying objects rather than pasting an unsupported summary.
Attach evidence (notes, URLs, logs, traces, metrics, replays, screenshots, or documents), and keep the retrospective in the case file. Comments and evidence from teammates are append-only, so simultaneous responders do not overwrite each other. If somebody changes incident metadata or lifecycle state after you read the case file, Anectico reports a conflict and asks you to read the refreshed case file instead of silently replacing their update. The notification receipts section records each durable incident email, Slack, and webhook delivery attempt and its final status.
The CLI exposes the same strict case file. Read it immediately before a mutation, then reuse the returned version and one stable retry identity:
anectico incidents view <incident-id>
anectico incidents watch <incident-id> --timeout 30m --output json
anectico incidents acknowledge <incident-id> \
--expected-version <version> \
--idempotency-key ack-<incident-id>-v<version>
anectico deliveries list --incident <incident-id>
The incident watcher emits a current snapshot followed by newly appended
timeline events as newline-delimited JSON. Each record carries an opaque resume
cursor. After interruption, restart with --cursor <last-processed-cursor>;
Anectico verifies the cursor against the same project, incident, event ID, and
database sequence before emitting anything newer. It fails if that resume point
is absent or changed rather than silently skipping chronology. Temporary
transport, HTTP 408/429, and 5xx failures reconnect with bounded exponential
backoff and put degraded or recovered state on stderr, leaving stdout safe for an
NDJSON consumer. Existing timeline entries are skipped unless you pass
--include-existing; that fresh-history option cannot be combined with a
resume cursor.
Keep the same idempotency key when retrying the exact same request. This holds for acknowledge, resolve, and reopen, and equally for adding a comment or attaching evidence. Anectico returns the first successful response and does not add a second timeline, evidence, or notification event.
Requests are compared by value, not by the exact bytes you sent, so re-serializing an
identical retry is safe: a different key order, 1e2 where you first sent 100, 2.0
where you first sent 2, or different whitespace all still replay. A number sent as a
string is a real change, and so is any change to a value a reader of the case file would
see.
Change anything about the request and reuse the key, and you get 409 Conflict with
nothing written — a different comment body, a different evidence artifact, different
transition fields, or the same key sent by a different user or API key. A new key with an
old version conflicts too. Nothing is silently replaced, and a retry can neither hide
another responder's change nor hand you their original response. If you get this 409,
your write did not happen: read the incident back and retry from its current state. Which
key to use depends on which conflict you hit — reuse of a key with changed content needs a
new key, while a stale version needs the same key with the current version. The message
says which.
For an organization-level credential, set --project or ANECTICO_PROJECT; project-scoped credentials
remain pinned to their signed project. MCP clients can use the get_incident tool for the
equivalent strict read, and reach resolve_oncall and list_notification_deliveries through
execute_read_action.
Evidence links can be Anectico root-relative paths or absolute HTTP(S) URLs. Anectico rejects
protocol-relative links and executable schemes such as javascript: and data:.
Ownership and checklist
An incident tied to a cataloged service carries an immutable ownership snapshot — the service, its
owner schedule, escalation policy, and the default runbook's revision at the moment the incident
opened — plus a checklist of that runbook's steps. An incident is tied to a service when it opens
from one of the service's alerts (an incoming alert routed to it, or a failure of a monitor it owns)
or is declared naming the service. Later edits to the service or the runbook never
rewrite an already-open incident's snapshot; the next incident for that service picks up the change.
An incident with no cataloged service — a manually declared incident that named no --service-key,
or one opened by an alert rule no service owns, such as a monitor with its own escalation policy —
has no ownership panel on its proof page.
Toggle a checklist step as the response proceeds; toggling it back to the state it already has records nothing new. Every toggle is attributed and timestamped on the incident timeline.
anectico incidents ownership <incident-id>
anectico incidents checklist <incident-id> <step-id> --done
anectico incidents checklist <incident-id> <step-id> --undone
Reading or toggling a checklist step on an incident with no ownership snapshot fails; a
project-scoped credential reading an incident outside its own project gets the same not-found
response as an incident that does not exist. MCP clients reach the same data with
get_incident_ownership and set_incident_checklist_step.
Incidents opened from an alert
An incident opened from an alert shares its response with that alert: the alert's acknowledgment is
what stops escalation. Acknowledging or resolving such an incident — with
anectico incidents acknowledge/resolve, through the REST API or with the MCP
set_incident_status tool — records the command and applies it to the linked alert, attributed to
you. Because it acts on the alert, it needs alerts:acknowledge (to acknowledge) or alerts:resolve
(to resolve) in addition to incidents:respond; every member role has both, but a narrowly scoped
API key without them gets 403. The incident's status changes when the alert commits it, usually within seconds. Until then
every incident read carries pending_response:
state |
Meaning |
|---|---|
pending |
Sent (or about to be sent) to the alert; waiting for it to commit. |
retrying |
The alert could not be reached; Anectico keeps retrying with backoff. last_error and next_attempt_at say why and when. |
failed |
The alert refused the command or retries ran out. Nothing was acknowledged; act on the alert directly. |
The response returns 200 with the incident at its new version but its previous status; read the
incident again to see it converge. Acknowledging the alert directly converges the incident the same
way, and whichever acknowledgment commits first is the one recorded. If the alert resolves while an
acknowledgment is pending, the incident resolves and the acknowledgment is dropped — a late
acknowledgment never reopens a resolved alert. Reopening an incident is local to the case file and
does not reopen or re-arm its alert. Incidents without a linked alert keep their own lifecycle.
Work an incident in Slack
Open a Slack channel for an incident to give a responder team a pinned, always-current summary and one-click acknowledge, resolve, and assign-to-me buttons — without anyone leaving Slack.
Ask your agent to create a new channel for the incident or link one that already exists, choosing which connected Slack workspace to use. Creating twice is safe: an incident keeps at most one linked channel, and asking again returns the one it already has rather than opening a second. The one exception is a channel that stopped working — archived or deleted in Slack, or unreachable because the Slack app lost a permission. Asking again then retries: it reuses the channel if it still exists, and otherwise opens a new one (or links the channel you name).
Once linked, the channel gets a pinned summary (title, severity, status, and assignee) with the buttons the incident's current status allows. People appear by their linked Slack account; someone without a linked account is shown as an Anectico user without a linked Slack account.
- Acknowledge and Resolve apply the same transition
anectico incidents acknowledge/resolvewould, attributed to whichever Anectico user your Slack account is linked to. - Assign to me assigns the incident to that same linked user.
An open incident shows all three buttons; an acknowledged one shows Resolve and Assign to me. A resolved incident shows no buttons — the summary says who resolved it and when instead ("Resolved automatically" when its alert resolved it). Reopening is done from the incident itself (ask your agent), not from Slack; once reopened, the summary shows all three buttons again.
The pinned summary — and a short note in the channel — updates automatically as the incident is acknowledged, resolved, reopened, reassigned, or commented on from any surface (CLI, REST, MCP, or Slack), so the channel never goes stale.
If your Slack account is not linked to an Anectico user, clicking a button gets you a private message asking you to link it first — no action is taken silently on your behalf. Clicking a button without the required permission (or, for an incident that shares its response with a linked alert, without permission to acknowledge or resolve that alert) is refused the same way, privately, with the reason. So is a click the incident can no longer accept — for example, when someone else acknowledged or resolved it first — with a private reply such as "This incident is already acknowledged.", "This incident is already resolved." or "This incident is no longer available."; the pinned summary is never changed by a refused click.
The CLI reaches the same three actions:
anectico incidents slack create <incident-id> --connection-id <connection-id>
anectico incidents slack link <incident-id> --connection-id <connection-id> --channel-id <channel-id>
anectico incidents slack show <incident-id>
If Slack shows the channel but buttons stop working or a new channel won't open, the
Slack connection likely needs to be reinstalled — the app now asks for three more permissions
(managing and reading channels, and pinning messages) than an older install granted. In the Console,
open Connections and notifications (/connections). There the Slack connection is labeled
Reinstall needed rather than the generic "Needs reauth" shown for other providers. Reinstall it,
then ask your agent to create or link the channel again to resume it. get_incident_slack_channel
(CLI: anectico incidents slack show) reports the channel's state, so you can tell a channel Slack
could not reach from a missing permission.
Close deliberately
Resolve the incident when customer impact has ended and monitoring confirms recovery. Capture any remaining follow-up work in the linked ticket system. Reopen the incident if the same impact returns before the response is complete. Reopening never overwrites the response history the first time around — see Response and availability reports for how that history is reported.
Once the incident is settled, write a retrospective from its case file: what happened, its impact, what contributed to it, what went well and went wrong, and a list of follow-up action items. See Retrospectives for the full workflow, including how to publish it and track its action items from the CLI.
Verify the response path
Schedule a safe test window, confirm the expected member is on call, trigger a test alert, and verify the correct escalation levels stop after acknowledgement. Acknowledge once from the alert and once from its incident: both must stop the next escalation step, and a notification still queued when you acknowledge must not be sent. Test again after changing rotations, provider connections, or contact methods.
Escalation level delays and repeat intervals must be valid protobuf durations representable by the server. Severity filters and weekly restriction types are normalized before storage so accepted case and surrounding whitespace do not change matching behavior.
The full schedule read includes every restriction's type and start and end day and time. Resolving an instant evaluates starts, restrictions and rotation position in the owning resolver. The response returns the selected user and proven override provenance; it omits a winning layer when that provenance is unavailable. MCP get_escalation_policy and CLI escalation get return the complete policy definition. Repeating escalation requires a positive finite maximum; zero is never unlimited paging. A zero repeat interval disables repeats and requires a zero cap.
Contact updates preserve omitted type, value, label and position. An explicit position of zero moves a method first; an empty label clears it. Changing a destination resets its verification. Channel updates also preserve omitted mutable fields; omitted webhook URL or headers retain the stored credentials.
Pause and resume require the monitor’s current configuration revision. Verify or remove a custom domain using its current updated_at as expected_version / --expected-version. Signing-secret rotation uses the incoming source’s current positive version as expected_version / --expected-version. Checklist changes require the incident’s incident_version from ownership detail as expected_revision / --revision. A stale version needs a new read and preview.
Schedule, contact-method, escalation-policy, service, runbook and runbook-revision lists are pages. MCP accepts limit and cursor; the CLI accepts --limit and --cursor. Use the returned continuation token with the same filters. The default page is 100 entries, the maximum is 500, and counts describe returned entries.
The full MCP schedule definition carries an override page separately. Pass limit and cursor to get_oncall_schedule to continue it; overrides_truncated explicitly marks omitted earlier or later overrides. CLI oncall overrides list accepts the same continuation with --limit and --cursor. The schedule layers and restrictions remain complete on every page.
Catalog service deletion and an unfinished rule-release retry use the external action door. Releasing the owned rule resolves its active alerts and linked incidents and can send recovery notifications. Review the displayed current and proposed alert and incident states and recovery channels; the preview requires alerts:read, and channels:read when an active alert exists, alongside the service permissions. Attached incident Slack channels are named; event endpoints remain private to their owning credentials.
A responder-channel preview shows the selected connection, current linked channel and the complete proposed create, link, and post-and-pin request. Read the connection and destination before approving. Native channel commands use the same server confirmation token.
Manual incident creation requires a stable idempotency_key in MCP or
--idempotency-key in anectico incidents create. Both show the complete
proposal, service and runbook snapshot, required permissions and current notification
channels. After approval, repeat unchanged arguments with the confirmation token.
Matching retries recover the original metadata receipt without notifying again.
A primary signal association leaves the declaration's source as manual.
Incident metadata changes require the exact current version from get_incident or
anectico incidents view in the JSON body as expected_version. MCP assignment, metadata,
status and comment inputs all use exact nonzero decimal strings, such as "7"; copy the
returned version without converting it through a floating-point number. A stale version
requires a new read, preview and approval.
Incident and alert-rule lists return a page count and owning continuation. Use MCP limit/cursor or CLI --limit/--cursor with unchanged filters. Incident totals are absent unless counted by the owner. Alert-rule reads also page the workspace active silences separately with silences_cursor. Acknowledgment reads return the current retained snapshot, not all past transitions.
Declared account value
Use get_incident_account_value_impact or anectico incidents value-impact INCIDENT_ID for
one union of linked error activity.
That guide owns selectors, permissions, coverage, monetary interpretation and the live incident
proof card. It also explains when an incident cannot supply a monetary measurement.
Versions and approval
Comment, evidence and signal-link additions preview the exact addition first. Repeat the same arguments with confirm_token (CLI: --confirm-token) to apply. Reuse the same retry key for a comment or evidence attachment. Concurrent observations merge. Deleting an on-call schedule, override, contact method, escalation policy or notification channel, and testing a stored channel, require expected_version (CLI: --expected-version) from the current updated_at. Override deletion uses its parent schedule timestamp. Template deletion uses the current integer version. If another edit wins, re-read and review a new preview after the conflict; never substitute a new version into an old approval.