axagent experiencelivev0.31.0

release v0.27.0

The cost-routing loop ships end to end

ax routing tune mines your own dispatch history for new routing classes, ax routing compile keeps the table you actually run in sync, and ax routing show prints the effective policy. Plus the improve-first dashboard's next-actions panel, ax profile show/publish with /u and /leaders, and the Insights Surface Contract that puts every dashboard family on a typed Effect HttpApi.

2026-06-12ax v0.27.021 referenced changes
announcement

How we got here

v0.26.0 made frontier-model spend visible (`ax cost split`), named the redirectable dispatches (`ax dispatches --candidates`), and nudged at dispatch time with the route-dispatch hook. The piece it left open was the policy itself: the routing table was a constant someone had to maintain by hand, and the `/routing-tune` workflow that mined it was a dev-side tool, not something a user could run against their own history.

This release closes that gap. The routing table becomes a real file you own (`~/.ax/hooks/routing-table.json`), and three commands keep it honest - generate it, tune it from your own dispatches, and read back the policy you are actually running. The same file is now the single source of truth for both the route-dispatch hook and `ax dispatches --candidates`, so the nudge and the report can never drift apart.

What changed

The routing commands (#328):

ax routing tune --days=30     # mine unmatched expensive inherit dispatches
ax routing compile            # merge-preserving regenerate of the table
ax routing show               # the effective table, with class origins

`ax routing tune` clusters unmatched expensive dispatches that inherited the frontier model, proposes new routing classes for the recurring ones, and auto-applies the safe (non-judgment) proposals to your table as `origin: user`. Anything that smells like judgment work - review, design, plan, audit - is held back and only ships through an `--emit-brief` review step, so the loop never quietly downgrades the dispatches where you want the expensive model.

`ax routing compile` is merge-preserving on purpose: it refreshes the shipped defaults while keeping every `origin: user` class you added, and refuses to overwrite a corrupt file rather than clobbering your policy.

Improve-first dashboard (#327): the studio's home is now a next-actions panel - the proposals ax has mined from your own history, each with an agent brief you can hand straight to a coding agent. The dashboard leads with "here is the next thing worth fixing" instead of a wall of charts.

Profiles and community (#318, #319, #321):

ax profile show               # render your local ax profile
ax profile publish            # consent-gated publish to a gist

`ax profile show` renders your local profile - stats, rig, and taste patterns - straight from the graph. `ax profile publish` walks a consent prompt that shows the exact JSON, then forks and registers you into the community rails. The site picks it up: `/u/<login>` renders a registered profile live, and `/leaders` renders the compiled boards.

Insights Surface Contract (#322, #329, #331, #334): every dashboard data family - system, insights, sessions, skills, improve, ingest - now sits behind a typed Effect HttpApi with generated Scalar docs and a server-scoped Effect runtime. The studio talks to it through a generated client, with a version handshake so an old daemon and a new studio degrade cleanly instead of crashing on a mismatched payload.

Self-aware daemon (#315): re-running `ax serve` against a live daemon now prints the dashboard URLs instead of fighting for the port; `ax serve status` and `ax serve stop` resolve the running instance and only ever kill the pid actually listening on the port.

Why it matters

A routing policy you can't tune from your own history is a policy you stop trusting. This release makes the table something you own and re-derive from your own dispatches - generate it, tune it, read it back - with the same file driving both the dispatch-time nudge and the candidate report. And the dashboard finally leads with the point of ax: not charts, but the next small fix worth making.

referenced changes

21 linked changes

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

Features

  1. 01community: repo rails - registration auto-merge + nightly compile (plan 3) (#320) (86f44d4)
  2. 02dashboard+studio: insights family on the contract + DB-down hardening (#329) (89154ec)
  3. 03dashboard+studio: sessions family on the contract (#331) (57dfdb4)
  4. 04dashboard+studio: skills, improve, and ingest on the contract - migration complete (#334) (3d4287b)
  5. 05dashboard: improve-first - next actions panel with agent briefs (PR1) (#327) (5d6bc85)
  6. 06dashboard: Insights Surface Contract v1 - system family on Effect HttpApi + Scalar docs (#322) (479a8d0)
  7. 07dashboard: server-scoped Effect runtime behind the EffectRunner seam (#314) (d1980fd)
  8. 08profile: activity + insights sections & profile-page redesign (#330) (9627970)
  9. 09profile: ax profile publish/unpublish - profiles spec, plan 2 (gist + fork rails) (#319) (157b8b2)
  10. 10profile: ax profile show - profiles spec, plan 1 (local renderer) (#318) (8cc6e6f)
  11. 11routing: ax routing tune - user-facing routing-table tuning (#328) (2dffb62)
  12. 12serve: self-aware daemon - friendly already-running UX, status/stop (#315) (a262f0e)
  13. 13site: /routing feature page + launch marketing assets (#336) (56c9658)
  14. 14site: /u/&lt;login&gt; profiles + /leaders boards - profiles spec, plan 4 (#321) (29a761c)
  15. 15site: profile OG cards, crawler meta, visitor CTA (#333) (46d1ffe)
  16. 16studio: generated HttpApiClient for the version handshake (contract PR B) (#325) (6c31aa3)

Bug Fixes

  1. 01community: live-test findings - lowercase registration filename, raw-URL gist fetch (#324) (b7f42ef)
  2. 02community: lowercase registration filename (necmttn) (fb84eeb)
  3. 03community: remove uppercase duplicate registration (2fdffb9)
  4. 04site: correct repo-root mirror import depth for 2-level functions (#335) (49d2e16)
  5. 05studio: guard sessionInsights against old-daemon catch-all payload (#317) (118afbe)
generated by release please
Show generated changelog for v0.27.0commit-level detail from Release Please

0.27.0 (2026-06-12)

Features

  • community: repo rails - registration auto-merge + nightly compile (plan 3) (#320) (86f44d4)
  • dashboard+studio: insights family on the contract + DB-down hardening (#329) (89154ec)
  • dashboard+studio: sessions family on the contract (#331) (57dfdb4)
  • dashboard+studio: skills, improve, and ingest on the contract - migration complete (#334) (3d4287b)
  • dashboard: improve-first - next actions panel with agent briefs (PR1) (#327) (5d6bc85)
  • dashboard: Insights Surface Contract v1 - system family on Effect HttpApi + Scalar docs (#322) (479a8d0)
  • dashboard: server-scoped Effect runtime behind the EffectRunner seam (#314) (d1980fd)
  • profile: activity + insights sections & profile-page redesign (#330) (9627970)
  • profile: ax profile publish/unpublish - profiles spec, plan 2 (gist + fork rails) (#319) (157b8b2)
  • profile: ax profile show - profiles spec, plan 1 (local renderer) (#318) (8cc6e6f)
  • routing: ax routing tune - user-facing routing-table tuning (#328) (2dffb62)
  • serve: self-aware daemon - friendly already-running UX, status/stop (#315) (a262f0e)
  • site: /routing feature page + launch marketing assets (#336) (56c9658)
  • site: /u/&lt;login&gt; profiles + /leaders boards - profiles spec, plan 4 (#321) (29a761c)
  • site: profile OG cards, crawler meta, visitor CTA (#333) (46d1ffe)
  • studio: generated HttpApiClient for the version handshake (contract PR B) (#325) (6c31aa3)

Bug Fixes

  • community: live-test findings - lowercase registration filename, raw-URL gist fetch (#324) (b7f42ef)
  • community: lowercase registration filename (necmttn) (fb84eeb)
  • community: remove uppercase duplicate registration (2fdffb9)
  • site: correct repo-root mirror import depth for 2-level functions (#335) (49d2e16)
  • studio: guard sessionInsights against old-daemon catch-all payload (#317) (118afbe)