An attempt is one try at a node, and the record that carries almost everything a consumer learns from. Attempts are records, not counters: a retry opens a new attempt whose cause points back at what triggered it.
Two attempts at one node

Attempt

string
required
Globally unique within the document.At most 200 characters.
string
required
The node this attempt tries.At most 200 characters.
integer
1-based ordinal within the node.
string
Logical agent/role that ran the attempt (not a volatile runtime locator).At most 200 characters.
string
The agent harness that ran the attempt, e.g. claude-code, codex.At most 100 characters.
string
Reasoning-effort label as configured, e.g. low, medium, high, xhigh, max. Open set; producers must not fold it into the model label.At most 100 characters.
How this attempt came to run: which scanned attempt launched it through a CLI, in which workspace, or that an unscanned program did.
What part the attempt played in the run (lead, planner, dev, reviewer, …), with the tier and evidence the label rests on.
When in the run’s life the attempt ran (build, post, external), with tier and evidence.
enum
required
Current or terminal status. queued: created, not started yet. working: running now. The terminal statuses are done, failed, rejected, canceled, settled_unverified and lost, each carrying the meaning outcome.result gives it. When terminal, an outcome record should be present and outcome.result must equal status.One of: queued, working, done, failed, rejected, canceled, settled_unverified, lost.
string
Opaque correlate to the underlying harness session/transcript id, for producers that can join the two. Never transcript content.At most 500 characters.
string
The workflow piece id this attempt executes.At most 200 characters.
integer
Repair round, 1-based.
Only when it differs from the configuration’s setting for the vertex.
string
Working folder, opaque.At most 1000 characters.
  • Attempt ids MUST be unique in the document (E101), and node MUST name an existing node (E112).
  • n counts attempts at the same node from 1. From 0.3, round counts repair rounds of the workflow from 1, and vertex names the workflow piece the attempt executes.
  • actor is a logical agent or role, never a runtime locator. session is an opaque correlate to the harness session, never its content.
  • setting is present only when the attempt ran with a setting other than its configuration’s setting for that piece. It is outside the configuration id, so a consumer that pools runs by id checks attempt settings too.

Status and outcome

status is one of queued, working, or a terminal status: done, failed, rejected, canceled, settled_unverified or lost.
  • A terminal attempt SHOULD carry an outcome (W131), and outcome.result MUST equal status (E130).
  • An attempt that is not terminal SHOULD NOT carry an outcome (W132).
enum
required
Terminal result. done: accepted. failed: attempted and did not succeed. rejected: refused by a review or a gate. canceled: stopped before it settled on its own. settled_unverified: settled without a parseable acceptance signal. lost: the runtime vanished.One of: done, failed, rejected, canceled, settled_unverified, lost.
string
How the result is known. verified: mechanically checked (tests, provenance receipt). reported: the actor asserted it through a typed envelope. heuristic: inferred. asserted: bare claim. Missing evidence must be treated as asserted, never upgraded.Recommended values (open set): verified, reported, heuristic, asserted.
string
Node id of the gate or review that produced this acceptance signal, when one did.At most 200 characters.
  • via SHOULD name the node, a gate or a review, whose decision produced the result (W141).

Evidence tiers

An outcome says how its result is known.
  • A consumer MUST treat a missing evidence as asserted, never as anything stronger.
  • A producer MUST NOT raise a tier without new mechanical evidence.
Edges and inferred labels (origin, role, phase, model) use the three tiers verified, heuristic and reported with the meaning given on Run graph. See Evidence for why the tiers matter.

Model and effort

The model is an object, not a string. Reasoning effort is a separate field on the attempt.
string
The label exactly as the producer knew it, always preserved (e.g. fable·xhigh, opus5.xhigh). Canonicalization is the consumer’s job; the raw label is the ground truth.At most 200 characters.
string
Canonical provider model id when known, e.g. claude-fable-5.At most 200 characters.
string
Coarse family label for grouping attempts by model family, e.g. fable, opus5, sol5.6.At most 100 characters.
string
e.g. anthropic, openai.At most 100 characters.
How the model label is known: verified from per-request usage records, reported from a harness field, heuristic from a name pattern.
  • model.raw MUST keep the label exactly as the producer knew it. Mapping raw labels to canonical ids is the consumer’s job; id, family and provider are the producer’s best knowledge.
  • effort is an open set (low, medium, high, xhigh, max, and whatever comes next). A producer MUST NOT fold effort into the model label: it does not build a fused label such as fable·xhigh itself. When the source already wrote one, raw keeps it as written, and effort that is known separately goes in effort.

Cause

string
required
Why this attempt exists. initial: the first attempt for its node. sent_back: a review rejected earlier work. gate_failed: an acceptance gate failed. followup: continuation of earlier work. superseded: replaces an earlier attempt. other: a trigger that fits none of the named values.Recommended values (open set): initial, sent_back, gate_failed, followup, superseded, other.
string
The earlier attempt id this cause points back to.At most 200 characters.
string
Who triggered it (reviewer, operator, policy rule).At most 200 characters.
  • cause.ref SHOULD name an existing attempt (W140).
  • other is for triggers that fit none of the named types.

Origin, role and phase

Three optional records say how an attempt came to run, what part it played, and when in the run it happened. Each carries an evidence tier. An attempt need not carry them, but a record that is present MUST carry every field it lists, with null for what is unknown.

Origin

How the attempt came to exist. Every field is present; an unknown value is an explicit null, never an absent key.
string | null
required
Attempt id of the launcher, when a scanned attempt started this one through a CLI. A launch edge from the launcher’s node to this attempt’s node must exist. null when no scanned attempt is the launcher (top-level, unknown, or external). Must be null when external is true: the two contradict each other.At most 200 characters.
string | null
required
Workspace the launched harness reported as its working directory (an opaque locator, as run.workspace); null when unknown.At most 500 characters.
boolean | null
required
true when the harness reports it was launched by another program (e.g. codex originator codex_exec) but no scanned attempt is the launcher: launched by an unscanned session, which is not the same as not launched. false when the attempt is known not to have been launched that way (a top-level session, or one whose launcher is in launched_by). null when the harness gives no signal.
ShortText | null
required
The launch mechanism, e.g. codex exec, claude -p, via_script: tools/review.sh; null when unknown.
required
  • launched_by MUST name an existing attempt other than this one (E119), and a launch edge from the launcher’s node to this attempt’s node MUST exist (E161).
  • external: true with a non-null launched_by is a contradiction (E165).

Role

What the attempt did in the run. All three fields are present; evidence is null when there is nothing to cite.
string | null
required
Open set. Recommended vocabulary: lead (top-level session that spawned or launched others), solo (top-level session that did not), planner, dev, reviewer, cli (launched through a CLI with no role signal), subagent. null when the role is unknown; the key is always present and the tier stays required beside it.At most 100 characters.
required
ShortText | null
required
What the label rests on, e.g. “declared type Plan” or launch command mentions review; null when nothing can be cited.

Phase

When in the run the attempt happened. All three fields are present; evidence is null when there is nothing to cite.
string | null
required
Open set. Recommended vocabulary: build (during the lead’s activity), post (after the lead ended, e.g. a post-build review), external (outside the run’s workspace). null when the phase is unknown; the key is always present and the tier stays required beside it.At most 100 characters.
required
ShortText | null
required
What the label rests on; null when nothing can be cited.

Privacy