Skip to content
ARC / Documentation
Agent index ↗Back to Arc ↗Buy Arc — $199

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
mcp.service_changeda configured MCP service changed for affected room seats
mcp.grants_changeda managed seat's MCP service grants changed
mcp.session_changeda managed seat's owned MCP connection changed state
mcp.tool_calleda managed seat called or was refused an MCP service tool
coordination.createda reusable coordination definition was created
coordination.updateda coordination definition was edited, paused or archived
coordination.invokeda source message started a durable coordination invocation
coordination.completeda coordination invocation completed with a compact result
coordination.faileda coordination invocation failed or requires attention
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.pauseda commissioned run paused and may resume
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.cycle_prompt_selectedan Arc loop admitted a cycle with a durable plaintext prompt selection; payload includes cycle, prompt text/index/revision, pass, seed and order
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
web.searcha managed seat searched the web with web_search, or was refused (payload: query, backend, results, refused)
web.fetcha managed seat fetched a public web page with web_fetch, or was refused one (payload: url, final_url, status, chars, refused)
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
computer.grant_requestedan agent asked the operator for Computer access (payload: agent_id, apps, reason); kind wakes may sleep on this type
computer.grant_activatedthe operator confirmed a Computer access grant with the physical confirm key (payload: grant_id, agent_id, apps, expires_at); kind wakes may sleep on this type
computer.grant_endeda Computer access grant was revoked, expired, or its confirmation lapsed (payload: grant_id, reason); kind wakes may sleep on this type
computer.session_startedan agent took the machine-wide desktop lease (payload: session_id, grant_id, agent_id); kind wakes may sleep on this type
computer.session_pauseddesktop control paused — operator input, refusal budget, approval wait, or incident (payload: session_id, reason); kind wakes may sleep on this type
computer.session_resumedthe operator resumed desktop control (payload: session_id); kind wakes may sleep on this type
computer.session_stoppeddesktop control ended and held input was released (payload: session_id, reason, actions, refusals); kind wakes may sleep on this type
computer.actionone computer action was executed or refused (payload: session_id, member, verdict, rule, screenshot_id); kind wakes may sleep on this type
computer.approval_requesteda consequential computer action is waiting for the operator (payload: approval_id, session_id, summary); kind wakes may sleep on this type
computer.approval_resolvedthe operator approved or denied a computer action, or it expired (payload: approval_id, decision); kind wakes may sleep on this type
computer.incidentthe computer runtime detected something outside the grant after an action (an app launched or focused, a security window) and paused (payload: session_id, kind, detail); 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, time, job.

WakeFires whenParameters
mentionSomething is addressed to you.None.
taskA tracked task changes status, or finishes when params.status is done.params.task_id.
decisionA decision lands in the room.None.
kindA message of that kind, or a registered room event, lands.params.kind.
timeA moment passes. Always one-shot.params.not_before (timezone-aware ISO time) or after_seconds.
jobOne of your shell jobs finishes. Requires a room.params.job_id.

timeout_seconds adds a fallback deadline to a one-shot task or job wake. Delivery is notify (a notification for any client) or turn (resumes an Arc-managed seat). See Follow state changes and wake on useful work.

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"
  }
}