The receipt
The receipt is what Rumrunner is for: an itemised statement of what it saved you against paying frontier prices for everything, computed on your machine from a log you can read.
What the ledger counts
Every request becomes one row in decisions.jsonl and one row in the ledger
database at ~/Library/Application Support/Rumrunner/ledger.db: which app sent
it, which lane served it, which model, how many tokens in and out, how long it took, what it
actually cost, and what the same tokens would have cost at the frontier price table. Money is
kept in integer microcents end to end, because floating-point drift across a month of requests
is how a ledger ends up lying by a few cents and losing the trust it was built to earn.
Saved is the subtraction of those two money columns, and nothing else. The mix bar and the per-lane rows count requests; the money lines count dollars; the two are kept apart on screen so neither can be mistaken for the other.
What “quality-adjusted” means
A cheap answer you threw away saved you nothing. So savings only count rows whose outcome is still unknown or was accepted. A request you retried on a bigger lane, edited heavily, or marked down is excluded from the figure, and the receipt says how many rows it excluded, in amber, under the number. A headline without its exclusions is the failure this product cannot afford.
Outcomes come from live signals where the daemon can see them, and from you:
rr feedback <run-id> accepted # or: retried_cloud, edited_heavy, thumbs_down
The feedback endpoint takes a run id and a verdict and nothing else — not the edited answer, not the prompt — because accepting the content back would be the easiest way to break the rule that prompts stay on the machine.
When it refuses to show a number
Two zeros look alike and mean different things, so the receipt does not print one where it would be a lie:
- Nothing routed yet. A fresh install has no receipt, and says so.
- Nothing could be priced. Rows without a frontier counterfactual — the normal state until the dated price table is served to the daemon — are not “zero dollars saved”; they are unpriced, and the receipt says that instead.
- No denominator. A rate with an empty table is absent rather than “0%”.
The share card (rr card, or the button on the dashboard) follows the same
guard with the stakes raised: a PNG has no detail view, so it refuses to render in each of
those states rather than post a figure without its caveat.
Seeing it
rr ledger # this month's receipt, as a table
rr why # the decisions behind it
rr metrics # how well the router is choosing, as judged by live signals
The menu bar app's Dashboard and Ledger screens show the same numbers. The app computes nothing itself; every figure on screen comes from the daemon, so the app can never disagree with the ledger.