35Таблица ниже суммирует, когда срабатывает каждое событие. Раздел [Hook events](#hook-events) документирует полную схему входа и параметры управления решением для каждого события.35Таблица ниже суммирует, когда срабатывает каждое событие. Раздел [Hook events](#hook-events) документирует полную схему входа и параметры управления решением для каждого события.
36 36
37| Событие | Когда оно срабатывает |37| Событие | Когда оно срабатывает |
38| :-------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |38| :- | :- |
39| `SessionStart` | Когда сеанс начинается или возобновляется |39| `SessionStart` | Когда сеанс начинается или возобновляется |
40| `Setup` | Когда вы запускаете Claude Code с `--init-only`, или с `--init` или `--maintenance` в режиме `-p`. Для одноразовой подготовки в CI или скриптах |40| `Setup` | Когда вы запускаете Claude Code с `--init-only`, или с `--init` или `--maintenance` в режиме `-p`. Для одноразовой подготовки в CI или скриптах |
41| `UserPromptSubmit` | Когда вы отправляете запрос, прежде чем Claude его обработает |41| `UserPromptSubmit` | Когда вы отправляете запрос, прежде чем Claude его обработает |
259Место, где вы определяете hook, определяет его область действия:259Место, где вы определяете hook, определяет его область действия:
260 260
261| Расположение | Область действия | Общий доступ |261| Расположение | Область действия | Общий доступ |
262| :------------------------------------------------ | :----------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- |262| :- | :- | :- |
263| `~/.claude/settings.json` | Все ваши проекты | Нет, локально на вашей машине |263| `~/.claude/settings.json` | Все ваши проекты | Нет, локально на вашей машине |
264| `.claude/settings.json` | Один проект | Да, можно зафиксировать в репозитории |264| `.claude/settings.json` | Один проект | Да, можно зафиксировать в репозитории |
265| `.claude/settings.local.json` | Один проект | Нет, игнорируется git когда Claude Code сохраняет параметр в него |265| `.claude/settings.local.json` | Один проект | Нет, игнорируется git когда Claude Code сохраняет параметр в него |
297Поле `matcher` фильтрует срабатывание hooks. Способ оценки фильтра зависит от содержащихся в нём символов:297Поле `matcher` фильтрует срабатывание hooks. Способ оценки фильтра зависит от содержащихся в нём символов:
298 298
299| Значение фильтра | Оценивается как | Пример |299| Значение фильтра | Оценивается как | Пример |
300| :------------------------------------------------- | :------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |300| :- | :- | :- |
301| `"*"`, `""` или опущено | Совпадение со всеми | срабатывает при каждом возникновении события |301| `"*"`, `""` или опущено | Совпадение со всеми | срабатывает при каждом возникновении события |
302| Только буквы, цифры, `_`, `-`, пробелы, `,` и `\|` | Точная строка или список точных строк, разделённых `\|` или `,` с опциональным окружающим пробелом | `Bash` совпадает только с инструментом Bash; `Edit\|Write` и `Edit, Write` каждый совпадает с любым инструментом точно; `code-reviewer` совпадает только с этим типом агента |302| Только буквы, цифры, `_`, `-`, пробелы, `,` и `\|` | Точная строка или список точных строк, разделённых `\|` или `,` с опциональным окружающим пробелом | `Bash` совпадает только с инструментом Bash; `Edit\|Write` и `Edit, Write` каждый совпадает с любым инструментом точно; `code-reviewer` совпадает только с этим типом агента |
303| Содержит любой другой символ | Регулярное выражение JavaScript, без привязки | `^Notebook` совпадает с любым инструментом, начинающимся с Notebook; `mcp__memory__.*` совпадает с каждым инструментом с сервера `memory` |303| Содержит любой другой символ | Регулярное выражение JavaScript, без привязки | `^Notebook` совпадает с любым инструментом, начинающимся с Notebook; `mcp__memory__.*` совпадает с каждым инструментом с сервера `memory` |
313Каждый тип события совпадает с другим полем:313Каждый тип события совпадает с другим полем:
314 314
315| Событие | На что фильтр влияет | Примеры значений фильтра |315| Событие | На что фильтр влияет | Примеры значений фильтра |
316| :------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |316| :- | :- | :- |
317| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | имя инструмента | `Bash`, `Edit\|Write`, `mcp__.*` |317| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | имя инструмента | `Bash`, `Edit\|Write`, `mcp__.*` |
318| `SessionStart` | как сеанс начался | `startup`, `resume`, `clear`, `compact`, `fork` |318| `SessionStart` | как сеанс начался | `startup`, `resume`, `clear`, `compact`, `fork` |
319| `Setup` | какой флаг CLI запустил setup | `init`, `maintenance` |319| `Setup` | какой флаг CLI запустил setup | `init`, `maintenance` |
438Эти поля применяются ко всем типам hooks:438Эти поля применяются ко всем типам hooks:
439 439
440| Поле | Обязательно | Описание |440| Поле | Обязательно | Описание |
441| :-------------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |441| :- | :- | :- |
442| `type` | да | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` или `"agent"` |442| `type` | да | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` или `"agent"` |
443| `if` | нет | Синтаксис правила разрешения для фильтрации срабатывания этого hook, такой как `"Bash(git *)"` или `"Edit(*.ts)"`. Hook запускается только если вызов инструмента совпадает с шаблоном. См. таблицу [Bash matching table](#bash-if-matching) ниже для того, как Bash шаблоны оцениваются против подкоманд, `$()` и обратных кавычек. Оценивается только на событиях инструмента: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` и `PermissionDenied`. На других событиях hook с установленным `if` никогда не запускается. Использует тот же синтаксис, что и [правила разрешения](/docs/ru/permissions) |443| `if` | нет | Синтаксис правила разрешения для фильтрации срабатывания этого hook, такой как `"Bash(git *)"` или `"Edit(*.ts)"`. Hook запускается только если вызов инструмента совпадает с шаблоном. См. таблицу [Bash matching table](#bash-if-matching) ниже для того, как Bash шаблоны оцениваются против подкоманд, `$()` и обратных кавычек. Оценивается только на событиях инструмента: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` и `PermissionDenied`. На других событиях hook с установленным `if` никогда не запускается. Использует тот же синтаксис, что и [правила разрешения](/docs/ru/permissions) |
444| `timeout` | нет | Секунды перед отменой. Claude Code не применяет его на command hook, который вы запускаете с [`async: true`](#run-hooks-in-the-background). Значения по умолчанию: 600 для `command`, `http` и `mcp_tool`; 30 для `prompt`; 60 для `agent`. Claude Code снижает значение по умолчанию для `command`, `http` и `mcp_tool` до 30 на [`UserPromptSubmit`](#userpromptsubmit), [`PreModelSwitch`](#premodelswitch) и [`PostModelSwitch`](#postmodelswitch), и до 10 на [`MessageDisplay`](#messagedisplay). Hooks [`SessionEnd`](#sessionend) делят бюджет 1.5 секунды; если ваши параметры устанавливают более длительный `timeout` для каждого hook, Claude Code повышает бюджет, чтобы совпадать, до 60 секунд |444| `timeout` | нет | Секунды перед отменой. Claude Code не применяет его на command hook, который вы запускаете с [`async: true`](#run-hooks-in-the-background). Значения по умолчанию: 600 для `command`, `http` и `mcp_tool`; 30 для `prompt`; 60 для `agent`. Claude Code снижает значение по умолчанию для `command`, `http` и `mcp_tool` до 30 на [`UserPromptSubmit`](#userpromptsubmit), [`PreModelSwitch`](#premodelswitch) и [`PostModelSwitch`](#postmodelswitch), и до 10 на [`MessageDisplay`](#messagedisplay). Hooks [`SessionEnd`](#sessionend) делят бюджет 1.5 секунды; если ваши параметры устанавливают более длительный `timeout` для каждого hook, Claude Code повышает бюджет, чтобы совпадать, до 60 секунд |
452<span id="bash-if-matching" />Для Bash шаблонов, запускается ли ваша команда hook зависит от формы шаблона и команды Bash, которую вызывает Claude. Ведущие присваивания `VAR=value` удаляются перед совпадением.452<span id="bash-if-matching" />Для Bash шаблонов, запускается ли ваша команда hook зависит от формы шаблона и команды Bash, которую вызывает Claude. Ведущие присваивания `VAR=value` удаляются перед совпадением.
453 453
454| `if` шаблон | Bash команда | Hook запускается? | Почему |454| `if` шаблон | Bash команда | Hook запускается? | Почему |
455| :----------------- | :-------------------------- | :---------------- | :---------------------------------------------------------------------------------------------------------------------------------- |455| :- | :- | :- | :- |
456| `Bash(git *)` | `FOO=bar git push` | да | ведущие присваивания удаляются; `git push` совпадает |456| `Bash(git *)` | `FOO=bar git push` | да | ведущие присваивания удаляются; `git push` совпадает |
457| `Bash(git *)` | `npm test && git push` | да | каждая подкоманда проверяется; `git push` совпадает |457| `Bash(git *)` | `npm test && git push` | да | каждая подкоманда проверяется; `git push` совпадает |
458| `Bash(rm *)` | `echo $(rm -rf /)` | да | команды внутри `$()` и обратных кавычек проверяются; `rm -rf /` совпадает |458| `Bash(rm *)` | `echo $(rm -rf /)` | да | команды внутри `$()` и обратных кавычек проверяются; `rm -rf /` совпадает |
470В дополнение к [общим полям](#common-fields), command hooks принимают эти поля:470В дополнение к [общим полям](#common-fields), command hooks принимают эти поля:
471 471
472| Поле | Обязательно | Описание |472| Поле | Обязательно | Описание |
473| :------------ | :---------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |473| :- | :- | :- |
474| `command` | да | Команда оболочки для выполнения. С `args`, исполняемый файл для прямого запуска. См. [Exec form and shell form](#exec-form-and-shell-form) |474| `command` | да | Команда оболочки для выполнения. С `args`, исполняемый файл для прямого запуска. См. [Exec form and shell form](#exec-form-and-shell-form) |
475| `args` | нет | Список аргументов. Когда присутствует, `command` разрешается как исполняемый файл и запускается напрямую с `args` как вектор аргументов, без участия оболочки. См. [Exec form and shell form](#exec-form-and-shell-form) |475| `args` | нет | Список аргументов. Когда присутствует, `command` разрешается как исполняемый файл и запускается напрямую с `args` как вектор аргументов, без участия оболочки. См. [Exec form and shell form](#exec-form-and-shell-form) |
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) |
529В дополнение к [общим полям](#common-fields), HTTP hooks принимают эти поля:529В дополнение к [общим полям](#common-fields), HTTP hooks принимают эти поля:
530 530
531| Поле | Обязательно | Описание |531| Поле | Обязательно | Описание |
532| :--------------- | :---------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |532| :- | :- | :- |
533| `url` | да | URL для отправки POST запроса |533| `url` | да | URL для отправки POST запроса |
534| `headers` | нет | Дополнительные HTTP заголовки как пары ключ-значение. Значения поддерживают интерполяцию переменных окружения с использованием синтаксиса `$VAR_NAME` или `${VAR_NAME}`. Разрешены только переменные, указанные в `allowedEnvVars` |534| `headers` | нет | Дополнительные HTTP заголовки как пары ключ-значение. Значения поддерживают интерполяцию переменных окружения с использованием синтаксиса `$VAR_NAME` или `${VAR_NAME}`. Разрешены только переменные, указанные в `allowedEnvVars` |
535| `allowedEnvVars` | нет | Список имён переменных окружения, которые могут быть интерполированы в значения заголовков. Ссылки на неуказанные переменные заменяются пустыми строками. Требуется для любой интерполяции переменных окружения |535| `allowedEnvVars` | нет | Список имён переменных окружения, которые могут быть интерполированы в значения заголовков. Ссылки на неуказанные переменные заменяются пустыми строками. Требуется для любой интерполяции переменных окружения |
570В дополнение к [общим полям](#common-fields), MCP tool hooks принимают эти поля:570В дополнение к [общим полям](#common-fields), MCP tool hooks принимают эти поля:
571 571
572| Поле | Обязательно | Описание |572| Поле | Обязательно | Описание |
573| :------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |573| :- | :- | :- |
574| `server` | да | Имя настроенного MCP сервера. Для [plugin-bundled server](/docs/ru/mcp#plugin-provided-mcp-servers), это имя с областью `plugin:<plugin-name>:<server-name>`, такое как `plugin:my-plugin:db`, не голый ключ сервера. Сервер должен быть уже подключён; hook никогда не запускает поток OAuth или подключения |574| `server` | да | Имя настроенного MCP сервера. Для [plugin-bundled server](/docs/ru/mcp#plugin-provided-mcp-servers), это имя с областью `plugin:<plugin-name>:<server-name>`, такое как `plugin:my-plugin:db`, не голый ключ сервера. Сервер должен быть уже подключён; hook никогда не запускает поток OAuth или подключения |
575| `tool` | да | Имя инструмента для вызова на этом сервере |575| `tool` | да | Имя инструмента для вызова на этом сервере |
576| `input` | нет | Аргументы, передаваемые инструменту. Строковые значения поддерживают подстановку `${path}` из [JSON входа](#hook-input-and-output) hook, такую как `"${tool_input.file_path}"` |576| `input` | нет | Аргументы, передаваемые инструменту. Строковые значения поддерживают подстановку `${path}` из [JSON входа](#hook-input-and-output) hook, такую как `"${tool_input.file_path}"` |
634В дополнение к [общим полям](#common-fields), prompt и agent hooks принимают эти поля:634В дополнение к [общим полям](#common-fields), prompt и agent hooks принимают эти поля:
635 635
636| Поле | Обязательно | Описание |636| Поле | Обязательно | Описание |
637| :------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |637| :- | :- | :- |
638| `prompt` | да | Текст подсказки для отправки модели. Используйте `$ARGUMENTS` как заполнитель для JSON входа hook. Экранируйте обратной косой чертой для включения буквального текста: `\$1.00` отображается как `$1.00` |638| `prompt` | да | Текст подсказки для отправки модели. Используйте `$ARGUMENTS` как заполнитель для JSON входа hook. Экранируйте обратной косой чертой для включения буквального текста: `\$1.00` отображается как `$1.00` |
639| `model` | нет | Модель для использования при оценке. По умолчанию быстрая модель |639| `model` | нет | Модель для использования при оценке. По умолчанию быстрая модель |
640 640
786Hook события получают эти поля в виде JSON в дополнение к полям, специфичным для события, задокументированным в каждом разделе [hook event](#hook-events). Для hooks команд этот JSON поступает через stdin. Для HTTP hooks он поступает как тело POST-запроса.786Hook события получают эти поля в виде JSON в дополнение к полям, специфичным для события, задокументированным в каждом разделе [hook event](#hook-events). Для hooks команд этот JSON поступает через stdin. Для HTTP hooks он поступает как тело POST-запроса.
787 787
788| Поле | Описание |788| Поле | Описание |
789| :---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |789| :- | :- |
790| `session_id` | Текущий идентификатор сеанса |790| `session_id` | Текущий идентификатор сеанса |
791| `prompt_id` | UUID, идентифицирующий пользовательский запрос, который в настоящее время обрабатывается. Совпадает с атрибутом [`prompt.id` на событиях OpenTelemetry](/docs/ru/monitoring-usage#event-correlation-attributes), поэтому вы можете коррелировать выход hook с телеметрией для одного запроса. Отсутствует до первого ввода пользователя. Требуется Claude Code v2.1.196 или позже |791| `prompt_id` | UUID, идентифицирующий пользовательский запрос, который в настоящее время обрабатывается. Совпадает с атрибутом [`prompt.id` на событиях OpenTelemetry](/docs/ru/monitoring-usage#event-correlation-attributes), поэтому вы можете коррелировать выход hook с телеметрией для одного запроса. Отсутствует до первого ввода пользователя. Требуется Claude Code v2.1.196 или позже |
792| `transcript_path` | Путь к файлу JSON разговора. Файл транскрипта записывается асинхронно и может отставать от разговора в памяти, поэтому он может еще не включать самые последние сообщения текущего хода, когда срабатывает hook. Hooks, которым нужен финальный текст ассистента текущего хода, должны использовать `last_assistant_message` на [Stop](#stop) и [SubagentStop](#subagentstop) вместо чтения транскрипта |792| `transcript_path` | Путь к файлу JSON разговора. Файл транскрипта записывается асинхронно и может отставать от разговора в памяти, поэтому он может еще не включать самые последние сообщения текущего хода, когда срабатывает hook. Hooks, которым нужен финальный текст ассистента текущего хода, должны использовать `last_assistant_message` на [Stop](#stop) и [SubagentStop](#subagentstop) вместо чтения транскрипта |
799При запуске с `--agent` или внутри subagent включаются два дополнительных поля:799При запуске с `--agent` или внутри subagent включаются два дополнительных поля:
800 800
801| Поле | Описание |801| Поле | Описание |
802| :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |802| :- | :- |
803| `agent_id` | Уникальный идентификатор для subagent. Присутствует только когда hook срабатывает внутри вызова subagent. Используйте это для различения вызовов hook subagent от вызовов основного потока. |803| `agent_id` | Уникальный идентификатор для subagent. Присутствует только когда hook срабатывает внутри вызова subagent. Используйте это для различения вызовов hook subagent от вызовов основного потока. |
804| `agent_type` | Имя агента (например, `"Explore"` или `"security-reviewer"`). Присутствует, когда сеанс использует `--agent` или hook срабатывает внутри subagent. Для subagents тип subagent имеет приоритет над значением `--agent` сеанса. См. [SubagentStart](#subagentstart) для значений, которые сообщают пользовательские и plugin subagents, и как написать matcher для имени с областью plugin. |804| `agent_type` | Имя агента (например, `"Explore"` или `"security-reviewer"`). Присутствует, когда сеанс использует `--agent` или hook срабатывает внутри subagent. Для subagents тип subagent имеет приоритет над значением `--agent` сеанса. См. [SubagentStart](#subagentstart) для значений, которые сообщают пользовательские и plugin subagents, и как написать matcher для имени с областью plugin. |
805 805
926Exit code 2 — это способ, которым hook сигнализирует "стоп, не делай этого". Эффект зависит от события, потому что некоторые события представляют действия, которые могут быть заблокированы (например, вызов инструмента, который еще не произошел), а другие представляют вещи, которые уже произошли или не могут быть предотвращены.926Exit code 2 — это способ, которым hook сигнализирует "стоп, не делай этого". Эффект зависит от события, потому что некоторые события представляют действия, которые могут быть заблокированы (например, вызов инструмента, который еще не произошел), а другие представляют вещи, которые уже произошли или не могут быть предотвращены.
927 927
928| Hook event | Может блокировать? | Что происходит на exit 2 |928| Hook event | Может блокировать? | Что происходит на exit 2 |
929| :-------------------- | :----------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |929| :- | :- | :- |
930| `PreToolUse` | Да | Блокирует вызов инструмента |930| `PreToolUse` | Да | Блокирует вызов инструмента |
931| `PermissionRequest` | Нет | Exit code 2 не учитывается для этого события и поток разрешений продолжается без изменений. Отклоните через объект [`decision`](#permissionrequest-decision-control) вместо этого |931| `PermissionRequest` | Нет | Exit code 2 не учитывается для этого события и поток разрешений продолжается без изменений. Отклоните через объект [`decision`](#permissionrequest-decision-control) вместо этого |
932| `UserPromptSubmit` | Да | Блокирует обработку запроса и стирает запрос |932| `UserPromptSubmit` | Да | Блокирует обработку запроса и стирает запрос |
1003* **`hookSpecificOutput`** — это вложенный объект для событий, которым нужно более богатое управление. Он требует поле `hookEventName`, установленное на имя события.1003* **`hookSpecificOutput`** — это вложенный объект для событий, которым нужно более богатое управление. Он требует поле `hookEventName`, установленное на имя события.
1004 1004
1005| Поле | По умолчанию | Описание |1005| Поле | По умолчанию | Описание |
1006| :----------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1006| :- | :- | :- |
1007| `continue` | `true` | Если `false`, Claude полностью прекращает обработку после запуска hook. Имеет приоритет над любыми полями решения, специфичными для события |1007| `continue` | `true` | Если `false`, Claude полностью прекращает обработку после запуска hook. Имеет приоритет над любыми полями решения, специфичными для события |
1008| `stopReason` | нет | Сообщение, показанное пользователю, когда `continue` равно `false`. Оно остается в разговоре, поэтому Claude видит его, если разговор продолжается |1008| `stopReason` | нет | Сообщение, показанное пользователю, когда `continue` равно `false`. Оно остается в разговоре, поэтому Claude видит его, если разговор продолжается |
1009| `suppressOutput` | `false` | Не имеет эффекта: Claude Code принимает поле, но не действует на него. Stdout успешного hook никогда не показывается в транскрипте и записывается в журнал отладки |1009| `suppressOutput` | `false` | Не имеет эффекта: Claude Code принимает поле, но не действует на него. Stdout успешного hook никогда не показывается в транскрипте и записывается в журнал отладки |
1101Не каждое событие поддерживает блокировку или управление поведением через JSON. События, которые это делают, каждое использует другой набор полей для выражения этого решения. Используйте эту таблицу как быструю ссылку перед написанием hook:1101Не каждое событие поддерживает блокировку или управление поведением через JSON. События, которые это делают, каждое использует другой набор полей для выражения этого решения. Используйте эту таблицу как быструю ссылку перед написанием hook:
1102 1102
1103| События | Паттерн решения | Ключевые поля |1103| События | Паттерн решения | Ключевые поля |
1104| :---------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |1104| :- | :- | :- |
1105| UserPromptSubmit, UserPromptExpansion, PostToolUse, PostToolUseFailure, PostToolBatch, Stop, SubagentStop, ConfigChange, PreCompact | Top-level `decision` | `decision: "block"`, `reason`. Stop и SubagentStop также принимают `hookSpecificOutput.additionalContext` для [неошибочной обратной связи, которая продолжает разговор](#stop-decision-control) |1105| UserPromptSubmit, UserPromptExpansion, PostToolUse, PostToolUseFailure, PostToolBatch, Stop, SubagentStop, ConfigChange, PreCompact | Top-level `decision` | `decision: "block"`, `reason`. Stop и SubagentStop также принимают `hookSpecificOutput.additionalContext` для [неошибочной обратной связи, которая продолжает разговор](#stop-decision-control) |
1106| TeammateIdle, TaskCompleted | Exit code или `continue: false` | Exit code 2 блокирует действие с обратной связью stderr. JSON `{"continue": false, "stopReason": "..."}` также полностью останавливает товарища, совпадая с поведением hook `Stop`; [TaskCompleted игнорирует это, когда инструмент `TaskUpdate` вызвал событие](#taskcompleted-decision-control) |1106| TeammateIdle, TaskCompleted | Exit code или `continue: false` | Exit code 2 блокирует действие с обратной связью stderr. JSON `{"continue": false, "stopReason": "..."}` также полностью останавливает товарища, совпадая с поведением hook `Stop`; [TaskCompleted игнорирует это, когда инструмент `TaskUpdate` вызвал событие](#taskcompleted-decision-control) |
1107| TaskCreated | Exit code или top-level `decision` | Exit code 2 или `decision: "block"` [отменяет задачу](#taskcreated-decision-control) и возвращает сообщение Claude. `continue: false` игнорируется |1107| TaskCreated | Exit code или top-level `decision` | Exit code 2 или `decision: "block"` [отменяет задачу](#taskcreated-decision-control) и возвращает сообщение Claude. `continue: false` игнорируется |
1192Значение matcher соответствует тому, как был инициирован сеанс:1192Значение matcher соответствует тому, как был инициирован сеанс:
1193 1193
1194| Matcher | Когда срабатывает |1194| Matcher | Когда срабатывает |
1195| :-------- | :------------------------------------------------------------------------------------------------------------------------------- |1195| :- | :- |
1196| `startup` | Новый сеанс |1196| `startup` | Новый сеанс |
1197| `resume` | `--resume`, `--continue` или `/resume` |1197| `resume` | `--resume`, `--continue` или `/resume` |
1198| `clear` | `/clear` |1198| `clear` | `/clear` |
1216Помимо [общих полей ввода](#common-input-fields), hooks SessionStart получают `source` и опционально `model`, `agent_type` и `session_title`:1216Помимо [общих полей ввода](#common-input-fields), hooks SessionStart получают `source` и опционально `model`, `agent_type` и `session_title`:
1217 1217
1218| Поле | Описание |1218| Поле | Описание |
1219| :-------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1219| :- | :- |
1220| `source` | Как был запущен сеанс: `"startup"` для новых сеансов, `"resume"` для возобновленных сеансов, `"clear"` после `/clear`, `"compact"` после сжатия или `"fork"` для нового сеанса, разветвленного из существующего |1220| `source` | Как был запущен сеанс: `"startup"` для новых сеансов, `"resume"` для возобновленных сеансов, `"clear"` после `/clear`, `"compact"` после сжатия или `"fork"` для нового сеанса, разветвленного из существующего |
1221| `model` | Идентификатор активной модели. Может быть опущен, например после `/clear` или когда сеанс восстанавливается через восстановление разговора, поэтому проверьте наличие поля перед его чтением |1221| `model` | Идентификатор активной модели. Может быть опущен, например после `/clear` или когда сеанс восстанавливается через восстановление разговора, поэтому проверьте наличие поля перед его чтением |
1222| `agent_type` | Имя агента, присутствует при запуске Claude Code с `claude --agent <name>` |1222| `agent_type` | Имя агента, присутствует при запуске Claude Code с `claude --agent <name>` |
1225Когда `source` имеет значение `"resume"` или `"fork"` и транскрипт содержит по крайней мере один ответ от Claude, hooks SessionStart также получают четыре поля ниже. Ваш hook может использовать их для сообщения о стоимости возобновления устаревшего разговора перед первым запросом, например в [`systemMessage`](#json-output). Эти поля требуют Claude Code v2.1.251 или позже.1225Когда `source` имеет значение `"resume"` или `"fork"` и транскрипт содержит по крайней мере один ответ от Claude, hooks SessionStart также получают четыре поля ниже. Ваш hook может использовать их для сообщения о стоимости возобновления устаревшего разговора перед первым запросом, например в [`systemMessage`](#json-output). Эти поля требуют Claude Code v2.1.251 или позже.
1226 1226
1227| Поле | Описание |1227| Поле | Описание |
1228| :---------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1228| :- | :- |
1229| `seconds_since_last_response` | Настоящее время в секундах с момента последнего ответа в возобновленном транскрипте |1229| `seconds_since_last_response` | Настоящее время в секундах с момента последнего ответа в возобновленном транскрипте |
1230| `context_tokens` | Токены, которые первый запрос возобновленного сеанса повторно отправляет как его подсказка |1230| `context_tokens` | Токены, которые первый запрос возобновленного сеанса повторно отправляет как его подсказка |
1231| `prompt_cache_likely_expired` | `true`, когда последний ответ старше [времени жизни кэша подсказок](/docs/ru/prompt-caching#cache-lifetime) сеанса или более позднее сжатие заменило кэшированный разговор |1231| `prompt_cache_likely_expired` | `true`, когда последний ответ старше [времени жизни кэша подсказок](/docs/ru/prompt-caching#cache-lifetime) сеанса или более позднее сжатие заменило кэшированный разговор |
1255Claude Code добавляет stdout, который он [рассматривает как простой текст](#exit-code-0), в контекст Claude. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, вы можете вернуть эти поля, специфичные для события:1255Claude Code добавляет stdout, который он [рассматривает как простой текст](#exit-code-0), в контекст Claude. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, вы можете вернуть эти поля, специфичные для события:
1256 1256
1257| Поле | Описание |1257| Поле | Описание |
1258| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1258| :- | :- |
1259| `additionalContext` | Строка, добавленная в контекст Claude в начале разговора, перед первой подсказкой. См. [Add context for Claude](#add-context-for-claude) для информации о том, как доставляется текст и что в него поместить |1259| `additionalContext` | Строка, добавленная в контекст Claude в начале разговора, перед первой подсказкой. См. [Add context for Claude](#add-context-for-claude) для информации о том, как доставляется текст и что в него поместить |
1260| `initialUserMessage` | Строка, используемая как первое сообщение пользователя сеанса. Применяется в [неинтерактивном режиме](/docs/ru/headless) с флагом `-p`, где она становится первым ходом, даже если подсказка не предоставлена. Если подсказка предоставлена, она следует как следующий ход. В отличие от `additionalContext`, который присоединяется к существующему ходу, это создает ход |1260| `initialUserMessage` | Строка, используемая как первое сообщение пользователя сеанса. Применяется в [неинтерактивном режиме](/docs/ru/headless) с флагом `-p`, где она становится первым ходом, даже если подсказка не предоставлена. Если подсказка предоставлена, она следует как следующий ход. В отличие от `additionalContext`, который присоединяется к существующему ходу, это создает ход |
1261| `sessionTitle` | Устанавливает название сеанса с тем же эффектом, что и `/rename`. Используйте для автоматического именования сеансов из папки запуска, ветки git или имени worktree. Применяется, когда `source` имеет значение `"startup"`, `"resume"` или `"fork"`; игнорируется на `"clear"` и `"compact"` |1261| `sessionTitle` | Устанавливает название сеанса с тем же эффектом, что и `/rename`. Используйте для автоматического именования сеансов из папки запуска, ветки git или имени worktree. Применяется, когда `source` имеет значение `"startup"`, `"resume"` или `"fork"`; игнорируется на `"clear"` и `"compact"` |
1339Значение matcher соответствует флагу CLI, который запустил hook:1339Значение matcher соответствует флагу CLI, который запустил hook:
1340 1340
1341| Matcher | Когда срабатывает |1341| Matcher | Когда срабатывает |
1342| :------------ | :------------------------------------------ |1342| :- | :- |
1343| `init` | `claude --init-only` или `claude -p --init` |1343| `init` | `claude --init-only` или `claude -p --init` |
1344| `maintenance` | `claude -p --maintenance` |1344| `maintenance` | `claude -p --maintenance` |
1345 1345
1392Помимо [общих полей ввода](#common-input-fields), hooks InstructionsLoaded получают эти поля:1392Помимо [общих полей ввода](#common-input-fields), hooks InstructionsLoaded получают эти поля:
1393 1393
1394| Поле | Описание |1394| Поле | Описание |
1395| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1395| :- | :- |
1396| `file_path` | Абсолютный путь к файлу инструкций, который был загружен |1396| `file_path` | Абсолютный путь к файлу инструкций, который был загружен |
1397| `memory_type` | Область действия файла: `"User"`, `"Project"`, `"Local"` или `"Managed"` |1397| `memory_type` | Область действия файла: `"User"`, `"Project"`, `"Local"` или `"Managed"` |
1398| `load_reason` | Почему файл был загружен: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"` или `"compact"`. Значение `"compact"` срабатывает, когда файлы инструкций перезагружаются после события сжатия |1398| `load_reason` | Почему файл был загружен: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"` или `"compact"`. Значение `"compact"` срабатывает, когда файлы инструкций перезагружаются после события сжатия |
1463Чтобы заблокировать подсказку, верните объект JSON с `decision`, установленным на `"block"`:1463Чтобы заблокировать подсказку, верните объект JSON с `decision`, установленным на `"block"`:
1464 1464
1465| Поле | Описание |1465| Поле | Описание |
1466| :----------------------- | :------------------------------------------------------------------------------------------------------------------------------------------ |1466| :- | :- |
1467| `decision` | `"block"` предотвращает обработку подсказки и стирает ее из контекста. Опустите, чтобы позволить подсказке продолжить |1467| `decision` | `"block"` предотвращает обработку подсказки и стирает ее из контекста. Опустите, чтобы позволить подсказке продолжить |
1468| `reason` | Показано пользователю, когда `decision` имеет значение `"block"`. Не добавляется в контекст |1468| `reason` | Показано пользователю, когда `decision` имеет значение `"block"`. Не добавляется в контекст |
1469| `additionalContext` | Строка, добавленная в контекст Claude рядом с отправленной подсказкой. См. [Add context for Claude](#add-context-for-claude) |1469| `additionalContext` | Строка, добавленная в контекст Claude рядом с отправленной подсказкой. См. [Add context for Claude](#add-context-for-claude) |
1522Hooks `UserPromptExpansion` могут блокировать расширение или добавлять контекст. Все [поля JSON-вывода](#json-output) доступны.1522Hooks `UserPromptExpansion` могут блокировать расширение или добавлять контекст. Все [поля JSON-вывода](#json-output) доступны.
1523 1523
1524| Поле | Описание |1524| Поле | Описание |
1525| :------------------ | :-------------------------------------------------------------------------------------------------------------------------- |1525| :- | :- |
1526| `decision` | `"block"` предотвращает расширение команды. Опустите, чтобы позволить ей продолжить |1526| `decision` | `"block"` предотвращает расширение команды. Опустите, чтобы позволить ей продолжить |
1527| `reason` | Показано пользователю, когда `decision` имеет значение `"block"` |1527| `reason` | Показано пользователю, когда `decision` имеет значение `"block"` |
1528| `additionalContext` | Строка, добавленная в контекст Claude рядом с развернутой подсказкой. См. [Add context for Claude](#add-context-for-claude) |1528| `additionalContext` | Строка, добавленная в контекст Claude рядом с развернутой подсказкой. См. [Add context for Claude](#add-context-for-claude) |
1567Помимо [общих полей ввода](#common-input-fields), hooks MessageDisplay получают идентификаторы для хода и сообщения, позицию этого вызова в сообщении и новый текст в `delta`. Границы партий зависят от того, как транслируется текст, поэтому используйте `index` и `final` для отслеживания прогресса через сообщение, а не ожидайте, что строки будут сгруппированы определенным образом.1567Помимо [общих полей ввода](#common-input-fields), hooks MessageDisplay получают идентификаторы для хода и сообщения, позицию этого вызова в сообщении и новый текст в `delta`. Границы партий зависят от того, как транслируется текст, поэтому используйте `index` и `final` для отслеживания прогресса через сообщение, а не ожидайте, что строки будут сгруппированы определенным образом.
1568 1568
1569| Поле | Описание |1569| Поле | Описание |
1570| :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |1570| :- | :- |
1571| `turn_id` | UUID текущего хода |1571| `turn_id` | UUID текущего хода |
1572| `message_id` | UUID сообщения помощника, которое отображается. Стабилен для каждой партии одного сообщения. Это не API `msg_…` id, поэтому его нельзя коррелировать с id сообщений транскрипта |1572| `message_id` | UUID сообщения помощника, которое отображается. Стабилен для каждой партии одного сообщения. Это не API `msg_…` id, поэтому его нельзя коррелировать с id сообщений транскрипта |
1573| `index` | Индекс этой партии в сообщении, начиная с нуля |1573| `index` | Индекс этой партии в сообщении, начиная с нуля |
1595Помимо [полей JSON-вывода](#json-output), доступных всем hooks, hooks MessageDisplay могут вернуть `displayContent` для замены delta на экране:1595Помимо [полей JSON-вывода](#json-output), доступных всем hooks, hooks MessageDisplay могут вернуть `displayContent` для замены delta на экране:
1596 1596
1597| Поле | Описание |1597| Поле | Описание |
1598| :--------------- | :------------------------------------------------------------------- |1598| :- | :- |
1599| `displayContent` | Текст, отображаемый вместо delta. Опустите для отображения исходного |1599| `displayContent` | Текст, отображаемый вместо delta. Опустите для отображения исходного |
1600 1600
1601Hooks MessageDisplay не имеют управления решением. Они не могут блокировать сообщение или изменять то, что хранится в транскрипте или отправляется Claude. Claude Code действует на `displayContent` из их JSON-вывода и отбрасывает `systemMessage` и `continue`.1601Hooks MessageDisplay не имеют управления решением. Они не могут блокировать сообщение или изменять то, что хранится в транскрипте или отправляется Claude. Claude Code действует на `displayContent` из их JSON-вывода и отбрасывает `systemMessage` и `continue`.
1736Выполняет команды оболочки.1736Выполняет команды оболочки.
1737 1737
1738| Поле | Тип | Пример | Описание |1738| Поле | Тип | Пример | Описание |
1739| :------------------ | :------ | :----------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- |1739| :- | :- | :- | :- |
1740| `command` | string | `"npm test"` | Команда оболочки для выполнения |1740| `command` | string | `"npm test"` | Команда оболочки для выполнения |
1741| `description` | string | `"Run test suite"` | Опциональное описание того, что делает команда |1741| `description` | string | `"Run test suite"` | Опциональное описание того, что делает команда |
1742| `timeout` | number | `120000` | Опциональный тайм-аут в миллисекундах. Значения выше [максимума](/docs/ru/tools-reference#bash-tool-behavior) уменьшаются до максимума, а не отклоняются |1742| `timeout` | number | `120000` | Опциональный тайм-аут в миллисекундах. Значения выше [максимума](/docs/ru/tools-reference#bash-tool-behavior) уменьшаются до максимума, а не отклоняются |
1753`changedFiles` и `files` перечисляют то, что команда изменила; остальные поля говорят, насколько полон и надежен этот список.1753`changedFiles` и `files` перечисляют то, что команда изменила; остальные поля говорят, насколько полон и надежен этот список.
1754 1754
1755| Поле | Тип | Пример | Описание |1755| Поле | Тип | Пример | Описание |
1756| :------------- | :------ | :------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1756| :- | :- | :- | :- |
1757| `changedFiles` | array | `["/path/to/src/app.ts"]` | Абсолютные пути файлов, которые команда изменила, максимум 200. Присутствует, когда `files` содержит diff или `moreFiles` выше нуля |1757| `changedFiles` | array | `["/path/to/src/app.ts"]` | Абсолютные пути файлов, которые команда изменила, максимум 200. Присутствует, когда `files` содержит diff или `moreFiles` выше нуля |
1758| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | Diffs до 5 измененных файлов для отображения. `created` или `deleted` имеет значение `true` для файла, который команда добавила или удалила |1758| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | Diffs до 5 измененных файлов для отображения. `created` или `deleted` имеет значение `true` для файла, который команда добавила или удалила |
1759| `moreFiles` | number | `2` | Количество измененных файлов без diff в `files` |1759| `moreFiles` | number | `2` | Количество измененных файлов без diff в `files` |
1772Поля совпадают с инструментом Bash, со строкой команды в `command`:1772Поля совпадают с инструментом Bash, со строкой команды в `command`:
1773 1773
1774| Поле | Тип | Пример | Описание |1774| Поле | Тип | Пример | Описание |
1775| :------------------ | :------ | :------------------------- | :--------------------------------------------- |1775| :- | :- | :- | :- |
1776| `command` | string | `"Get-ChildItem -Recurse"` | Команда PowerShell для выполнения |1776| `command` | string | `"Get-ChildItem -Recurse"` | Команда PowerShell для выполнения |
1777| `description` | string | `"List files recursively"` | Опциональное описание того, что делает команда |1777| `description` | string | `"List files recursively"` | Опциональное описание того, что делает команда |
1778| `timeout` | number | `120000` | Опциональный тайм-аут в миллисекундах |1778| `timeout` | number | `120000` | Опциональный тайм-аут в миллисекундах |
1791Создает или перезаписывает файл.1791Создает или перезаписывает файл.
1792 1792
1793| Поле | Тип | Пример | Описание |1793| Поле | Тип | Пример | Описание |
1794| :---------- | :----- | :-------------------- | :--------------------------------- |1794| :- | :- | :- | :- |
1795| `file_path` | string | `"/path/to/file.txt"` | Абсолютный путь к файлу для записи |1795| `file_path` | string | `"/path/to/file.txt"` | Абсолютный путь к файлу для записи |
1796| `content` | string | `"file content"` | Содержимое для записи в файл |1796| `content` | string | `"file content"` | Содержимое для записи в файл |
1797 1797
1802Заменяет строку в существующем файле.1802Заменяет строку в существующем файле.
1803 1803
1804| Поле | Тип | Пример | Описание |1804| Поле | Тип | Пример | Описание |
1805| :------------ | :------ | :-------------------- | :----------------------------------------- |1805| :- | :- | :- | :- |
1806| `file_path` | string | `"/path/to/file.txt"` | Абсолютный путь к файлу для редактирования |1806| `file_path` | string | `"/path/to/file.txt"` | Абсолютный путь к файлу для редактирования |
1807| `old_string` | string | `"original text"` | Текст для поиска и замены |1807| `old_string` | string | `"original text"` | Текст для поиска и замены |
1808| `new_string` | string | `"replacement text"` | Текст замены |1808| `new_string` | string | `"replacement text"` | Текст замены |
1815Читает содержимое файла.1815Читает содержимое файла.
1816 1816
1817| Поле | Тип | Пример | Описание |1817| Поле | Тип | Пример | Описание |
1818| :---------- | :----- | :-------------------- | :------------------------------------------ |1818| :- | :- | :- | :- |
1819| `file_path` | string | `"/path/to/file.txt"` | Абсолютный путь к файлу для чтения |1819| `file_path` | string | `"/path/to/file.txt"` | Абсолютный путь к файлу для чтения |
1820| `offset` | number | `10` | Опциональный номер строки для начала чтения |1820| `offset` | number | `10` | Опциональный номер строки для начала чтения |
1821| `limit` | number | `50` | Опциональное количество строк для чтения |1821| `limit` | number | `50` | Опциональное количество строк для чтения |
1827Находит файлы, соответствующие шаблону glob.1827Находит файлы, соответствующие шаблону glob.
1828 1828
1829| Поле | Тип | Пример | Описание |1829| Поле | Тип | Пример | Описание |
1830| :-------- | :----- | :--------------- | :-------------------------------------------------------------------------- |1830| :- | :- | :- | :- |
1831| `pattern` | string | `"**/*.ts"` | Шаблон glob для совпадения файлов |1831| `pattern` | string | `"**/*.ts"` | Шаблон glob для совпадения файлов |
1832| `path` | string | `"/path/to/dir"` | Опциональная директория для поиска. По умолчанию текущая рабочая директория |1832| `path` | string | `"/path/to/dir"` | Опциональная директория для поиска. По умолчанию текущая рабочая директория |
1833 1833
1838Ищет содержимое файлов с регулярными выражениями.1838Ищет содержимое файлов с регулярными выражениями.
1839 1839
1840| Поле | Тип | Пример | Описание |1840| Поле | Тип | Пример | Описание |
1841| :------------ | :------ | :--------------- | :------------------------------------------------------------------------------------- |1841| :- | :- | :- | :- |
1842| `pattern` | string | `"TODO.*fix"` | Шаблон регулярного выражения для поиска |1842| `pattern` | string | `"TODO.*fix"` | Шаблон регулярного выражения для поиска |
1843| `path` | string | `"/path/to/dir"` | Опциональный файл или директория для поиска |1843| `path` | string | `"/path/to/dir"` | Опциональный файл или директория для поиска |
1844| `glob` | string | `"*.ts"` | Опциональный шаблон glob для фильтрации файлов |1844| `glob` | string | `"*.ts"` | Опциональный шаблон glob для фильтрации файлов |
1853Получает и обрабатывает веб-контент.1853Получает и обрабатывает веб-контент.
1854 1854
1855| Поле | Тип | Пример | Описание |1855| Поле | Тип | Пример | Описание |
1856| :------- | :----- | :---------------------------- | :------------------------------------------- |1856| :- | :- | :- | :- |
1857| `url` | string | `"https://example.com/api"` | URL для получения контента |1857| `url` | string | `"https://example.com/api"` | URL для получения контента |
1858| `prompt` | string | `"Extract the API endpoints"` | Подсказка для запуска на полученном контенте |1858| `prompt` | string | `"Extract the API endpoints"` | Подсказка для запуска на полученном контенте |
1859 1859
1864Ищет в веб.1864Ищет в веб.
1865 1865
1866| Поле | Тип | Пример | Описание |1866| Поле | Тип | Пример | Описание |
1867| :---------------- | :----- | :----------------------------- | :------------------------------------------------------ |1867| :- | :- | :- | :- |
1868| `query` | string | `"react hooks best practices"` | Поисковый запрос |1868| `query` | string | `"react hooks best practices"` | Поисковый запрос |
1869| `allowed_domains` | array | `["docs.example.com"]` | Опциональный: включить результаты только с этих доменов |1869| `allowed_domains` | array | `["docs.example.com"]` | Опциональный: включить результаты только с этих доменов |
1870| `blocked_domains` | array | `["spam.example.com"]` | Опциональный: исключить результаты с этих доменов |1870| `blocked_domains` | array | `["spam.example.com"]` | Опциональный: исключить результаты с этих доменов |
1876Порождает [подагента](/docs/ru/sub-agents).1876Порождает [подагента](/docs/ru/sub-agents).
1877 1877
1878| Поле | Тип | Пример | Описание |1878| Поле | Тип | Пример | Описание |
1879| :-------------- | :----- | :------------------------- | :------------------------------------------------------------- |1879| :- | :- | :- | :- |
1880| `prompt` | string | `"Find all API endpoints"` | Задача для выполнения агентом |1880| `prompt` | string | `"Find all API endpoints"` | Задача для выполнения агентом |
1881| `description` | string | `"Find API endpoints"` | Краткое описание задачи |1881| `description` | string | `"Find API endpoints"` | Краткое описание задачи |
1882| `subagent_type` | string | `"Explore"` | Тип специализированного агента для использования |1882| `subagent_type` | string | `"Explore"` | Тип специализированного агента для использования |
1885Когда вызов Agent переднего плана завершается, ваш [hook PostToolUse](#posttooluse) получает результат подагента и телеметрию запуска в `tool_response`. Прочитайте эти поля для проверки запуска; для сводок токенов и затрат по подагентам используйте [счетчики токенов и затрат](/docs/ru/monitoring-usage#token-counter), отфильтрованные по `query_source` `"subagent"`, так как `totalTokens` и `usage` охватывают только финальный запрос:1885Когда вызов Agent переднего плана завершается, ваш [hook PostToolUse](#posttooluse) получает результат подагента и телеметрию запуска в `tool_response`. Прочитайте эти поля для проверки запуска; для сводок токенов и затрат по подагентам используйте [счетчики токенов и затрат](/docs/ru/monitoring-usage#token-counter), отфильтрованные по `query_source` `"subagent"`, так как `totalTokens` и `usage` охватывают только финальный запрос:
1886 1886
1887| Поле | Тип | Пример | Описание |1887| Поле | Тип | Пример | Описание |
1888| :------------------ | :----- | :---------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1888| :- | :- | :- | :- |
1889| `status` | string | `"completed"` | `"completed"` для подагентов переднего плана, `"async_launched"` для подагентов фонового плана. Начиная с версии 2.1.198, подагенты выполняются в фоновом режиме по умолчанию, поэтому опущенный `run_in_background` также создает `"async_launched"` |1889| `status` | string | `"completed"` | `"completed"` для подагентов переднего плана, `"async_launched"` для подагентов фонового плана. Начиная с версии 2.1.198, подагенты выполняются в фоновом режиме по умолчанию, поэтому опущенный `run_in_background` также создает `"async_launched"` |
1890| `agentId` | string | `"a4d2c8f1e0b3a297"` | Идентификатор для запуска подагента |1890| `agentId` | string | `"a4d2c8f1e0b3a297"` | Идентификатор для запуска подагента |
1891| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | Финальные текстовые блоки подагента или, для подагента, чей отчет проходит через `SubagentHandback`, краткая заметка об этой передаче на их месте |1891| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | Финальные текстовые блоки подагента или, для подагента, чей отчет проходит через `SubagentHandback`, краткая заметка об этой передаче на их месте |
1911Задает пользователю один-четыре вопроса с множественным выбором.1911Задает пользователю один-четыре вопроса с множественным выбором.
1912 1912
1913| Поле | Тип | Пример | Описание |1913| Поле | Тип | Пример | Описание |
1914| :---------- | :----- | :----------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1914| :- | :- | :- | :- |
1915| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Вопросы для представления, каждый с строкой `question`, коротким `header`, массивом `options` и опциональным флагом `multiSelect` |1915| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Вопросы для представления, каждый с строкой `question`, коротким `header`, массивом `options` и опциональным флагом `multiSelect` |
1916| `answers` | object | `{"Which framework?": "React"}` | Опциональный. Отображает текст вопроса на выбранный ярлык опции. Ответы с множественным выбором объединяют ярлыки запятыми. Claude не устанавливает это поле; предоставьте его через `updatedInput` для программного ответа |1916| `answers` | object | `{"Which framework?": "React"}` | Опциональный. Отображает текст вопроса на выбранный ярлык опции. Ответы с множественным выбором объединяют ярлыки запятыми. Claude не устанавливает это поле; предоставьте его через `updatedInput` для программного ответа |
1917 1917
1922Представляет план и просит пользователя одобрить его перед тем, как Claude покинет [режим плана](/docs/ru/permission-modes#analyze-before-you-edit-with-plan-mode). Claude записывает план в файл на диск перед вызовом инструмента, поэтому буквальный `tool_input` из модели обычно пуст. Claude Code вводит содержимое плана и путь к файлу перед передачей ввода в hooks.1922Представляет план и просит пользователя одобрить его перед тем, как Claude покинет [режим плана](/docs/ru/permission-modes#analyze-before-you-edit-with-plan-mode). Claude записывает план в файл на диск перед вызовом инструмента, поэтому буквальный `tool_input` из модели обычно пуст. Claude Code вводит содержимое плана и путь к файлу перед передачей ввода в hooks.
1923 1923
1924| Поле | Тип | Пример | Описание |1924| Поле | Тип | Пример | Описание |
1925| :--------------- | :----- | :------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- |1925| :- | :- | :- | :- |
1926| `plan` | string | `"## Refactor auth\n1. Extract..."` | Содержимое плана в Markdown. Введено из файла плана на диске |1926| `plan` | string | `"## Refactor auth\n1. Extract..."` | Содержимое плана в Markdown. Введено из файла плана на диске |
1927| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Путь к файлу плана. Введено |1927| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Путь к файлу плана. Введено |
1928| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | Устарело. Claude Code принимает поле, но игнорирует его. До версии 2.1.205 оно несло разрешения на основе подсказок, которые Claude запросил для реализации плана |1928| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | Устарело. Claude Code принимает поле, но игнорирует его. До версии 2.1.205 оно несло разрешения на основе подсказок, которые Claude запросил для реализации плана |
1936Hooks `PreToolUse` могут управлять тем, продолжается ли вызов инструмента. В отличие от других hooks, которые используют поле `decision` верхнего уровня, PreToolUse возвращает свое решение внутри объекта `hookSpecificOutput`. Это дает ему более богатый контроль: четыре результата (разрешить, отказать, спросить или отложить) плюс возможность изменить ввод инструмента перед выполнением.1936Hooks `PreToolUse` могут управлять тем, продолжается ли вызов инструмента. В отличие от других hooks, которые используют поле `decision` верхнего уровня, PreToolUse возвращает свое решение внутри объекта `hookSpecificOutput`. Это дает ему более богатый контроль: четыре результата (разрешить, отказать, спросить или отложить) плюс возможность изменить ввод инструмента перед выполнением.
1937 1937
1938| Поле | Описание |1938| Поле | Описание |
1939| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |1939| :- | :- |
1940| `permissionDecision` | `"allow"` пропускает подсказку разрешения, кроме [действий, которые ни один режим не одобряет автоматически](/docs/ru/permission-modes#actions-no-mode-auto-approves) и для `AskUserQuestion` и `ExitPlanMode`, которым нужна [`updatedInput`, связанная с ней](#allow-with-updatedinput). `"deny"` предотвращает вызов инструмента. `"ask"` подсказывает пользователю подтвердить. `"defer"` выходит корректно, чтобы инструмент можно было возобновить позже. [Правила отказа и запроса](/docs/ru/permissions#manage-permissions) все еще оцениваются независимо от того, что возвращает hook |1940| `permissionDecision` | `"allow"` пропускает подсказку разрешения, кроме [действий, которые ни один режим не одобряет автоматически](/docs/ru/permission-modes#actions-no-mode-auto-approves) и для `AskUserQuestion` и `ExitPlanMode`, которым нужна [`updatedInput`, связанная с ней](#allow-with-updatedinput). `"deny"` предотвращает вызов инструмента. `"ask"` подсказывает пользователю подтвердить. `"defer"` выходит корректно, чтобы инструмент можно было возобновить позже. [Правила отказа и запроса](/docs/ru/permissions#manage-permissions) все еще оцениваются независимо от того, что возвращает hook |
1941| `permissionDecisionReason` | Для `"allow"` и `"ask"`, показано пользователю, но не Claude. Для `"deny"`, показано Claude. Для `"defer"`, игнорируется |1941| `permissionDecisionReason` | Для `"allow"` и `"ask"`, показано пользователю, но не Claude. Для `"deny"`, показано Claude. Для `"defer"`, игнорируется |
1942| `updatedInput` | Изменяет параметры ввода инструмента перед выполнением. Заменяет весь объект ввода, поэтому включите неизменные поля рядом с измененными. Claude Code оценивает правила разрешения и [автоматическую фоновую приемлемость](/docs/ru/tools-reference#background-commands) команды Bash против ввода, который возвращает ваш hook, а не ввода, который отправил Claude. Объедините с `"allow"` для автоматического одобрения или с `"ask"` для показа измененного ввода пользователю. Для `"defer"`, игнорируется |1942| `updatedInput` | Изменяет параметры ввода инструмента перед выполнением. Заменяет весь объект ввода, поэтому включите неизменные поля рядом с измененными. Claude Code оценивает правила разрешения и [автоматическую фоновую приемлемость](/docs/ru/tools-reference#background-commands) команды Bash против ввода, который возвращает ваш hook, а не ввода, который отправил Claude. Объедините с `"allow"` для автоматического одобрения или с `"ask"` для показа измененного ввода пользователю. Для `"defer"`, игнорируется |
2069Hooks `PermissionRequest` могут разрешить или отказать запросы разрешений. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, ваш скрипт hook может вернуть объект `decision` с этими полями, специфичными для события:2069Hooks `PermissionRequest` могут разрешить или отказать запросы разрешений. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, ваш скрипт hook может вернуть объект `decision` с этими полями, специфичными для события:
2070 2070
2071| Поле | Описание |2071| Поле | Описание |
2072| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2072| :- | :- |
2073| `behavior` | `"allow"` предоставляет разрешение, `"deny"` отказывает его. [Правила отказа и запроса](/docs/ru/permissions#manage-permissions) все еще оцениваются, поэтому hook, возвращающий `"allow"`, не переопределяет соответствующее правило отказа |2073| `behavior` | `"allow"` предоставляет разрешение, `"deny"` отказывает его. [Правила отказа и запроса](/docs/ru/permissions#manage-permissions) все еще оцениваются, поэтому hook, возвращающий `"allow"`, не переопределяет соответствующее правило отказа |
2074| `updatedInput` | Для `"allow"` только: изменяет параметры ввода инструмента перед выполнением. Заменяет весь объект ввода, поэтому включите неизменные поля рядом с измененными. Измененный ввод повторно оценивается против правил отказа и запроса |2074| `updatedInput` | Для `"allow"` только: изменяет параметры ввода инструмента перед выполнением. Заменяет весь объект ввода, поэтому включите неизменные поля рядом с измененными. Измененный ввод повторно оценивается против правил отказа и запроса |
2075| `updatedPermissions` | Для `"allow"` только: массив [записей обновления разрешений](#permission-update-entries) для применения, такие как добавление правила разрешения или изменение режима разрешений сеанса |2075| `updatedPermissions` | Для `"allow"` только: массив [записей обновления разрешений](#permission-update-entries) для применения, такие как добавление правила разрешения или изменение режима разрешений сеанса |
2099Поле вывода `updatedPermissions` и поле ввода [`permission_suggestions`](#permissionrequest-input) оба используют один и тот же массив объектов записей. Каждая запись имеет `type`, который определяет ее другие поля, и `destination`, который управляет тем, где записывается изменение.2099Поле вывода `updatedPermissions` и поле ввода [`permission_suggestions`](#permissionrequest-input) оба используют один и тот же массив объектов записей. Каждая запись имеет `type`, который определяет ее другие поля, и `destination`, который управляет тем, где записывается изменение.
2100 2100
2101| `type` | Поля | Эффект |2101| `type` | Поля | Эффект |
2102| :------------------ | :--------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |2102| :- | :- | :- |
2103| `addRules` | `rules`, `behavior`, `destination` | Добавляет правила разрешений. `rules` — это массив объектов `{toolName, ruleContent?}`. Опустите `ruleContent` для совпадения со всем инструментом. `behavior` — это `"allow"`, `"deny"` или `"ask"` |2103| `addRules` | `rules`, `behavior`, `destination` | Добавляет правила разрешений. `rules` — это массив объектов `{toolName, ruleContent?}`. Опустите `ruleContent` для совпадения со всем инструментом. `behavior` — это `"allow"`, `"deny"` или `"ask"` |
2104| `replaceRules` | `rules`, `behavior`, `destination` | Заменяет все правила данного `behavior` в `destination` предоставленными `rules` |2104| `replaceRules` | `rules`, `behavior`, `destination` | Заменяет все правила данного `behavior` в `destination` предоставленными `rules` |
2105| `removeRules` | `rules`, `behavior`, `destination` | Удаляет соответствующие правила данного `behavior` |2105| `removeRules` | `rules`, `behavior`, `destination` | Удаляет соответствующие правила данного `behavior` |
2116Поле `destination` на каждой записи определяет, остается ли изменение в памяти или сохраняется в файл параметров.2116Поле `destination` на каждой записи определяет, остается ли изменение в памяти или сохраняется в файл параметров.
2117 2117
2118| `destination` | Записывает в |2118| `destination` | Записывает в |
2119| :---------------- | :--------------------------------------------------- |2119| :- | :- |
2120| `session` | только в памяти, отбрасывается при завершении сеанса |2120| `session` | только в памяти, отбрасывается при завершении сеанса |
2121| `localSettings` | `.claude/settings.local.json` |2121| `localSettings` | `.claude/settings.local.json` |
2122| `projectSettings` | `.claude/settings.json` |2122| `projectSettings` | `.claude/settings.json` |
2165```2165```
2166 2166
2167| Поле | Описание |2167| Поле | Описание |
2168| :------------ | :---------------------------------------------------------------------------------------------------------------------------------- |2168| :- | :- |
2169| `duration_ms` | Опциональный. Время выполнения инструмента в миллисекундах. Исключает время, потраченное на подсказки разрешений и hooks PreToolUse |2169| `duration_ms` | Опциональный. Время выполнения инструмента в миллисекундах. Исключает время, потраченное на подсказки разрешений и hooks PreToolUse |
2170 2170
2171<h4 id="posttooluse-decision-control">2171<h4 id="posttooluse-decision-control">
2175Hooks `PostToolUse` могут предоставить обратную связь Claude после выполнения инструмента. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, ваш скрипт hook может вернуть эти поля, специфичные для события:2175Hooks `PostToolUse` могут предоставить обратную связь Claude после выполнения инструмента. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, ваш скрипт hook может вернуть эти поля, специфичные для события:
2176 2176
2177| Поле | Описание |2177| Поле | Описание |
2178| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |2178| :- | :- |
2179| `decision` | `"block"` добавляет `reason` рядом с результатом инструмента. Claude все еще видит исходный вывод; чтобы заменить его, используйте `updatedToolOutput` |2179| `decision` | `"block"` добавляет `reason` рядом с результатом инструмента. Claude все еще видит исходный вывод; чтобы заменить его, используйте `updatedToolOutput` |
2180| `reason` | Объяснение, показанное Claude, когда `decision` имеет значение `"block"` |2180| `reason` | Объяснение, показанное Claude, когда `decision` имеет значение `"block"` |
2181| `additionalContext` | Строка, добавленная в контекст Claude рядом с результатом инструмента. См. [Add context for Claude](#add-context-for-claude) |2181| `additionalContext` | Строка, добавленная в контекст Claude рядом с результатом инструмента. См. [Add context for Claude](#add-context-for-claude) |
2277```2277```
2278 2278
2279| Поле | Описание |2279| Поле | Описание |
2280| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2280| :- | :- |
2281| `error` | Строка, описывающая, что пошло не так. Формат зависит от инструмента, который не удался |2281| `error` | Строка, описывающая, что пошло не так. Формат зависит от инструмента, который не удался |
2282| `is_interrupt` | Опциональное логическое значение. True, когда сбой достиг Claude Code как прерывание, а не как ошибка, которую сообщил инструмент. Отмена выполняющегося инструмента не срабатывает этот hook; результат инструмента несет сообщение прерывания вместо этого |2282| `is_interrupt` | Опциональное логическое значение. True, когда сбой достиг Claude Code как прерывание, а не как ошибка, которую сообщил инструмент. Отмена выполняющегося инструмента не срабатывает этот hook; результат инструмента несет сообщение прерывания вместо этого |
2283| `duration_ms` | Опциональный. Время выполнения инструмента в миллисекундах. Исключает время, потраченное на подсказки разрешений и hooks PreToolUse |2283| `duration_ms` | Опциональный. Время выполнения инструмента в миллисекундах. Исключает время, потраченное на подсказки разрешений и hooks PreToolUse |
2295Hooks `PostToolUseFailure` могут предоставить контекст Claude после сбоя инструмента. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, ваш скрипт hook может вернуть эти поля, специфичные для события:2295Hooks `PostToolUseFailure` могут предоставить контекст Claude после сбоя инструмента. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, ваш скрипт hook может вернуть эти поля, специфичные для события:
2296 2296
2297| Поле | Описание |2297| Поле | Описание |
2298| :------------------ | :----------------------------------------------------------------------------------------------------------- |2298| :- | :- |
2299| `additionalContext` | Строка, добавленная в контекст Claude рядом с ошибкой. См. [Add context for Claude](#add-context-for-claude) |2299| `additionalContext` | Строка, добавленная в контекст Claude рядом с ошибкой. См. [Add context for Claude](#add-context-for-claude) |
2300 2300
2301```json theme={null}2301```json theme={null}
2356Hooks `PostToolBatch` могут внедрить контекст для Claude. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, ваш скрипт hook может вернуть эти поля, специфичные для события:2356Hooks `PostToolBatch` могут внедрить контекст для Claude. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, ваш скрипт hook может вернуть эти поля, специфичные для события:
2357 2357
2358| Поле | Описание |2358| Поле | Описание |
2359| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |2359| :- | :- |
2360| `additionalContext` | Строка контекста, внедренная один раз перед следующим вызовом модели. См. [Add context for Claude](#add-context-for-claude) для деталей доставки, что в нее поместить и как возобновленные сеансы обрабатывают прошлые значения |2360| `additionalContext` | Строка контекста, внедренная один раз перед следующим вызовом модели. См. [Add context for Claude](#add-context-for-claude) для деталей доставки, что в нее поместить и как возобновленные сеансы обрабатывают прошлые значения |
2361 2361
2362```json theme={null}2362```json theme={null}
2402```2402```
2403 2403
2404| Поле | Описание |2404| Поле | Описание |
2405| :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2405| :- | :- |
2406| `reason` | Причина отказа. Для вердикта классификатора в большинстве сеансов он называет совпадающее правило в квадратных скобках, такое как `[Data Exfiltration]`; см. [Review denials](/docs/ru/auto-mode-config#review-denials) для других форм. Для [отказа без вердикта](#permissiondenied-decision-control) он начинается с `Auto mode could not evaluate this action and is blocking it for safety`. Для отказа, потому что модель классификатора была недоступна, это фиксированный текст `Classifier unavailable` |2406| `reason` | Причина отказа. Для вердикта классификатора в большинстве сеансов он называет совпадающее правило в квадратных скобках, такое как `[Data Exfiltration]`; см. [Review denials](/docs/ru/auto-mode-config#review-denials) для других форм. Для [отказа без вердикта](#permissiondenied-decision-control) он начинается с `Auto mode could not evaluate this action and is blocking it for safety`. Для отказа, потому что модель классификатора была недоступна, это фиксированный текст `Classifier unavailable` |
2407 2407
2408<h4 id="permissiondenied-decision-control">2408<h4 id="permissiondenied-decision-control">
2433Вы получаете эти события hook даже с отключенными уведомлениями рабочего стола: параметр `preferredNotifChannel`, включая `notifications_disabled`, изменяет только то, как вас оповещают, а не запускается ли ваш hook.2433Вы получаете эти события hook даже с отключенными уведомлениями рабочего стола: параметр `preferredNotifChannel`, включая `notifications_disabled`, изменяет только то, как вас оповещают, а не запускается ли ваш hook.
2434 2434
2435| Matcher | Когда срабатывает |2435| Matcher | Когда срабатывает |
2436| :--------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2436| :- | :- |
2437| `permission_prompt` | Claude нуждается в вашем разрешении на использование инструмента или [сетевого запроса](/docs/ru/sandboxing#network-isolation) изолированной команды, и подсказка ждала около шести секунд |2437| `permission_prompt` | Claude нуждается в вашем разрешении на использование инструмента или [сетевого запроса](/docs/ru/sandboxing#network-isolation) изолированной команды, и подсказка ждала около шести секунд |
2438| `idle_prompt` | Claude закончил отвечать около 60 секунд назад и вы не печатали с тех пор |2438| `idle_prompt` | Claude закончил отвечать около 60 секунд назад и вы не печатали с тех пор |
2439| `auth_success` | Аутентификация завершена |2439| `auth_success` | Аутентификация завершена |
2550Hooks SubagentStart не могут блокировать создание подагента, но они могут внедрить контекст в подагента. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, вы можете вернуть:2550Hooks SubagentStart не могут блокировать создание подагента, но они могут внедрить контекст в подагента. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, вы можете вернуть:
2551 2551
2552| Поле | Описание |2552| Поле | Описание |
2553| :------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------- |2553| :- | :- |
2554| `additionalContext` | Строка, добавленная в контекст подагента в начале его разговора, перед его первой подсказкой. См. [Add context for Claude](#add-context-for-claude) |2554| `additionalContext` | Строка, добавленная в контекст подагента в начале его разговора, перед его первой подсказкой. См. [Add context for Claude](#add-context-for-claude) |
2555 2555
2556```json theme={null}2556```json theme={null}
2632```2632```
2633 2633
2634| Поле | Описание |2634| Поле | Описание |
2635| :----------------- | :--------------------------------------------------------------------------- |2635| :- | :- |
2636| `task_id` | Идентификатор создаваемой задачи |2636| `task_id` | Идентификатор создаваемой задачи |
2637| `task_subject` | Название задачи |2637| `task_subject` | Название задачи |
2638| `task_description` | Подробное описание задачи. Может отсутствовать |2638| `task_description` | Подробное описание задачи. Может отсутствовать |
2693```2693```
2694 2694
2695| Поле | Описание |2695| Поле | Описание |
2696| :----------------- | :--------------------------------------------------------------------------- |2696| :- | :- |
2697| `task_id` | Идентификатор завершаемой задачи |2697| `task_id` | Идентификатор завершаемой задачи |
2698| `task_subject` | Название задачи |2698| `task_subject` | Название задачи |
2699| `task_description` | Подробное описание задачи. Может отсутствовать |2699| `task_description` | Подробное описание задачи. Может отсутствовать |
2748Каждая запись в `background_tasks` описывает одну выполняющуюся задачу и использует эти поля:2748Каждая запись в `background_tasks` описывает одну выполняющуюся задачу и использует эти поля:
2749 2749
2750| Поле | Описание |2750| Поле | Описание |
2751| :------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2751| :- | :- |
2752| `id` | Идентификатор задачи |2752| `id` | Идентификатор задачи |
2753| `type` | Дружественный ярлык типа задачи, такой как `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session` или `MCP task`. Каждый ярлык определяет, какая функция Claude Code создала задачу. Возвращается к необработанному дискриминанту для неизвестных типов |2753| `type` | Дружественный ярлык типа задачи, такой как `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session` или `MCP task`. Каждый ярлык определяет, какая функция Claude Code создала задачу. Возвращается к необработанному дискриминанту для неизвестных типов |
2754| `status` | Текущий статус задачи |2754| `status` | Текущий статус задачи |
2762Каждая запись в `session_crons` описывает одно запланированное пробуждение с областью сеанса, полученное из `CronCreate`, `ScheduleWakeup` и `/loop`:2762Каждая запись в `session_crons` описывает одно запланированное пробуждение с областью сеанса, полученное из `CronCreate`, `ScheduleWakeup` и `/loop`:
2763 2763
2764| Поле | Описание |2764| Поле | Описание |
2765| :---------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- |2765| :- | :- |
2766| `id` | Идентификатор задачи Cron |2766| `id` | Идентификатор задачи Cron |
2767| `schedule` | Выражение Cron, например `0 9 * * 1-5` |2767| `schedule` | Выражение Cron, например `0 9 * * 1-5` |
2768| `recurring` | `false` для одноразовых пробуждений, чье расписание кодирует одно время срабатывания, `true` для задач, которые повторно срабатывают при каждом совпадении |2768| `recurring` | `false` для одноразовых пробуждений, чье расписание кодирует одно время срабатывания, `true` для задач, которые повторно срабатывают при каждом совпадении |
2806Hooks `Stop` и `SubagentStop` могут управлять тем, продолжает ли Claude. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, ваш скрипт hook может вернуть эти поля, специфичные для события:2806Hooks `Stop` и `SubagentStop` могут управлять тем, продолжает ли Claude. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, ваш скрипт hook может вернуть эти поля, специфичные для события:
2807 2807
2808| Поле | Описание |2808| Поле | Описание |
2809| :------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2809| :- | :- |
2810| `decision` | `"block"` предотвращает остановку Claude. Опустите, чтобы позволить Claude остановиться |2810| `decision` | `"block"` предотвращает остановку Claude. Опустите, чтобы позволить Claude остановиться |
2811| `reason` | Требуется, когда `decision` имеет значение `"block"`. Говорит Claude, почему он должен продолжить |2811| `reason` | Требуется, когда `decision` имеет значение `"block"`. Говорит Claude, почему он должен продолжить |
2812| `hookSpecificOutput.additionalContext` | Обратная связь без ошибок для Claude. Разговор продолжается, чтобы Claude мог действовать на ней, но в отличие от `decision: "block"` она показана в транскрипте как обратная связь hook, а не ошибка hook |2812| `hookSpecificOutput.additionalContext` | Обратная связь без ошибок для Claude. Разговор продолжается, чтобы Claude мог действовать на ней, но в отличие от `decision: "block"` она показана в транскрипте как обратная связь hook, а не ошибка hook |
2844Помимо [общих полей ввода](#common-input-fields), hooks StopFailure получают `error`, опциональный `error_details` и опциональный `last_assistant_message`. Поле `error` определяет тип ошибки и используется для фильтрации matcher.2844Помимо [общих полей ввода](#common-input-fields), hooks StopFailure получают `error`, опциональный `error_details` и опциональный `last_assistant_message`. Поле `error` определяет тип ошибки и используется для фильтрации matcher.
2845 2845
2846| Поле | Описание |2846| Поле | Описание |
2847| :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2847| :- | :- |
2848| `error` | Тип ошибки: `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error` или `unknown` |2848| `error` | Тип ошибки: `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error` или `unknown` |
2849| `error_details` | Дополнительные детали об ошибке, когда доступны |2849| `error_details` | Дополнительные детали об ошибке, когда доступны |
2850| `last_assistant_message` | Отображаемый текст ошибки, показанный в разговоре. В отличие от `Stop` и `SubagentStop`, где это поле содержит разговорный вывод Claude, для `StopFailure` оно содержит строку ошибки API, такую как `"API Error: Rate limit reached"` |2850| `last_assistant_message` | Отображаемый текст ошибки, показанный в разговоре. В отличие от `Stop` и `SubagentStop`, где это поле содержит разговорный вывод Claude, для `StopFailure` оно содержит строку ошибки API, такую как `"API Error: Rate limit reached"` |
2890```2890```
2891 2891
2892| Поле | Описание |2892| Поле | Описание |
2893| :-------------- | :--------------------------------------------------------------------------- |2893| :- | :- |
2894| `teammate_name` | Имя товарища, который собирается перейти в режим ожидания |2894| `teammate_name` | Имя товарища, который собирается перейти в режим ожидания |
2895| `team_name` | Устарело. Имя команды, полученное из сеанса; будет удалено в будущем выпуске |2895| `team_name` | Устарело. Имя команды, полученное из сеанса; будет удалено в будущем выпуске |
2896 2896
2927Matcher фильтрует по источнику конфигурации:2927Matcher фильтрует по источнику конфигурации:
2928 2928
2929| Matcher | Когда срабатывает |2929| Matcher | Когда срабатывает |
2930| :----------------- | :------------------------------------------------------------------ |2930| :- | :- |
2931| `user_settings` | `~/.claude/settings.json` изменяется |2931| `user_settings` | `~/.claude/settings.json` изменяется |
2932| `project_settings` | `.claude/settings.json` изменяется |2932| `project_settings` | `.claude/settings.json` изменяется |
2933| `local_settings` | `.claude/settings.local.json` изменяется |2933| `local_settings` | `.claude/settings.local.json` изменяется |
2978Hooks ConfigChange могут блокировать изменения конфигурации от вступления в силу. Используйте код выхода 2 или JSON `decision` для предотвращения изменения. При блокировке новые параметры не применяются к работающему сеансу.2978Hooks ConfigChange могут блокировать изменения конфигурации от вступления в силу. Используйте код выхода 2 или JSON `decision` для предотвращения изменения. При блокировке новые параметры не применяются к работающему сеансу.
2979 2979
2980| Поле | Описание |2980| Поле | Описание |
2981| :--------- | :--------------------------------------------------------------------------------------------- |2981| :- | :- |
2982| `decision` | `"block"` предотвращает применение изменения конфигурации. Опустите, чтобы позволить изменению |2982| `decision` | `"block"` предотвращает применение изменения конфигурации. Опустите, чтобы позволить изменению |
2983| `reason` | Принято, но никогда не показано |2983| `reason` | Принято, но никогда не показано |
2984 2984
3027Помимо [полей JSON-вывода](#json-output), доступных всем hooks, hooks CwdChanged могут вернуть `watchPaths` для динамической установки того, какие пути файлов [FileChanged](#filechanged) отслеживает:3027Помимо [полей JSON-вывода](#json-output), доступных всем hooks, hooks CwdChanged могут вернуть `watchPaths` для динамической установки того, какие пути файлов [FileChanged](#filechanged) отслеживает:
3028 3028
3029| Поле | Описание |3029| Поле | Описание |
3030| :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |3030| :- | :- |
3031| `watchPaths` | Массив абсолютных путей. Заменяет текущий динамический список отслеживания. Пути из конфигурации вашего `matcher` всегда отслеживаются. Возврат пустого массива очищает динамический список, что типично при входе в новую директорию |3031| `watchPaths` | Массив абсолютных путей. Заменяет текущий динамический список отслеживания. Пути из конфигурации вашего `matcher` всегда отслеживаются. Возврат пустого массива очищает динамический список, что типично при входе в новую директорию |
3032 3032
3033Hooks CwdChanged не имеют управления решением. Они не могут блокировать изменение директории.3033Hooks CwdChanged не имеют управления решением. Они не могут блокировать изменение директории.
3053Matcher фильтрует по тому, как была добавлена директория:3053Matcher фильтрует по тому, как была добавлена директория:
3054 3054
3055| Matcher | Когда срабатывает |3055| Matcher | Когда срабатывает |
3056| :------------------- | :------------------------------------------------------------------------- |3056| :- | :- |
3057| `slash_command` | Вы добавляете директорию с `/add-dir` |3057| `slash_command` | Вы добавляете директорию с `/add-dir` |
3058| `register_repo_root` | Клиент SDK добавляет директорию с запросом управления `register_repo_root` |3058| `register_repo_root` | Клиент SDK добавляет директорию с запросом управления `register_repo_root` |
3059 3059
3064Помимо [общих полей ввода](#common-input-fields), hooks DirectoryAdded получают `directory` и `source`.3064Помимо [общих полей ввода](#common-input-fields), hooks DirectoryAdded получают `directory` и `source`.
3065 3065
3066| Поле | Описание |3066| Поле | Описание |
3067| :---------- | :-------------------------------------------------------------------------------------------------------------------- |3067| :- | :- |
3068| `directory` | Абсолютный путь директории, которая была добавлена |3068| `directory` | Абсолютный путь директории, которая была добавлена |
3069| `source` | Как была добавлена директория, `"slash_command"` для `/add-dir` или `"register_repo_root"` для запроса управления SDK |3069| `source` | Как была добавлена директория, `"slash_command"` для `/add-dir` или `"register_repo_root"` для запроса управления SDK |
3070 3070
3138Помимо [общих полей ввода](#common-input-fields), hooks FileChanged получают `file_path` и `event`.3138Помимо [общих полей ввода](#common-input-fields), hooks FileChanged получают `file_path` и `event`.
3139 3139
3140| Поле | Описание |3140| Поле | Описание |
3141| :---------- | :---------------------------------------------------------------------------------------------------------------- |3141| :- | :- |
3142| `file_path` | Абсолютный путь к файлу, который изменился |3142| `file_path` | Абсолютный путь к файлу, который изменился |
3143| `event` | Что произошло: `"change"` для измененного файла, `"add"` для созданного файла или `"unlink"` для удаленного файла |3143| `event` | Что произошло: `"change"` для измененного файла, `"add"` для созданного файла или `"unlink"` для удаленного файла |
3144 3144
3160Помимо [полей JSON-вывода](#json-output), доступных всем hooks, hooks FileChanged могут вернуть `watchPaths` для динамического обновления того, какие пути файлов отслеживаются:3160Помимо [полей JSON-вывода](#json-output), доступных всем hooks, hooks FileChanged могут вернуть `watchPaths` для динамического обновления того, какие пути файлов отслеживаются:
3161 3161
3162| Поле | Описание |3162| Поле | Описание |
3163| :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |3163| :- | :- |
3164| `watchPaths` | Массив абсолютных путей. Заменяет текущий динамический список отслеживания. Пути из конфигурации вашего `matcher` всегда отслеживаются. Используйте это, когда ваш скрипт hook обнаруживает дополнительные файлы для отслеживания на основе измененного файла |3164| `watchPaths` | Массив абсолютных путей. Заменяет текущий динамический список отслеживания. Пути из конфигурации вашего `matcher` всегда отслеживаются. Используйте это, когда ваш скрипт hook обнаруживает дополнительные файлы для отслеживания на основе измененного файла |
3165 3165
3166Hooks FileChanged не имеют управления решением. Они не могут блокировать изменение файла от возникновения.3166Hooks FileChanged не имеют управления решением. Они не могут блокировать изменение файла от возникновения.
3296Значение matcher указывает, было ли сжатие запущено вручную или автоматически:3296Значение matcher указывает, было ли сжатие запущено вручную или автоматически:
3297 3297
3298| Matcher | Когда срабатывает |3298| Matcher | Когда срабатывает |
3299| :------- | :------------------------------------------------------------------------------------------------------- |3299| :- | :- |
3300| `manual` | `/compact` |3300| `manual` | `/compact` |
3301| `auto` | Auto-compact, когда разговор достигает [окна auto-compact](/docs/ru/model-config#set-the-auto-compact-window) |3301| `auto` | Auto-compact, когда разговор достигает [окна auto-compact](/docs/ru/model-config#set-the-auto-compact-window) |
3302 3302
3332Те же значения matcher применяются, как для `PreCompact`:3332Те же значения matcher применяются, как для `PreCompact`:
3333 3333
3334| Matcher | Когда срабатывает |3334| Matcher | Когда срабатывает |
3335| :------- | :------------------------------------------------------------------------------------------------------------- |3335| :- | :- |
3336| `manual` | После `/compact` |3336| `manual` | После `/compact` |
3337| `auto` | После auto-compact, когда разговор достигает [окна auto-compact](/docs/ru/model-config#set-the-auto-compact-window) |3337| `auto` | После auto-compact, когда разговор достигает [окна auto-compact](/docs/ru/model-config#set-the-auto-compact-window) |
3338 3338
3450Помимо [общих полей ввода](#common-input-fields), hooks PreModelSwitch получают поля в этой таблице. Последние пять описывают, что стоит повторная отправка разговора на новую модель, поэтому hook может показать эту цифру перед переключением.3450Помимо [общих полей ввода](#common-input-fields), hooks PreModelSwitch получают поля в этой таблице. Последние пять описывают, что стоит повторная отправка разговора на новую модель, поэтому hook может показать эту цифру перед переключением.
3451 3451
3452| Поле | Тип | Описание |3452| Поле | Тип | Описание |
3453| :-------------------------- | :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3453| :- | :- | :- |
3454| `from_model` | string | ID модели, на которую переключается |3454| `from_model` | string | ID модели, на которую переключается |
3455| `to_model` | string | ID модели, на которую переключается. Matcher сравнивает против канонического имени этой модели |3455| `to_model` | string | ID модели, на которую переключается. Matcher сравнивает против канонического имени этой модели |
3456| `requested_model` | string или `null` | Модель, которую назвал запрос: псевдоним, такой как `opus`, полный ID модели или `null`, когда запрос был для модели по умолчанию |3456| `requested_model` | string или `null` | Модель, которую назвал запрос: псевдоним, такой как `opus`, полный ID модели или `null`, когда запрос был для модели по умолчанию |
3490Для более тонкого управления, верните `permissionDecision` и `permissionDecisionReason` в объекте `hookSpecificOutput`, как на [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` принимает `"allow"`, `"deny"` и `"ask"`. Он не принимает `"defer"`, `updatedInput` или `additionalContext`. Таблица ниже описывает оба поля:3490Для более тонкого управления, верните `permissionDecision` и `permissionDecisionReason` в объекте `hookSpecificOutput`, как на [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` принимает `"allow"`, `"deny"` и `"ask"`. Он не принимает `"defer"`, `updatedInput` или `additionalContext`. Таблица ниже описывает оба поля:
3491 3491
3492| Поле | Описание |3492| Поле | Описание |
3493| :------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3493| :- | :- |
3494| `permissionDecision` | `"allow"` продолжает и пропускает [подтверждение, которое Claude Code показывает, пока кэш подсказок теплый](/docs/ru/prompt-caching#switching-models). `"deny"` отменяет переключение. `"ask"` подсказывает пользователю подтвердить его |3494| `permissionDecision` | `"allow"` продолжает и пропускает [подтверждение, которое Claude Code показывает, пока кэш подсказок теплый](/docs/ru/prompt-caching#switching-models). `"deny"` отменяет переключение. `"ask"` подсказывает пользователю подтвердить его |
3495| `permissionDecisionReason` | Для `"deny"`, показано пользователю как причина блокировки переключения или возвращено как ошибка для запроса `set_model`. Для `"ask"`, показано в подсказке подтверждения. Игнорируется для `"allow"` |3495| `permissionDecisionReason` | Для `"deny"`, показано пользователю как причина блокировки переключения или возвращено как ошибка для запроса `set_model`. Для `"ask"`, показано в подсказке подтверждения. Игнорируется для `"allow"` |
3496 3496
3570Claude Code берет ваш [простой текст stdout](#exit-code-0) hook при выходе 0 или `additionalContext` из JSON-вывода и доставляет его Claude со следующим запросом после переключения. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, вы можете вернуть:3570Claude Code берет ваш [простой текст stdout](#exit-code-0) hook при выходе 0 или `additionalContext` из JSON-вывода и доставляет его Claude со следующим запросом после переключения. Помимо [полей JSON-вывода](#json-output), доступных всем hooks, вы можете вернуть:
3571 3571
3572| Поле | Описание |3572| Поле | Описание |
3573| :------------------ | :----------------------------------------------------------------------------------------------------------------- |3573| :- | :- |
3574| `additionalContext` | Строка, добавленная в контекст Claude со следующим запросом. См. [Add context for Claude](#add-context-for-claude) |3574| `additionalContext` | Строка, добавленная в контекст Claude со следующим запросом. См. [Add context for Claude](#add-context-for-claude) |
3575 3575
3576Если hook не завершится в течение пяти секунд после отправки следующей подсказки, Claude Code отправляет этот запрос без вывода и прикрепляет его к следующему запросу вместо этого. Если модель изменяется несколько раз перед следующим запросом, Claude Code доставляет только вывод для переключения целевой модели последнего.3576Если hook не завершится в течение пяти секунд после отправки следующей подсказки, Claude Code отправляет этот запрос без вывода и прикрепляет его к следующему запросу вместо этого. Если модель изменяется несколько раз перед следующим запросом, Claude Code доставляет только вывод для переключения целевой модели последнего.
3584Поле `reason` в ввод hook указывает, почему сеанс закончился:3584Поле `reason` в ввод hook указывает, почему сеанс закончился:
3585 3585
3586| Причина | Описание |3586| Причина | Описание |
3587| :---------------------------- | :-------------------------------------------------------------------------------------------------- |3587| :- | :- |
3588| `clear` | Сеанс очищен с командой `/clear` |3588| `clear` | Сеанс очищен с командой `/clear` |
3589| `resume` | Сеанс переключен через интерактивный `/resume` |3589| `resume` | Сеанс переключен через интерактивный `/resume` |
3590| `logout` | Пользователь вышел |3590| `logout` | Пользователь вышел |
3691```3691```
3692 3692
3693| Поле | Значения | Описание |3693| Поле | Значения | Описание |
3694| :-------- | :---------------------------- | :--------------------------------------------------------------------------------------------- |3694| :- | :- | :- |
3695| `action` | `accept`, `decline`, `cancel` | Принять ли, отклонить или отменить запрос |3695| `action` | `accept`, `decline`, `cancel` | Принять ли, отклонить или отменить запрос |
3696| `content` | object | Значения полей формы для отправки. Используется только, когда `action` имеет значение `accept` |3696| `content` | object | Значения полей формы для отправки. Используется только, когда `action` имеет значение `accept` |
3697 3697
3744```3744```
3745 3745
3746| Поле | Значения | Описание |3746| Поле | Значения | Описание |
3747| :-------- | :---------------------------- | :---------------------------------------------------------------------------------------------- |3747| :- | :- | :- |
3748| `action` | `accept`, `decline`, `cancel` | Переопределяет действие пользователя |3748| `action` | `accept`, `decline`, `cancel` | Переопределяет действие пользователя |
3749| `content` | object | Переопределяет значения полей формы. Имеет смысл только, когда `action` имеет значение `accept` |3749| `content` | object | Переопределяет значения полей формы. Имеет смысл только, когда `action` имеет значение `accept` |
3750 3750
3834```3834```
3835 3835
3836| Поле | Обязательно | Описание |3836| Поле | Обязательно | Описание |
3837| :---------------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3837| :- | :- | :- |
3838| `type` | да | Должно быть `"prompt"` |3838| `type` | да | Должно быть `"prompt"` |
3839| `prompt` | да | Текст подсказки для отправки LLM. Используйте `$ARGUMENTS` как заполнитель для JSON входа hook. Если `$ARGUMENTS` отсутствует, JSON входа добавляется к подсказке |3839| `prompt` | да | Текст подсказки для отправки LLM. Используйте `$ARGUMENTS` как заполнитель для JSON входа hook. Если `$ARGUMENTS` отсутствует, JSON входа добавляется к подсказке |
3840| `model` | нет | Модель для использования при оценке. По умолчанию быстрая модель |3840| `model` | нет | Модель для использования при оценке. По умолчанию быстрая модель |
3856```3856```
3857 3857
3858| Поле | Описание |3858| Поле | Описание |
3859| :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |3859| :- | :- |
3860| `ok` | `true` разрешает действие. Для `false`, см. поведение для каждого события ниже |3860| `ok` | `true` разрешает действие. Для `false`, см. поведение для каждого события ниже |
3861| `reason` | Требуется при `ok` равном `false` |3861| `reason` | Требуется при `ok` равном `false` |
3862| `impossible` | Опционально. Модель возвращает его с `ok: false`, когда она судит, что условие никогда не может быть удовлетворено. На `Stop` и `SubagentStop`, Claude Code затем позволяет ходу закончиться вместо передачи причины обратно. Agent hooks и другие события игнорируют его |3862| `impossible` | Опционально. Модель возвращает его с `ok: false`, когда она судит, что условие никогда не может быть удовлетворено. На `Stop` и `SubagentStop`, Claude Code затем позволяет ходу закончиться вместо передачи причины обратно. Agent hooks и другие события игнорируют его |