Ugo Lattanzi
Diese Seite gibt es auch aufEnglishItaliano
Veröffentlicht am

Kontext ist ein Budget

Zwischen dem Punkt, an dem die Qualität nachzulassen beginnt, und dem Punkt, an dem Sie es merken, liegen Stunden Arbeit. Dazwischen warnt nichts: es gibt eine Zahl, die kaum jemand im Blick behält.

Es gibt einen Moment in langen Sitzungen mit einem Coding-Agenten, in dem sich die Antworten ändern, ohne dass sich der Ton ändert. Er schlägt einen Weg vor, den Sie vor einer Stunde verworfen hatten. Er verliert eine Vorgabe, die mündlich entschieden und nie in eine Datei geschrieben wurde. Er erklärt eine Arbeit für fertig, die nicht fertig ist.

Nichts davon wird gemeldet. Das Modell sagt Ihnen nicht «ab hier denke ich schlechter»: es antwortet mit derselben Sicherheit wie zwei Stunden zuvor, und irgendwann merken Sie, dass Sie mehr korrigieren als bauen.

Der Zyklus einer langen Sitzung: Sitzung, Kontext wächst, stiller Qualitätsverlust, Handoff, clear, neue Sitzung. Der Handoff ist eingerahmt.
Der Verlust geschieht im dritten Schritt und erzeugt kein Signal. Eingreifen können Sie nur im Schritt danach.

Der Verlust wartet nicht auf die Million

Ein Kontextfenster ist ein Fassungsvermögen, keine Garantie. Zwei verschiedene Dinge, und das Marketing hält sie bewusst nahe beieinander.

Die zwei besten Messungen, die ich kenne, sind über ein Jahr alt, und das gehört vor die Zahlen: die Modelle darin sind grösstenteils überholt, einige abgekündigt. Sie sind keine Momentaufnahme von heute. Sie belegen, dass das Phänomen existiert und wie es sich verhält — und darin hat keine spätere Arbeit ihnen widersprochen.

**NoLiMa** (Adobe Research, Februar 2025, dann ICML 2025) hat zwölf Modelle geprüft, die mindestens 128k Token angaben, mit Fragen, die kein Wort mit der Antwort teilen — also nicht über wörtliche Übereinstimmung lösbar. Bei 32k Token fielen zehn dieser zwölf unter die Hälfte des Werts, den sie bei kurzem Kontext erreichten. GPT-4o, heute alt und im Auslaufen, damals aber unter den besten der Gruppe, ging von 99,3% auf 69,7% zurück. Zweiunddreissigtausend Token: in einer echten Arbeitssitzung überschreiten Sie die vor dem Mittagessen.

**Chroma** (Juli 2025) hat die Messung an achtzehn Modellen wiederholt — Claude, GPT, Gemini, Qwen, ebenfalls in den damaligen Versionen — in der Arbeit, die den Begriff Context Rot bekannt gemacht hat. Das Ergebnis lautet nicht «ab einer bestimmten Schwelle bricht es ein»: die Leistung bleibt bei keinem Längenzuwachs konstant, nicht einmal bei trivialen Aufgaben, und der Abfall ist ungleichmässig. Ein einziger Distraktor im Kontext genügt, um unter die Baseline zu fallen. Im konversationellen Benchmark LongMemEval ist der Abstand zwischen den rund 300 Token, die das Modell braucht, und den 113k des ganzen Gesprächs bei allen deutlich.

Der Einwand ist berechtigt, und er ist doppelt: das sind synthetische Benchmarks, und sie laufen auf den Modellen von gestern. Er gilt für die genauen Zahlen, nicht für die Richtung — die über dreissig Modelle und vier verschiedene Familien hinweg dieselbe ist und die Anthropic architektonisch statt empirisch erklärt: das Modell hat ein endliches Aufmerksamkeitsbudget, jedes Token, das Sie hinzufügen, zehrt daran, und der Transformer bildet paarweise Beziehungen zwischen allen Token — bei hunderttausend Token sind das zehn Milliarden. Das ist eine Eigenschaft des Mechanismus, kein Mangel einer Generation. Ein neues Modell verschiebt die Schwelle; es hebt sie nicht auf.


Compaction ist nicht die Lösung, sie ist das Symptom

