SpyBara
Go Premium

Documentation 2026-10-16 22:59 UTC to 2026-10-17 23:57 UTC

23 files changed +186 −74. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

165 Вызов пользовательского инструмента165 Вызов пользовательского инструмента

166</h3>166</h3>

167 167 

168Передайте MCP сервер, который вы создали, в `query` через опцию `mcpServers`. Ключ в `mcpServers` становится сегментом `{server_name}` в полностью квалифицированном имени каждого инструмента: `mcp__{server_name}__{tool_name}`. Перечислите это имя в `allowedTools`, чтобы инструмент работал без запроса разрешения.168Передайте созданный вами MCP-сервер в `query` через опцию `mcpServers`. [Полностью квалифицированное имя](/docs/ru/agent-sdk/mcp#tool-naming-convention) каждого инструмента имеет вид `mcp__{server_name}__{tool_name}`, где `{server_name}` — это ключ, который вы задаёте серверу в `mcpServers`. Если ключ содержит такие символы, как `.` или пробелы, замените их на `_`, когда записываете `{server_name}`. Перечислите полностью квалифицированное имя в `allowedTools`, чтобы инструмент работал без запроса разрешения.

169 169 

170Эти фрагменты повторно используют `weatherServer` из [примера инструмента Weather](#weather-tool-example), чтобы спросить Claude о погоде в определённом месте.170Эти фрагменты повторно используют `weatherServer` из [примера инструмента Weather](#weather-tool-example), чтобы спросить Claude о погоде в определённом месте.

171 171 

Details

235 235 

236| Опция | Тип | По умолчанию | Описание |236| Опция | Тип | По умолчанию | Описание |

237| - | - | - | - |237| - | - | - | - |

238| `matcher` | `string` | `undefined` | Паттерн, сопоставляемый с полем фильтра события, следуя [правилам для matchers в файлах настроек](/docs/ru/hooks#matcher-patterns). Для хуков инструментов это имя инструмента. Встроенные инструменты включают `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` и другие (см. [Tool Input Types](/docs/ru/agent-sdk/typescript#tool-input-types) для полного списка). MCP инструменты используют паттерн `mcp__<server>__<action>`, где `<server>` — это ключ, который вы используете в конфигурации `mcpServers`. |238| `matcher` | `string` | `undefined` | Паттерн, сопоставляемый с полем фильтра события, следуя [правилам для matchers в файлах настроек](/docs/ru/hooks#matcher-patterns). Для хуков инструментов это имя инструмента. Встроенные инструменты включают `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` и другие. Полный список см. в [Tool Input Types](/docs/ru/agent-sdk/typescript#tool-input-types). MCP инструменты используют паттерн `mcp__<server>__<action>`, где `<server>` — это ключ, который вы используете в конфигурации `mcpServers`, записанный так, как описано в [соглашении об именовании инструментов](/docs/ru/agent-sdk/mcp#tool-naming-convention). |

239| `hooks` | `HookCallback[]` | - | Обязательно. Массив функций обратного вызова для выполнения, когда паттерн совпадает |239| `hooks` | `HookCallback[]` | - | Обязательно. Массив функций обратного вызова для выполнения, когда паттерн совпадает |

240| `timeout` | `number` | `undefined` | Таймаут в секундах. Если опущен, Claude Code применяет [таймаут события по умолчанию](#hook-timeout). Ваши SDK callbacks следуют значениям по умолчанию хука `command` |240| `timeout` | `number` | `undefined` | Таймаут в секундах. Если опущен, Claude Code применяет [таймаут события по умолчанию](#hook-timeout). Ваши SDK callbacks следуют значениям по умолчанию хука `command` |

241 241 

agent-sdk/mcp.md +10 −1

Details

196 Соглашение об именовании инструментов196 Соглашение об именовании инструментов

197</h3>197</h3>

198 198 

199Инструменты MCP следуют шаблону именования `mcp__<server-name>__<tool-name>`. Например, сервер GitHub с именем `"github"` с инструментом `list_issues` становится `mcp__github__list_issues`.199Инструменты MCP именуются как `mcp__<server-name>__<tool-name>`, где `<server-name>` — это имя, под которым вы регистрируете сервер, например его ключ в `mcpServers`.

200 

201Символы в имени сервера, такие как `.` и пробелы, заменяются на `_`. В этой таблице показано полное имя инструмента `list_issues` для двух ключей сервера:

202 

203| Ключ в `mcpServers` | Полное имя инструмента |

204| :- | :- |

205| `github` | `mcp__github__list_issues` |

206| `my.server` | `mcp__my_server__list_issues` |

207 

208Используйте полные имена инструментов в `allowedTools` и в [правилах разрешений MCP](/docs/ru/permissions#mcp). Для сервера, который предоставляет [плагин](/docs/ru/agent-sdk/plugins), `<server-name>` принимает [форму с областью плагина](/docs/ru/mcp#plugin-provided-mcp-servers) и начинается с `plugin_`.

200 209 

201<h3 id="auto-approve-with-allowedtools">210<h3 id="auto-approve-with-allowedtools">

202 Автоматическое одобрение с allowedTools211 Автоматическое одобрение с allowedTools

Details

16 16 

17<Steps>17<Steps>

18 <Step title="Hooks">18 <Step title="Hooks">

19 Сначала запустите [hooks](/docs/ru/agent-sdk/hooks). Hook может отклонить вызов полностью или пропустить его дальше. Hook, который возвращает `allow`, не пропускает правила deny и ask ниже; они оцениваются независимо от результата hook. Hook `PreToolUse` с allow также не может одобрить удаление `rm` или `rmdir`, нацеленное на [критический путь](/docs/ru/permission-modes#critical-paths).19 Сначала запустите [hooks](/docs/ru/agent-sdk/hooks). Hook может отклонить вызов полностью или пропустить его дальше. Hook, который возвращает `allow`, не пропускает правила deny и ask ниже; они оцениваются независимо от результата hook. Hook `PreToolUse` с allow также не может одобрить удаление `rm` или `rmdir`, нацеленное на [критический путь](/docs/ru/permission-modes#critical-paths). О том, что делает такой `allow` в режиме планирования, см. [Hook approvals in plan mode](/docs/ru/permissions#hook-approvals-in-plan-mode).

20 </Step>20 </Step>

21 21 

22 <Step title="Deny rules">22 <Step title="Deny rules">


161 161 

162<Tabs>162<Tabs>

163 <Tab title="При запросе">163 <Tab title="При запросе">

164 Передайте `permission_mode` (Python) или `permissionMode` (TypeScript) при создании запроса. Этот режим применяется для всего сеанса, если не изменяется динамически.164 Передайте `permission_mode` (Python) или `permissionMode` (TypeScript) при создании запроса.

165 165 

166 <CodeGroup>166 <CodeGroup>

167 ```python Python theme={null}167 ```python Python theme={null}


314 314 

315Claude исследует кодовую базу и создает план без редактирования исходных файлов. Инструменты только для чтения выполняются так же, как в режиме разрешений `default`.315Claude исследует кодовую базу и создает план без редактирования исходных файлов. Инструменты только для чтения выполняются так же, как в режиме разрешений `default`.

316 316 

317Редактирование файлов никогда не одобряется автоматически в режиме планирования, даже когда правило разрешения совпадает. Вместо этого они запрашиваются через ваш обратный вызов `canUseTool`. В Claude Code v2.1.212 или более поздней версии команды оболочки, которые изменяют файлы, такие как `touch` и `rm`, достигают вашего обратного вызова `canUseTool` таким же образом.317Редактирование файлов никогда не одобряется автоматически в режиме планирования, даже когда правило разрешения совпадает или хук `PreToolUse` возвращает `allow`. Вместо этого они запрашиваются через ваш обратный вызов `canUseTool`. В Claude Code v2.1.212 или более поздней версии команды оболочки, которые изменяют файлы, такие как `touch` и `rm`, достигают вашего обратного вызова `canUseTool` таким же образом.

318 318 

319В TypeScript SDK, если вы установите `allowDangerouslySkipPermissions: true` вместе с `permissionMode: 'plan'`, редактирование файлов и команды оболочки, которые изменяют файлы, по-прежнему достигают вашего обратного вызова `canUseTool`. Опция позволяет вам позже переключиться на `bypassPermissions` с помощью `setPermissionMode()`.319В TypeScript SDK, если вы установите `allowDangerouslySkipPermissions: true` вместе с `permissionMode: 'plan'`, редактирование файлов и команды оболочки, которые изменяют файлы, по-прежнему достигают вашего обратного вызова `canUseTool`. Опция позволяет вам позже переключиться на `bypassPermissions` с помощью `setPermissionMode()`.

320 320 


322 322 

323**Используйте когда:** вы хотите, чтобы Claude предложил изменения без их выполнения, например при проверке кода или когда вам нужно одобрить изменения перед их внесением.323**Используйте когда:** вы хотите, чтобы Claude предложил изменения без их выполнения, например при проверке кода или когда вам нужно одобрить изменения перед их внесением.

324 324 

325<h4 id="auto-mode-auto">

326 Авторежим (`auto`)

327</h4>

328 

329Модель-классификатор проверяет действия, такие как команды оболочки и сетевые запросы, перед их выполнением и разрешает или блокирует каждое проверяемое действие. О моделях и провайдерах, которые требуются для авторежима, и о порядке, в котором он оценивает действия, см. [Устранение запросов разрешений с помощью авторежима](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode).

330 

331Если вы переключаете сессию, находящуюся в авторежиме, на модель, которую авторежим не поддерживает, с помощью [`set_model()`](/docs/ru/agent-sdk/python#claudesdkclient), [`setModel()`](/docs/ru/agent-sdk/typescript#query-object) или [`applyFlagSettings()`](/docs/ru/agent-sdk/typescript#applyflagsettings), сессия переходит в режим `default`:

332 

333* **Что вы увидите**: сообщение `system` с подтипом `status` и `permissionMode`, установленным в `"default"`, которое TypeScript SDK типизирует как [`SDKStatusMessage`](/docs/ru/agent-sdk/typescript#sdkstatusmessage). С этого момента вызовы, требующие подтверждения и не соответствующие никакому правилу разрешения, достигают вашего обратного вызова `canUseTool`.

334* **Чтобы вернуться в авторежим**: переключитесь на поддерживаемую модель, затем вызовите `set_permission_mode("auto")` или `setPermissionMode("auto")`. Если вы переключите модель обратно без этого вызова, сессия останется в режиме `default`. Пока активна неподдерживаемая модель, вызов завершается ошибкой `Cannot set permission mode to auto: auto mode unavailable for this model`.

335 

336Переход в режим `default` после вызова `set_model()`, `setModel()` или `applyFlagSettings()` требует Claude Code v2.1.299 или более поздней версии.

337 

325<h2 id="related-resources">338<h2 id="related-resources">

326 Связанные ресурсы339 Связанные ресурсы

327</h2>340</h2>

Details

610| `receive_response()` | Получайте сообщения до и включая ResultMessage |610| `receive_response()` | Получайте сообщения до и включая ResultMessage |

611| `interrupt()` | Отправьте сигнал прерывания (работает только в режиме потоковой передачи) |611| `interrupt()` | Отправьте сигнал прерывания (работает только в режиме потоковой передачи) |

612| `set_permission_mode(mode)` | Измените режим разрешений для текущего сеанса |612| `set_permission_mode(mode)` | Измените режим разрешений для текущего сеанса |

613| `set_model(model)` | Измените модель для текущего сеанса. Передайте `None` для сброса на [модель по умолчанию Claude Code](/docs/ru/model-config) |613| `set_model(model)` | Измените модель для текущей сессии. Передайте `None` для сброса на [модель по умолчанию Claude Code](/docs/ru/model-config). Сессия в режиме `auto` [переключается в режим `default`](/docs/ru/agent-sdk/permissions#auto-mode-auto), если новая модель не поддерживает авторежим |

614| `rewind_files(user_message_id)` | Восстановите файлы в их состояние в указанном пользовательском сообщении. Требует `enable_file_checkpointing=True`. См. [File checkpointing](/docs/ru/agent-sdk/file-checkpointing) |614| `rewind_files(user_message_id)` | Восстановите файлы в их состояние в указанном пользовательском сообщении. Требует `enable_file_checkpointing=True`. См. [File checkpointing](/docs/ru/agent-sdk/file-checkpointing) |

615| `get_mcp_status()` | Получите статус всех настроенных MCP servers. Возвращает [`McpStatusResponse`](#mcpstatusresponse) |615| `get_mcp_status()` | Получите статус всех настроенных MCP servers. Возвращает [`McpStatusResponse`](#mcpstatusresponse) |

616| `get_context_usage()` | Получите разбивку использования контекстного окна по категориям, навыкам и инструментам. Те же данные, которые `/context` показывает в интерактивном сеансе. Возвращает [`ContextUsageResponse`](#contextusageresponse). Для вычисления разбивки Claude Code делает несколько запросов API подсчета токенов, которые не отображаются в потоке сообщений; см. [как эти запросы обрабатываются](#contextusageresponse) |616| `get_context_usage()` | Получите разбивку использования контекстного окна по категориям, навыкам и инструментам. Те же данные, которые `/context` показывает в интерактивном сеансе. Возвращает [`ContextUsageResponse`](#contextusageresponse). Для вычисления разбивки Claude Code делает несколько запросов API подсчета токенов, которые не отображаются в потоке сообщений; см. [как эти запросы обрабатываются](#contextusageresponse) |


3884 Установите `"failIfUnavailable": True` в настройках песочницы, чтобы вместо этого остановить выполнение. SDK передаёт `failIfUnavailable` в Claude Code вместе с объявленными полями `SandboxSettings`. Затем `query()` сообщает `ResultMessage` с `subtype="error_during_execution"` и причиной в `errors`. Поскольку это одноразовый вызов `query()`, SDK вызывает исключение после выдачи этого результата ошибки, поэтому оберните цикл в блок try, чтобы продолжить после него. См. [Handle the result](/docs/ru/agent-sdk/agent-loop#handle-the-result) для контракта ошибки.3884 Установите `"failIfUnavailable": True` в настройках песочницы, чтобы вместо этого остановить выполнение. SDK передаёт `failIfUnavailable` в Claude Code вместе с объявленными полями `SandboxSettings`. Затем `query()` сообщает `ResultMessage` с `subtype="error_during_execution"` и причиной в `errors`. Поскольку это одноразовый вызов `query()`, SDK вызывает исключение после выдачи этого результата ошибки, поэтому оберните цикл в блок try, чтобы продолжить после него. См. [Handle the result](/docs/ru/agent-sdk/agent-loop#handle-the-result) для контракта ошибки.

3885</Note>3885</Note>

3886 3886 

3887Чтобы запретить командам в песочнице запись в файл, укажите его абсолютный путь в [`denyWrite`](/docs/ru/settings-reference#sandbox-filesystem-denywrite) в настройках песочницы, например `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`. SDK передаёт `filesystem` в Claude Code вместе с объявленными полями `SandboxSettings`. После запуска песочница блокирует запись по каждому указанному пути. Если указать `.env` или `./.env`, команды в песочнице смогут записывать в файл `.env` в рабочем каталоге сессии.3887Чтобы запретить командам в песочнице запись в файл, укажите его абсолютный путь в [`denyWrite`](/docs/ru/settings-reference#sandbox-filesystem-denywrite) в настройках песочницы, например `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`. SDK передаёт `filesystem` в Claude Code вместе с объявленными полями `SandboxSettings`. После запуска песочница блокирует запись по каждому указанному вами абсолютному пути.

3888 3888 

3889<h4 id="example-usage">3889<h4 id="example-usage">

3890 Пример использования3890 Пример использования

Details

736| `interrupt()` | Прерывает запрос. Доступен только в режиме потокового ввода. Когда CLI объявляет возможность `interrupt_receipt_v1` в [`SDKSystemMessage.capabilities`](#sdksystemmessage), разрешается значением [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) со списком сообщений, ожидавших обработки в момент поступления прерывания. В CLI до v2.1.205 разрешается значением `undefined` |736| `interrupt()` | Прерывает запрос. Доступен только в режиме потокового ввода. Когда CLI объявляет возможность `interrupt_receipt_v1` в [`SDKSystemMessage.capabilities`](#sdksystemmessage), разрешается значением [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) со списком сообщений, ожидавших обработки в момент поступления прерывания. В CLI до v2.1.205 разрешается значением `undefined` |

737| `rewindFiles(userMessageId, options?)` | Восстанавливает файлы до состояния на момент указанного сообщения пользователя. Передайте `{ dryRun: true }` для предварительного просмотра изменений. Требует `enableFileCheckpointing: true`. См. [Чекпоинты файлов](/docs/ru/agent-sdk/file-checkpointing) |737| `rewindFiles(userMessageId, options?)` | Восстанавливает файлы до состояния на момент указанного сообщения пользователя. Передайте `{ dryRun: true }` для предварительного просмотра изменений. Требует `enableFileCheckpointing: true`. См. [Чекпоинты файлов](/docs/ru/agent-sdk/file-checkpointing) |

738| `setPermissionMode()` | Изменяет режим разрешений (доступен только в режиме потокового ввода) |738| `setPermissionMode()` | Изменяет режим разрешений (доступен только в режиме потокового ввода) |

739| `setModel()` | Изменяет модель (доступен только в режиме потокового ввода). Передача `undefined` или строки `"default"` сбрасывает модель на [модель Claude Code по умолчанию](/docs/ru/model-config) |739| `setModel()` | Изменяет модель (доступен только в режиме потокового ввода). Передача `undefined` или строки `"default"` сбрасывает модель на [модель Claude Code по умолчанию](/docs/ru/model-config). Сессия в режиме `auto` [переключается в режим `default`](/docs/ru/agent-sdk/permissions#auto-mode-auto), если новая модель не поддерживает авторежим |

740| `setMaxThinkingTokens()` | *Устарело:* используйте параметр `thinking`. Изменяет максимальное число токенов мышления. Передача `null` сбрасывает мышление к значению сессии по умолчанию: переопределение, сделанное в ходе сессии, удаляется, а в сессиях, где мышление отключено, оно остаётся выключенным |740| `setMaxThinkingTokens()` | *Устарело:* используйте параметр `thinking`. Изменяет максимальное число токенов мышления. Передача `null` сбрасывает мышление к значению сессии по умолчанию: переопределение, сделанное в ходе сессии, удаляется, а в сессиях, где мышление отключено, оно остаётся выключенным |

741| `applyFlagSettings(settings)` | Объединяет настройки с уровнем настроек флагов сессии во время выполнения (доступен только в режиме потокового ввода). См. [`applyFlagSettings()`](#applyflagsettings) |741| `applyFlagSettings(settings)` | Объединяет настройки с уровнем настроек флагов сессии во время выполнения (доступен только в режиме потокового ввода). См. [`applyFlagSettings()`](#applyflagsettings) |

742| `updateSettings(source, settings)` | Записывает один ключ из разрешённого списка в локальный файл настроек проекта или в ваш пользовательский файл настроек, чтобы значение сохранялось для последующих сессий. См. [`updateSettings()`](#updatesettings). Требуется TypeScript SDK v0.3.257 или новее, который включает Claude Code v2.1.257 |742| `updateSettings(source, settings)` | Записывает один ключ из разрешённого списка в локальный файл настроек проекта или в ваш пользовательский файл настроек, чтобы значение сохранялось для последующих сессий. См. [`updateSettings()`](#updatesettings). Требуется TypeScript SDK v0.3.257 или новее, который включает Claude Code v2.1.257 |


6368| Свойство | Тип | По умолчанию | Описание |6368| Свойство | Тип | По умолчанию | Описание |

6369| :- | :- | :- | :- |6369| :- | :- | :- | :- |

6370| `allowWrite` | `string[]` | `[]` | Паттерны путей файлов для разрешения доступа на запись |6370| `allowWrite` | `string[]` | `[]` | Паттерны путей файлов для разрешения доступа на запись |

6371| `denyWrite` | `string[]` | `[]` | Паттерны путей файлов для запрещения доступа на запись. Чтобы заблокировать запись из песочницы в файл в рабочем каталоге сессии, укажите его абсолютный путь. Если указать `.env` или `./.env`, команды в песочнице смогут записывать в файл `.env` в рабочем каталоге сессии |6371| `denyWrite` | `string[]` | `[]` | Паттерны путей файлов для запрещения доступа на запись. Чтобы заблокировать запись из песочницы в файл в рабочем каталоге сессии, укажите его абсолютный путь. |

6372| `denyRead` | `string[]` | `[]` | Паттерны путей файлов для запрещения доступа на чтение |6372| `denyRead` | `string[]` | `[]` | Паттерны путей файлов для запрещения доступа на чтение |

6373 6373 

6374<h3 id="permissions-fallback-for-unsandboxed-commands">6374<h3 id="permissions-fallback-for-unsandboxed-commands">

agent-view.md +2 −2

Details

738[Режим разрешений](/docs/ru/permissions) зависит от того, как вы запустили сессию:738[Режим разрешений](/docs/ru/permissions) зависит от того, как вы запустили сессию:

739 739 

740* **Отправлена в фон с помощью `/bg` или `←`**: Claude Code сохраняет режим разрешений, в котором находилась сессия, поэтому сессия, переключённая вами на `acceptEdits` или `auto`, остаётся в нём после отключения740* **Отправлена в фон с помощью `/bg` или `←`**: Claude Code сохраняет режим разрешений, в котором находилась сессия, поэтому сессия, переключённая вами на `acceptEdits` или `auto`, остаётся в нём после отключения

741* **Отправлена из agent view, открытого с помощью `←`**: сначала применяется собственная конфигурация целевого каталога, а режим разрешений исходной сессии применяется, если больше ничто его не задаёт741* **Отправлена из agent view, открытого с помощью `←`**: Claude Code берёт режим разрешений новой сессии сначала из конфигурации целевого каталога, а затем из исходной сессии

742* **Отправлена из `claude agents`, запущенного в оболочке, или с помощью `claude --bg`**: новая сессия запускается так же, как новая сессия `claude` в этом каталоге, если только вы не отправили её из agent view, открытого со [значениями по умолчанию для отправки](#dispatch-defaults). Порядок приведён в разделе [В каком режиме разрешений запускается сессия](/docs/ru/permission-modes#which-mode-a-session-starts-in)742* **Отправлена из `claude agents`, запущенного в оболочке, или с помощью `claude --bg`**: новая сессия запускается так же, как новая сессия `claude` в этом каталоге, если только вы не отправили её из agent view, открытого со [значениями по умолчанию для отправки](#dispatch-defaults). Порядок приведён в разделе [В каком режиме разрешений запускается сессия](/docs/ru/permission-modes#which-mode-a-session-starts-in)

743 743 

744Для сессии, отправленной из agent view, открытого с помощью `←`, Claude Code берёт режим разрешений из первого подходящего источника:744Для сессии, отправленной из agent view, открытого с помощью `←`, Claude Code берёт режим разрешений из первого подходящего источника:


7461. [`permissions.defaultMode`](/docs/ru/settings-reference#permissions-defaultmode) целевого каталога. Действуют два правила об источниках:7461. [`permissions.defaultMode`](/docs/ru/settings-reference#permissions-defaultmode) целевого каталога. Действуют два правила об источниках:

747 * `auto` и `bypassPermissions` [вступают в силу только из управляемых настроек, файла `--settings` или `~/.claude/settings.json`](/docs/ru/settings-reference#permissions-defaultmode).747 * `auto` и `bypassPermissions` [вступают в силу только из управляемых настроек, файла `--settings` или `~/.claude/settings.json`](/docs/ru/settings-reference#permissions-defaultmode).

748 * Claude Code отклоняет `defaultMode` из файлов `.claude/settings.json` или `.claude/settings.local.json` проекта, если он выбирает более разрешительный режим, чем тот, в котором находилась исходная сессия.748 * Claude Code отклоняет `defaultMode` из файлов `.claude/settings.json` или `.claude/settings.local.json` проекта, если он выбирает более разрешительный режим, чем тот, в котором находилась исходная сессия.

7492. Режим разрешений исходной сессии7492. Режим разрешений исходной сессии. Если эта сессия находилась в режиме `bypassPermissions`, новая сессия может вместо этого запуститься в режиме Manual с уведомлением `Bypass permissions was requested at launch and ignored`. Это происходит, когда ваше согласие с предупреждением об обходе разрешений зафиксировано только в `.claude/settings.local.json` или в файле `--settings`. Продолжите работу в режиме Manual или [добавьте это согласие в `~/.claude/settings.json`](/docs/ru/permission-modes#bypass-permissions-acceptance).

750 750 

751Когда Claude Code отклоняет режим источника как слишком разрешительный, решение принимает следующий источник в списке. Например, если вы отправляете сессию из сессии в режиме планирования в каталог, в зафиксированных в репозитории настройках которого запрошен `acceptEdits`, новая сессия запускается в режиме планирования. Если перенести этот `defaultMode` в `~/.claude/settings.json`, он применяется независимо от режима разрешений исходной сессии.751Когда Claude Code отклоняет режим источника как слишком разрешительный, решение принимает следующий источник в списке. Например, если вы отправляете сессию из сессии в режиме планирования в каталог, в зафиксированных в репозитории настройках которого запрошен `acceptEdits`, новая сессия запускается в режиме планирования. Если перенести этот `defaultMode` в `~/.claude/settings.json`, он применяется независимо от режима разрешений исходной сессии.

752 752 

Details

84| `--continue`, `-c` | Загрузить самый последний диалог в текущем каталоге, включая [завершившуюся фоновую сессию](/docs/ru/sessions#where-the-session-picker-looks); для открытия завершившихся фоновых сессий требуется Claude Code v2.1.257 или новее. Пропускает сессии, созданные с помощью `claude -p` или Agent SDK, а также сессии, первым промптом которых был `/loop`. `claude -p --continue` включает сессии `-p`, SDK и `/loop`. Включает сессии, которые добавили этот каталог с помощью `/add-dir` | `claude --continue` |84| `--continue`, `-c` | Загрузить самый последний диалог в текущем каталоге, включая [завершившуюся фоновую сессию](/docs/ru/sessions#where-the-session-picker-looks); для открытия завершившихся фоновых сессий требуется Claude Code v2.1.257 или новее. Пропускает сессии, созданные с помощью `claude -p` или Agent SDK, а также сессии, первым промптом которых был `/loop`. `claude -p --continue` включает сессии `-p`, SDK и `/loop`. Включает сессии, которые добавили этот каталог с помощью `/add-dir` | `claude --continue` |

85| `--dangerously-load-development-channels` | Включить [каналы](/docs/ru/channels-reference#test-during-the-research-preview), которых нет в утверждённом списке разрешённых, для локальной разработки. Принимает записи `plugin:<name>@<marketplace>` и `server:<name>`. Запрашивает подтверждение, поэтому действует в интерактивных сессиях. С `-p` Claude Code игнорирует этот флаг | `claude --dangerously-load-development-channels server:webhook` |85| `--dangerously-load-development-channels` | Включить [каналы](/docs/ru/channels-reference#test-during-the-research-preview), которых нет в утверждённом списке разрешённых, для локальной разработки. Принимает записи `plugin:<name>@<marketplace>` и `server:<name>`. Запрашивает подтверждение, поэтому действует в интерактивных сессиях. С `-p` Claude Code игнорирует этот флаг | `claude --dangerously-load-development-channels server:webhook` |

86| `--dangerously-skip-permissions` | Пропустить запросы разрешения. Эквивалентно `--permission-mode bypassPermissions`. См. [режимы разрешения](/docs/ru/permission-modes#skip-all-checks-with-bypasspermissions-mode) для информации о том, что это пропускает и что не пропускает. Для сеансов, запущенных с `--bg`, режим [сохраняется при перезапуске сеанса супервизором](/docs/ru/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |86| `--dangerously-skip-permissions` | Пропустить запросы разрешения. Эквивалентно `--permission-mode bypassPermissions`. См. [режимы разрешения](/docs/ru/permission-modes#skip-all-checks-with-bypasspermissions-mode) для информации о том, что это пропускает и что не пропускает. Для сеансов, запущенных с `--bg`, режим [сохраняется при перезапуске сеанса супервизором](/docs/ru/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |

87| `--debug` | Включить режим отладки с дополнительной фильтрацией категорий, такой как `--debug='mcp,startup'` или `--debug='!1p'`. Фильтр привязывается только в форме `=`; разделённый пробелом фильтр включает режим отладки без фильтрации | `claude --debug='mcp,startup'` |87| `--debug` | Включить режим отладки с необязательной фильтрацией по категориям, например `--debug='mcp,startup'` или `--debug='!mcp'`. Фильтр применяется только в форме с `=`; фильтр, указанный через пробел, включает режим отладки без фильтрации | `claude --debug='mcp,startup'` |

88| `--debug-file <path>` | Записать журналы отладки в конкретный путь файла. Неявно включает режим отладки. Имеет приоритет над `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |88| `--debug-file <path>` | Записать журналы отладки в конкретный путь файла. Неявно включает режим отладки. Имеет приоритет над `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |

89| `--desktop` | Открыть [приложение Claude Desktop](/docs/ru/desktop) в текущем каталоге и выйти без запуска сеанса в терминале. Добавьте `--continue` или `--resume` с ID сеанса для [открытия этого сеанса в Desktop](/docs/ru/desktop#coming-from-the-cli) вместо этого. `--resume` здесь принимает только ID сеанса, не имя или путь транскрипта. Не принимает приглашение и никакие другие флаги, кроме `--verbose` и флагов `--debug`, так как приложение само запускает сеанс. Доступно на macOS и x64 Windows, когда вы вошли с подпиской Claude. Требует Claude Code v2.1.285 или позже | `claude --desktop` |89| `--desktop` | Открыть [приложение Claude Desktop](/docs/ru/desktop) в текущем каталоге и выйти без запуска сеанса в терминале. Добавьте `--continue` или `--resume` с ID сеанса для [открытия этого сеанса в Desktop](/docs/ru/desktop#coming-from-the-cli) вместо этого. `--resume` здесь принимает только ID сеанса, не имя или путь транскрипта. Не принимает приглашение и никакие другие флаги, кроме `--verbose` и флагов `--debug`, так как приложение само запускает сеанс. Доступно на macOS и x64 Windows, когда вы вошли с подпиской Claude. Требует Claude Code v2.1.285 или позже | `claude --desktop` |

90| `--disable-slash-commands` | Отключить все skills и команды для этого сеанса | `claude --disable-slash-commands` |90| `--disable-slash-commands` | Отключить все skills и команды для этого сеанса | `claude --disable-slash-commands` |

costs.md +1 −1

Details

429Сессия, которая была открыта в течение часов, может использовать намного больше лимитов вашего плана, чем предполагает ваша активность, обычно по одной из этих причин:429Сессия, которая была открыта в течение часов, может использовать намного больше лимитов вашего плана, чем предполагает ваша активность, обычно по одной из этих причин:

430 430 

431* **Длинный контекст**: Claude Code отправляет вашу полную беседу с каждым запросом, и каждый раз, когда Claude использует инструменты, он отправляет ещё один запрос с этой партией результатов инструментов. С [prompt caching](/docs/ru/prompt-caching) Claude Code перечитывает эту историю по [кэшированному тарифу токенов](https://platform.claude.com/docs/en/about-claude/pricing), поэтому однострочный вопрос в сессии, которая была открыта весь день, всё равно потребляет использование для всей беседы. См. [Управляйте контекстом проактивно](#manage-context-proactively) для способов сохранения вашего контекста в малом размере431* **Длинный контекст**: Claude Code отправляет вашу полную беседу с каждым запросом, и каждый раз, когда Claude использует инструменты, он отправляет ещё один запрос с этой партией результатов инструментов. С [prompt caching](/docs/ru/prompt-caching) Claude Code перечитывает эту историю по [кэшированному тарифу токенов](https://platform.claude.com/docs/en/about-claude/pricing), поэтому однострочный вопрос в сессии, которая была открыта весь день, всё равно потребляет использование для всей беседы. См. [Управляйте контекстом проактивно](#manage-context-proactively) для способов сохранения вашего контекста в малом размере

432* **Промахи кэша**: ваше первое сообщение после перерыва, превышающего [время жизни кэша](/docs/ru/prompt-caching#cache-lifetime), промахивает кэш и переобрабатывает ваш полный контекст. Время жизни составляет один час на подписке и снижается до пяти минут, когда вы используете [кредиты использования](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans); на API ключе или облачном провайдере это пять минут по умолчанию. Чтобы сохранить время жизни в один час при использовании кредитов использования, [выберите TTL самостоятельно](/docs/ru/prompt-caching#choose-the-ttl-yourself). На планах Pro и Max, когда вы возобновляете большую сессию после длительного перерыва, Claude Code [предлагает возобновить с резюме](/docs/ru/sessions#resume-from-a-summary), чтобы более поздние запросы не несли полную историю432* **Промахи кэша**: ваше первое сообщение после перерыва, превышающего [время жизни кэша](/docs/ru/prompt-caching#cache-lifetime), промахивает кэш и переобрабатывает ваш полный контекст. Время жизни составляет один час на подписке и снижается до пяти минут, когда вы используете [кредиты использования](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans); на API-ключе или облачном провайдере это пять минут по умолчанию. Чтобы сохранить время жизни в один час при использовании кредитов, [выберите TTL самостоятельно](/docs/ru/prompt-caching#choose-the-ttl-yourself)

433* **Запланированные задачи**: [запланированная задача](/docs/ru/scheduled-tasks) срабатывает по своему интервалу даже во время простоя сессии, отправляя ваш полный контекст каждый раз433* **Запланированные задачи**: [запланированная задача](/docs/ru/scheduled-tasks) срабатывает по своему интервалу даже во время простоя сессии, отправляя ваш полный контекст каждый раз

434* **Сообщения между сессиями**: Claude Code доставляет [сообщение из другой вашей сессии](/docs/ru/cross-session-messaging) как новый ход, когда эта сессия находится в режиме ожидания, отправляя ваш полный контекст каждый раз. Чтобы удерживать входящие сообщения вместо их доставки, установите [`crossSessionInbound`](/docs/ru/settings-reference#crosssessioninbound) на `hold`434* **Сообщения между сессиями**: Claude Code доставляет [сообщение из другой вашей сессии](/docs/ru/cross-session-messaging) как новый ход, когда эта сессия находится в режиме ожидания, отправляя ваш полный контекст каждый раз. Чтобы удерживать входящие сообщения вместо их доставки, установите [`crossSessionInbound`](/docs/ru/settings-reference#crosssessioninbound) на `hold`

435* **Проверки целей**: пока фоновая работа держит активную [цель](/docs/ru/goal) в ожидании, Claude Code [просит Claude проверить эту работу](/docs/ru/goal#background-work-defers-evaluation) даже когда сессия находится в режиме ожидания, начиная новый ход, который отправляет ваш полный контекст. Claude Code начинает максимум три проверки в режиме ожидания на цель между вашими подсказками. До версии v2.1.246 проверки в режиме ожидания были неограниченными. Чтобы отключить проверки, установите [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/ru/env-vars) на `0`. Проверки в режиме ожидания требуют Claude Code v2.1.236 или позже435* **Проверки целей**: пока фоновая работа держит активную [цель](/docs/ru/goal) в ожидании, Claude Code [просит Claude проверить эту работу](/docs/ru/goal#background-work-defers-evaluation) даже когда сессия находится в режиме ожидания, начиная новый ход, который отправляет ваш полный контекст. Claude Code начинает максимум три проверки в режиме ожидания на цель между вашими подсказками. До версии v2.1.246 проверки в режиме ожидания были неограниченными. Чтобы отключить проверки, установите [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/ru/env-vars) на `0`. Проверки в режиме ожидания требуют Claude Code v2.1.236 или позже

env-vars.md +1 −1

Details

196| `ANTHROPIC_VERTEX_PROJECT_ID` | ID проекта GCP, которому адресуются запросы Google Cloud's Agent Platform. См. [Настройка учётных данных GCP](/docs/ru/google-vertex-ai#3-configure-gcp-credentials) |196| `ANTHROPIC_VERTEX_PROJECT_ID` | ID проекта GCP, которому адресуются запросы Google Cloud's Agent Platform. См. [Настройка учётных данных GCP](/docs/ru/google-vertex-ai#3-configure-gcp-credentials) |

197| `ANTHROPIC_WORKSPACE_ID` | ID рабочего пространства для [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). Задайте её, если ваше правило федерации охватывает более одного рабочего пространства, чтобы при обмене токенов было известно, какое рабочее пространство использовать |197| `ANTHROPIC_WORKSPACE_ID` | ID рабочего пространства для [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). Задайте её, если ваше правило федерации охватывает более одного рабочего пространства, чтобы при обмене токенов было известно, какое рабочее пространство использовать |

198| `API_FORCE_IDLE_TIMEOUT` | Переопределяет 5-минутный таймаут простоя тела ответа, который прерывает потоковый ответ модели, если байты не поступают. Установите `0`, чтобы отключить таймаут, например когда медленный [шлюз](/docs/ru/llm-gateway) или локальная модель делает паузы между фрагментами дольше 5 минут, или `1`, чтобы оставить его включённым для всех провайдеров. Если не задана, таймаут активен у провайдеров, кроме прямого Anthropic API, [Claude Platform on AWS](/docs/ru/claude-platform-on-aws) и Amazon Bedrock с установленной `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`. [Сторожевые механизмы потока](/docs/ru/network-config#streaming-idle-watchdogs) работают независимо от него и прерывают длительную паузу без данных, даже если здесь установлено `0` |198| `API_FORCE_IDLE_TIMEOUT` | Переопределяет 5-минутный таймаут простоя тела ответа, который прерывает потоковый ответ модели, если байты не поступают. Установите `0`, чтобы отключить таймаут, например когда медленный [шлюз](/docs/ru/llm-gateway) или локальная модель делает паузы между фрагментами дольше 5 минут, или `1`, чтобы оставить его включённым для всех провайдеров. Если не задана, таймаут активен у провайдеров, кроме прямого Anthropic API, [Claude Platform on AWS](/docs/ru/claude-platform-on-aws) и Amazon Bedrock с установленной `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`. [Сторожевые механизмы потока](/docs/ru/network-config#streaming-idle-watchdogs) работают независимо от него и прерывают длительную паузу без данных, даже если здесь установлено `0` |

199| `API_TIMEOUT_MS` | Таймаут запросов API в миллисекундах (по умолчанию: 600000, или 10 минут; максимум: 2147483647). Увеличьте его, если запросы завершаются по таймауту в медленных сетях или при маршрутизации через прокси. Значения выше максимума переполняют базовый таймер и приводят к немедленному сбою запросов |199| `API_TIMEOUT_MS` | Таймаут для API-запросов в миллисекундах (по умолчанию: 600000, или 10 минут; максимум: 2147483647). Потоковый запрос должен получить заголовки ответа в пределах этого времени. Увеличьте значение, если запросы завершаются по таймауту в медленных сетях или при маршрутизации через прокси |

200| `AWS_BEARER_TOKEN_BEDROCK` | API-ключ Amazon Bedrock для аутентификации (см. [API-ключи Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |200| `AWS_BEARER_TOKEN_BEDROCK` | API-ключ Amazon Bedrock для аутентификации (см. [API-ключи Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |

201| `BASH_DEFAULT_TIMEOUT_MS` | Таймаут по умолчанию для команды инструмента Bash или PowerShell на переднем плане, в миллисекундах (по умолчанию: 120000, или 2 минуты). Значение выше [ограничения времени по умолчанию для фоновых команд](/docs/ru/tools-reference#time-limit-for-background-commands) заменяет это значение по умолчанию в автономных сессиях. Ограничение времени для фоновых команд требует Claude Code v2.1.285 или новее |201| `BASH_DEFAULT_TIMEOUT_MS` | Таймаут по умолчанию для команды инструмента Bash или PowerShell на переднем плане, в миллисекундах (по умолчанию: 120000, или 2 минуты). Значение выше [ограничения времени по умолчанию для фоновых команд](/docs/ru/tools-reference#time-limit-for-background-commands) заменяет это значение по умолчанию в автономных сессиях. Ограничение времени для фоновых команд требует Claude Code v2.1.285 или новее |

202| `BASH_MAX_OUTPUT_LENGTH` | Максимальное количество символов вывода bash, которые Claude Code считывает в результат команды (по умолчанию: 30000; максимум: 150000). Если задана настройка [`bashOutputMaxChars`](/docs/ru/settings-reference#bashoutputmaxchars), Claude Code игнорирует эту переменную. См. [Ограничения вывода](/docs/ru/tools-reference#output-limits) |202| `BASH_MAX_OUTPUT_LENGTH` | Максимальное количество символов вывода bash, которые Claude Code считывает в результат команды (по умолчанию: 30000; максимум: 150000). Если задана настройка [`bashOutputMaxChars`](/docs/ru/settings-reference#bashoutputmaxchars), Claude Code игнорирует эту переменную. См. [Ограничения вывода](/docs/ru/tools-reference#output-limits) |

errors.md +3 −1

Details

346| `Can't open — this session is running in another terminal` | [Background session errors](#this-session-is-running-in-another-terminal) |346| `Can't open — this session is running in another terminal` | [Background session errors](#this-session-is-running-in-another-terminal) |

347| `This conversation is already open in another running Claude session` | [Background session errors](#this-session-is-running-in-another-terminal) |347| `This conversation is already open in another running Claude session` | [Background session errors](#this-session-is-running-in-another-terminal) |

348| `This session's saved conversation is no longer on disk` | [Background session errors](#this-sessions-saved-conversation-is-no-longer-on-disk) |348| `This session's saved conversation is no longer on disk` | [Background session errors](#this-sessions-saved-conversation-is-no-longer-on-disk) |

349| `Bypass permissions was requested at launch and ignored` | [Пропуск всех проверок в режиме bypassPermissions](/docs/ru/permission-modes#bypass-permissions-acceptance) |

349| `kept <id> — its worktree is still at <path>` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |350| `kept <id> — its worktree is still at <path>` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |

350| `kept <id> — <n> unpushed commits on <branch>` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |351| `kept <id> — <n> unpushed commits on <branch>` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |

351| `kept <id> — worktree has commits that are not pushed anywhere` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |352| `kept <id> — worktree has commits that are not pushed anywhere` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |


418* Разорванные соединения. Когда соединение разрывается в середине запроса до того, как Claude завершит какую-либо часть своего ответа, включая его размышления, Claude Code повторно отправляет запрос с той же задержкой и ход продолжается, даже если некоторый текст уже начал передаваться потоком. Когда оно разрывается после того, как Claude завершил размышления, но до того, как он начал какой-либо текст или вызов инструмента, Claude Code вместо этого повторно отправляет запрос до двух раз в быстрой последовательности и завершает ход с `Connection lost before a response was produced`, если соединение продолжает разрываться в этот момент.419* Разорванные соединения. Когда соединение разрывается в середине запроса до того, как Claude завершит какую-либо часть своего ответа, включая его размышления, Claude Code повторно отправляет запрос с той же задержкой и ход продолжается, даже если некоторый текст уже начал передаваться потоком. Когда оно разрывается после того, как Claude завершил размышления, но до того, как он начал какой-либо текст или вызов инструмента, Claude Code вместо этого повторно отправляет запрос до двух раз в быстрой последовательности и завершает ход с `Connection lost before a response was produced`, если соединение продолжает разрываться в этот момент.

419* Соединение, которое, как обнаружил Claude Code, было разорвано тем, что ваш компьютер перешёл в режим сна в середине запроса. Claude Code считает это разорванным соединением в соответствии с приведёнными выше правилами; как только метка повторной попытки назовёт конкретную причину, она будет читаться как `Connection lost while your computer was asleep`, и если ход завершается после того, как Claude завершил размышления, но до любого текста или вызова инструмента, сообщение читается как `Your computer went to sleep before a response was produced`.420* Соединение, которое, как обнаружил Claude Code, было разорвано тем, что ваш компьютер перешёл в режим сна в середине запроса. Claude Code считает это разорванным соединением в соответствии с приведёнными выше правилами; как только метка повторной попытки назовёт конкретную причину, она будет читаться как `Connection lost while your computer was asleep`, и если ход завершается после того, как Claude завершил размышления, но до любого текста или вызова инструмента, сообщение читается как `Your computer went to sleep before a response was produced`.

420* Застопорившийся поток ответа, когда заголовки ответа прибыли, но ни одна часть ответа Claude не прибыла, или когда Claude завершил размышления, но не начал какой-либо текст или вызов инструмента: Claude Code прерывает застопорившееся соединение и повторно отправляет запрос в потоковом режиме максимум один раз. Если ответ застопорится во второй раз после того, как Claude завершил размышления, но до любого текста или вызова инструмента, Claude Code завершает ход с `The response stalled before a response was produced`.421* Застопорившийся поток ответа, когда заголовки ответа прибыли, но ни одна часть ответа Claude не прибыла, или когда Claude завершил размышления, но не начал какой-либо текст или вызов инструмента: Claude Code прерывает застопорившееся соединение и повторно отправляет запрос в потоковом режиме максимум один раз. Если ответ застопорится во второй раз после того, как Claude завершил размышления, но до любого текста или вызова инструмента, Claude Code завершает ход с `The response stalled before a response was produced`.

421* Потоковый запрос, на который API никогда не отвечает заголовками ответа, на соединении, где [действует дедлайн первого байта](/docs/ru/network-config#streaming-idle-watchdogs): Claude Code прерывает его по истечении дедлайна и повторно отправляет его максимум один раз за запрос модели, в пределах бюджета повторных попыток, затем завершает ход с [No response from API](#no-response-from-api), если эта попытка также остаётся без ответа. На других соединениях запрос ждёт `API_TIMEOUT_MS`. Когда вы устанавливаете `CLAUDE_CODE_RETRY_WATCHDOG`, ограничение на одну повторную попытку не применяется.422* Потоковый запрос, на который API никогда не отвечает заголовками ответа, на соединении, где [действует дедлайн первого байта](/docs/ru/network-config#streaming-idle-watchdogs): Claude Code прерывает его по истечении дедлайна и повторно отправляет его максимум один раз за запрос модели, в пределах бюджета повторных попыток, затем завершает ход с [No response from API](#no-response-from-api), если эта попытка также остаётся без ответа. Когда вы устанавливаете `CLAUDE_CODE_RETRY_WATCHDOG`, ограничение на одну повторную попытку не применяется.

422* Потоковый ответ, который выходной фильтр содержимого API останавливает до того, как Claude либо завершил размышления, либо начал какой-либо текст или вызов инструмента. Claude Code повторно отправляет запрос один раз, в пределах бюджета повторных попыток, и показывает [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy), если фильтр останавливает и второй ответ.423* Потоковый ответ, который выходной фильтр содержимого API останавливает до того, как Claude либо завершил размышления, либо начал какой-либо текст или вызов инструмента. Claude Code повторно отправляет запрос один раз, в пределах бюджета повторных попыток, и показывает [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy), если фильтр останавливает и второй ответ.

423* Временные дроссели 429, но не `429` лимита расходов шлюза, который не является дросселем; см. [Spend limit reached](#spend-limit-reached).424* Временные дроссели 429, но не `429` лимита расходов шлюза, который не является дросселем; см. [Spend limit reached](#spend-limit-reached).

424 * Когда вы вошли с подпиской claude.ai, это включает дроссели 429, которые не содержат заголовков квоты вашего плана. До v2.1.199 Claude Code повторял эти дроссели только при входе с API-ключом и через Enterprise.425 * Когда вы вошли с подпиской claude.ai, это включает дроссели 429, которые не содержат заголовков квоты вашего плана. До v2.1.199 Claude Code повторял эти дроссели только при входе с API-ключом и через Enterprise.


4552 4553 

4553* Исправьте каждую запись, которую называет ошибка, в соответствии с [инструментами, доступными субагентам](/docs/ru/sub-agents#available-tools)4554* Исправьте каждую запись, которую называет ошибка, в соответствии с [инструментами, доступными субагентам](/docs/ru/sub-agents#available-tools)

4554* Удалите записи для инструментов, которых нет в сессии, например инструменты MCP с MCP-сервера, который не подключён4555* Удалите записи для инструментов, которых нет в сессии, например инструменты MCP с MCP-сервера, который не подключён

4556* Если запись называет подключённый MCP-сервер, сравните запись с именем этого сервера в том виде, в каком оно записано в [именах инструментов](/docs/ru/permissions#mcp) сервера, например `reports__v2` в `mcp__reports__v2__get_totals`. Для этого сервера укажите `mcp__reports__v2__*`, то есть `mcp__`, за которым следуют полное имя и `__*`. С более коротким `mcp__reports`, которое называет сервер с именем `reports`, субагент не получит ни одного из инструментов `reports__v2`

4555* Для инструмента, который [фоновые субагенты отбрасывают](/docs/ru/sub-agents#available-tools), например `CronCreate`, удалите запись. Чтобы сохранить инструмент, [отключите режим fork](/docs/ru/sub-agents#turn-fork-mode-on-or-off) и попросите Claude запустить субагента на переднем плане4557* Для инструмента, который [фоновые субагенты отбрасывают](/docs/ru/sub-agents#available-tools), например `CronCreate`, удалите запись. Чтобы сохранить инструмент, [отключите режим fork](/docs/ru/sub-agents#turn-fork-mode-on-or-off) и попросите Claude запустить субагента на переднем плане

4556* Удалите поле `tools` вместо перечисления инструментов, чтобы дать субагенту каждый [инструмент, доступный субагентам](/docs/ru/sub-agents#available-tools)4558* Удалите поле `tools` вместо перечисления инструментов, чтобы дать субагенту каждый [инструмент, доступный субагентам](/docs/ru/sub-agents#available-tools)

4557* Для списка `tools`, содержащего только `Agent`, повысьте [предел глубины](/docs/ru/sub-agents#let-subagents-spawn-their-own-subagents) или дайте агенту хотя бы один другой инструмент: Claude Code скрывает `Agent` на этом пределе, поэтому список, в котором больше ничего нет, разрешается в отсутствие инструментов4559* Для списка `tools`, содержащего только `Agent`, повысьте [предел глубины](/docs/ru/sub-agents#let-subagents-spawn-their-own-subagents) или дайте агенту хотя бы один другой инструмент: Claude Code скрывает `Agent` на этом пределе, поэтому список, в котором больше ничего нет, разрешается в отсутствие инструментов

hooks.md +53 −16

Details

476| `async` | нет | Если `true`, запускается в фоне без блокировки. См. [Run hooks in the background](#run-hooks-in-the-background) |476| `async` | нет | Если `true`, запускается в фоне без блокировки. См. [Run hooks in the background](#run-hooks-in-the-background) |

477| `asyncRewake` | нет | Если `true`, запускается в фоне и пробуждает Claude при коде выхода 2. Hook stderr или stdout, если stderr пусто, показывается Claude как [системное напоминание](/docs/ru/glossary#system-reminder) чтобы он мог реагировать на долгоживущий фоновый сбой |477| `asyncRewake` | нет | Если `true`, запускается в фоне и пробуждает Claude при коде выхода 2. Hook stderr или stdout, если stderr пусто, показывается Claude как [системное напоминание](/docs/ru/glossary#system-reminder) чтобы он мог реагировать на долгоживущий фоновый сбой |

478| `shell` | нет | Оболочка для использования для этого hook. Принимает `"bash"` или `"powershell"`. По умолчанию `"bash"`, или `"powershell"` на Windows когда Git Bash не установлен. Установка `"powershell"` запускает команду через PowerShell на Windows. Не требует `CLAUDE_CODE_USE_POWERSHELL_TOOL`, так как hooks порождают PowerShell напрямую. Игнорируется когда установлен `args` |478| `shell` | нет | Оболочка для использования для этого hook. Принимает `"bash"` или `"powershell"`. По умолчанию `"bash"`, или `"powershell"` на Windows когда Git Bash не установлен. Установка `"powershell"` запускает команду через PowerShell на Windows. Не требует `CLAUDE_CODE_USE_POWERSHELL_TOOL`, так как hooks порождают PowerShell напрямую. Игнорируется когда установлен `args` |

479| `onFailure` | нет | Что происходит с действием при сбое хука: `"continue"` (по умолчанию) или `"block"`. См. [Блокировка действия при сбое хука](#block-the-action-when-a-hook-fails). Требует Claude Code v2.1.295 или новее |479| `onFailure` | нет | Выполняется ли действие, вызвавшее хук, при сбое хука: `"continue"` или `"block"`. О значении `"block"` и о случае, когда поле не задано, см. [Блокировка действия при сбое хука](#block-the-action-when-a-hook-fails). Требует Claude Code v2.1.295 или новее |

480 480 

481<a id="exec-form-and-shell-form" />481<a id="exec-form-and-shell-form" />

482 482 


829 829 

830* **Успех**: ваш хук завершается с кодом 0. Claude Code применяет все поля [вывода JSON](#json-output), которые вывел ваш хук, и действие выполняется, если эти поля не блокируют и не отклоняют его. Исключение описано в разделе [Хуки, запускающие фоновый процесс](#hooks-that-start-a-background-process).830* **Успех**: ваш хук завершается с кодом 0. Claude Code применяет все поля [вывода JSON](#json-output), которые вывел ваш хук, и действие выполняется, если эти поля не блокируют и не отклоняют его. Исключение описано в разделе [Хуки, запускающие фоновый процесс](#hooks-that-start-a-background-process).

831* **Блокирующая ошибка**: ваш хук завершается с кодом 2. Для [событий, которые могут блокировать](#exit-code-2-behavior-per-event), Claude Code останавливает действие.831* **Блокирующая ошибка**: ваш хук завершается с кодом 2. Для [событий, которые могут блокировать](#exit-code-2-behavior-per-event), Claude Code останавливает действие.

832* **Неблокирующая ошибка**: ваш хук завершается с любым другим кодом или завершается сбоем иным образом, например не запускается или выводит некорректный JSON. Действие выполняется, а для таких событий, как `PreToolUse`, в транскрипте отображается уведомление `<hook name> hook error`. Если вы хотите, чтобы хук, завершившийся сбоем, блокировал действие, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).832* **Неблокирующая ошибка**: ваш хук завершается с любым другим кодом или завершается сбоем иным образом, например не запускается или выводит некорректный JSON. Действие выполняется, за исключением хуков, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails), например хука с `onFailure`, установленным в `"block"`. Для таких событий, как `PreToolUse`, в транскрипте отображается уведомление `<hook name> hook error`.

833 833 

834То, что ваш хук выводит в stdout, может изменить результат. Например, если хук `PreToolUse` завершается с кодом 1, но выводит JSON, прошедший проверку, запуск считается успешным, и происходящее определяют поля JSON. Чтобы узнать результат вашего хука для такого события, как `PreToolUse`, найдите в первом столбце то, что он вывел в stdout, а в верхней строке — его код выхода:834То, что ваш хук выводит в stdout, может изменить результат. Например, если хук `PreToolUse` завершается с кодом 1, но выводит JSON, прошедший проверку, этот JSON всё равно может определить, что произойдёт. Чтобы узнать результат вашего хука для такого события, как `PreToolUse`, найдите в первом столбце то, что он вывел в stdout, а в верхней строке — его код выхода:

835 835 

836| Stdout | Выход с кодом 0 | Выход с кодом 2 | Любой другой код выхода |836| Stdout | Выход с кодом 0 | Выход с кодом 2 | Любой другой код выхода |

837| :- | :- | :- | :- |837| :- | :- | :- | :- |

838| Объект JSON, прошедший [проверку схемы](#json-output) | Успех. Поля применяются | Блокирующая ошибка. Claude Code всё равно читает поля, но они не могут переопределить блокировку | Успех. Claude Code игнорирует код выхода, и результат определяют только поля. При [`onFailure: "block"`](#block-the-action-when-a-hook-fails) это считается сбоем |838| Объект JSON, прошедший [проверку схемы](#json-output) | Успех. Поля применяются | Блокирующая ошибка. Claude Code всё равно читает поля, но они не могут переопределить блокировку | Успех. Claude Code игнорирует код выхода, и результат определяют только поля. Для хуков, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails), запуск вместо этого считается сбоем |

839| JSON, который [не удаётся разобрать](#exit-code-0) или который не прошёл проверку схемы | Неблокирующая ошибка. Уведомление содержит сообщение о разборе или проверке | Блокирующая ошибка. Причиной служит ваш stderr | Неблокирующая ошибка. Уведомление содержит сообщение о разборе или проверке |839| JSON, который [не удаётся разобрать](#exit-code-0) или который не прошёл проверку схемы | Неблокирующая ошибка. Уведомление содержит сообщение о разборе или проверке | Блокирующая ошибка. Причиной служит ваш stderr | Неблокирующая ошибка. Уведомление содержит сообщение о разборе или проверке |

840| [Обычный текст](#exit-code-0) или ничего | Успех | Блокирующая ошибка. Причиной служит ваш stderr | Неблокирующая ошибка. Уведомление содержит первую строку вашего stderr |840| [Обычный текст](#exit-code-0) или ничего | Успех | Блокирующая ошибка. Причиной служит ваш stderr | Неблокирующая ошибка. Уведомление содержит первую строку вашего stderr |

841 841 


864* **Две или более строк, каждая из которых по отдельности разбирается как JSON, причём первая начинается с `{`, а последняя заканчивается `}`**: обычный текст, если ни одна строка не является объектом вывода JSON, задающим какое-либо поле, и ошибка разбора, если такая строка есть.864* **Две или более строк, каждая из которых по отдельности разбирается как JSON, причём первая начинается с `{`, а последняя заканчивается `}`**: обычный текст, если ни одна строка не является объектом вывода JSON, задающим какое-либо поле, и ошибка разбора, если такая строка есть.

865* **Всё остальное, что начинается с `{` и заканчивается `}`, но не является корректным JSON**: ошибка разбора.865* **Всё остальное, что начинается с `{` и заканчивается `}`, но не является корректным JSON**: ошибка разбора.

866 866 

867Если Claude Code пытается разобрать ваш stdout как JSON и не может или разобранный объект не проходит [проверку схемы](#json-output), запуск считается [неблокирующей ошибкой](#exit-code-output). Уведомление `<hook name> hook error` содержит сообщение о разборе или проверке. Для событий, которые добавляют обычный текст из stdout как контекст, Claude Code не добавляет stdout, который ему не удалось разобрать.867Если хук не относится к тем, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails), ошибка разбора или разобранный объект, не прошедший [проверку схемы](#json-output), считается [неблокирующей ошибкой](#exit-code-output). Уведомление `<hook name> hook error` содержит сообщение о разборе или проверке. Для событий, которые добавляют обычный текст из stdout как контекст, Claude Code не добавляет stdout, который ему не удалось разобрать.

868 868 

869Claude никогда не видит stderr хука, завершившегося с кодом 0. Чтобы прочитать его самостоятельно для таких событий, как `PreToolUse`, включите [отладочное логирование](#debug-hooks). Чтобы передать предупреждение Claude из хука `PostToolUse` или `PostToolUseFailure`, вместо этого выйдите с кодом 2, чтобы [Claude увидел stderr](#exit-code-2-behavior-per-event), хотя инструмент уже выполнился.869Claude никогда не видит stderr хука, завершившегося с кодом 0. Чтобы прочитать его самостоятельно для таких событий, как `PreToolUse`, включите [отладочное логирование](#debug-hooks). Чтобы передать предупреждение Claude из хука `PostToolUse` или `PostToolUseFailure`, вместо этого выйдите с кодом 2, чтобы [Claude увидел stderr](#exit-code-2-behavior-per-event), хотя инструмент уже выполнился.

870 870 


907 Другие коды выхода907 Другие коды выхода

908</h4>908</h4>

909 909 

910Если ваш хук завершается с кодом, отличным от 0 или 2, и выводит в stdout обычный текст или ничего, запуск считается [неблокирующей ошибкой](#exit-code-output). В транскрипте отображается уведомление `<hook name> hook error` с `Failed with non-blocking status code:` и первой строкой stderr вашего хука. Например, если хук `PreToolUse` для `Bash` выводит `something broke` в stderr и завершается с кодом 1, уведомление `PreToolUse:Bash hook error` содержит такую строку:910Если хук не относится к тем, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails), код выхода, отличный от 0 или 2, при обычном тексте или пустом выводе в stdout считается [неблокирующей ошибкой](#exit-code-output). Если действие выполняется, в транскрипте отображается уведомление `<hook name> hook error` с `Failed with non-blocking status code:` и первой строкой stderr вашего хука.

911 

912Например, если хук `PreToolUse` для `Bash` выводит `something broke` в stderr и завершается с кодом 1, уведомление `PreToolUse:Bash hook error` содержит такую строку:

911 913 

912```text theme={null}914```text theme={null}

913Failed with non-blocking status code: something broke915Failed with non-blocking status code: something broke


915 917 

916Чтобы получить полный stderr, а не только его первую строку, включите [отладочное логирование](#debug-hooks).918Чтобы получить полный stderr, а не только его первую строку, включите [отладочное логирование](#debug-hooks).

917 919 

918Хук, который не удаётся запустить, тоже считается неблокирующей ошибкой. В форме оболочки, если путь к скрипту не существует или файл не является исполняемым, оболочка завершается с кодом вроде 127, и уведомление содержит сообщение интерпретатора, например `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. Настраивая хук для политики, следите за этим уведомлением при его первом запуске, потому что опечатка в пути в `settings.json` означает, что хук никогда не выполнится. Чтобы вместо этого блокировать действие, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).920Если хук не относится к тем, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails), хук, который не удаётся запустить, тоже считается неблокирующей ошибкой. В форме оболочки, если путь к скрипту не существует или файл не является исполняемым, оболочка завершается с кодом вроде 127, и уведомление содержит сообщение интерпретатора. Например, если путь к скрипту не существует, уведомление содержит строку вроде этой:

921 

922```text theme={null}

923Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory

924```

925 

926Настраивая хук для политики, следите за этим уведомлением при его первом запуске, потому что опечатка в пути в `settings.json` означает, что хук никогда не выполнится. Чтобы блокировать действие, когда хук не удаётся запустить, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

919 927 

920<Warning>928<Warning>

921 Без корректного JSON в stdout Claude Code обрабатывает код выхода 1 как неблокирующую ошибку, хотя 1 — общепринятый код ошибки в Unix. Если ваш хук предназначен для соблюдения политики, используйте `exit 2`.929 Код выхода 1 без корректного вывода JSON является неблокирующей ошибкой, если хук не относится к тем, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails), хотя 1 — общепринятый код ошибки в Unix. Если ваш хук предназначен для соблюдения политики, используйте `exit 2`.

922</Warning>930</Warning>

923 931 

924<h4 id="timeouts">932<h4 id="timeouts">


929 937 

930Для [`PreModelSwitch`](#premodelswitch) хук, отменённый по таймауту, блокирует переключение модели. Для `PreToolUse` два семейства хуков ведут себя по-разному:938Для [`PreModelSwitch`](#premodelswitch) хук, отменённый по таймауту, блокирует переключение модели. Для `PreToolUse` два семейства хуков ведут себя по-разному:

931 939 

932* Хук `command`, `http` или `mcp_tool`, превысивший таймаут, не блокирует вызов инструмента. Вызов продолжается через обычный [процесс разрешений](/docs/ru/permissions), поэтому не рассчитывайте, что зависший хук сработает как защитный барьер. Чтобы блокировать вызов при превышении таймаута хуком `command` или `http`, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).940* Хук `command`, `http` или `mcp_tool`, превысивший таймаут, не блокирует вызов инструмента, за исключением хуков, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails). Вызов продолжается через обычный [процесс разрешений](/docs/ru/permissions), поэтому не рассчитывайте, что зависший хук сработает как защитный барьер. Чтобы блокировать вызов при превышении таймаута хуком `command` или `http`, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

933* [Callback-хук Agent SDK](/docs/ru/agent-sdk/hooks), превысивший свой таймаут, [блокирует вызов инструмента](#pretooluse).941* [Callback-хук Agent SDK](/docs/ru/agent-sdk/hooks), превысивший свой таймаут, [блокирует вызов инструмента](#pretooluse).

934 942 

935<h4 id="hooks-that-start-a-background-process">943<h4 id="hooks-that-start-a-background-process">


959 Блокировка действия при сбое хука967 Блокировка действия при сбое хука

960</h4>968</h4>

961 969 

962Для большинства событий, когда хук завершается сбоем или превышает таймаут, Claude Code всё равно выполняет действие, поэтому хук политики с неверным путём или падающим скриптом пропускает всё. Чтобы вместо этого блокировать действие, установите `"onFailure": "block"` для хука `command` или `http`. Значение по умолчанию — `"continue"`. Требуется Claude Code v2.1.295 или новее.970Для большинства событий, когда хук завершается сбоем или превышает таймаут, Claude Code всё равно выполняет действие. В результате хук политики с неверным путём или падающим скриптом пропускает всё. Чтобы вместо этого блокировать действие, установите `"onFailure": "block"` для хука `command` или `http`. Требуется Claude Code v2.1.295 или новее.

971 

972<Note>

973 В Windows без Git Bash командный хук `PreToolUse` или `PermissionRequest` в форме оболочки, завершившийся сбоем при незаданном `onFailure`, может вместо этого [заблокировать вызов инструмента](#failed-hooks-on-windows-without-git-bash).

974</Note>

963 975 

964Этот хук `PreToolUse` в `.claude/settings.json` запускает скрипт проекта перед каждой командой Bash и блокирует команду, если скрипт завершается сбоем:976Этот хук `PreToolUse` в `.claude/settings.json` запускает скрипт проекта перед каждой командой Bash и блокирует команду, если скрипт завершается сбоем:

965 977 


1007* **Хуки `Stop`, `SubagentStop`, `TaskCompleted` и `TeammateIdle`**: код выхода 2 для этих событий отправляет Claude продолжать работу, а Claude не может исправить хук, который не запускается1019* **Хуки `Stop`, `SubagentStop`, `TaskCompleted` и `TeammateIdle`**: код выхода 2 для этих событий отправляет Claude продолжать работу, а Claude не может исправить хук, который не запускается

1008* **Фоновые командные хуки**: командные хуки, в которых задано [`async` или `asyncRewake`](#run-hooks-in-the-background)1020* **Фоновые командные хуки**: командные хуки, в которых задано [`async` или `asyncRewake`](#run-hooks-in-the-background)

1009 1021 

1022<h4 id="failed-hooks-on-windows-without-git-bash">

1023 Сбой хуков в Windows без Git Bash

1024</h4>

1025 

1026Если ошибка заблокированного вызова инструмента содержит этот текст, командный хук `PreToolUse` или `PermissionRequest` завершился сбоем или превысил таймаут и заблокировал вызов:

1027 

1028```text theme={null}

1029blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.

1030```

1031 

1032Хук в форме оболочки без заданного `shell` выполняется в PowerShell, если Git Bash не установлен, а скрипт, написанный для Bash, может не работать там в исходном виде. Выберите исправление, подходящее для вашего хука:

1033 

1034* **Хук написан для Bash**: установите [Git for Windows](https://git-scm.com/downloads/win) или задайте [`CLAUDE_CODE_GIT_BASH_PATH`](/docs/ru/env-vars), если Git Bash установлен там, где Claude Code его не находит, а затем начните новую сессию

1035* **Хук запускает один файл `.exe`, а не файл `.cmd` или `.bat`**: укажите программу в `command`, а её аргументы в `args`, чтобы использовать [форму exec](#exec-form-and-shell-form), и добавьте [`"onFailure": "block"`](#block-the-action-when-a-hook-fails). Тогда Claude Code запускает программу без оболочки. Без `"onFailure": "block"` вызов может выполниться, если программа завершается сбоем, отсутствует или превышает таймаут

1036* **Хук написан для PowerShell**: добавьте в хук `"shell": "powershell"` и [`"onFailure": "block"`](#block-the-action-when-a-hook-fails). Без `"onFailure": "block"` вызов может выполниться, если хук по-прежнему завершается сбоем или превышает таймаут. Чтобы узнать причину сбоя хука, проверьте [отладочный лог](#debug-hooks)

1037* **Действие должно выполняться при сбое хука**: добавьте в хук `"onFailure": "continue"`

1038 

1039Для хука, который показывает эту ошибку, любой код выхода, отличный от 0 или 2, считается [сбоем](#block-the-action-when-a-hook-fails), даже если хук выводит JSON, который не отклоняет вызов.

1040 

1010<h4 id="exit-code-2-behavior-per-event">1041<h4 id="exit-code-2-behavior-per-event">

1011 Поведение кода выхода 2 для каждого события1042 Поведение кода выхода 2 для каждого события

1012</h4>1043</h4>


1060* **2xx с пустым телом**: успех, эквивалентно коду выхода 0 без вывода1091* **2xx с пустым телом**: успех, эквивалентно коду выхода 0 без вывода

1061* **2xx с телом в виде объекта JSON**: разбирается по той же схеме [вывода JSON](#json-output), что и для командных хуков. Тело, не прошедшее проверку схемы, является неблокирующей ошибкой1092* **2xx с телом в виде объекта JSON**: разбирается по той же схеме [вывода JSON](#json-output), что и для командных хуков. Тело, не прошедшее проверку схемы, является неблокирующей ошибкой

1062* **2xx с любым другим телом, например обычным текстом**: неблокирующая ошибка, обрабатывается так же, как статус не 2xx. Claude Code не добавляет текст в контекст Claude1093* **2xx с любым другим телом, например обычным текстом**: неблокирующая ошибка, обрабатывается так же, как статус не 2xx. Claude Code не добавляет текст в контекст Claude

1063* **Статус не 2xx**: неблокирующая ошибка, выполнение продолжается1094* **Статус не 2xx**: неблокирующая ошибка

1064* **Сбой соединения**: неблокирующая ошибка, выполнение продолжается1095* **Сбой соединения**: неблокирующая ошибка

1065* **Таймаут**: хук отменяется, как описано в разделе [Таймауты](#timeouts)1096* **Таймаут**: хук отменяется, как описано в разделе [Таймауты](#timeouts)

1066 1097 

1067HTTP-хуки не могут сигнализировать о блокирующей ошибке только через код состояния: статус не 2xx или сбой соединения является [неблокирующей ошибкой](#exit-code-output). Чтобы заблокировать вызов инструмента или отклонить разрешение, верните ответ 2xx с телом JSON, содержащим соответствующие поля решения. Чтобы блокировать действие, когда запрос завершается сбоем или возвращает статус не 2xx, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).1098После [неблокирующей ошибки](#exit-code-output) действие выполняется, если хук не относится к тем, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails). Чтобы заблокировать вызов инструмента или отклонить разрешение, верните ответ 2xx с телом JSON, содержащим соответствующие [поля решения](#decision-control). Чтобы блокировать действие, когда запрос завершается сбоем или возвращает статус не 2xx, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

1068 1099 

1069<h3 id="json-output">1100<h3 id="json-output">

1070 Вывод JSON1101 Вывод JSON


1573}1604}

1574```1605```

1575 1606 

1607Когда промпт — это введённый вами [скилл](/docs/ru/skills) или пользовательская команда, например `/deploy staging`, хук получает эту строку в том виде, в каком вы её ввели, а не развёрнутое содержимое скилла. Если хук блокирует промпт, команда не выполняется, поэтому shell-команды, которые скилл [вставляет с помощью `` !`<command>` ``](/docs/ru/skills#inject-dynamic-context), тоже не выполняются. Чтобы вместо этого сопоставлять имя или аргументы команды, используйте [UserPromptExpansion](#userpromptexpansion).

1608 

1576<h4 id="userpromptsubmit-decision-control">1609<h4 id="userpromptsubmit-decision-control">

1577 Управление решениями UserPromptSubmit1610 Управление решениями UserPromptSubmit

1578</h4>1611</h4>


2076 2109 

2077| Поле | Описание |2110| Поле | Описание |

2078| :- | :- |2111| :- | :- |

2079| `permissionDecision` | `"allow"` пропускает запрос разрешения, за исключением [действий, которые не одобряет автоматически ни один режим](/docs/ru/permission-modes#actions-no-mode-auto-approves), [чтения по сетевым путям](/docs/ru/permissions#network-paths), а также `AskUserQuestion` и `ExitPlanMode`, для которых нужен [`updatedInput` в паре с ним](#allow-with-updatedinput). `"deny"` предотвращает вызов инструмента. `"ask"` просит пользователя подтвердить. `"defer"` корректно завершает работу, чтобы инструмент можно было возобновить позже. [Правила запрета и запроса](/docs/ru/permissions#manage-permissions) всё равно оцениваются независимо от того, что возвращает хук |2112| `permissionDecision` | `"allow"` пропускает запрос разрешения, кроме [действий, которые не подтверждаются автоматически ни в одном режиме](/docs/ru/permission-modes#actions-no-mode-auto-approves), и [чтения по сетевым путям](/docs/ru/permissions#network-paths). `AskUserQuestion` и `ExitPlanMode` требуют [`updatedInput` в паре с `"allow"`](#allow-with-updatedinput). Для режима планирования см. [Подтверждения хуками в режиме планирования](/docs/ru/permissions#hook-approvals-in-plan-mode). `"deny"` предотвращает вызов инструмента. `"ask"` запрашивает подтверждение у пользователя. `"defer"` корректно завершает работу, чтобы инструмент можно было возобновить позже. [Правила запрета и подтверждения](/docs/ru/permissions#manage-permissions) по-прежнему проверяются независимо от того, что возвращает хук |

2080| `permissionDecisionReason` | Для `"ask"` показывается пользователю в запросе разрешения. Когда Claude Code [запрещает вызов](/docs/ru/headless#turn-off-permission-prompts-in-unattended-runs) в запуске `-p`, где никто не может ответить на этот запрос, Claude вместо этого читает причину в результате инструмента. Для `"deny"` показывается Claude. Для `"allow"` и `"defer"` записывается только в [лог отладки](#debug-hooks) |2113| `permissionDecisionReason` | Для `"ask"` показывается пользователю в запросе разрешения. Когда Claude Code [запрещает вызов](/docs/ru/headless#turn-off-permission-prompts-in-unattended-runs) в запуске `-p`, где никто не может ответить на этот запрос, Claude вместо этого читает причину в результате инструмента. Для `"deny"` показывается Claude. Для `"allow"` и `"defer"` записывается только в [лог отладки](#debug-hooks) |

2081| `updatedInput` | Изменяет входные параметры инструмента перед выполнением. Заменяет весь объект входных данных, поэтому включайте неизменённые поля вместе с изменёнными. Claude Code оценивает правила разрешений и [пригодность команды Bash для автоматического перевода в фон](/docs/ru/tools-reference#foreground-commands-that-move-to-the-background) по входным данным, которые возвращает ваш хук, а не по тем, что отправил Claude. Сочетайте с `"allow"` для автоматического одобрения или с `"ask"`, чтобы показать пользователю изменённые входные данные. Для `"defer"` игнорируется |2114| `updatedInput` | Изменяет входные параметры инструмента перед выполнением. Заменяет весь объект входных данных, поэтому включайте неизменённые поля вместе с изменёнными. Claude Code оценивает правила разрешений и [пригодность команды Bash для автоматического перевода в фон](/docs/ru/tools-reference#foreground-commands-that-move-to-the-background) по входным данным, которые возвращает ваш хук, а не по тем, что отправил Claude. Сочетайте с `"allow"` для автоматического одобрения или с `"ask"`, чтобы показать пользователю изменённые входные данные. Для `"defer"` игнорируется |

2082| `additionalContext` | Строка, добавляемая в контекст Claude вместе с результатом инструмента. Игнорируется, когда `permissionDecision` равен `"defer"`. См. [Добавление контекста для Claude](#add-context-for-claude) |2115| `additionalContext` | Строка, добавляемая в контекст Claude вместе с результатом инструмента. Игнорируется, когда `permissionDecision` равен `"defer"`. См. [Добавление контекста для Claude](#add-context-for-claude) |


3718 3751 

3719Claude Code показывает пользователю любое `systemMessage`, возвращённое хуком, независимо от решения, поэтому хук для отчёта о стоимости может вернуть `{"systemMessage": "..."}` и завершиться с кодом 0.3752Claude Code показывает пользователю любое `systemMessage`, возвращённое хуком, независимо от решения, поэтому хук для отчёта о стоимости может вернуть `{"systemMessage": "..."}` и завершиться с кодом 0.

3720 3753 

3721Хук PreModelSwitch, не ответивший до истечения таймаута, блокирует переключение. О том, что делает таймаут для других событий, см. [Таймауты](#timeouts). Таймаут по умолчанию для этого события — 30 секунд. `PreModelSwitch` запускает только хуки `command`, `http` и `mcp_tool`, поэтому значения по умолчанию для `prompt` и `agent` не применяются.3754<h4 id="premodelswitch-timeouts-and-other-exit-codes">

3755 Таймауты PreModelSwitch и другие коды выхода

3756</h4>

3757 

3758Хук PreModelSwitch, не ответивший до истечения таймаута, блокирует переключение. Таймаут по умолчанию для этого события — 30 секунд.

3722 3759 

3723Хук, завершившийся с кодом, отличным от 0 или 2, и не выводящий решения в JSON, считается неблокирующей ошибкой, как описано в разделе [Другие коды выхода](#other-exit-codes).3760О том, что происходит при коде выхода, отличном от 0 или 2, см. в разделе [Другие коды выхода](#other-exit-codes).

3724 3761 

3725<h3 id="postmodelswitch">3762<h3 id="postmodelswitch">

3726 PostModelSwitch3763 PostModelSwitch

hooks-guide.md +20 −7

Details

633 * Для hook `PreToolUse` это не одобряет вызов инструмента: нормальный [permission flow](/docs/ru/permissions) по-прежнему применяется.633 * Для hook `PreToolUse` это не одобряет вызов инструмента: нормальный [permission flow](/docs/ru/permissions) по-прежнему применяется.

634 * Для hooks `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` и `PostModelSwitch`, Claude Code добавляет stdout, который он [обрабатывает как простой текст](/docs/ru/hooks#exit-code-0), в контекст Claude.634 * Для hooks `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` и `PostModelSwitch`, Claude Code добавляет stdout, который он [обрабатывает как простой текст](/docs/ru/hooks#exit-code-0), в контекст Claude.

635* **Exit 2**: Claude Code блокирует действие. Напишите причину в stderr. Где она попадает, зависит от события: некоторые события передают её Claude как обратную связь, чтобы он мог скорректировать, другие показывают её пользователю, а несколько, таких как `ConfigChange` и `Elicitation`, не выводят никакого сообщения. Некоторые события не могут быть заблокированы: для `SessionStart` и других, exit 2 показывает stderr пользователю и выполнение продолжается. См. [exit code 2 behavior per event](/docs/ru/hooks#exit-code-2-behavior-per-event) для полного списка.635* **Exit 2**: Claude Code блокирует действие. Напишите причину в stderr. Где она попадает, зависит от события: некоторые события передают её Claude как обратную связь, чтобы он мог скорректировать, другие показывают её пользователю, а несколько, таких как `ConfigChange` и `Elicitation`, не выводят никакого сообщения. Некоторые события не могут быть заблокированы: для `SessionStart` и других, exit 2 показывает stderr пользователю и выполнение продолжается. См. [exit code 2 behavior per event](/docs/ru/hooks#exit-code-2-behavior-per-event) для полного списка.

636* **Любой другой код выхода**: для большинства событий результат зависит от того, что ваш hook вывел в stdout:636* **Любой другой код выхода**: для большинства событий действие продолжается как [неблокирующая ошибка](/docs/ru/hooks#exit-code-output), если только хук не относится к тем, [чей сбой блокирует действие](/docs/ru/hooks#block-the-action-when-a-hook-fails), или его вывод JSON не проходит проверку:

637 * Разобранный объект, который проходит проверку схемы: Claude Code игнорирует код выхода, только JSON определяет результат, и hook не сообщается как ошибка. Исключения для каждого события, такие как `WorktreeCreate`, отказывающий при любом ненулевом выходе, перечислены в разделе [Exit code output](/docs/ru/hooks#exit-code-output) справочника.637 * Разобранный объект, который проходит проверку схемы: Claude Code игнорирует код выхода, результат определяет только JSON, и хук не сообщается как ошибка. Исключения для отдельных событий, например `WorktreeCreate`, который завершается неудачей при любом ненулевом коде выхода, перечислены в разделе справочника [Exit code output](/docs/ru/hooks#exit-code-output).

638 * Разобранный объект, который не проходит проверку схемы, или stdout, который Claude Code [пытается разобрать как JSON](/docs/ru/hooks#exit-code-0), но это не является действительным JSON: неблокирующая ошибка; уведомление содержит сообщение проверки или разбора.638 * Разобранный объект, который не проходит проверку схемы, или stdout, который Claude Code [пытается разобрать как JSON](/docs/ru/hooks#exit-code-0), но который не является корректным JSON: неблокирующая ошибка; уведомление содержит сообщение проверки или разбора.

639 * Stdout, который Claude Code [обрабатывает как простой текст](/docs/ru/hooks#exit-code-0), или пустой stdout: действие продолжается как неблокирующая ошибка. Стенограмма показывает уведомление `<hook name> hook error`, затем первую строку stderr с префиксом `Failed with non-blocking status code:`. Чтобы захватить полный stderr, включите [debug logging](/docs/ru/hooks#debug-hooks) с `claude --debug` или запустив `/debug` во время сеанса.639 * Stdout, который Claude Code [обрабатывает как простой текст](/docs/ru/hooks#exit-code-0), или пустой stdout: действие продолжается как неблокирующая ошибка. В транскрипте отображается уведомление `<hook name> hook error`, а затем первая строка stderr с префиксом `Failed with non-blocking status code:`. Чтобы получить полный stderr, включите [debug logging](/docs/ru/hooks#debug-hooks) с помощью `claude --debug` или запустив `/debug` во время сессии.

640 640 

641<h4 id="structured-json-output">641<h4 id="structured-json-output">

642 Структурированный вывод JSON642 Структурированный вывод JSON


664 664 

665На `PreToolUse` Claude Code обрабатывает каждое значение `permissionDecision` следующим образом:665На `PreToolUse` Claude Code обрабатывает каждое значение `permissionDecision` следующим образом:

666 666 

667* `"allow"`: пропустить интерактивный запрос разрешения. Правила запрета и запроса, включая управляемые списки запретов предприятия, по-прежнему применяются, как и запросы на чтение из [сетевых путей](/docs/ru/permissions#network-paths), для инструментов MCP, помеченных [`requiresUserInteraction`](/docs/ru/mcp#require-approval-for-a-specific-tool), и для инструментов коннекторов, [для которых ваша организация установила `ask`](/docs/ru/mcp#organization-controls-on-connector-tools), в сессиях, где эта настройка доходит до Claude Code667* `"allow"`: пропустить интерактивный запрос разрешения. Правила запрета и запроса, включая управляемые списки запретов предприятия, по-прежнему применяются, как и запросы для:

668 

669 * Чтения из [сетевых путей](/docs/ru/permissions#network-paths)

670 * MCP-инструментов, помеченных [`requiresUserInteraction`](/docs/ru/mcp#require-approval-for-a-specific-tool)

671 * Инструментов коннекторов, [для которых ваша организация установила `ask`](/docs/ru/mcp#organization-controls-on-connector-tools), в сессиях, где эта настройка доходит до Claude Code

672 

673 О том, что делает `"allow"` в режиме планирования, см. [Hook approvals in plan mode](/docs/ru/permissions#hook-approvals-in-plan-mode).

668* `"deny"`: отменить вызов инструмента и отправить причину Claude674* `"deny"`: отменить вызов инструмента и отправить причину Claude

669* `"ask"`: показать запрос разрешения пользователю как обычно675* `"ask"`: показать запрос разрешения пользователю как обычно

670 676 


1015 1021 

1016Hooks `PreToolUse` срабатывают перед любой проверкой режима разрешений в каждом [режиме разрешений](/docs/ru/permission-modes), включая `dontAsk`. Hook, возвращающий `permissionDecision: "deny"`, блокирует инструмент даже в режиме `bypassPermissions` или с `--dangerously-skip-permissions`. Это позволяет вам применять политику, которую пользователи не могут обойти, изменив свой режим разрешений.1022Hooks `PreToolUse` срабатывают перед любой проверкой режима разрешений в каждом [режиме разрешений](/docs/ru/permission-modes), включая `dontAsk`. Hook, возвращающий `permissionDecision: "deny"`, блокирует инструмент даже в режиме `bypassPermissions` или с `--dangerously-skip-permissions`. Это позволяет вам применять политику, которую пользователи не могут обойти, изменив свой режим разрешений.

1017 1023 

1018Обратное неверно: хук, возвращающий `"allow"`, не обходит правила запрета из настроек и не может подавить запрос для чтения из [сетевых путей](/docs/ru/permissions#network-paths), для инструментов MCP, отмеченных [`requiresUserInteraction`](/docs/ru/mcp#require-approval-for-a-specific-tool), или для инструментов коннекторов, [которые ваша организация установила на `ask`](/docs/ru/mcp#organization-controls-on-connector-tools), в сессиях, где эта настройка достигает Claude Code. Хуки в файлах настроек и в `hooks/hooks.json` плагина могут ужесточить ограничения, но не ослабить их сверх того, что разрешают правила разрешений.1024Обратное неверно: хуки в файлах настроек и в `hooks/hooks.json` плагина могут ужесточить ограничения, но не ослабить их сверх того, что разрешают правила разрешений. Хук, возвращающий `"allow"`, не обходит правила запрета из настроек и не может подавить запрос для:

1025 

1026* Чтения из [сетевых путей](/docs/ru/permissions#network-paths)

1027* Инструментов MCP, отмеченных [`requiresUserInteraction`](/docs/ru/mcp#require-approval-for-a-specific-tool)

1028* Инструментов коннекторов, [которые ваша организация установила на `ask`](/docs/ru/mcp#organization-controls-on-connector-tools), в сессиях, где эта настройка достигает Claude Code

1029 

1030В [режиме планирования](/docs/ru/permissions#hook-approvals-in-plan-mode), если ваш хук `PreToolUse` возвращает `"allow"` для редактирования файла, вы получаете тот же запрос, блокировку или подтверждение, которые редактирование получило бы без хука. Чтобы снять это ограничение на подтверждения хуками, [утвердите план](/docs/ru/permission-modes#review-and-approve-a-plan) или переключитесь на другой режим разрешений.

1019 1031 

1020Установленный вами [mod](/docs/ru/plugins/mods/overview), который обрабатывает `tool.check`, может одобрить вызов, заблокированный вашим хуком `PreToolUse`, если только этот хук не находится в управляемых настройках. В разделе [Расширение разрешений с помощью хуков](/docs/ru/permissions#extend-permissions-with-hooks) перечислено, какие правила имеют приоритет над mod.1032Установленный вами [мод](/docs/ru/plugins/mods/overview), который обрабатывает `tool.check`, может одобрить вызов, заблокированный вашим хуком `PreToolUse`, если только этот хук не находится в управляемых настройках. В режиме планирования мод может одобрить такой вызов, если он только для чтения, но не редактирование файла или другой вызов, который не является вызовом только для чтения. В разделе [Расширение разрешений с помощью хуков](/docs/ru/permissions#extend-permissions-with-hooks) перечислено, какие правила имеют приоритет над модом.

1021 1033 

1022<h3 id="hook-not-firing">1034<h3 id="hook-not-firing">

1023 Hook не срабатывает1035 Hook не срабатывает


1042 ```1054 ```

1043* Если вы видите "command not found", используйте абсолютные пути или `${CLAUDE_PROJECT_DIR}` для ссылки на скрипты. Чтобы полностью избежать экранирования оболочки, добавьте `"args": []` для переключения на [exec form](/docs/ru/hooks#exec-form-and-shell-form), который порождает скрипт напрямую без оболочки1055* Если вы видите "command not found", используйте абсолютные пути или `${CLAUDE_PROJECT_DIR}` для ссылки на скрипты. Чтобы полностью избежать экранирования оболочки, добавьте `"args": []` для переключения на [exec form](/docs/ru/hooks#exec-form-and-shell-form), который порождает скрипт напрямую без оболочки

1044* Если вы видите "jq: command not found", установите `jq` или используйте Python/Node.js для анализа JSON1056* Если вы видите "jq: command not found", установите `jq` или используйте Python/Node.js для анализа JSON

1057* Если сообщение содержит `blocking because Git Bash wasn't found`, вы работаете в Windows, Claude Code не нашёл Git Bash, а хук, завершившийся ошибкой или по таймауту, заблокировал вызов инструмента. Способы исправления см. в разделе [Сбой хуков в Windows без Git Bash](/docs/ru/hooks#failed-hooks-on-windows-without-git-bash)

1045* Если уведомление показывает сообщение о валидации JSON, stdout вашего hook был проанализирован как JSON, но не прошёл валидацию схемы. Если оно показывает сообщение об анализе JSON, stdout выглядел как объект JSON, но не был действительным JSON. Оба случая происходят даже при выходе 0.1058* Если уведомление показывает сообщение о валидации JSON, stdout вашего hook был проанализирован как JSON, но не прошёл валидацию схемы. Если оно показывает сообщение об анализе JSON, stdout выглядел как объект JSON, но не был действительным JSON. Оба случая происходят даже при выходе 0.

1046 1059 

1047 Чтобы исправить ошибку анализа, создайте полезную нагрузку с помощью кодировщика JSON, такого как `jq`, вместо конкатенации строк, чтобы кавычки и обратные слэши внутри значений были экранированы. Раздел [Exit code output](/docs/ru/hooks#exit-code-output) справочника охватывает комбинации кодов выхода и JSON1060 Чтобы исправить ошибку анализа, создайте полезную нагрузку с помощью кодировщика JSON, такого как `jq`, вместо конкатенации строк, чтобы кавычки и обратные слэши внутри значений были экранированы. Раздел [Exit code output](/docs/ru/hooks#exit-code-output) справочника охватывает комбинации кодов выхода и JSON

Details

1091* `event.sequence`: счётчик на процесс для упорядочивания событий, описанный в [Атрибуты корреляции событий](#event-correlation-attributes)1091* `event.sequence`: счётчик на процесс для упорядочивания событий, описанный в [Атрибуты корреляции событий](#event-correlation-attributes)

1092* `from_mode`: Предыдущий режим разрешения, например `"default"`, `"plan"`, `"acceptEdits"`, `"auto"` или `"bypassPermissions"`1092* `from_mode`: Предыдущий режим разрешения, например `"default"`, `"plan"`, `"acceptEdits"`, `"auto"` или `"bypassPermissions"`

1093* `to_mode`: Новый режим разрешения1093* `to_mode`: Новый режим разрешения

1094* `trigger`: Что вызвало изменение. Один из `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"` или `"auto_opt_in"`. Отсутствует, когда переход происходит из SDK или моста1094* `trigger`: причина изменения. Одно из значений: `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"` или `"auto_opt_in"`. Отсутствует для некоторых изменений, например когда SDK задаёт режим разрешений через [`setPermissionMode()`](/docs/ru/agent-sdk/typescript#query-object)

1095 1095 

1096<h4 id="auth-event">1096<h4 id="auth-event">

1097 Событие аутентификации1097 Событие аутентификации

Details

203 Streaming idle watchdogs203 Streaming idle watchdogs

204</h2>204</h2>

205 205 

206Claude Code запускает четыре независимых таймера, которые прерывают потоковый ответ модели, когда он затихает, чтобы мёртвое соединение не зависало, а повторило попытку. Крайний срок первого байта охватывает ожидание заголовков ответа, прежде чем какая-либо часть ответа поступит. Каждый из трёх других таймеров отслеживает активный ответ на предмет различных сигналов.206Claude Code запускает четыре независимых таймера, которые прерывают потоковый ответ модели, когда он затихает, чтобы мёртвое соединение не зависало, а повторило попытку. Запрос, на который вообще не приходят заголовки ответа, завершается одним из двух способов:

207 

208* **Там, где работает крайний срок первого байта**: первая попытка завершается по истечении этого срока. Чтобы изменить его, задайте `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`. О времени ожидания перед повторной попыткой см. [No response from API](/docs/ru/errors#no-response-from-api).

209* **На других соединениях**: запрос завершается через 5–6 минут, когда срабатывает body idle timeout, если только вы не отключили этот таймаут. Чтобы завершить его раньше, уменьшите `API_TIMEOUT_MS`.

207 210 

208| Таймер | Когда прерывает | Где работает | Тайм-аут по умолчанию |211| Таймер | Когда прерывает | Где работает | Тайм-аут по умолчанию |

209| :- | :- | :- | :- |212| :- | :- | :- | :- |

210| First-byte deadline | Заголовки ответа не поступают после отправки запроса Claude Code | Прямой API Anthropic и [Claude Platform on AWS](/docs/ru/claude-platform-on-aws), включая через HTTPS-прокси, но не когда `ANTHROPIC_BASE_URL` или `ANTHROPIC_AWS_BASE_URL` маршрутизируют их через [gateway](/docs/ru/gateways). Opt-in на Amazon Bedrock с `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; не работает на Google Cloud's Agent Platform или Microsoft Foundry | 180 секунд на прямом API Anthropic, 300 секунд в других местах, плюс одна секунда на 32 КБ тела запроса |213| First-byte deadline | Заголовки ответа не поступают после отправки запроса Claude Code | Прямой API Anthropic и [Claude Platform on AWS](/docs/ru/claude-platform-on-aws), включая через HTTPS-прокси, но не когда `ANTHROPIC_BASE_URL` или `ANTHROPIC_AWS_BASE_URL` маршрутизируют их через [шлюз](/docs/ru/gateways). Opt-in на Amazon Bedrock с `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; не работает на Google Cloud's Agent Platform или Microsoft Foundry, а также в сессии [Claude apps gateway](/docs/ru/claude-apps-gateway) | 180 секунд на прямом API Anthropic, 300 секунд в других местах, плюс одна секунда на 32 КБ тела запроса |

211| Event-level watchdog | События ответа не анализируются. На соединениях, где работает byte-level watchdog, поступающие байты, включая keep-alive пинги, также сбрасывают этот watchdog, примерно на пять минут без анализируемого события | Каждый провайдер | 300 секунд |214| Event-level watchdog | События ответа не анализируются. На соединениях, где работает byte-level watchdog, поступающие байты, включая keep-alive пинги, также сбрасывают этот watchdog, примерно на пять минут без анализируемого события | Каждый провайдер | 300 секунд |

212| Byte-level watchdog | На проводе не поступают байты, включая SSE keep-alive пинги | Прямой API Anthropic, [Claude Platform on AWS](/docs/ru/claude-platform-on-aws) и [шлюзовые](/docs/ru/gateways) соединения, включая пользовательский `ANTHROPIC_BASE_URL`. Opt-in на Amazon Bedrock `vnd.amazon.eventstream` ответы с `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; не работает на Google Cloud's Agent Platform или Microsoft Foundry | 180 секунд на прямом API Anthropic. 300 секунд на Claude Platform on AWS, на Amazon Bedrock, в сессии [Claude apps gateway](/docs/ru/claude-apps-gateway) и через пользовательский `ANTHROPIC_BASE_URL` |215| Byte-level watchdog | На проводе не поступают байты, включая SSE keep-alive пинги | Прямой API Anthropic, [Claude Platform on AWS](/docs/ru/claude-platform-on-aws) и [шлюзовые](/docs/ru/gateways) соединения, включая пользовательский `ANTHROPIC_BASE_URL`. Opt-in на Amazon Bedrock `vnd.amazon.eventstream` ответы с `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; не работает на Google Cloud's Agent Platform или Microsoft Foundry | 180 секунд на прямом API Anthropic. 300 секунд на Claude Platform on AWS, на Amazon Bedrock, в сессии [Claude apps gateway](/docs/ru/claude-apps-gateway) и через пользовательский `ANTHROPIC_BASE_URL` |

213| Body idle timeout | Байты не поступают в течение 5 минут | Провайдеры, отличные от прямого API Anthropic, Claude Platform on AWS и Amazon Bedrock с установленным `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, если только [`API_FORCE_IDLE_TIMEOUT`](/docs/ru/env-vars) это не изменит | 5 минут |216| Body idle timeout | Байты не поступают в течение 5 минут, включая время ожидания заголовков ответа | Провайдеры, отличные от прямого API Anthropic, Claude Platform on AWS и Amazon Bedrock с установленным `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, если только [`API_FORCE_IDLE_TIMEOUT`](/docs/ru/env-vars) это не изменит | 5 минут |

214 217 

215Если вы установите `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, byte-level watchdog заменит body idle timeout на Bedrock вместо того, чтобы работать рядом с ним. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` затем также определяет, как долго поток Bedrock может оставаться молчаливым, прежде чем Claude Code будет рассматривать соединение как мёртвое, в пределах указанных ниже лимитов. Поступающие байты по-прежнему не сбрасывают event-level watchdog на Bedrock. При включённом debug logging каждый поток Bedrock затем регистрирует отладочное сообщение, которое начинается с `wire-heartbeat: _chunkTimes absent`.218Если вы установите `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, byte-level watchdog заменит body idle timeout на Bedrock вместо того, чтобы работать рядом с ним. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` затем также определяет, как долго поток Bedrock может оставаться молчаливым, прежде чем Claude Code будет рассматривать соединение как мёртвое, в пределах указанных ниже лимитов. Поступающие байты по-прежнему не сбрасывают event-level watchdog на Bedrock. При включённом debug logging каждый поток Bedrock затем регистрирует отладочное сообщение, которое начинается с `wire-heartbeat: _chunkTimes absent`.

216 219 


220* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` устанавливает timeout обоих watchdogs. Claude Code повышает значения ниже 5 минут до 5 минут и ограничивает значение 30 минутами для byte-level watchdog.223* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` устанавливает timeout обоих watchdogs. Claude Code повышает значения ниже 5 минут до 5 минут и ограничивает значение 30 минутами для byte-level watchdog.

221* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` устанавливает timeout byte-level watchdog без изменения timeout event-level watchdog, зажат между 10 секундами и 30 минутами и имеет приоритет над `CLAUDE_STREAM_IDLE_TIMEOUT_MS` для этого watchdog.224* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` устанавливает timeout byte-level watchdog без изменения timeout event-level watchdog, зажат между 10 секундами и 30 минутами и имеет приоритет над `CLAUDE_STREAM_IDLE_TIMEOUT_MS` для этого watchdog.

222* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` устанавливает крайний срок первого байта напрямую. Оставьте его неустановленным, и Claude Code будет использовать timeout byte-level watchdog, поэтому `CLAUDE_STREAM_IDLE_TIMEOUT_MS` и `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` также изменяют крайний срок. Для зажимов, допуска на загрузку, ограничения `API_TIMEOUT_MS` и того, как долго повторная попытка ждёт после прерывания без ответа, см. [No response from API](/docs/ru/errors#no-response-from-api).225* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` устанавливает крайний срок первого байта напрямую. Оставьте его неустановленным, и Claude Code будет использовать timeout byte-level watchdog, поэтому `CLAUDE_STREAM_IDLE_TIMEOUT_MS` и `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` также изменяют крайний срок. Для зажимов, допуска на загрузку, ограничения `API_TIMEOUT_MS` и того, как долго повторная попытка ждёт после прерывания без ответа, см. [No response from API](/docs/ru/errors#no-response-from-api).

226* `API_TIMEOUT_MS` ограничивает ожидание заголовков ответа. Там, где крайний срок первого байта не работает, например в сессии Claude apps gateway, установите значение ниже `300000` (это 5 минут), чтобы раньше повторять запрос, оставшийся без ответа. Держите его выше самого долгого ожидания заголовков и самого долгого [непотокового запроса](/docs/ru/errors#streaming-response-ended-before-any-complete-data-was-received), которые вы ожидаете: запрос, которому нужно больше времени, будет снова завершаться по таймауту при каждой повторной попытке.

223* `API_FORCE_IDLE_TIMEOUT` установленный на `0` отключает body idle timeout, а установленный на `1` включает его для каждого провайдера. Watchdogs работают независимо от него, поэтому, чтобы позволить потоку паузировать дольше, чем их пороги, также повысьте или отключите их.227* `API_FORCE_IDLE_TIMEOUT` установленный на `0` отключает body idle timeout, а установленный на `1` включает его для каждого провайдера. Watchdogs работают независимо от него, поэтому, чтобы позволить потоку паузировать дольше, чем их пороги, также повысьте или отключите их.

224 228 

225Когда watchdog прерывает зависший поток, Claude Code рассматривает прерывание как сбой в середине потока, и то, что вы видите, зависит от того, как далеко продвинулся ответ. Claude Code повторяет запрос или завершает ход с ошибкой, сохраняет завершённый вывод и показывает [уведомление о неполном ответе](/docs/ru/errors#the-response-above-may-be-incomplete), или завершает ход нормально. [Automatic retries](/docs/ru/errors#automatic-retries) указывает, где применяется каждый результат.229Когда watchdog прерывает зависший поток, Claude Code рассматривает прерывание как сбой в середине потока, и то, что вы видите, зависит от того, как далеко продвинулся ответ. Claude Code повторяет запрос или завершает ход с ошибкой, сохраняет завершённый вывод и показывает [уведомление о неполном ответе](/docs/ru/errors#the-response-above-may-be-incomplete), или завершает ход нормально. [Automatic retries](/docs/ru/errors#automatic-retries) указывает, где применяется каждый результат.

Details

627 627 

628Claude Code отклоняет `bypassPermissions` в сеансе, который вы запускаете с [`--restricted`](/docs/ru/cli-reference#cli-flags). `--restricted` требует Claude Code v2.1.248 или позже.628Claude Code отклоняет `bypassPermissions` в сеансе, который вы запускаете с [`--restricted`](/docs/ru/cli-reference#cli-flags). `--restricted` требует Claude Code v2.1.248 или позже.

629 629 

630В первый раз, когда вы запускаете интерактивный сеанс с этим режимом включённым, Claude Code показывает диалоговое окно предупреждения, просящее вас принять ответственность за действия, предпринятые без проверок разрешений:630<span id="bypass-permissions-acceptance" />В первый раз, когда вы запускаете интерактивную сессию с включённым этим режимом, Claude Code показывает диалоговое окно предупреждения, предлагающее вам принять ответственность за действия, выполняемые без проверок разрешений:

631 631 

632* **Если вы согласитесь**: Claude Code устанавливает `skipDangerousModePermissionPrompt` на `true` в `~/.claude/settings.json`, поэтому более поздние сеансы пропускают диалоговое окно. Чтобы увидеть диалоговое окно снова, удалите ключ из этого файла или установите его на `false`. [Справка `skipDangerousModePermissionPrompt`](/docs/ru/settings-reference#skipdangerousmodepermissionprompt) перечисляет другие файлы параметров, где вы или ваша организация можете установить его.632* **Если вы согласитесь**: Claude Code устанавливает `skipDangerousModePermissionPrompt` на `true` в `~/.claude/settings.json`, поэтому более поздние сеансы пропускают диалоговое окно. Чтобы увидеть диалоговое окно снова, удалите ключ из этого файла или установите его на `false`. [Справка `skipDangerousModePermissionPrompt`](/docs/ru/settings-reference#skipdangerousmodepermissionprompt) перечисляет другие файлы параметров, где вы или ваша организация можете установить его.

633* **Если вы отклоните**: Claude Code выходит.633* **Если вы отклоните**: Claude Code выходит.


635В [неинтерактивном режиме](/docs/ru/headless) диалоговое окно не показывается. [Фоновая сессия](/docs/ru/agent-view) учитывает ваше согласие, если оно записано в пользовательских или управляемых настройках:635В [неинтерактивном режиме](/docs/ru/headless) диалоговое окно не показывается. [Фоновая сессия](/docs/ru/agent-view) учитывает ваше согласие, если оно записано в пользовательских или управляемых настройках:

636 636 

637* Если согласие не записано, `claude --bg --permission-mode bypassPermissions` отклоняется до тех пор, пока вы не примете диалоговое окно в интерактивной сессии.637* Если согласие не записано, `claude --bg --permission-mode bypassPermissions` отклоняется до тех пор, пока вы не примете диалоговое окно в интерактивной сессии.

638* Если `skipDangerousModePermissionPrompt` задан только в `.claude/settings.local.json`, фоновая сессия запускается, игнорируя запрос на обход, и закрепляет уведомление `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Чтобы обход был учтён, добавьте этот ключ в `~/.claude/settings.json`, а затем запустите новую фоновую сессию.638* Если `skipDangerousModePermissionPrompt` задан только в `.claude/settings.local.json`, фоновая сессия запускается, игнорируя запрос на обход, и закрепляет уведомление `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Добавьте этот ключ в `~/.claude/settings.json`, а затем запустите новую фоновую сессию. Сессия, показывающая уведомление, всё равно продолжает работать:

639 * Если проигнорирован `--allow-dangerously-skip-permissions`, `bypassPermissions` исключается из её цикла `Shift+Tab`.

640 * Если проигнорированы `--permission-mode bypassPermissions` или `--dangerously-skip-permissions`, сессия вместо этого запускается в режиме Manual.

639 641 

640На Linux и macOS Claude Code отклоняет запуск в этом режиме при запуске от пользователя root или под `sudo`:642На Linux и macOS Claude Code отказывается запускаться в режиме `bypassPermissions` при работе от пользователя root или под `sudo`:

641 643 

642```text theme={null}644```text theme={null}

643--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons645--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons


692 * файлы markdown в каталоге [автоматической памяти](/docs/ru/memory#storage-location) проекта, например `~/.claude/projects/<project>/memory/`, в сессии, запущенной без `--restricted`694 * файлы markdown в каталоге [автоматической памяти](/docs/ru/memory#storage-location) проекта, например `~/.claude/projects/<project>/memory/`, в сессии, запущенной без `--restricted`

693 * файлы markdown в каталоге [памяти субагента](/docs/ru/sub-agents#enable-persistent-memory), например `.claude/agent-memory/`, в сессии, запущенной без `--restricted`695 * файлы markdown в каталоге [памяти субагента](/docs/ru/sub-agents#enable-persistent-memory), например `.claude/agent-memory/`, в сессии, запущенной без `--restricted`

694* Каталог, который вы загрузили с помощью [`--plugin-dir`](/docs/ru/plugins/mods/create#change-a-mod-with-claude), потому что Claude Code перезагружает и запускает код мода из него при изменении файла696* Каталог, который вы загрузили с помощью [`--plugin-dir`](/docs/ru/plugins/mods/create#change-a-mod-with-claude), потому что Claude Code перезагружает и запускает код мода из него при изменении файла

697* `~/.claude/dev-mods/` или `dev-mods/` в каталоге, на который указывает [`CLAUDE_CONFIG_DIR`](/docs/ru/env-vars), куда Claude сохраняет [моды, которые он пишет для вас](/docs/ru/plugins/mods/create#ask-claude-for-a-mod)

695 698 

696Защищённые файлы:699Защищённые файлы:

697 700 

permissions.md +20 −2

Details

595 MCP595 MCP

596</h3>596</h3>

597 597 

598Правила MCP используют имя сервера в том виде, в каком оно настроено в Claude Code, за которым может следовать имя инструмента этого сервера.598Чтобы сопоставить все инструменты MCP-сервера, напишите `mcp__<server>__*`. Чтобы сопоставить один инструмент, напишите его полное имя, `mcp__<server>__<tool>`.

599 599 

600* `mcp__puppeteer` соответствует любому инструменту, предоставляемому сервером `puppeteer`600* `mcp__puppeteer` соответствует любому инструменту, предоставляемому сервером `puppeteer`

601* `mcp__puppeteer__*` использует синтаксис подстановочных знаков и также соответствует всем инструментам сервера `puppeteer`601* `mcp__puppeteer__*` использует синтаксис подстановочных знаков и также соответствует всем инструментам сервера `puppeteer`

602* `mcp__puppeteer__puppeteer_navigate` соответствует инструменту `puppeteer_navigate`, предоставляемому сервером `puppeteer`602* `mcp__puppeteer__puppeteer_navigate` соответствует инструменту `puppeteer_navigate`, предоставляемому сервером `puppeteer`

603 603 

604Вместо `<server>` укажите имя сервера в том виде, в каком оно встречается в именах инструментов этого сервера. В следующих примерах показано, какое правило написать для имени со специальными символами, для сервера из плагина и для имени, которое содержит `__` или оканчивается на `_`:

605 

606* **Имена с символами вроде `.` или пробелов**: эти символы заменяются на `_`, поэтому для сервера, настроенного как `my.server`, напишите `mcp__my_server__*`

607* **Серверы, предоставляемые плагином**: `<server>` принимает [форму с областью плагина](/docs/ru/mcp#plugin-provided-mcp-servers), поэтому для сервера `database-tools` в плагине с именем `my-plugin` напишите `mcp__plugin_my-plugin_database-tools__*`

608* **`<server>`, содержащий `__` или оканчивающийся на `_`**: используйте форму с подстановочным знаком, `mcp__<server>__*`, с полным именем. Для сервера с именем `reports__v2` напишите `mcp__reports__v2__*`. Простое `mcp__reports__v2` и более короткое `mcp__reports` не соответствуют его инструментам в качестве правил allow, поскольку Claude Code читает оба как правила для сервера с именем `reports`

609 

604Если ваша организация установила для инструмента [коннектора 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>`.610Если ваша организация установила для инструмента [коннектора 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>`.

605 611 

606В сессии [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`.612В сессии [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`.


649 655 

650[Claude Code hooks](/docs/ru/hooks-guide) позволяют регистрировать пользовательские команды оболочки, которые оценивают разрешения во время выполнения. Когда Claude Code выполняет вызов инструмента, PreToolUse hooks запускаются перед запросом разрешения для каждого инструмента, кроме [`EndConversation`](/docs/ru/tools-reference#endconversation-tool-behavior). Выход hook может отклонить вызов инструмента, принудить запрос или пропустить запрос, чтобы позволить вызову продолжиться.656[Claude Code hooks](/docs/ru/hooks-guide) позволяют регистрировать пользовательские команды оболочки, которые оценивают разрешения во время выполнения. Когда Claude Code выполняет вызов инструмента, PreToolUse hooks запускаются перед запросом разрешения для каждого инструмента, кроме [`EndConversation`](/docs/ru/tools-reference#endconversation-tool-behavior). Выход hook может отклонить вызов инструмента, принудить запрос или пропустить запрос, чтобы позволить вызову продолжиться.

651 657 

658<h3 id="precedence-among-rules-hooks-and-mods">

659 Приоритет между правилами, хуками и модами

660</h3>

661 

652Решения hook не обходят правила разрешений. Claude Code оценивает правила deny и ask независимо от того, что возвращает PreToolUse hook: совпадающее правило deny блокирует вызов, и совпадающее правило ask по-прежнему запрашивает даже когда hook вернул `"allow"` или `"ask"`. Это сохраняет приоритет deny-first, описанный в [Управление разрешениями](#manage-permissions), включая правила deny, установленные в управляемых параметрах.662Решения hook не обходят правила разрешений. Claude Code оценивает правила deny и ask независимо от того, что возвращает PreToolUse hook: совпадающее правило deny блокирует вызов, и совпадающее правило ask по-прежнему запрашивает даже когда hook вернул `"allow"` или `"ask"`. Это сохраняет приоритет deny-first, описанный в [Управление разрешениями](#manage-permissions), включая правила deny, установленные в управляемых параметрах.

653 663 

654Этот приоритет распространяется на хуки в файлах настроек и в `hooks/hooks.json` плагина. Установленный вами [mod](/docs/ru/plugins/mods/overview), который обрабатывает `tool.check`, отвечает после того, как правила и хуки `PreToolUse` приняли решение, и его ответ может заменить их решение:664Этот приоритет распространяется на хуки в файлах настроек и в `hooks/hooks.json` плагина. Установленный вами [мод](/docs/ru/plugins/mods/overview), который обрабатывает `tool.check`, отвечает после того, как правила и хуки `PreToolUse` приняли решение. Вне [режима планирования](#hook-approvals-in-plan-mode) или для вызова только для чтения его ответ может заменить их решение:

655 665 

656* **Правила Ask**: mod может одобрить вызов, для которого правило ask запросило бы подтверждение666* **Правила Ask**: mod может одобрить вызов, для которого правило ask запросило бы подтверждение

657* **Блокировка от `PreToolUse` hook**: mod может одобрить вызов, если только hook не находится в управляемых параметрах667* **Блокировка от `PreToolUse` hook**: mod может одобрить вызов, если только hook не находится в управляемых параметрах


664 674 

665Блокирующий hook также имеет приоритет над правилами allow. Hook, который выходит с кодом 2, останавливает вызов инструмента перед оценкой правил разрешений, поэтому блокировка применяется даже когда правило allow иначе позволило бы вызову продолжиться. Чтобы запустить все Bash команды без запросов, кроме нескольких, которые вы хотите заблокировать, добавьте `"Bash"` в список allow и зарегистрируйте PreToolUse hook, который отклоняет эти конкретные команды. См. [Блокировка редактирования защищённых файлов](/docs/ru/hooks-guide#block-edits-to-protected-files) для скрипта hook, который вы можете адаптировать.675Блокирующий hook также имеет приоритет над правилами allow. Hook, который выходит с кодом 2, останавливает вызов инструмента перед оценкой правил разрешений, поэтому блокировка применяется даже когда правило allow иначе позволило бы вызову продолжиться. Чтобы запустить все Bash команды без запросов, кроме нескольких, которые вы хотите заблокировать, добавьте `"Bash"` в список allow и зарегистрируйте PreToolUse hook, который отклоняет эти конкретные команды. См. [Блокировка редактирования защищённых файлов](/docs/ru/hooks-guide#block-edits-to-protected-files) для скрипта hook, который вы можете адаптировать.

666 676 

677<h3 id="hook-approvals-in-plan-mode">

678 Подтверждения хуков в режиме планирования

679</h3>

680 

681В [режиме планирования](/docs/ru/permission-modes#analyze-before-you-edit-with-plan-mode), за исключением `ExitPlanMode`, ответ `"allow"` вашего хука `PreToolUse` не влияет на редактирование файла или другой вызов, который не является вызовом только для чтения. Вы получаете тот же запрос разрешения, блокировку или подтверждение, что и при отсутствии хука, и Claude Code по-прежнему применяет любой `updatedInput`, возвращённый хуком. Если хук отвечает на [`ExitPlanMode`](/docs/ru/hooks#allow-with-updatedinput) значением `"allow"` и `updatedInput`, этот инструмент по-прежнему выполняется без запроса разрешения.

682 

683В режиме планирования мод, который обрабатывает `tool.check`, также не может одобрить редактирование файла или другой вызов, не являющийся вызовом только для чтения, хотя по-прежнему может заблокировать такой вызов. Чтобы снять это ограничение на подтверждения хуков и модов, [утвердите план](/docs/ru/permission-modes#review-and-approve-a-plan) или переключитесь на другой режим разрешений.

684 

667<h2 id="working-directories">685<h2 id="working-directories">

668 Рабочие каталоги686 Рабочие каталоги

669</h2>687</h2>

Details

30 Попросите мод своими словами, например `make a mod that shows the current git branch above the prompt`. Claude пишет мод в отдельном каталоге в папке модов сеанса, которая находится в `~/.claude/dev-mods/`, за которой следует ID сеанса. Полный путь мода выглядит как `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.30 Попросите мод своими словами, например `make a mod that shows the current git branch above the prompt`. Claude пишет мод в отдельном каталоге в папке модов сеанса, которая находится в `~/.claude/dev-mods/`, за которой следует ID сеанса. Полный путь мода выглядит как `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.

31 31 

32 <Note>32 <Note>

33 В режимах разрешений `default` и `acceptEdits` [permission modes](/docs/ru/permission-modes#protected-paths) Claude Code спрашивает перед тем, как Claude создаст каждый из файлов мода, потому что `~/.claude` — это защищённый путь. Одобрите каждый файл по мере его появления.33 В [режимах разрешений](/docs/ru/permission-modes) `default` и `acceptEdits` Claude Code спрашивает перед тем, как Claude создаст каждый из файлов мода, потому что папка модов — это [защищённый путь](/docs/ru/permission-modes#protected-paths). Одобрите каждый файл по мере его появления.

34 </Note>34 </Note>

35 </Step>35 </Step>

36 36 

Details

216})216})

217```217```

218 218 

219На `main` хук возвращает `deny`, даже если правило разрешает `git push`. На другой ветке, а также для других команд вызов получает то же решение, что и без мода.219Хук отклоняет `git push` на `main` и пропускает все остальные вызовы:

220 

221* **На `main`**: хук возвращает `deny`, даже если правило разрешает `git push`

222* **На другой ветке, а также для других команд**: вызов получает то же решение, что и без мода

220 223 

221Хук сопоставляет текст команды, поэтому рассматривайте его как напоминание для Claude. Чтобы заблокировать push в `main` для всех, защитите ветку на своём Git-хостинге.224Хук сопоставляет текст команды, поэтому рассматривайте его как напоминание для Claude. Чтобы заблокировать push в `main` для всех, защитите ветку на своём Git-хостинге.

222 225 

223Хук может вернуть `allow`, `ask` или `deny`, поэтому он также может одобрить вызов, заблокированный хуком `PreToolUse` вне управляемых настроек. В разделе [Расширение разрешений с помощью хуков](/docs/ru/permissions#extend-permissions-with-hooks) перечислено, какие решения имеют приоритет над модом.226Хук может вернуть `allow`, `ask` или `deny`, поэтому он также может одобрить вызов, заблокированный хуком `PreToolUse` вне управляемых настроек. В [режиме планирования](/docs/ru/permissions#hook-approvals-in-plan-mode) для вызова, который не является вызовом только для чтения, например редактирования файла, ваш хук может ужесточить решение, возвращаемое `next(e)`, но не может ослабить его. В разделе [Расширение разрешений с помощью хуков](/docs/ru/permissions#extend-permissions-with-hooks) перечислено, какие решения имеют приоритет над модом.

224 227 

225<h3 id="rewrite-or-add-to-a-prompt">228<h3 id="rewrite-or-add-to-a-prompt">

226 Переписать промпт или дополнить его229 Переписать промпт или дополнить его


337* **Хуки `PreToolUse` из управляемых настроек**: запускаются перед хуком `tool.call` первого мода, и блокировка от одного из них является окончательной, поэтому ни один мод не видит вызов.340* **Хуки `PreToolUse` из управляемых настроек**: запускаются перед хуком `tool.call` первого мода, и блокировка от одного из них является окончательной, поэтому ни один мод не видит вызов.

338* **Хуки `PreToolUse` из каждого другого файла настроек и из `hooks/hooks.json` плагинов**: запускаются после того, как последний мод вызовет `next`, как часть собственного поведения Claude Code. Мод, который отвечает на `tool.call` без вызова `next`, не позволяет им запускаться, и мод, который вызывает `next`, видит их решение в результате, который он возвращает.341* **Хуки `PreToolUse` из каждого другого файла настроек и из `hooks/hooks.json` плагинов**: запускаются после того, как последний мод вызовет `next`, как часть собственного поведения Claude Code. Мод, который отвечает на `tool.call` без вызова `next`, не позволяет им запускаться, и мод, который вызывает `next`, видит их решение в результате, который он возвращает.

339 342 

340[`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) срабатывает после того, как эти хуки и правила разрешений приняли решение, поэтому хук на нём может одобрить вызов, который заблокировал хук из второй группы.343Хук [`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) может одобрить вызов, который заблокировал хук `PreToolUse` вне управляемых настроек, потому что `tool.check` срабатывает после того, как эти хуки и правила разрешений приняли решение. В режиме планирования хук `tool.check` может одобрить такой вызов, если он только для чтения, но не редактирование файла или другой вызов, который не является вызовом только для чтения.

341 344 

342<h3 id="handle-a-hook-that-fails">345<h3 id="handle-a-hook-that-fails">

343 Обработать хук, который даёт сбой346 Обработать хук, который даёт сбой

Details

205 205 

206Для создания сводки Claude Code отправляет отдельный запрос с тем же системным промптом, инструментами и историей, что и ваш диалог, плюс инструкцию по составлению сводки, добавленную как последнее сообщение пользователя. Пока кэш тёплый, этот запрос читает ваш префикс из кэша, поэтому `/compact` в середине сессии стоит лишь малую долю того, что предполагает размер контекста, и тратит большую часть времени на генерацию сводки.206Для создания сводки Claude Code отправляет отдельный запрос с тем же системным промптом, инструментами и историей, что и ваш диалог, плюс инструкцию по составлению сводки, добавленную как последнее сообщение пользователя. Пока кэш тёплый, этот запрос читает ваш префикс из кэша, поэтому `/compact` в середине сессии стоит лишь малую долю того, что предполагает размер контекста, и тратит большую часть времени на генерацию сводки.

207 207 

208После перерыва дольше [времени жизни кэша](#cache-lifetime) читать из кэша уже нечего, поэтому запрос на составление сводки заново обрабатывает всю историю как некэшированный ввод. Именно поэтому `/compact` обходится дороже всего, когда вы [возобновляете старую сессию](/docs/ru/sessions#resume-from-a-summary). И в тёплом, и в холодном случае ход после сжатия перестраивает кэш диалога только для гораздо более короткой сводки, поэтому этот ход не является медленной частью.208После перерыва дольше [времени жизни кэша](#cache-lifetime) читать из кэша уже нечего, поэтому запрос на составление сводки заново обрабатывает всю историю как некэшированный ввод. Именно поэтому `/compact` обходится дороже всего, когда вы [возобновляете старую сессию](/docs/ru/sessions#resume-a-session). И в тёплом, и в холодном случае ход после сжатия перестраивает кэш диалога только для гораздо более короткой сводки, поэтому этот ход не является медленной частью.

209 209 

210<Tip>210<Tip>

211 Сжатие контекста работает в вашу пользу, когда отбрасываемый контекст — это содержимое, которое вам больше не нужно. Чтобы самостоятельно выбирать, когда возникают его накладные расходы, запускайте `/compact` в естественных паузах в работе, например между задачами, вместо того чтобы ждать, пока автосжатие сработает в середине задачи. Если вы пошли по пути, от которого хотите полностью отказаться, вместо этого выполните [`/rewind`](#rewinding-the-conversation) к более раннему ходу. Перемотка усекает диалог до префикса, который уже кэширован, а не создаёт новый, как это делает сжатие.211 Сжатие контекста работает в вашу пользу, когда отбрасываемый контекст — это содержимое, которое вам больше не нужно. Чтобы самостоятельно выбирать, когда возникают его накладные расходы, запускайте `/compact` в естественных паузах в работе, например между задачами, вместо того чтобы ждать, пока автосжатие сработает в середине задачи. Если вы пошли по пути, от которого хотите полностью отказаться, вместо этого выполните [`/rewind`](#rewinding-the-conversation) к более раннему ходу. Перемотка усекает диалог до префикса, который уже кэширован, а не создаёт новый, как это делает сжатие.


310 310 

311Кэшированные префиксы истекают после периода неактивности. Каждый запрос, который попадает в кэш, сбрасывает таймер, поэтому кэш остаётся активным, пока вы продолжаете работать. После достаточно длительного перерыва следующий запрос пересчитывает полный ввод и переустанавливает кэш, поэтому первый ход после перерыва может быть заметно медленнее.311Кэшированные префиксы истекают после периода неактивности. Каждый запрос, который попадает в кэш, сбрасывает таймер, поэтому кэш остаётся активным, пока вы продолжаете работать. После достаточно длительного перерыва следующий запрос пересчитывает полный ввод и переустанавливает кэш, поэтому первый ход после перерыва может быть заметно медленнее.

312 312 

313В плане Pro или Max, когда вы возобновляете большую сессию после длительного перерыва, Claude Code [предлагает возобновить работу из сводки](/docs/ru/sessions#resume-from-a-summary), чтобы последующие запросы не несли полную историю.

314 

315Время жизни (TTL) контролирует, как долго кэш может пережить перерыв. API предлагает два варианта: пятиминутный TTL и [одночасовой TTL](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration), который поддерживает кэш в активном состоянии во время более длительных перерывов, но [тарифицирует записи в кэш по более высокой ставке](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). Более длительный TTL помогает, когда вы оставляете сессию неактивной и возвращаетесь к ней, потому что вы избегаете переобработки, которой стоит истекший префикс. Это стоит дороже при коротких всплесках работы, которые никогда не простаивают более пяти минут, где применяется более высокий тариф записи и более длительное время жизни кэша остаётся неиспользованным.313Время жизни (TTL) контролирует, как долго кэш может пережить перерыв. API предлагает два варианта: пятиминутный TTL и [одночасовой TTL](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration), который поддерживает кэш в активном состоянии во время более длительных перерывов, но [тарифицирует записи в кэш по более высокой ставке](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). Более длительный TTL помогает, когда вы оставляете сессию неактивной и возвращаетесь к ней, потому что вы избегаете переобработки, которой стоит истекший префикс. Это стоит дороже при коротких всплесках работы, которые никогда не простаивают более пяти минут, где применяется более высокий тариф записи и более длительное время жизни кэша остаётся неиспользованным.

316 314 

317<h3 id="which-ttl-each-request-gets">315<h3 id="which-ttl-each-request-gets">

sandboxing.md +14 −0

Details

1080* **`Command line arguments`**: если вы запустили Claude Code с [`--settings`](/docs/ru/settings#change-a-setting-for-one-session), проверьте, задаёт ли переданный файл или JSON один из этих ключей. Если да, измените значение там или запустите Claude Code заново без этих ключей.1080* **`Command line arguments`**: если вы запустили Claude Code с [`--settings`](/docs/ru/settings#change-a-setting-for-one-session), проверьте, задаёт ли переданный файл или JSON один из этих ключей. Если да, измените значение там или запустите Claude Code заново без этих ключей.

1081* **`Enterprise managed settings`**: загружены управляемые настройки вашей организации. Если они задают один из этих ключей, вы не можете изменить его ни через `/sandbox`, ни через какой-либо файл настроек, которым вы управляете, поэтому обратитесь к администратору.1081* **`Enterprise managed settings`**: загружены управляемые настройки вашей организации. Если они задают один из этих ключей, вы не можете изменить его ни через `/sandbox`, ни через какой-либо файл настроек, которым вы управляете, поэтому обратитесь к администратору.

1082 1082 

1083<h3 id="/sandbox-prints-sandbox-settings-not-changed">

1084 `/sandbox` выводит `Sandbox settings not changed`

1085</h3>

1086 

1087Эта строка означает, что `/sandbox` не удалось сохранить выбор, сделанный вами в его панели, в файл `.claude/settings.local.json` вашего проекта:

1088 

1089```text theme={null}

1090✗ Sandbox settings not changed: /home/you/project/.claude/settings.local.json couldn't be updated (EACCES). Start Claude Code in a project folder you can write to.

1091```

1092 

1093Если причина в скобках — `EACCES`, `EPERM` или `EROFS`, запустите Claude Code в папке проекта, в которую у вас есть право записи, затем снова запустите `/sandbox` в этой сессии.

1094 

1095Если причина начинается с `Invalid JSON syntax in settings file`, исправьте JSON в файле `.claude/settings.local.json` вашего проекта, затем снова запустите `/sandbox`.

1096 

1083<h2 id="limitations">1097<h2 id="limitations">

1084 Ограничения1098 Ограничения

1085</h2>1099</h2>

sessions.md +0 −14

Details

102* Запуск выполняется не через [каналы](/docs/ru/channels)102* Запуск выполняется не через [каналы](/docs/ru/channels)

103* Ни одно [правило запрета](/docs/ru/permissions#manage-permissions) не удаляет инструмент `ExitPlanMode`103* Ни одно [правило запрета](/docs/ru/permissions#manage-permissions) не удаляет инструмент `ExitPlanMode`

104 104 

105<h3 id="resume-from-a-summary">

106 Возобновление из сводки

107</h3>

108 

109На плане Pro или Max, когда вы возобновляете сессию, которая была неактивна примерно более часа и превышает 100 000 токенов, Claude Code восстанавливает диалог и затем открывает диалоговое окно до отправки вашего первого сообщения. К этому моменту [кэш промптов](/docs/ru/prompt-caching#cache-lifetime) сессии уже истёк, поэтому следующий запрос один раз обрабатывает полную историю независимо от того, какой вариант в диалоговом окне вы выберете.

110 

111Диалоговое окно предлагает три способа продолжить сессию:

112 

113* **Resume from summary**: немедленно запускает [`/compact`](/docs/ru/context-window#what-survives-compaction). Последующие запросы содержат сводку вместо полной истории.

114* **Resume full session as-is**: загружает диалог без изменений.

115* **Don't ask me again**: возобновляет полную сессию и больше не показывает это диалоговое окно при будущих возобновлениях.

116 

117Возобновление как есть сохраняет доступными все детали диалога, но стоимость каждого запроса растёт с размером диалога. Возобновление из сводки обходится дешевле при каждом последующем запросе, поскольку передаётся сводка вместо полной истории, однако всё, что не вошло в сводку, больше не находится в контексте Claude. О том, откуда берётся эта стоимость за запрос, см. [почему использование растёт в длинной сессии](/docs/ru/costs#why-usage-climbs-in-a-long-session).

118 

119<h3 id="where-the-session-picker-looks">105<h3 id="where-the-session-picker-looks">

120 Где средство выбора сессий ищет сессии106 Где средство выбора сессий ищет сессии

121</h3>107</h3>

sub-agents.md +17 −5

Details

316| `name` | Да | Уникальный идентификатор длиной не более 256 символов, например `code-reviewer` или `reviewer-v2`. [Хуки](/docs/ru/hooks#subagentstart) получают это значение как `agent_type`. Имя файла не обязано совпадать. Имена не могут содержать `:`, который зарезервирован для [идентификаторов с областью действия плагина](/docs/ru/plugins/overview), таких как `my-plugin:reviewer` |316| `name` | Да | Уникальный идентификатор длиной не более 256 символов, например `code-reviewer` или `reviewer-v2`. [Хуки](/docs/ru/hooks#subagentstart) получают это значение как `agent_type`. Имя файла не обязано совпадать. Имена не могут содержать `:`, который зарезервирован для [идентификаторов с областью действия плагина](/docs/ru/plugins/overview), таких как `my-plugin:reviewer` |

317| `description` | Да | Когда Claude должен делегировать этому subagent |317| `description` | Да | Когда Claude должен делегировать этому subagent |

318| `tools` | Нет | [Инструменты](#available-tools), которые может использовать subagent, как строка, разделённая запятыми, такая как `Read, Grep, Bash` или список YAML. Наследует каждый инструмент, доступный для subagents, если опущено. Если ни один элемент в списке не разрешается в инструмент, subagent обычно [не запускается](/docs/ru/errors#agent-would-be-spawned-with-zero-tools) с ошибкой, называющей элементы. Чтобы предварительно загрузить Skills в контекст, используйте поле `skills` вместо перечисления `Skill` здесь |318| `tools` | Нет | [Инструменты](#available-tools), которые может использовать subagent, как строка, разделённая запятыми, такая как `Read, Grep, Bash` или список YAML. Наследует каждый инструмент, доступный для subagents, если опущено. Если ни один элемент в списке не разрешается в инструмент, subagent обычно [не запускается](/docs/ru/errors#agent-would-be-spawned-with-zero-tools) с ошибкой, называющей элементы. Чтобы предварительно загрузить Skills в контекст, используйте поле `skills` вместо перечисления `Skill` здесь |

319| `disallowedTools` | Нет | Инструменты для запрета, удалённые из унаследованного или указанного списка. Тот же формат, что и `tools`. Запись со спецификатором, такая как `Bash(git push *)`, по-прежнему [удаляет весь инструмент](#available-tools) |319| `disallowedTools` | Нет | Запрещаемые инструменты, удаляемые из унаследованного или указанного списка. Формат тот же, что и у `tools`. Запись со спецификатором, например `Bash(git push *)`, всё равно [удаляет инструмент целиком](#restrict-which-tools-a-subagent-can-use) |

320| `model` | Нет | [Модель](#choose-a-model) для использования: `sonnet`, `opus`, `haiku`, `fable`, полный ID модели, такой как `claude-opus-5-5`, или `inherit`. Когда вы опускаете его, Claude Code выбирает модель в [subagent model order](#choose-a-model) |320| `model` | Нет | [Модель](#choose-a-model) для использования: `sonnet`, `opus`, `haiku`, `fable`, полный ID модели, такой как `claude-opus-5-5`, или `inherit`. Когда вы опускаете его, Claude Code выбирает модель в [subagent model order](#choose-a-model) |

321| `permissionMode` | Нет | [Режим разрешений](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan` или `manual` как псевдоним для `default`. Игнорируется для [субагентов плагинов](#choose-the-subagent-scope) |321| `permissionMode` | Нет | [Режим разрешений](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan` или `manual` как псевдоним для `default`. Игнорируется для [субагентов плагинов](#choose-the-subagent-scope) |

322| `maxTurns` | Нет | Максимальное количество агентских ходов перед остановкой subagent. Когда subagent достигает лимита, Claude Code возвращает его вывод, отмеченный как частичный, и Claude может [возобновить его](#resume-subagents) для продолжения. Частичная маркировка требует Claude Code v2.1.246 или позже |322| `maxTurns` | Нет | Максимальное количество агентских ходов перед остановкой subagent. Когда subagent достигает лимита, Claude Code возвращает его вывод, отмеченный как частичный, и Claude может [возобновить его](#resume-subagents) для продолжения. Частичная маркировка требует Claude Code v2.1.246 или позже |


475 475 

476В [сессии без инструментов Task](/docs/ru/tools-reference#task-tool-availability) Claude Code не предоставляет инструменты задач subagents либо, даже когда subagent запускает другую модель. Встроенный teammate следует вашей сессии так же, пока teammate в своей собственной [split pane](/docs/ru/agent-teams#choose-a-display-mode) работает как отдельный процесс Claude Code, поэтому его собственная модель решает.476В [сессии без инструментов Task](/docs/ru/tools-reference#task-tool-availability) Claude Code не предоставляет инструменты задач subagents либо, даже когда subagent запускает другую модель. Встроенный teammate следует вашей сессии так же, пока teammate в своей собственной [split pane](/docs/ru/agent-teams#choose-a-display-mode) работает как отдельный процесс Claude Code, поэтому его собственная модель решает.

477 477 

478Чтобы ограничить инструменты, используйте поле `tools` как список разрешений или поле `disallowedTools` как список запретов. Этот пример использует `tools` для исключительного разрешения Read, Grep, Glob и Bash. Subagent не может редактировать файлы, писать файлы или использовать какие-либо MCP инструменты:478<h4 id="restrict-which-tools-a-subagent-can-use">

479 Ограничение инструментов, доступных субагенту

480</h4>

481 

482Чтобы ограничить инструменты, используйте поле `tools` как список разрешённых инструментов или поле `disallowedTools` как список запрещённых. Если заданы оба, сначала применяется `disallowedTools`, затем `tools` разрешается относительно оставшегося набора. Инструмент, указанный в обоих, удаляется.

483 

484В этом примере `tools` разрешает только Read, Grep, Glob и Bash. Субагент не может редактировать или записывать файлы и использовать инструменты MCP:

479 485 

480```yaml theme={null}486```yaml theme={null}

481---487---


495---501---

496```502```

497 503 

498Если оба установлены, `disallowedTools` применяется первым, затем `tools` разрешается против оставшегося пула. Инструмент, указанный в обоих, удаляется.

499 

500Когда ничего в списке `tools` не разрешается в инструмент, например потому что каждая запись неправильно написана или называет инструмент, который недоступен для subagents, Claude Code обычно отказывается запускать subagent и инструмент Agent возвращает ошибку, называющую неразрешённые записи; см. [Agent would be spawned with zero tools](/docs/ru/errors#agent-would-be-spawned-with-zero-tools) для сообщения и как исправить каждую запись. До версии 2.1.208 этот subagent запускался без инструментов и мог вернуть пустой или запутанный результат.504Когда ничего в списке `tools` не разрешается в инструмент, например потому что каждая запись неправильно написана или называет инструмент, который недоступен для subagents, Claude Code обычно отказывается запускать subagent и инструмент Agent возвращает ошибку, называющую неразрешённые записи; см. [Agent would be spawned with zero tools](/docs/ru/errors#agent-would-be-spawned-with-zero-tools) для сообщения и как исправить каждую запись. До версии 2.1.208 этот subagent запускался без инструментов и мог вернуть пустой или запутанный результат.

501 505 

502Оба поля принимают паттерны уровня MCP сервера в дополнение к точным названиям инструментов: `mcp__<server>` или `mcp__<server>__*` предоставляет или удаляет каждый инструмент из названного сервера. В `disallowedTools`, `mcp__*` также удаляет каждый MCP инструмент из любого сервера. Этот пример удаляет каждый инструмент из MCP сервера `github`, сохраняя инструменты из других серверов и встроенные инструменты в его пуле:506Поля `tools` и `disallowedTools` также принимают записи для целого MCP-сервера:

507 

508| Цель | Поле | Пример записи |

509| :- | :- | :- |

510| Дать субагенту все инструменты одного сервера | `tools` | `mcp__github__*` |

511| Исключить инструменты одного сервера | `disallowedTools` | `mcp__github` или `mcp__github__*` |

512| Исключить все инструменты MCP любого сервера | `disallowedTools` | `mcp__*` |

513 

514В этом примере удаляются все инструменты MCP-сервера `github`, а инструменты других серверов и встроенные инструменты в наборе субагента сохраняются:

503 515 

504```yaml theme={null}516```yaml theme={null}

505---517---