[01]
Every run is a span with a full lifecycle.
Start, end, inputs, outputs, tool calls, errors, retries — all structured, all queryable. The same shape for a 2-second router hop or a 4-minute page generation.
- Stable schema across agents + model tiers
- Parent / child spans mirror the task graph
- OTLP-compatible, drop-in for your existing tracer
span.json — sample run recordjson
{
"run_id": "run_84c2",
"workflow": "ship-a-page",
"step_id": "pages/customers/[id]",
"agent": "pages",
"agent_version": "3.4.1",
"model": "claude-sonnet-4-6",
"tier": "sonnet",
"tokens": { "in": 2180, "out": 1974 },
"cost_usd": 0.084,
"latency_ms": 3421,
"tools_called": [
{ "name": "read_schema", "ms": 42 },
{ "name": "read_design_tokens", "ms": 18 }
],
"outcome": "applied",
"artifact_id": "iter_4f19/pages/customers/[id].tsx"
}