Claude Code opravil ochranu proti čtení mimo pracovní adresář počtvrté za dva týdny
Claude Code 2.1.273 z 15. září opravuje dvě cesty kolem nastavení, které má nástroji zakázat čtení souborů mimo pracovní adresáře. Přepínač existuje od 1. září a je to u něj čtvrtá oprava. Hlášení, podle kterého táž ochrana naopak zahazuje adresáře deklarované projektem, zůstává otevřené.

Anthropic vydal 15. září Claude Code 2.1.273 a dvě položky v jeho seznamu změn mluví o jednom a tomtéž nastavení. Jmenuje se permissions.blockReadsOutsideWorkingDirectories a má nástroji zakázat, aby sahal na soubory mimo adresáře, se kterými zrovna pracuje. Zavedla ho verze 2.1.257 z 1. září. Za těch čtrnáct dní se u něj opravovalo počtvrté.
Proč ten přepínač vznikl
Claude Code umí běžet v režimu, kde se na svolení neptá. Zákaz čtení mimo pracovní adresáře je pojistka proti tomu, aby si nástroj v takovém běhu otevřel cokoli na disku. Dokumentace ho popisuje tak, že se rozpoznané čtecí příkazy shellu ptají i v automatickém režimu a i v tom, který jinak přeskakuje všechno.
Slovo „rozpoznané“ je v té větě to podstatné. Nástroj se rozhoduje podle toho, jestli si z příkazové řádky odvodí, na jaké soubory příkaz sáhne. Když si to odvodit neumí, musí se zeptat. Přesně tam vznikly tři ze čtyř oprav.
Příkaz, který se nedá rozebrat
Verze 2.1.271 ze 14. září opravila, že řádek se dvěma změnami adresáře, se subshellem nebo s řetězem cd a git dotaz přeskočil. O den později přišla 2.1.273 s obecnější verzí téhož: dotaz přeskakoval každý příkaz, který kontrola oprávnění neumí plně rozebrat. Táž položka zmiňuje ještě druhou vadu, a ta se čtením nesouvisí – subshell dokázal skrýt mazací příkaz rm v režimu, kde se nástroj na nic neptá.
Jedna změna ve stejném vydání jde opačným směrem. Anthropic vzal zpět úpravu z 2.1.268, podle které se u nerozebratelných řádků jako eval nebo env -C uplatňovala zakazovací pravidla pro čtení a úpravy souborů. Běžný příkaz typu time -p make build se od té chvíle zase ptá, místo aby ho nástroj rovnou odmítl.
Adresář, který si zvolí repozitář
Druhá oprava v 2.1.273 se týká paměti. Claude Code si vedle instrukcí v souboru CLAUDE.md vede vlastní poznámky, které si píše sám, a dokumentace u nich uvádí, že se načítají na začátku každého sezení v rozsahu prvních dvou set řádků nebo 25 kB. Kde ty poznámky leží, určuje klíč autoMemoryDirectory. Čte se z kteréhokoli místa, kde nastavení může být – z uživatelského, z projektového, z lokálního, z firemní politiky i z příkazové řádky – a hodnotou je absolutní cesta.
Do 2.1.273 se adresář zvolený nastavením v repozitáři načetl do promptu, indexoval se a použil při vytahování poznámek, aniž ho zapnutý zákaz čtení mimo pracovní adresáře zastavil. Nové vydání to dělat přestalo.
Otevřít si tu cestu nemůže kdokoli. Dokumentace u autoMemoryDirectory v projektovém nastavení odkazuje na totéž pravidlo důvěry, jaké platí pro hooky, takže uživatel musí projekt nejdřív označit za důvěryhodný. Zákaz čtení je ovšem druhá obrana postavená nad tu první a má držet právě tehdy, když se ta první ukáže jako přehnaně velkorysá. Podobný případ u konkurence popisuje článek o programu, který Codex spustil podle nastavení cizího repozitáře.
Čtyři opravy, patnáct vydání
Mezi 1. a 15. zářím vyšlo podle evidence balíčku na npm patnáct verzí Claude Code. Zákaz čtení mimo pracovní adresáře se v jejich seznamech změn objevil pětkrát:
| verze | datum | co se změnilo |
|---|---|---|
| 2.1.257 | 1. 9. | nastavení přibylo |
| 2.1.260 | 3. 9. | na macOS schovávalo i to, co schovat nemělo |
| 2.1.271 | 14. 9. | dvojí cd, subshell a řetěz cd+git přeskočily dotaz |
| 2.1.273 | 15. 9. | dotaz přeskočil každý nerozebratelný příkaz |
| 2.1.273 | 15. 9. | adresář s pamětí z nastavení repozitáře |
Oprava z 3. září míří na opačnou stranu než zbylé tři. Ochrana tehdy na macOS schovala uživatelovo nastavení gitu před gitem běžícím v sandboxu a subagentovi izolovanému ve vlastním pracovním stromu jeho vlastní kopii repozitáře.
Hlášení, které pořád běží
Na přehnanou přísnost míří i hlášení #92582, otevřené 7. září a k 16. září stále nezavřené. Jeho autor popisuje sezení, ve kterém uživatelské nastavení zapíná zákaz čtení a projekt si k tomu deklaruje další pracovní adresáře. Hlavička sezení je vypíše všechny, jenže čtecí nástroje soubory pod těmi projektovými odmítnou. Příkaz /add-dir v témž sezení funguje, takže se to obejít dá – jen ne v běhu, u kterého nikdo nesedí. Hlášení nese na GitHubu štítky bug a has repro, tedy potvrzený postup na zopakování.
Anthropic na tu oblast viditelně tlačí. Mezi opravami ze 14. a 15. září je jediný den a dokumentace dnes popisuje i chování u nerozebratelných příkazů, takže se čtenář nemusí spoléhat na seznam změn. Co přepínač zrovna drží, se ale dá zjistit jedině čtením seznamu změn verzi po verzi. Za prvních čtrnáct dní se jeho chování změnilo ve čtyřech z patnácti vydání.
Zdroje
- CHANGELOG.md v repozitáři anthropics/claude-code – znění všech pěti položek
- Choose a permission mode – co nastavení dělá a od které verze
- How Claude remembers your project – klíč
autoMemoryDirectorya pravidlo důvěry - Hlášení #92582 – opačná vada téhož nastavení