Claude-Code-Quellcodeleck: Gefälschte Tools, Regex zur Erkennung von Beschimpfungen und Undercover-Modus legen interne Struktur offen
(alex000kim.com)- Nachdem Anthropic ein npm-Paket mit enthaltenen Source Maps ausgeliefert hatte, wurde der gesamte Code von Claude Code offengelegt, wodurch alle internen Funktionen und experimentellen Flags sichtbar wurden
- Der Code enthält unter anderem das Einfügen gefälschter Tools zur Verhinderung von Modellnachahmung (anti-distillation), einen Undercover-Modus zum Verbergen der KI-Identität sowie eine Frustration-Regex zur Erkennung von Beschimpfungen
- Es gibt eine Struktur für Native-Client-Attestierung und Hash-Prüfung auf DRM-Niveau, die so ausgelegt ist, dass inoffizielle Tools am API-Zugriff gehindert werden
- Interne Kommentare zeigen verschiedene experimentelle Funktionen, darunter 250.000 fehlgeschlagene API-Aufrufe pro Tag, einen unvollständigen autonomen Agentenmodus KAIROS und ein Tamagotchi-artiges Begleitersystem
- Das Leck gilt als Offenlegung der Kernproduktstruktur und Roadmap von Anthropic; als mögliche Ursache wird ein Source-Map-Bug in der Bun-Runtime vermutet
Interne Struktur von Claude Code durch Source-Map-Leck sichtbar
- Nachdem Anthropic ein npm-Paket mit enthaltenen Source Maps ausgeliefert hatte, wurde der komplette Quellcode von Claude Code offengelegt
- Das Paket wurde später gelöscht, doch der Code wurde an mehreren Orten gespiegelt und damit zum Analyseobjekt
- Es war das zweite Leck innerhalb einer Woche; zuvor war bereits ein Modellspezifikationsdokument offengelegt worden
- Der Vorfall geschah kurz nachdem Anthropic die Nutzung interner APIs durch Drittanbieter-Tools juristisch untersagt hatte
-
Anti-distillation: Einfügen gefälschter Tools zur Verhinderung von Nachahmung
- In
claude.tsgibt es das FlagANTI_DISTILLATION_CC; wenn es aktiv ist, wird API-Anfragenanti_distillation: ['fake_tools']hinzugefügt, um gefälschte Tool-Definitionen in den System-Prompt einzuschleusen- Ziel ist es, Versuche zu verunreinigen, den API-Traffic abzugreifen und damit das Modell nachzubilden
- Es funktioniert nur in primären CLI-Sitzungen, in denen das GrowthBook-Flag
tengu_anti_distill_fake_tool_injectionaktiviert ist
- In
betas.tsgibt es als zweiten Mechanismus einen serverseitigen Schutz auf Basis von Zusammenfassungen- Text zwischen Tool-Aufrufen wird zusammengefasst und zusammen mit einer kryptografischen Signatur zurückgegeben, sodass er später wiederhergestellt werden kann
- Selbst wenn externer Traffic aufgezeichnet wird, ist der vollständige Inferenzprozess nicht sichtbar
- Diese Funktion erfordert das gleichzeitige Erfüllen mehrerer Bedingungen und kann durch Entfernen von Feldern über einen MITM-Proxy neutralisiert werden
- Sie kann über die Umgebungsvariable
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETASdeaktiviert werden - Wegen der Bedingung
USER_TYPE === 'ant'ist sie nur für interne Anthropic-Nutzer gedacht
- Sie kann über die Umgebungsvariable
- In der Praxis ähnelt die Schutzmaßnahme eher einer rechtlichen Einschränkung als einer technischen Abwehr
- In
-
Undercover mode: Modus zum Verbergen der KI-Identität
undercover.tsentfernt bei Verwendung in externen Repositories interne Anthropic-Codenamen, Slack-Kanäle und die Formulierung „Claude Code“- Mit der Formulierung
"There is NO force-OFF"ist er nicht deaktivierbar - Er kann über die Umgebungsvariable
CLAUDE_CODE_UNDERCOVER=1zwangsweise aktiviert werden
- Mit der Formulierung
- In externen Builds wird die Funktion durch eine bedeutungslose Rückgabe entfernt, was eine Einwegstruktur erzeugt
- Dadurch wird bei Beiträgen von Anthropic-Mitarbeitern zu Open Source nicht ausgewiesen, dass der Code von einer KI geschrieben wurde
- Das Verschleiern interner Informationen ist nachvollziehbar, erzeugt aber zugleich den Effekt, dass sich die KI als Mensch tarnt
-
Frustration regex: Regex zur Erkennung von Beschimpfungen
- In
userPromptKeywords.tssind Regex-Muster enthalten, die Unzufriedenheit und Beschimpfungen von Nutzern erkennen- Erkannt werden verschiedene Ausdrücke wie „wtf“, „this sucks“ oder „fuck you“
- Das zeigt die Ironie, dass ein LLM-Unternehmen für Stimmungsanalyse reguläre Ausdrücke einsetzt,
- zugleich ist es bei Kosten und Geschwindigkeit effizienter als ein LLM-Aufruf
- In
-
Native client attestation: Client-Attestierung unterhalb der JS-Runtime
- In
system.tsist bei API-Anfragen der Platzhaltercch=00000enthalten,- den der auf Zig basierende native HTTP-Stack von Bun durch einen Hash ersetzt
- Der Server prüft diesen Hash, um festzustellen, ob es sich um ein offizielles Claude-Code-Binary handelt
- Das ist die technische Grundlage im Rechtsstreit um OpenCode,
- denn es wird eine Prüfung auf DRM-Niveau durchgeführt, damit Drittanbieter-Tools die API nicht direkt aufrufen können
- Allerdings funktioniert dies nicht, wenn das Flag
NATIVE_CLIENT_ATTESTATIONdeaktiviert ist oderCLAUDE_CODE_ATTRIBUTION_HEADERabgeschaltet wird- Der Zig-basierte Hash-Ersatz funktioniert nur im offiziellen Bun-Binary, in einer Node-Umgebung nicht
- Ob der Server falsche Hashes tatsächlich ablehnt, ist unklar,
- ein Kommentar besagt, dass
_parse_cc_header„unknown extra fields“ zulässt
- ein Kommentar besagt, dass
- In
-
250.000 verschwendete API-Aufrufe
- Laut einem Kommentar in
autoCompact.ts- wurden pro Tag rund 250.000 API-Aufrufe in fehlgeschlagenen Schleifen verschwendet
- In 1.279 Sitzungen traten mehr als 50 aufeinanderfolgende Fehlschläge auf, maximal 3.272
- Die Korrektur bestand aus nur drei Zeilen: Mit
MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3- wird die Auto-Compact-Funktion nach drei aufeinanderfolgenden Fehlschlägen deaktiviert
- Laut einem Kommentar in
-
KAIROS: Nicht veröffentlichter autonomer Agentenmodus
- Im gesamten Code gibt es einen Feature-Gate-Modus namens
KAIROS- Ausgehend von
main.tsxwird vermutet, dass es sich um eine Funktion für autonome Agenten handelt - Enthalten sind der Skill
/dream(nächtliche Speicherdestillation), GitHub-Webhooks, ein Hintergrund-Daemon und ein Cron-Refresh im Fünf-Minuten-Takt
- Ausgehend von
- Die Implementierung ist unvollständig, doch es gibt bereits eine Struktur auf Basis ständig laufender Hintergrundagenten
- Im gesamten Code gibt es einen Feature-Gate-Modus namens
-
Weitere Erkenntnisse
- Aprilscherz-Easter-Egg: In
buddy/companion.tsexistiert ein Begleitersystem im Tamagotchi-Stil- Mit 18 Kreaturenarten, Seltenheitsgraden, RPG-Stats und einer „shiny“-Version mit 1-%-Wahrscheinlichkeit
- Die Auswahl wird über einen PRNG auf Basis der Nutzer-ID bestimmt; Zeichenkettenkodierung dient dazu, Build-Prüfungen zu umgehen
- Die Terminal-Rendering-Engine (
ink/screen.ts,ink/optimizer.ts)- implementiert einen ASCII-Puffer auf Basis von
Int32Array, Stilmetadaten per Bitmaske und einen Cache mit 50-facher Leistungssteigerung
- implementiert einen ASCII-Puffer auf Basis von
- Die Sicherheitsprüfung (
bashSecurity.ts) besteht aus 23 Stufen,- darunter das Blockieren von Zsh-Built-ins, das Verhindern der Umgehung via
=curlsowie das Unterbinden von Unicode-Zero-Width- und Nullbyte-Injektionen - ein seltener Fall mit einem spezifisch auf Zsh ausgerichteten Bedrohungsmodell
- darunter das Blockieren von Zsh-Built-ins, das Verhindern der Umgehung via
- Das Prompt-Cache-Management (
promptCacheBreakDetection.ts)- verfolgt 14 Vektoren für Cache-Beschädigungen und verwendet beim Moduswechsel eine „sticky latch“, um den Cache beizubehalten
- Es gibt einen Kommentar zu
DANGEROUS_uncachedSystemPromptSection() - was eine auf Senkung der Tokenkosten ausgerichtete Designphilosophie widerspiegelt
- Der Multi-Agent-Koordinator (
coordinatorMode.ts)- verwendet keinen Code, sondern einen promptbasierten Orchestrierungsalgorithmus
- mit Richtlinien wie „keine Genehmigung schwacher Arbeit“ und „keine Delegation ohne Verständnis“
- Es gibt auch Probleme mit der Codequalität
print.tsumfasst 5.594 Zeilen, eine einzelne Funktion darin sogar 3.167 Zeilen- Für HTTP-Anfragen wird Axios verwendet, zeitlich nahe am jüngsten Vorfall mit einer bösartigen npm-Version
- Aprilscherz-Easter-Egg: In
-
Bedeutung und Auswirkungen
- Anders als bei den öffentlichen SDKs von Google Gemini CLI oder OpenAI Codex
- legt dieses Leck die vollständige interne Struktur von Anthropics Kernprodukt offen
- Der größte Schaden liegt weniger im Code selbst als in der Offenlegung von Feature Flags und der Roadmap
- Strategische Funktionen wie KAIROS und Anti-distillation wurden für Wettbewerber sichtbar
- Anthropic hat im vergangenen Jahr Bun übernommen, und Claude Code läuft auf Bun
- Als mögliche Ursache gilt ein Source-Map-Bug von Bun (
oven-sh/bun#28001) - Das Problem, dass Source Maps selbst im Produktionsmodus offengelegt werden, ist bislang ungelöst
- Als mögliche Ursache gilt ein Source-Map-Bug von Bun (
- Letztlich hat Anthropic damit durch einen Fehler in der eigenen Toolchain das eigene Produkt geleakt
- wie es eine Reaktion auf Twitter formulierte: ein ironischer Vorfall, bei dem „beim Ausliefern von KI-generiertem Code der von einer KI verursachte Bug den Code nach außen dringen ließ“
- Anders als bei den öffentlichen SDKs von Google Gemini CLI oder OpenAI Codex
3 Kommentare
Klug.
War das ein Problem, das beim Committen mit KI entstanden ist..?!
Hacker-News-Kommentare
Es gibt viele Kommentare, die missverstehen, dass „Undercover mode“ nur eine Funktion zum Verbergen interner Informationen sei
Im eigentlichen Prompt steht jedoch ausdrücklich, dass in Commit-Messages oder PR-Beschreibungen niemals „Claude Code“ oder Hinweise auf AI enthalten sein dürfen
Es wirkt also wie eine Funktion, die sich wie ein Mensch verhält und ihre Identität verbirgt
Besonders bedenklich ist, dass solche Anweisungen offenbar beim Beitragen zu öffentlichen Repositories gelten
Link zum betreffenden Code
Die Git-Historie dient dazu, Verantwortung und Eigentümerschaft nachzuverfolgen, nicht als Ort, um eine Liste verwendeter Tools festzuhalten
Dann müsste ich mich ja auch fragen, ob ich Linter oder meine IDE als Mitautoren in meine PRs eintragen sollte
Im Grunde ist das ein Problem, das sich mit einer einzigen kleinen Konfigurationszeile lösen lässt
Letztlich liegt die Verantwortung ohnehin beim menschlichen Entwickler
Vielleicht wurde sie bewusst so weit gefasst, um das Ziel zu erreichen, oder es gibt eine verborgene Absicht
Trotzdem ist es sinnvoller, den Wortlaut „wie ein menschlicher Entwickler schreiben“ genau so zu lesen, statt sofort zu behaupten, man wolle sich „als Mensch ausgeben“
Gerade wenn man skeptisch ist, wirkt faktenbasierte Kritik überzeugender
Ehrlich gesagt will ich so etwas nicht
Durch die jüngsten Mythos-Leaks und die Offenlegung der gesamten Claude-Code-Codebasis wächst das Vertrauensproblem weiter
Jeder einzelne Vorfall ist für sich interessant, aber in Serie wirkt es wie ein Muster
Am Ende führt das zur Frage: „Kann man solchen Tools im eigenen Codebestand weiterhin vertrauen?“
Ich zahle weiterhin 140 Dollar und nutze CC
Eher sehe ich solche Leaks als etwas, das mit Anthropics ethischem Modell zusammenhängt — als würde das Unternehmen durch Fehler wachsen
Der eigentliche Wert steckt nicht im Code, sondern im Zugang zum Modell
Die Codebasis ist chaotisch, aber der abonnierbare Modellzugang bleibt attraktiv, deshalb nutze ich Claude Code jeden Tag
Sowohl im Web-UI als auch in CC gibt es viel zu viele kleine Fehler
Selbst die tmux-Steuerung funktioniert nicht wie dokumentiert, und Sessions werden auch nicht aufgeräumt
Trotzdem mag ich das Produkt weiterhin — schlampig, aber charmant
Mein Fork von anthropics/claude-code auf GitHub wurde per DMCA entfernt
Obwohl er den geleakten Code gar nicht enthielt, wurde das gesamte Netzwerk mit 8,1K Repositories pauschal blockiert
Link zur DMCA-Mitteilung
Dass Anthropic glaubt, die Glocke läuten und dann wieder anhalten zu können, ist töricht
Den Leak kann man nicht rückgängig machen, daher wäre es realistischer, ihn gleich in die Produkt-Roadmap einzupreisen
Ich war überrascht zu sehen, dass Dinge, die Unternehmen früher als Geschäftsgeheimnisse bezeichnet hätten, direkt im Quellcode stehen
Sogar geschäftlicher Hintergrund ist in Kommentaren festgehalten
Zum Beispiel werden operative Daten wie „250.000 verschwendete API-Aufrufe pro Tag“ offen genannt
Agenten lesen Kommentare besser als Dokumentation und können sie daher fast wie Langzeitgedächtnis nutzen
Anthropic hat nur nicht damit gerechnet, dass sie geleakt werden
Für Wettbewerber ist das kaum wertvolle Information
Man hat vermutlich schlicht nicht mit einem Leak gerechnet
Dann braucht man keine separate Dokumentation mehr
Einige Funktionen sind hinter der Bedingung
process.env.USER_TYPE === 'ant'verborgenDas heißt, Anweisungen für Anthropic-Mitarbeiter sind strenger und ehrlicher — eine interessante Struktur
Der HN-Originalpost ist ohnehin schon populär, daher stellt sich die Frage, ob man wirklich noch zusätzlich einen Blog mit HN-Kommentarzusammenfassungen veröffentlichen muss
Ich halte Claude Code immer noch für großartig
Es gibt für mich keinen Grund, zu OpenAI oder Gemini zu wechseln
Der Name „Undercover mode“ und die Formulierung „Claude Code nicht erwähnen“ klingen unheimlich, aber wenn man sich den tatsächlichen Code ansieht, scheint es stärker um den Schutz interner Codenamen zu gehen
Quellcode-Link
Das wirkt wie eine ziemlich wichtige Veränderung
Die Idee von „Anti-distillation: gefälschte Tools einbauen, um Kopieren zu verhindern“ ist interessant
Es wäre eine ironische Wendung, wenn chinesische Wettbewerber diese gefälschten Tools am Ende tatsächlich implementieren würden
Heute liegen die Wettbewerbsvorteile eher bei Daten und Inferenzkosten als bei den Modellen selbst
Darüber würde ich gern noch weiter diskutieren
Schließlich haben auch diese Unternehmen ihre Imperien mit fremden Daten aufgebaut
Die Qualität stagniert, und der wirkliche Unterschied liegt in der Reife des Toolings
Durch diesen Leak könnte sich dieser Abstand verringern
Außerdem nimmt Distillation derzeit ohnehin eher ab
Ich teile einen visuellen Guide, den ich erstellt habe
ccunpacked.dev