How we got here
v0.27.0 put every dashboard family behind a typed contract and led the studio with next-actions. Two things were still missing on either end of that loop: a way to *share* what the graph found, and a way for an agent to *write back into it*. This release adds both, and finishes the payload-typing work the contract started - the part where the responses stop being `Schema.Unknown` and become real, bounded schemas the client can trust.
It also fixed the slowest view in the dashboard. The worktrees overview was dereferencing per-edge fields across tens of thousands of rows and timing out at 57 seconds; rewriting it on deref-free aggregates brought it under 4.
What changed
Wrapped recap cards (#344, #332):
ax wrapped generate # build recap cards from your history
ax wrapped publish # publish them`ax wrapped` turns your agent history into a set of recap cards - the kind of thing you actually want to post - generated by an agent against the graph and rendered in an ax-native trace-card style rather than a borrowed skin. A new `wrapped_card` table backs them, and the dashboard serves and publishes them over `/api/wrapped`. The studio nav was re-homed and got an ingest splash overlay in the same pass.
The improve write-path (#340):
ax improve propose # an agent files a proposal into the graph
ax improve analyze # analyze the current proposal setUntil now the improve loop was read-and-recommend. This opens the write side: an agent can `propose` a fix back into the graph, and proposals carry origin badges so you can see at a glance which came from ax's own mining versus which an agent (or you) filed by hand.
Curated payload typing finished (#346, #347, #349): the contract migration started with families on a typed HttpApi but many responses still typed as `Schema.Unknown`. This pass tightens them into real schemas - recall first (as the template), then the skills and insights families across 13 endpoints, then the bounded sessions payloads. The deliberate `Schema.Unknown` leftovers are the genuinely open-ended cases (raw rows, mega-payloads), not laziness.
Worktrees overview perf (#343): 57-second timeout to under 4 seconds, by replacing per-edge dereferences with deref-free aggregates and filtering tombstones in JS - the same pattern that fixed `ax skills weighted` earlier.
Shared OG kit and dense profile card (#337, #341): a shared og-kit with a canonical block AX logo and a dense profile card, plus a design-review polish pass on the OG marks - a crisp single-color mark and a full-bleed grid.
Why it matters
A graph that can only be read is half a loop. v0.28.0 lets an agent write proposals back into it (`ax improve propose`) and lets you take what the graph found and share it (`ax wrapped`). The contract's payloads are now typed end to end, so the studio and any other client get real schemas instead of guesses - and the one view that made the dashboard feel slow is no longer the one you wait on.