Die naheliegende Antwort, wenn der Kontext voll wird, heisst kompaktieren: das Gespräch zusammenfassen und von dort weitermachen. Das macht Auto-Compact auch von selbst, und fast immer im ungünstigsten Moment.

Das Problem ist, was die Zusammenfassung mitnimmt. Wenn Sie zwei Stunden an einem Fehler gesessen haben, der am Ende eine vertauschte Bedingung war, stecken in der Sitzung sämtliche falschen Hypothesen, über die Sie dorthin gekommen sind. Compaction unterscheidet sie nicht vom Rest: sie fasst auch die zusammen, und das Modell findet sie als guten Zustand wieder — zusammengefasst, also ohne den Kontext, der es erlaubt hatte, sie zu verwerfen.

Dazu hat Anthropic das Nützlichste geschrieben, was ich dieses Jahr gelesen habe. Im Text zum Harness-Design für langlaufende Anwendungen vom März 2026 trennen sie Compaction und Context Reset: die erste fasst am selben Ort zusammen und lässt bestehen, was sie Context Anxiety nennen — der Agent beginnt vorzeitig abzuschliessen, weil er glaubt, nahe an seiner Grenze zu sein. Bei Sonnet 4.5 war der Effekt stark genug, dass Compaction allein für lange Aufgaben nicht reichte. Übernommen haben sie stattdessen: das Fenster leeren und einen frischen Agenten starten, mit einem Handoff-Artefakt, das Zustand und nächste Schritte trägt.

Eine Compaction gibt Ihnen Platz zurück, keine Qualität. Das angesammelte Rauschen kommt zusammengefasst wieder herein, und das Modell behandelt es als guten Kontext.

Der Handoff ist der Schritt, den Sie entscheiden

Der Unterschied zwischen Compaction und Handoff ist nicht technisch, sondern eine Frage der Zuständigkeit. Eine Compaction ist eine Komprimierung, die Sie erleiden: die Maschine entscheidet, was überlebt, und sie entscheidet danach, wie viel Platz gebraucht wird. Ein Handoff ist ein Dokument, das Sie schreiben, auf die Festplatte, vor dem Leeren — und was hineinkommt, ist eine Wahl.

Die Skill handoff von Matt Pocock ist die schlankste Fassung, die ich kenne. Sie schreibt das Dokument in das temporäre Verzeichnis des Systems und nicht in den Workspace, damit das Repository sauber bleibt. Sie enthält einen Abschnitt «suggested skills», sagt dem nächsten Agenten also, womit er ansetzen sollte. Und vor allem verbietet sie Dopplung: was bereits in einem Plan, einem ADR, einem Commit oder einem Diff steht, wird nicht zusammengefasst, sondern über den Pfad referenziert. Das ist die Regel, die das Dokument klein hält, und derselbe Grund, warum es funktioniert — ein langer Handoff ist eine von Hand geschriebene Compaction.

Dann /clear, und Sie starten neu mit einem leeren Fenster und dreihundert Zeilen ausgewähltem Zustand. Es ist dasselbe Prinzip, über das ich unter wann man nicht automatisieren sollte geschrieben habe: automatisieren lässt sich der Transport, nicht das Urteil darüber, was mitzunehmen sich lohnt.


Aber um zu entscheiden, müssen Sie die Zahl sehen

Hier liegt die praktische Lücke. Der Handoff muss vor dem Bedarf passieren, und um ihn früh zu machen, müssen Sie wissen, wo Sie stehen. Claude Code hat die Zahl, zeigt sie aber spät und beiläufig: wenn der Hinweis erscheint, hat der Verlust, den NoLiMa beschreibt, längst begonnen.

Deshalb habe ich imperStatusLine geschrieben, eine Status Line für Claude Code. Die Ausgangsidee ist banal: die Status Line ist die einzige Fläche, die beim Arbeiten immer sichtbar bleibt, und sie wird damit verschwendet, das aktuelle Verzeichnis zu zeigen.

Die Status Line von Claude Code über sechs Zeilen: Kopfzeile mit dem aktiven Stil, dann Uhrzeit, Modell, Effort und Permission Mode, die Zählungen der Umgebung, der Kontextbalken bei 15% eines Fensters von einer Million Token, die Token der Sitzung, die Kosten und die Kontingente für fünf Stunden und sieben Tage.
Eine Sitzung bei 15%: der Balken ist grün, es ist nichts zu entscheiden. Der Moment, der zählt, ist der, in dem diese Zahl die 60 überschreitet — und nur so sehen Sie ihn kommen.

