A self-audit of AI agent operations

Token Efficiency Audit — Oct 8–14, 2026

For seven days, every message my AI agent sent or received was logged. The totals are startling — 3.51 billion input tokens against 73.6 million output — and the honest story is more interesting than the headline: the biggest cost wasn't conversation. It was machinery checking, over and over, whether there was anything to say.

Window: Thu Oct 8, 2026 00:00 PDT → Wed Oct 14, 2026 22:02 PDT · Oct 14 is a partial day

7,963attributed messages, across 5,962 distinct agents
3.51Binput tokens attributed (3,511,505,876)
73.6Moutput tokens (73,571,380)
47.7:1input-to-output ratio

Read this before quoting the 3.51 billion

The headline total comes with an attribution anomaly. 1,843 records — 23% of all messages — log more input than the 350,000-token context window can physically hold in a single turn. 658 records exceed 1M input tokens, and the largest single record claims 81,229,952. Those can't be individual prompts; they appear to be cumulative agent totals attached to one message. Rows over 1M alone account for 2,136,203,306 of the headline input.

Strip those out and you get the defensible, turn-level floor — the numbers worth acting on:

6,120messages fully inside the context window
667Mwithin-window input tokens (666,545,751)
~109Kaverage input per turn (108,913)

The week, day by day

Attributed input was high but stable for four days — then, starting Oct 12, it roughly quadrupled and stayed there. Agent creation and message volume about doubled at the same moment. The last three days alone account for 2.66B tokens, about 76% of the week's attributed input.

Attributed input tokens by day, Oct 8–14, 2026 0 300M 600M 900M 1.2B 302M 120M 187M 240M 1.09B 897M 673M Thu 8 Fri 9 Sat 10 Sun 11 Mon 12 Tue 13 Wed 14*

* Oct 14 is a partial day (through 10:02 PM PDT) and still the third-heaviest of the week. The spike begins Oct 12.

Attributed usage by day (PDT)
DayInput tokensMessagesAgents
Thu, Oct 8302,028,265793592
Fri, Oct 9120,153,493538439
Sat, Oct 10186,665,007757585
Sun, Oct 11240,102,3411,011829
Mon, Oct 121,092,027,5101,9111,324
Tue, Oct 13897,062,0611,5531,161
Wed, Oct 14 (partial)673,467,1991,4001,038

Where the tokens went

Attributed input by agent type. The uncomfortable detail: the single largest bucket — a third of everything — is untyped subagents, spawned work with no purpose label attached. You can't audit what you can't name.

Untyped subagents991 agents · 999 msgs1.18B
Artifact builds — space_task183 agents · 1,395 msgs1.11B
Untyped root & background runs4,393 agents · 5,072 msgs836.4M
Browser tasks113 msgs · avg ~1.59M per record179.4M
Proactivity researcher79 agents92.1M
Feed pulse62 agents · 160 msgs34.3M
Proactivity selector84 agents25.5M
All other agent typesremainder44.9M
Root agents: 2.11B (60.0% · 6,814 msgs) Subagents: 1.40B (40.0% · 1,149 msgs)

Browser tasks deserve a footnote of their own: at an average of ~1.59M attributed input per message, they show the same cumulative-attribution pattern suspected in the over-window records — one more reason the within-window floor is the figure to trust.

The machinery underneath

Most of this usage never involved a human typing anything. Scheduled jobs, spawned subagents, and context compactions run around the clock — this is what they did in seven days.

2,127 scheduled job runs 2,069 succeeded · 50 failed · 3 timed out · 4 cancelled · 1 queued — a 97.3% success rate
1,235 subagents spawned 1,192 completed — 96.5%. The work finishes; it doesn't loop to failure
238 context compactions ~34 per day. Contexts grew to an average of 277,984 tokens before being compressed to 18,088
Top scheduled jobs by runs — together, about 83% of all runs
  • wake-watch-430705 succeeded, 13 failed — roughly 102 runs a day, every day 718runs
  • heartbeatperiodic liveness check 332runs
  • trade-journal-robinhood-refresh278 succeeded, 12 failed 290runs
  • robinhood-position-refresh-15mposition refresh every 15 minutes 281runs
  • deterministic-doctorscheduled health check 167runs

In total, 6,098 agents were created during the window — 3,163 completed, 2,841 were shut down, and 78 errored.

The waste, named plainly

Five patterns account for nearly all of the avoidable spend. One of them dwarfs the rest.

Finding № 1 — the silent check

767 messages burned 153.9M input tokens to say almost nothing

Each of these 767 messages loaded at least 100,000 input tokens — the full standing context of memory, goals, people, and instructions — and then produced fewer than 500 output tokens. It's the signature of a scheduled check that wakes up, reads everything, decides there's nothing to report, and goes back to sleep. Polling plus context re-send, not conversation, is the dominant cost of running this agent.

153,906,678input tokens consumed
146,649output tokens produced
~1,049:1input-to-output ratio
  1. No-op context loads

    The 767 silent checks above. A job that usually has nothing to say should not pay full-context price to say it.

  2. Context re-send is the dominant cost

    Even honest, within-window turns average ~109K input tokens, because every turn re-sends the standing context — memory, goals, the people index, alignment notes, and standing instructions — whether or not the task touches them.

  3. Polling frequency

    One job, wake-watch-430, runs about 102 times a day. Add the heartbeat and two Robinhood refresh jobs, and polling accounts for most of the 2,127 scheduled runs.

  4. Large-context churn

    238 compactions in seven days means long-lived contexts repeatedly swell to ~278K tokens, get compressed, and swell again — work being done in conversations that live too long.

  5. Unauditable fan-out

    1,235 subagents spawned in a week, and the largest single spend bucket — 1.18B tokens — is untyped. Without purpose labels, that spend can't be reviewed, only totaled.

What isn't waste

An efficiency audit that only counts spend would miss the point. By the measures that matter, the system is finishing its work:

73.6Moutput tokens of completed work — answers, documents, builds, and checks that landed
96.5%of 1,235 spawned subagents completed (1,192) rather than looping or dying
97.3%scheduled-job success rate across 2,127 runs — the machinery is reliable, just expensive

The three fixes

Recommendations only — this audit changed nothing. Each fix is aimed at a pattern above.

  1. Make polling lightweight-first

    Wake-watch and heartbeat should check a cheap signal before loading anything. Only when the signal fires does the job load the full standing context. This single change targets the 767 no-op loads and the ~109K average turn at once.

  2. Split long-lived work earlier

    Start fresh side chats and subagents with a short brief instead of letting one context grow to the ~278K compaction point. Fresh, narrow contexts are cheaper than compressed, sprawling ones.

  3. Label every subagent by purpose

    Require an agent_type on every spawn, consistently. Right now 1.18B attributed input — the #1 bucket — sits in an untyped bucket that cannot be audited by purpose at all.

Also flagged: cap browser-task context (return summaries, not full page dumps, to the parent), and re-audit in seven days against two clean KPI baselines — ~109K within-window input per message and 767 no-op loads. If those two numbers don't move, nothing else matters.

Subscription context

For scale: all of the above ran inside a single week of a Power plan — and the plan's own meter barely noticed, because it reports an allowance rather than an exact token ledger. Verified Oct 14, 2026.

Powercurrent plan
0%of the weekly limit used; resets Wed, Oct 21, 2026 at 9:59 PM PDT
45% usedof additional tokens, with 1.1B remaining