Research report · 3 September 2026

Thirteen days with an agent

I read my own session store instead of my memory. Thirteen days, 24 sessions, 285 human messages, 5,295 model turns back from the agent I was steering and 17,847 once its background helpers are counted. The surprises were not where I expected them: two thirds of the bill went to an agent that never touched a file, and the question "how long did it run" has five different correct answers.

Scope 24 sessions, 14 repositories, one machine Method local rollout store, parsed by script Sources 0
Figure 0Events per day
Figure 0. Rollout events recorded per calendar day, local time. 26 August is the one idle day.
01 · Verdict

The money went to the part that never touched a file

Four labels recur through this piece: Fact read directly from the session store, Inference a conclusion drawn from two or more of those facts, Estimate an assumption used where the data is incomplete, Opinion a judgement call.

Fact Over 13 days, on the mac mini, across 14 repositories, a background process that never opened a file cost more than twice as much as the agent doing the actual engineering. The main session, the one we steered (the “we” here is literal: one engineer and one agent, and the work the two of us produced together), took 29.0% of $3,970.99 in metered cost as inferred by OMP. A background advisor, a second model that watches the live session and flags problems, called zero tools and took 67.1%. That is backward from the obvious guess, and the rest of this piece is built around why. Five questions follow:1

  • How the collaboration ran.
  • Which tools mattered most.
  • Where the money went, model by model.
  • How long any of it lasted.
  • When, across the day, any of it happened.

Fact The fourth question alone needs five honest answers, and the obvious one is wrong. One engineer, one machine, 13 days: not a benchmark. The honest limits come next, not buried at the bottom.1

Acting on it

What I am changing, and what you should check in your own log

Opinion Everything below comes from the same snapshot, and every figure is in the tables further down. I am publishing it because the useful part of measuring your own agent is not the totals; it is that the totals point at four or five specific settings you can change this afternoon.

Which model to put on which role

Fact The role split is not just how much each role costs; it is which model answered for it. The main session ran anthropic/claude-opus-5 for 3,994 of its turns at $0.242 a turn. The advisor ran anthropic/claude-fable-5 for 9,438 of its 11,755 turns at $0.239 a turn. The subagents split almost evenly between two models on the same read-heavy work: anthropic/claude-opus-5 for 400 turns at $0.318 a turn, and anthropic/claude-sonnet-5 for 397 turns at $0.066 a turn.1

Inference That subagent pair is the cleanest experiment in the whole dataset, and I did not design it. Two models, near-identical turn counts, the same job of reading and grepping, and a 4.8 times gap in cost per turn. Nothing in the output justified the difference.1

RoleWhat it doesWhat it ranCost per turnWhat I am setting it to
Default, the session you steerEvery edit, every commandanthropic/claude-opus-5$0.242Keep it. This is the role that earns a premium model.
Advisor, the background watcherReads the session, interrupts, zero tool callsanthropic/claude-fable-5$0.239A cheap fast model. It writes prose, not code.
Task, the spawned subagentsReading and searching, 1,307 tool callsHalf claude-opus-5, half claude-sonnet-5$0.318 against $0.066anthropic/claude-sonnet-5 for all of it.
Tiny, one-line classificationsShort, mechanical answersNot used as a distinct roleNot measuredanthropic/claude-haiku-4-5, on latency.

Estimate If the advisor had run at the rate the subagents got from claude-sonnet-5, its 11,755 turns would have cost about $778 instead of $2,664.97, which is roughly $1,887, or 47.5% of the whole bill. Treat that as a ceiling rather than a forecast: the advisor reads a larger context than a subagent does, so its per-turn cost would land above $0.066 whatever model runs it. The direction is safe even if the size is not.1

Opinion The tiny-model row is the one recommendation here with no evidence behind it. anthropic/claude-haiku-4-5 has the fastest time to first token in my performance table at 1,393 ms, but only 40 samples and no turns at all inside the snapshot. I am picking it on latency and saying plainly that I have not proven it.2

The capabilities that earned their place

Fact Four tools carried 77.2% of 6,690 calls: bash 1,958, read 1,728, edit 766, eval 712. Below them, write 442, grep 393, hub 159 for messages between agents, and todo 150.1

