Claude Code je terminálový AI asistent od společnosti Anthropic — nástroj, který programátorům umožňuje psát, upravovat a ladit kód přímo z příkazové řádky v dialogu s jazykovým modelem Claude. Na první pohled vypadá jako elegantní CLI utilita. Pod kapotou se ale skrývá jeden z nejsofistikovanějších open-source projektů v oblasti AI-assisted development, jaký dnes existuje.
Měl jsem možnost projít jeho kompletní zdrojový kód a výsledek mě upřímně překvapil. Nejde jen o „wrapper nad API“ — je to plnohodnotná aplikace s vlastním bezpečnostním modelem, sedmi nezávislými strategiemi komprese kontextu, hlasovým vstupem s multi-platform fallbacky a terminálovou UI postavenou na Reactu. Celý projekt běží na Bun runtime a čítá desítky tisíc řádků TypeScriptu.
V tomto článku vybírám 10 nejzajímavějších architektonických a implementačních detailů, které jsem v kódu našel — od 800KB monolitického souboru přes komentáře psané ve stylu Harryho Pottera až po bezpečnostní modul, jehož dokumentace připomíná akademický paper.
1. main.tsx – 4 684 radku a 803 KB v jednom souboru
Kazdy projekt ma svuj vstupni bod – misto, kde vsechno zacina. U Claude Code je to soubor main.tsx, a kdyz ho otevrete, mozna vas napadne, jestli nekdo omylem spojil cely projekt do jednoho souboru. S 803 KB a temer peti tisici radku je to jeden z nejdelsich single-file vstupnich bodu, na jaky jsem kdy narazil. A pritom dava smysl – je to monströznni soubor, ktery dela uplne vsechno:
- 200+ importů ze všech koutů aplikace
- Parsování CLI argumentů (Commander.js)
- Early-load side-effects: startup profiling, MDM prefetch, keychain prefetch
- Detekce debuggeru (a okamžitý
process.exit(1)pokud běží v inspekčním módu!) - Celý migrační systém s 11 verzemi migrací (přejmenování modelů, nastavení, oprávnění)
- SSH remote sessions, Direct Connect (
cc://protokol), Assistant mode (KAIROS) - Teleport (resume session na jiném počítači)
Zajimavym detailem je ochrana proti reverse engineeringu – pokud kod detekuje, ze bezi v debugovacim rezimu a nejde o interni (Anthropic) build, okamzite ukonci proces. Jednoduche, ale ucinne.
Soubor 803 KB v jednom .tsx je extrémně neobvyklý. Většina projektů by toto rozdělila na desítky modulů. To naznačuje buď historický růst, nebo záměrný design pro bundling (Bun).
2. bashSecurity.ts – 102 KB bezpecnostnich validatoru
Kdyz AI asistent muze spoustet prikazy v terminalu, stojite pred zasadnim problemem: jak zabranit tomu, aby nekdo (nebo sam model) spustil neco nebezpecneho? Odpoved tvorcu Claude Code je impozantni – napsali 102 KB cistech bezpecnostnich validaci. Kazdy prikaz, ktery model navrhne, projde desitkami kontrol, nez se vubec dostane k shellu.
Je to jednoznacne nejpozoruhodnejsi bezpecnostni modul, jaky jsem kde videl. Soubor ma 2 593 radku cistych bezpecnostnich kontrol pro Bash prikazy.
Co všechno hlídá?
| Check ID | Čeho se týká |
|---|---|
| 1 | Neúplné příkazy (začínají tabulátorem, -, &&) |
| 2 | jq system() — jq může spouštět shell příkazy |
| 3 | Obfuskované flagy |
| 5 | Shell metaznaky (;, \|, &) v argumentech |
| 6 | Nebezpečné proměnné prostředí |
| 8 | $() command substitution |
| 9-10 | Vstupní/výstupní přesměrování |
| 11 | IFS injection |
| 14 | Malformed token injection |
| 17 | Kontrolní znaky Unicode |
| 20 | Zsh-specifické nebezpečné příkazy |
Zsh: cely extra attack surface
Krome standardniho Bashe system hlida i prikazy specificke pro Zsh – napriklad zmodload (brana k nebezpecnym modulem jako zsh/system ci zsh/zpty), emulate (ktery s parametrem -c funguje jako eval), ztcp (TCP spojeni pro exfiltraci dat) nebo vestavene alternativy systemovych prikazu jako zf_rm ci zf_chmod. Celkem je blokovano pres 20 Zsh-specifickych prikazu.
Heredoc parser v ramci security checku
Cela funkce isSafeHeredoc() (priblizne 200 radku) implementuje line-based matching presne replikujici chovani Bashe pro uzavirani heredocu. Autori vysvetluji, ze regex pristup by mohl preskocit pres delimiter a skryt injektovane prikazy – proto namisto regularnich vyrazu zpracovavaji vstup radek po radku, presne tak, jak to dela sam Bash.
Komentáře v tomto souboru jsou bezpečnostní dokumentace na úrovni akademického paperu. Každý regex má vysvětlení, proč je napsán právě tak, a jaký útočný vektor blokuje. To je extrémně vzácné v produkčním kódu.
3. Query Loop – query.ts s auto-kompakci, snip a reactive compact
Kazdá konverzace s AI modelem ma svuj limit – kontextove okno. Cim dele si povidate, tim vic tokenu spotrebujete, az narazite na strop. Vetsina nastroju v tu chvili proste rekne „konverzace je prilis dlouha“. Claude Code to resi uplne jinak: ma propracovany system, ktery konverzaci prubezne zhustuje, zkracuje a optimalizuje, aniz byste si toho vsimli.
Soubor query.ts (1 730 radku, 68 KB) implementuje hlavni dotazovaci smycku, ktera je srdcem cele aplikace:
graph LR
A[User Input] --> B[processUserInput]
B --> C[applyToolResultBudget]
C --> D[snipCompactIfNeeded]
D --> E[microcompact]
E --> F[contextCollapse]
F --> G[autocompact]
G --> H[callModel API]
H --> I[StreamingToolExecutor]
I --> J{tool_use?}
J -->|Ano| K[runTools]
K --> A
J -->|Ne| L[result]
Klíčové featury:
- Streaming Tool Execution — paralelní spouštění nástrojů během streamování
- Auto-compact — automatická komprese historie, když kontext překročí limit
- Snip compact — odříznutí starých zpráv
- Micro-compact — jemná komprese jednotlivých bloků
- Reactive compact — komprese jako reakce na „prompt too long“ chybu
- Context collapse — kolaps kontextu pro úsporu tokenů
- Task budget tracking — sledování rozpočtu na celý agentní turn
- Max output tokens recovery — až 3 pokusy o obnovení z truncated output
„Pravidla mysleni“ – komentar jako z Harryho Pottera
Nad klicovm blokem kodu najdete komentar psany archaickou anglictinou ve stylu fantasy romanU. Autor v nem varuje budouci vyvojare, ze pravidla pro zpracovani thinking bloku jsou slozita a vyzaduji „hlubokou meditaci“. A konci vyhruzkou: „Pokud tato pravidla nedodrzis, budes potrestam celym dnem debugovani a trhani vlasu.“ Vtipne, ale pravdive – implementace thinking bloku je skutecne jedna z nejnarocnejsich casti kodu.
4. Tool System – Tool.ts a 40+ nastroju
AI model sam o sobe jen generuje text. Aby mohl skutecne neco udelat – precist soubor, spustit prikaz, upravit kod – potrebuje nastroje. Claude Code jich ma pres 40 a kazdy z nich prochazi sofistikovanym systemem opravneni, validace a bezpecnostnich kontrol. Neni to proste volani funkce; je to cely framework.
Abstrakce nastroje (Tool.ts, 793 radku) definuje jeden z nejpropracovanejsich tool interface, jaky existuje:
Hlavní vlastnosti Tool interface:
| Metoda | Účel |
|---|---|
call() |
Spuštění nástroje |
checkPermissions() |
Kontrola oprávnění |
validateInput() |
Validace vstupu před spuštěním |
isConcurrencySafe() |
Bezpečnost pro paralelní spuštění |
isReadOnly() |
Pouze čtení? |
isDestructive() |
Destruktivní operace? |
interruptBehavior() |
'cancel' vs 'block' při přerušení uživatelem |
isSearchOrReadCommand() |
Pro UI: condensovaný výstup |
toAutoClassifierInput() |
Vstup pro auto-mode bezpečnostní klasifikátor |
preparePermissionMatcher() |
Příprava matcheru pro hook if conditions |
backfillObservableInput() |
Zpětné doplnění legacy/derived polí |
maxResultSizeChars |
Max velikost výsledku před persistencí na disk |
buildTool() – factory pattern
Vsech 40+ nastroju prochazi jednim factory, ktery ke kazde definici doplni vychozi chovani (defaults). Je to elegantni vzor – vyvojar definuje jen to, co je specificke pro jeho nastroj, a zbytek dostane automaticky. Dulezity je fail-closed design: napriklad isConcurrencySafe vychozne vraci false, takze kazdy nastroj je implicitne povazovan za nebezpecny pro paralelni beh, dokud autor explicitne nerekne jinak.
Seznam nástrojů (40+ adresářů):
AgentTool, BashTool, FileEditTool, FileReadTool, FileWriteTool,
GlobTool, GrepTool, MCPTool, NotebookEditTool, PowerShellTool,
REPLTool, SkillTool, WebSearchTool, WebFetchTool, TodoWriteTool,
TaskCreateTool, TaskStopTool, SleepTool, LSPTool, ...
Existence PowerShellTool vedle BashTool potvrzuje first-class Windows support — ne jen „bash přes WSL“.
5. Voice Service – Multi-platform audio s fallback chain
Mluvit s AI asistentem misto psani zni jednoduze, ale implementacne je to nocni mura. Kazdy operacni system (macOS, Linux, Windows) zpristupnuje mikrofon jinym zpusobem, a nekdy ho nezpristupnuje vubec (treba ve WSL). Autori Claude Code se s tim vyporadali elegantnim retezcem fallbacku – kdyz selze jedna metoda, automaticky zkusi dalsi.
Soubor voice.ts (526 radku) implementuje hlasovy vstup s pozoruhodnou fallback logikou:
Native NAPI (cpal) → arecord (ALSA) → SoX (rec)
Architektonické perličky:
-
Lazy-load dlopen – nativni audio modul se nacita az pri prvnim stisku klavesy pro hlasovy vstup. Duvod je pragmaticky: na macOS muze nacteni nativni knihovny blokovat hlavni vlakno az 8 sekund po studenem startu (kdyz se coreaudiod teprve probouzi). Nacteni pri startu aplikace by vyvolalo neprijemne zamrznutui.
-
WSL detection — rozlišuje WSL1 (žádné audio), WSL2 bez WSLg a WSL2+WSLg (PulseAudio přes RDP pipes)
-
probeArecord()— skutečně spustí arecord na 150ms a ověří, zda se podařilo otevřít zařízení.hasCommand('arecord')nestačí — binárka může existovat, ale/proc/asound/cardsje prázdný. -
Linux ALSA card detection čte přímo
/proc/asound/cardsa hledá string'no soundcards'.
6. Cost Tracker – precizni sledovani nakladu
Kazde zavolani AI modelu neco stoji – a pri intenzivni praci s kodem se naklady rychle nasbiraji. Claude Code proto obsahuje detailni sledovani spotreby, ktere uzivateli ukazuje presne, kolik tokenu spotreboval, na jakem modelu a za kolik dolaru. System je natolik dukladny, ze si pamatuje naklady i mezi restarty.
cost-tracker.ts (324 radku) sleduje naklady na API volani v realnem case s granularitou na model:
- Sleduje input/output/cache_read/cache_creation tokeny
- Per-model rozúčtování
- Web search requests
- OpenTelemetry metriky (
getCostCounter()?.add(cost, attrs)) - Persistentní session costs — ukládá do project configu a obnovuje při
--resume - Advisor model tracking — extra tokeny z „poradního“ modelu
7. QueryEngine – lifecycle management s AsyncGenerator pattern
QueryEngine je mozek cele operace – trida, ktera drzi pohromade konverzaci, historii zprav a orchestraci nastroju. Zajimave je, jak vyuziva TypeScriptove asynchronni generatory k tomu, aby odpovedi od modelu proudily k uzivateli v realnem case, zatimco na pozadi bezi persisting a normalizace dat.
QueryEngine.ts (1 296 radku) vyuziva TypeScriptove asynchronni generatory (async function*) k tomu, aby zpravy od modelu proudily k uzivateli v realnem case. Metoda submitMessage postupne generuje (yield) normalizovane zpravy, zatimco na pozadi probiha jejich ukladani a zpracovani.
Zajimavy detail: transcript persistence je race-condition-aware. Uzivatelske zpravy se ukladaji na disk PRED odeslanim na API. Duvod? Pokud uzivatel proces ukonci (napr. klikne Stop) behem cekani na odpoved, konverzace zustane obnovitelna pres --resume prave diky tomu, ze vstupni zprava uz byla ulozena.
8. Compact System – 7 vrstev komprese kontextu
Uz jsem zminil, ze Claude Code resi problem prilis dlouhych konverzaci. Co jsem nerekl, je rozsah toho reseni. V adresari services/compact/ se skryva cely kompresni pipeline se sedmi (!) nezavislymi strategiemi. Kazda reaguji na jiny typ situace a dohromady tvoří system, ktery jsem v zadnem jinem projektu nevidel.
Adresar services/compact/ obsahuje cely kompresni pipeline:
| Soubor | Velikost | Účel |
|---|---|---|
compact.ts |
60 KB | Hlavní kompresní logika |
sessionMemoryCompact.ts |
21 KB | Komprese session paměti |
microCompact.ts |
19 KB | Jemná komprese bloků |
prompt.ts |
16 KB | Prompt pro kompresní model |
autoCompact.ts |
13 KB | Automatická komprese s prahovými hodnotami |
To je 7 nezávislých kompresních mechanismů (autoCompact, microCompact, snipCompact, reactiveCompact, contextCollapse, sessionMemoryCompact, apiMicrocompact) — každý s jiným triggrem a strategií. Tento stupeň sofistikace je extrémně neobvyklý.
9. Feature Flags a Dead Code Elimination
Anthopic vytvari z jednoho zdrojoveho kodu vice verzí produktu – interní build pro zamestnance a externi build pro verejnost. Misto dvou oddelených vetvi pouzivaji elegantni system feature flagu, ktery pri buildovani fyzicky odstrani kod funkci, ktere v dane verzi nemaji byt.
Kod vyuziva funkci feature() z bun:bundle pro compile-time rozhodovani. Princip je jednoduchy: pri buildovani se na zaklade konfigurace rozhodne, ktere funkce budou v dane verzi zahrnuty. Bundler pak fyzicky odstrani nerelevantni vetev kodu – nejen ze se nespusti, ona v binarce vubec neexistuje.
To znamena, ze externi build (pro verejnost) fyzicky neobsahuje kod funkci jako KAIROS (assistant mode), COORDINATOR_MODE, SSH_REMOTE, TRANSCRIPT_CLASSIFIER a dalsich internich featur.
10. Startup Optimization – paralelismus na millisekund
Kdyz spustite Claude Code, cekate mozna sekundu, nez se objevi prompt. Za tu sekundu se ale deje neuveritelne mnozstvi prace – a autori se snazi kazdy start zrychlit na uroven milisekund. Prvnich 20 radku kodu ukazuje, jak daleko jsou ochotni pro ty usetrane milisekundy zajit.
Jeste nez se nacte jediny modul, spusti se dva paralelni procesy: cteni MDM konfigurace a prefetch klicu z keychainu (coz setri priblizne 65 ms). Teprve pak nasleduje 200+ importu, jejichz evaluace trva zhruba 135 ms. Subprocess spawny z prvnich radku bezi paralelne s timto nacitanim, takze se jejich latence efektivne „skryje“.
Souhrnny prehled codebase
| Metrika | Hodnota |
|---|---|
| Největší soubor | main.tsx — 803 KB |
| Bezpečnostní modul | bashSecurity.ts — 102 KB |
| Bash oprávnění | bashPermissions.ts — 98 KB |
| BashTool samotný | BashTool.tsx — 160 KB |
| Počet nástrojů | 40+ |
| Kompresní strategie | 7 nezávislých |
| Feature flags | COORDINATOR_MODE, KAIROS, SSH_REMOTE, HISTORY_SNIP, REACTIVE_COMPACT, CONTEXT_COLLAPSE, BG_SESSIONS, TOKEN_BUDGET, … |
| Runtime | Bun (bundled) s Node.js kompatibilitou |
| UI framework | React + Ink (terminal UI) |
Tento kód reprezentuje jeden z nejpropracovanějších AI CLI nástrojů na světě. Kombinace security-first designu (přes 200 KB bezpečnostních kontrol jen pro Bash), sofistikované správy kontextu (7 kompresních mechanismů), a hlubokého multi-platform supportu (voice se 3 backend fallbacky, WSL detekce) dělá z tohoto projektu fascinující studijní materiál pro pokročilé softwarové inženýry.