Uvnitř Claude Code: Anatomie leaku, 5 vrstev architektury, undercover mode
31. března 2026 krátce po půlnoci East Coast času vyjel z npm balíček @anthropic-ai/claude-code@2.1.88. Mělo jít o běžný patch release. Místo toho obsahoval 59,8 MB soubor cli.js.map — debug source map, která dokázala z minifikovaného JavaScriptu zpětně sestavit originální TypeScript. Během několika hodin byl kompletní zdroják Claude Code — 1 906 souborů a zhruba 512 000 řádků — mirrorován na GitHub, forkován desítky tisíckrát a rozebírán na Hacker News. Uvnitř: funkce s názvem undercover mode, past jménem fake tools a nevydaný autonomní agent KAIROS. Tento článek je první ze dvou dílů a rozebírá technickou anatomii leaku. Právní fiasko DMCA, bezpečnostní fallout a dopady na české vývojáře pokrývá díl druhý.
Stručně: klíčová technická zjištění
- Jediný soubor, 60 MB:
cli.js.mapv npm balíčku 2.1.88. Default chování runtime Bun + chybějící*.mapv.npmignore. Discovery: Chaofan Shou na X. - Architektura v pěti vrstvách: CLI a TUI, agent orchestrator se self-healing memory, permission a MCP, LLM API s fake tools, a transport s native client attestation (DRM).
- Tři obranné mechanismy, které dosud nikdo veřejně neviděl: undercover mode pro zaměstnance (bez force-OFF), anti-distillation fake tools injekce, a kryptografické podpisy nad tool-call odpověďmi jako vodoznak v trénovacích datech.
Co se stalo: chronologie a technická příčina
Příběh začal v úterý 31. března 2026 krátce po půlnoci East Coast času, kdy Anthropic publikoval verzi 2.1.88 balíčku @anthropic-ai/claude-code do veřejného npm registru. Release note mluvila o běžných bugfixech. Uvnitř ovšem ležel soubor cli.js.map o velikosti 59,8 MB — source map, která obsahovala pole sourcesContent s plným originálním TypeScript kódem všech 1 906 souborů projektu. Source mapy jsou běžný artefakt buildu určený pro debugging — převádí chybové stack trace z minifikovaného cli.js zpět na čitelné řádky. Do produkčního npm balíčku ovšem nemají co dělat.
Bezpečnostní výzkumník Chaofan Shou (@Fried_rice) si souboru všiml na X v dopoledních hodinách ET. Během desítek minut začal být systematicky stahován, mirrorován na GitHub, forkován do desítek tisíc repozitářů a rozebírán na Hacker News (vlákno přes 1 400 komentářů). V 17:02 UTC téhož dne potvrdil mluvčí Anthropicu přes The Register: „This was a release packaging issue caused by human error, not a security breach." Komunita to ale rozebírala jako snahu o zmírnění škod.
Bun runtime a chybějící řádek v .npmignore
Příčina je přízemní a instruktivní zároveň. Claude Code je psán v TypeScriptu a bundlován runtime Bun, který Anthropic od roku 2025 používá místo Node.js a esbuildu. Bun při produkčním buildu generuje plnou source map — soubor cli.js.map s polem sourcesContent, kde leží celé originální TypeScript zdrojáky v plaintextu. Default je vhodný pro crash reporty, ale nesmí se dostat do veřejných balíčků.
Správný postup má dvě linie obrany. V .npmignore se očekává vzor *.map; pokud soubor neexistuje, npm se řídí polem files v package.json — a to u Anthropicu zahrnovalo celou dist/ bez filtru. Kombinace obou přehlédnutí znamenala, že každá release 2.1.x publikovaná po aktivaci Bunu obsahovala plný source map. Analytici si všimli, že i starší patch verze z března 2026 obsahují postupně narůstající fragmenty.
Jak se tomu vyhnout ve vlastním npm balíčku
Pokud publikujete TypeScript CLI nebo knihovnu přes npm, ověřte si před každým releasem tři věci:
- V
package.jsonmá polefilesexplicitní výčet (typicky["dist/*.js", "bin"]) — nikdy celou složku. - V
.npmignoreje pattern*.mapa*.ts. - Před publish spusťte
npm pack --dry-runa zkontrolujte obsah tarballu. Pokud tam vidíte cokoliv končící.map, přerušte release.
Pro Bun: zvažte build flag --sourcemap=external s explicitním vyloučením z publish, nebo --sourcemap=inline pouze v development buildech.
Bezpečnostní analytik Alex Kim (alex000kim.com, 31. 3. 2026) v analýze upozornil na meta-ironii: „There is a very real possibility that a lot of the codebase was probably written by the AI you are shipping." AI coding tool, jehož hodnota je prevence chyb, přispěl k vlastnímu úniku. Na Bun issue trackeru (oven-sh/bun#28001) se navíc ukázalo, že defaultní chování source map je předmětem známého issue, o kterém Anthropic věděl.
Architektura Claude Code v pěti vrstvách
Po dvou týdnech komunitní analýzy lze leaknutou architekturu rozdělit do pěti vrstev, které skládají celý agentní stack. Mapa je významná, protože dosud neexistoval žádný veřejný referenční design moderního AI coding CLI na této úrovni detailu — konkurenti (Cursor, Windsurf, Cline, Continue) museli architekturu odhadovat z behaviorálních stop.
Vrstva 5 (CLI a UI) řeší to, co uživatel vidí: rendering TUI, slash příkazy jako /compact, interaktivní potvrzování bash příkazů a OAuth flow s ukládáním tokenu do OS keychainu. Součástí je i frustration detector — regex v userPromptKeywords.ts, který rozpoznává fráze typu „this sucks" a ve vnitřní telemetrii je loguje jako signál nízké spokojenosti.
Vrstva 4 (agent orchestrator) je srdce systému. Query engine plánuje, jaké tooly a v jakém pořadí zavolat, kdy vytvořit sub-agenta, jak řešit retry a jak udržet kontext napříč desítkami iterací. Pozoruhodný je self-healing memory — systém, který při blížícím se limitu kontextového okna postupně sumarizuje starší části konverzace s kryptografickým podpisem zachovávajícím integritu. Komentář v autoCompact.ts odhalil, že procedura selhávala v řádu 250 000 API volání denně před opravou s limitem tří po sobě jdoucích selhání — nepřímý pohled na reálný objem provozu.
Vrstva 3 (permission a MCP) je bezpečnostně kritická, protože Claude Code spouští příkazy na lokálním stroji uživatele. Soubor bashSecurity.ts obsahuje 23 kontrol proti zsh-specifickým exploitům, path traversal, unicode homoglyphy a supply-chain injection. MCP konektory tady mají čistou permission boundary: každý konektor deklaruje, k jakým zdrojům sahá, a uživatel je schvaluje při prvním použití.
Vrstva 2 (LLM API + anti-distillation) obsahuje samostatnou kapitolu tohoto článku. V souboru claude.ts na řádcích 301–313 je definován flag ANTI_DISTILLATION_CC. V betas.ts (řádky 279–298) pak kryptografické podpisy nad sumarizovanými odpověďmi.
Vrstva 1 (transport a attestation) je nejnižší. system.ts (řádky 59–95) obsahuje placeholdery cch=00000, které build pipeline nahrazuje hashi vypočtenými nad celým binárem v Zig vrstvě Bunu. Pouze legitimní, neupravená Claude Code binárka projde serverovou kontrolou — každý fork, který by chtěl mluvit s produkční API, musí nejprve reprodukovat správný klientský hash. Jde de facto o DRM aplikovaný v transportní vrstvě, technicky srovnatelné s Apple attestation u iOS.
Undercover mode: tajná funkce pro zaměstnance, kterou nelze vypnout
Soubor undercover.ts měří 90 řádků a je nejdiskutovanější částí celého leaku. Funkce aktivuje speciální chování Claude Code, když detekuje, že uživatel (typicky zaměstnanec Anthropicu přes interní feature flag) pracuje v externím, ne-Anthropic repozitáři. V aktivním stavu cenzuruje vlastní výstup: odstraňuje Co-Authored-By: Claude z commit zpráv, zakazuje modelu zmiňovat interní codenames (Capybara a Tengu jako pravděpodobné projektové názvy budoucích modelových generací) a zakazuje se identifikovat jako Claude Code v externích projektech.
undercover.ts, řádek 41
Mechanismus je technicky pečlivě navržený. Funkci lze vynutit zapnutí přes environment proměnnou CLAUDE_CODE_UNDERCOVER=1, ale neexistuje způsob, jak ji vynutit vypnutí. V externích buildech, které dostávají zákazníci, celou větev funkce navíc bundler při optimalizaci odstraní (dead code elimination), takže vrací trivial return true a nikdy se nespustí. V interní verzi používané zaměstnanci je naopak vždy připravena k aktivaci.
Oficiální důvod podle komentářů v kódu je ochrana před únikem codenames budoucích modelů: zaměstnanec by mohl v commit zprávě OSS projektu nechtěně napsat „připraveno pro integraci s Tengu" — pro konkurenci a investiční analytiky kritický leak roadmapy. Sekundárně se ukazuje, že Anthropic má interní verze Claude Code s rozšířenými schopnostmi oproti veřejné distribuci.
Kritika na Hacker News a v InfoQ směřuje k tomu, že automatické odstraňování Co-Authored-By atribuce je v rozporu s normami open source ekosystému. Atribuce je standard pro uvedení skutečných přispěvatelů. Pokud 60 % kódu napsal model a systém atribuci maže, udržovatel dostává falešný obraz lidského vkladu.
Anti-distillation fake tools: past na scrapery konkurence
Druhá nejdiskutovanější technika je v produkci bezprecedentní. Jde o ochranu proti model distillation — technice, při níž menší model trénuje na výstupech většího, aby jeho chování napodobil. Distillation je dnes standardní cesta, jak může konkurent rychle a levně získat schopnosti srovnatelné s frontier modelem: stačí zaznamenat dost párů prompt → odpověď. DeepSeek R1 a Llama 4 Maverick tímto způsobem vznikly.
Mechanismus má dvě nezávislé vrstvy obrany. První: klient Claude Code posílá v API requestu pole anti_distillation: ['fake_tools']. Server přidá do system promptu decoy definice neexistujících toolů s přesvědčivými schématy (například kubectl_verify, slack_summarize, jira_bulk_close). Model s nimi pracuje, ale nevolá je. Pro legitimního uživatele neviditelné; pro scraper to znamená, že klon bude halucinovat existenci fake toolů a zkoušet je volat — charakteristický otisk kompromitované trénovací datové sady.
Druhá vrstva: mezi tool call fázemi server sumarizuje text odpovědi a přidává kryptografický podpis (neinvertibilní hash s timestampem a klient ID). Scraper podpis uvidí, ale bez serverového tajemství ho nemůže reprodukovat. Pokud konkurent trénuje na zaznamenaných výstupech, natrénuje i na těchto „parazitických" podpisech, a ty budou na výstupu klonovaného modelu identifikovatelné. V praxi jde o vodoznak v tréninkových datech.
Podle Alexe Kima jde o první veřejně zdokumentovanou produkční implementaci anti-distillation obrany u přední AI laboratoře. U Google Gemini, OpenAI GPT-5.4 ani Meta Muse Spark zatím podobné techniky nikdo veřejně neprokázal, i když neoficiálně se v oboru říká, že OpenAI podobné podpisy používá od Q4 2025. Do konce 2026 se dá čekat, že všechny frontier laby podobné obrany implementují.
KAIROS, /dream a attestation: co teprve přijde
Leak odhalil také rozsáhlou kostru nevydaných funkcí, které Anthropic evidentně chystá do budoucích verzí. Nejvíce zdrojů v této kategorii najdeme pod codename KAIROS — autonomní mód, ve kterém Claude Code běží v pozadí jako dlouhodobý daemon a reaguje na externí události (GitHub webhooks, pětiminutové cron refreshes, filesystem watch API). Související skill /dream provádí „nightly memory distillation" — každou noc agreguje a komprimuje vzpomínky agenta z předchozího dne do úspornější reprezentace, podobně jako lidský spánek konsoliduje zážitky.
| Funkce | Stav v leaku | Veřejná dostupnost | Účel |
|---|---|---|---|
| Undercover mode | Plně funkční, gated | Interně Anthropic | Ochrana codename v OSS PR |
| Fake tools anti-distillation | Produkční, server-side | Transparentní pro uživatele | Obrana proti scrapingu |
| Native client attestation | Produkční, Bun Zig HTTP | Transparentní (každá binárka) | DRM na transport layer |
| KAIROS autonomous agent | Scaffolding v kódu | Nevydáno | Background coding 24/7 |
| /dream skill | Scaffolding v kódu | Nevydáno | Nightly memory distillation |
| Proactive mode | Scaffolding v kódu | Nevydáno | Autonomní PR bez promptu |
| Frustration detector | Funkční, regex | Aktivní, telemetrie | Sentiment signál pro výzkum |
| autoCompact (MAX_FAIL=3) | Opraveno v 2.1.88 | Transparentní | Úspora 250 000 API volání denně |
Nevydané a skryté funkce k 31. 3. 2026. Zdroj: Alex Kim, WaveSpeedAI hidden features breakdown, InfoQ.
Souvisejícím režimem je proactive mode — Claude nečeká na prompt, sám hlídá repozitář, selhávající testy a otevřené issues a vytváří PR autonomně. Dream mode je pasivnější varianta: přemýšlí na pozadí a předkládá výsledky ráno. Oba vyžadují rozšířenou tool orchestraci gated za KAIROS_BETA flagem, který produkce nemá aktivní.
Strategicky nejdůležitější je native client attestation. Anthropic API neakceptuje volání s Claude Code API klíčem bez hashe ověřujícího, že binárka volajícího je legit a nebyla upravena. Hash je vypočten v Zig vrstvě Bunu nad celým binárem a vložen do headeru cch=. Stažený leaknutý zdroják tedy sám o sobě nestačí: upravená binárka bude mít jiný hash a API ji odmítne. OSS klony musí buď obejít attestation reverse engineeringem, nebo běžet na alternativním API (lokální Ollama, vlastní fine-tune). Právně jde o šedou zónu podobnou Apple attestation u iOS, kterou v EU částečně nahlodává DMA.
Právní souvislosti DMCA takedownu na 8 100 repozitářů, bezpečnostní fallout se stealery Vidar a GhostSocks, a konkrétní dopady na české vývojáře pokrývá druhý díl: Claude Code leak — právní, bezpečnostní a ekonomické dopady.
Časté otázky
Proč source map 60 MB obsahuje kompletní zdroják?
Source map ve formátu v3 má pole sourcesContent, kde lze uložit plain-text originálních souborů. Runtime Bun toto pole ve výchozím buildu naplňuje. Pokud .npmignore nevyřadí *.map, celá TypeScript code base je v balíčku a kdokoliv ji přečte nástrojem typu source-map-explorer. Řešení: přidat *.map do .npmignore a použít --sourcemap=external s vyloučením z publish.
Co je undercover mode a proč se o něm tolik mluví?
Undercover mode je interní funkce Claude Code, která u zaměstnanců Anthropicu odstraňuje z commit zpráv řádek Co-Authored-By: Claude a potlačuje zmínky o interních codename modelů (Capybara, Tengu). Cílem je, aby příspěvky do veřejných OSS projektů nesignalizovaly, který model zaměstnanec používá. Kritici namítají, že skrývání AI co-authorship je proti normám open-source ekosystému. Anthropic funkci obhajuje jako ochranu interního IP.
Dočkáme se KAIROS, proactive mode a dream mode veřejně?
Pravděpodobně ano, ale ne hned. KAIROS (autonomní background agent) a dream mode (noční konsolidace paměti) mají v leaku status experimentální funkce za interním feature flagem. Historicky trvá Anthropicu tři až šest měsíců od interního flagu k veřejnému vydání — odhad je Q3 až Q4 2026. Proactive mode může přijít dřív jako součást nejvyššího tarifu Claude Code Max. Definitivní roadmapu Anthropic po leaku nezveřejnil.
Znamená attestation, že claw-code a další OSS klony nikdy nebudou fungovat s Anthropic API?
Ne absolutně, ale kopírování architektury nestačí. Každý fork musí buď reverse-engineerovat Bun Zig hash a spočítat správný cch= header (Anthropic může algoritmus v každé release změnit), nebo běžet proti alternativní inference (lokální Ollama, vlastní fine-tune, kompatibilní cloud API). Clean-room reimplementace je legální, ale plná parita s Anthropic API bude vždy křehká.
Zdroje
Primární
- npm: @anthropic-ai/claude-code — version history — verze 2.1.88 a 2.1.89 (31. 3. 2026)
- TechCrunch: Anthropic accidentally leaks Claude Code source (1. 4. 2026, Tim Fernholz)
- Anthropic: oficiální stanovisko a post-mortem plán (2. 4. 2026, Boris Cherny)
- Bun issue #28001: sourcesContent default should be false for library builds
Komunitní analýza
- Alex Kim: Hidden features inventory (3. 4. 2026) — 5-layer architektura, anti-distillation analýza
- Hacker News: What the Claude Code source reveals (vlákno 1. 4. 2026, přes 4 200 komentářů)
- Decrypt: claw-code hits 30,000 stars in 24 hours (3. 4. 2026)