Claude Code Superpowers: what subagent-driven development costs in tokens
8m read time

Claude Code Superpowers: what subagent-driven development costs in tokens

I counted every token of a month of my own Superpowers runs: eleven plans, 407 subagent dispatches, 3.3 billion tokens. Writing code was 0.06% of it. The rest was contexts being read again, and the fresh subagent per task only stayed cheap while the task stayed small.

In May I wrote that Superpowers is the token-efficient way to work with Claude Code, and I put it in one line: "Planning is cheap; doing is expensive."

I never measured it. Now I have, for the part of Superpowers that does the most work: subagent-driven development, the skill that hands every task in a plan to a fresh subagent and has another one review it.

The doing was cheap. Every line of code, every report and every review together came to 0.06% of the tokens. The rest was models reading their own context again, turn after turn. And the fresh subagent that makes the method attractive only stayed cheap while its task stayed small.

What subagent-driven development does ​

You give the skill an implementation plan. The session you started becomes the controller. For each task it writes a brief, dispatches an implementer subagent, has a task reviewer check the result against the spec and for quality, and runs a fix loop of at most five rounds with a scoped re-review after each. When every task is done, one more reviewer looks at the whole branch on the most capable model.

The skill sums itself up as "Fresh subagent per task + task review (spec + quality) + broad final review = high quality, fast iteration".

The case for it ​

The design is sound. An implementer never sees the session's history, only its brief, so it cannot drift on something you said two hours ago. Every task gets reviewed while the diff is still small. And a ledger file records which tasks are done, so a controller that loses its place can pick up again.

The skill is also candid about where tokens go. It warns that whatever you paste into a dispatch, and whatever a subagent prints back, "stays resident in your context for the rest of the session and is re-read on every later turn." And it says plainly: "Wall-clock and context cost scale with how many turns a subagent takes". Both sentences turned out to be the whole story.

How I counted ​

Claude Code writes every session to a JSONL transcript, and every model call in it carries its token usage. Subagents keep their own transcripts next to it.

I took every call to the skill between 15 September and 15 October: eleven plans across six of my own repositories, on Claude Code 2.1.272 to 2.1.300 and Superpowers 6.3.0 and 6.4.1. Only model calls made while a plan was running count, in the controller and in the subagents. A plan starts at the skill call and ends at the next workflow step, such as finishing the branch or a new brainstorm. Where a session had no such step, I ended the plan at its final review by hand.

One plan was forked into three branches, and forks copy their history, so I counted every model call once, by its message id. The same trap caught me in the auto mode count.

The plan window took two attempts, and a fresh agent checking my numbers caught both mistakes. My first count booked everything after the skill call to the plan, and my second still ran each plan to the end of its session. Both missed that a session outlives its plan. On 2 October I kept going for another day after the final review, sending "rounds" of improvements to Opus subagents, and that alone was 1.6 billion tokens that belonged to no plan.

Writing is a rounding error ​

The eleven plans dispatched 407 subagents and used 3.3 billion tokens.

Output, everything any model wrote, was 2.1 million of those: 0.06%. The rest was input, and almost all of that input was cache reads. Every turn, a model reads its entire context again: the instructions, every file it opened, every tool result, every word it wrote earlier. A context of 400,000 tokens read over 300 turns is 120 million tokens, whatever the model writes in between.

So on a subscription, where tokens are what your usage limits are made of, the question is how big each context gets and how many turns read it.

The controller takes a third ​

The controller writes no code, and took 35% of the tokens: 1.18 billion. It also wrote more than three times as much output as all 407 subagents together, 1.7 million against 0.5 million.

StartDispatchesControllerSubagentsController share
15 Sep45111M162M41%
18 Sep36101M69M59%
19 Sep29151M69M69%
21 Sep3542M107M28%
25 Sep2268M123M35%
2 Oct3880M93M46%
4 Oct4666M270M20%
6 Oct1829M19M60%
7 Oct101426M1,158M27%
11 Oct1944M65M40%
12 Oct1865M25M72%

Of the controller's tokens, 98.9% are cache reads. Its context holds the plan, every brief it wrote, every report that came back and every review verdict, and per plan the median controller turn read between roughly 250,000 and 625,000 tokens.

It reads that about six times for every subagent it sends out, the median over the plans. Each dispatch means preparing a brief or a diff, sending it, and reading what comes back, with the ledger updated along the way.

A fresh subagent is cheap while its task is small ​

Two bars: 4% of the subagents, the ones running 150 turns or more, used 44% of all subagent tokens