Opinion Two of those deserve singling out. eval at 712 calls is the agent computing an answer instead of estimating one, and almost every number in this piece exists because of it. hub at 159 calls is agents coordinating with each other rather than through me, which is the only reason a thousand-step run stayed coherent. I would not trade either.1

The capabilities I paid for and barely touched

Fact task, which spawns subagents, was called 12 times in 13 days. Those 12 calls produced 30 subagent rollouts that made 1,307 tool calls for $153.45, which is 3.9% of the bill at $0.193 a turn, the cheapest role I have. Meanwhile the main session did 939 of the 1,728 read calls itself, at more than twice the price per turn.1

Fact checkpoint and rewind were called twice each. In the same window, 4 sessions hit context compaction, one of them four times, and 9 sessions had their context reset mid-run.1

Inference Those two facts belong together. Compaction and resets are what happens when a session fills with exploration that could have been checkpointed and discarded. I had the tool for exactly that problem and used it twice.

CapabilityCallsWhy it is worth more than that
task12Subagents are the cheapest role per turn and already did 789 of my reads
checkpoint and rewind2 each4 compacted sessions and 9 resets are the symptom they treat
glob51Against 1,728 reads; finding files beats opening them
learn and update_notes16 and 13Almost nothing was written back to memory in 13 days

What I did not know I was doing

Fact The advisor produced a rollout file in 24 of 24 sessions, including one that ran 7 model turns and cost $0.16 in total. It was never gated.1

Fact Thinking level was set to max 29 times, high 16 times and medium 20 times, and never once to low or off. The result is 4,093,863 characters of hidden reasoning against 1,807,626 characters of prose I actually read.1

Fact Of the shell command heads I ran inside bash, the two most common are echo at 1,033 and cd at 1,025, which together are more than git at 710. Neither changes a file.1

Fact I typed /model 17 times and /switch 8 times, 25 manual model changes in 13 days.2

Inference Read those four together and a pattern appears that no single number shows: I was tuning by hand, per moment, instead of setting the thing once. Manual switching is why premium models ended up in places they should not be. In the main session claude-fable-5 cost $0.471 a turn and claude-fable-5-1 cost $0.312, both more per turn than the claude-opus-5 I was trying to be careful about at $0.242. The careful switching made it more expensive, not less.1

The optimizations I am putting in place

Opinion Five changes, in the order I expect them to pay.

  • Set a model per role once, and stop switching by hand. The advisor and the subagents both get a cheap fast model; the session I steer keeps the strong one.
  • Gate the advisor on session length or on whether the run is unattended. It should not open a rollout on a 7-turn session.1
  • Delegate reading. task is 12 calls and the cheapest role I have; the main session should be editing, not opening files.1
  • Checkpoint before exploring, not after compacting. Two calls against 4 compacted sessions and 9 resets is the wrong way round.1
  • Drop the thinking level for mechanical steps. Max on every step is how you get 2.26 characters of reasoning for every character you read.1

Opinion If you take one thing from this piece and apply it to your own setup, open the per-role breakdown of your own store before you touch anything else. Mine said the role that never opens a file was running a premium model on two thirds of my turns, and I would not have guessed that in the right order.

02 · Method and limits

Where the numbers come from, and what they cannot say

Fact Every number in this piece comes from three local stores on the machine that produced the work: the session rollouts, the append-only log each session writes as it runs (~/.omp/agent/sessions/<project>/<session>.jsonl, plus sibling files for the advisor and for each subagent, a short-lived helper agent spawned for one bounded task); the runtime database agent.db (command_usage, model_perf); and the prompt-recall database history.db (history). 78 rollout files carried at least one event inside the snapshot.1,2,3

Fact agent.db table client_usage is empty for the whole window, so there is no second source to check cost against; every figure comes from the usage record embedded in each assistant turn. That is list-price accounting, and the store makes clear it is not an invoice: the usage_history table records rate-limit windows (5 hour, 7 day, daily, weekly) for every provider used here, which is what a subscription account reports, not per-token billing. Read $3,970.99 as API list-price equivalent value, not money that left an account.1,2,3

Fact This is one engineer, one machine, 13 days, 14 repositories. Not a benchmark, not a population, not a claim about anyone else’s setup.1,2,3

