Claude Code verbrennt bis zu 20 % der Tokens für eine 3-Wort-Statuszeile

Eine Analyse von Flamerix AI zeigt: Claude Code schickt alle ~30 Sekunden das komplette Protokoll jedes Hintergrund-Agenten an das Modell, nur um eine Statuszeile mit 3–5 Wörtern zu erzeugen. Das soll rund 16–20 % der Kosten ausmachen. Ein kleines Skript schaltet das ab, da es offiziell keine Einstellung dafür gibt.

Tools 29. Okt. 2026 6 Min. Lesezeit Quelle: Hacker News
Symbolbild, KI-generiert

Worum es geht

Das Unternehmen Flamerix AI hat ein Skript veröffentlicht, das in Claude Code (Anthropics Programmierassistent für das Terminal) eine unscheinbare, aber teure Funktion abschaltet. Nach Angaben der Autoren schickt Claude Code etwa alle 30 Sekunden für jeden Hintergrund-Agenten dessen komplettes Gesprächsprotokoll an das Modell des Agenten – meist Opus, das leistungsfähigste und teuerste Modell. Die Aufgabe: „Beschreibe deine letzte Aktion in 3–5 Wörtern.“ Die Antwort landet nur in der Statuszeile des Agenten-Panels. Sie erreicht weder das Modell noch deine Unterhaltung.

Es gibt laut Quelle keine Einstellung, die das ausschaltet. Seit Version 2.1.232 (August 2026) ist die Funktion standardmäßig aktiv. Die Analyse stammt aus einem GitHub-Gist, der auf Hacker News diskutiert wird. Das ist eine Herstellerangabe eines Drittanbieters, keine Bestätigung von Anthropic.

Wie das Problem entdeckt wurde

Die Auffälligkeit zeigte sich in der OpenTelemetry-Ausgabe von Claude Code. OpenTelemetry ist ein Standard, um Messdaten wie einzelne API-Anfragen zu exportieren. Wer die Ereignisse claude_code.api_request nach dem Feld query_source gruppiert, sieht „agent_summary“ als eigenen Posten. Bei Flamerix AI (Messung durch DRIM) kostete dieser Posten mehr als die Hauptkonversation selbst:

query_source = agent_summary Woche vor dem Hook 2 Tage danach
Anteil an allen Claude-Code-Kosten 16,4 % (Hauptkonversation: 15,7 %) 0 %
Anteil an allen API-Anfragen 19,7 %, etwa jede fünfte 0 %
Anteil der Kosten auf Opus 96 % –
Eingabe- pro Ausgabe-Token ≈ 9.000 : 1 –

„Kosten“ meint hier Claude Codes eigene Schätzung pro Anfrage (cost_usd), keine Rechnung. Wer ein Abo nutzt, verliert dadurch vor allem Spielraum im Rate-Limit, also im erlaubten Nutzungskontingent. Das Sammel-Issue #86879 bündelt vier unabhängige Messungen mit 18–26 %. Das Verhältnis von etwa 9.000 Eingabe- zu 1 Ausgabe-Token zeigt das Missverhältnis: Es wird sehr viel gelesen, um sehr wenig zu schreiben.

Wie das Skript funktioniert

no-agent-summary.js ist ein „Bun-Preload“. Bun ist die JavaScript-Laufzeit, in der Claude Code läuft; ein Preload ist Code, der vor dem eigentlichen Programm geladen wird. Die Binärdatei selbst wird nicht verändert. Das Skript umhüllt setTimeout und setInterval. Enthält der Quelltext einer Timer-Funktion einen bekannten Anker, etwa die Logzeile [AgentSummary] Timer fired, liefert es einen wirkungslosen Timer zurück. Alle anderen Timer laufen normal.

Warum so umständlich? Das Modul liegt als vorkompilierter Bun-Bytecode vor, daher bringt Textbearbeitung in der Binärdatei nichts. Auch der API-Client läuft nicht über das umhüllbare fetch. Aber Function.prototype.toString liefert den Quelltext einer Callback-Funktion auch aus Bytecode. Der wirkungslose Timer nutzt genau 2³¹−1 Millisekunden, denn größere Werte behandeln Node und Bun als 1 ms – ein „unendlicher“ Wert würde sofort feuern.

Installation in Kurzform (Linux): Skript herunterladen, claude daemon stop --any ausführen und Claude Code mit BUN_OPTIONS="--preload <Pfad>" starten. Dauerhaft geht das über Shell-Profile, systemd-Umgebungsdateien oder einen Wrapper namens claude im PATH. Wichtig: Den Daemon nach der Installation neu starten, weil Daemon, Pty-Host und vorgewärmte Sitzungen die Umgebung des Prozesses erben, der den Daemon gestartet hat. Auch Headless-Läufe (claude -p, Cron, CI, Editor-Integrationen) brauchen die Variable.

Über CC_AGENT_SUMMARY_MODE lässt sich zwischen off (Standard, unterdrückt den Timer) und pass (lädt nur, ändert nichts – als A/B-Kontrolle) umschalten.

Warum die offiziellen Schalter nicht helfen

