AgentMeasure_ Get a diagnosis →

Metering claims index

Trust-score products answer whether a tool is safe to use. This index answers a narrower question: is this metering number supported by evidence? Every entry binds a finding to a status, a date and a public link. There is no composite score, no ranking, and no paying for placement — the states below are the whole vocabulary.

Five states, and only five

Verified Mismatch Fixed · Re-verified Conformance Pass UNPROVABLE Not a bug / semantics

A Verified Mismatch was reproduced with the tool's own parser on a synthetic fixture, filed upstream with a pinned commit. Fixed · Re-verified means the upstream fix landed (the link is the fix). Conformance Pass names tools that audited clean — that matters as much as the bugs. UNPROVABLE is a result, not an error. Emission shapes that are intended contracts are filed as semantics questions, not bugs.

Scope

~110repositories audited
2026-09-06 → 09-09
65+evidence-backed filings
(report, 2026-09-19)
45+verified accounting bugs
(README, 2026-10-11)
23fixes merged or accepted
(README, 2026-10-11)

Method: read the code, build a synthetic fixture, run the tool's own parser against it. Full method and case list: the audit report and measurement casebook. Below are the named entries; the casebook carries the rest.

Where the bugs sit — the recount distribution

Confirmed-tool counts per class, from the audit report (2026-09). In tooling, the wrong-rule kind wins — duplicates and stale price tables are mechanical and findable. On invoices, the did-nothing kind hides better, because it is policy, not a bug; that is why a recount starts by getting the vendor's rules in writing.

ClassConfirmed toolsShare of the 35 class hits
1 · One message ≠ one line 1029%
3 · Cache-pricing semantics 926%
4 · Price-table drift 720%
2 · Re-emitted events 514%
5 · Resume/fork history loss 411%

Class 1 · One assistant message ≠ one line 10 tools

Claude Code writes one JSONL line per content block, each carrying the same message id and usage. Sum per line and a message with text + two tool calls is billed 3×. Measured real overcounts: 2×–5×.

ToolFindingStatusEvidence
tokendash3-block message → 3× tokens and costFixed · Re-verifiedPR #37, merged 2026-09-09
ccemsame shape, first-wins variant undercountsVerified Mismatchissue #12, 2026-09
samewritea research project's headline numbers rested on itVerified Mismatchissue #1, 2026-09

Class 2 · Re-emitted events 5 tools

Codex re-emits token_count events with identical totals after compaction, settings changes and rate-limit refreshes. Naive accumulation double-counts. Measured on real corpora: +0.5% to +15% per session file.

ToolFindingStatusEvidence
token-visionone real rollout, +14.97%Verified Mismatchissue #1, 2026-09
tokenscopeidentical-total re-emissions summedFixed · Re-verifiedPR #6, merged
coding-agent-usage-trackersame classFixed · Re-verifiedPR #1, merged

Class 3 · Cache-pricing semantics 9 tools

Anthropic's input_tokens excludes cache tokens; OpenAI's includes them; 5-minute cache writes cost 1.25× input, 1-hour 2×, reads 0.1×. One convention applied to both providers clamps input to $0, double-charges cache, or prices 1h writes at 1.25×.

ToolFindingStatusEvidence
claude-hud1h writes priced 1.25× — 37.5% understated on that componentFixed · Re-verifiedPR #758, merged (27.9k★)
one-api-prostreaming += double-counts input (+50.7% no-cache) and re-subtracts cache in billingFixed · Re-verifiedissue #13, closed completed
langfuseOTel cache_write alias missing from the extractor's cache-creation list — the flagship cache-accounting findingFixed · Re-verifiedissue #17117, fixed on main (34k★)

Class 4 · Price-table drift 7 tools, including the source

Embedded price snapshots diverge from published rates by 1.2×–5× — including vendored copies of LiteLLM's price file, the industry's source of record.

ToolFindingStatusEvidence
litellmBedrock CRIS Claude-3-Haiku cache rates ratio-generated instead of Anthropic's non-round published valuesVerified Mismatchissue #40360, 2026-09
llmcostinherited the same values in a vendored snapshotVerified Mismatchissue #25, 2026-09
sniptwo contradictory hardcoded price tablesFixed · Re-verifiedissue #186 → fixed via #189

Class 5 · Resume/fork history loss 4 tools

Codex resume writes a new rollout file with the original session id; stores that replace-per-session wipe everything before the resume, and fork replay double-counts the parent prefix.

ToolFindingStatusEvidence
ai-usage-inspector86% of a session's tokens vanish (real pair measured)Verified Mismatchissue #1, 2026-09
swarmfork replay double-counts the parent prefixFixed · Re-verifiedPR #146 with maintainer credit, 2026-09

Fixes landed after publication 2026-09-11 →

Each fix is the upstream link; the dated subsection of the audit report records when it landed.

ToolStatusEvidence
candorFixedPR #8 — gpt-4o cached input 0.3125 → 1.25 with a pinned-table regression guard (merged 09-14)
openlitFixedPR #1543 — measured-zero no longer conflated with unknown (merged 09-15)
codeburnFixedPR #1264 — three-layer token_count dedup after three review rounds (merged 09-16)
tokscaleFixedissue #1306 — forked sessions no longer double-count
claude-usage-widgetFixedissue #1 — first-wins no longer drops 25% of output (maintainer reproduced independently)
token-monitorFixedissue #627 — fork dedup anchored on stable response identity
openusageFixedissue #360 — Codex cached tokens no longer billed twice
tokenfuseFixedissue #267 — cached tokens no longer priced on both sides
trulensFixedPR #2766 — mixed-currency aggregation, fixed by a third-party contributor from this report

Audited clean Conformance Pass · and one correct rejection

Most audited repos passed. We name the clean ones because that matters. And one filing we got wrong the first time — an emission shape with no unguarded consumer is an intended contract, not a bug; the maintainer was right to close it not-actionable, and it is now a methodology rule.

ToolStatusEvidence
promptfoo · Portkey model data · TokenTrackerConformance Passnamed clean in the audit report, 2026-09
pydantic-aiNot a bug · semanticsissue #7975 closed not-actionable — correctly

Audit your own tool in 10 minutes

The fixture corpus is open data — plain JSONL plus expected totals, no runtime. Point your parser at it like at real logs:

git clone --depth 1 https://github.com/roy-tong/AgentMeasure python3 conformance/pack/agentmeasure selftest # the expected-totals style agentmeasure conformance --new-vector my-check # pin your own shape as a vector

Found a metering claim this index should carry? File it — a finding needs a reproduction and a date, that is the whole bar.

Want a human check on your own numbers? The $20 Metering QA check takes one sample and one metering question — verdicts bound to the same invariants as this index, within 24 hours, fit confirmed before anything is charged.

Honesty notes. Counts are of filings with pinned evidence; merge dates are the upstream links' own. All reproductions are synthetic — no private logs anywhere. Most audited repos passed. This audit was performed with the methods and fixtures of this repository — that is the demo; no audited project endorses AgentMeasure. The report's live merge counter: author:roy-tong is:merged.