Fact A session object, the saved conversation thread a session file represents, can stay open for nine days if it keeps getting resumed, so raw session span is close to meaningless. Wherever “how long” matters below, this piece uses continuous-activity stretches (gaps under 20 minutes) or unattended stretches (no human message at all), never raw span.1,2,3

Fact Two things the store cannot answer: (1) the task tool’s arguments are not preserved, so which kind of subagent ran (scout, reviewer, or something else) is not recoverable, and only the 30 named subagent rollouts and their filenames survive; (2) model identifiers are reported exactly as the runtime logged them, preview and internal names included. Nobody is translating anthropic/claude-fable-5 into a marketing name here, and you should not either.1,2,3

03 · Collaboration

Short instructions, then long unattended runs

Fact We put 285 messages into 24 sessions over 13 days; the main session answered with 5,295 model turns, 18.6 turns for every message we sent. That ratio is the whole relationship in one number: a short instruction in, a long run out.1

Fact Most of our instructions were short: mean prompt length was 211 characters, median 51, and 26.0% of everything typed was under 25 characters. The log reads like this: “try now,” “apply it,” “check,” “go both,” “merge it, bump, release.” Not prose; someone glancing at a screen and firing off a verdict (read: me, most evenings). The longest single prompt ran the other way entirely: 7,410 characters, a pasted GitHub webhook payload, dropped in whole because explaining it would have taken longer than pasting it.3

Fact Between two of our messages, the agent took a median of 7 steps (n=286) before it needed a human again; the mean is 37.3, over five times higher, pulled up by a tail that runs to 1,068 consecutive steps with no human input at all. Inference A median of 7 beside a mean of 37 means most exchanges were tight check-in loops, and a few were close to unsupervised.1

Fact We stopped for a clarifying question exactly 6 times in 13 days. The reverse happened far more often: the background advisor watching our live session interrupted, unprompted, 201 times (more on what that cost shortly). Four of our sessions hit context compaction, the point where the runtime compresses older messages to fit the context window; one of those sessions hit it four times. 9 mid-session resets followed (the store logs that a session’s context was cleared without opening a new file; it does not say why, and we are not going to guess).1

Fact Across all 17,847 model turns, 73 ended in error (0.41%) and 39 were aborted (0.22%). Opinion That error rate is the real reason a thousand-step stretch felt safe to leave unattended: the failure mode worth worrying about, silent and wrong and expensive, is rare enough in this log to justify not checking in every few minutes.1

Figure 1Steps between two human messages
gaps in this bucketmedian 7mean 37.3
Table view
Figure 1. Distribution of the 286 gaps between one human message and the next, counted in agent steps (model turns plus tool calls). Log-spaced buckets. The median gap is 7 steps; the mean is 37.3 because the right tail runs to 1,068.
04 · Tools

What we reached for: four tools, three-quarters of the work

Fact We made 6,690 tool calls in 13 days. Four tools carried nearly four of every five: bash, 1,958 calls, 29.3%; read, 1,728, 25.8%; edit, 766, 11.4%; eval, 712, 10.6%. Together, 77.2%, stated directly by the tooling’s own tally.1

Fact Inside our 1,958 bash calls, the most common command head was echo, 1,033 times, then cd, 1,025, then git, 710. Behind those: head, grep, tail, jq, sed, curl, and 94 calls to gh.1

Fact write, grep, and hub (inter-agent messaging) round out the next tier: 6.6%, 5.9%, 2.4%. Below that, usage falls off fast: todo 150 calls (2.2%), run_experiment 94 (1.4%), log_experiment 80 (1.2%), glob 51 (0.8%). Some tools we almost never used: learn, 16 calls; update_notes, 13; task, the one that spawns subagents, only 12, which produced 30 named subagent rollouts, 2.5 per spawn; harness_test, 7; ask, 6; init_experiment, 6; goal, 3; checkpoint and rewind, 2 apiece.1

Opinion Six ask calls in 13 days does not read as a timid agent. It reads as one that mostly kept moving and reserved the interrupt for the moments that mattered. If it had asked more, I would call that a tuning problem, not a feature to be proud of.1

