Session audit — 2026-09-04

Back to the curated DOs and DON’Ts

Hero card for "Session audit — 2026-09-04": four-rule waste breakdown (NO_SUBAGENT $73.04, CACHE_TTL_EXPIRY $35.26, DUP_TOOL_CALL $14.01, BIG_TOOL_OUTPUT $7.58) with 854 sessions, 28,237 turns, 916 findings, headline waste $56.85.

Headline

854 sessions · 28,237 turns · cacheRead 3989.1M · cacheCreation 47.9M · hit ratio 0.988

findings: 916 · headline waste 25,869K tokens ≈ $56.85

NO_SUBAGENT carries a separate counterfactual of 44,256K ≈ $73.04 — it is not summed into the headline (different counterfactual: delegate-the-phase rather than read-less).

Unpriced-model share: 17.2% (8 local/cheap models — MiniMax-M2.7, MiniMax-M3, Ornith-1.0-9B-4bit, Ornith-1.0-9B-oQ4-fp16, Ornith-1.5-9B, Ornith-1.5-9B-MLX-4bit, Qwen3.8-27B-OptiQ-4bit, gpt-oss-20b-MXFP4-Q8). 82.8% of waste carries a price. Dollar and token totals are a floor: thinking tokens and compaction events are not measured by any rule.

Findings by rule (headline)

rulefindingssessionswaste tokens$USDseverity
CACHE_TTL_EXPIRY543611,409K$35.262 low / 52 medium
DUP_TOOL_CALL6521569,178K$14.01152 high / 500 medium
BIG_TOOL_OUTPUT71665,279K$7.5871 medium
RETRY_STORM332K<$0.013 high
CONTEXT_GROWTH95950K$066 high / 29 medium (amplifier — zero direct cost)
NO_SUBAGENT       ██████████████████████████████████████████████████  41 findings / 41 sess / $73.04  (separate counterfactual)
CACHE_TTL_EXPIRY  █████████████████████████                           54 findings / 36 sess / $35.26
DUP_TOOL_CALL     ████████████                                       652 findings / 156 sess / $14.01
BIG_TOOL_OUTPUT   ██████                                             71 findings / 66 sess /  $7.58

(bar widths scaled to NO_SUBAGENT, the largest rule — CACHE_TTL_EXPIRY’s bar shows its share of the headline ratio, not the absolute.)

Cache-hit ratio distribution

>=0.95         ██████████████████████████████████████████████████  155 sess  (healthy)
0.50-0.90      ██████████████████████████████                       96 sess  (warning)
0.90-0.95      ██████████████████                                  55 sess
<0.50          ████                                                16 sess

532 sessions have no cache and are excluded from the histogram (local/free models that bypass caching). Six of the costliest low-ratio sessions are NOT flagged by CACHE_MISS_RATE because they exceed the entry threshold; they are listed in the worst-sessions table below.

Projects by waste (dollars)

personal-claude-lens              ██████████████████████████████████████████████████  212 sess / $16.17
personal-fine-tuning              ██████████████████████████                         28 sess /  $8.20
personal-aswe-lms                 ████████████████████████                          130 sess /  $7.76
personal-agentic-vod              ██████████████                                    91 sess /  $4.46
al-claude-lens--worktrees-36      █████████                                          4 sess /  $2.92
al-claude-lens--worktrees-41      ████████                                           6 sess /  $2.73
al-claude-lens--worktrees-37      ████████                                           6 sess /  $2.48
al-claude-lens--worktrees-35      ████                                               5 sess /  $1.36

personal-fine-tuning ranks 3rd by tokens (1,868K) but 2nd by dollars ($8.20) — a 3-5× per-token premium from Opus. The dollar order is the order to act on; the worktree projects share a single codebase but are ranked separately because each worktree path is its own session namespace.

Worst sessions by waste

