- Löst das Problem, dass bei Aufrufen externer Tools große Mengen an Rohdaten das Kontextfenster schnell aufbrauchen
- Sitzt zwischen Claude Code und der Tool-Ausgabe, komprimiert und filtert Daten und reduziert 315 KB auf 5,4 KB (98 % Einsparung)
- Über eine Sandbox-Struktur wird jede Ausführung isoliert, und nur stdout wird in den Kontext aufgenommen, wodurch das Austreten von Rohdaten wie Logs und Snapshots verhindert wird
- Eine wissensdatenbank auf Basis von SQLite FTS5 indiziert Markdown-Inhalte und unterstützt mit BM25-Ranking und Porter-Stemming eine präzise Suche nach Codeblöcken
- Beim gleichen Limit von 200K Tokens steigt die Sitzungsdauer von 30 Minuten auf 3 Stunden, was ein effizientes Kontextmanagement für AI-Agenten ermöglicht
Problem
- MCP-Tool-Aufrufe in Claude Code dumpen bei jedem Aufruf Rohdaten direkt in das 200K-Kontextfenster
- Playwright-Snapshots 56 KB, 20 GitHub-Issues 59 KB, Access-Logs 45 KB usw.
- Nach etwa 30 Minuten Nutzung sind 40 % des gesamten Kontexts verbraucht
- MCP ist zum Standard für die Nutzung externer Tools geworden, hat aber die strukturelle Grenze, dass sowohl Eingabedefinitionen als auch Ausgabedaten den Kontext füllen
- Bei aktivierten mehr als 81 Tools sind schon vor der ersten Nachricht 72 % (143K Tokens) verbraucht
Architektur von Context Mode
- Ein MCP-Server zwischen Claude Code und der Tool-Ausgabe, der Rohdaten minimiert weitergibt
- 315 KB Ausgabe werden auf 5,4 KB reduziert (98 % weniger)
- Jeder
execute-Aufruf läuft in einem isolierten Subprozess und wird unabhängig ohne geteilten Speicher oder Zustand ausgeführt
- Nur stdout wird in den Kontext aufgenommen; Logs, API-Antworten, Snapshots usw. bleiben innerhalb der Sandbox
- Unterstützung für 10 Sprach-Runtimes: JavaScript, TypeScript, Python, Shell, Ruby, Go, Rust, PHP, Perl, R
- Automatische Bun-Erkennung erhöht die Ausführungsgeschwindigkeit von JS/TS um das 3- bis 5-Fache
- Authentifizierte CLIs (
gh, aws, gcloud, kubectl, docker) übergeben Anmeldedaten sicher per Vererbung von Umgebungsvariablen
Wissensdatenbank (knowledge base)
- Das Tool
index teilt Markdown nach Überschrifteneinheiten auf und speichert es unter Beibehaltung der Codeblöcke in einer virtuellen SQLite-FTS5-Tabelle
- Bei der Suche wird der BM25-Ranking-Algorithmus verwendet, der Relevanz auf Basis von Worthäufigkeit, inverser Dokumenthäufigkeit und Normalisierung der Dokumentlänge berechnet
- Durch Porter-Stemming werden „running“, „runs“ und „ran“ demselben Wortstamm zugeordnet
- Bei einem
search-Aufruf werden keine Zusammenfassungen, sondern exakte Codeblöcke und die Überschriftenhierarchie zurückgegeben
fetch_and_index ruft eine URL ab, wandelt HTML in Markdown um und indiziert es; die Originalseite wird nicht in den Kontext aufgenommen
Leistungswerte
- In 11 realen Szenarien (Test-Triage, Diagnose von TypeScript-Fehlern, Review von git diff usw.) blieb die Ausgabe in allen Fällen unter 1 KB
- Playwright-Snapshot: 56 KB → 299 B
- GitHub-Issues (20): 59 KB → 1,1 KB
- Access-Logs (500 Einträge): 45 KB → 155 B
- CSV-Analyse (500 Zeilen): 85 KB → 222 B
- Git-Log (153 Commits): 11,6 KB → 107 B
- Repository-Untersuchung (Subagent): 986 KB → 62 KB (5 Aufrufe vs. 37 Aufrufe)
- Bezogen auf die gesamte Sitzung Reduktion von 315 KB auf 5,4 KB, Sitzungsdauer 30 Minuten → 3 Stunden
- Verbleibender Kontext nach 45 Minuten: bisher 60 % → 99 %
Installation und Nutzung
- Unterstützung für automatische Routing-Hooks und Slash-Befehle über den Plugin Marketplace
- Dedizierte Installation nur für MCP ebenfalls möglich
- Nach einem Neustart von Claude Code sofort nutzbar
Praktische Änderungen
- Ohne Änderung der Nutzungsweise übernimmt der PreToolUse-Hook automatisch das Routing der Ausgabe
- Subagenten verwenden
batch_execute als Standard-Tool
- Der Bash-Subagent wurde zu
general-purpose aufgewertet und kann auf MCP-Tools zugreifen
- Dadurch füllt sich das Kontextfenster nicht mehr so schnell, und mit derselben Token-Menge sind längere Sitzungen möglich
Hintergrund der Entwicklung
- Beim Betrieb von MCP Directory & Hub wurde das gemeinsame Muster entdeckt, dass alle MCP-Server Rohdaten in den Kontext dumpen
- Inspiriert von Cloudflares Code Mode, der Tool-Definitionen komprimiert, wurde der Ansatz in Richtung Komprimierung von Ausgabedaten erweitert
- Nachdem bestätigt wurde, dass sich in Claude-Code-Sitzungen 6-mal länger arbeiten lässt, wurde das Projekt als Open Source unter MIT-Lizenz veröffentlicht
- GitHub: mksglu/claude-context-mode
1 Kommentare
Hacker-News-Kommentare
Der hier vorgeschlagene FTS5-Index-Ansatz ist richtig, aber ich denke, man muss noch einen Schritt weitergehen
Tool-Ausgaben mischen strukturierte Daten (JSON, Tabellen, Konfigurationen) und natürliche Sprache (Kommentare, Fehlermeldungen, Docstrings), daher hat reines BM25 Leistungseinbußen
Ich habe zur Lösung eines ähnlichen Problems einen hybriden Retriever gebaut, der Model2Vec + sqlite-vec + FTS5 kombiniert. Die beiden Suchergebnisse werden mit Reciprocal Rank Fusion (RRF) zusammengeführt, sodass man gleichzeitig exaktes Keyword-Matching von BM25 und semantikbasiertes Matching der Vektorsuche erhält
Auch inkrementelle Indizierung ist wichtig. Mein Indexer bettet mit dem Flag
--incrementalnur geänderte Chunks neu ein. Die vollständige Neuindizierung von 15.800 Dateien dauert 4 Minuten, tägliche Inkremente weniger als 10 SekundenAuch beim Caching ist dieser Ansatz vorteilhaft. Für dieselbe Query ist die komprimierte Ausgabe deterministisch, sodass Prompt-Caching stabil funktioniert
Was ich der Context-Mode-Architektur noch hinzufügen würde: denselben Retriever als PostToolUse-Hook auszuführen, damit die Ausgabe komprimiert wird, bevor sie in die Unterhaltung gelangt
Hier der Autor des Beitrags. Ich habe vor ein paar Tagen das GitHub-Repository geteilt und gutes Feedback bekommen. Dieser Beitrag ist die Architekturerklärung dazu
Die Kernidee ist, dass Context Mode statt der rohen Daten, die MCP-Tool-Aufrufe auskippen, in ein 200K-Kontextfenster zu stecken, einen isolierten Subprozess erzeugt und nur stdout in den Kontext übergibt. Rein algorithmisch ohne LLM-Aufrufe, mit SQLite FTS5 + BM25 + Porter-Stemming
Inzwischen habe ich 228 Stars und Nutzungsdaten aus der Praxis erhalten und erkannt, wie wichtig Subagent-Routing ist. Wenn man den Bash-Subagent automatisch auf den allgemeinen Typ hochstuft und
batch_executenutzt, lässt sich der Kontext füllen, ohne ihn mit Rohausgaben zu überladenIch verstehe nicht, warum man nicht den mcp-cli-Modus nutzt. Ich habe mit wener-mcp-cli eine geklonte Version gebaut
Tolle Arbeit. Ich denke, beim Management des Kontextfensters gibt es noch viel Raum für Verbesserungen. Wenn ein Modell etwa erst nach mehreren Versuchen die richtige Antwort findet, wäre ein Backtracking-Ansatz nützlich, bei dem fehlgeschlagene Versuche aus dem Kontext entfernt werden
Durch diesen Beitrag wurde mir klar, dass ich über den Token-Verbrauch von Claude Code überhaupt nichts weiß, und ich habe heute Morgen ein CLI namens claude-trace gebaut
Es parst
~/.claude/projects/*/*.jsonlund analysiert Nutzung und Kosten (inklusive Cache-Lese-/Erstellungskosten) nach Session, Tool, Projekt und TimelineWenn Context Mode die Ausgabekomprimierung gut löst, dient das hier als Messschicht, um den Verbrauch vor und nach Änderungen zu visualisieren
Viel Token-Verbrauch lässt sich reduzieren, wenn man statt MCP CLI-Apps nutzt. Zum Beispiel erledigt die GitHub CLI dieselben Dinge mit deutlich weniger Tokens als MCP
Die Hooks wirken zu aggressiv. Alles an curl/wget/WebFetch zu blockieren und im Sandbox-Modus einen 56-KB-Snapshot zu erzeugen, ist zwar nett, aber in Fällen wie einfachem
curl api.example.com/health, wo nur 200 Byte gebraucht werden, ist das übertriebenWenn man 153 Git-Commits auf 107 Byte komprimiert, kann das Modell die Daten nur sehen, wenn es ein perfektes Extraktionsskript schreibt. Mit einem falschen Befehl gehen nötige Informationen verloren
Das Benchmarking setzt voraus, dass das Modell immer den richtigen Zusammenfassungscode schreibt, aber in der Praxis ist das nicht so
Nicht schlecht, aber es gibt Genauigkeitsverlust und Halluzinationsrisiko. Wegen unvollständiger Daten oder fehlerhafter Extraktionslogik kann Claude falsche Schlüsse ziehen. Es wird vorausgesetzt, dass MCP klug genug ist, sowohl gute Extraktionsskripte als auch Suchqueries zu schreiben. Ich denke, Informationserhalt ist in der Praxis ein großes Problem
Die Kompressionsrate ist beeindruckend, aber ich frage mich, ob das Modell mit komprimiertem Kontext noch dieselbe Ausgabequalität liefert. Selbst wenn eine Session von 30 Minuten auf 3 Stunden verlängert wird, ist das nur sinnvoll, wenn die Qualität der Schlussfolgerungen in der zweiten Stunde erhalten bleibt
Auch die von esafak angesprochene Cache-Ökonomie ist wichtig. Wenn Prompt-Caching gut funktioniert, ist selbst ausschweifender Kontext faktisch kostenlos. Wenn die Komprimierung aber die Cache-Kontinuität zerstört, können die Kosten im Gegenteil steigen
Das grundlegendere Problem ist, dass die meisten MCP-Tools per SELECT * alle Daten holen. Das ist ein Protokolldesignproblem, das Zusammenfassungen und Drill-down unterstützen müsste
Ich frage mich, ob man überhaupt mehr als 80 Tools im Kontext haben muss. Kontext ist Gold wert, und je mehr Unrelevantes man hineinpackt, desto schlechter werden die Ergebnisse. Statt Datenkomprimierung ist Subagent-Trennung der bessere Ansatz
git logkann 50.000 Tokens verbrauchen, und genau das wird in die Sandbox verschoben