Where v0.7.0 made governance adoptable, v0.8.0 makes the wallet a thing you can paste, hand over, and verify.
Paste it. The wallet is a URL: https://getsanction.com/mcp speaks Streamable HTTP and authenticates with the agent key, so Cursor and Claude connectors take a URL and a header instead of a JSON blob — the same ten tools as npx sanction-mcp. A browser GET now returns a paste page rather than a raw 401. sanction-mcp is conformant with the 2026-07-28 revision and forwards W3C trace context, so a governed decision correlates with the agent run that asked for it. Still cooperative: the host must ask before acting. Broker interception of tools/call is Next, and we don't claim it today.
Verify it. GET /.well-known/wallet-card.json is how a counterparty discovers what this wallet carries, and POST /v1/mandate/verify lets them check a presented execution mandate with no Sanction API key — frozen, revoked, expired, or garbage, each named, and invalid answers HTTP 200 so agents fail closed on the body.
Hand it over. Wallets now have people: team membership with roles, a wallet switcher that reaches every membership, and a viewer role that genuinely cannot mutate. An org owner decides escalations anywhere in their subtree. And approvals reach you where you already are — Add to Slack installs per workspace over OAuth and posts interactive Approve / Deny cards that run the same resolveApproval path as the dashboard, with the actor recorded.
See it. The console leads with a roster — the wallet tree as groups, agents as cards, a mandate stamp on each — and the rail is three items instead of thirteen. Month runway draws cumulative burn against the monthly cap with the projected exhaust date, and seat health flags the seats whose denial rate is hot or climbing, each with the decision code it keeps hitting. Providers are connected once: keys land in the vault and inject at the gateway.
One money fix worth naming: gateway metering no longer fails open to $0 for a model missing from the price table — unknown models bill at the table-max fallback rate with a warning. Under-metering is a budget hole, so it now errs expensive.
Two enforcement-path fixes found by the pre-release review, both fail-open or state-corrupting. A denied subtree-cap decision used to commit the ancestor counters the reservation had already incremented before it hit the cap — phantom spend against a parent pool that the reconcile could never heal downward, eventually denying legitimate spend on money nobody spent. The breach now rolls the whole transaction back, the way the grant path and the AuthZEN PDP already did, and the denial it writes carries the revision and context it was missing. Separately, OpenAI-compatible streams only report usage when the caller asks for it — so an agent could stream with stream_options omitted and burn the wallet's provider key unmetered. The gateway now sets include_usage on the way out: metering is not the governed party's choice, and a stream that still reports nothing is logged instead of passing silently.
Eleven policy packs ship installable, each previewable against your last 30 days before it applies. The TypeScript SDK ships as sanction-sdk — renamed from the planned @sanction/sdk scope so it publishes unscoped like sanction-mcp, no npm org required (older entries reference the scoped name; this one supersedes them). It builds, typechecks, and passes its 55 tests in-repo.