Nová pojistka Claude Code proti zápisu mimo projekt se nevztahuje na příkazy v shellu
Verze 2.1.314 z 30. října přidala nastavení, se kterým nástroje Write, Edit a NotebookEdit odmítnou zapisovat mimo pracovní adresáře, a to i v režimu, který se jinak na nic neptá. Příkazy v shellu a procesy, které spustí, nehlídá. Právě přes ně přitom 27. října smazal test napsaný podagentem jednomu uživateli velkou část domovského adresáře.

Claude Code 2.1.314 vyšel podle registru npm 30. října v 1.12 našeho času. První položka jeho poznámek k vydání přidává nastavení permissions.blockWritesOutsideWorkingDirectories. Víc než jednu větu o něm Anthropic zatím nenapsal: nástroje Write, Edit a NotebookEdit s ním odmítnou cesty mimo pracovní adresáře „in every permission mode“, tedy v každém režimu oprávnění.
Je to zápisová obdoba nastavení blockReadsOutsideWorkingDirectories, které přibylo ve verzi 2.1.257 z 1. září a které Anthropic během dvou týdnů čtyřikrát opravoval. Pracovní adresáře jsou ten, ve kterém relace začala, a ty, které uživatel přidá přepínačem --add-dir nebo položkou permissions.additionalDirectories.
Pojistka platí i v režimu, který se na nic neptá
Váhu má hlavně v režimu bypassPermissions. Ten podle dokumentace režimů oprávnění schvaluje bez ptaní všechno a Anthropic ho doporučuje jen do izolovaných kontejnerů a virtuálních strojů. Co se neschválí ani tam, vypisuje dokumentace v krátkém seznamu. Čtení mimo pracovní adresáře při zapnutém blockReadsOutsideWorkingDirectories v něm je, nové zápisové nastavení k večeru 30. října chybělo. Nezná ho ani přehled nastavení, takže třeba to, jak se chová, když ho firma nastaví centrálně, zatím nikde nestojí.
Test napsaný podagentem mazal domovský adresář přes shell
Tři dny před vydáním, 27. října, popsal jeden uživatel v hlášení #105342 případ, na který by nové nastavení nedosáhlo. Hlavní agent v Claude Code 2.1.311 na macOS předal práci podagentovi s izolací worktree, tedy s vlastní kopií repozitáře. Podagent napsal v Rustu test, který měl ověřit, že skript odmítne nečíselný vstup. Pomocná část testu pouštěla argumenty přes sh -c a testovací argument obsahoval za středníkem příkaz ke smazání domovského adresáře. Shell ho vykonal jako samostatný příkaz s právy uživatele.
Spuštění cargo test trvalo podle hlášení asi sedm minut a test prošel. Mazání se zastavilo zhruba po šesti minutách, takže část domovského adresáře zůstala. Zmizel ale hlavní checkout projektu včetně .git, další projekty ve stejné nadřazené složce, soubor ~/.zshrc a obsah ~/.config. Neodeslané commity a rozdělaná práce jsou podle autora pryč. Zálohu v Time Machine neměl.
Ničivý příkaz se nikdy neobjevil jako volání nástroje Bash. Byl schovaný v souboru s testem.Diskutující pod hlášením 29. října napsal, že takový příkaz nezachytí ani hook, protože neběžel jako volání nástroje, ale jako podproces cargo test. Další 30. října dodal, že nová pojistka z verze 2.1.314 tu nepomůže, protože hlídá jen tři souborové nástroje. Totéž plyne ze znění poznámek k vydání, příkazy v shellu v něm nejsou. Nikdo z Anthropicu do večera 30. října pod hlášením neodpověděl.
Procesy spuštěné z shellu hlídá jen sandbox
Na příkazy v shellu a na všechno, co spustí, má Claude Code jinou vrstvu, sandbox. Podle dokumentace v něm příkazy smějí zapisovat jen do pracovního adresáře, do dočasného adresáře uživatele a do přidaných adresářů. Omezení vynucuje operační systém, takže platí i pro podprocesy, jako jsou spouštěče testů. Vestavěné souborové nástroje se sandboxem neřídí, hlídají je pravidla oprávnění. Na rozhraní obou vrstev byla i chyba, kvůli které proces ze sandboxu na macOS dokázal nasměrovat nástroj Edit mimo projekt.
Sandbox je ve výchozím stavu vypnutý. Zapíná se příkazem /sandbox nebo nastavením sandbox.enabled a běží na macOS, Linuxu a ve WSL2. Na Windows bez WSL2 pouští Claude Code příkazy bez něj. Když příkaz v sandboxu selže, může ho Claude zkusit znovu mimo sandbox; tuhle cestu zavře hodnota "allowUnsandboxedCommands": false.
| Ochrana | Na co sahá | Výchozí stav |
|---|---|---|
blockReadsOutsideWorkingDirectories (od 2.1.257) | čtení mimo pracovní adresáře souborovými nástroji a rozpoznanými čtecími příkazy v Bashi | vypnuto, v automatickém režimu ho Claude Code nabídne |
blockWritesOutsideWorkingDirectories (od 2.1.314) | zápis mimo pracovní adresáře nástroji Write, Edit a NotebookEdit | zapíná se v nastavení |
| sandbox | zápis příkazů v Bashi a jejich podprocesů mimo pracovní, dočasný a přidané adresáře | vypnuto, na Windows bez WSL2 nejde |
izolace worktree u podagenta | vlastní kopie repozitáře a pracovní adresář pro příkazy podagenta | jen na vyžádání |
Případ z hlášení #105342 by z těch čtyř zastavil jen sandbox. Izolace ve worktree dala podagentovi vlastní kopii repozitáře, ale proces spuštěný testem běžel s právy uživatele a dosáhl kamkoli, kam on. Autor hlášení proto žádá, aby dokumentace i rozhraní řekly naplno, že izolace odděluje jen checkouty gitu, ne přístup k disku. Jeden z diskutujících radí nastavit v testech proměnnou HOME na dočasný adresář, aby se znak ~ nerozložil na skutečný domovský adresář; tuhle radu jsme nezkoušeli.
Zdroje
- Claude Code: CHANGELOG.md, verze 2.1.314 a 2.1.257
- Registr npm: balíček @anthropic-ai/claude-code, data vydání verzí
- GitHub: hlášení #105342, Subagent-written test ran rm -rf ~ on the real home directory, 27. října 2026
- Dokumentace Claude Code: Sandboxing
- Dokumentace Claude Code: Permission modes
- Dokumentace Claude Code: Settings reference
- Dokumentace Claude Code: Subagents, pole isolation