Node execution records
Archon captures a node’s execution facts in nodeExecutionRecordSchema. The shared public facts use nodeExecutionMetadataSchema; cache decisions use nodeCacheRecordSchema. Their source is packages/workflows/src/schemas/node-execution.ts. The generated tables below come from these schemas and the separate persisted projection, serializedNodeDataSchema in node-record-serialization.ts.
Identity and execution context
Section titled “Identity and execution context”The node descriptor identifies the authored node and its kind; path identifies its location in the run, including composed structure. An invocation identifies the logical execution, while an attempt identifies one execution attempt within it. Retrying can create another attempt without creating another invocation. invocation.loopPath identifies enclosing loop groups and iterations.
The invocation’s checkout observation captures the checkout at its first attempt. Later attempts and resumed continuations retain it; each attempt can also have its own checkout observation. An observation describes Git content, a positively established non-Git directory, or an unavailable observation. It is evidence, not a policy against dirty starts.
The binding records the provider, requested model, provider-resolved model, tier, effort, session preview, and session origin when available. Requested and resolved models are distinct: Archon does not substitute the requested model for an unreported resolved model. A session preview is for display, not a resume token. The full sessionId is excluded by executionMetadata; the durable session_id is not a public session-resume token surface.
Timing describes the attempt’s start and observed duration. Lifecycle describes start, completion, failure, skip, or suspension. Output can carry runtime text, structured output, declared output paths, and persisted preview/truncation/spill provenance. Diagnostics carry additional execution observations; they are excluded from shared execution metadata along with output and the full session ID.
Measurements and accounting
Section titled “Measurements and accounting”A measurement is either a reported value (source: provider) or explicitly unavailable. A genuine reported zero is a value; absence never becomes zero. startNodeExecution initializes availability from provider capabilities: unsupported means the provider declares no support, not_reported means support is declared but no value arrived, unknown means support is undeclared, and not_applicable means no provider call happened: the node has no provider, or the attempt failed before calling it. finishNodeExecution retains availability for omitted observations and marks rejected token or non-finite numeric observations invalid. An explicit provider tokensUnknown signal marks token accounting incomplete: at least one paid interval cannot be counted, so retries, resumed loops, and run or fan-out totals stay unavailable while cost continues to accumulate. Ordinary omitted measurements do not invalidate a token total.
The provider capability matrix is the per-provider reporting reference. Support does not guarantee a value on every result or complete nested-agent usage. Archon does not estimate cost or infer turns from event counts.
nodeCostScope maps accounting: node to own and other accounting kinds to total. Historical rows fall back to aggregate: true for total, otherwise own. This scope is a projection rule, not an execution-record field. A total restates spend that other rows may carry, so summing every event double-counts it.
The engine’s resume fold treats composed-instance terminal usage as authoritative for that instance’s scope: its inner observability rows can be missing after a crash. Other aggregate rows restate leaf usage. Use engine-produced run totals rather than constructing an independent client aggregation rule.
Cache decisions and skips
Section titled “Cache decisions and skips”Cache decisions carry no new attempt, provider binding, timing, or newly consumed spend. serializeNodeStateRecord projects them as follows. The workflows conformance test checks these action-to-event names against the serializer:
- Replayed:
node_skipped_prior_success, with the reusable output under the normal output keys. - Reset:
node_always_run_reset, with prior output and its truncation/spill provenance underprior_*keys. - Invalidated:
node_prior_cache_invalidated, with prior output, prior structured output when present,reason: stale_dependency, andinvalidating_deps.
A skipped execution instead carries a lifecycle reason and typed cause. The cause identifies condition evaluation, a condition parse error, timeout, or an upstream failure/skip with its origin. Cache records and skip lifecycle records are separate contracts.
Where the facts are exposed
Section titled “Where the facts are exposed”| Surface | Payload |
|---|---|
archon workflow get <run-id> --json | Run and terminal information; no full execution record |
archon workflow get <run-id> --json --verbose | Node summaries with execution metadata reconstructed from durable events when present |
archon workflow get <run-id> --json --verbose --events | Durable event envelopes and serialized data |
GET /api/workflows/runs/{runId} | Serialized events, with event-level cost_scope when data.cost_usd is numeric; separate run terminal/node summaries |
| Live emitter and JSONL transcript | Shared executionMetadata, excluding output, diagnostics, and the full session ID |
The terminal record’s nodes are lifecycle summaries from foldNodeEvents and runNodeStateSchema, not embedded full execution metadata. Historical rows may lack execution metadata. See the API reference for the detail endpoint and the CLI reference for command options.
Persisted data and resume compatibility
Section titled “Persisted data and resume compatibility”recordNodeState serializes a captured record into durable events and derived transcript/emitter facts. The durable projection keeps both nested execution facts and existing flat wire keys. Event envelopes supply run identity, node path, and event type; the persisted-data table below describes data, not the envelope or a full in-memory execution record.
getDagResumeSnapshot reads ordered persisted events through readNodeRecordEvent. It restores unfinished invocation metadata and completion metadata, reusable completion output, truncation and spill provenance, structured output, declared output paths, and accounting/usage. Legacy declared_fields are converted to root output paths when declared_output_paths is absent. Failed rows can contribute usage without becoming reusable success. Cache replay inherits reusable completion facts and contributes no new spend; reset and invalidation remove reusable output.
The reader reconstructs lifecycle from the event type and the corresponding error, retryability, typed failure, skip reason/cause, or suspension point. If modern execution metadata is present, its required groups must be complete and its lifecycle valid. The persisted projection also carries diagnostics; being readable does not mean every diagnostic drives resume.
fan_out_instances is a separate durable event: its data.instances restores the first valid instance snapshot for the fan-out wrapper. It is outside the node-record data schema and the tables below.
Persisted keys and event/envelope identities are compatibility contracts. Older rows must remain readable, and older binaries may open the same database. This reference changes no schema, key, or behavior. See the database reference for persistence context.
Schema field tables
Section titled “Schema field tables”Generated from the owning Zod schemas with z.toJSONSchema (input mode). Regenerate with bun run generate:node-execution-reference; verify with bun run check:node-execution-reference. The workflows conformance test enforces this block in the repository test suite.
Presence is relative to the containing object: a required child of an optional parent exists only when that parent exists. Array items use []; union rows state their alternative. unknown is unconstrained data. These tables describe fields and alternatives, not every validation constraint.
Execution record
Section titled “Execution record”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
runId | string | required | — |
| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
path | string | required | — |
| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
node | object | required | node.kind = "agent" |
node.id | string | required | node.kind = "agent" |
node.kind | "agent" | required | node.kind = "agent" |
node.source | object | required | node.kind = "agent"; node.source.kind = "inline" |
node.source.kind | "inline" | required | node.kind = "agent"; node.source.kind = "inline" |
node.source | object | required | node.kind = "agent"; node.source.kind = "command" |
node.source.kind | "command" | required | node.kind = "agent"; node.source.kind = "command" |
node.source.name | string | required | node.kind = "agent"; node.source.kind = "command" |
node | object | required | node.kind = "exec" |
node.id | string | required | node.kind = "exec" |
node.kind | "exec" | required | node.kind = "exec" |
node.runtime | "sh" | "bun" | "uv" | required | node.kind = "exec" |
node | object | required | node.kind = "loop" |
node.id | string | required | node.kind = "loop" |
node.kind | "loop" | required | node.kind = "loop" |
node.command | string | optional | node.kind = "loop" |
node | object | required | node.kind = "loop_group" |
node.id | string | required | node.kind = "loop_group" |
node.kind | "loop_group" | required | node.kind = "loop_group" |
node | object | required | node.kind = "gate" |
node.id | string | required | node.kind = "gate" |
node.kind | "gate" | required | node.kind = "gate" |
node | object | required | node.kind = "halt" |
node.id | string | required | node.kind = "halt" |
node.kind | "halt" | required | node.kind = "halt" |
node | object | required | node.kind = "wait" |
node.id | string | required | node.kind = "wait" |
node.kind | "wait" | required | node.kind = "wait" |
node | object | required | node.kind = "workflow" |
node.id | string | required | node.kind = "workflow" |
node.kind | "workflow" | required | node.kind = "workflow" |
node.fanOut | true | optional | node.kind = "workflow" |
node | object | required | node.kind = "compose_fan_out" |
node.id | string | required | node.kind = "compose_fan_out" |
node.kind | "compose_fan_out" | required | node.kind = "compose_fan_out" |
node | object | required | node.kind = "compose_fan_out_instance" |
node.kind | "compose_fan_out_instance" | required | node.kind = "compose_fan_out_instance" |
node.id | string | required | node.kind = "compose_fan_out_instance" |
invocation
Section titled “invocation”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
invocation | object | required | — |
invocation.id | string | required | — |
invocation.startedAt | string | required | — |
invocation.loopPath | array<object> | required | — |
invocation.loopPath[] | object | item | — |
invocation.loopPath[].groupId | string | required | — |
invocation.loopPath[].iteration | integer | required | — |
invocation.checkoutStart | object | optional | invocation.checkoutStart.kind = "git" |
invocation.checkoutStart.kind | "git" | required | invocation.checkoutStart.kind = "git" |
invocation.checkoutStart.sampledAt | string | required | invocation.checkoutStart.kind = "git" |
invocation.checkoutStart.commit | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.commit alternative 1 |
invocation.checkoutStart.commit | null | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.commit alternative 2 |
invocation.checkoutStart.tree | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.tree alternative 1 |
invocation.checkoutStart.tree | null | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.tree alternative 2 |
invocation.checkoutStart.worktree | object | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "clean" |
invocation.checkoutStart.worktree.status | "clean" | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "clean" |
invocation.checkoutStart.worktree | object | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.status | "dirty" | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.content | "complete" | "incomplete" | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.staged | integer | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.unstaged | integer | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.untracked | integer | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest | object | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.pointer | object | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.pointer.type | "archon_artifact" | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.pointer.run_id | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.pointer.path | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.sha256 | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.entries | integer | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.cutFromCommit | string | optional | invocation.checkoutStart.kind = "git" |
invocation.checkoutStart | object | optional | invocation.checkoutStart.kind = "not_git" |
invocation.checkoutStart.kind | "not_git" | required | invocation.checkoutStart.kind = "not_git" |
invocation.checkoutStart.sampledAt | string | required | invocation.checkoutStart.kind = "not_git" |
invocation.checkoutStart | object | optional | invocation.checkoutStart.kind = "unavailable" |
invocation.checkoutStart.kind | "unavailable" | required | invocation.checkoutStart.kind = "unavailable" |
invocation.checkoutStart.sampledAt | string | required | invocation.checkoutStart.kind = "unavailable" |
invocation.checkoutStart.reason | "git_failed" | "unsupported_backend" | "probe_failed" | required | invocation.checkoutStart.kind = "unavailable" |
attempt
Section titled “attempt”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
attempt | object | required | — |
attempt.id | string | required | — |
attempt.startedAt | string | required | — |
attempt.checkoutStart | object | optional | attempt.checkoutStart.kind = "git" |
attempt.checkoutStart.kind | "git" | required | attempt.checkoutStart.kind = "git" |
attempt.checkoutStart.sampledAt | string | required | attempt.checkoutStart.kind = "git" |
attempt.checkoutStart.commit | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.commit alternative 1 |
attempt.checkoutStart.commit | null | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.commit alternative 2 |
attempt.checkoutStart.tree | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.tree alternative 1 |
attempt.checkoutStart.tree | null | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.tree alternative 2 |
attempt.checkoutStart.worktree | object | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "clean" |
attempt.checkoutStart.worktree.status | "clean" | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "clean" |
attempt.checkoutStart.worktree | object | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.status | "dirty" | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.content | "complete" | "incomplete" | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.staged | integer | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.unstaged | integer | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.untracked | integer | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest | object | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.pointer | object | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.pointer.type | "archon_artifact" | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.pointer.run_id | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.pointer.path | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.sha256 | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.entries | integer | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.cutFromCommit | string | optional | attempt.checkoutStart.kind = "git" |
attempt.checkoutStart | object | optional | attempt.checkoutStart.kind = "not_git" |
attempt.checkoutStart.kind | "not_git" | required | attempt.checkoutStart.kind = "not_git" |
attempt.checkoutStart.sampledAt | string | required | attempt.checkoutStart.kind = "not_git" |
attempt.checkoutStart | object | optional | attempt.checkoutStart.kind = "unavailable" |
attempt.checkoutStart.kind | "unavailable" | required | attempt.checkoutStart.kind = "unavailable" |
attempt.checkoutStart.sampledAt | string | required | attempt.checkoutStart.kind = "unavailable" |
attempt.checkoutStart.reason | "git_failed" | "unsupported_backend" | "probe_failed" | required | attempt.checkoutStart.kind = "unavailable" |
binding
Section titled “binding”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
binding | object | required | — |
binding.provider | string | optional | — |
binding.model | object | optional | — |
binding.model.requested | string | optional | — |
binding.model.resolved | object | required | binding.model.resolved.source = "provider" |
binding.model.resolved.source | "provider" | required | binding.model.resolved.source = "provider" |
binding.model.resolved.value | string | required | binding.model.resolved.source = "provider" |
binding.model.resolved | object | required | binding.model.resolved.source = "unavailable" |
binding.model.resolved.source | "unavailable" | required | binding.model.resolved.source = "unavailable" |
binding.model.resolved.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | binding.model.resolved.source = "unavailable" |
binding.tier | "small" | "medium" | "large" | optional | — |
binding.effort | "minimal" | "low" | "medium" | "high" | "xhigh" | "max" | "ultra" | "persistent" | optional | — |
binding.sessionPreview | string | optional | — |
binding.sessionOrigin | "fresh" | "resumed" | "resume-failed-cold" | optional | — |
timing
Section titled “timing”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
timing | object | required | — |
timing.startedAt | string | required | — |
timing.durationMs | number | optional | — |
| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
spend | object | required | — |
spend.tokens | object | required | spend.tokens.source = "provider" |
spend.tokens.source | "provider" | required | spend.tokens.source = "provider" |
spend.tokens.value | object | required | spend.tokens.source = "provider" |
spend.tokens.value.input | number | required | spend.tokens.source = "provider" |
spend.tokens.value.output | number | required | spend.tokens.source = "provider" |
spend.tokens.value.cacheRead | number | optional | spend.tokens.source = "provider" |
spend.tokens.value.cacheWrite | number | optional | spend.tokens.source = "provider" |
spend.tokens.value.cachePartial | true | optional | spend.tokens.source = "provider" |
spend.tokens.value.total | number | optional | spend.tokens.source = "provider" |
spend.tokens.value.cost | number | optional | spend.tokens.source = "provider" |
spend.tokens | object | required | spend.tokens.source = "unavailable" |
spend.tokens.source | "unavailable" | required | spend.tokens.source = "unavailable" |
spend.tokens.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | spend.tokens.source = "unavailable" |
spend.costUsd | object | required | spend.costUsd.source = "provider" |
spend.costUsd.source | "provider" | required | spend.costUsd.source = "provider" |
spend.costUsd.value | number | required | spend.costUsd.source = "provider" |
spend.costUsd.partial | true | optional | spend.costUsd.source = "provider" |
spend.costUsd | object | required | spend.costUsd.source = "unavailable" |
spend.costUsd.source | "unavailable" | required | spend.costUsd.source = "unavailable" |
spend.costUsd.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | spend.costUsd.source = "unavailable" |
spend.stopReason | object | required | spend.stopReason.source = "provider" |
spend.stopReason.source | "provider" | required | spend.stopReason.source = "provider" |
spend.stopReason.value | string | required | spend.stopReason.source = "provider" |
spend.stopReason | object | required | spend.stopReason.source = "unavailable" |
spend.stopReason.source | "unavailable" | required | spend.stopReason.source = "unavailable" |
spend.stopReason.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | spend.stopReason.source = "unavailable" |
spend.numTurns | object | required | spend.numTurns.source = "provider" |
spend.numTurns.source | "provider" | required | spend.numTurns.source = "provider" |
spend.numTurns.value | number | required | spend.numTurns.source = "provider" |
spend.numTurns | object | required | spend.numTurns.source = "unavailable" |
spend.numTurns.source | "unavailable" | required | spend.numTurns.source = "unavailable" |
spend.numTurns.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | spend.numTurns.source = "unavailable" |
accounting
Section titled “accounting”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
accounting | "node" | "aggregate" | "instance" | "amendment" | required | — |
lifecycle
Section titled “lifecycle”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
lifecycle | object | required | lifecycle.status = "started" |
lifecycle.status | "started" | required | lifecycle.status = "started" |
lifecycle | object | required | lifecycle.status = "completed" |
lifecycle.status | "completed" | required | lifecycle.status = "completed" |
lifecycle | object | required | lifecycle.status = "failed" |
lifecycle.status | "failed" | required | lifecycle.status = "failed" |
lifecycle.error | string | required | lifecycle.status = "failed" |
lifecycle.retryable | false | optional | lifecycle.status = "failed" |
lifecycle.failureKind | "fatal" | "transient" | "unknown" | "rate_limited" | "overloaded" | "timeout" | "exec_failed" | "output_contract" | "max_iterations" | "child_failed" | "cancelled" | "config" | optional | lifecycle.status = "failed" |
lifecycle.providerFailure | object | optional | lifecycle.status = "failed" |
lifecycle.providerFailure.class | "auth" | "quota_exhausted" | "budget_exceeded" | "misconfigured" | "rate_limited" | "overloaded" | "transient" | "unknown" | required | lifecycle.status = "failed" |
lifecycle.providerFailure.retryAfterMs | integer | optional | lifecycle.status = "failed" |
lifecycle.providerFailure.resetAt | string | optional | lifecycle.status = "failed" |
lifecycle.providerFailure.evidence | string | required | lifecycle.status = "failed" |
lifecycle | object | required | lifecycle.status = "skipped" |
lifecycle.status | "skipped" | required | lifecycle.status = "skipped" |
lifecycle.reason | "prior_success" | "when_condition" | "when_condition_parse_error" | "trigger_rule" | "timeout" | required | lifecycle.status = "skipped" |
lifecycle.cause | object | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "condition" |
lifecycle.cause.kind | "condition" | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "condition" |
lifecycle.cause.expr | string | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "condition" |
lifecycle.cause | object | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "condition_parse_error" |
lifecycle.cause.kind | "condition_parse_error" | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "condition_parse_error" |
lifecycle.cause.expr | string | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "condition_parse_error" |
lifecycle.cause | object | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "timeout" |
lifecycle.cause.kind | "timeout" | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "timeout" |
lifecycle.cause | object | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "upstream_failed" |
lifecycle.cause.kind | "upstream_failed" | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "upstream_failed" |
lifecycle.cause.origin | string | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "upstream_failed" |
lifecycle.cause | object | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "upstream_skipped" |
lifecycle.cause.kind | "upstream_skipped" | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "upstream_skipped" |
lifecycle.cause.origin | string | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "upstream_skipped" |
lifecycle | object | required | lifecycle.status = "suspended" |
lifecycle.status | "suspended" | required | lifecycle.status = "suspended" |
lifecycle.point | "approval" | "interactive_loop" | "writeback" | "child_workflow" | "fan_out" | required | lifecycle.status = "suspended"; lifecycle.point alternative 1 |
lifecycle.point | "wait" | required | lifecycle.status = "suspended"; lifecycle.point alternative 2 |
output
Section titled “output”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
output | object | optional | — |
output.text | string | required | — |
output.structured | unknown | optional | — |
output.declaredOutputPaths | array<array<string>> | optional | — |
output.declaredOutputPaths[] | array<string> | item | — |
output.declaredOutputPaths[][] | string | item | — |
output.persisted | object | optional | — |
output.persisted.text | string | required | — |
output.persisted.truncated | boolean | required | — |
output.persisted.originalBytes | number | optional | — |
output.persisted.spillPath | string | optional | — |
diagnostics
Section titled “diagnostics”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
diagnostics | object | optional | — |
diagnostics.iteration | number | optional | — |
diagnostics.loopIterations | number | optional | — |
diagnostics.outputType | string | optional | — |
diagnostics.command | string | optional | — |
diagnostics.status | string | optional | — |
diagnostics.maxIterations | number | optional | — |
diagnostics.sessionSourceNodeId | string | optional | — |
diagnostics.sessionForkRequested | boolean | optional | — |
diagnostics.sessionForked | boolean | optional | — |
diagnostics.backgroundTasksIncomplete | array<string> | optional | — |
diagnostics.backgroundTasksIncomplete[] | string | item | — |
diagnostics.childRunId | string | optional | — |
diagnostics.blockedOnChildRunId | string | optional | — |
diagnostics.fanOut | boolean | optional | — |
diagnostics.identity | string | optional | — |
diagnostics.ordinal | number | optional | — |
diagnostics.approvalDecision | string | optional | — |
diagnostics.expr | string | optional | — |
diagnostics.mcpUnavailable | object | optional | — |
diagnostics.mcpUnavailable.path | string | required | — |
diagnostics.mcpUnavailable.reason | "provider_unsupported" | "config_missing" | required | — |
diagnostics.mcpUnavailable.servers | array<string> | optional | — |
diagnostics.mcpUnavailable.servers[] | string | item | — |
sessionId
Section titled “sessionId”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
sessionId | string | optional | — |
Execution metadata
Section titled “Execution metadata”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
runId | string | required | — |
| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
path | string | required | — |
| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
node | object | required | node.kind = "agent" |
node.id | string | required | node.kind = "agent" |
node.kind | "agent" | required | node.kind = "agent" |
node.source | object | required | node.kind = "agent"; node.source.kind = "inline" |
node.source.kind | "inline" | required | node.kind = "agent"; node.source.kind = "inline" |
node.source | object | required | node.kind = "agent"; node.source.kind = "command" |
node.source.kind | "command" | required | node.kind = "agent"; node.source.kind = "command" |
node.source.name | string | required | node.kind = "agent"; node.source.kind = "command" |
node | object | required | node.kind = "exec" |
node.id | string | required | node.kind = "exec" |
node.kind | "exec" | required | node.kind = "exec" |
node.runtime | "sh" | "bun" | "uv" | required | node.kind = "exec" |
node | object | required | node.kind = "loop" |
node.id | string | required | node.kind = "loop" |
node.kind | "loop" | required | node.kind = "loop" |
node.command | string | optional | node.kind = "loop" |
node | object | required | node.kind = "loop_group" |
node.id | string | required | node.kind = "loop_group" |
node.kind | "loop_group" | required | node.kind = "loop_group" |
node | object | required | node.kind = "gate" |
node.id | string | required | node.kind = "gate" |
node.kind | "gate" | required | node.kind = "gate" |
node | object | required | node.kind = "halt" |
node.id | string | required | node.kind = "halt" |
node.kind | "halt" | required | node.kind = "halt" |
node | object | required | node.kind = "wait" |
node.id | string | required | node.kind = "wait" |
node.kind | "wait" | required | node.kind = "wait" |
node | object | required | node.kind = "workflow" |
node.id | string | required | node.kind = "workflow" |
node.kind | "workflow" | required | node.kind = "workflow" |
node.fanOut | true | optional | node.kind = "workflow" |
node | object | required | node.kind = "compose_fan_out" |
node.id | string | required | node.kind = "compose_fan_out" |
node.kind | "compose_fan_out" | required | node.kind = "compose_fan_out" |
node | object | required | node.kind = "compose_fan_out_instance" |
node.kind | "compose_fan_out_instance" | required | node.kind = "compose_fan_out_instance" |
node.id | string | required | node.kind = "compose_fan_out_instance" |
invocation
Section titled “invocation”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
invocation | object | required | — |
invocation.id | string | required | — |
invocation.startedAt | string | required | — |
invocation.loopPath | array<object> | required | — |
invocation.loopPath[] | object | item | — |
invocation.loopPath[].groupId | string | required | — |
invocation.loopPath[].iteration | integer | required | — |
invocation.checkoutStart | object | optional | invocation.checkoutStart.kind = "git" |
invocation.checkoutStart.kind | "git" | required | invocation.checkoutStart.kind = "git" |
invocation.checkoutStart.sampledAt | string | required | invocation.checkoutStart.kind = "git" |
invocation.checkoutStart.commit | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.commit alternative 1 |
invocation.checkoutStart.commit | null | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.commit alternative 2 |
invocation.checkoutStart.tree | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.tree alternative 1 |
invocation.checkoutStart.tree | null | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.tree alternative 2 |
invocation.checkoutStart.worktree | object | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "clean" |
invocation.checkoutStart.worktree.status | "clean" | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "clean" |
invocation.checkoutStart.worktree | object | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.status | "dirty" | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.content | "complete" | "incomplete" | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.staged | integer | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.unstaged | integer | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.untracked | integer | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest | object | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.pointer | object | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.pointer.type | "archon_artifact" | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.pointer.run_id | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.pointer.path | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.sha256 | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.entries | integer | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.cutFromCommit | string | optional | invocation.checkoutStart.kind = "git" |
invocation.checkoutStart | object | optional | invocation.checkoutStart.kind = "not_git" |
invocation.checkoutStart.kind | "not_git" | required | invocation.checkoutStart.kind = "not_git" |
invocation.checkoutStart.sampledAt | string | required | invocation.checkoutStart.kind = "not_git" |
invocation.checkoutStart | object | optional | invocation.checkoutStart.kind = "unavailable" |
invocation.checkoutStart.kind | "unavailable" | required | invocation.checkoutStart.kind = "unavailable" |
invocation.checkoutStart.sampledAt | string | required | invocation.checkoutStart.kind = "unavailable" |
invocation.checkoutStart.reason | "git_failed" | "unsupported_backend" | "probe_failed" | required | invocation.checkoutStart.kind = "unavailable" |
attempt
Section titled “attempt”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
attempt | object | required | — |
attempt.id | string | required | — |
attempt.startedAt | string | required | — |
attempt.checkoutStart | object | optional | attempt.checkoutStart.kind = "git" |
attempt.checkoutStart.kind | "git" | required | attempt.checkoutStart.kind = "git" |
attempt.checkoutStart.sampledAt | string | required | attempt.checkoutStart.kind = "git" |
attempt.checkoutStart.commit | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.commit alternative 1 |
attempt.checkoutStart.commit | null | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.commit alternative 2 |
attempt.checkoutStart.tree | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.tree alternative 1 |
attempt.checkoutStart.tree | null | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.tree alternative 2 |
attempt.checkoutStart.worktree | object | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "clean" |
attempt.checkoutStart.worktree.status | "clean" | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "clean" |
attempt.checkoutStart.worktree | object | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.status | "dirty" | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.content | "complete" | "incomplete" | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.staged | integer | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.unstaged | integer | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.untracked | integer | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest | object | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.pointer | object | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.pointer.type | "archon_artifact" | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.pointer.run_id | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.pointer.path | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.sha256 | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.entries | integer | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.cutFromCommit | string | optional | attempt.checkoutStart.kind = "git" |
attempt.checkoutStart | object | optional | attempt.checkoutStart.kind = "not_git" |
attempt.checkoutStart.kind | "not_git" | required | attempt.checkoutStart.kind = "not_git" |
attempt.checkoutStart.sampledAt | string | required | attempt.checkoutStart.kind = "not_git" |
attempt.checkoutStart | object | optional | attempt.checkoutStart.kind = "unavailable" |
attempt.checkoutStart.kind | "unavailable" | required | attempt.checkoutStart.kind = "unavailable" |
attempt.checkoutStart.sampledAt | string | required | attempt.checkoutStart.kind = "unavailable" |
attempt.checkoutStart.reason | "git_failed" | "unsupported_backend" | "probe_failed" | required | attempt.checkoutStart.kind = "unavailable" |
binding
Section titled “binding”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
binding | object | required | — |
binding.provider | string | optional | — |
binding.model | object | optional | — |
binding.model.requested | string | optional | — |
binding.model.resolved | object | required | binding.model.resolved.source = "provider" |
binding.model.resolved.source | "provider" | required | binding.model.resolved.source = "provider" |
binding.model.resolved.value | string | required | binding.model.resolved.source = "provider" |
binding.model.resolved | object | required | binding.model.resolved.source = "unavailable" |
binding.model.resolved.source | "unavailable" | required | binding.model.resolved.source = "unavailable" |
binding.model.resolved.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | binding.model.resolved.source = "unavailable" |
binding.tier | "small" | "medium" | "large" | optional | — |
binding.effort | "minimal" | "low" | "medium" | "high" | "xhigh" | "max" | "ultra" | "persistent" | optional | — |
binding.sessionPreview | string | optional | — |
binding.sessionOrigin | "fresh" | "resumed" | "resume-failed-cold" | optional | — |
timing
Section titled “timing”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
timing | object | required | — |
timing.startedAt | string | required | — |
timing.durationMs | number | optional | — |
| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
spend | object | required | — |
spend.tokens | object | required | spend.tokens.source = "provider" |
spend.tokens.source | "provider" | required | spend.tokens.source = "provider" |
spend.tokens.value | object | required | spend.tokens.source = "provider" |
spend.tokens.value.input | number | required | spend.tokens.source = "provider" |
spend.tokens.value.output | number | required | spend.tokens.source = "provider" |
spend.tokens.value.cacheRead | number | optional | spend.tokens.source = "provider" |
spend.tokens.value.cacheWrite | number | optional | spend.tokens.source = "provider" |
spend.tokens.value.cachePartial | true | optional | spend.tokens.source = "provider" |
spend.tokens.value.total | number | optional | spend.tokens.source = "provider" |
spend.tokens.value.cost | number | optional | spend.tokens.source = "provider" |
spend.tokens | object | required | spend.tokens.source = "unavailable" |
spend.tokens.source | "unavailable" | required | spend.tokens.source = "unavailable" |
spend.tokens.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | spend.tokens.source = "unavailable" |
spend.costUsd | object | required | spend.costUsd.source = "provider" |
spend.costUsd.source | "provider" | required | spend.costUsd.source = "provider" |
spend.costUsd.value | number | required | spend.costUsd.source = "provider" |
spend.costUsd.partial | true | optional | spend.costUsd.source = "provider" |
spend.costUsd | object | required | spend.costUsd.source = "unavailable" |
spend.costUsd.source | "unavailable" | required | spend.costUsd.source = "unavailable" |
spend.costUsd.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | spend.costUsd.source = "unavailable" |
spend.stopReason | object | required | spend.stopReason.source = "provider" |
spend.stopReason.source | "provider" | required | spend.stopReason.source = "provider" |
spend.stopReason.value | string | required | spend.stopReason.source = "provider" |
spend.stopReason | object | required | spend.stopReason.source = "unavailable" |
spend.stopReason.source | "unavailable" | required | spend.stopReason.source = "unavailable" |
spend.stopReason.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | spend.stopReason.source = "unavailable" |
spend.numTurns | object | required | spend.numTurns.source = "provider" |
spend.numTurns.source | "provider" | required | spend.numTurns.source = "provider" |
spend.numTurns.value | number | required | spend.numTurns.source = "provider" |
spend.numTurns | object | required | spend.numTurns.source = "unavailable" |
spend.numTurns.source | "unavailable" | required | spend.numTurns.source = "unavailable" |
spend.numTurns.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | spend.numTurns.source = "unavailable" |
accounting
Section titled “accounting”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
accounting | "node" | "aggregate" | "instance" | "amendment" | required | — |
lifecycle
Section titled “lifecycle”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
lifecycle | object | required | lifecycle.status = "started" |
lifecycle.status | "started" | required | lifecycle.status = "started" |
lifecycle | object | required | lifecycle.status = "completed" |
lifecycle.status | "completed" | required | lifecycle.status = "completed" |
lifecycle | object | required | lifecycle.status = "failed" |
lifecycle.status | "failed" | required | lifecycle.status = "failed" |
lifecycle.error | string | required | lifecycle.status = "failed" |
lifecycle.retryable | false | optional | lifecycle.status = "failed" |
lifecycle.failureKind | "fatal" | "transient" | "unknown" | "rate_limited" | "overloaded" | "timeout" | "exec_failed" | "output_contract" | "max_iterations" | "child_failed" | "cancelled" | "config" | optional | lifecycle.status = "failed" |
lifecycle.providerFailure | object | optional | lifecycle.status = "failed" |
lifecycle.providerFailure.class | "auth" | "quota_exhausted" | "budget_exceeded" | "misconfigured" | "rate_limited" | "overloaded" | "transient" | "unknown" | required | lifecycle.status = "failed" |
lifecycle.providerFailure.retryAfterMs | integer | optional | lifecycle.status = "failed" |
lifecycle.providerFailure.resetAt | string | optional | lifecycle.status = "failed" |
lifecycle.providerFailure.evidence | string | required | lifecycle.status = "failed" |
lifecycle | object | required | lifecycle.status = "skipped" |
lifecycle.status | "skipped" | required | lifecycle.status = "skipped" |
lifecycle.reason | "prior_success" | "when_condition" | "when_condition_parse_error" | "trigger_rule" | "timeout" | required | lifecycle.status = "skipped" |
lifecycle.cause | object | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "condition" |
lifecycle.cause.kind | "condition" | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "condition" |
lifecycle.cause.expr | string | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "condition" |
lifecycle.cause | object | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "condition_parse_error" |
lifecycle.cause.kind | "condition_parse_error" | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "condition_parse_error" |
lifecycle.cause.expr | string | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "condition_parse_error" |
lifecycle.cause | object | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "timeout" |
lifecycle.cause.kind | "timeout" | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "timeout" |
lifecycle.cause | object | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "upstream_failed" |
lifecycle.cause.kind | "upstream_failed" | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "upstream_failed" |
lifecycle.cause.origin | string | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "upstream_failed" |
lifecycle.cause | object | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "upstream_skipped" |
lifecycle.cause.kind | "upstream_skipped" | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "upstream_skipped" |
lifecycle.cause.origin | string | required | lifecycle.status = "skipped"; lifecycle.cause.kind = "upstream_skipped" |
lifecycle | object | required | lifecycle.status = "suspended" |
lifecycle.status | "suspended" | required | lifecycle.status = "suspended" |
lifecycle.point | "approval" | "interactive_loop" | "writeback" | "child_workflow" | "fan_out" | required | lifecycle.status = "suspended"; lifecycle.point alternative 1 |
lifecycle.point | "wait" | required | lifecycle.status = "suspended"; lifecycle.point alternative 2 |
Cache record
Section titled “Cache record”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
runId | string | required | — |
path | string | required | — |
node | object | required | node.kind = "agent" |
node.id | string | required | node.kind = "agent" |
node.kind | "agent" | required | node.kind = "agent" |
node.source | object | required | node.kind = "agent"; node.source.kind = "inline" |
node.source.kind | "inline" | required | node.kind = "agent"; node.source.kind = "inline" |
node.source | object | required | node.kind = "agent"; node.source.kind = "command" |
node.source.kind | "command" | required | node.kind = "agent"; node.source.kind = "command" |
node.source.name | string | required | node.kind = "agent"; node.source.kind = "command" |
node | object | required | node.kind = "exec" |
node.id | string | required | node.kind = "exec" |
node.kind | "exec" | required | node.kind = "exec" |
node.runtime | "sh" | "bun" | "uv" | required | node.kind = "exec" |
node | object | required | node.kind = "loop" |
node.id | string | required | node.kind = "loop" |
node.kind | "loop" | required | node.kind = "loop" |
node.command | string | optional | node.kind = "loop" |
node | object | required | node.kind = "loop_group" |
node.id | string | required | node.kind = "loop_group" |
node.kind | "loop_group" | required | node.kind = "loop_group" |
node | object | required | node.kind = "gate" |
node.id | string | required | node.kind = "gate" |
node.kind | "gate" | required | node.kind = "gate" |
node | object | required | node.kind = "halt" |
node.id | string | required | node.kind = "halt" |
node.kind | "halt" | required | node.kind = "halt" |
node | object | required | node.kind = "wait" |
node.id | string | required | node.kind = "wait" |
node.kind | "wait" | required | node.kind = "wait" |
node | object | required | node.kind = "workflow" |
node.id | string | required | node.kind = "workflow" |
node.kind | "workflow" | required | node.kind = "workflow" |
node.fanOut | true | optional | node.kind = "workflow" |
node | object | required | node.kind = "compose_fan_out" |
node.id | string | required | node.kind = "compose_fan_out" |
node.kind | "compose_fan_out" | required | node.kind = "compose_fan_out" |
node | object | required | node.kind = "compose_fan_out_instance" |
node.kind | "compose_fan_out_instance" | required | node.kind = "compose_fan_out_instance" |
node.id | string | required | node.kind = "compose_fan_out_instance" |
cache | object | required | cache.action = "replayed" |
cache.action | "replayed" | required | cache.action = "replayed" |
cache.output | object | required | cache.action = "replayed" |
cache.output.text | string | required | cache.action = "replayed" |
cache.output.structured | unknown | optional | cache.action = "replayed" |
cache.output.declaredOutputPaths | array<array<string>> | optional | cache.action = "replayed" |
cache.output.declaredOutputPaths[] | array<string> | item | cache.action = "replayed" |
cache.output.declaredOutputPaths[][] | string | item | cache.action = "replayed" |
cache.output.persisted | object | optional | cache.action = "replayed" |
cache.output.persisted.text | string | required | cache.action = "replayed" |
cache.output.persisted.truncated | boolean | required | cache.action = "replayed" |
cache.output.persisted.originalBytes | number | optional | cache.action = "replayed" |
cache.output.persisted.spillPath | string | optional | cache.action = "replayed" |
cache | object | required | cache.action = "reset" |
cache.action | "reset" | required | cache.action = "reset" |
cache.prior | object | required | cache.action = "reset" |
cache.prior.text | string | required | cache.action = "reset" |
cache.prior.structured | unknown | optional | cache.action = "reset" |
cache.prior.declaredOutputPaths | array<array<string>> | optional | cache.action = "reset" |
cache.prior.declaredOutputPaths[] | array<string> | item | cache.action = "reset" |
cache.prior.declaredOutputPaths[][] | string | item | cache.action = "reset" |
cache.prior.persisted | object | optional | cache.action = "reset" |
cache.prior.persisted.text | string | required | cache.action = "reset" |
cache.prior.persisted.truncated | boolean | required | cache.action = "reset" |
cache.prior.persisted.originalBytes | number | optional | cache.action = "reset" |
cache.prior.persisted.spillPath | string | optional | cache.action = "reset" |
cache | object | required | cache.action = "invalidated" |
cache.action | "invalidated" | required | cache.action = "invalidated" |
cache.prior | object | required | cache.action = "invalidated" |
cache.prior.text | string | required | cache.action = "invalidated" |
cache.prior.structured | unknown | optional | cache.action = "invalidated" |
cache.prior.declaredOutputPaths | array<array<string>> | optional | cache.action = "invalidated" |
cache.prior.declaredOutputPaths[] | array<string> | item | cache.action = "invalidated" |
cache.prior.declaredOutputPaths[][] | string | item | cache.action = "invalidated" |
cache.prior.persisted | object | optional | cache.action = "invalidated" |
cache.prior.persisted.text | string | required | cache.action = "invalidated" |
cache.prior.persisted.truncated | boolean | required | cache.action = "invalidated" |
cache.prior.persisted.originalBytes | number | optional | cache.action = "invalidated" |
cache.prior.persisted.spillPath | string | optional | cache.action = "invalidated" |
cache.invalidatingDeps | array<string> | required | cache.action = "invalidated" |
cache.invalidatingDeps[] | string | item | cache.action = "invalidated" |
Persisted event data
Section titled “Persisted event data”| Field path | Type / values | Presence | Alternative |
|---|---|---|---|
node | object | optional | node.kind = "agent" |
node.id | string | required | node.kind = "agent" |
node.kind | "agent" | required | node.kind = "agent" |
node.source | object | required | node.kind = "agent"; node.source.kind = "inline" |
node.source.kind | "inline" | required | node.kind = "agent"; node.source.kind = "inline" |
node.source | object | required | node.kind = "agent"; node.source.kind = "command" |
node.source.kind | "command" | required | node.kind = "agent"; node.source.kind = "command" |
node.source.name | string | required | node.kind = "agent"; node.source.kind = "command" |
node | object | optional | node.kind = "exec" |
node.id | string | required | node.kind = "exec" |
node.kind | "exec" | required | node.kind = "exec" |
node.runtime | "sh" | "bun" | "uv" | required | node.kind = "exec" |
node | object | optional | node.kind = "loop" |
node.id | string | required | node.kind = "loop" |
node.kind | "loop" | required | node.kind = "loop" |
node.command | string | optional | node.kind = "loop" |
node | object | optional | node.kind = "loop_group" |
node.id | string | required | node.kind = "loop_group" |
node.kind | "loop_group" | required | node.kind = "loop_group" |
node | object | optional | node.kind = "gate" |
node.id | string | required | node.kind = "gate" |
node.kind | "gate" | required | node.kind = "gate" |
node | object | optional | node.kind = "halt" |
node.id | string | required | node.kind = "halt" |
node.kind | "halt" | required | node.kind = "halt" |
node | object | optional | node.kind = "wait" |
node.id | string | required | node.kind = "wait" |
node.kind | "wait" | required | node.kind = "wait" |
node | object | optional | node.kind = "workflow" |
node.id | string | required | node.kind = "workflow" |
node.kind | "workflow" | required | node.kind = "workflow" |
node.fanOut | true | optional | node.kind = "workflow" |
node | object | optional | node.kind = "compose_fan_out" |
node.id | string | required | node.kind = "compose_fan_out" |
node.kind | "compose_fan_out" | required | node.kind = "compose_fan_out" |
node | object | optional | node.kind = "compose_fan_out_instance" |
node.kind | "compose_fan_out_instance" | required | node.kind = "compose_fan_out_instance" |
node.id | string | required | node.kind = "compose_fan_out_instance" |
invocation | object | optional | — |
invocation.id | string | required | — |
invocation.startedAt | string | required | — |
invocation.loopPath | array<object> | required | — |
invocation.loopPath[] | object | item | — |
invocation.loopPath[].groupId | string | required | — |
invocation.loopPath[].iteration | integer | required | — |
invocation.checkoutStart | object | optional | invocation.checkoutStart.kind = "git" |
invocation.checkoutStart.kind | "git" | required | invocation.checkoutStart.kind = "git" |
invocation.checkoutStart.sampledAt | string | required | invocation.checkoutStart.kind = "git" |
invocation.checkoutStart.commit | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.commit alternative 1 |
invocation.checkoutStart.commit | null | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.commit alternative 2 |
invocation.checkoutStart.tree | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.tree alternative 1 |
invocation.checkoutStart.tree | null | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.tree alternative 2 |
invocation.checkoutStart.worktree | object | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "clean" |
invocation.checkoutStart.worktree.status | "clean" | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "clean" |
invocation.checkoutStart.worktree | object | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.status | "dirty" | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.content | "complete" | "incomplete" | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.staged | integer | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.unstaged | integer | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.untracked | integer | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest | object | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.pointer | object | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.pointer.type | "archon_artifact" | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.pointer.run_id | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.pointer.path | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.sha256 | string | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.worktree.manifest.entries | integer | required | invocation.checkoutStart.kind = "git"; invocation.checkoutStart.worktree.status = "dirty" |
invocation.checkoutStart.cutFromCommit | string | optional | invocation.checkoutStart.kind = "git" |
invocation.checkoutStart | object | optional | invocation.checkoutStart.kind = "not_git" |
invocation.checkoutStart.kind | "not_git" | required | invocation.checkoutStart.kind = "not_git" |
invocation.checkoutStart.sampledAt | string | required | invocation.checkoutStart.kind = "not_git" |
invocation.checkoutStart | object | optional | invocation.checkoutStart.kind = "unavailable" |
invocation.checkoutStart.kind | "unavailable" | required | invocation.checkoutStart.kind = "unavailable" |
invocation.checkoutStart.sampledAt | string | required | invocation.checkoutStart.kind = "unavailable" |
invocation.checkoutStart.reason | "git_failed" | "unsupported_backend" | "probe_failed" | required | invocation.checkoutStart.kind = "unavailable" |
attempt | object | optional | — |
attempt.id | string | required | — |
attempt.startedAt | string | required | — |
attempt.checkoutStart | object | optional | attempt.checkoutStart.kind = "git" |
attempt.checkoutStart.kind | "git" | required | attempt.checkoutStart.kind = "git" |
attempt.checkoutStart.sampledAt | string | required | attempt.checkoutStart.kind = "git" |
attempt.checkoutStart.commit | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.commit alternative 1 |
attempt.checkoutStart.commit | null | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.commit alternative 2 |
attempt.checkoutStart.tree | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.tree alternative 1 |
attempt.checkoutStart.tree | null | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.tree alternative 2 |
attempt.checkoutStart.worktree | object | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "clean" |
attempt.checkoutStart.worktree.status | "clean" | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "clean" |
attempt.checkoutStart.worktree | object | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.status | "dirty" | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.content | "complete" | "incomplete" | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.staged | integer | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.unstaged | integer | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.untracked | integer | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest | object | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.pointer | object | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.pointer.type | "archon_artifact" | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.pointer.run_id | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.pointer.path | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.sha256 | string | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.worktree.manifest.entries | integer | required | attempt.checkoutStart.kind = "git"; attempt.checkoutStart.worktree.status = "dirty" |
attempt.checkoutStart.cutFromCommit | string | optional | attempt.checkoutStart.kind = "git" |
attempt.checkoutStart | object | optional | attempt.checkoutStart.kind = "not_git" |
attempt.checkoutStart.kind | "not_git" | required | attempt.checkoutStart.kind = "not_git" |
attempt.checkoutStart.sampledAt | string | required | attempt.checkoutStart.kind = "not_git" |
attempt.checkoutStart | object | optional | attempt.checkoutStart.kind = "unavailable" |
attempt.checkoutStart.kind | "unavailable" | required | attempt.checkoutStart.kind = "unavailable" |
attempt.checkoutStart.sampledAt | string | required | attempt.checkoutStart.kind = "unavailable" |
attempt.checkoutStart.reason | "git_failed" | "unsupported_backend" | "probe_failed" | required | attempt.checkoutStart.kind = "unavailable" |
binding | object | optional | — |
binding.provider | string | optional | — |
binding.model | object | optional | — |
binding.model.requested | string | optional | — |
binding.model.resolved | object | required | binding.model.resolved.source = "provider" |
binding.model.resolved.source | "provider" | required | binding.model.resolved.source = "provider" |
binding.model.resolved.value | string | required | binding.model.resolved.source = "provider" |
binding.model.resolved | object | required | binding.model.resolved.source = "unavailable" |
binding.model.resolved.source | "unavailable" | required | binding.model.resolved.source = "unavailable" |
binding.model.resolved.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | binding.model.resolved.source = "unavailable" |
binding.tier | "small" | "medium" | "large" | optional | — |
binding.effort | "minimal" | "low" | "medium" | "high" | "xhigh" | "max" | "ultra" | "persistent" | optional | — |
binding.sessionPreview | string | optional | — |
binding.sessionOrigin | "fresh" | "resumed" | "resume-failed-cold" | optional | — |
timing | object | optional | — |
timing.startedAt | string | required | — |
timing.durationMs | number | optional | — |
spend | object | optional | — |
spend.tokens | object | required | spend.tokens.source = "provider" |
spend.tokens.source | "provider" | required | spend.tokens.source = "provider" |
spend.tokens.value | object | required | spend.tokens.source = "provider" |
spend.tokens.value.input | number | required | spend.tokens.source = "provider" |
spend.tokens.value.output | number | required | spend.tokens.source = "provider" |
spend.tokens.value.cacheRead | number | optional | spend.tokens.source = "provider" |
spend.tokens.value.cacheWrite | number | optional | spend.tokens.source = "provider" |
spend.tokens.value.cachePartial | true | optional | spend.tokens.source = "provider" |
spend.tokens.value.total | number | optional | spend.tokens.source = "provider" |
spend.tokens.value.cost | number | optional | spend.tokens.source = "provider" |
spend.tokens | object | required | spend.tokens.source = "unavailable" |
spend.tokens.source | "unavailable" | required | spend.tokens.source = "unavailable" |
spend.tokens.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | spend.tokens.source = "unavailable" |
spend.costUsd | object | required | spend.costUsd.source = "provider" |
spend.costUsd.source | "provider" | required | spend.costUsd.source = "provider" |
spend.costUsd.value | number | required | spend.costUsd.source = "provider" |
spend.costUsd.partial | true | optional | spend.costUsd.source = "provider" |
spend.costUsd | object | required | spend.costUsd.source = "unavailable" |
spend.costUsd.source | "unavailable" | required | spend.costUsd.source = "unavailable" |
spend.costUsd.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | spend.costUsd.source = "unavailable" |
spend.stopReason | object | required | spend.stopReason.source = "provider" |
spend.stopReason.source | "provider" | required | spend.stopReason.source = "provider" |
spend.stopReason.value | string | required | spend.stopReason.source = "provider" |
spend.stopReason | object | required | spend.stopReason.source = "unavailable" |
spend.stopReason.source | "unavailable" | required | spend.stopReason.source = "unavailable" |
spend.stopReason.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | spend.stopReason.source = "unavailable" |
spend.numTurns | object | required | spend.numTurns.source = "provider" |
spend.numTurns.source | "provider" | required | spend.numTurns.source = "provider" |
spend.numTurns.value | number | required | spend.numTurns.source = "provider" |
spend.numTurns | object | required | spend.numTurns.source = "unavailable" |
spend.numTurns.source | "unavailable" | required | spend.numTurns.source = "unavailable" |
spend.numTurns.reason | "unsupported" | "not_reported" | "unknown" | "not_applicable" | "invalid" | "incomplete" | required | spend.numTurns.source = "unavailable" |
accounting | "node" | "aggregate" | "instance" | "amendment" | optional | — |
type | string | optional | — |
command | string | optional | command alternative 1 |
command | null | optional | command alternative 2 |
runtime | string | optional | — |
provider | string | optional | — |
model | string | optional | — |
tier | "small" | "medium" | "large" | optional | — |
effort | "minimal" | "low" | "medium" | "high" | "xhigh" | "max" | "ultra" | "persistent" | optional | — |
duration_ms | number | optional | — |
tokens | object | optional | — |
tokens.input | number | required | — |
tokens.output | number | required | — |
tokens.cacheRead | number | optional | — |
tokens.cacheWrite | number | optional | — |
tokens.cachePartial | true | optional | — |
tokens.total | number | optional | — |
tokens.cost | number | optional | — |
cost_usd | number | optional | — |
stop_reason | string | optional | — |
num_turns | number | optional | — |
model_usage | object | optional | — |
model_usage.requested | string | optional | — |
model_usage.resolved | string | required | — |
error | string | optional | — |
retryable | false | optional | — |
failure_kind | "fatal" | "transient" | "unknown" | "rate_limited" | "overloaded" | "timeout" | "exec_failed" | "output_contract" | "max_iterations" | "child_failed" | "cancelled" | "config" | optional | — |
provider_failure | object | optional | — |
provider_failure.class | "auth" | "quota_exhausted" | "budget_exceeded" | "misconfigured" | "rate_limited" | "overloaded" | "transient" | "unknown" | required | — |
provider_failure.retryAfterMs | integer | optional | — |
provider_failure.resetAt | string | optional | — |
provider_failure.evidence | string | required | — |
reason | "prior_success" | "when_condition" | "when_condition_parse_error" | "trigger_rule" | "timeout" | optional | reason alternative 1 |
reason | "stale_dependency" | optional | reason alternative 2 |
cause | object | optional | cause.kind = "condition" |
cause.kind | "condition" | required | cause.kind = "condition" |
cause.expr | string | required | cause.kind = "condition" |
cause | object | optional | cause.kind = "condition_parse_error" |
cause.kind | "condition_parse_error" | required | cause.kind = "condition_parse_error" |
cause.expr | string | required | cause.kind = "condition_parse_error" |
cause | object | optional | cause.kind = "timeout" |
cause.kind | "timeout" | required | cause.kind = "timeout" |
cause | object | optional | cause.kind = "upstream_failed" |
cause.kind | "upstream_failed" | required | cause.kind = "upstream_failed" |
cause.origin | string | required | cause.kind = "upstream_failed" |
cause | object | optional | cause.kind = "upstream_skipped" |
cause.kind | "upstream_skipped" | required | cause.kind = "upstream_skipped" |
cause.origin | string | required | cause.kind = "upstream_skipped" |
expr | string | optional | — |
suspend_point | string | optional | — |
node_output | string | optional | — |
node_output_truncated | boolean | optional | — |
node_output_original_bytes | number | optional | — |
node_output_spill_path | string | optional | — |
structured_output | unknown | optional | — |
declared_fields | array<string> | optional | — |
declared_fields[] | string | item | — |
declared_output_paths | array<array<string>> | optional | — |
declared_output_paths[] | array<string> | item | — |
declared_output_paths[][] | string | item | — |
prior_output | string | optional | — |
prior_output_truncated | boolean | optional | — |
prior_output_original_bytes | number | optional | — |
prior_output_spill_path | string | optional | — |
prior_structured_output | unknown | optional | — |
invalidating_deps | array<string> | optional | — |
invalidating_deps[] | string | item | — |
aggregate | boolean | optional | — |
iteration | number | optional | — |
output_type | string | optional | — |
status | string | optional | — |
maxIterations | number | optional | — |
session_source_node_id | string | optional | — |
session_fork_requested | boolean | optional | — |
session_forked | boolean | optional | — |
background_tasks_incomplete | array<string> | optional | — |
background_tasks_incomplete[] | string | item | — |
child_run_id | string | optional | — |
blocked_on_child_run_id | string | optional | — |
fan_out | boolean | optional | — |
identity | string | optional | — |
ordinal | number | optional | — |
approval_decision | string | optional | — |
mcp_unavailable | object | optional | — |
mcp_unavailable.path | string | required | — |
mcp_unavailable.reason | "provider_unsupported" | "config_missing" | required | — |
mcp_unavailable.servers | array<string> | optional | — |
mcp_unavailable.servers[] | string | item | — |
session_id | string | optional | — |
