How we got here
v0.31.0 put telemetry into `ax serve`; v0.32.0 makes the daemon the place you actually use it. The hosted Studio link gave users a polished demo, but live local data belongs on the same origin as the local daemon. This release serves Studio from `127.0.0.1`, embeds the daemon build into the compiled binary path, and drops the hosted live-Studio link.
At the same time, the cost story moved from observation to routing pressure. With OTLP and transcript cost signals available, ax can ask which main-thread turns were routable and estimate what a cheaper tier would have saved. The rest of the release builds around that loop: a cost view, routing tuner, skill hygiene, team sync primitives, and telemetry-enriched insights.
What changed
Studio is served by the local daemon (#476). `ax serve` now serves the Studio SPA at the daemon root and the CLI banner points at the local URL. That avoids the hosted-demo-to-loopback browser problems and makes same-origin `/api/*` calls the default.
ax serve
# open http://127.0.0.1:1738/The release added `studio-assets.ts` and the generated embed stub so source runs can read the built Studio bundle from disk while compiled binaries can serve embedded assets.
Cost analysis learned routability (#437, #459, #461). `ax cost routability` estimates which main-thread class-runs could have routed down and what the same-vendor savings would have been. Studio gained a `/cost` view and an interactive regex routing tuner, with screenshots added to the cost blog and showcases.
ax cost routability --days=14Telemetry started enriching behavior insights (#439). Behavior insights can now attach OTLP-sourced cost and latency through a shared telemetry-rollup helper, keeping transcript cost and OTLP cost separate while making expensive friction visible in the places users already inspect.
Skill hygiene got a token-budget pass (#458). SkillOpt-informed hygiene added bloat, namespace dedupe, and auto-load capture. The practical surface is simple: identify skills that are both large and used, distinguish loaded skills from explicitly invoked ones, and keep personal skill sets from quietly inflating every agent run.
The team mesh started locally (#440, #454, #455, #451). `ax team sync` landed as the first slice of local team improvement sync. Executable-hook trust and `.ax.local/` experiment overlays followed, with `.ax/skills` and `.ax/agents` unignored to seed an ax team rig in the repo.
The site and profile surfaces caught up (#452, #453, #460, #465, #475). The site gained a blog system, a "used by engineers from" strip, a darker landing mock, grouped nav dropdowns, and a darker how-it-works deck. Profiles redefined DEPTH as outcome density and added a radar-axis legend.
Why it matters
The daemon is no longer just the backend behind a separate Studio experience. It is the local product surface. Once Studio, telemetry, cost, skills, and team state all meet on localhost, ax can show what your agents are doing, what it costs, and which work should be routed or tightened next without asking a hosted page to reach back into your machine.