sessionIdprojectdateturnspeaksubwaste$USDrule mix
4a5aac31-3f1c-4762-8896-a8be5693bd1cpersonal-claude-lens2026-07-27294602KY2849K$5.70DUP×9, TTL×4, BIG×1, CTX×1
e245fe56-bc55-461b-9c63-6c9efe7d6c62al-claude-lens—worktrees-362026-07-18564662KY1307K$2.61BIG×2, DUP×23, CTX×1
c0c38347-5fe4-43b8-aa68-22dd09ce77c1personal-aswe-lms2026-08-18554770Kn1277K$2.60TTL×2, NO_SUB×1, DUP×21, CTX×1
449adc51-bff4-4b1f-9092-753a7dd1c328personal-fine-tuning2026-08-20146203Kn1256K$6.28TTL×8, CTX×1
3ae6d031-d88a-4c98-a490-39109c50d261al-claude-lens—worktrees-412026-07-18367473Kn1182K$2.36NO_SUB×1, DUP×15, TTL×1, CTX×1
a52bf19a-3e45-4b19-a37b-82fb1200850bal-claude-lens—worktrees-372026-07-18586553Kn1081K$2.16NO_SUB×1, BIG×1, DUP×21, CTX×1
5078672b-dc97-4036-b936-80c52a4a42a2al-claude-lens—worktrees-352026-07-20326244KY980K$0DUP×10, BIG×2, CTX×1 (unpriced model)
b7f43ac2-c2a1-44fc-a2ef-064a16f36e49personal-agentic-vod2026-08-08198404Kn916K$1.83NO_SUB×1, TTL×1, DUP×21, BIG×1, CTX×1

429adc51 (personal-fine-tuning) is the worst by dollar-per-token ratio at $5.00 per K tokens — about 5× the directory average — driven by 8 user_idle TTL gaps in a single 146-turn session where the user paused to read and ask follow-ups.

Idle-gap cost curve (raw cache-creation tokens)

gapturnscc/turnratio vs baselineexcess (raw)
< 1 min26,5879921.0×
1–5 min1,0003,2183.2×2,226K
5–30 min25114,96315.1×3,507K
> 30 min7493,35394.1×6,835K

Total raw excess 12,567K = 14,453K cost-equivalent (compared with CACHE_TTL_EXPIRY waste of 11,409K — the gap curve and the rule corroborate each other). 52 of 54 TTL findings carry gapKind: user_idle (96%); only 2 are tool_runtime (priced at zero by design).

Trend by date

2026-07-12→08-08  ██████████████████████████████████████████████████  231 sess / 19,118K waste / 0.70% rate
2026-08-09→09-04  ██████████████████                                94 sess /  6,751K waste / 0.55% rate

The window is split at the median session date. Waste rate dropped from 0.70% to 0.55% — a ~21% relative improvement, but most of that drop is the smaller read volume in the later window (1,238M vs 2,750M). Token-wise the per-turn rate is roughly steady.

Ranked fixes

#1 · TTL expiry after user_idle gaps — $35.26 / 11,409K (62% of headline)

#2 · DUP_TOOL_CALL on Read — $11.66 / 7,660K (21% of headline)

#3 · NO_SUBAGENT in marathon sessions — 44,256K / $73.04 (separate counterfactual, 1.3× headline)

#4 · BIG_TOOL_OUTPUT on Read — $7.58 / 5,279K (13% of headline)

#5 · Opus per-token premium on personal-fine-tuning — $8.20 from 28 sessions

#6 · personal-claude-lens concentration — 7,183K / $16.17 (28% of headline)

Do this first

#3 NO_SUBAGENT is the highest-leverage single fix by sheer magnitude ($73.04 — equal to all the rest combined) and is the only one reachable via a skill_file edit that keeps paying. The TTL/DUP fixes (#1, #2) require indefinite discipline; the Opus fix (#5) is a config change but its dollar savings depend on whether the model choice is genuinely negotiable.

Pick: edit dev-pipeline:plan-architecture/SKILL.md to add a Phase-1 rule: “if the spec mentions ≥5 files or ≥8 distinct tasks, spawn a research subagent before drafting the plan; cite its findings in the plan.” That single rule converts the worst NO_SUBAGENT pattern (93 inline scan calls, 468K bytes, 6,074K waste) into a delegated scan that holds its own context. Cost: one file edit. Permanence: indefinite.

Then #1 TTL (CLAUDE.md already documents /clear-after-break; the audit shows it isn’t being applied — add a one-line reminder at the top of global CLAUDE.md).

Trend

First audit — no baseline yet (~/.claude/audit-reports/ was empty before this run). The within-run date split (Jul 12–Aug 8 vs Aug 9–Sep 4) shows waste rate dropping from 0.70% → 0.55%, but the later window is half the volume of the earlier one, so the rate drop is largely a denominator effect. Next audit’s headline number is what will tell us if the trend is real.

Audit self-cost

Stats this report wanted and could not get