Skip to content

Events ​

One closed vocabulary of 25 event types is shared by conversations and standalone runs. Every item names its host as resource: { type: "conversation" | "run", public_id } and carries a host-local ascending sequence; not every type appears on every host.

Durable events ​

TypeCarriesMeaning
input_acceptedorigin, authored_by: { kind, handle, display_name }, answering_user_public_id, sender_conversation_public_id, deliver_at, run_public_id, task_keyAn input entered the queue
input_editeddeliver_at, reason: follow_up_bound | steer_target_settledAn input was changed, or a kernel transition re-timed it
input_deletedAn input was removed
input_materializedinput_public_id, queue_position, turn_public_id, variant_public_id, run_public_id, task_key for a consumed steerThe input became a turn, a variant and optionally a run; keep these identities to follow the execution
input_blockedblocked_reasonA drain refusal, or run_held
turn_createdanswering_user_public_idA turn exists
turn_statusThe turn's status changed
turn_variantA candidate was added, activated or edited
task_statusA task changed status
round_resultA model round settled
usageUsage was recorded for an invocation
attention_requiredreason, blocked_task_keysThe run needs a person: halt_failure, awaiting_human, deliverable_unresolved, approval_required
context_trimmedhistory_selected, history_skipped, history_skipped_reasonAssembly left history out
context_compactedmode: prune | kernel | delegate, trigger: usage | wall | overflow | manual | fallback, run_public_id, turn_public_id, summary_turn_public_id or summary_task_key, fallback_from, fallback_reasonA compaction repair was armed
fork_createdA fork exists
visibilityA visibility change
soft_deleteA turn or input was soft-deleted
turn_deletedA turn was deleted
reasoning_replay_downgradedReasoning replay was switched off for this conversation
default_runner_changedexecutor_public_id, previous_executor_public_id, byThe conversation's default runner changed; no task is readdressed
task_readdressedtask_key, role, executor_public_id, deadline_at, detailA held approval's agent delivery address was withdrawn; the person's door still answers
task_deadline_extendedtask_key, deadline_at, by, timeout_msA claimant extended its own park
access_changeddefault, entries: [{ user_public_id, level }], by, kindThe access carrier was replaced
conversation_endedreason: archived | tombstoned, conversation_public_idThe last item a tombstoned feed carries
handle_changeduser_public_id, old, newA member was renamed; the one type that rides a member's own rows and neither host's feed

Replay ​

http
GET …/events?after={cursor}&limit={n}

Opaque cursors (cvei-prefixed on conversations), ascending sequences, next_after (null on an empty page) and the committed watermark a follower freezes to bound its drain. The watermark survives item expiry; an empty page whose watermark is beyond your consumed sequence means progress is no longer replayable. The retention window is 30 days.

Cable channels ​

ChannelSubscriptionEnvelope
Conversation eventsitems: "events"{ event } — the durable items above
items: "lifecycle"{ event } narrowed to turn_status, attention_required, conversation_ended
items: "progress"{ frame } — ephemeral tool and process output and kernel timings; nothing durable, nothing replayed
TranscriptText deltas, resets and settled snapshots for a turn or task; no replay log
Run eventsThe same vocabulary at a standalone run's own address
InferenceRequest eventsThe request's execution state and usage
Executor inboxexecutor-keyedwork_available (run, task key, tool name) and work_canceled

Progress is limited to one frame per key per 250 ms per kernel process; excess cadence is acknowledged and dropped.

Payload details, the transcript and progress frame vocabularies and the retention rules are in Conversation feeds and Run feeds.

Nexus is licensed O’Saasy. The rest of the repository defaults to MIT.