axagent experiencelivev0.37.0

release v0.31.0

Bring harness telemetry into ax serve

ax serve now accepts OTLP usage and log telemetry, Codex events flow into the graph, hook latency gets a regression lens, and Studio adds usage plus context-budget views.

2026-06-15ax v0.31.010 referenced changes
announcement

How we got here

The dojo and routing work made cost, model choice, and quota visible, but much of that signal still came from transcript parsing alone. v0.31.0 adds the receiver side: `ax serve` can accept harness telemetry directly, normalize it, and correlate it with sessions after ingest. The release then uses that new signal for usage views, hook latency analysis, and Studio context-budget work.

The range also contains a practical correction: the first Codex OTLP config format broke Codex commands, so the receiver shipped with a follow-up fix in the same release. That keeps the story narrow and factual - telemetry is useful only if installing it does not disturb the harness emitting it.

What changed

OTLP landed in the daemon (#423, #432, #426). `ax serve` accepts harness usage telemetry, decodes a curated OTLP/JSON subset, and writes normalized rows. Claude usage arrives through the receiver, and Codex log events flow into the same local graph. The Codex config was corrected after the first format broke commands.

ax install
ax serve

The install path writes the harness telemetry config; the serve daemon receives it on the local port. Transcript parsing remains the source for prompts, responses, and tool I/O, while OTLP adds usage and timing signals.

Usage became a first-class read surface (#421). The new usage model, ingest stage, CLI command, dashboard contract, and Studio route turn self-telemetry into a personal utilization view. This is the adoption-side counterpart to quota: not just "how much plan is left", but "what did my agent work actually consume?"

Hook latency became measurable (#425). The hooks latency query and CLI formatting add a regression lens over real hook-fire telemetry, so hook guardrails can be judged by runtime cost instead of only by correctness.

Dojo moved into MCP and spar accounting stayed clean (#420, #424). The `dojo_agenda` MCP tool replaced the deferred cron trigger, and spar sessions now carry a behavioral analytics exclusion tag. Spar cost still exists, but training experiments stop polluting behavior metrics that are meant to describe normal work.

Studio and profiles picked up the new signals (#427, #400, #428). Studio's remaining dashboard routes moved into the instrument treatment and added Context Budget reclaim and drift views. The public profile page got the dot-matrix treatment, and the sessions API fixed an all-sources `NONE` column issue by coalescing nullable fields to `null`.

Why it matters

Transcript parsing tells ax what happened. OTLP tells it how expensive and how slow parts of that work were. v0.31.0 connects those signals locally, without shipping content bodies elsewhere, so cost, usage, hook latency, and context budget can become operational surfaces instead of scattered metadata.

referenced changes

10 linked changes

Generated from Release Please and grouped by change type. Each row keeps its issue and commit references.

Features

  1. 01ax hooks latency - regression lens over real hook-fire telemetry (#425) (f34374f)
  2. 02mcp: dojo_agenda tool + retire deferred cron trigger (#420) (7aaece9)
  3. 03otel: OTLP logs ingestion — Codex events into ax serve (#432) (9ec015e)
  4. 04otel: OTLP receiver — harness usage telemetry into ax serve (#423) (43c85d1)
  5. 05site: nullframe dot-matrix treatment for /u profile (#400) (77a1702)
  6. 06spar analytics-exclusion tag (behavioral-only) (#424) (07c05bb)
  7. 07studio: instrument-ify the rest of the dashboard + Context Budget (reclaim/drift) (#427) (b83e217)
  8. 08usage: self-telemetry + personal utilization view (adoption Fix #1a) (#421) (c7ac1d2)

Bug Fixes

  1. 01otel: correct Codex [otel] config format (was breaking all codex commands) (#426) (b136fb2)
  2. 02studio: /api/sessions all-sources 400 — coalesce NONE columns to null (#428) (83d4397)
generated by release please
Show generated changelog for v0.31.0commit-level detail from Release Please

0.31.0 (2026-06-15)

Features

  • ax hooks latency - regression lens over real hook-fire telemetry (#425) (f34374f)
  • mcp: dojo_agenda tool + retire deferred cron trigger (#420) (7aaece9)
  • otel: OTLP logs ingestion — Codex events into ax serve (#432) (9ec015e)
  • otel: OTLP receiver — harness usage telemetry into ax serve (#423) (43c85d1)
  • site: nullframe dot-matrix treatment for /u profile (#400) (77a1702)
  • spar analytics-exclusion tag (behavioral-only) (#424) (07c05bb)
  • studio: instrument-ify the rest of the dashboard + Context Budget (reclaim/drift) (#427) (b83e217)
  • usage: self-telemetry + personal utilization view (adoption Fix #1a) (#421) (c7ac1d2)

Bug Fixes

  • otel: correct Codex [otel] config format (was breaking all codex commands) (#426) (b136fb2)
  • studio: /api/sessions all-sources 400 — coalesce NONE columns to null (#428) (83d4397)