8.1 KiB
Usage-Optimierung — Befunde und Messmethodik
Stand: 2026-08-05. Ausgangsfrage: Wie lassen sich autonome ClaudeDo-Agents token-effizient betreiben? Abrechnung läuft über Abo-Session-Limits, nicht über die API — relevant ist roher Token-Verbrauch gegen 5h-/7d-Fenster, nicht Geld.
Dieses Dokument ist bewusst kompakt gehalten. Was eine Session früh in den Prefix lädt, wird mit jeder weiteren Nachricht multipliziert (siehe Befund 5) — ein 30k-Handover-Dokument würde das Problem reproduzieren, das es beschreibt.
1. Verbrauchsstruktur
Gemessen über alle Transcripts unter C:\Users\mika.kuns\.claude\projects.
| Posten | Roh-Token | Anteil |
|---|---|---|
| Cache-Read | 3.118.025.644 | 95,6 % |
| Cache-Write | 140.783.227 | 4,3 % |
| Output | 22.466.702 | 0,7 % |
| Input frisch | 141.496 | 0,0 % |
Kontext-Resend = 99,3 % des Rohverbrauchs. Auch unter API-Preisgewichtung (read 0,1× / write 1,25× / out 5×) bleibt es bei 81,3 %. Die Rangfolge ist gegen jede plausible Gewichtung robust.
Verstärkung: ~3,6 Mio einzigartiger Inhalt → 1,59 Mrd abgerechnete Prompt-Token in ClaudeDo-Sessions. Jeder Kontext-Token wird im Schnitt ~425× erneut abgerechnet.
2. Scope-Split — wer verbraucht
| Scope | Roh-Token | Anteil |
|---|---|---|
| INTERAKTIV (Mikas eigene Sessions) | 2.690.028.785 | 81,6 % |
| AGENT (ClaudeDo-Runs) | 606.222.055 | 18,4 % |
Interaktiv nach Modell: opus-4-8 33,0 % · opus-5 28,5 % · sonnet-5 14,0 % · fable-5 5,2 %. Agent-Runs fahren überwiegend sonnet-5 — der Default greift, die Modelldisziplin auf Agent-Seite ist in Ordnung.
Konsequenz: ClaudeDo-Optimierung adressiert maximal 18 % des Limits. Der größere Block sind die eigenen Opus-Sessions.
3. Session-Länge ist der Treiber
Verbrauch ≈ Nachrichten × Ø-Kontext, und der Kontext wächst mit den Nachrichten → quadratisch. Eine Session in k Teile schneiden bringt grob 1/k.
Interaktiv: Top 20 von 255 Sessions = 55,9 % des Verbrauchs.
| Roh-Token | Msgs | Ø Kontext | Modell |
|---|---|---|---|
| 199.516.097 | 716 | 278.653 | opus-4-8 |
| 138.020.247 | 440 | 313.682 | opus-5 |
| 123.586.522 | 463 | 266.925 | opus-4-8 |
4. Was den Kontext füllt
| Tool | Anteil (Agent) | Anteil (interaktiv) |
|---|---|---|
| Read | 59,8 % | 68,2 % |
| Bash | 16,3 % | 15,4 % |
| Grep | 8,3 % | 5,2 % |
Read ohne offset/limit: 57 % (Agent) / 62 % (interaktiv).
Re-Reads derselben Datei in derselben Session: 18 % der Read-Calls.
Subagent-Nutzung: nur 40 Calls bei 1.325 Reads (Agent-Seite) — die
Kontext-Firewall ist praktisch ungenutzt. Interaktiv sind Subagent-Sessions
dagegen 20 % des Verbrauchs.
Teuerste Read-Ziele sind God-Files: TasksIslandViewModel.cs (1121 Z.),
ExternalMcpService.cs (1002 Z.), WorkerHub.cs (979 Z.).
5. Prefix-Größe × Nachrichtenzahl schlägt alles
Fallstudie an der Analyse-Session selbst (136 Msgs, 43.492.835 Roh-Token):
msg 1 : 39.914
msg 3 : 273.822 (+233.908) <-- claude-api-Skill geladen
msg 136: 380.327
Der Skill in Nachricht 3 wurde danach 136× mitgelesen: 31,8 Mio Token = 73 % der Session. Zum Vergleich: alle tool_results zusammen = 21.600 Token (0,05 %).
Discovery ist praktisch gratis, wenn man aggregiert statt Dateien dumpt. Teuer ist ausschließlich, was früh und groß in den Prefix wandert. Derselbe Block in Nachricht 120 geladen hätte ein Zwanzigstel gekostet.
6. Amortisation von Planungssessions
| Posten | Token |
|---|---|
| Analyse-Session gesamt | 43,5 Mio |
| davon vermeidbarer Prefix-Ballast | −31,8 Mio |
| echte Planungsleistung | ≈ 11,7 Mio |
Gegenrechnung: 10 von 37 Tasks brauchten einen Retry (27 %), 13 von 54 Runs sind Wiederholungen. Ein Agent-Run liegt im Schnitt bei ~11 Mio Roh-Token — ein vermiedener Retry spart also grob eine ganze Planungssession. Dazu ersparte Rediscovery: ein Fund von ~8k Token, den ein Agent in Turn 10 eines 60-Turn-Runs selbst machen müsste, wird danach ~50× mitgelesen = ~400k pro Fund.
Fazit: gründliche Planung rechnet sich — aber nur bei schlankem Prefix.
Was NICHT hilft (geprüft und verworfen)
--effortsenken. Thinking ist 12.536 Token über alle interaktiven Sessions = 0,00 % des Verbrauchs. Effort zu senken spart nichts und kostet Qualität. Endgültig erledigt.- Skill-Trigger entschärfen. Der
claude-api-Skill kostete in einer Session 73 % — feuerte aber nur 2× in 3 Wochen (2026-07-14, 2026-08-05). Erwarteter Nutzen vernachlässigbar, Risiko (Antworten aus veraltetem Prior) real. Er hat sich in dieser Session sogar bezahlt gemacht: der Hinweis, dassinput_tokensnur der uncached Rest ist, hat den Accounting-Bug aufgedeckt. - God-Files splitten. Eigenes Risiko; Read-Disziplin entschärft das Symptom billiger.
Offene Hebel — noch nicht untersucht
- Interaktive Session-Hygiene: ab wann lohnt
/clear, messbar an Ø-Kontext? - Modellrouting interaktiv (opus-4-8 + opus-5 = 61,5 % des Accounts).
- Subagent-Ökonomie: Firewall-Nutzen gegen Eigenverbrauch (20 % interaktiv).
- MCP-Tool-Definitionen im Prefix: Umfang bei ~200 deferred Tools nicht gemessen.
- Kalibrierung der tatsächlichen Limit-Gewichtung gegen die Rohtoken-Zahlen
(braucht
/usage-Ausgabe; der OAuth-Endpoint ist für Claude nicht zugänglich, weil~/.claude/.credentials.jsonhart blockiert ist).
Messmethodik (reproduzierbar)
Datenquelle: C:\Users\mika.kuns\.claude\projects\**\*.jsonl, ein Record je
Message, Verbrauch in message.usage.
raw = (u.get('input_tokens',0) + u.get('output_tokens',0)
+ u.get('cache_read_input_tokens',0) + u.get('cache_creation_input_tokens',0))
Kontextgröße einer Message = input_tokens + cache_read + cache_write (ohne
Output). Der Verlauf über die Session zeigt Prefix-Sprünge.
Fallstricke
- Scope-Filter. NICHT nach Pfadname
claudedofiltern — das zieht interaktive Sessions im ClaudeDo-Repo mit rein und verfälscht den Split massiv (53 % statt korrekt 18,4 %). Agent-Runs erkennt man anclaudedo-worktreesodersandboxim Projektordner, so wie esTranscriptUsageReadermacht. <synthetic>-Messages überspringen — keine echten API-Calls.task_runs.tokens_inist unbrauchbar — liest nurinput_tokens, also den uncached Rest. Lag bei einer 79-Mio-Token-Session bei 200 (Faktor ~400.000).tokens_outzusätzlich 3,8× zu niedrig. Siehe Task38394081.- In Bash absolute Pfade verwenden —
$HOME/~zeigt auf dieser Maschine auf das P:-Laufwerk, nicht aufC:\Users\mika.kuns. - DB nie direkt lesen während die App läuft — Kopie ziehen (
todo.db+todo.db-wal). - Grundrate prüfen, bevor ein Hebel empfohlen wird. Ein teurer Einzelfall ist kein Muster (siehe Skill-Trigger oben).
Abgeleitete Tasks (Liste „Claude do")
Empfohlene Reihenfolge:
| # | ID | Titel |
|---|---|---|
| 1 | 1b599d67 |
Prompt-Dateien frieren Default ein — SuggestImprovement/AskUser tot |
| 2 | 38394081 |
Limit-Verbrauch pro Run sichtbar machen (Cache-Token in task_runs) |
| 3 | 0d0aa8b0 |
Read-Disziplin + Explorer-Subagent im System-Prompt |
| 4 | 2de2f008 |
max_turns deckeln (Ceiling, Defaults, UI-Warnung) |
| 5 | 87105f5e |
UsageGate: Parallelität stufenweise drosseln |
(1) zuerst, weil es ein echter Funktionsbug ist und Voraussetzung dafür, dass (3) den Nutzer überhaupt erreicht. (2) als Nächstes, weil ohne korrektes Accounting nichts messbar ist.
Ist-Zustand zum Zeitpunkt der Analyse
app_settings:default_model= sonnet,default_max_turns= 100,max_parallel_executions= 3,model_presets= null (fällt auf Defaults zurück: haiku 20 / sonnet 30 / opus 40 / fable 25 — greifen faktisch nie).- 15 Tasks überschreiben
max_turnsnach oben: 10× auf 100, 5× auf 200. - UsageGate existiert bereits: 5h @ 80 %, 7d @ 90 %
(Migration
20260805074906_AddUsageGateAndRunModel, dieselbe Migration hat auch diemodel-Spalte auftask_runsgebracht). ~/.todo-app/prompts/system.mdstammt vom 2026-06-04 und weicht vomSystemDefaultinPromptFiles.csab;agent.mdundplanning.mddort sind verwaiste Reste eines alten Namensschemas.