Skip to content

Events

Every event name the server publishes, grouped as the vocabulary groups them, with the fields of the payload each one carries. A ? marks a field that is absent rather than null when it has no value. These are the event: names on the SSE stream described in Using the HTTP API.

Runs

  • run.created: workflow: str, title: str, position: int
  • run.started: task_id: int, node: str
  • run.updated: changed: RunChanges
  • run.reordered: position: int, previous: int
  • run.paused: no fields
  • run.resumed: no fields
  • run.cancelled: cancelled_tasks: list[int]
  • run.deleted: workflow: str, title: str
  • run.completed: node: str, task_id: int, output: Any, terminal_tasks: list[int]
  • run.failed: node: str, task_id: int, error: str, code?: Literal['join_incomplete'] | None

Tasks

  • task.enqueued: node: str, attempt: int, reason: Literal['start', 'transition', 'retry', 'rerun', 'move', 'manual_retry', 'set_status', 'join'], from_task?: int | None, payload_present: bool, branch: list[BranchFrame], arrivals?: list[int] | None
  • join.arrived: join: str, fanout_task: int, index: int, count: int, arrived: int, late: bool
  • task.started: node: str, attempt: int
  • task.done: node: str, attempt: int, transitions: list[str], terminal: bool
  • task.failed: node: str, attempt: int, error: str, retryable: bool, will_retry: bool, retry_task_id?: int | None
  • task.dead_lettered: node: str, attempt: int, error: str
  • task.waiting: node: str, request_id: int
  • task.resumed: node: str, request_id: int, waited_s: float
  • task.cancelled: node: str, from: str, reason: Literal['cancel', 'move', 'delete', 'set_status']
  • task.moved: node: str, to: str, new_task_id: int
  • task.status_set: node: str, from: str, to: str
  • task.stream: seq_from: int, seq_to: int

Submissions and requests

  • submission.accepted: node: str, submission_id: int
  • submission.rejected: node: str, errors: list[ValidationError]
  • submission.repair: node: str, turn: int, reason: Literal['nothing_submitted', 'rejected']
  • request.opened: request_id: int, mode: str, kind: str, source: str, node: str, ordinal?: int | None
  • request.answered: request_id: int, author: Literal['user', 'engine'], option_id?: str | None

Log and stats

  • log.appended: log_id: int, author: str, node: str, kind?: str | None, preview: str
  • agent.stats: node: str, attempt: int, status: Literal['ok', 'failed'], reason?: Literal['refusal', 'cancelled', 'truncated', 'timeout', 'shutdown', 'transport', 'no_submission'] | None, model?: str | None, input_tokens?: int | None, output_tokens?: int | None, total_tokens?: int | None, tool_calls?: int | None, cost?: float | None, duration_s: float, session_id?: str | None, repair_turns?: int | None, denied_permissions?: int | None

Engine

  • engine.recovered: task_ids: list[int]
  • engine.stopping: task_ids: list[int]

Workflows

  • workflow.registered: workflow: str, pool: str, target?: str | None
  • workflow.replaced: workflow: str, pool: str, target?: str | None
  • workflow.unregistered: workflow: str, task_ids: list[int]

Published but never stored

EPHEMERAL in athanore/events/names.py:

  • task.stream