In der Mitte steht der Kontextbalken: für den belegten Teil, für den freien, bemessen an der tatsächlichen Breite des Terminals. Daneben der Prozentwert und die wahre Grösse des Fensters — aus dem Feld gelesen, das Claude Code übergibt, nicht aus dem Modellnamen erraten. Auf dem Bild steht er bei 15% von einer Million: der Moment, in dem Sie nicht daran denken müssen, und genau der Moment, in dem eine Status Line still sein können muss.

Die Farbe sagt eine Sache, und sagt sie überall

Eine einzige Funktion, color_pct, färbt den Kontextwert, das Fünf-Stunden-Kontingent und das für sieben Tage: grün unter 60%, gelb bis 79, rot ab 80. Drei verschiedene Grössen, eine Skala, nichts zu merken.

Die zwei Ausnahmen sind gewollt, und dort wechselt Rot seine Bedeutung. Der Effort ist gegen den gesunden Menschenverstand gefärbt — low grün, medium gelb, high, xhigh und max rot — weil Rot dort nicht «schlecht» heisst, sondern «Sie geben aus». Der Permission Mode folgt derselben Logik: default grün, accept gelb, plan violett, bypass rot. Nicht weil Arbeiten im Bypass falsch wäre, sondern weil es der einzige Zustand ist, in dem Sie niemand aufhält — und das sollte man wissen, ohne darüber nachdenken zu müssen.

Der Marker, um den es in diesem Artikel geht

In der Kontextzeile erscheint ein rotes ⚠ 200k, sobald die Sitzung 200'000 Token überschreitet. Das ist keine Schwelle, die ich gewählt habe: es ist das Feld exceeds_200k_tokens, das Claude Code ohnehin übergibt und das fast keine Oberfläche anzeigt.

Es ist nötig, weil der Balken bei einem Fenster von einer Million bis 60% grün bleibt, also bis sechshunderttausend Token — dreimal darüber. Dieser Marker ist das Einzige, was Sie daran erinnert, dass das Fassungsvermögen und der Bereich, in dem das Modell gut denkt, zwei verschiedene Zahlen sind. Er ist dieser ganze Artikel, komprimiert auf fünf Zeichen.

Die Zeilen, eine nach der anderen

ZeileWas Sie darin lesen
Kopfzeileden aktiven Output Style, oder den Namen des Agenten in einer --agent-Sitzung. Nicht die aktive Skill: das JSON der Status Line gibt sie nicht her
TIME · MODEL · EFFORT · PERMUhrzeit, Modell mit dem Zusatz (1M) bei dieser Variante, Reasoning-Stufe, Permission Mode
ENVverfügbare Agents, Skills, Hooks, Plugins und Befehle — gezählt über die installierten Plugins statt über die Marketplaces: es ist das, was Claude Code tatsächlich lädt. Mit laufenden Subagenten wird daraus 58 (4 active)
CONTEXTder Balken, der Prozentwert, das Fenster, das ⚠ 200k
TOKENSIn, Out, Cached, Total. Wenn In lächerlich klein wirkt, ist das kein Fehler: das ist der Prompt-Cache bei der Arbeit
SESSIONKosten in Dollar, hinzugefügte und entfernte Zeilen, echte Laufzeit der Sitzung
QUOTAVerbrauch des Fünf-Stunden-Fensters und des Sieben-Tage-Fensters, mit der Uhrzeit des Resets
PWDVerzeichnis, Branch, Alter des letzten Commits, geänderte Dateien, ahead/behind, und der offene Pull Request auf dem Branch mit dem Review-Status: genehmigt, Änderungen gefordert, ausstehend, Entwurf
TASKSerscheint nur, wenn etwas unterwegs ist: Hintergrund-Tasks und Subagenten, die noch nichts zurückgegeben haben