Figure 2Tool calls, and the cumulative share
main sessionsubagentscumulative share
Table view
Figure 2. Every tool the runtime recorded, ordered by call count, split by who called it. The line is the running cumulative share of all calls.
05 · Cost

Where the money goes

Fact Three roles split $3,970.99 across 13 days:1

RoleRollout filesModel turnsTool callsCostShare of cost
Main session245,2955,383$1,152.5729.0%
Background advisor2411,7550$2,664.9767.1%
Named subagents307971,307$153.453.9%

Fact The main session, the one we steered, made every edit and ran every command. The advisor made zero tool calls across 11,755 turns: never opened a file, never ran a command, never edited a line. It watched the live session and interrupted, accounting for 65.9% of every model turn logged in 13 days.1

Inference Dividing cost by turns for each role shows why the advisor’s share is arithmetic, not an anomaly: the main session costs $0.218 a turn ($1,152.57 across 5,295 turns), the advisor $0.227 a turn ($2,664.97 across 11,755 turns), named subagents $0.193 a turn. A single advisor turn is not unusually expensive; there are more than twice as many of them as main-session turns, because the advisor re-reads a growing session on every check, and none of that reading and interrupting ever registers as a tool call.1

Opinion I used to assume the model doing the typing was where the money went. Measured against this log, the model doing the typing was less than a third of a bill split in a way we did not expect.

Fact Even the silent turns were not free. Total tokens across every role: 4,242,730,543, 4.24 billion, split across four classes:1

Token classCount
Input (fresh)7,839,825
Output7,457,041
Cache read4,168,499,337
Cache write58,934,340

Fact Cache reads, tokens replayed from an already-processed copy of the context and billed well below fresh-input price, are 98.4% of the entire input side; fresh input, tokens the model had genuinely never seen before in that context, is 0.19%.1

Fact Hidden reasoning: 4,093,863 characters written. Visible prose returned to us: 1,807,626 characters. Inference That is 2.26 characters of reasoning for every character anyone read, computed straight from those two counts. Estimate Thinking was configured at high or max for most of the window (16 high, 29 max, 20 medium, never low, never off), which probably explains more of that ratio than the tasks themselves.1

Opinion The advisor is not getting switched off; catching 201 bad directions across 13 days is worth something real. But it got priced for the first time while writing this, and it is the most expensive line item in this setup: worth a second look at whether it needs to run in every session or only the unattended ones.1

Figure 3Three roles, three different shapes
main session agentbackground advisornamed subagents
Table view
Figure 3. Share of model turns, tool calls and metered cost held by each role. The advisor bar is absent from the tool-call row because it made zero tool calls.
Figure 4Token mix, log scale
Table view
Figure 4. The four token classes on a logarithmic axis, because a linear axis would render everything except cache reads as a hairline. Percentages are of the input side only for cache and input, and of the total for output.
06 · Models

Eight models, one lopsided bill

Fact We split the work across eight named models, reported exactly as logged; nobody is translating internal identifiers into marketing names here:

ModelTurnsTurn shareCost
anthropic/claude-fable-59,49553.2%$2,284.46
anthropic/claude-opus-54,39424.6%$1,094.13
anthropic/claude-fable-5-12,36713.3%$462.62
openai-codex/gpt-5.6-sol7474.2%$60.21
anthropic/claude-sonnet-53972.2%$26.28
google-antigravity/gemini-3.7-flash2251.3%$4.09
google/gemini-3.7-flash1961.1%$6.93
anthropic/claude-opus-4-8260.1%$32.27

Inference claude-fable-5 and claude-opus-5 together, 53.2% plus 24.6%, cover 77.8% of all 17,847 turns; the other six models split the remaining 22.2% between them. Turn share and cost share are not the same axis for any model in this set.1

Inference claude-opus-4-8 ran 26 turns for $32.27: $1.24 a turn. google/gemini-3.7-flash ran 196 turns, more than seven times as many, for $6.93 total: $0.035 a turn. Which model answers a step matters more to the bill than how many steps there are.1

Fact Self-measured throughput and latency, from agent.db, this machine only, not a benchmark. Fastest output throughput: gemini-3.7-flash on google-antigravity, 102.1 tokens per second. Slowest: gemini-3.7-flash on google, 32.6.2