The other 65% went to the subagents, and it is not spread evenly. Across the 366 subagent transcripts that used tokens inside a plan's window, the median subagent ran 19 turns and used 1.4 million tokens.

TurnsSubagentsShare of subagent tokensMedian tokensMedian peak context
under 50280, 77%17%0.8M78k
50 to 15070, 19%39%9.7M179k
150+16, 4%44%50M395k

Four percent of the subagents used 44% of the tokens. The ten largest alone used 34%.

The pattern is arithmetic. A long-running subagent's context grows with every turn, and every turn reads all of it again, so tokens grow far faster than the work. A subagent at 365 turns becomes a second controller, and the largest one in my data read 147 million tokens on its own, more than the entire controller of nine of the eleven plans.

I know where the big ones came from: each of them carried more than one task. The largest was "implementing PR 1 (Tasks 1 and 2) of the Phase 4 workers plan". Another took six tasks of a remediation phase in one go, "Batch 3 (Tasks 7-9 ...) and Batch 4 (Tasks 10-12 ...)", because my controller had bundled them into one pull request. Each of those ran on Opus 5.5 for 200 to 365 turns, and fifteen of the sixteen subagents over 150 turns were Opus 5.5.

One confound I cannot separate: the skill tells the controller to give harder tasks a more capable model, so big tasks and Opus arrive together. The turn count is what drives the tokens, and in these plans the turn count follows how much work one dispatch was given.

What I learned from this ​

  • Cut plans into tasks a subagent can finish in a few dozen turns. In my data that is where the fresh subagent lives up to its promise: a median of 0.8 million tokens per dispatch. A dispatch that carries "Tasks 7-9" and "Tasks 10-12" is a session in disguise.
  • Batch only the trivial ones. The skill says to send several small same-shape edits to one subagent rather than one each, and that holds: a dispatch costs the controller about six turns at a few hundred thousand tokens each, more than a small task costs on its own. Bundling real tasks is the opposite case.
  • End the session when the plan ends. The final review is a good moment to stop. Whatever you start afterwards inherits the controller's full context on every turn.
  • Start the plan in a fresh session, and restart the controller when its context gets big. A new session that calls the skill on the same plan resumes at the first task without a completion line in the ledger. That is cheaper than carrying half a million tokens into every turn, and it is the same reasoning as knowing when to /clear.

This is the same pattern I found when I timed these transcripts: the expensive part is rarely the thing the model is visibly doing.

So I correct my own line from May. Planning is cheap, and doing turned out to be cheap too. What costs tokens is reading, and a fresh context only stays fresh for as long as you keep the job small.

(40 of 40)
1My Claude Code setup: status line, plugins and terminal2Superpowers: teaching Claude Code to think before it types3Claude Code hooks: deterministic control over AI workflows4The CLAUDE.md file: give your AI permanent memory5Stop asking your agent nicely6What's new in Claude Code: notes from the London talk7The best number in Opus 4.8 isn't a benchmark8Stale memory is worse than no memory9The agent is just a loop10Build an MCP server, then ask whether it should exist11Skill, subagent, hook, or slash command? Pick the right one12Log in to MCP servers from your shell13How to give Claude safe access to your SQL database14The day 'default' became 'Manual'15Claude Code skills: how to write one that works16How to write a proper Claude Code subagent17Claude Code permissions: the guide I wish the docs were18Sandboxing Claude Code: put your agent in a box that holds19Prompt injection defense for developers who ship agents20Best Claude model for coding: which one for which task21Refactoring legacy code with a coding agent: start with characterization tests22MCP server authentication: OAuth, scopes and rate limits23Opus 5 is here and your effort settings just expired24AI agent incident response: what to do when your coding agent goes wrong25Claude Code doctor and /doctor: checks and differences26Claude Code context management: when to /clear and when to /compact27Git worktrees for parallel coding agents: what they isolate and what they share28Claude Code plan mode: decide before the agent writes29Debugging with a coding agent: give it the search, keep the hypothesis30Claude Code checkpoints and /rewind: how to undo an agent's changes31Claude Code cross-session messaging: how to make your sessions talk to each other32Audit logging for AI agents: what Claude Code records and what deserves a human33Sharing Claude Code config across a team: what a repo can and cannot enforce34Your Claude Code session has no clock35Claude Code in a large codebase: scoping an agent to the part that matters36Recovering a Claude Code session your picker will not show you37Where Claude Code spends its time: a month of my own sessions, measured38Steering Claude Code mid-task: Esc, queued messages and /btw39Claude Code auto mode: why your Agent allow rule does nothing40Claude Code Superpowers: what subagent-driven development costs in tokens