Auf dem Bild fehlt die Zeile PWD, und das ist kein Defekt: ich arbeite in Warp, das Verzeichnis, Branch und Diff bereits in seiner eigenen unteren Leiste zeigt, also unterdrückt das Skript sie — und aus demselben Grund entfällt Lines +/- in der SESSION-Zeile. Eine doppelt angezeigte Information kostet so viel Aufmerksamkeit wie eine versteckte.

Das ist kein Cockpit für die Neugier. Jede dieser Zeilen ist der Eingang zu einer Entscheidung: der Prozentwert sagt, ob es Zeit für den Handoff ist, der Permission Mode sagt, wie weit Sie laufen lassen können, das Sieben-Tage-Kontingent sagt, ob Sie das grosse Modell jetzt verbrauchen sollten oder in zwei Stunden, die laufenden Tasks sagen, ob Sie wirklich fertig sind. Es sind dieselben Angaben, die Sie vorher an drei Orten gesucht haben, jede zu einem Aufmerksamkeitspreis, den Sie nur zahlten, wenn Sie daran dachten.


Installation

git clone https://github.com/imperugo/imperStatusLine.git
cd imperStatusLine
./install.sh

Der Installer kopiert das Skript nach ~/.claude/imperStatusLine.sh, macht es ausführbar und schreibt den Eintrag in ~/.claude/settings.json:

"statusLine": {
  "type": "command",
  "command": "bash $HOME/.claude/imperStatusLine.sh",
  "padding": 0
}

Findet er eine frühere Version, legt er sie als .bak.<epoch> beiseite, statt sie zu überschreiben, und er ist idempotent: ein erneuter Lauf auf einer bereits eingerichteten Maschine richtet keinen Schaden an. ./install.sh --uninstall entfernt den Eintrag aus den Settings und das Skript.

Die einzige zwingende Abhängigkeit ist jq. npx und ccusage dienen nur als Rückfallebene für das Fünf-Stunden-Kontingent, wenn Claude Code keine nativen Rate Limits übergibt. Unter Windows sucht das Skript jq selbst in den winget-Pfaden, weil die Bash, die Claude Code dort verwendet, den System-PATH nicht erbt: ohne diese Suche kommt jedes Feld als Null heraus, und nicht auf offensichtliche Weise.


Was sie nicht tut

Sie bewahrt Sie nicht vor Halluzinationen und verwaltet Ihren Kontext nicht. Es steckt keine Intelligenz darin: sie liest, was Claude Code übergibt, und ordnet es so an, dass Sie darauf entscheiden können. Das Urteil bleibt bei Ihnen, wie in den Systemen, über die ich zum Thema Human-in-the-Loop geschrieben habe — mit dem Unterschied, dass die Person im Kreislauf hier Sie sind und der Kreislauf Ihr Nachmittag ist.

Der Teil, der mehr gekostet hat als erwartet, ist der, den man nicht sieht. Seit Version 2.1 übergibt Claude Code Kontext, Kosten, Effort, Rate Limits und PR-Status direkt im JSON auf stdin; davor mussten sie über das Transkript und ein externes Werkzeug für die Kontingente rekonstruiert werden. Beide Wege am Leben zu halten ist der grösste Teil der Komplexität des Skripts, und der Teil, der bricht, wenn ein Feld umbenannt wird. Es ist auch der einzige, der die Sorgfalt wert ist: eine Status Line, die eine falsche Zahl zeigt, ist schlimmer als gar keine — denn eine falsche Zahl sehen Sie an und glauben ihr.


Die Regel, der ich folge

Ich schaue auf den Balken, bevor ich etwas Neues anfange, nicht mittendrin. Über 60% eröffne ich keine neue Front: ich schliesse die offene ab, schreibe den Handoff, /clear, und fange neu an. Unter 60% denke ich nicht darüber nach.

Das ist keine gemessene Schwelle, sondern eine bequeme: weit genug unter dem Bereich, in dem die Benchmarks den Abfall sehen, und weit genug darüber, um nicht alle zwanzig Minuten neu anzufangen. Es geht nicht um die Zahl. Es geht darum, dass die Zahl vor Augen steht — denn die richtige Entscheidung im richtigen Moment treffen Sie nur, wenn Sie den Moment kommen sehen.


Quellen

← Alle Artikel
Ugo Lattanzi — Applied AI Architect Keine Cookies. Aggregierte, cookiefreie Analytics über Cloudflare.