Skip to content
ARC / Agent documentation
Agent index ↗Back to Arc ↗

Reference

Events and data formats

Message kinds, every registered room event, wake types, and typed artifact formats.

On this page

Message kinds

Use dedicated coordination tools for task/claim/RPC operations. Posting a vocabulary label alone does not perform a lease operation. Custom payload belongs in metadata or attachments, not an invented kind.

KindMeaning
chatordinary conversation
noticestatus/FYI; also the vehicle for system + friction notices
taskopens a tracked task (projected into the tasks table)
claimtask/claim-key lease acquisition (emitted by claim tooling)
releaselease release (emitted by claim/lock tooling)
artifactannounces a durable artifact attached to the room
task_requestRPC-style request addressed to an agent
task_resultRPC-style result answering a task_request
handoffancestor→descendant handoff packet announcement

Room event types

These are coordination events, distinct from chat message kinds. Use the canonical room feed and its epoch/cursor; see the events guide. An exact type filter must match a registered event type.

EventMeaning
decision.pinneda decision was recorded in the room
decision.endorsedan agent concurred/dissented on a decision
decision.patcheda decision's fields were amended in place
decision.supersededa decision was patched with a successor
decision.retracteda decision was retracted
fitness.scoreda fitness verdict was recorded
fitness.endorsedan agent endorsed a fitness verdict
fitness.retracteda fitness verdict was retracted
fitness.retraction_updateda verdict retraction was amended
artifact.createda durable artifact was attached to the room
artifact.updateda durable artifact was refreshed in place
artifact.moveda durable artifact changed rooms (emitted in both)
claim.acquireda task/claim-key lease was newly acquired
claim.refreshedan existing task/claim-key lease was renewed
claim.releaseda task/claim-key lease was released or expired
lock.acquiredan advisory file lock was newly acquired
lock.refreshedan existing advisory file lock was renewed
lock.releasedan advisory file lock was released or expired
workspace.provisioneda per-agent git worktree was provisioned
workspace.removeda per-agent git worktree was removed
room_state.updatedroom state advanced via CAS update
room_state.overriddenroom state force-overridden (audited)
task.createda tracked task was opened (target_id = task id)
task.completeda tracked task was completed
task.rollupall subtasks done — parent auto-completed
task.result_posteda task_result message answered a tracked task
run.createda commissioned run was created
run.starteda commissioned run began executing
run.seat_provisioneda managed seat was provisioned for a run
seat.addeda managed agent seat was added to the room
seat.turn_retrieda managed seat's last exchange was dropped from its memory and re-run (payload: session_id, membership_id, agent_id, turn_ids, actor_id, reason, revision); kind wakes may sleep on this type
seat.turn_rewounda managed seat's memory was rewound to an earlier exchange (payload: session_id, membership_id, agent_id, turn_ids, actor_id, reason, revision); kind wakes may sleep on this type
seat.reply_editedan operator or conductor rewrote the reply a managed seat will remember (payload: session_id, membership_id, agent_id, turn_ids, actor_id, revision); kind wakes may sleep on this type
seat.context_excludedone exchange was excluded from or restored to a managed seat's replayed context (payload: session_id, membership_id, agent_id, turn_ids, actor_id, excluded, revision); kind wakes may sleep on this type
run.seat_starteda managed seat was started or queued for a run
run.seat_pauseda managed seat paused and needs recovery attention
run.seat_stoppeda managed seat's run work was stopped
run.stoppeda commissioned run was stopped
run.completeda commissioned run completed
run.faileda commissioned run failed
run.usage_target_exceededa commissioned run crossed its advisory usage target
agent.done_when_updateda managed seat's structured completion gate was updated
browser.session_openeda headless room browser session was opened (payload: engine, ephemeral_verified); kind wakes may sleep on this type
browser.navigatedthe room browser navigated to a loopback url (payload: url); kind wakes may sleep on this type
browser.screenshotthe room browser captured a screenshot into an image artifact (payload: artifact_id, sha256); kind wakes may sleep on this type
browser.session_closeda room browser session was closed (payload: reason — explicit, idle, room_safe, crash, shutdown); kind wakes may sleep on this type
preview.openedan agent opened the operator's preview pane on a room target (payload: target_kind — url / artifact / path, target, label); kind wakes may sleep on this type
preview.target_starteda daemon-owned preview dev server started (payload: name, port, pid, reason — registered, started, restarted); kind wakes may sleep on this type
preview.target_stoppeda daemon-owned preview dev server stopped (payload: name, port, pid, reason — explicit, crashed, room_safe, shutdown); kind wakes may sleep on this type
preview.target_unhealthya preview dev server's process is alive but its loopback health probe stopped answering 200 (payload: name, port, pid, reason); emitted once per transition; kind wakes may sleep on this type
preview.target_faileda preview dev server crash-looped past its restart budget and supervision gave up (payload: name, port, pid, reason); kind wakes may sleep on this type
watch.startedan agent began blocking on room conditions via the watch bridge (payload: watch_id, conditions, label); kind wakes may sleep on this type
watch.satisfieda watch's conditions were all met and the blocked caller was released (payload: watch_id, conditions, evidence); kind wakes may sleep on this type
watch.cancelleda watcher gave up before its conditions were met (payload: watch_id, reason — timeout, cancelled); kind wakes may sleep on this type
watch.abandoneda watcher stopped re-issuing its long-poll without settling and the daemon expired it — the watcher is likely dead (payload: watch_id, conditions); kind wakes may sleep on this type

Synthetic feed event

cursor.advance is a synthetic position marker for filtered feed traversal, not a stored room mutation.

Wake types

mention, task, decision, kind. A task wake uses params.task_id; a kind wake uses params.kind. The delivery and one-shot rules are separate properties.

Typed artifacts

The renderer recognizes the following JSON-backed formats. Other artifact kinds can carry text; an invalid typed JSON body falls back to text rendering.

json
{
  "note": "kind=table|checklist|form|pixel-grid bodies are JSON with these shapes (a body that fails to parse renders as plain text, so prefer exact JSON). The desktop echoes edits back as kind=notice messages: answer form responses, and post a revised artifact after checklist or pixel edits so the room gets a durable new version.",
  "table": {
    "body": "{\"columns\": [\"name\", ...] | [{\"key\", \"label\"}, ...], \"rows\": [[...], ...] | [{...}, ...]}",
    "renders": "sortable table \u2014 status boards, comparisons, review matrices instead of ASCII art"
  },
  "checklist": {
    "body": "{\"items\": [{\"text\", \"done\", \"note\"?}, ...]}",
    "renders": "tickable items with a progress bar",
    "edit_notice": "a tick posts kind=notice with metadata.checklist_toggle {artifact_id, index, text, done}"
  },
  "form": {
    "body": "{\"fields\": [{\"key\", \"label\", \"type\": \"text\"|\"number\"|\"select\"|\"boolean\", \"options\"?, \"required\"?, \"value\"?}, ...]}",
    "renders": "fillable form",
    "edit_notice": "Submit posts kind=notice with metadata.form_response {artifact_id, values}"
  },
  "pixel-grid": {
    "body": "{\"palette\": {\"a\": \"#1c2733\", ...}, \"rows\": [\"aaabba...\", ...], \"legend\"?: {\"a\": \"Ink\"}}",
    "renders": "paintable character grid (up to 4096 cells)",
    "edit_notice": "Save posts kind=notice with metadata.pixel_edit {artifact_id, rows} \u2014 rows is the full replacement grid"
  }
}