Measured, not estimated

Why the Token Guardian shows “not reported” instead of a guess — and how real budgets stop runs instead of turning numbers red.

It would have been easy to show a token number for every agent. Count the characters in and out, divide by four, done. The dashboard would look complete. It would also be wrong in ways that matter.

The problem with estimates

Agents don’t send what you see. They send system prompts, tool definitions, file contents they read, previous turns, cached context. A character count of the visible terminal misses most of it. Estimates can be off by a factor of ten, and not consistently in one direction.

A budget built on an estimate is worse than no budget: it stops a run that was fine, or lets through one that wasn’t.

Where real numbers come from

Some CLIs report their usage. Claude Code includes it in the final result event of every turn; Codex reports it when a turn ends. When an agent runs through PaneScale’s runner, those events are parsed as they stream — so the Guardian sees real numbers while the work is happening.

For CLIs that don’t report usage, the Guardian says exactly that: not reported. It is a less impressive dashboard and a more trustworthy one.

Budgets that act

A daily budget per engine is only useful if crossing it changes something. In PaneScale it does:

  • During a turn, a run guard checks limits continuously, not only at the end.
  • When the budget is crossed, the run is stopped — or paused with a notification, if you prefer — and the next attempt is blocked.
  • Chats, tasks, workflows, routines, Point & Fix and the autopilot all draw from the same budgets.

Claude Code and Codex start with five million tokens per day each. That is generous for interactive work and tight enough to catch a runaway night. Adjust it to your subscription.

Loops are a special case

The most expensive failure mode isn’t a big task — it is a small task repeated forever. An agent edits a file, a check fails, it makes the same edit again, the check fails again. Each round looks reasonable on its own.

The Guardian looks for repeated identical work and pauses the run when it sees a loop. Sometimes repetition is legitimate — a migration touching similar files, for example. Mark that event Not a loop and the run continues.

What we recommend

  • Set budgets per engine that match your plan, not your hopes.
  • Keep loop detection on, especially for overnight runs.
  • Treat “not reported” as a reason to use structured CLIs for long unattended work.
  • Check your provider’s own usage page from time to time. The Guardian protects you from runaway runs; your provider’s numbers are still the ones you pay.

More articles

Checkpoints that never touch your branch

How PaneScale snapshots a working copy byte for byte without moving HEAD, the index or any branch — and why rewinding refuses to overwrite your edits.

Why the second pane opens instantly

Starting a coding CLI takes seconds. Pre-warmed sessions hide that wait — here is how we do it without eating your memory.

Memory is context, not commands

Teammates in PaneScale remember. Here is why everything they remember is passed as context and never as instructions — and why that matters for safety.