observability + deterministic re-execution
Re-execute the failure that shipped.
Agent O11y captures every real execution of your agent — spans, dependency calls, model responses — as OpenTelemetry. Then it re-executes the original artifact against recorded dependency responses, so a fix can be proven against the exact conditions that failed.
OTel-native ingest · replay-grade SDKs on top
$ pip install agent-o11y
$ export AGENT_O11Y_ENDPOINT=https://ingest.example
$ export AGENT_O11Y_ENVIRONMENT=prod
$ go get github.com/agent-o11y/sdk-go
$ export AGENT_O11Y_ENDPOINT=https://ingest.example
$ export AGENT_O11Y_ENVIRONMENT=prod
$ npm install @agent-o11y/sdk
$ export AGENT_O11Y_ENDPOINT=https://ingest.example
$ export AGENT_O11Y_ENVIRONMENT=prod
Capture is a side channel — it never blocks, changes, or breaks the request. What each variable does is documented in the SDK READMEs.
FIXTURE_MISSING, never an impression
a policy miss = INCONCLUSIVE — never a live write
A 200 response is not a correct agent.
An agent can return a successful HTTP response while choosing the wrong tool, using stale context, misreading a value, or falsely claiming that an action completed. Engineers investigate these failures after prompts, data, configuration, and deployments have changed — and reconstruct the environment manually, test the fix informally, and fail to preserve the investigation as a regression.
The product captures the evidence and the executable inputs required to turn that investigation into a controlled experiment — then into a durable test.
What did it actually do?
Every span, dependency call, and model response, recorded as OpenTelemetry — not inferred from logs afterward.
Can it happen again?
The original artifact re-executes under the recorded fixtures — the same conditions, with production side effects blocked.
Will the fix survive the next release?
Approved behavior is compiled into immutable regression revisions that run in CI.
The loop.
production execution → case → reproduction → candidate experiment → approved contract → regression revision → ci
-
capture
What did the agent actually do?
Instrument the entry point and its dependencies with the Python, Go, or TypeScript SDK. Every model-visible input, tool call, and response becomes an OpenTelemetry span and a versioned execution event. Capture is fail-open — it never blocks, changes, or breaks the request.
-
replay
Can it happen again?
The original artifact — an OCI image by digest — re-executes under a run-scoped dependency gateway. Recorded fixtures answer the dependency calls; production side effects are blocked; budgets and policies are enforced at the gateway.
-
diff
Where did it diverge?
Live and replayed runs are compared event by event. Matching is strict, on canonical request digests: a miss creates a divergence record and stops the run as INCONCLUSIVE — never a silent live call.
-
review
What behavior is correct?
Contract review and assertions pin the intended behavior. The verdict is PASS, FAIL, INCONCLUSIVE, or NOT_EVALUATED — with a reason code such as
FIXTURE_MISSING. -
ship
Did the fix survive the release?
Approved behavior is compiled into an immutable revision — offline, deterministic regression gating: no live calls, no flaky, INCONCLUSIVE on divergence. Experiments pin baseline and candidate to one fixture-set revision, so every changed factor is named. The suite runs from CI.
The debugger, running.
The product on two seeded tenants — an analytics agent and a sales agent, switchable from the org picker in the top bar. The same views you get when you self-host the stack.
2026-Q2 price tier quoted for a 2026-Q3 contract
exec_s941 is the 296-span order sweep
PLAYBACK, 296 spans, 144 of 200 budgeted callsThe platform, end to end.
One Go control plane, one web app, one lifecycle — and the twelve surfaces in the app’s sidebar are the entire product:
- overview
- cases
- executions
- experiments
- regressions
- releases
- review
- learning
- integrations
- organization
- usage & billing
- settings
- ingest
- Three SDKs — Python, Go, TypeScript — share one wire format. Or speak plain OTLP/HTTP if you already emit OpenTelemetry.
- executions
- One row per production request: filter by environment and origin, search, sort — then open the detail view with its flame strip, waterfall, per-event payloads, and per-component breakdown.
- replay
- Original-artifact re-execution under an immutable replay contract. Per-call dependency policies — recorded, scenario, sandbox, blocked — with live modes disabled in ordinary replay and CI.
- divergence
- Strict matching on canonical request digests. A mismatch is a divergence record; the run ends INCONCLUSIVE. Missing evidence never becomes an implicit passing assertion.
- experiments
- Baseline and candidate runs pinned to one fixture-set revision, so every changed factor is named in the comparison.
- regressions
- Frozen, runnable case revisions and the suites that gate releases.
- ci
- Approved behavior runs from CI without a human repairing it by hand — the saved investigation is the test.
Three SDKs, one protocol.
All three SDKs record dependency calls at replay grade — not just spans. If you already emit OpenTelemetry, plain OTLP/HTTP is the door in.
pip install agent-o11y
stdlib-only core · python 3.11+
go get github.com/agent-o11y/sdk-go
stdlib only · go 1.24+
npm install @agent-o11y/sdk
zero runtime deps · node 20+ · esm
OTLP/HTTP
any exporter · traces, metrics, logs · json or protobuf
Why replay, not a re-run?
Re-running the agent hits live tools, live data, and live models. It reproduces the shape of a failure, not the failure itself — and it may do things you cannot undo.
The original artifact re-executes under a run-scoped dependency gateway. The gateway answers each dependency call with its recorded response, so the run compares behavior, not infrastructure. A fixture miss stops the run as INCONCLUSIVE; the platform would rather tell you it doesn’t know than answer from a live endpoint mid-run.
The invariants.
- Production side effects are blocked in ordinary replay and CI.
- A fixture is never matched by tool name alone.
- Strict fixture matching; no silent fallback.
- Missing evidence never becomes an implicit passing assertion.
- A run can finish successfully while its quality verdict is inconclusive or failing.
- Deterministic exactness is stated only relative to a declared scope and comparison projection.
Your agents already leave evidence.
Make it replayable. Instrument one entry point, capture a real failure, and replay it before the context is gone.