533 AI agent requests. Only 21 said what they cost.
Measured on the maintainer's own machine, 2026-08-17, running surfil 0.2.20. Two sessions of ordinary work through Claude Code, read back out of the on-device record. Every figure below is measured, including the ones that do us no favours.
Most of your agent traffic never tells you what it cost
A provider returns a usage field when it feels like it. Over two sessions of normal work, fewer than one request in twenty carried one.
What this data cannot tell you
Three limits, none of them behind the form. A measurement published without them is an assertion wearing a number.
It has no knowable time span
The device keeps a fixed SIZE of history and evicts the oldest first, so these cover whatever traffic fitted: hours or months. No per-day rate is derivable, and none is published.
It is one machine
One developer, two sessions, one way of working. It is a reading, not a population, and the contribution command exists so later editions can say more.
One reuse reading is published, not three
Two other readings of this machine disagree, and a cumulative counter moved a way an append-only record cannot. Only the dated one is quoted; the rest are footnoted.
The bill is not the tokens you think it is
A cached write bills at 1.25x fresh input and a read at 0.10x, so a written token only pays for itself once it has been read back 1.39 times. This machine reached 1.70x.
Lower is better. The highlighted bar is this machine's measured 1.70x, read on 2026-08-17 from surfil report under surfil 0.2.20. The curve itself is arithmetic from the published multipliers, not a measurement.
We looked for waste to remove and found none
Cap removes context a later turn has already superseded. On this traffic there was nothing to remove, and the number stays published.
removed from 264,595 context tokens across 413 requests. An agent using the provider's prompt cache does not re-send byte-identical context, so a pruner has nothing to find. That is why no savings percentage is published on this site.
How these numbers were produced
Three steps, all of them on the machine being measured.
Intercept
One on-device interception point in front of Claude Code, Cursor, Codex and Copilot. Passthrough is byte-exact, so the provider's prompt cache keeps hitting.
Record
Every request writes one local event: the model, the tokens the provider reported, what the security screen decided. No prompt, no source and no file path is recorded.
Read it back
`surfil report` sums those events. Requests whose response carried no usage field are counted, never estimated into a token total. That is why coverage leads this page.
What the rest of it covers
Six more sections, including the one about where interception failed.
In the full report
- The complete cache derivation, with every multiplier shown
- Guard: 39 screened, 0 blocked, and which credentials were seen leaving
- Three measured failures of interception itself, including a desktop app that bypasses it entirely
- The commands to reproduce all of it on your own traffic
Send me the full report
Confirm the address and the full report opens. We also tell you when the cost work lands, and nothing else.
One click to confirm, one click to leave, any time. No sharing, no selling.
Reasonable objections
Why is this one behind an email?
Because we want to know who is reading it, and saying so is more honest than pretending otherwise. Everything you need to judge the numbers - the headline finding, the method, and every caveat - is on this page without an address.
Is 3.9% coverage a Surfil problem?
No. The usage field is what the provider chooses to return, and streaming responses frequently carry none. Surfil's part is refusing to fill the gap: the other 512 requests are counted, and never estimated into a total that would look more complete than it is.
Why publish a run where you saved nothing?
Because it happened, and because every tool in this category quotes a percentage. A measured zero you can check is worth more than a number you cannot.
Can I reproduce this?
Yes, on your own traffic, without an account. Install, use your agents for a week, and run the same command. Your numbers will differ from these, which is rather the point.
Or skip the report and measure your own
It runs on your machine, needs no account, and reports what your agents actually cost from your own traffic.