Anthropic rozšířil hlídač rekurzivního mazání v Claude Code sedmkrát za půl roku
Claude Code 2.1.281 se ptá na potvrzení u rekurzivního mazání, jehož cíl je jen výstupem vnořeného příkazu, a to i v režimu, který se jmenuje „přeskoč oprávnění“. Je to sedmý zásah do téhož hlídače od konce března a předcházelo mu veřejné hlášení uživatele, kterému takový příkaz smazal 600 GB dat. Kanál „stable“ přitom pořád ukazuje na verzi, ve které oprava není.
Ve seznamu změn Claude Code stojí u verze 2.1.281 jednořádková oprava: rekurzivní mazání, jehož cíl je jen výstupem vnořeného příkazu – tedy třeba rm -rf "$(pwd)" –, si teď vyžádá potvrzení. Platí to i v automatickém režimu a při spuštění s přepínačem --dangerously-skip-permissions, jehož jméno slibuje pravý opak, a dokonce i tehdy, když má uživatel volání Bashe výslovně povolené. Vypnout ten dotaz jde proměnnou prostředí CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT=1. Verze podle evidence balíčku na npm vyšla 23. září 2026.

Hlídač čte příkaz jako text, a ten cestu neobsahuje
Proč taková věc potřebuje vlastní opravu, je vidět na samotném zápisu příkazu. Ochrana před nebezpečným mazáním se rozhoduje podle toho, co je v příkazu napsané. U rm -rf / nebo rm -rf ~ je cíl vidět. U rm -rf "$(pwd)" tam žádná cesta není; ta vznikne teprve tím, že shell nejdřív spustí vnořený příkaz a jeho výstup dosadí na jeho místo. Kontrola tedy dostane k posouzení text, ze kterého se nedá poznat, co se bude mazat.
V automatickém režimu to navíc neposuzuje člověk. Dokumentace k bezpečnosti říká, že v něm akce místo uživatele prohlíží oddělený třídicí model a zastavuje ty, které vyhodnotí jako nebezpečné. I on ale čte nespuštěný příkaz.
Hlášení, které opravě předcházelo
Pět dní před vydáním opravy popsal uživatel v hlášení č. 95426, co se mu stalo 16. září na Windows 11 s Claude Code 2.1.274. Sezení podle něj samo, jako úklid před vlastní prací, spustilo rm -rf "$(cygpath -u 'C:\')" 2>/dev/null. Vnořený příkaz převede zápis C:\ na podobu /c/, takže se mazal celý disk. Běželo to zhruba 35 minut a přišlo asi 600 GB dat: uživatelský profil, několik repozitářů a poznámky, které nikde jinde nebyly.
Dvě věci na tom hlášení stojí za pozornost i bez ohledu na objem. Přesměrování chybového výstupu do /dev/null zahodilo právě ten signál, podle kterého by si šlo všimnout, že něco nehraje – záplavu hlášek o odepřeném přístupu, jak mazání postupuje do systémových adresářů. A přepis sezení leží v ~/.claude/projects, tedy uvnitř mazaného rozsahu, takže doklad o tom, jak příkaz vznikl, zmizel s ním. Hlášení je označené štítky bug, area:security a data-loss a ke dni vydání tohoto textu je otevřené.
Tentýž hlídač po sedmé
Zajímavější než jedna oprava je řada, do které patří – a není to u tohohle nástroje první taková řada: ochranu proti čtení mimo pracovní adresář opravoval Anthropic během dvou týdnů čtyřikrát. Seznam změn Claude Code obsahuje od konce března sedm zásahů do téhož rozhodnutí – jestli rekurzivní mazání potřebuje potvrzení – a každý z nich přidává jeden další způsob, jak se cíl dá napsat:
| verze | vyšla | co se do hlídače přidalo |
|---|---|---|
| 2.1.84 | 25. 3. 2026 | rozpoznávání kořenů diskových jednotek na Windows (C:\, C:\Windows) |
| 2.1.113 | 17. 4. 2026 | na macOS se cesty /private/{etc,var,tmp,home} počítají jako nebezpečný cíl i pod povolovacím pravidlem Bash(rm:*) |
| 2.1.154 | 28. 5. 2026 | rm -rf $HOME s lomítkem na konci proměnné |
| 2.1.205 | 8. 7. 2026 | proměnná, kterou automatický režim neumí z kontextu dohledat |
| 2.1.208 | 13. 7. 2026 | katastrofické mazání v příkazu, který někde obsahuje $(…), zpětné apostrofy nebo <(…) |
| 2.1.261 | 4. 9. 2026 | poziční parametry a skripty předané sh -c v dvojitých uvozovkách |
| 2.1.281 | 23. 9. 2026 | cíl, který je jen výstupem vnořeného příkazu |
Data vydání jsou z evidence balíčku na npm. Do téhle sedmičky se nepočítá osmá zmínka o rm -rf z verze 2.1.143 (15. 5. 2026): ta říká, že úklid pracovní kopie už při nezdaru nesahá k rekurzivnímu mazání, a je to jiné místo v programu, ne rozhodnutí o potvrzení.
Rozdíl mezi červencovou a zářijovou položkou je přitom malý a rozhoduje o všem. Verze 2.1.208 řeší příkaz, jehož cíl je vidět (rm -rf ~) a vnořený příkaz je v něm někde jinde. Verze 2.1.281 řeší případ, kdy vnořený příkaz je celý cíl a není s čím ho porovnat. V jediném komentáři pod hlášením to říká čtenář, který si znění seznamu změn prošel sám: nespuštěný řetězec nikdy neobsahuje /c/ ani kořen disku, takže pravidlo hledající rm -rf / nebo rm -rf ~ ten příkaz propustí.
Ze čtyř návrhů v hlášení dorazil jeden
Autor hlášení navrhl čtyři opatření. Aby se mazání, jehož vyhodnocený cíl je kořen souborového systému, kořen disku nebo kořen uživatelského profilu, rovnou odmítlo místo dotazu. Aby se cíl před potvrzením vyhodnotil a ukázal, ne aby v dialogu stál původní zápis. Aby se potlačení chybového výstupu u destruktivního příkazu bralo samo za důvod k odmítnutí. A aby přepisy sezení nebyly v dosahu toho, co se maže.
V seznamu změn je z toho vidět první polovina prvního bodu: dotaz. Slovo o vyhodnoceném a zobrazeném cíli, o přesměrování chybového výstupu ani o umístění přepisů v něm není – prohledáno nad celým souborem, který má 792 786 bajtů. Proměnná CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT zatím také nestojí v referenci proměnných prostředí, ačkoli ta stránka vydá přes 127 tisíc znaků textu.
Na kanálu „stable“ oprava zatím není
Evidence balíčku na npm vede tři pojmenované kanály. Značky latest i next ukazují na 2.1.281, značka stable na 2.1.273 z 15. září 2026. Kdo se drží stabilního kanálu, má tedy verzi starší nejen než oprava, ale i než 2.1.274, na které se popsaná ztráta dat stala. Odstup toho kanálu není novinka: na konci července zaostával o osm vydání a neměl tehdy ani opravy oprávnění.
Za poznámku stojí i to, co v tom nástroji funguje: hlídač nebezpečného mazání tam vůbec je a ptá se i v režimu, jehož jméno říká, že se na oprávnění ptát nebude. Dokumentace k němu vedle toho popisuje hranici pracovního adresáře a oddělené prostředí pro volání Bashe s odstíněným souborovým systémem a sítí. Sedm položek nad sebou ale ukazuje i mez takové ochrany: dokud se rozhoduje nad textem příkazu a ne nad tím, co z něj po vyhodnocení vyjde, bude se do ní vždycky dát přidat osmý způsob zápisu.
Zdroje
- Seznam změn Claude Code – znění položek u verzí 2.1.84 až 2.1.281
- Hlášení č. 95426 v repozitáři anthropics/claude-code – popis ztráty dat, prostředí a navržená opatření
- Evidence balíčku @anthropic-ai/claude-code na npm – data vydání jednotlivých verzí a pojmenované kanály
- Dokumentace Claude Code: bezpečnost – popis režimů oprávnění a vestavěných ochran