Claude Code Große Datenleck: Hör auf nur zu klonen, jetzt ist das beste Harness Open Source!
Am 31. März hätte Anthropic wahrscheinlich nicht gedacht, dass es die Entwicklergemeinschaft auf diese Weise mit einem Geschenk beschenken würde.
Der Sicherheitsforscher Chaofan Shou hat festgestellt, dass in der npm - Paket von Claude Code eine.map - Datei – eine Sourcemap – versteckt ist. Diese Datei ist für die Fehlersuche durch Entwickler gedacht und sollte eigentlich bereits aus der Produktionsumgebung entfernt werden. Das Fehlen der Entfernung bedeutet: Jeder kann aus dieser Datei den vollständigen Quellcode von Claude Code wiederherstellen.
1.906 Dateien, 512.000 Codezeilen, über 40 Tools und 85 Slash - Befehle. Innerhalb weniger Stunden wurde der Code auf GitHub gespiegelt und erhielt Tausende von Sternen und Forks.
Was noch ironischer ist, ist, dass es in dem Code ein Subsystem namens "Undercover Mode" gibt, das speziell dafür entwickelt wurde, zu verhindern, dass interne Anthropic - Codenamen in Git - Commits erscheinen und so Informationen preisgegeben werden. Sie haben sorgfältig einen Mechanismus zur Verhinderung von Informationslecks entwickelt und dann den gesamten Quellcode in das npm - Paket gepackt.
Doch dieser Artikel möchte nicht über diesen Fehler sprechen, sondern über das, was in diesem Code wirklich wertvoll ist: Wie sieht ein produktionsreifes Agent - Harness aus?
Wie hoch ist die Qualität von Claude Code?
Agent - Harness ist für die gesamte Branche noch etwas Neues, das erforscht wird. Anthropic hat im vergangenen Jahr wiederholt die Meinung vertreten: Das Modell selbst ist nur der Motor, das Harness ist das gesamte Fahrzeug. Sie haben eine Reihe von Entwurfsprinzipien wie Context - Engineering, minimale lebensfähige Toolsets und Sub - Agent - Isolation vorgeschlagen.
Jetzt, da der Quellcode offenliegt, können wir endlich sehen, ob sie ihren eigenen technischen Dokumenten folgen.
Die Antwort ist: Sie folgen nicht nur den Dokumenten, sondern haben auch noch eine zusätzliche Maßnahme eingebaut.
Die folgenden Bewertungen und Beschreibungen des Harness basieren hauptsächlich auf den technischen Dokumenten von Anthropic.
Speicherschicht: Context - Engineering und Gedächtnis
Context kostet Geld
Je länger der Kontext ist, desto leichter verliert das Modell den Überblick. Dieses Problem wird in der Branche als "Context Rot" bezeichnet. Der Kontext ist nicht umso besser, je länger er ist. Mit jedem zusätzlichen Token erhält jedes andere Token weniger Aufmerksamkeit, und wichtige Informationen werden verdünnt.
Claude Code setzt für jeden Inhaltsteil eine feste Obergrenze, um zu kontrollieren, was in das Fenster kommt und wie viel.
Die Skill - Liste darf maximal 1 % des gesamten Fensters einnehmen, und jede Beschreibung darf nicht mehr als 250 Zeichen enthalten:
- // Ausführliche whenToUse - Strings verschwenden Token für die Cache - Erstellung in der ersten Runde
- // ohne die Übereinstimmungsrate zu verbessern.
- export const MAX_LISTING_DESC_CHARS = 250
Warum diese Beschränkung? Denn die Funktion der Skill - Liste besteht darin, dem Modell mitzuteilen, dass es dieses Tool gibt, nicht darin, dem Modell beizubringen, wie es es benutzt. Das Finden von Tools basiert auf der Schlüsselwortübereinstimmung. Es macht keinen Unterschied, ob die Beschreibung 500 oder 50 Wörter lang ist. Der zusätzliche Text ist reine Verschwendung.
Der System - Prompt wird in zwei Teile geteilt. Der erste Teil ist eine Anweisung, die von allen Benutzern gemeinsam genutzt wird. Der Inhalt ist festgelegt und kann zwischengespeichert werden, um bei der nächsten Verwendung direkt wiederverwendet zu werden. Der zweite Teil ist der für diesen Benutzer und diese Sitzung spezifische Inhalt, der bei jeder Anfrage dynamisch generiert wird. Auf diese Weise muss bei jedem API - Aufruf nur der veränderliche Teil verarbeitet werden, was eine große Menge an wiederholten Berechnungen einspart.
Die Ergebnisse großer Tool - Aufrufe werden nicht in den Kontext eingefügt, sondern direkt auf die Festplatte geschrieben, und das Modell erhält nur den Dateipfad. Wenn beispielsweise ein Befehl Tausende von Logzeilen zurückgibt, würde das Einfügen dieser Tausenden von Zeilen in den Kontext andere nützliche Informationen verdrängen. Durch die Verwendung einer Dateiverreferenz wird nur eine Zeile belegt.
Das Wesen eines Produktionssystems ist die Fehlerbehandlung
Wenn das Modell sich der Obergrenze des Kontextfensters nähert, neigt es dazu, die Aufgabe hastig zu beenden. Anthropic nennt dies "Context Anxiety". Es ist wie ein Mensch, der weiß, dass ihm die Zeit knapp wird und beginnt, Schritte zu überspringen und Abkürzungen zu nehmen. Die Lösung besteht darin, das Fenster vollständig zu leeren, den aktuellen Fortschritt in strukturiertes Handover - Material zu packen und das nächste Fenster mit diesem Handover - Material zu beginnen, anstatt mit einem fast vollbesetzten Kontext.
Claude Code hat dies in eine dreistufige Komprimierung umgesetzt: Zuerst wird ein leichter Zusammenfassungstest durchgeführt. Wenn dies nicht ausreicht, erfolgt eine automatische Komprimierung. Wenn auch dies nicht ausreicht, wird bei einem API - Fehler eine Zwangskomprimierung durchgeführt. Erst wenn die erste Stufe nicht funktioniert, wird zur nächsten Stufe gegangen.
Über den drei Stufen gibt es noch einen Sicherungsschalter:
- // BQ 2026 - 03 - 10: 1.279 Sitzungen hatten 50 oder mehr aufeinanderfolgende Fehler (bis zu 3.272)
- // in einer einzigen Sitzung, was weltweit ca. 250.000 API - Aufrufe pro Tag verschwendete.
- const MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3
Jemand, der Daten in BigQuery analysierte, hat festgestellt, dass Sitzungen mit aufeinanderfolgenden automatischen Komprimierungsfehlern täglich etwa 250.000 API - Aufrufe verschwendeten. Der Grund für Komprimierungsfehler ist normalerweise, dass der Kontext beschädigt ist, und es macht keinen Sinn, weiterzumachen. Daher wurde eine Regel eingeführt: Bei drei aufeinanderfolgenden Fehlern wird die Komprimierung gestoppt und nicht mehr versucht.
Eine Demo muss nur funktionieren. Ein Produktionssystem muss auch wissen, wie man im Falle eines Fehlers Verluste begrenzt.
Das Gedächtnis ist nicht das Speichern aller Dinge
Bei Agenten, die über mehrere Kontextfenster hinweg arbeiten, vergessen sie bei jedem neuen Fenster alles, was zuvor passiert ist. Anthropic vergleicht dies mit Schichtarbeitern, die bei jedem Schichtwechsel nicht wissen, was die vorherige Schicht getan hat und daher von vorne anfangen müssen.
Claude Code nutzt einen Hintergrund - Sub - Agenten, um regelmäßig die Schlüsselinformationen aus der Konversation herauszuziehen und zu speichern. Diese Informationen werden dann bei Bedarf wieder eingefügt. Es werden jedoch nicht alle Informationen gespeichert und auch nicht alle eingefügt. Die Auswahl der Informationen für das Gedächtnis erfolgt mit Sonnet, um zu bestimmen, welche Informationen für die aktuelle Aufgabe relevant sind.
Ein Detail: Die Referenzdokumentation eines kürzlich verwendeten Tools wird nicht eingefügt:
- async function selectRelevantMemories(
- query: string,
- memories: MemoryHeader[],
- recentTools: readonly string[],// Filtert die Dokumentation von kürzlich verwendeten Tools aus
- ): Promise
Das Modell hat das Tool kürzlich verwendet, und im Kontext gibt es bereits eine Verwendungsaufzeichnung. Das Einfügen der Dokumentation würde nur redundante Informationen hinzufügen und Platz verschwenden.
Netzwerkschicht: Tool - Einbindung
Die Grenzen der Tools sind die Grenzen der Agentenfähigkeiten
Wenn es zu viele Tools gibt, weiß das Modell nicht, welches es verwenden soll, was genauso schlecht ist wie das Fehlen von Tools. Dies ist ein bekannter Stolperstein bei der Agentenentwicklung. Die Toolauswahl selbst verbraucht die Inferenzfähigkeit des Modells, und je mehr Optionen es gibt, desto wahrscheinlicher wählt das Modell die falsche Option.
Claude Code hat über 50 Tools. Die Lösung besteht darin, dass die meisten Tools zunächst gar nicht im Kontext erscheinen. Das Modell muss sie erst aktiv suchen, um die vollständige Definition zu erhalten:
- export function isDeferredTool(tool: Tool): boolean{
- if (tool.alwaysLoad === true) return false
- if (tool.isMcp === true) return true// MCP - Tools werden standardmäßig verzögert geladen
- if (tool.name === TOOL_SEARCH_TOOL_NAME) return false// ToolSearch wird nie verzögert geladen
- }
ToolSearch wird immer vollständig geladen, da das Modell es braucht, um andere Tools zu finden. Wenn auch ToolSearch verzögert geladen würde, könnte das Modell nichts finden.
Jedes Tool hat auch eine Reihe von Eigenschaften: ob es parallel ausgeführt werden kann, ob es das Dateisystem ändert, ab welcher Größe das Ergebnis auf die Festplatte geschrieben wird, ob es bei einer Benutzereingabe gestoppt oder fortgesetzt wird.
Diese Eigenschaften sind keine Dokumentation für Menschen, sondern die Grundlage für den Scheduler, um zu entscheiden, wie das Tool ausgeführt werden soll.
Zugriffsberechtigungsfenster können im Voraus eliminiert werden
Der Aufruf eines Tools muss fünf Prüfungen bestehen, bevor er ausgeführt werden kann: Eingabeprüfung, Berechtigungslogik, Regelmatching, Hook - Interzeption und Klassifikator - oder Benutzerbestätigung. Jede Prüfung kann den Prozess stoppen, aber alle benötigen Zeit.
Die langsamste Prüfung ist die Wartezeit auf die Benutzerbestätigung. Um diese Wartezeit zu eliminieren, beginnt der Klassifikator bereits zu arbeiten, bevor das Zugriffsberechtigungsfenster angezeigt wird:
Wenn der Klassifikator urteilt, dass "dieser Befehl mit hoher Wahrscheinlichkeit in Ordnung ist", wird das Zugriffsberechtigungsfenster übersprungen. Der Benutzer bemerkt die Wartezeit nicht, da die Prüfung bereits während der Vorbereitung des Fensters abgeschlossen ist.
Container - Schicht: Sub - Agent - Entwurf
Sub - Agenten sind keine Matrioska - Puppen, sondern Kontext - Isolation
Der Wert von Sub - Agenten liegt darin, dass sie nach der Verwendung verworfen werden können. Es werden Tausende von Tokens für eine Teilaufgabe verwendet, und nach Abschluss wird nur das Ergebnis an den Haupt - Agenten übergeben, während der gesamte Zwischenprozess verworfen wird. Im Kontext des Haupt - Agenten befindet sich nur das Ergebnis, nicht der gesamte Prozess.
Es gibt vier Ausführungsmodi: Synchron (der Haupt - Agent wartet, bis der Sub - Agent fertig ist), Asynchron im Hintergrund (der Sub - Agent läuft im Hintergrund und benachrichtigt den Benutzer nach Abschluss), Worktree - Dateisystem - Isolation (der Sub - Agent ändert den Code in einer unabhängigen Git - Kopie, ohne das Hauptverzeichnis zu beeinflussen, und führt die Änderungen dann zusammen), Maschinenübergreifende Isolation (läuft vollständig auf einem anderen Computer). Je höher das Risiko, desto gründlicher ist die Isolation.
Die Tools, die von Sub - Agenten verwendet werden, sind gefiltert, und es ist nicht möglich, sich selbst rekursiv aufzurufen, um eine unendliche Matrioska - Struktur zu vermeiden.
Verbindungen, die von Sub - Agenten selbst hergestellt werden, werden von ihnen selbst geschlossen, wenn sie beendet werden. Verbindungen, die vom Eltern - Agenten verwendet werden, dürfen nicht geschlossen werden, da der Eltern - Agent sie noch benötigt.
Eine neue Hook - System - Schicht wurde hinzugefügt
Das Hook - System macht das Harness zu einer Plattform
Claude Code hat 27 Ereignis - Knoten geöffnet. An jedem wichtigen Zeitpunkt während der Agentenausführung kann der Benutzer etwas einfügen:
Was kann man einfügen? Nicht nur blockieren, sondern auch ändern. Vor der Ausführung eines Tools können die Eingabeparameter geändert werden. Wenn beispielsweise der Agent eine Datei schreiben will, kann der Hook den Pfad in ein Sandbox - Verzeichnis ändern. Der Agent weiß nichts davon und führt den Befehl normal aus, aber die Datei landet an einem sicheren Ort.
Es gibt zwei Schreibweisen. Eine Möglichkeit ist das Ausführen eines Skripts. Ein Exit - Code von 0 lässt den Prozess weiterlaufen, ein Exit - Code von 2 blockiert ihn. Die Logik kann selbst geschrieben werden. Die andere Möglichkeit ist, dass Haiku die Entscheidung trifft. Man gibt ihm eine Beschreibung und Kriterien, und das Modell entscheidet, ob der Prozess weiterlaufen darf. Man wartet 30 Sekunden.
Das Ergebnis dieser Entwurf ist: Sicherheitsrichtlinien, Audit - Logs und Unternehmens - Compliance - Anforderungen können alle von außen integriert werden, ohne dass Claude Code selbst geändert werden muss. Unterschiedliche Unternehmen haben unterschiedliche Sicherheitsvorschriften. Früher musste man den Code forken und selbst ändern. Jetzt muss man nur ein paar Hooks schreiben. Das Harness ist von einem festen Produkt zu einer anpassbaren Basis geworden.
Abschluss
Die oben genannten sieben Punkte sind die am einfachsten zu beschreibenden Teile aus dem