Probe0 vs ccusage

ccusage reads the JSONL your agent already wrote and tells you what a session cost. Probe0 sits in front of the agent while the request is still in flight, which is the only place a call can be cached, downgraded, sent to a local model, or refused.

An open-source CLI that reads the session log files your coding agents already write on disk and prints token and cost reports from them.

FeatureProbe0ccusageEdge
Position in the request pathIn the path, local proxyOutside it, log parserProbe0
Reduces the billCache, tiering, coalescingReports onlyProbe0
Spend cap enforcementWarns, then pauses the runDisplay threshold, no blockProbe0
Local model routingOllama, LM Studio, auto-retryDoes not run inferenceProbe0
Who made the callAttributed to the processDaily, session, 5-hour blocksProbe0
Where the cost number comes fromReal cost, per call, as it happensEstimated from a price tableProbe0
Cache hitsLocal disk, never leave the machineNo cachingProbe0
Usage from before installNothing before the proxy existedEvery session already on diskCompetitor
Where the data livesYour machine, no Probe0 serverYour machine, no serviceEven

ccusage is genuinely good at the job it took: one npx command, no keys, no open port, numbers traced back to the token counts the agent itself wrote down, and history from before you installed it, which no proxy can ever have. What it cannot do is change the number. If you are running coding agents on a Mac all day, the spend is not a mystery you need better charts for, it is a bill you want smaller, and that only happens somewhere in the request path. Probe0 is a local proxy on your machine: one certificate installed once, after which Claude Code, Codex, and Cursor all route through it with no per-tool config, and every call gets a chance to be served from cache, sent to a model already loaded locally, downgraded to a cheaper tier, or stopped outright.

The limit in ccusage is structural rather than a gap someone forgot to fill. A log parser runs after the money is spent. It can show that a run burned through a 5-hour block, and its token-limit flag on blocks reports will colour a number to say so, but nothing stops, downgrades, or deduplicates a single request. The cost figures are estimates computed from token counts against LiteLLM's price table, close to the invoice but not the invoice, and lookups fail for models the table has not learned yet. Non-token usage such as web search and code execution does not appear at all. Multi-device users copy JSONL files around by hand. None of that is a defect. It is what happens when the tool has no seat at the moment the request is made.

Probe0 takes that seat, and every module is switchable on its own and reports what it saved on its own. Exact cache lives on local disk, so a hit never touches the network. The semantic cache holds a strict similarity floor and refuses to match anything carrying tool calls, because a wrong hit corrupts an agent run. Request coalescing collapses simultaneous identical calls into one upstream call. Model tiering tries the cheap model first. Local routing hands work to a model already loaded in Ollama or LM Studio and retries weak answers on the cloud. Spend Guard is the part a log parser structurally cannot do: a hard cap per run and per day that warns and then pauses. The ledger records model, tokens, real cost, latency, and which process made each call, which is how it can also tell you when you are paying for a plan tier above what you use. The honest scope: macOS, private beta, one developer's machine rather than a team gateway, and coverage of what coding agents call rather than a hundred-provider catalogue.

The verdict

Probe0 is the one I would install. It is the only one of the two that can make the bill smaller while you work: cache hits that never leave the disk, local model routing, cheap-model-first tiering, real per-call cost attributed to the process that spent it, and a cap that halts a runaway run instead of colouring a number red. Take ccusage if what you want is the last six months explained and you have no interest in anything touching the request path, or if you are on Linux or Windows, where Probe0 does not run yet. On a Mac with agents running all day, put Probe0 in front of them.

Questions

Is Probe0 a ccusage alternative or something you run alongside it?
Alongside, in most setups. ccusage reads the logs your agent already wrote, including everything from before either tool was installed, while Probe0 sits in the request path and changes what gets sent. Running both costs you nothing and the two numbers are a useful cross-check.
Can ccusage stop an AI coding agent from overspending?
No. Its token-limit option on blocks reports is a display warning, and the docs are explicit that there are no budget alerts or spend caps. Enforcement needs something in the request path, which is what Probe0's Spend Guard does when it pauses a run at a hard per-run or per-day cap.
Does Probe0 send my prompts anywhere?
No. Probe0 runs entirely on your machine and there is no Probe0 server. Being an LLM proxy does mean it terminates the connection and can see request bodies locally, which is a real difference from ccusage, since ccusage only reads token counts and never touches prompt content.
Which one helps with local LLM routing?
Probe0. It can send a request to a model already running in Ollama or LM Studio and automatically retry weak answers on the cloud model. ccusage does not run inference and has no control over model selection, so local LLM routing and LLM cost control are outside what it does.

Get started

Switch from ccusage to Probe0