Die Autoren haben das Bundle durchsucht und nennen mehrere Sackgassen:

  • Die dokumentierte SDK-Option agentProgressSummaries steht auf false, ist im Code aber Teil einer ODER-Verknüpfung; jeder schreibende Pfad setzt true. false ändert also nichts.
  • Das Intervall bestimmt der Server (pro Modellfamilie, begrenzt auf 30–240 s). Der Standard ist schon das Minimum, kein Wert deaktiviert den Timer.
  • DISABLE_NON_ESSENTIAL_MODEL_CALLS kommt in der Binärdatei gar nicht vor. CLAUDE_CODE_FORK_SUBAGENT=0 und CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 stoppen es zwar, nehmen aber Fork-Subagenten bzw. Hintergrund-Agenten gleich mit.
  • Der Prompt-Cache (zwischengespeicherte, günstiger abgerechnete Eingaben) macht es billiger, aber nicht billig: Rund 98 % der Aufrufe lesen aus dem Cache, die übrigen ~2 % mit kaltem Cache verursachen über ein Drittel der Kosten.
  • Kostenwerkzeuge, die Sitzungsprotokolle auswerten, sehen die Anfragen nicht, weil sie nicht auf die Platte geschrieben werden (#104358). Nur der OpenTelemetry-Export zeigt sie.

Interessant: Version 2.1.310 enthält bereits einen günstigeren „Short Mode“ (etwa 2.000 Token Notizen statt des vollen Transkripts, optional von einem kleineren Modell geschrieben). Er ist aber abgeschaltet und lässt sich nur per Server-Flag ändern.

Verlauf und Überprüfung

Die Funktion tauchte in 2.1.32 (5. Feb.) erstmals im Code auf, wurde in 2.1.72 als SDK-Option erreichbar, in 2.1.117 im interaktiven CLI, ab 2.1.232 (13. Aug.) standardmäßig aktiv; ab 2.1.300 (14. Okt.) ist das Intervall serverseitig einstellbar. Der Wochenanteil an den Kosten stieg bei den Autoren von 3,5–7 % im Juli auf rund 16 % Mitte Oktober.

Getestet wurden die Versionen 2.1.257 bis 2.1.312: In einem etwa 2,5-minütigen Agentenlauf gab es ohne Hook rund 5 Zusammenfassungs-Forks, mit Hook im Modus off null. Da ein Update das Verfahren stillschweigend aushebeln kann (etwa bei umbenannten Logzeilen oder anderem Timer-Mechanismus), sollte man nach jedem Update prüfen: Logdatei mit CC_AGENT_SUMMARY_LOG ansehen und in der Telemetrie kontrollieren, ob agent_summary bei null bleibt.

Was du beachten solltest

Es handelt sich nicht um ein Modell, sondern um ein Hilfsskript, das du nicht „herunterlädst und startest“ wie eine KI. Praktisch brauchst du: Linux (macOS und Windows ungetestet; unter Windows wird der Hook wohl nie greifen), eine Claude-Code-Installation und Zugriff auf Shell-Umgebungsvariablen. Den Effekt siehst du nur, wenn du Telemetrie exportierst. Sichtbare Folge: Die Statuszeile der Agenten im Panel wird nicht mehr aktualisiert; im SDK enthält task_progress keine Zusammenfassung. Subagenten, Hintergrund-Agenten und Skills laufen normal. Der Overhead ist gering (claude --version: ca. 10 → 17 ms, eine Messung).

Einordnung

Die Zahlen kommen von einem einzelnen Anbieter plus Nutzerberichten im Issue-Tracker; Anthropic hat sich in der Quelle nicht geäußert. Dass vier unabhängige Messungen in ähnlicher Größenordnung liegen, spricht aber dafür, dass es ein reales Muster ist. Vor allem für Abo-Nutzer mit vielen Hintergrund-Agenten kann das merklich Kontingent sparen.

Kritisch: Das Skript greift in das Laufzeitverhalten eines Clients ein und kann laut Autoren gegen Nutzungsbedingungen verstoßen; Haftung und Prüfung liegen bei dir. Zudem ist es fragil, weil es auf Textankern im Quelltext beruht. Eine saubere Lösung wäre ein offizieller Schalter oder die Aktivierung des bereits eingebauten Short Mode. Bis dahin ist das ein lehrreiches Beispiel dafür, wie versteckte Nebenanfragen die Kosten von KI-Werkzeugen treiben – und warum Telemetrie so wichtig ist.

Quellen

#claude-code#anthropic#tokens#kosten#agenten#opentelemetry
Originalquelle lesen

Frag den KI-Assistenten

Fragen zu diesem Artikel, zur Installation oder zu Hintergründen? Unser Assistent kennt diese Seite und läuft auf unserem eigenen Rechner, nicht in einer fremden Cloud.

Verbinde …

Der Assistent ist eine KI (Gemma 4) und kann sich irren – wichtige Angaben bitte in der Quelle prüfen. Fragen werden nur zum Beantworten genutzt und nach einer Stunde gelöscht. Bitte keine persönlichen Daten eingeben.

Kommentare

Was meinst du dazu? Schon ausprobiert? Schreib es hier, ohne Anmeldung.

  1. Kommentare werden geladen …

Kommentare sind öffentlich. Links sind nicht erlaubt, beleidigende Beiträge löschen wir. Deinen eigenen Kommentar kannst du in diesem Browser jederzeit wieder löschen. Mehr dazu in der Datenschutzerklärung.