Inference Same model name, different provider path: 3.1 times apart on throughput (102.1 against 32.6), and a comparable but not identical 2.8 times apart on time to first token, the delay before a reply starts streaming back: 9,273 ms against 3,291 ms. Routing, not the model, explains the gap; the identifier alone does not predict the experience.2

Fact anthropic/claude-haiku-4-5 has no row in the cost table: it produced no turns inside the cutoff. It appears only in the performance table, 40 samples, 71.8 tokens per second, 1,393 ms to first token, the fastest of the eight rows there. Opinion I trust claude-sonnet-5's 1,657 ms number more anyway; 190 samples beats 40. No model in this table beats it on both figures at once: gemini-3.7-flash on google-antigravity edges it on throughput (102.1 against 95.8 tokens per second) but takes 1.99 times as long to first token (3,291 ms against 1,657 ms), while claude-haiku-4-5 edges it on time to first token (1,393 ms against 1,657 ms) but claude-sonnet-5 produces 1.33 times as many tokens per second (95.8 against 71.8). claude-sonnet-5 is the balance of the three, at 0.7% of the total.2

Figure 5Turns against cost, per model
share of model turnsshare of metered cost
Table view
Figure 5. Each model's share of all 17,847 turns against its share of the $3,970.99 metered total. A bar pair that is uneven means that model is unusually cheap or unusually expensive per turn.
Figure 6Latency against throughput, self-measured
Table view
Figure 6. Time to first token against output tokens per second, from the runtime's own performance table. Circle area is the sample count. Bottom left is best. Self-run on one Apple M4 machine over one network; illustrative, not a benchmark.
07 · Duration

Five honest answers, and the obvious one is wrong

Fact Ask how long the longest run took, and the honest answer depends entirely on what we are willing to call a run. The same 13 days produce five different measures:1

#MeasureValueWhat it counts
1Longest single model turn468.6 s (7.8 min)one uninterrupted generation
2Longest unattended stretch, by steps1,068 steps, 2.71 hagent steps with no human message
3Longest unattended stretch, by clock3.75 h, 796 stepssame, ranked by elapsed time
4Longest continuous stretch of activity4.02 hany event, gaps under 20 minutes
5Longest session object lifetime229.52 hfirst to last event in one session file

Fact Answer 1 is 468.6 seconds, inside one subagent of a harness project; across 17,804 turns with a recorded duration, the mean is 7.9 seconds and the median 3.88. Answer 2 is 1,068 steps, 2.71 hours, inside a session titled “Optimize regex caching and verify iOS benchmarks.” Answer 3 is 3.75 hours, 796 steps, inside a session titled “Summarize work completed so far.” Answer 4 is 4.02 hours, on 22 August, in that same project.1

Fact Answer 5 is 229.52 hours, from one deployment session, which held exactly 2 human messages, 47 model turns, and $4.00 of cost across its entire nine-day span. Inference That is nearly 57 times answer 4 (229.52 hours against 4.02 hours), and it is the wrong number to reach for: it describes a session object that kept getting resumed, not 229 hours of anything running. This piece discards it on purpose, not by rounding it away by accident.1

Opinion If only one number survives from this section, keep answer 2: 2.71 hours and 1,068 steps is the real measure of how long anyone was willing to look away.1

Figure 7How long did it run
Table view
Figure 7. Five candidate answers on a logarithmic time axis. The last bar is hatched and struck through because it measures a session object that was resumed across nine days, not a run.
08 · Rhythm

Two peaks a day, three dead hours

Fact 12 of the 13 days had activity; 26 August had none. The busiest day was 3 September, with 3,654 events.1

Fact The daily pattern is sharper by hour than by day. Events peak at 09:00, 1,568 of them, and again across an evening block from 18:00 to 23:00. Three hours carry zero events: 01:00, 05:00, 06:00. One odd hour breaks the quiet: 03:00 carries 364 events.1

Inference That 03:00 activity is a small number of long unattended runs continuing while the human was away, not the human working; the two dead hours on either side of it, 01:00 and 05:00, say the same thing from the other direction.1

Fact Summed across every stretch with no gap longer than 20 minutes, active time totals 47.6 hours over the 13 days, 87 stretches, a median stretch of 17.4 minutes.1

