Skip to content
← Posts

Ten agents and what they actually cost me

I audited my own agent estate on camera. I could not enumerate it from memory, and I have been building it for eighteen months.

7 min read

The title is wrong. I left it that way on purpose.

I do not have ten agents. As of the August 12, 2026 audit I have 24 scheduled tasks. 22 are enabled. 2 are disabled. They fire about 41 times a day, which is about 15,000 invocations a year. I have been building this estate for eighteen months. I could not list it from memory. That is the finding, not a flourish.

I audited it on camera because I wanted the count to be public in the same way a board packet is public. You do not get to summarize an estate you cannot enumerate. I sat down to name what I run. I could not. If you cannot name the jobs, you do not know what they cost. If you do not know what they cost, you are not operating them. You are living near them.

I will stay inside the audit. I will not invent a dollar figure per task. The audit is explicit: no per-task token, API, or time accounting exists anywhere. That sentence is the cost section. Everything else is what I actually pay, and what I actually spend attention on.

What I actually pay is $200 a month for Claude Max and $200 a month for ChatGPT Max. That is a subscription fact from a local-offload analysis, not a posted-rate multiple. I did not run the posted-rate math. I will not pretend I did. Two Max plans are what the card sees. They are not a cost model for 24 tasks.

Attention is the expensive cost. Adding scheduled tasks consumed 100% of the Claude allowance in one week. Same analysis. That is the only utilization number I will stand behind, because it is the only one I have. The model did not get more expensive. I gave it more work than the plan could absorb, and the plan told me so by running out.

Now the estate, as counted on August 12.

24 tasks. 22 enabled. 2 disabled. About 41 invocations a day. About 15,000 a year.

Credentials are named in 5 of the 24. Expiry is recorded in 0 of 24. Owner is recorded in 0 of 24. Creation date is recorded in 0 of 24. I built this. I cannot tell you from the task records who owns a job, when it was born, or when its secrets die. Five of them at least have a named credential. The rest of the identity metadata is empty. That is not a tooling complaint. That is an operator who did not write the fields down.

Five tasks have a prose description that does not match the cron.

event-finder-area is described as weekly on Thursday. The cron is daily at 03:30.

video-monitor is described in a way that does not match three times daily, which is what it actually does.

content-generation-helper is not a 6am-only job. It runs twice daily.

portfolio-brief runs at 04:00, not at 6:15.

gun-finder is described as once daily, and it is disabled.

Those five mismatches are not style. They are the difference between the document you would hand a new operator and the schedule the machine actually keeps. I wrote both sides. They drifted. I did not notice until I audited.

lastRunAt is an attempt, not a success. Read that again if you run a similar estate. A healthy timestamp means the job was tried. It does not mean the job produced the thing you think it produces. I had been reading lastRunAt as a pulse. It is a knock.

research-gap-monitor is the cleanest example, and I almost missed it inside the audit itself. Enabled is true. lastRunAt looks healthy. The newest report on disk is GAP-REPORT-2026-08-07.md. Six consecutive runs produced no output. The task is a monitor. One of the projects it monitors is moto-finder. moto-finder has been dead 49 days. Its last run was 2026-06-24. It is still disabled. It is still on the monitor's list. The audit did not catch this. I caught it when I asked what the task does. A monitor that keeps a dead project on the list and then emits nothing for six runs is not monitoring. It is keeping a calendar.

gun-finder is enabled false. Its lastRunAt is the morning of 2026-08-12. Disabled is a flag. It is not a guarantee the thing is quiet. I do not have a better sentence for that than the two facts next to each other.

13 tasks are confirmed browser-session tasks. 6 more are undeclared. That is 19 jobs that may be holding a browser, 13 of them on purpose, 6 of them because I did not say so in the description. Browser sessions are not free in attention even when they are free in the plan. They are also a different failure mode than a script. I will not invent a failure I did not record. I will say the count, and I will say that undeclared is worse than confirmed, because undeclared means I cannot reason about the estate from the docs.

3 of the 24 mutate external state. video-monitor writes YouTube playlists. google-tasks-sync completes Google Tasks. The third is in the same class: it does not only read. Most of the estate can be wrong quietly. These three can be wrong in someone else's product. I do not have per-task undo. I have the audit sentence that they mutate, and I have the knowledge that lastRunAt will not tell me if the mutation was the one I wanted.

10 of the 24 wrappers violate the thin-wrapper convention. Two of those ten were authored the same day the convention was restated. I am not going to narrate the restatement. I am going to say that a rule I wrote did not constrain me the afternoon I wrote it. That is the operator problem in one line. The estate is not only drifting from age. It is drifting from the hand that claims to govern it.

I could not list these from memory. I will keep repeating that because it is the only finding that matters at the title. Eighteen months of construction. A title that still says ten. A camera, an audit dated 2026-08-12, and a man who has been the sole builder unable to enumerate his own jobs. If I cannot enumerate them, I cannot cost them. If I cannot cost them, the $200 and the $200 are the only honest money sentence I have, and they are the wrong unit. They are the door fee. They are not the work.

I am not going to convert 15,000 invocations into a rate. I did not run that math. I am not going to tell you a task costs X cents. The audit says that number does not exist. I am not going to mix a 21-enabled figure from some other note with this one. This document uses the August 12 count: 22 enabled.

What I can say about cost, then, is narrower than the title promised when the title said ten.

I pay $400 a month in Max plans. I once spent a week in which adding scheduled tasks ate the entire Claude allowance. I spend attention on 24 jobs I cannot recite, 5 of which lie about their schedule, 1 of which monitors a project that has been dead 49 days, 1 of which is disabled and still shows a run from the morning of the audit, 13 plus 6 of which may be in a browser, 3 of which mutate the outside world, and 10 of which are thicker than the wrapper rule I wrote. Zero of them record an owner. Zero of them record an expiry. Zero of them record a birthday. Five name a credential.

That is what they actually cost me. Not a posted-rate multiple. Not a token ledger. The cost is that I am the principal and I still had to discover the estate by reading it, on camera, because memory failed.

I have been an engineer since 1998. I have led teams I could not interrupt. I have been a CTO. None of that gave me a dashboard. The transferable habit is the same one I used on people: define done, treat a mismatch as my defect, do not trust a green timestamp. lastRunAt is not done. A weekly Thursday in prose is not a daily 03:30. A monitor with a healthy lastRunAt and six empty runs is not a monitor. A disabled flag next to an August 12 morning run is not off.

I left the title as ten because the stale title is part of the evidence. I thought I had a round number I could hold in my head. I had 24, and I could not hold them. The correction is the post.

Related: Agent estate, Agentic operator, Harness