How we got here
The v0.33 community and profile work made ax more shareable, but the telemetry model still had a Claude-shaped blind spot. Codex sessions could run expensive main-thread work and spawn agents, yet the cost and dispatch views could not separate that work cleanly from top-level Codex usage. The release range shows a focused pass over `apps/axctl/src/queries/routability.ts`, Codex ingest, dispatch derivation, and cost analytics to put Codex on the same accounting surface.
The same range tightened the public artifacts ax emits. If dojo reports, outbox issues, and profile pages are meant to leave the local graph, they need consistent attribution and room for the user to add their own context. v0.34.0 therefore pairs provider accounting with the `Generated with ax` shared helper and the first user-authored profile interview flow.
What changed
Codex joins the routability lens (#552): `ax cost routability` now classifies Codex/gpt-5.x sessions separately from Claude, folds Codex tool-output cost onto the action that produced it, and reprices Codex work within the Codex model family. The key point is that routing recommendations no longer pretend Claude and Codex have interchangeable model tiers.
ax cost routability --days=14
ax cost split --days=14Codex subagents are their own origin (#554): the Codex parser now marks child-agent work as `codex-subagent`, so cost, thinking, workflow, and insight queries can stop mixing subagent spend into Codex main-thread totals. A sibling ingest change surfaces Codex `spawn_agent` events in `ax dispatches`, so dispatch analytics are not limited to Claude's Agent tool shape.
Shareable outputs use one attribution helper (#541): `@ax/lib/shared/attribution` became the single place for the ax plug. Dojo reports and issue/outbox writers use the helper instead of copying text by hand, which keeps public artifacts consistent without adding noise to internal agent-only files.
Profiles can include the user's own highlights (#539): `ax profile interview` emits an interview brief, `ax profile interview submit` validates the resulting JSON, and the profile renderer/site can show setup, skill summaries, taste lines, and wins as a distinct "in their words" layer. The site also collapsed highlight weapons and skills into click-toggle disclosures so dense profiles stay readable.
The graph got sturdier: the release fixed a SurrealDB 3.1.2 `ORDER BY` idiom parse error, stopped profile reads from scanning the full turn table without diagnostics, warned on invalid ISO timestamps instead of silently falling back to epoch, excluded synthetic Codex tools from wrapped skill counts, restored shared transcript contrast, and raised the installed SurrealDB open-file limit to `65536`.
Why it matters
This is the release where Codex becomes a first-class cost source instead of an edge case in Claude-shaped reports. If a run spends money in Codex, spawns Codex subagents, or could have been routed down, ax can now show that without smearing the numbers across providers. The profile and attribution work closes the loop on the other side: when ax output leaves the machine, it carries clearer context about who wrote the human layer and which tool produced the artifact.