Fact The 24 sessions this piece draws on are not evenly worked. Two sit at opposite ends of how a session can run:1

SessionHuman messagesModel turnsTool callsTurns per message
The least conversational session169881,01261.8
The most conversational session733372554.6
All 24 sessions, overall2855,2955,38318.6

Inference The least conversational of the 24: 16 human messages carried 988 model turns and 1,012 tool calls, a session that ran mostly on its own once it started. The most conversational session ran the other way: 73 human messages against 337 model turns, 4.6 to 1 against the overall 18.6 to 1. Both extremes sit inside the same 13 days, on the same machine.1

Figure 8Events by hour of day
Table view
Figure 8. All 46,554 rollout events bucketed by hour of day, Europe/Bucharest. Two working blocks, a thin afternoon trough, and a tail past midnight.

The 24 sessions

09 · What I changed

What I do differently now

Opinion First, the advisor. 67.1% of the bill and 65.9% of the turns, for a process that reads and interrupts but never touches a file, is not automatically wrong; catching 201 bad directions across 13 days has real value. But I priced it for the first time while writing this, and I am now checking whether it needs to run on every session or only the ones spent unattended.1

Opinion Second, the cache-read number. 98.4% of the input side being cache reads is efficient, and I am going to watch that percentage the way I watch an error rate; a drop in it would tell me about a context-management problem before the invoice does.1

Opinion Third, when. 364 events crossed the log at 03:00 while long unattended runs were still going. If a long unattended run is going to happen, I now start it in the evening, between 18:00 and 23:00, when I am still near the keyboard, not in the early hours when nobody is watching either end.1

Opinion Fourth, and this is the actual invitation: if an agent runs daily in your setup and you have never opened the table it keeps for its own background processes, open that one first. In my case, that single table accounted for 67.1% of the cost I had not looked at until this week.1

SituationPickWhyWatch out
A background process watches your live sessionKeep it, but price it before you trust it67.1% of a $3,970.99 bill went to a process that made zero tool callsThe 98.4% cache-read share; a drop signals a context problem, not just a cost one
Choosing a model for a long unattended runDo not assume the cheapest-looking model is cheapest per turnclaude-opus-4-8 cost $1.24 a turn against google/gemini-3.7-flash's $0.035Per-turn cost ranges $0.018 to $1.24 across the eight models here
Deciding how long to leave the agent aloneTrust the unattended-stretch measure, never the session-lifetime number229.52 hours is nearly 57 times the 4.02-hour continuous-activity answer, and it is a resumed session, not a runA session object can sit open nine days and still look like one continuous span
Scheduling a long unattended runStart it in the evening block, not before dawn364 events crossed the log at 03:00 with nobody watching either endThree hours, 01:00, 05:00, 06:00, carried zero events at all
Picking a model for interactive, in-the-loop workWeigh time to first token and tokens per second togetherNo model wins both: claude-sonnet-5 balances the two at 1,657 ms and 95.8 tok/s, for 0.7% of costThe same model name under two providers can differ by 3.1 times on throughput
10 · Sources

Sources

Items 1 to 3 are local stores on the machine that produced the data. Items 4 and 5 are the external dependencies this page loads.

  1. Session rollout store · ~/.omp/agent/sessions/<project>/<session>.jsonl and the sibling subagent directories. 78 files carried at least one event inside the snapshot. Read 3 September 2026.
  2. Runtime state database · ~/.omp/agent/agent.db, tables command_usage, model_perf, usage_history, threads. The first two are lifetime running aggregates, so they are pinned into src/cumulative.json and read from there. Read 3 September 2026.
  3. Prompt recall database · ~/.omp/agent/history.db, table history. 300 prompts inside the snapshot. Rows move forward in time when a prompt is retyped, so the prompt statistics are pinned into src/cumulative.json as well. Read 3 September 2026.
  4. D3 7.9.0 · Mike Bostock and contributors. Used for every scale, axis and shape on this page. https://d3js.org. Loaded 3 September 2026.
  5. anime.js 4.5.0 · Julian Garnier. Used for every animation on this page. https://animejs.com. Loaded 3 September 2026.