Know what the work cost. Check the bill against it.
Follow measured spend back to the session, the change and the case it served. Keep unknown rates unpriced, and reconcile what you measured against what the provider billed.
Billing Guard detects and reconciles billing discrepancies. It does not cap or throttle spend.
Every dollar opens to its receipts.
A figure with no receipt reads not recorded, and a missing source reads as missing, never as a clean bill.
Billed beside measured Ships today
The Cost page puts what the provider billed beside what this machine measured. The two are never added together, because they cover different scopes, and every figure opens to the receipts behind it.
Cost cases Ships today
A spend spike opens a case with the change behind it. Each case breaks its spend down by purpose, investigation and remediation, and keeps an estimate apart from measured charges.
Cost per merged change Ships today
Priced agent spend over a window, divided by the changes it merged, so spend ties to the work it produced rather than to a monthly total. Spend at an unknown rate is counted apart, never averaged in.
A budget, and caps that block Ships today
Set a monthly budget, and the page says when measured spend reaches it. Hard caps per repository, team or fleet can block new agent work past a ceiling. They are off until you set one, and never block on spend nobody priced.
Spend efficiency Ships today
A grade over six levers: defaults, routing, caching, context, visibility and return. A cheaper-model saving opens as a pull request, then gets measured after it lands.
Cost per change that stuck Coming
What a change cost once production says it held. Railway and Neon spend join the Vercel and GitHub Actions spend the page reads today.
Three ledgers, one verdict on the bill.
Metered AI billing charges four token types at four rates, per model and tier, through retries and orchestration layers. Billing Guard recomputes each day from your own telemetry and flags the difference from the provider's bill.
Your ground truth
RepoOps captures Claude Code telemetry locally across every tracked repo: tokens by type (input, output, cache read, cache write), model and timing. It stays on your machine unless you connect a team and turn streaming on.
The provider's claim
RepoOps pulls Anthropic's Admin usage and cost reports: tokens by key, workspace, model and service tier, and the daily cost. Without an Admin key the run stays in telemetry-only mode.
The recomputation
A versioned per-model rate card recomputes the expected cost from raw token counts, with cache reads and writes at their own multipliers. Client-side dollars are approximations, so days compare inside a tolerance band, not to the cent.
| Detector | What it flags | Runs in |
|---|---|---|
variance-band | Billed usage above logged usage, past the tolerance band | All three |
ghost-usage | Charges on a day your logs show no usage at all | All three |
rate-check | An implied per-token price that matches no published rate | All three |
duplicate-burst | Duplicate-charge and retry-storm burst signatures | All three |
cache-share-divergence | A cache-read share that differs between your telemetry and the bill | All three |
delta-alarm | A day-over-day invoice jump, the runaway 10x pattern | All three |
cold-start-spend | Spend that starts from zero, with no prior day to compare | All three |
contradiction | The provider's usage and cost reports disagreeing with each other | All three |
duplicate-request | The same request id logged more than once on a day | Dashboard |
ghost-prompt | A request that failed locally but still carries a cost | Dashboard |
All three means the dashboard, the repoops-billing-audit CLI and the Claude Desktop extension. The two dashboard detectors read the local request log, and stay quiet until you point Claude Code's OTLP log exporter at it.
What a report looks like, and the evidence bundle
$ npx repoops-billing-audit --window 30 [guard] recomputed 30 days from local telemetry x the per-model rate card [guard] 27 days reconcile inside the 2% tolerance band [guard] Jul 03 billed $41.20 vs expected $19.85 (2.1x) -> retry-storm signature [guard] Jul 07 billed $12.40 vs expected $0.00 -> no logged usage that day [guard] Jul 09 invoice delta +9.8x day-over-day -> runaway-invoice alarm [guard] 3 findings -> evidence bundle written for dispute
An illustration of what the CLI reports, not a verbatim transcript. Each flagged day exports an evidence bundle: your token counts, the recomputed cost, the provider's figure and the difference, ready to attach to a support ticket or a chargeback. The same findings render in the desktop dashboard with a per-day ledger.
Where reconciliation cannot see
A day without local capture reads cannot verify rather than becoming a finding. Some Anthropic line items, such as Priority Tier and code execution, appear in only one of the two provider reports, so they show as cannot cross-verify. Local telemetry sees one working directory while an Admin key bills the whole organization, so the detectors that compare against local capture are marked scope-sensitive. Billing Guard tells you what to dispute; it never blocks the spend.
Why it exists: three reported figures
| Figure | What was reported | Source |
|---|---|---|
| $1.7M | in overcharges reported across $34M of audited AI invoices | Self-reported by the auditing startup Vaudit, June 2026; roughly 80% reportedly credited back |
| 10x | overnight invoice growth in the reported $16.6M free-plan incident | Media reports, July 2026; unconfirmed by Anthropic |
| 5 | recurring billing-error patterns auditors report | Bait-and-switch, ghost prompts, retry storms, outage billing, double-billing |
Third-party claims, linked from the research post. Anthropic disputes the reported error patterns, and says it does not charge for incomplete requests or route customers to older models.
Start with one question: what happened in this change?
Follow a sample case from the instruction to the verified fix and what it cost, then install RepoOps and open your own.