36 36
37До версии 2.1.211 Claude Code всегда сохранял правило в начальном каталоге, поэтому одобрение, предоставленное в worktree или подкаталоге, не применялось к остальной части репозитория. Правила, которые более ранние версии сохранили в подкаталоге или worktree, по-прежнему применяются к сеансам, запущенным там.37До версии 2.1.211 Claude Code всегда сохранял правило в начальном каталоге, поэтому одобрение, предоставленное в worktree или подкаталоге, не применялось к остальной части репозитория. Правила, которые более ранние версии сохранили в подкаталоге или worktree, по-прежнему применяются к сеансам, запущенным там.
38 38
39Иногда запрос разрешения предлагает только одноразовое одобрение, без опции "не спрашивать снова" и без опции разрешить действие на остаток сеанса. Claude Code предлагает эти опции только когда запрос может показать вам всё, что они позволили бы, поэтому правило, которое вы сохраняете из запроса, охватывает только то, что названо его опцией. Когда запрос предлагает только одноразовое одобрение, одобрите действие один раз или добавьте правило самостоятельно в [`/permissions`](#manage-permissions).39Иногда запрос разрешения предлагает только одноразовое одобрение, без опции "не спрашивать снова" и без опции разрешить действие на остаток сеанса. Claude Code предлагает эти опции только когда запрос может показать вам всё, что они позволили бы, поэтому правило, которое вы сохраняете из запроса, охватывает только то, что названо его опцией. Когда запрос предлагает только одноразовое одобрение, одобрите действие один раз или добавьте правило самостоятельно в [`/permissions`](#manage-permissions). Чтобы запросы перестали появляться для команды, которая начинается с exec-обёртки, например `watch`, или для команды `find` с действием, например `-delete`, см. [Exec-обёртки и действия `find`](#exec-wrappers-and-find-actions).
40 40
41<h3 id="add-a-comment-when-you-answer-a-permission-prompt">41<h3 id="add-a-comment-when-you-answer-a-permission-prompt">
42 Добавьте комментарий при ответе на запрос разрешения42 Добавьте комментарий при ответе на запрос разрешения
91| `acceptEdits` | Автоматически принимает редактирование файлов и общие команды файловой системы, такие как `mkdir`, `touch`, `mv` и `cp` для путей в рабочем каталоге или `additionalDirectories` |91| `acceptEdits` | Автоматически принимает редактирование файлов и общие команды файловой системы, такие как `mkdir`, `touch`, `mv` и `cp` для путей в рабочем каталоге или `additionalDirectories` |
92| `plan` | Claude читает файлы и запускает команды оболочки только для чтения для исследования, но не редактирует ваши исходные файлы; с доступным [режимом auto](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) также запускаются одобренные классификатором команды. Обозначается как Plan в CLI и расширении VS Code |92| `plan` | Claude читает файлы и запускает команды оболочки только для чтения для исследования, но не редактирует ваши исходные файлы; с доступным [режимом auto](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) также запускаются одобренные классификатором команды. Обозначается как Plan в CLI и расширении VS Code |
93| `auto` | Работает без обычных запросов; перед выполнением действий, таких как команды оболочки и сетевые запросы, фоновый [классификатор](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) проверяет, что они соответствуют вашему запросу |93| `auto` | Работает без обычных запросов; перед выполнением действий, таких как команды оболочки и сетевые запросы, фоновый [классификатор](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) проверяет, что они соответствуют вашему запросу |
94| `dontAsk` | Автоматически отклоняет каждый вызов, который иначе запросил бы подтверждение; чтение файлов в ваших рабочих каталогах и другие действия, которые не требуют одобрения, по-прежнему выполняются, как и инструменты, предварительно одобренные через `/permissions` или правила `permissions.allow`. `AskUserQuestion`, инструменты MCP, отмеченные [`requiresUserInteraction`](/docs/ru/mcp#require-approval-for-a-specific-tool), и инструменты соединителя [установленные вашей организацией на `ask`](/docs/ru/mcp#organization-controls-on-connector-tools) в сеансах, где эта настройка достигает Claude Code, отклоняются даже если вы их разрешили |94| `dontAsk` | Автоматически отклоняет каждый вызов, который иначе запросил бы подтверждение; чтение файлов в ваших рабочих каталогах и другие действия, которые не требуют подтверждения, по-прежнему выполняются, как и инструменты, предварительно одобренные через `/permissions` или правила `permissions.allow`. `AskUserQuestion`, инструменты MCP, отмеченные [`requiresUserInteraction`](/docs/ru/mcp#require-approval-for-a-specific-tool), [чтение из сетевых путей](#network-paths) и инструменты коннекторов, [для которых ваша организация установила `ask`](/docs/ru/mcp#organization-controls-on-connector-tools), в сессиях, где эта настройка достигает Claude Code, отклоняются, даже если вы их разрешили |
95| `bypassPermissions` | Пропускает запросы разрешений, за исключением [действий, которые ни один режим не одобряет автоматически](/docs/ru/permission-modes#actions-no-mode-auto-approves) |95| `bypassPermissions` | Пропускает запросы разрешений, за исключением [действий, которые ни один режим не одобряет автоматически](/docs/ru/permission-modes#actions-no-mode-auto-approves) |
96 96
97<Warning>97<Warning>
233Метка, отображаемая для инструмента в стенограмме и диалоге разрешений, может отличаться от его канонического имени. Например, инструмент с меткой `Stop Task` в стенограмме имеет каноническое имя `TaskStop`. Правила разрешений и [матчеры hook](/docs/ru/hooks) не совпадают с меткой, поэтому правило, написанное как `Stop Task`, не совпадает. Для правил отказа и запроса предупреждение при запуске выше ловит несоответствие. Используйте канонические имена, указанные в [справочнике инструментов](/docs/ru/tools-reference).233Метка, отображаемая для инструмента в стенограмме и диалоге разрешений, может отличаться от его канонического имени. Например, инструмент с меткой `Stop Task` в стенограмме имеет каноническое имя `TaskStop`. Правила разрешений и [матчеры hook](/docs/ru/hooks) не совпадают с меткой, поэтому правило, написанное как `Stop Task`, не совпадает. Для правил отказа и запроса предупреждение при запуске выше ловит несоответствие. Используйте канонические имена, указанные в [справочнике инструментов](/docs/ru/tools-reference).
234 234
235<h2 id="tool-specific-permission-rules">235<h2 id="tool-specific-permission-rules">
236 Правила разрешений для конкретных инструментов236 Правила разрешений для отдельных инструментов
237</h2>237</h2>
238 238
239<h3 id="bash">239<h3 id="bash">
240 Bash240 Bash
241</h3>241</h3>
242 242
243Правила Bash соответствуют всему тексту команды, где `*` обозначает любой текст. [Шаблоны подстановки](#wildcard-patterns) показывает, какие команды соответствуют каждой форме правила и где размещать `*`. Остальная часть этого раздела охватывает, как Claude Code сопоставляет составные команды и обёртки, что правило не соответствует, команды только для чтения и перенаправления.243Правила Bash сопоставляются со всем текстом команды, где `*` заменяет любой текст. В разделе [Шаблоны с подстановочными знаками](#wildcard-patterns) показано, какие команды соответствуют каждой форме правила и где ставить `*`. В остальной части этого раздела описано, как Claude Code сопоставляет составные команды и обёртки, какие обёртки и действия `find` не может одобрить правило-префикс, чему правило не соответствует, а также команды только для чтения и перенаправления.
244 244
245<h4 id="compound-commands">245<h4 id="compound-commands">
246 Составные команды246 Составные команды
247</h4>247</h4>
248 248
249<Tip>249<Tip>
250 Claude Code осведомлён об операторах оболочки, поэтому правило вроде `Bash(safe-cmd *)` не даст ему разрешение на выполнение команды `safe-cmd && other-cmd`. Распознаваемые разделители команд — это `&&`, `||`, `;`, `|`, `|&`, `&` и новые строки. Правило должно соответствовать каждой подкоманде независимо.250 Claude Code учитывает операторы оболочки, поэтому правило вида `Bash(safe-cmd *)` не даст разрешения на выполнение команды `safe-cmd && other-cmd`. Распознаваемые разделители команд: `&&`, `||`, `;`, `|`, `|&`, `&` и переводы строк. Правило должно соответствовать каждой подкоманде по отдельности.
251</Tip>251</Tip>
252 252
253Правила отказа и запроса применяются, когда любая подкоманда им соответствует, включая команду, вложенную в подоболочку, подстановку команды или тело управления потоком, такое как цикл `for`. Правило запроса вроде `Bash(git clean *)` по-прежнему запрашивает вас для `cd /tmp && git clean -f` или `echo "$(git clean -f)"`, даже в [автоматическом режиме](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode).253Правила deny и ask применяются, когда им соответствует любая подкоманда, включая команду, вложенную в подоболочку, подстановку команды или тело управляющей конструкции, например цикла `for`. Правило ask вида `Bash(git clean *)` по-прежнему запрашивает у вас подтверждение для `cd /tmp && git clean -f` или `echo "$(git clean -f)"`, даже в [авторежиме](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode).
254 254
255Когда после `&&` или `||` ничего нет, например в `npm test &&`, Claude Code рассматривает команду как непарсируемую и не разбивает её на подкоманды для сопоставления с правилами разрешения, поэтому правило вроде `Bash(npm *)` его не одобряет.255Когда после `&&` или `||` ничего нет, как в `npm test &&`, Claude Code считает команду неразбираемой и не разделяет её на подкоманды для сопоставления с правилами allow, поэтому правило вида `Bash(npm *)` её не одобряет.
256 256
257Когда вы одобряете составную команду с помощью «Да, и больше не спрашивать», Claude Code сохраняет отдельное правило для каждой подкоманды, требующей одобрения, а не одно правило для полной составной строки. Например, одобрение `git status && npm test` сохраняет правило для `npm test`, поэтому будущие вызовы `npm test` распознаются независимо от того, что предшествует `&&`. Подкоманды вроде `cd` в каталог вне ваших рабочих каталогов генерируют собственное правило Read для этого пути. Для одной составной команды может быть сохранено до 5 правил.257Когда вы одобряете составную команду с помощью «Yes, and don't ask again», Claude Code сохраняет отдельное правило для каждой подкоманды, требующей подтверждения, а не одно правило для всей составной строки. Например, одобрение `git status && npm test` сохраняет правило для `npm test`, поэтому будущие вызовы `npm test` распознаются независимо от того, что стоит перед `&&`. Подкоманды вроде `cd` в каталог за пределами ваших рабочих каталогов создают собственное правило Read для этого пути. Для одной составной команды может быть сохранено до 5 правил.
258 258
259<h4 id="process-wrappers">259<h4 id="process-wrappers">
260 Обёртки260 Обёртки
261</h4>261</h4>
262 262
263Перед сопоставлением правил Bash Claude Code удаляет фиксированный набор обёрток, поэтому правило вроде `Bash(npm test *)` также соответствует `timeout 30 npm test`. Удаляемые обёртки — это `timeout`, `time`, `nice`, `nohup` и `stdbuf`, плюс встроенные команды оболочки `command` и `builtin`, а также `noglob` в zsh. Каждая запускает свой аргумент как фактическую команду. Две связанные формы не удаляются: форма запроса `command -v`, которая ищет команду, а не запускает её, и `nocorrect` в zsh.263Перед сопоставлением с правилами Bash Claude Code отбрасывает фиксированный набор обёрток, поэтому правило вида `Bash(npm test *)` также соответствует `timeout 30 npm test`. Отбрасываемые обёртки: `timeout`, `time`, `nice`, `nohup` и `stdbuf`, а также встроенные команды оболочки `command` и `builtin` и `noglob` из zsh. Каждая из них выполняет свой аргумент как фактическую команду. Две родственные формы не отбрасываются: форма запроса `command -v`, которая ищет команду, а не выполняет её, и `nocorrect` из zsh.
264 264
265Claude Code также удаляет начальное присваивание определённых известных безопасных переменных окружения, поэтому `Bash(npm test *)` соответствует `NODE_ENV=test npm test`. Правило разрешения не будет соответствовать после присваивания любой другой переменной. Правило отказа или запроса соответствует после любого начального присваивания, поэтому `Bash(rm *)` в отказе по-прежнему соответствует `FOO=bar rm -rf tmp/`.265Claude Code также отбрасывает начальное присваивание некоторых заведомо безопасных переменных окружения, поэтому `Bash(npm test *)` соответствует `NODE_ENV=test npm test`. Правило allow не сопоставляется через присваивание любой другой переменной. Правило deny или ask сопоставляется через любое начальное присваивание, поэтому `Bash(rm *)` в deny по-прежнему соответствует `FOO=bar rm -rf tmp/`.
266 266
267Голый `xargs` также удаляется, поэтому `Bash(grep *)` соответствует `xargs grep pattern`. Удаление применяется только когда `xargs` не имеет флагов: вызов вроде `xargs -n1 grep pattern` сопоставляется как команда `xargs`, поэтому правила, написанные для внутренней команды, его не охватывают.267Простой `xargs` тоже отбрасывается, поэтому `Bash(grep *)` соответствует `xargs grep pattern`. Отбрасывание применяется только тогда, когда у `xargs` нет флагов: вызов вида `xargs -n1 grep pattern` сопоставляется как команда `xargs`, поэтому правила, написанные для внутренней команды, его не покрывают.
268 268
269Этот список обёрток встроен и не настраивается. Средства запуска среды разработки, такие как `direnv exec`, `devbox run`, `mise exec`, `npx` и `docker exec`, не входят в список. Поскольку эти инструменты выполняют свои аргументы как команду, правило вроде `Bash(devbox run *)` соответствует всему, что идёт после `run`, включая `devbox run rm -rf .`. Чтобы одобрить работу внутри средства запуска среды, напишите конкретное правило, которое включает как средство запуска, так и внутреннюю команду, например `Bash(devbox run npm test)`. Добавьте одно правило для каждой внутренней команды, которую вы хотите разрешить.269Этот список обёрток встроен и не настраивается. Средства запуска сред разработки, такие как `direnv exec`, `devbox run`, `mise exec`, `npx` и `docker exec`, в список не входят. Поскольку эти инструменты выполняют свои аргументы как команду, правило вида `Bash(devbox run *)` соответствует всему, что идёт после `run`, включая `devbox run rm -rf .`. Чтобы одобрить работу внутри средства запуска среды, напишите конкретное правило, включающее и средство запуска, и внутреннюю команду, например `Bash(devbox run npm test)`. Добавьте по одному правилу на каждую внутреннюю команду, которую хотите разрешить.
270 270
271Обёртки Exec, такие как `watch`, `setsid`, `ionice` и `flock`, не могут быть автоматически одобрены правилом префикса вроде `Bash(watch *)`, поэтому в ручном режиме они всегда запрашивают. То же самое применяется к `find` с `-exec` или `-delete`: правило `Bash(find *)` не охватывает эти формы. Чтобы одобрить конкретный вызов, напишите правило точного совпадения для полной строки команды.271<h4 id="exec-wrappers-and-find-actions">
272 Exec-обёртки и действия `find`
273</h4>
274
275Правило-префикс вида `Bash(watch *)` или `Bash(find *)` не может автоматически одобрить следующие команды, поэтому в ручном режиме они запрашивают подтверждение:
276
277* **Exec-обёртки**: например `watch`, `setsid`, `ionice` и `flock`
278* **`find`**: с действием, которое выполняет команды, удаляет файлы или записывает файлы, например `-exec`, `-delete` или `-fprint`, либо с `-files0-from`, который берёт пути для поиска из файла
279
280Чтобы одобрить конкретный вызов без `*`, напишите правило точного соответствия для всей строки команды, например `Bash(find build -type f -delete)`.
281
282Когда в команде есть `*`, как в `find . -name '*.tmp' -delete`, Claude Code читает правило как [шаблон с подстановочными знаками](#wildcard-patterns), а не как точное соответствие, поэтому команда по-прежнему запрашивает подтверждение. Одобряйте её каждый раз при запросе или используйте [хук PreToolUse](/docs/ru/hooks#pretooluse-decision-control), который возвращает для неё `"allow"`.
272 283
273<h4 id="bash-rule-limits">284<h4 id="bash-rule-limits">
274 Что правило Bash не соответствует285 Чему не соответствует правило Bash
275</h4>286</h4>
276 287
277Правило Bash соответствует тексту команды, который пишет Claude, после того как Claude Code разбивает [составные команды](#compound-commands) и удаляет [обёртки](#process-wrappers). Оно не соответствует одной и той же программе, вызванной в другой форме, поэтому правило отказа или запроса охватывает вызов, который Claude обычно производит, и не является границей безопасности вокруг программы. Эти правила в `deny` или `ask` останавливают первую форму, а не другие:288Правило Bash сопоставляется с текстом команды, который пишет Claude, после того как Claude Code разделит [составные команды](#compound-commands) и отбросит [обёртки](#process-wrappers). Оно не соответствует той же программе, вызванной в другой форме, поэтому правило deny или ask покрывает вызов, который обычно создаёт Claude, и не является границей безопасности вокруг программы. Эти правила в `deny` или `ask` останавливают первую форму, но не остальные:
278 289
279| Правило | Останавливает | Не останавливает |290| Правило | Останавливает | Не останавливает |
280| :- | :- | :- |291| :- | :- | :- |
282| `Bash(rm *)` | `rm -rf build/` | `/bin/rm -rf build/`, `bash -c 'rm -rf build/'` |293| `Bash(rm *)` | `rm -rf build/` | `/bin/rm -rf build/`, `bash -c 'rm -rf build/'` |
283| `Bash(git push *)` | `git push origin main` | `git -C . push origin main`, `git -c push.default=current push origin main`, `git 'push' origin main` |294| `Bash(git push *)` | `git push origin main` | `git -C . push origin main`, `git -c push.default=current push origin main`, `git 'push' origin main` |
284 295
285Ваши другие правила и режим разрешений определяют команды в последнем столбце.296Судьбу команд из последнего столбца решают ваши остальные правила и режим разрешений.
286 297
287Для принудительного применения файловой системы и сети, которое не зависит от текста команды, используйте [изоляцию в песочнице](/docs/ru/sandboxing). Чтобы проверить полный текст команды с вашей собственной логикой перед её выполнением, используйте hook [PreToolUse](#extend-permissions-with-hooks).298Для ограничений файловой системы и сети, не зависящих от текста команды, используйте [изоляцию в песочнице](/docs/ru/sandboxing). Чтобы проверять полный текст команды собственной логикой перед её выполнением, используйте [хук PreToolUse](#extend-permissions-with-hooks).
288 299
289<h4 id="read-only-commands">300<h4 id="read-only-commands">
290 Команды только для чтения301 Команды только для чтения
291</h4>302</h4>
292 303
293Claude Code распознаёт встроенный набор команд Bash как команды только для чтения и выполняет их без запроса разрешения в каждом режиме, за исключением того, как [`permissions.blockReadsOutsideWorkingDirectories`](/docs/ru/settings-reference#permissions-blockreadsoutsideworkingdirectories) изменяет поведение для путей вне ваших рабочих каталогов. Набор включает `ls`, `cat`, `echo`, `pwd`, `head`, `tail`, `grep`, `find`, `wc`, `which`, `diff`, `stat`, `du`, `cd` и формы `git` только для чтения. Набор не настраивается; чтобы требовать запрос для одной из этих команд, добавьте правило `ask` или `deny` для неё. В автоматическом режиме эти команды также могут ждать проверки классификатора; см. [как классификатор оценивает действия](/docs/ru/permission-modes#how-the-classifier-evaluates-actions).304Claude Code распознаёт встроенный набор команд Bash как команды только для чтения и выполняет их без запроса разрешения в любом режиме, за исключением изменений, которые вносит [`permissions.blockReadsOutsideWorkingDirectories`](/docs/ru/settings-reference#permissions-blockreadsoutsideworkingdirectories) для путей за пределами ваших рабочих каталогов. Набор включает `ls`, `cat`, `echo`, `pwd`, `head`, `tail`, `grep`, `find`, `wc`, `which`, `diff`, `stat`, `du`, `cd` и формы `git` только для чтения. Набор не настраивается; чтобы требовать запрос подтверждения для одной из этих команд, добавьте для неё правило `ask` или `deny`. В авторежиме эти команды также могут ожидать проверки классификатором; см. [как классификатор оценивает действия](/docs/ru/permission-modes#how-the-classifier-evaluates-actions).
294 305
295Перенаправление вроде `ls > out.txt` добавляет проверку на цель. См. [Перенаправления](#redirections).306Перенаправление вида `ls > out.txt` добавляет проверку цели. См. [Перенаправления](#redirections).
296 307
297Неэкранированные шаблоны глобализации разрешены для команд, у которых каждый флаг только для чтения, поэтому `ls *.ts` и `wc -l src/*.py` выполняются без запроса.308Шаблоны glob без кавычек допускаются для команд, у которых все флаги предназначены только для чтения, поэтому `ls *.ts` и `wc -l src/*.py` выполняются без запроса подтверждения.
298 309
299В ручном режиме команды из этого набора по-прежнему запрашивают в этих случаях:310В ручном режиме команды из этого набора всё равно запрашивают подтверждение в следующих случаях:
300 311
301* **Неэкранированные глобы для команд с флагами, способными к записи**: команды с флагами, способными к записи или выполнению, такие как `find`, `sort`, `sed` и `git`, запрашивают при наличии неэкранированного глоба, потому что глоб может расширяться до флага вроде `-delete`.312* **Glob без кавычек для команд с флагами, способными записывать**: команды с флагами, способными записывать или выполнять, такие как `find`, `sort`, `sed` и `git`, запрашивают подтверждение при наличии glob без кавычек, поскольку glob может раскрыться во флаг вроде `-delete`.
302* **`docker` указывающий на другой демон**: формы `docker` только для чтения запрашивают, когда команда несёт флаг, который выбирает другой демон, такой как `-H`, `--context` или `--url` и `--connection` в Podman.313* **`docker`, направленный на другой демон**: формы `docker` только для чтения запрашивают подтверждение, когда команда содержит флаг, выбирающий другой демон, например `-H`, `--context` или `--url` и `--connection` из Podman.
303* **`file` с флагами открытия пути**: `file` запрашивает, когда он передаёт `-m`/`--magic-file` или `-f`/`--files-from`, потому что эти флаги заставляют `file` открывать пути, названные в значении флага.314* **`file` с флагами, открывающими пути**: `file` запрашивает подтверждение, когда передаёт `-m`/`--magic-file` или `-f`/`--files-from`, поскольку эти флаги заставляют `file` открывать пути, указанные в значении флага.
304* **Сетевые пути в Windows**: команда, аргументы которой включают сетевой путь (UNC), такой как `\\server\share\file`, запрашивает, потому что доступ к сетевому пути может отправить ваши учётные данные Windows на хост, который он называет. Та же проверка применяется к командам инструмента [PowerShell](/docs/ru/tools-reference#powershell-tool).315* **`ps`, который может вывести переменные окружения**: `ps` запрашивает подтверждение, когда один из его аргументов может действовать как опция `e`, как в `ps auxe` или `ps aux -e`, поскольку эта опция выводит переменные окружения процессов. `ps aux` и `ps -ef` выполняются без запроса подтверждения. Проверка форм с дефисом, таких как `ps aux -e`, требует Claude Code v2.1.290 или новее.
305* **Записи в специальные переменные оболочки**: команда, которая устанавливает, отменяет или циклирует определённые специальные переменные оболочки, такие как `PATH` или `IFS`, запрашивает даже когда остальная часть команды только для чтения.316* **Сетевые пути в Windows**: команда, аргументы которой включают сетевой путь (UNC), например `\\server\share\file`, запрашивает подтверждение, поскольку обращение к сетевому пути может отправить ваши учётные данные Windows указанному в нём хосту. Та же проверка применяется к командам [инструмента PowerShell](/docs/ru/tools-reference#powershell-tool).
306* **Команды, которые анализ не может разобрать**: когда Claude Code не может полностью разобрать команду, он запрашивает одобрение вместо того, чтобы рассматривать команду как только для чтения. Команды длиннее 10 000 символов всегда запрашивают, потому что они превышают то, что анализирует анализ.317* **Запись в специальные переменные оболочки**: команда, которая задаёт, сбрасывает или перебирает определённые специальные переменные оболочки, такие как `PATH` или `IFS`, запрашивает подтверждение, даже если остальная часть команды только читает.
318* **Команды, которые анализ не может разобрать**: когда Claude Code не может полностью разобрать команду, он запрашивает подтверждение вместо того, чтобы считать команду командой только для чтения. Команды длиннее 10 000 символов всегда запрашивают подтверждение, поскольку превышают объём, который разбирает анализ.
307 319
308`cd` в путь внутри вашего рабочего каталога или [дополнительного каталога](#working-directories) также только для чтения, и составная команда вроде `cd packages/api && ls` выполняется без запроса, когда каждая часть квалифицируется самостоятельно. Эти комбинации запрашивают даже когда каждая часть только для чтения:320`cd` в путь внутри вашего рабочего каталога или [дополнительного каталога](#working-directories) также считается операцией только для чтения, и составная команда вида `cd packages/api && ls` выполняется без запроса подтверждения, если каждая её часть удовлетворяет условиям сама по себе. Следующие сочетания запрашивают подтверждение, даже если каждая часть только читает:
309 321
310* **`cd` с `git`**: запрашивает, когда `cd` переходит в другой каталог, поскольку запуск `git` в новом каталоге может выполнить hooks этого каталога. `cd`, чья цель разрешается в текущий рабочий каталог, является холостым ходом и не вызывает запрос.322* **`cd` с `git`**: запрашивает подтверждение, когда `cd` переходит в другой каталог, поскольку запуск `git` в новом каталоге может выполнить хуки этого каталога. `cd`, цель которого разрешается в текущий рабочий каталог, ничего не делает и не вызывает запроса.
311* **`cd` с перенаправлением**: запрашивает, когда Claude Code не может определить, в какой каталог разрешается цель перенаправления после выполнения `cd`. Команда, единственной целью перенаправления которой является `/dev/null`, такая как `cd app; grep -r pattern . 2>/dev/null`, не запрашивает, потому что `/dev/null` не зависит от рабочего каталога.323* **`cd` с перенаправлением**: запрашивает подтверждение, когда Claude Code не может определить, относительно какого каталога разрешается цель перенаправления после выполнения `cd`. Команда, единственной целью перенаправления которой является `/dev/null`, например `cd app; grep -r pattern . 2>/dev/null`, не запрашивает подтверждение, поскольку `/dev/null` не зависит от рабочего каталога.
312 324
313<Warning>325<Warning>
314 Шаблоны разрешений Bash, которые пытаются ограничить аргументы команды, хрупки. Например, `Bash(curl http://github.com/ *)` предназначен для ограничения curl на URL-адреса GitHub, но не будет соответствовать вариациям вроде:326 Шаблоны разрешений Bash, пытающиеся ограничить аргументы команды, ненадёжны. Например, `Bash(curl http://github.com/ *)` призван ограничить curl адресами GitHub, но не будет соответствовать таким вариантам:
315 327
316 * Опции перед URL: `curl -X GET http://github.com/...`328 * Опции перед URL: `curl -X GET http://github.com/...`
317 * Другой протокол: `curl https://github.com/...`329 * Другой протокол: `curl https://github.com/...`
318 * Перенаправления: `curl -L http://short.example.com/xyz`, которое перенаправляет на GitHub330 * Перенаправления: `curl -L http://short.example.com/xyz`, который перенаправляет на GitHub
319 * Переменные: `URL=http://github.com && curl $URL`331 * Переменные: `URL=http://github.com && curl $URL`
320 332
321 Для более надёжной фильтрации URL рассмотрите:333 Для более надёжной фильтрации URL рассмотрите следующие варианты:
322 334
323 * **Ограничить сетевые инструменты Bash**: используйте правила отказа для остановки `curl`, `wget` и подобных команд, затем используйте инструмент WebFetch с разрешением `WebFetch(domain:github.com)` для разрешённых доменов. Правило отказа не соответствует одной и той же программе по пути или внутри `sh -c`, поэтому объедините его с [списком разрешений сети песочницы](/docs/ru/sandboxing#network-isolation), когда ограничение должно действовать; см. [что правило Bash не соответствует](#bash-rule-limits)335 * **Ограничьте сетевые инструменты Bash**: используйте правила deny, чтобы остановить `curl`, `wget` и подобные команды, а затем используйте инструмент WebFetch с разрешением `WebFetch(domain:github.com)` для разрешённых доменов. Правило deny не соответствует той же программе, вызванной по пути или внутри `sh -c`, поэтому сочетайте его со [списком разрешённых сетевых доменов песочницы](/docs/ru/sandboxing#network-isolation), когда ограничение должно соблюдаться строго; см. [чему не соответствует правило Bash](#bash-rule-limits)
324 * **Используйте hooks PreToolUse**: реализуйте hook, который проверяет URL-адреса в командах Bash и блокирует недопустимые домены336 * **Используйте хуки PreToolUse**: реализуйте хук, который проверяет URL в командах Bash и блокирует запрещённые домены
325 * **Добавьте руководство CLAUDE.md**: опишите ваши разрешённые шаблоны curl в `CLAUDE.md`. Это формирует то, что Claude пытается, но не обеспечивает границу, поэтому объедините с одним из вариантов выше337 * **Добавьте указания в CLAUDE.md**: опишите допустимые шаблоны curl в `CLAUDE.md`. Это влияет на то, что пытается делать Claude, но не обеспечивает границу, поэтому сочетайте это с одним из вариантов выше
326 338
327 Обратите внимание, что использование только WebFetch не предотвращает сетевой доступ. Если Bash разрешён, Claude всё ещё может использовать `curl`, `wget` или другие инструменты для доступа к любому URL.339 Обратите внимание, что использование одного лишь WebFetch не предотвращает доступ к сети. Если Bash разрешён, Claude по-прежнему может использовать `curl`, `wget` или другие инструменты для обращения к любому URL.
328</Warning>340</Warning>
329 341
330<h4 id="redirections">342<h4 id="redirections">
331 Перенаправления343 Перенаправления
332</h4>344</h4>
333 345
334Когда команда перенаправляет вывод или ввод, Claude Code проверяет цель перенаправления против ваших правил файлов, как если бы Claude напрямую написал или прочитал этот файл:346Когда команда перенаправляет вывод или ввод, Claude Code проверяет цель перенаправления по вашим правилам для файлов так, как если бы Claude записывал или читал этот файл напрямую:
335 347
336* **Перенаправления вывода**: для `> file`, `>> file` или `2> file`, проверка охватывает ваши правила разрешения и отказа `Edit`, [защищённые пути](/docs/ru/permission-modes#protected-paths) и [рабочие каталоги](#working-directories). Правило вроде `Bash(git commit *)` разрешает команду, а не цель. Цель, которая начинается с `~` или содержит символ глобализации, требует вашего одобрения.348* **Перенаправления вывода**: для `> file`, `>> file` или `2> file` проверка охватывает ваши правила allow и deny для `Edit`, [защищённые пути](/docs/ru/permission-modes#protected-paths) и [рабочие каталоги](#working-directories). Правило вида `Bash(git commit *)` разрешает команду, а не цель. Цель, которая начинается с `~` или содержит символ glob, требует вашего подтверждения.
337* **Перенаправления ввода**: для `< file`, проверка охватывает ваши правила разрешения и отказа `Read` и рабочие каталоги. Цель вне рабочих каталогов требует вашего одобрения, если правило разрешения её не охватывает. Цель, которая содержит шаблон глобализации, или относительный путь, который следует за `cd` в одной и той же команде, требует вашего одобрения даже когда правило разрешения её охватывает. Claude Code проверяет цели ввода в v2.1.257 и позже.349* **Перенаправления ввода**: для `< file` проверка охватывает ваши правила allow и deny для `Read` и рабочие каталоги. Цель за пределами рабочих каталогов требует вашего подтверждения, если её не покрывает правило allow. Цель, содержащая шаблон glob, или относительный путь, следующий за `cd` в той же команде, требует вашего подтверждения, даже если её покрывает правило allow. Claude Code проверяет цели ввода в v2.1.257 и новее.
338 350
339Цели без файла позади них не проверяются: `/dev/null`, формы дескриптора файла, такие как `2>&1` и `<&3`, и here-docs и here-strings.351Цели, за которыми не стоит файл, не проверяются: `/dev/null`, формы с файловыми дескрипторами, такие как `2>&1` и `<&3`, а также here-doc и here-string.
340 352
341Claude Code также проверяет файлы, которые пишет команда `tee`, включая в конвейер вроде `make | tee build.log`. Проверка охватывает ваши правила разрешения и отказа `Edit`, [защищённые пути](/docs/ru/permission-modes#protected-paths) и [рабочие каталоги](#working-directories). Правило разрешения вроде `Bash(tee *)` не охватывает пункт назначения вне рабочих каталогов. Claude Code проверяет цели `tee` в v2.1.269 и позже.353Claude Code также проверяет файлы, которые записывает команда `tee`, в том числе в конвейере вида `make | tee build.log`. Проверка охватывает ваши правила allow и deny для `Edit`, [защищённые пути](/docs/ru/permission-modes#protected-paths) и [рабочие каталоги](#working-directories). Правило allow вида `Bash(tee *)` не покрывает место назначения за пределами рабочих каталогов. Claude Code проверяет цели `tee` в v2.1.269 и новее.
342 354
343<h3 id="powershell">355<h3 id="powershell">
344 PowerShell356 PowerShell
345</h3>357</h3>
346 358
347Правила разрешений PowerShell используют ту же форму, что и правила Bash. Подстановки с `*` соответствуют в любой позиции, суффикс `:*` эквивалентен конечному ` *`, и голый `PowerShell` или `PowerShell(*)` соответствует каждой команде. Эта конфигурация разрешает команды `Get-ChildItem` и `git commit` при блокировании `Remove-Item`:359Правила разрешений PowerShell имеют ту же форму, что и правила Bash. Подстановочные знаки `*` сопоставляются в любой позиции, суффикс `:*` эквивалентен завершающему ` *`, а простой `PowerShell` или `PowerShell(*)` соответствует любой команде. Эта конфигурация разрешает команды `Get-ChildItem` и `git commit`, блокируя `Remove-Item`:
348 360
349```json theme={null}361```json theme={null}
350{362{
360}372}
361```373```
362 374
363Общие псевдонимы канонизируются перед сопоставлением. Правило, написанное для имени cmdlet, также соответствует его псевдонимам, поэтому `PowerShell(Get-ChildItem *)` соответствует `gci`, `ls` и `dir` также. Сопоставление не чувствительно к регистру.375Распространённые псевдонимы приводятся к каноническому виду перед сопоставлением. Правило, написанное для имени командлета, также соответствует его псевдонимам, поэтому `PowerShell(Get-ChildItem *)` соответствует также `gci`, `ls` и `dir`. Сопоставление не зависит от регистра.
364 376
365Claude Code разбирает AST PowerShell и проверяет каждую команду в составной команде независимо. Операторы конвейера `|`, разделители операторов `;` и на PowerShell 7+ операторы цепи `&&` и `||` разбивают составную команду на подкоманды. Правило должно соответствовать каждой подкоманде, чтобы составная команда была разрешена.377Claude Code разбирает AST PowerShell и проверяет каждую команду в составной команде независимо. Операторы конвейера `|`, разделители инструкций `;`, а в PowerShell 7+ операторы цепочки `&&` и `||` разделяют составную команду на подкоманды. Чтобы составная команда была разрешена, правило должно соответствовать каждой подкоманде.
366 378
367<h3 id="read-and-edit">379<h3 id="read-and-edit">
368 Read и Edit380 Read и Edit
369</h3>381</h3>
370 382
371Чтобы заблокировать инструменты файлов Claude от чтения файла или каталога, добавьте правило отказа `Read` для его пути, такое как `Read(./.env)` или `Read(./secrets/**)`; [Исключить конфиденциальные файлы](/docs/ru/settings-reference#exclude-sensitive-files) содержит готовый к вставке пример. Если в вашем проекте есть файл `.claudeignore`, он ни на что не влияет, поэтому перенесите его записи в правила отказа `Read`.383Чтобы запретить файловым инструментам Claude читать файл или каталог, добавьте правило deny для `Read` с его путём, например `Read(./.env)` или `Read(./secrets/**)`; в разделе [Исключение конфиденциальных файлов](/docs/ru/settings-reference#exclude-sensitive-files) есть готовый для вставки пример. Если в вашем проекте есть файл `.claudeignore`, он ни на что не влияет, поэтому перенесите его записи в правила deny для `Read`.
372 384
373Правила `Edit` применяются ко всем встроенным инструментам, которые редактируют файлы. Claude прилагает наилучшие усилия для применения правил `Read` ко всем встроенным инструментам, которые читают файлы, такие как Grep и Glob, к упоминаниям `@file` в ваших подсказках и к выделению и контексту открытого файла, которые подключённый [IDE](/docs/ru/vs-code#the-built-in-ide-mcp-server) делит с Claude.385Правила `Edit` применяются ко всем встроенным инструментам, которые редактируют файлы. Claude по мере возможности применяет правила `Read` ко всем встроенным инструментам, которые читают файлы, например Grep и Glob, к упоминаниям `@file` в ваших промптах, а также к выделению и контексту открытого файла, которыми подключённая [IDE](/docs/ru/vs-code#the-built-in-ide-mcp-server) делится с Claude.
374 386
375Правило отказа `Read` также блокирует инструменты [Edit и Write](/docs/ru/errors#file-is-covered-by-a-read-deny-rule) на том же пути, включая создание нового файла там. NotebookEdit не охватывается, поэтому добавьте правило отказа `Edit` для путей, которые ни один инструмент не может изменять. Проверка требует Claude Code v2.1.208 или позже при редактировании, и v2.1.228 или позже при записи.387Правило deny для `Read` также блокирует [инструменты Edit и Write](/docs/ru/errors#file-is-covered-by-a-read-deny-rule) для того же пути, включая создание там нового файла. NotebookEdit не охватывается, поэтому добавьте правило deny для `Edit` для путей, которые не должен изменять ни один инструмент. Проверка требует Claude Code v2.1.208 или новее для правок, и v2.1.228 или новее для записи.
376 388
377Claude Code проверяет разрешения файлов только против правил `Edit(path)` и `Read(path)`. Если вы напишете правило пути для `Write`, `NotebookEdit`, `Glob` или устаревшего инструмента `MultiEdit`, Claude Code принимает правило, но никогда не консультируется с ним, и [предупреждает при запуске](/docs/ru/errors#is-not-matched-by-file-permission-checks), за исключением правила `Glob`, переданного в `--allowedTools`. Используйте `Edit(docs/**)` вместо `Write(docs/**)`, `NotebookEdit(docs/**)` или `MultiEdit(docs/**)`, и `Read(docs/**)` вместо `Glob(docs/**)`. Claude Code не предупреждает о правиле имени инструмента без пути, такое как правило отказа для `Write`; оно соответствует этому правилу на уровне инструмента везде. Требует Claude Code v2.1.210 или позже.389Claude Code проверяет файловые разрешения только по правилам `Edit(path)` и `Read(path)`. Если вместо этого вы напишете правило с путём для `Write`, `NotebookEdit`, `Glob` или устаревшего инструмента `MultiEdit`, Claude Code примет правило, но никогда не будет к нему обращаться и [выдаст предупреждение при запуске](/docs/ru/errors#is-not-matched-by-file-permission-checks), за исключением правила `Glob`, переданного в `--allowedTools`. Используйте `Edit(docs/**)` вместо `Write(docs/**)`, `NotebookEdit(docs/**)` или `MultiEdit(docs/**)`, и `Read(docs/**)` вместо `Glob(docs/**)`. Claude Code не предупреждает о правиле с именем инструмента без пути, например о правиле deny для `Write`; такое правило сопоставляется на уровне инструмента везде. Требуется Claude Code v2.1.210 или новее.
378 390
379<Warning>391<Warning>
380 Правила отказа Read и Edit применяются к встроенным инструментам файлов Claude, к командам файлов, которые Claude Code распознаёт в Bash, таким как `cat`, `head`, `tail`, `sed` и `tee`, и к целям перенаправления Bash [redirections](#redirections), таким как `> file` и `< file`. Они не применяются к команде, которая читает файлы без их именования, такой как `grep -r pattern .`, запущенная из каталога, который содержит файл, или к произвольным подпроцессам, которые косвенно читают или пишут файлы, вроде скрипта Python или Node, который открывает файлы сам. Для принудительного применения на уровне ОС, которое блокирует все процессы от доступа к пути, [включите песочницу](/docs/ru/sandboxing).392 Правила deny для Read и Edit применяются к встроенным файловым инструментам Claude, к файловым командам, которые Claude Code распознаёт в Bash, таким как `cat`, `head`, `tail`, `sed` и `tee`, и к целям [перенаправлений](#redirections) Bash, таким как `> file` и `< file`. Они не применяются к команде, которая читает файлы, не называя их, например `grep -r pattern .`, запущенной из каталога, содержащего файл, или к произвольным подпроцессам, которые читают или записывают файлы косвенно, например к скрипту Python или Node, который сам открывает файлы. Для ограничений на уровне ОС, которые блокируют доступ к пути для всех процессов, [включите песочницу](/docs/ru/sandboxing).
381</Warning>393</Warning>
382 394
383Правила Read и Edit оба используют синтаксис шаблона [gitignore](https://git-scm.com/docs/gitignore) с четырьмя различными типами шаблонов; для шаблонов каталогов с одним сегментом глубина сопоставления также зависит от типа правила, описанного позже в этом разделе:395Правила Read и Edit используют синтаксис шаблонов [gitignore](https://git-scm.com/docs/gitignore) с четырьмя различными типами шаблонов; для шаблонов каталогов из одного сегмента глубина сопоставления зависит также от типа правила, как описано далее в этом разделе:
384 396
385| Шаблон | Значение | Пример | Соответствует |397| Шаблон | Значение | Пример | Соответствует |
386| - | - | - | - |398| - | - | - | - |
387| `//path` | Абсолютный путь от корня файловой системы | `Read(//Users/alice/secrets/**)` | `/Users/alice/secrets/**` |399| `//path` | Абсолютный путь от корня файловой системы | `Read(//Users/alice/secrets/**)` | `/Users/alice/secrets/**` |
388| `~/path` | Путь из домашнего каталога | `Read(~/Documents/*.pdf)` | `/Users/alice/Documents/*.pdf` |400| `~/path` | Путь от домашнего каталога | `Read(~/Documents/*.pdf)` | `/Users/alice/Documents/*.pdf` |
389| `/path` | Путь относительно источника параметров | `Edit(/src/**/*.ts)` | `<primary working directory>/src/**/*.ts` в параметрах проекта |401| `/path` | Путь относительно источника настроек | `Edit(/src/**/*.ts)` | `<primary working directory>/src/**/*.ts` в настройках проекта |
390| `path` или `./path` | Путь относительно текущего каталога | `Read(*.env)` | `<cwd>/*.env` |402| `path` или `./path` | Путь относительно текущего каталога | `Read(*.env)` | `<cwd>/*.env` |
391 403
392<Warning>404<Warning>
393 Шаблон вроде `/Users/alice/file` не является абсолютным путём. Одиночный начальный слэш якорирует в источнике параметров, а не в корне файловой системы. Используйте `//Users/alice/file` для абсолютных путей.405 Шаблон вида `/Users/alice/file` не является абсолютным путём. Одиночная начальная косая черта привязывает путь к источнику настроек, а не к корню файловой системы. Для абсолютных путей используйте `//Users/alice/file`.
394</Warning>406</Warning>
395 407
396Шаблон `/path` якорирует в каталоге, связанном с источником параметров, который его определяет, поэтому одно и то же правило соответствует разным местоположениям в зависимости от того, где вы его разместите:408Шаблон `/path` привязывается к каталогу, связанному с источником настроек, в котором он определён, поэтому одно и то же правило соответствует разным расположениям в зависимости от того, где вы его разместите:
397 409
398| Правило определено в | `/path` разрешается в |410| Где определено правило | Во что разрешается `/path` |
399| :- | :- |411| :- | :- |
400| Параметры проекта в `.claude/settings.json` | `<primary working directory>/path` |412| Настройки проекта в `.claude/settings.json` | `<primary working directory>/path` |
401| Локальные параметры в `.claude/settings.local.json` | `<primary working directory>/path` |413| Локальные настройки в `.claude/settings.local.json` | `<primary working directory>/path` |
402| Параметры пользователя в `~/.claude/settings.json` | `~/.claude/path` |414| Пользовательские настройки в `~/.claude/settings.json` | `~/.claude/path` |
403| Файл, переданный с `--settings <file>` | `<directory of file>/path` |415| Файл, переданный через `--settings <file>` | `<directory of file>/path` |
404| Флаги CLI или правила сеанса | `<primary working directory>/path` |416| Флаги CLI или правила сессии | `<primary working directory>/path` |
405 417
406Правило, которое вы добавляете через `/permissions`, следует строке для файла параметров, в который вы его сохраняете.418Правило, добавленное через `/permissions`, следует строке для файла настроек, в который вы его сохраняете.
407 419
408Правила локальных параметров якорируют в [основном рабочем каталоге](#working-directories) сеанса, а не в корне репозитория, где Claude Code [сохраняет файл](#permission-system) в v2.1.211 и позже. В сеансе, запущенном в корне репозитория, два каталога одинаковы; в сеансе [worktree](/docs/ru/worktrees), общее правило вроде `Edit(/src/**)` соответствует собственному каталогу `src/` этого worktree.420В v2.1.211 и новее правила локальных настроек привязываются к [основному рабочему каталогу](#working-directories) сессии, а не к корню репозитория, где Claude Code [хранит файл](#permission-system). В сессии, запущенной из корня репозитория, эти каталоги совпадают; в сессии [worktree](/docs/ru/worktrees) общее правило вида `Edit(/src/**)` соответствует собственному каталогу `src/` этого worktree.
409 421
410Правило отказа вроде `Read(/secrets/**)` в параметрах пользователя блокирует `~/.claude/secrets/**`, а не каталог `secrets` в вашем проекте. Чтобы написать правило в параметрах пользователя, которое применяется внутри каждого проекта, используйте вместо этого абсолютный путь `//` или путь относительно дома `~/`.422Правило deny вида `Read(/secrets/**)` в пользовательских настройках блокирует `~/.claude/secrets/**`, а не каталог `secrets` в вашем проекте. Чтобы написать в пользовательских настройках правило, действующее внутри каждого проекта, используйте абсолютный путь с `//` или путь относительно домашнего каталога с `~/`.
411 423
412В Windows пути нормализуются в форму POSIX перед сопоставлением. `C:\Users\alice` становится `/c/Users/alice`, поэтому используйте `//c/**/.env` для соответствия файлам `.env` в любом месте на этом диске. Чтобы соответствовать на всех дисках, используйте `//**/.env`.424В Windows пути перед сопоставлением нормализуются к форме POSIX. `C:\Users\alice` превращается в `/c/Users/alice`, поэтому используйте `//c/**/.env`, чтобы сопоставить файлы `.env` в любом месте этого диска. Чтобы сопоставлять на всех дисках, используйте `//**/.env`.
413 425
414Примеры:426Примеры:
415 427
416* `Edit(/docs/**)`: редактирует в `<primary working directory>/docs/`, а не в `/docs/` или `<primary working directory>/.claude/docs/`428* `Edit(/docs/**)`: правки в `<primary working directory>/docs/`, но не в `/docs/` и не в `<primary working directory>/.claude/docs/`
417* `Read(~/.zshrc)`: читает `.zshrc` вашего домашнего каталога429* `Read(~/.zshrc)`: чтение `.zshrc` в вашем домашнем каталоге
418* `Edit(//tmp/scratch.txt)`: редактирует абсолютный путь `/tmp/scratch.txt`430* `Edit(//tmp/scratch.txt)`: правки по абсолютному пути `/tmp/scratch.txt`
419* `Read(src/**)`: как правило разрешения, читает из `<current-directory>/src/` только; как правило отказа или запроса, соответствует каталогу `src` на любой глубине под текущим каталогом431* `Read(src/**)`: как правило allow — чтение только из `<current-directory>/src/`; как правило deny или ask — соответствует каталогу `src` на любой глубине внутри текущего каталога
420 432
421Правило соответствует только файлам под его якорем; в этих границах глубина сопоставления зависит от формы шаблона и, для шаблонов каталогов с одним сегментом, типа правила, описанного ниже. Голые имена файлов следуют семантике gitignore и соответствуют на любой глубине, поэтому `Read(.env)` и `Read(**/.env)` эквивалентны:433Правило соответствует только файлам внутри своей точки привязки; в этих пределах глубина сопоставления зависит от формы шаблона, а для шаблонов каталогов из одного сегмента — от типа правила, как описано ниже. Простые имена файлов следуют семантике gitignore и сопоставляются на любой глубине, поэтому `Read(.env)` и `Read(**/.env)` эквивалентны:
422 434
423| Правило отказа | Блокирует | Не блокирует |435| Правило deny | Блокирует | Не блокирует |
424| - | - | - |436| - | - | - |
425| `Read(.env)` или `Read(**/.env)` | любой `.env` в текущем каталоге или под ним | `.env` в родительском каталоге или другом проекте |437| `Read(.env)` или `Read(**/.env)` | любой `.env` в текущем каталоге или ниже | `.env` в родительском каталоге или другом проекте |
426| `Read(//**/.env)` | любой `.env` в любом месте файловой системы | ничего; правило якорировано в корне файловой системы |438| `Read(//**/.env)` | любой `.env` в любом месте файловой системы | ничего; правило привязано к корню файловой системы |
427 439
428Относительный шаблон с одним сегментом каталога, такой как `src/**`, соответствует на разных глубинах в зависимости от типа правила:440Относительный шаблон с одним сегментом каталога, например `src/**`, сопоставляется на разной глубине в зависимости от типа правила:
429 441
430* **Правила разрешения**: `Edit(src/**)` соответствует только `<cwd>/src` и файлам под ним. Чтобы разрешить имя каталога на любой глубине, напишите `Edit(**/src/**)`.442* **Правила allow**: `Edit(src/**)` соответствует только `<cwd>/src` и файлам внутри него. Чтобы разрешить имя каталога на любой глубине, напишите `Edit(**/src/**)`.
431* **Правила отказа и запроса**: `Read(secrets/**)` соответствует каталогу с именем `secrets` на любой глубине под текущим каталогом, поэтому правило также применяется к вложенным копиям.443* **Правила deny и ask**: `Read(secrets/**)` соответствует каталогу с именем `secrets` на любой глубине внутри текущего каталога, поэтому правило применяется и к вложенным копиям.
432 444
433Каждая другая форма шаблона соответствует на одной и той же глубине в каждом типе правила: `Edit(/src/**)` и `Edit(src/components/**)` соответствуют только в их якорированном местоположении, в то время как `Edit(**/src/**)` соответствует на любой глубине.445Все остальные формы шаблонов сопоставляются на одной и той же глубине при любом типе правила: `Edit(/src/**)` и `Edit(src/components/**)` соответствуют только своему привязанному расположению, а `Edit(**/src/**)` — любой глубине.
434 446
435Следующий пример показывает каждую форму шаблона против проекта с каталогом `src/` верхнего уровня и вложенной копией под `vendor/`:447В следующем примере показана каждая форма шаблона применительно к проекту с каталогом `src/` верхнего уровня и вложенной копией внутри `vendor/`:
436 448
437```text theme={null}449```text theme={null}
438<current-directory>/450<current-directory>/
446 458
447| Правило | Соответствует `src/app.ts` | Соответствует `vendor/pkg/src/lib.js` |459| Правило | Соответствует `src/app.ts` | Соответствует `vendor/pkg/src/lib.js` |
448| :- | :- | :- |460| :- | :- | :- |
449| `Edit(src/**)` как правило разрешения | Да | Нет |461| `Edit(src/**)` как правило allow | Да | Нет |
450| `Edit(src/**)` как правило отказа или запроса | Да | Да |462| `Edit(src/**)` как правило deny или ask | Да | Да |
451| `Edit(/src/**)` в любом типе правила | Да | Нет |463| `Edit(/src/**)` при любом типе правила | Да | Нет |
452| `Edit(**/src/**)` в любом типе правила | Да | Да |464| `Edit(**/src/**)` при любом типе правила | Да | Да |
453 465
454<Note>466<Note>
455 В шаблонах gitignore `*` соответствует в одном сегменте пути и может появляться в любой позиции в шаблоне, в то время как `**` соответствует через каталоги.467 В шаблонах gitignore `*` сопоставляется в пределах одного сегмента пути и может стоять в любой позиции шаблона, а `**` сопоставляется через несколько каталогов.
456</Note>468</Note>
457 469
458Когда вы одобряете путь файла с помощью «Да, и больше не спрашивать», Claude Code экранирует символы шаблона gitignore в этом пути, такие как `[`, `]` и `*`, поэтому сгенерированное правило соответствует только буквальному пути, который вы одобрили. Правила, которые вы пишете сами, не экранируются. До v2.1.202 Claude Code сохранял путь неэкранированным, поэтому сгенерированное правило для каталога с именем `[2024-06] Reports` могло не соответствовать собственному пути или соответствовать непредусмотренным соседним каталогам.470Когда вы одобряете путь к файлу с помощью «Yes, and don't ask again», Claude Code экранирует в этом пути символы шаблонов gitignore, такие как `[`, `]` и `*`, поэтому созданное правило соответствует только буквально одобренному вами пути. Правила, которые вы пишете сами, не экранируются. До v2.1.202 Claude Code сохранял путь без экранирования, поэтому созданное правило для каталога с именем `[2024-06] Reports` могло не соответствовать собственному пути или соответствовать непредусмотренным соседним каталогам.
459 471
460Вам не нужно экранировать скобки в пути, поэтому `Edit(./Finance (2024)/**)` соответствует папке `Finance (2024)` как написано.472Экранировать круглые скобки в пути не нужно, поэтому `Edit(./Finance (2024)/**)` соответствует папке `Finance (2024)` в точном написании.
461 473
462Правило отказа или запроса, чей путь не пригоден для использования в качестве шаблона gitignore, по-прежнему охраняет этот точный путь. Правило разрешения с непригодным шаблоном ничего не одобряет.474Правило deny или ask, путь которого нельзя использовать как шаблон gitignore, всё равно защищает именно этот путь. Правило allow с непригодным шаблоном ничего не одобряет.
463 475
464Шаблон отказа или запроса, который начинается с `!`, является отрицанием gitignore. Он вырезает пути, которые он соответствует, из правил `path` или `./path`, перечисленных перед ним. В одном списке `deny` файла параметров `Read(*.env)`, за которым следует `Read(!sample.env)`, блокирует каждый файл, имя которого заканчивается на `.env` на любой глубине, за исключением файлов с именем `sample.env`. Правило `!`, перечисленное первым, ничего не вырезает.476Шаблон deny или ask, начинающийся с `!`, является отрицанием gitignore. Он исключает соответствующие ему пути из правил `path` или `./path`, перечисленных перед ним. В списке `deny` одного файла настроек `Read(*.env)`, за которым следует `Read(!sample.env)`, блокирует каждый файл с именем, оканчивающимся на `.env`, на любой глубине, кроме файлов с именем `sample.env`. Правило `!`, указанное первым, ничего не исключает.
465 477
466Вырезание достигает только правил из одного источника. `Read(!.env)` в параметрах проекта или в `--disallowedTools` не отменяет `Read(./.env)` отказ из управляемых параметров или любого другого файла параметров.478Исключение затрагивает только правила из того же источника. `Read(!.env)` в настройках проекта или в `--disallowedTools` не отменяет правило deny `Read(./.env)` из управляемых настроек или любого другого файла настроек.
467 479
468Два ограничения сужают то, что шаблон `!` может вырезать:480Два ограничения сужают то, что может исключить шаблон `!`:
469 481
470* Claude Code читает шаблон `!` относительно текущего каталога даже когда после `!` следует `/`, `~/` или `//`, поэтому шаблон не может достичь правила, якорированного одним из этих префиксов. `Read(!~/notes/public/**)` вырезает ничего из `Read(~/notes/**)`.482* Claude Code читает шаблон `!` относительно текущего каталога, даже если за `!` следует `/`, `~/` или `//`, поэтому шаблон не может затронуть правило, привязанное с помощью одного из этих префиксов. `Read(!~/notes/public/**)` ничего не исключает из `Read(~/notes/**)`.
471* Вырезание не может переоткрыть файл внутри каталога, который правило блокирует целиком. С `Read(secrets/**)` и `Read(!secrets/public/**)`, Claude Code по-прежнему блокирует `secrets/public` вместе с остальной частью `secrets`.483* Исключение не может снова открыть файл внутри каталога, который правило блокирует целиком. При `Read(secrets/**)` и `Read(!secrets/public/**)` Claude Code по-прежнему блокирует `secrets/public` вместе с остальной частью `secrets`.
472 484
473<h4 id="symlinks">485<h4 id="symlinks">
474 Символические ссылки486 Символические ссылки
475</h4>487</h4>
476 488
477Когда путь файла, который запрашивает Claude, проходит через символическую ссылку, проверка разрешения охватывает два пути: тот, который запросил Claude, и файл, на который он разрешается. Это применяется к символическим ссылкам на macOS, Linux и Windows, а также к соединениям каталогов в Windows.489Когда путь к файлу, запрошенный Claude, проходит через символическую ссылку, проверка разрешений охватывает два пути: запрошенный Claude и файл, в который он разрешается. Это относится к символическим ссылкам в macOS, Linux и Windows, а также к точкам соединения каталогов (junctions) в Windows.
478 490
479<h5 id="how-rules-match-a-symlinked-path">491<h5 id="how-rules-match-a-symlinked-path">
480 Как правила соответствуют пути со ссылкой492 Как правила сопоставляются с путём через символическую ссылку
481</h5>493</h5>
482 494
483Правила разрешения и отказа рассматривают запрошенный путь и файл, на который он разрешается, по-разному:495Правила allow и deny по-разному обрабатывают запрошенный путь и файл, в который он разрешается:
484 496
485* **Правила разрешения**: применяются только когда оба запрошенный путь и файл, на который он разрешается, соответствуют. Чтение через символическую ссылку внутри разрешённого каталога, которая указывает вне его, не соответствует правилу.497* **Правила allow**: применяются, только если соответствуют и запрошенный путь, и файл, в который он разрешается. Чтение через символическую ссылку внутри разрешённого каталога, указывающую за его пределы, не соответствует правилу.
486* **Правила отказа**: применяются когда либо запрошенный путь, либо файл, на который он разрешается, соответствует. Символическая ссылка, которая указывает на запрещённый файл, сама запрещена. Например, с `Read(./project/**)` разрешённым и `Read(~/.ssh/**)` запрещённым, символическая ссылка в `./project/key`, указывающая на `~/.ssh/id_rsa`, блокируется: цель не проходит правило разрешения и соответствует правилу отказа.498* **Правила deny**: применяются, если соответствует либо запрошенный путь, либо файл, в который он разрешается. Символическая ссылка, указывающая на запрещённый файл, сама запрещена. Например, если `Read(./project/**)` разрешено, а `Read(~/.ssh/**)` запрещено, символическая ссылка `./project/key`, указывающая на `~/.ssh/id_rsa`, блокируется: цель не проходит правило allow и соответствует правилу deny.
487 499
488На macOS и Linux правило отказа или запроса, написанное через символический каталог с шаблоном `//`, `~/` или `/`, также применяется в реальном местоположении каталога. Например, на macOS, где `/etc` разрешается в `/private/etc`, `Read(//etc/**)` также блокирует `/private/etc/hosts`. До v2.1.268 правило отказа или запроса, написанное через символический каталог, не применялось к пути, заданному его реальным местоположением.500В macOS и Linux правило deny или ask, написанное через каталог-символическую ссылку с шаблоном `//`, `~/` или `/`, применяется также к реальному расположению каталога. Например, в macOS, где `/etc` разрешается в `/private/etc`, `Read(//etc/**)` блокирует и `/private/etc/hosts`. До v2.1.268 правило deny или ask, написанное через каталог-символическую ссылку, не применялось к пути, заданному через его реальное расположение.
489 501
490Grep и Glob ищут каталог, на который разрешается аргумент `path`. Claude Code применяет правила отказа `Read` к этому каталогу.502Grep и Glob выполняют поиск в каталоге, в который разрешается аргумент `path`. Claude Code применяет к этому каталогу правила deny для `Read`.
491 503
492<h5 id="writes-through-a-symlink">504<h5 id="writes-through-a-symlink">
493 Записи через символическую ссылку505 Запись через символическую ссылку
494</h5>506</h5>
495 507
496Если путь, который Claude просит отредактировать или написать, сам является символической ссылкой, инструменты Edit и Write [отказывают в записи и направляют Claude к цели ссылки](/docs/ru/errors#refusing-after-a-symlink-changed).508Если путь, который Claude просит отредактировать или записать, сам является символической ссылкой, инструменты Edit и Write [отказываются выполнять запись и направляют Claude к цели ссылки](/docs/ru/errors#refusing-after-a-symlink-changed).
497 509
498Запись всё ещё может пройти через символическую ссылку, когда каталог на пути к файлу является символической ссылкой, или когда команда Bash или PowerShell выполняет запись. Для этих записей то, что происходит, зависит от того, где файл, на который разрешается запись, находится относительно ваших [рабочих каталогов](#working-directories) и [защищённых путей](/docs/ru/permission-modes#protected-paths):510Запись всё же может пройти через символическую ссылку, если символической ссылкой является каталог на пути к файлу или если запись выполняет команда Bash или PowerShell. Для таких записей результат зависит от того, где находится файл, в который разрешается запись, относительно ваших [рабочих каталогов](#working-directories) и [защищённых путей](/docs/ru/permission-modes#protected-paths):
499 511
500* **Разрешается вне рабочих каталогов**: когда запрошенный путь находится внутри ваших рабочих каталогов, а файл, на который он разрешается, нет, запись не автоматически одобряется в режиме [`acceptEdits`](/docs/ru/permission-modes#auto-approve-file-edits-with-acceptedits-mode). В [автоматическом режиме](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode), если правило разрешения не одобряет запись, вам предлагается выбор вместо того, чтобы классификатор решал. Запрос называет путь, на который разрешается запись.512* **Разрешается за пределы рабочих каталогов**: когда запрошенный путь находится внутри ваших рабочих каталогов, а файл, в который он разрешается, — нет, запись не одобряется автоматически в [режиме `acceptEdits`](/docs/ru/permission-modes#auto-approve-file-edits-with-acceptedits-mode). В [авторежиме](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode), если запись не одобрена правилом allow, подтверждение запрашивается у вас, а не решается классификатором. В запросе указывается путь, в который разрешается запись.
501* **Разрешается к защищённому пути, который запрошенный путь не называет**: таблица [защищённых путей](/docs/ru/permission-modes#protected-paths) даёт результат для каждого режима разрешений, за исключением того, что где таблица маршрутизирует запись классификатору, эта запись вместо этого вас запрашивает.513* **Разрешается в защищённый путь, который не назван в запрошенном пути**: [таблица защищённых путей](/docs/ru/permission-modes#protected-paths) указывает результат для каждого режима разрешений, за исключением того, что там, где таблица направляет запись классификатору, для этой записи подтверждение запрашивается у вас.
502 514
503<h5 id="paths-that-can’t-be-resolved-or-that-change">515<h5 id="paths-that-can’t-be-resolved-or-that-change">
504 Пути, которые не могут быть разрешены или которые изменяются516 Пути, которые невозможно разрешить или которые изменяются
505</h5>517</h5>
506 518
507Когда Claude Code не может определить, где путь ведёт на диск, например потому что символические ссылки на нём образуют цикл, инструменты Read, Edit и Write [отказывают в операции](/docs/ru/errors#refusing-after-a-symlink-changed).519Когда Claude Code не может определить, куда ведёт путь на диске, например потому, что символические ссылки на нём образуют цикл, инструменты Read, Edit и Write [отказываются выполнять операцию](/docs/ru/errors#refusing-after-a-symlink-changed).
520
521Когда инструмент затем открывает одобренный файл, он [проверяет, что путь по-прежнему разрешается в расположение, одобренное проверкой разрешений](/docs/ru/errors#refusing-after-a-symlink-changed).
522
523<h4 id="network-paths">
524 Сетевые пути
525</h4>
526
527Когда инструменты Claude для чтения файлов, такие как Read, Grep и Glob, читают по сетевому пути, чтение проходит собственную проверку разрешений. Сетевой путь — это путь, который может вести на другой компьютер: в Windows это путь UNC, например `\\server\share\file`, а в macOS и Linux — путь автомонтирования `/net`, например `/net/fileserver/notes.txt`. Поиск такого пути может обратиться к указанному в нём хосту, а в Windows такое обращение может отправить хосту ваши учётные данные. У shell-команд есть собственная проверка: в ручном режиме команда Bash или PowerShell только для чтения, аргументы которой включают путь UNC, [всё равно запрашивает подтверждение в Windows](#read-only-commands).
528
529В Claude Code v2.1.292 и новее запрос подтверждения сохраняется в каждом из следующих случаев:
530
531* **Правила allow**: правило не одобряет чтение заранее, включая правило для всего инструмента, например `Read`
532* **Хуки PreToolUse**: [хук](#extend-permissions-with-hooks), который возвращает `"allow"`, не отменяет запрос подтверждения
533* **Авторежим**: запрос приходит вам, и [классификатор](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) не принимает решение о чтении
534
535В режиме `dontAsk` Claude Code отклоняет чтение вместо запроса подтверждения. В режиме `bypassPermissions`, а также в интерактивных сессиях терминала в режиме планирования при доступном [обходе разрешений](/docs/ru/permission-modes#skip-all-checks-with-bypasspermissions-mode) чтение выполняется без этого запроса.
536
537Чтобы читать файлы на сетевом ресурсе без этого запроса, сначала назначьте ресурсу локальный путь:
508 538
509Когда инструмент затем открывает одобренный файл, он [подтверждает, что путь по-прежнему разрешается в местоположение, которое проверка разрешения одобрила](/docs/ru/errors#refusing-after-a-symlink-changed).539* **Windows**: подключите ресурс как букву диска и передайте диск через `--add-dir` при запуске Claude Code, как описано в разделе [Рабочие каталоги](#working-directories)
540* **macOS и Linux**: смонтируйте ресурс по локальному пути, например в каталог внутри `/mnt` или `/Volumes`, и читайте файлы оттуда, как описано в разделе [Рабочий каталог является сетевым путём](/docs/ru/errors#working-directory-is-a-network-path)
510 541
511<h3 id="webfetch">542<h3 id="webfetch">
512 WebFetch543 WebFetch
513</h3>544</h3>
514 545
515Правила WebFetch используют префикс `domain:` и соответствуют имени хоста запрошенного URL. Сопоставление не чувствительно к регистру, поддерживает подстановки `*` и удаляет конечную точку из правила и имени хоста, поэтому `example.com.` и `example.com` рассматриваются одинаково.546Правила WebFetch используют префикс `domain:` и сопоставляются с именем хоста запрошенного URL. Сопоставление не зависит от регистра, поддерживает подстановочные знаки `*` и удаляет завершающую `.` как из правила, так и из имени хоста, поэтому `example.com.` и `example.com` считаются одинаковыми.
516 547
517* `WebFetch(domain:example.com)` соответствует запросам к `example.com`548* `WebFetch(domain:example.com)` соответствует только запросам к `example.com`. Чтобы охватить также поддомены, например `api.example.com`, добавьте правило `WebFetch(domain:*.example.com)`
518* `WebFetch(domain:*.example.com)` соответствует любому поддомену на любой глубине, такому как `api.example.com` или `a.b.example.com`, но не самому `example.com`549* `WebFetch(domain:*.example.com)` соответствует любому поддомену на любой глубине, например `api.example.com` или `a.b.example.com`, но не самому `example.com`
519* `WebFetch(domain:*)` соответствует каждому домену. Это не то же самое, что голое правило `WebFetch`; см. [Разрешить или запретить каждую выборку](#allow-or-deny-every-fetch)550* `WebFetch(domain:*)` соответствует любому домену. Это не то же самое, что простое правило `WebFetch`; см. [Разрешение или запрет всех загрузок](#allow-or-deny-every-fetch)
520 551
521В любой позиции, отличной от начального `*.` или голого `*`, подстановка соответствует только тексту между двумя точками. `WebFetch(domain:example.*)` соответствует `example.org`, где `*` становится `org`, но не `example.evil.com`, где `*` пришлось бы стать `evil.com` и пересечь точку. Это предотвращает конечную подстановку от соответствия доменам, которые злоумышленник мог бы зарегистрировать.552В любой позиции, кроме начального `*.` или одиночного `*`, подстановочный знак соответствует только тексту между двумя точками. `WebFetch(domain:example.*)` соответствует `example.org`, где `*` становится `org`, но не `example.evil.com`, где `*` пришлось бы стать `evil.com` и пересечь точку. Это не позволяет завершающему подстановочному знаку соответствовать доменам, которые может зарегистрировать злоумышленник.
522 553
523Подстановки в правилах `WebFetch` требуют Claude Code v2.1.172 или позже для соответствия выборкам.554Чтобы подстановочные знаки в правилах `WebFetch` сопоставлялись с загрузками, требуется Claude Code v2.1.172 или новее.
524 555
525<h4 id="allow-or-deny-every-fetch">556<h4 id="allow-or-deny-every-fetch">
526 Разрешить или запретить каждую выборку557 Разрешение или запрет всех загрузок
527</h4>558</h4>
528 559
529Голое правило `WebFetch` — это имя инструмента без части `domain:`, такое как `"deny": ["WebFetch"]`. Оно и `WebFetch(domain:*)` охватывают каждый URL, но Claude Code применяет их по-разному, и только форма `domain:` также добавляет свой домен в [список разрешённых или запрещённых доменов](/docs/ru/sandboxing#network-isolation) песочницы. Этот раздел перечисляет формы подстановки, которые песочница поддерживает, и версию, которая добавила голый `*`.560Простое правило `WebFetch` — это имя инструмента без части `domain:`, например `"deny": ["WebFetch"]`. И оно, и `WebFetch(domain:*)` охватывают любой URL, но Claude Code применяет их по-разному, и только форма `domain:` также добавляет свой домен в [список разрешённых или запрещённых доменов](/docs/ru/sandboxing#network-isolation) песочницы. В том разделе перечислены формы с подстановочными знаками, которые учитывает песочница, и версия, в которой был добавлен одиночный `*`.
530 561
531Каждая строка показывает, что правило делает в списке `allow` и в списке `deny`:562В каждой строке показано, что делает правило в списке `allow` и в списке `deny`:
532 563
533| Правило | В `allow` | В `deny` |564| Правило | В `allow` | В `deny` |
534| :- | :- | :- |565| :- | :- | :- |
535| `WebFetch` | Claude выполняет выборку без запроса вас. Не изменяет, какие хосты могут достичь команды в песочнице. | Claude Code удаляет инструмент `WebFetch`, поэтому Claude вообще не может выполнять выборку. Не изменяет, какие хосты могут достичь команды в песочнице. |566| `WebFetch` | Claude загружает страницы без запроса подтверждения. Не меняет набор хостов, к которым могут обращаться команды в песочнице. | Claude Code удаляет инструмент `WebFetch`, поэтому Claude вообще не может загружать страницы. Не меняет набор хостов, к которым могут обращаться команды в песочнице. |
536| `WebFetch(domain:*)` | Claude выполняет выборку без запроса вас, и команды в песочнице могут достичь любого хоста. | Claude Code сохраняет инструмент и отказывает в каждой выборке, и команды в песочнице не могут достичь никакого хоста. |567| `WebFetch(domain:*)` | Claude загружает страницы без запроса подтверждения, а команды в песочнице могут обращаться к любому хосту. | Claude Code сохраняет инструмент и отклоняет каждую загрузку, а команды в песочнице не могут обращаться ни к одному хосту. |
537 568
538Две формы также отличаются при чтении [артефактов](/docs/ru/artifacts), страниц, которые инструмент Artifact публикует на claude.ai. Голое правило отказа или запроса `WebFetch` не применяется к этим чтениям. Правило `domain:`, охватывающее `claude.ai` или хост содержимого `*.claudeusercontent.com`, такое как `WebFetch(domain:claude.ai)` или `WebFetch(domain:*)`, отказывает в каждом чтении или запрашивает перед ним. Правило [`Artifact`](/docs/ru/artifacts#disable-artifacts) делает то же самое.569Эти две формы также различаются при чтении [артефактов](/docs/ru/artifacts) — страниц, которые инструмент Artifact публикует на claude.ai. Простое правило deny или ask для `WebFetch` не применяется к таким чтениям. Правило `domain:`, охватывающее `claude.ai` или хост содержимого `*.claudeusercontent.com`, например `WebFetch(domain:claude.ai)` или `WebFetch(domain:*)`, отклоняет каждое чтение или запрашивает подтверждение перед ним. [Правило `Artifact`](/docs/ru/artifacts#disable-artifacts) делает то же самое.
539 570
540Когда правило блокирует чтение, отказ называет правило. До v2.1.268 голое правило отказа `WebFetch` блокировало каждое чтение артефакта, и голое правило запроса запрашивало перед каждым.571Когда правило блокирует чтение, в сообщении об отказе указывается это правило. До v2.1.268 простое правило deny для `WebFetch` блокировало каждое чтение артефакта, а простое правило ask запрашивало подтверждение перед каждым из них.
541 572
542Чтобы позволить Claude выполнять выборку свободно, сохраняя список разрешений песочницы как есть, используйте голую форму. Этот `settings.json` делает это:573Чтобы позволить Claude свободно загружать страницы, сохранив список разрешённых доменов песочницы без изменений, используйте простую форму. Этот `settings.json` делает именно это:
543 574
544```json theme={null}575```json theme={null}
545{576{
549}580}
550```581```
551 582
552Когда вы просите Claude выполнить выборку страницы, он выполняет её без запроса. Когда вы просите его запустить [изолированный в песочнице](/docs/ru/sandboxing) `curl` против хоста вне списка разрешений песочницы, Claude Code по-прежнему запрашивает вас для этого хоста, потому что голое правило не добавило хост в список разрешений.583Когда вы просите Claude загрузить страницу, он загружает её без запроса подтверждения. Когда вы просите его выполнить `curl` [в песочнице](/docs/ru/sandboxing) к хосту вне списка разрешённых доменов песочницы, Claude Code всё равно запрашивает у вас подтверждение для этого хоста, поскольку простое правило не добавило хост в список разрешённых доменов.
553 584
554В [автоматическом режиме](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode), Claude вместо этого называет хост в [разрешённых доменах для каждой команды](/docs/ru/sandboxing#per-command-allowed-domains-in-auto-mode) классификатора для проверки.585В [авторежиме](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) Claude вместо этого указывает хост в [разрешённых доменах для отдельной команды](/docs/ru/sandboxing#per-command-allowed-domains-in-auto-mode), чтобы их проверил классификатор.
555 586
556<h3 id="mcp">587<h3 id="mcp">
557 MCP588 MCP
558</h3>589</h3>
559 590
560Правила MCP используют имя сервера в соответствии с конфигурацией Claude Code, опционально за которым следует имя инструмента от этого сервера.591Правила MCP используют имя сервера в том виде, в каком оно настроено в Claude Code, за которым может следовать имя инструмента этого сервера.
561 592
562* `mcp__puppeteer` соответствует любому инструменту, предоставленному сервером `puppeteer`593* `mcp__puppeteer` соответствует любому инструменту, предоставляемому сервером `puppeteer`
563* `mcp__puppeteer__*` использует синтаксис подстановки и также соответствует всем инструментам от сервера `puppeteer`594* `mcp__puppeteer__*` использует синтаксис подстановочных знаков и также соответствует всем инструментам сервера `puppeteer`
564* `mcp__puppeteer__puppeteer_navigate` соответствует инструменту `puppeteer_navigate`, предоставленному сервером `puppeteer`595* `mcp__puppeteer__puppeteer_navigate` соответствует инструменту `puppeteer_navigate`, предоставляемому сервером `puppeteer`
565 596
566Если ваша организация установила инструмент [claude.ai connector](/docs/ru/mcp#organization-controls-on-connector-tools) на `ask` и эта настройка достигает Claude Code в вашем сеансе, правила разрешения для этого инструмента не вступают в силу: Claude Code запрашивает при каждом вызове, даже в режимах `auto` и `bypassPermissions`. В режиме `dontAsk`, который никогда не запрашивает, Claude Code вместо этого отказывает в вызове. Инструменты от коннекторов, которые Claude Code получает сам, появляются как `mcp__claude_ai_<server>__<tool>`.597Если ваша организация установила для инструмента [коннектора claude.ai](/docs/ru/mcp#organization-controls-on-connector-tools) значение `ask` и эта настройка доходит до Claude Code в вашей сессии, правила allow для этого инструмента не действуют: Claude Code запрашивает подтверждение при каждом вызове, даже в режимах `auto` и `bypassPermissions`. В режиме `dontAsk`, который никогда не запрашивает подтверждение, Claude Code вместо этого отклоняет вызов. Инструменты из коннекторов, которые Claude Code загружает сам, отображаются как `mcp__claude_ai_<server>__<tool>`.
567 598
568В сеансе [Cowork](https://claude.com/docs/cowork/overview) в приложении Claude Desktop, Claude запускает команды оболочки через инструмент `mcp__workspace__bash` Cowork вместо встроенного инструмента `Bash`, и Cowork также предоставляет `mcp__workspace__web_fetch` для выборок в сети. Claude Code также применяет правила отказа, которые называют весь инструмент `Bash` или `WebFetch`, к этим инструментам Cowork, поэтому управляемое правило отказа `Bash` останавливает Claude от запуска команд оболочки в Cowork. Когда Claude Code блокирует такой вызов, сообщение называет инструмент Cowork: `Permission to use mcp__workspace__bash has been denied.` Правила разрешения не переносятся: Claude Code никогда не применяет правило разрешения `Bash` к `mcp__workspace__bash`.599В сессии [Cowork](https://claude.com/docs/cowork/overview) в приложении Claude Desktop Claude выполняет shell-команды через инструмент Cowork `mcp__workspace__bash`, а не через встроенный инструмент `Bash`, и Cowork аналогично предоставляет `mcp__workspace__web_fetch` для веб-загрузок. Claude Code также применяет к этим инструментам Cowork правила deny, называющие весь инструмент `Bash` или `WebFetch`, поэтому управляемое правило deny для `Bash` не даёт Claude выполнять shell-команды в Cowork. Когда Claude Code блокирует такой вызов, в сообщении указывается инструмент Cowork: `Permission to use mcp__workspace__bash has been denied.` Правила allow не переносятся: Claude Code никогда не применяет правило allow для `Bash` к `mcp__workspace__bash`.
569 600
570<h3 id="agent-subagents">601<h3 id="agent-subagents">
571 Agent (подагенты)602 Agent (субагенты)
572</h3>603</h3>
573 604
574Используйте правила `Agent(AgentName)` для управления, какие [подагенты](/docs/ru/sub-agents) может использовать Claude:605Используйте правила `Agent(AgentName)`, чтобы управлять тем, какие [субагенты](/docs/ru/sub-agents) может использовать Claude:
575 606
576* `Agent(Explore)` соответствует подагенту Explore607* `Agent(Explore)` соответствует субагенту Explore
577* `Agent(Plan)` соответствует подагенту Plan608* `Agent(Plan)` соответствует субагенту Plan
578* `Agent(my-custom-agent)` соответствует пользовательскому подагенту с именем `my-custom-agent`609* `Agent(my-custom-agent)` соответствует пользовательскому субагенту с именем `my-custom-agent`
579 610
580Добавьте эти правила в массив `deny` в ваших параметрах или используйте флаг CLI `--disallowedTools` для отключения конкретных агентов. Чтобы отключить агент Explore:611Добавьте эти правила в массив `deny` в ваших настройках или используйте флаг CLI `--disallowedTools`, чтобы отключить определённых агентов. Чтобы отключить агента Explore:
581 612
582```json theme={null}613```json theme={null}
583{614{
591 Cd622 Cd
592</h3>623</h3>
593 624
594Правила `Cd` управляют, в какие каталоги команда [`/cd`](/docs/ru/commands) может переместить сеанс. `Cd` не является инструментом, вызываемым моделью: Claude не может его вызвать, и правила применяются только когда вы сами запускаете `/cd`.625Правила `Cd` управляют тем, в какие каталоги [команда `/cd`](/docs/ru/commands) может переместить сессию. `Cd` не является инструментом, вызываемым моделью: Claude не может его вызвать, и правила применяются только тогда, когда вы сами запускаете `/cd`.
595 626
596Голое правило отказа `Cd` отключает `/cd` полностью. Правило отказа `Cd(<path-pattern>)` блокирует соответствующие цели. Правила отказа проверяют каждое написание цели, включая каждый скачок символической ссылки, на который она разрешается, поэтому правило, написанное для одного пути, также блокирует цели, которые разрешаются в него.627Простое правило deny `Cd` полностью отключает `/cd`. Правило deny `Cd(<path-pattern>)` блокирует соответствующие цели. Правила deny проверяют каждое написание цели, включая каждый переход по символической ссылке, через который она разрешается, поэтому правило, написанное для одного пути, также блокирует цели, которые в него разрешаются.
597 628
598Добавление любого правила разрешения `Cd` переключает `/cd` в режим списка разрешений: разрешённый целевой каталог должен соответствовать одному из ваших правил разрешения, или `/cd` отказывает. Без правил `Cd`, настроенных, `/cd` сохраняет своё поведение по умолчанию и запрашивает вас доверять незнакомому каталогу.629Добавление любого правила allow `Cd` переводит `/cd` в режим списка разрешённых каталогов: разрешённый целевой каталог должен соответствовать одному из ваших правил allow, иначе `/cd` откажет. Если правила `Cd` не настроены, `/cd` сохраняет поведение по умолчанию и запрашивает у вас подтверждение доверия незнакомому каталогу.
599 630
600Шаблоны путей делят якоря `//`, `~/` и `/` из [правил Read и Edit](#read-and-edit), но сопоставление якорировано к целому пути каталога, а не в стиле gitignore. `*` соответствует ровно одному сегменту пути и `**` соответствует через сегменты. Конечный `/**` также соответствует его названному корню.631Шаблоны путей используют те же точки привязки `//`, `~/` и `/`, что и [правила Read и Edit](#read-and-edit), но сопоставление привязано ко всему пути каталога, а не выполняется в стиле gitignore. `*` соответствует ровно одному сегменту пути, а `**` — нескольким сегментам. Завершающий `/**` также соответствует названному корню.
601 632
602| Правило | Соответствует | Не соответствует |633| Правило | Соответствует | Не соответствует |
603| - | - | - |634| - | - | - |
604| `Cd(~/code/*)` | `~/code/app` | `~/code/app/src`, `~/code` |635| `Cd(~/code/*)` | `~/code/app` | `~/code/app/src`, `~/code` |
605| `Cd(~/code/**)` | `~/code` и любой каталог под ним | каталоги вне `~/code` |636| `Cd(~/code/**)` | `~/code` и любому каталогу внутри него | каталогам вне `~/code` |
606| `Cd(**/node_modules)` | любой каталог `node_modules` на любой глубине под текущим каталогом | `node_modules/pkg` |637| `Cd(**/node_modules)` | любому каталогу `node_modules` на любой глубине внутри текущего каталога | `node_modules/pkg` |
607 638
608<h2 id="extend-permissions-with-hooks">639<h2 id="extend-permissions-with-hooks">
609 Расширение разрешений с помощью hooks640 Расширение разрешений с помощью hooks
622 653
623См. [Решить, доверять ли mod](/docs/ru/plugins/mods/overview#decide-whether-to-trust-a-mod) или [Управление mod для вашей организации](/docs/ru/plugins/mods/admin#know-what-happens-by-default), если вы развёртываете управляемые параметры.654См. [Решить, доверять ли mod](/docs/ru/plugins/mods/overview#decide-whether-to-trust-a-mod) или [Управление mod для вашей организации](/docs/ru/plugins/mods/admin#know-what-happens-by-default), если вы развёртываете управляемые параметры.
624 655
625Инструменты MCP, отмеченные [`requiresUserInteraction`](/docs/ru/mcp#require-approval-for-a-specific-tool), также по-прежнему запрашивают, когда hook возвращает `"allow"`, как и инструменты соединителя [установленные вашей организацией на `ask`](/docs/ru/mcp#organization-controls-on-connector-tools) в сеансах, где эта настройка достигает Claude Code.656Для [инструмента, требующего взаимодействия с пользователем](/docs/ru/permission-modes#actions-no-mode-auto-approves), например `AskUserQuestion` или инструмента MCP, отмеченного `requiresUserInteraction`, подтверждение мода через `tool.check` не пропускает запрос разрешения. Требуется Claude Code v2.1.292 или новее. Инструменты MCP, отмеченные [`requiresUserInteraction`](/docs/ru/mcp#require-approval-for-a-specific-tool), также по-прежнему запрашивают подтверждение, когда хук возвращает `"allow"`, как и чтение из [сетевых путей](#network-paths) и инструменты коннекторов, [для которых ваша организация установила `ask`](/docs/ru/mcp#organization-controls-on-connector-tools), в сессиях, где эта настройка доходит до Claude Code.
626 657
627Блокирующий hook также имеет приоритет над правилами allow. Hook, который выходит с кодом 2, останавливает вызов инструмента перед оценкой правил разрешений, поэтому блокировка применяется даже когда правило allow иначе позволило бы вызову продолжиться. Чтобы запустить все Bash команды без запросов, кроме нескольких, которые вы хотите заблокировать, добавьте `"Bash"` в список allow и зарегистрируйте PreToolUse hook, который отклоняет эти конкретные команды. См. [Блокировка редактирования защищённых файлов](/docs/ru/hooks-guide#block-edits-to-protected-files) для скрипта hook, который вы можете адаптировать.658Блокирующий hook также имеет приоритет над правилами allow. Hook, который выходит с кодом 2, останавливает вызов инструмента перед оценкой правил разрешений, поэтому блокировка применяется даже когда правило allow иначе позволило бы вызову продолжиться. Чтобы запустить все Bash команды без запросов, кроме нескольких, которые вы хотите заблокировать, добавьте `"Bash"` в список allow и зарегистрируйте PreToolUse hook, который отклоняет эти конкретные команды. См. [Блокировка редактирования защищённых файлов](/docs/ru/hooks-guide#block-edits-to-protected-files) для скрипта hook, который вы можете адаптировать.
628 659
636* **Во время сеанса**: используйте команду `/add-dir`667* **Во время сеанса**: используйте команду `/add-dir`
637* **Постоянная конфигурация**: добавьте в `additionalDirectories` в [файлы параметров](/docs/ru/settings#where-settings-live)668* **Постоянная конфигурация**: добавьте в `additionalDirectories` в [файлы параметров](/docs/ru/settings#where-settings-live)
638 669
639Файлы в дополнительных каталогах следуют тем же правилам разрешений, что и исходный рабочий каталог: они становятся читаемыми без запросов, и разрешения на редактирование файлов следуют текущему режиму разрешений.670Файлы в дополнительных каталогах подчиняются тем же правилам разрешений, что и исходный рабочий каталог: они становятся доступными для чтения без запросов разрешения, за исключением проверки [сетевого пути](#network-paths), а разрешения на редактирование файлов определяются текущим режимом разрешений.
640 671
641Вы не можете добавить большинство [сетевых путей](/docs/ru/errors#working-directory-is-a-network-path), таких как общая папка UNC `\\server\share`, в качестве рабочих каталогов, потому что поиск может связаться с хостом, который она называет. На Windows вместо этого сопоставьте общую папку с буквой диска и передайте диск с помощью `--add-dir` при запуске.672Вы не можете добавить большинство [сетевых путей](/docs/ru/errors#working-directory-is-a-network-path), таких как общая папка UNC `\\server\share`, в качестве рабочих каталогов, потому что поиск может связаться с хостом, который она называет. На Windows вместо этого сопоставьте общую папку с буквой диска и передайте диск с помощью `--add-dir` при запуске.
642 673
648 Переместить сеанс в другой каталог679 Переместить сеанс в другой каталог
649</h3>680</h3>
650 681
651Чтобы переместить сеанс в другой основной рабочий каталог, вместо [добавления каталога](#working-directories) рядом с текущим, запустите `/cd <path>`. Claude Code сохраняет беседу, загружает `CLAUDE.md` нового каталога и предлагает вам [доверить рабочему пространству](#project-allow-rules-and-workspace-trust), если вы в нём раньше не работали. После этого Claude Code [находит перемещённый сеанс](/docs/ru/sessions#resume-a-session), когда вы запускаете `--resume` из нового каталога.682Чтобы переместить сессию в другой основной рабочий каталог, вместо [добавления каталога](#working-directories) рядом с текущим, выполните `/cd <path>`. Claude Code сохраняет диалог, загружает `CLAUDE.md` нового каталога и предлагает вам [доверять рабочему пространству](#project-allow-rules-and-workspace-trust), если вы в нём раньше не работали. После этого Claude Code [находит перемещённую сессию](/docs/ru/sessions#where-the-session-picker-looks), когда вы запускаете `--resume` из нового каталога.
652 683
653Как только вы переместитесь, Claude Code применяет конфигурацию проекта нового каталога:684Как только вы переместитесь, Claude Code применяет конфигурацию проекта нового каталога:
654 685