Dashboard → Spend is the home page. Waste and ROI are sections on it (#waste, #roi). There are no separate nav tabs.
assay show
assay waste
assay roi
The dashboard calls the same reports as the CLI.

What spend shows

  • Totals for the window, corrected, with provenance next to the number
  • By day, principal, model
  • Model mix and token mix
  • By product (both readings — see Products)
  • Unpriced share, never folded in as free

Token phases

Assay does not print one token count. It splits:
PhaseWhat it is
InputFresh input
Cache readTokens served from cache
Cache writeTokens written to cache
OutputCompletion
ReasoningInformational; subset of output; not priced separately
Tool I/OTool traffic
A cache-read share that collapses is a bill that is about to climb. Waste detectors look at this shape.

Waste

Four pattern detectors over classified spans, ranked by estimated recoverable spend. Each finding drills into the sitting that spent the money.
assay waste
assay waste --limit 20 --json
A $0.00 finding still names why it is zero. Recoverable is an estimate over priced spans. The exclusion is on the report. Span work-type (mechanical / tooling / routing / reasoning / generation) is classifier input here. That is not Type (kind of work).

ROI

assay roi
Three numbers, each with exclusions:
  • Cost per outcome — spend bound to results
  • Token yield — output against input-like phases
  • Declared-only ROI — only where a human (or producer) declared a dollar value
No declared value → ROI is undefined, not −100%. The attribution census says how each outcome reached its spend: bound, measured zero, or unknown. Unknown is not zero. Outcomes:
assay outcomes
assay outcomes record --principal <p> --task <t> --kind <k>
attribute backfill writes the outcome↔spend bindings. It does not edit the outcome.

Pricing accuracy

Off the nav at /pricing. Same question as assay pricing check: can Assay still price what it is being asked to meter? See Pricing.