1. Where the tokens go
Every tool call re-reads the whole meeting transcript out loud before saying the next line — most of the cost is re-reading, not the new line.
- 60 billion tokens moved in 7 days, across 221,000 turns.
- 77,000 shell calls; subagents accounted for 90% of traffic.
- 48,000 turns carried over 400k tokens of context — 45% of traffic.
- Nearly all of that volume is cached context being re-read, not new text.
Proves: transcript usage fields under ~/.claude/projects, aggregated 2026-09-12.
Deeper → Appendix: full 7-day numbers table
2. Never wait by spinning
Checking the oven every 10 seconds doesn't bake the bread faster — it just means you're standing there instead of setting a timer.
- 38,673 turns were no-ops: true, echo idle, sleep N; echo ok, date -u.
- 99.8% happened inside subagents, costing about 13 billion tokens.
- Fix: wait inside one shell call, up to a 10-minute timeout.
- Or background the task and end the turn — the finish notice wakes you.
- Enforced: poll-guard hook refuses a second no-op wait within 15 minutes.
Proves: transcript no-op pattern match, 2026-09-12; poll-guard log at ~/.claude/logs/poll-guard.log.
Deeper → Appendix: top wait-shape table
3. Never poll GitHub from the conversation
Refreshing a tracking page every minute doesn't move the truck — a delivery notification does the same job for free.
- ~3,000 gh pr checks / gh run view re-runs cost about 2.5 billion tokens.
- Exhausted the GitHub API quota on 2026-09-12.
- Fix: gh pr checks N --watch --fail-fast, or gh run watch, in one call.
- Better: open the PR, move on — the event feed wakes the owning session.
- Enforced: poll-guard refuses a third identical status check within 15 minutes.
Proves: gh API quota exhaustion incident and call-count aggregation, 2026-09-12.
4. Compact early
A backpack you never empty gets heavier every stop, even when most of what's in it is trash from three stops ago.
- Sessions on the 1M window drifted to 400k–700k before compacting.
- Auto-compact now fires at 250k via autoCompactWindow in settings.json.
- Stricter option: CLAUDE_CODE_DISABLE_1M_CONTEXT=1 caps the window itself.
- Habit: /clear between unrelated tasks; keep watchers on a tiny fresh context.
Proves: context-size distribution across sessions, 2026-09-12; setting live in ~/.claude/settings.json.
Deeper → Appendix: settings and knobs table
5. Pick the model for the job
You don't hire a surgeon to file paperwork — match the skill on hand to what the task actually needs.
- 92 of 245 subagent spawns explicitly requested Opus.
- Rule: Sonnet is the default subagent model.
- Haiku for waiting, greps, web research, and mechanical edits.
- Opus only for reviewers or verifiers whose judgment gates a merge.
- fork only when the full conversation is genuinely needed — it inherits everything.
Proves: subagent spawn log, model field, 2026-09-06 through 2026-09-12.
Deeper → Appendix: settings and knobs table
6. Right-size subagents and fan-outs
Sending five people to answer one phone call doesn't answer it faster — it just means four of them are standing around.
- Subagents were 90% of all token traffic this week.
- Default 2–3 voters or verifiers per decision; scale up only when needed.
- Put the answer's inputs in the prompt: PR number, finding text, next step.
- Never poll a background task's output file — wait for its notification.
- Cap bashOutputMaxChars so noisy commands don't balloon context.
Proves: subagent share of token usage, 2026-09-12 aggregation.
7. Keep the account pool alive
Seven gas tanks feeding one engine still stall the car if all seven hit empty on the same Saturday night.
- 7 Max accounts rotate through a local daemon.
- On 2026-09-12, four hit 100% weekly by Saturday night.
- The daemon parked with headroom left because of one blended 80% gate.
- Fixed: session and weekly limits now gate separately.
- Rotation can't create capacity — fewer concurrent sessions is the real lever.
Proves: ccd daemon log, ~/.claude/logs/ccd.log, 2026-09-12; check with ccd --status.
Deeper → Appendix: settings and knobs table
A1 · Appendix — full record
Every table behind the chapters above, for whoever tunes this next.
7-day numbers (week of Sep 6–12, 2026)
| Metric | Value | Note |
|---|---|---|
| Total tokens | ~60,000,000,000 | one Mac, 7 days |
| Total turns | 221,000 | |
| Shell calls | 77,000 | 90% from subagents |
| Turns with >400k context | 48,000 | 45% of all traffic |
| No-op wait turns | 38,673 | 99.8% inside subagents, ~13B tokens |
| GitHub status re-checks | ~3,000 | ~2.5B tokens, quota exhausted 9/12 |
Settings and knobs
| Knob | Where | Effect |
|---|---|---|
| autoCompactWindow | ~/.claude/settings.json | set to "250k"; compacts earlier |
| CLAUDE_CODE_AUTO_COMPACT_WINDOW | env | same setting, env override |
| CLAUDE_CODE_DISABLE_1M_CONTEXT | env | =1 caps the window itself, stricter |
| CLAUDE_CODE_SUBAGENT_MODEL / _FORCE | env | sets/forces default subagent model |
| bashOutputMaxChars | settings | caps noisy shell output from bloating context |
| poll-guard.sh | ~/.claude/scripts/poll-guard.sh | refuses 2nd no-op wait / 3rd identical status check in 15 min; log: ~/.claude/logs/poll-guard.log |
| daemon_proactive_pct | ccd config | per-session weekly-gate percent |
| daemon_weekly_pct | ccd config | pool-wide weekly-gate percent |
Top repeated wait shapes
| Shape | Count |
|---|---|
true | 8,335 |
echo idle | 5,649 |
echo . | 5,372 |
sleep N; echo ok | 3,961 |
date -u | 2,995 |
echo waiting | 2,238 |
| re-reading a background task's output file | 2,081 |
gh pr checks N (single worktree) | 915 |
Status of fixes
| Fix | Status |
|---|---|
| poll-guard hook | live 2026-09-12 |
| autoCompactWindow at 250k | live |
| ccd session/weekly split gates | live |
| CLAUDE.md model/fan-out rule | live |
| PR babysitter (merge-on-green + tiny fixer) | in progress, session 004, dark PR chain |
| AWS-runner-as-event-writer | proposed, pending Fede |
Update this table as fixes graduate from proposed to live — this page is meant to stay current, not be re-written each week.