476| `async` | нет | Если `true`, запускается в фоне без блокировки. См. [Run hooks in the background](#run-hooks-in-the-background) |476| `async` | нет | Если `true`, запускается в фоне без блокировки. См. [Run hooks in the background](#run-hooks-in-the-background) |
477| `asyncRewake` | нет | Если `true`, запускается в фоне и пробуждает Claude при коде выхода 2. Hook stderr или stdout, если stderr пусто, показывается Claude как [системное напоминание](/docs/ru/glossary#system-reminder) чтобы он мог реагировать на долгоживущий фоновый сбой |477| `asyncRewake` | нет | Если `true`, запускается в фоне и пробуждает Claude при коде выхода 2. Hook stderr или stdout, если stderr пусто, показывается Claude как [системное напоминание](/docs/ru/glossary#system-reminder) чтобы он мог реагировать на долгоживущий фоновый сбой |
478| `shell` | нет | Оболочка для использования для этого hook. Принимает `"bash"` или `"powershell"`. По умолчанию `"bash"`, или `"powershell"` на Windows когда Git Bash не установлен. Установка `"powershell"` запускает команду через PowerShell на Windows. Не требует `CLAUDE_CODE_USE_POWERSHELL_TOOL`, так как hooks порождают PowerShell напрямую. Игнорируется когда установлен `args` |478| `shell` | нет | Оболочка для использования для этого hook. Принимает `"bash"` или `"powershell"`. По умолчанию `"bash"`, или `"powershell"` на Windows когда Git Bash не установлен. Установка `"powershell"` запускает команду через PowerShell на Windows. Не требует `CLAUDE_CODE_USE_POWERSHELL_TOOL`, так как hooks порождают PowerShell напрямую. Игнорируется когда установлен `args` |
479| `onFailure` | нет | Что происходит с действием при сбое хука: `"continue"` (по умолчанию) или `"block"`. См. [Блокировка действия при сбое хука](#block-the-action-when-a-hook-fails). Требует Claude Code v2.1.295 или новее |479| `onFailure` | нет | Выполняется ли действие, вызвавшее хук, при сбое хука: `"continue"` или `"block"`. О значении `"block"` и о случае, когда поле не задано, см. [Блокировка действия при сбое хука](#block-the-action-when-a-hook-fails). Требует Claude Code v2.1.295 или новее |
480 480
481<a id="exec-form-and-shell-form" />481<a id="exec-form-and-shell-form" />
482 482
829 829
830* **Успех**: ваш хук завершается с кодом 0. Claude Code применяет все поля [вывода JSON](#json-output), которые вывел ваш хук, и действие выполняется, если эти поля не блокируют и не отклоняют его. Исключение описано в разделе [Хуки, запускающие фоновый процесс](#hooks-that-start-a-background-process).830* **Успех**: ваш хук завершается с кодом 0. Claude Code применяет все поля [вывода JSON](#json-output), которые вывел ваш хук, и действие выполняется, если эти поля не блокируют и не отклоняют его. Исключение описано в разделе [Хуки, запускающие фоновый процесс](#hooks-that-start-a-background-process).
831* **Блокирующая ошибка**: ваш хук завершается с кодом 2. Для [событий, которые могут блокировать](#exit-code-2-behavior-per-event), Claude Code останавливает действие.831* **Блокирующая ошибка**: ваш хук завершается с кодом 2. Для [событий, которые могут блокировать](#exit-code-2-behavior-per-event), Claude Code останавливает действие.
832* **Неблокирующая ошибка**: ваш хук завершается с любым другим кодом или завершается сбоем иным образом, например не запускается или выводит некорректный JSON. Действие выполняется, а для таких событий, как `PreToolUse`, в транскрипте отображается уведомление `<hook name> hook error`. Если вы хотите, чтобы хук, завершившийся сбоем, блокировал действие, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).832* **Неблокирующая ошибка**: ваш хук завершается с любым другим кодом или завершается сбоем иным образом, например не запускается или выводит некорректный JSON. Действие выполняется, за исключением хуков, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails), например хука с `onFailure`, установленным в `"block"`. Для таких событий, как `PreToolUse`, в транскрипте отображается уведомление `<hook name> hook error`.
833 833
834То, что ваш хук выводит в stdout, может изменить результат. Например, если хук `PreToolUse` завершается с кодом 1, но выводит JSON, прошедший проверку, запуск считается успешным, и происходящее определяют поля JSON. Чтобы узнать результат вашего хука для такого события, как `PreToolUse`, найдите в первом столбце то, что он вывел в stdout, а в верхней строке — его код выхода:834То, что ваш хук выводит в stdout, может изменить результат. Например, если хук `PreToolUse` завершается с кодом 1, но выводит JSON, прошедший проверку, этот JSON всё равно может определить, что произойдёт. Чтобы узнать результат вашего хука для такого события, как `PreToolUse`, найдите в первом столбце то, что он вывел в stdout, а в верхней строке — его код выхода:
835 835
836| Stdout | Выход с кодом 0 | Выход с кодом 2 | Любой другой код выхода |836| Stdout | Выход с кодом 0 | Выход с кодом 2 | Любой другой код выхода |
837| :- | :- | :- | :- |837| :- | :- | :- | :- |
838| Объект JSON, прошедший [проверку схемы](#json-output) | Успех. Поля применяются | Блокирующая ошибка. Claude Code всё равно читает поля, но они не могут переопределить блокировку | Успех. Claude Code игнорирует код выхода, и результат определяют только поля. При [`onFailure: "block"`](#block-the-action-when-a-hook-fails) это считается сбоем |838| Объект JSON, прошедший [проверку схемы](#json-output) | Успех. Поля применяются | Блокирующая ошибка. Claude Code всё равно читает поля, но они не могут переопределить блокировку | Успех. Claude Code игнорирует код выхода, и результат определяют только поля. Для хуков, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails), запуск вместо этого считается сбоем |
839| JSON, который [не удаётся разобрать](#exit-code-0) или который не прошёл проверку схемы | Неблокирующая ошибка. Уведомление содержит сообщение о разборе или проверке | Блокирующая ошибка. Причиной служит ваш stderr | Неблокирующая ошибка. Уведомление содержит сообщение о разборе или проверке |839| JSON, который [не удаётся разобрать](#exit-code-0) или который не прошёл проверку схемы | Неблокирующая ошибка. Уведомление содержит сообщение о разборе или проверке | Блокирующая ошибка. Причиной служит ваш stderr | Неблокирующая ошибка. Уведомление содержит сообщение о разборе или проверке |
840| [Обычный текст](#exit-code-0) или ничего | Успех | Блокирующая ошибка. Причиной служит ваш stderr | Неблокирующая ошибка. Уведомление содержит первую строку вашего stderr |840| [Обычный текст](#exit-code-0) или ничего | Успех | Блокирующая ошибка. Причиной служит ваш stderr | Неблокирующая ошибка. Уведомление содержит первую строку вашего stderr |
841 841
864* **Две или более строк, каждая из которых по отдельности разбирается как JSON, причём первая начинается с `{`, а последняя заканчивается `}`**: обычный текст, если ни одна строка не является объектом вывода JSON, задающим какое-либо поле, и ошибка разбора, если такая строка есть.864* **Две или более строк, каждая из которых по отдельности разбирается как JSON, причём первая начинается с `{`, а последняя заканчивается `}`**: обычный текст, если ни одна строка не является объектом вывода JSON, задающим какое-либо поле, и ошибка разбора, если такая строка есть.
865* **Всё остальное, что начинается с `{` и заканчивается `}`, но не является корректным JSON**: ошибка разбора.865* **Всё остальное, что начинается с `{` и заканчивается `}`, но не является корректным JSON**: ошибка разбора.
866 866
867Если Claude Code пытается разобрать ваш stdout как JSON и не может или разобранный объект не проходит [проверку схемы](#json-output), запуск считается [неблокирующей ошибкой](#exit-code-output). Уведомление `<hook name> hook error` содержит сообщение о разборе или проверке. Для событий, которые добавляют обычный текст из stdout как контекст, Claude Code не добавляет stdout, который ему не удалось разобрать.867Если хук не относится к тем, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails), ошибка разбора или разобранный объект, не прошедший [проверку схемы](#json-output), считается [неблокирующей ошибкой](#exit-code-output). Уведомление `<hook name> hook error` содержит сообщение о разборе или проверке. Для событий, которые добавляют обычный текст из stdout как контекст, Claude Code не добавляет stdout, который ему не удалось разобрать.
868 868
869Claude никогда не видит stderr хука, завершившегося с кодом 0. Чтобы прочитать его самостоятельно для таких событий, как `PreToolUse`, включите [отладочное логирование](#debug-hooks). Чтобы передать предупреждение Claude из хука `PostToolUse` или `PostToolUseFailure`, вместо этого выйдите с кодом 2, чтобы [Claude увидел stderr](#exit-code-2-behavior-per-event), хотя инструмент уже выполнился.869Claude никогда не видит stderr хука, завершившегося с кодом 0. Чтобы прочитать его самостоятельно для таких событий, как `PreToolUse`, включите [отладочное логирование](#debug-hooks). Чтобы передать предупреждение Claude из хука `PostToolUse` или `PostToolUseFailure`, вместо этого выйдите с кодом 2, чтобы [Claude увидел stderr](#exit-code-2-behavior-per-event), хотя инструмент уже выполнился.
870 870
907 Другие коды выхода907 Другие коды выхода
908</h4>908</h4>
909 909
910Если ваш хук завершается с кодом, отличным от 0 или 2, и выводит в stdout обычный текст или ничего, запуск считается [неблокирующей ошибкой](#exit-code-output). В транскрипте отображается уведомление `<hook name> hook error` с `Failed with non-blocking status code:` и первой строкой stderr вашего хука. Например, если хук `PreToolUse` для `Bash` выводит `something broke` в stderr и завершается с кодом 1, уведомление `PreToolUse:Bash hook error` содержит такую строку:910Если хук не относится к тем, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails), код выхода, отличный от 0 или 2, при обычном тексте или пустом выводе в stdout считается [неблокирующей ошибкой](#exit-code-output). Если действие выполняется, в транскрипте отображается уведомление `<hook name> hook error` с `Failed with non-blocking status code:` и первой строкой stderr вашего хука.
911
912Например, если хук `PreToolUse` для `Bash` выводит `something broke` в stderr и завершается с кодом 1, уведомление `PreToolUse:Bash hook error` содержит такую строку:
911 913
912```text theme={null}914```text theme={null}
913Failed with non-blocking status code: something broke915Failed with non-blocking status code: something broke
915 917
916Чтобы получить полный stderr, а не только его первую строку, включите [отладочное логирование](#debug-hooks).918Чтобы получить полный stderr, а не только его первую строку, включите [отладочное логирование](#debug-hooks).
917 919
918Хук, который не удаётся запустить, тоже считается неблокирующей ошибкой. В форме оболочки, если путь к скрипту не существует или файл не является исполняемым, оболочка завершается с кодом вроде 127, и уведомление содержит сообщение интерпретатора, например `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. Настраивая хук для политики, следите за этим уведомлением при его первом запуске, потому что опечатка в пути в `settings.json` означает, что хук никогда не выполнится. Чтобы вместо этого блокировать действие, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).920Если хук не относится к тем, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails), хук, который не удаётся запустить, тоже считается неблокирующей ошибкой. В форме оболочки, если путь к скрипту не существует или файл не является исполняемым, оболочка завершается с кодом вроде 127, и уведомление содержит сообщение интерпретатора. Например, если путь к скрипту не существует, уведомление содержит строку вроде этой:
921
922```text theme={null}
923Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory
924```
925
926Настраивая хук для политики, следите за этим уведомлением при его первом запуске, потому что опечатка в пути в `settings.json` означает, что хук никогда не выполнится. Чтобы блокировать действие, когда хук не удаётся запустить, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).
919 927
920<Warning>928<Warning>
921 Без корректного JSON в stdout Claude Code обрабатывает код выхода 1 как неблокирующую ошибку, хотя 1 — общепринятый код ошибки в Unix. Если ваш хук предназначен для соблюдения политики, используйте `exit 2`.929 Код выхода 1 без корректного вывода JSON является неблокирующей ошибкой, если хук не относится к тем, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails), хотя 1 — общепринятый код ошибки в Unix. Если ваш хук предназначен для соблюдения политики, используйте `exit 2`.
922</Warning>930</Warning>
923 931
924<h4 id="timeouts">932<h4 id="timeouts">
929 937
930Для [`PreModelSwitch`](#premodelswitch) хук, отменённый по таймауту, блокирует переключение модели. Для `PreToolUse` два семейства хуков ведут себя по-разному:938Для [`PreModelSwitch`](#premodelswitch) хук, отменённый по таймауту, блокирует переключение модели. Для `PreToolUse` два семейства хуков ведут себя по-разному:
931 939
932* Хук `command`, `http` или `mcp_tool`, превысивший таймаут, не блокирует вызов инструмента. Вызов продолжается через обычный [процесс разрешений](/docs/ru/permissions), поэтому не рассчитывайте, что зависший хук сработает как защитный барьер. Чтобы блокировать вызов при превышении таймаута хуком `command` или `http`, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).940* Хук `command`, `http` или `mcp_tool`, превысивший таймаут, не блокирует вызов инструмента, за исключением хуков, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails). Вызов продолжается через обычный [процесс разрешений](/docs/ru/permissions), поэтому не рассчитывайте, что зависший хук сработает как защитный барьер. Чтобы блокировать вызов при превышении таймаута хуком `command` или `http`, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).
933* [Callback-хук Agent SDK](/docs/ru/agent-sdk/hooks), превысивший свой таймаут, [блокирует вызов инструмента](#pretooluse).941* [Callback-хук Agent SDK](/docs/ru/agent-sdk/hooks), превысивший свой таймаут, [блокирует вызов инструмента](#pretooluse).
934 942
935<h4 id="hooks-that-start-a-background-process">943<h4 id="hooks-that-start-a-background-process">
959 Блокировка действия при сбое хука967 Блокировка действия при сбое хука
960</h4>968</h4>
961 969
962Для большинства событий, когда хук завершается сбоем или превышает таймаут, Claude Code всё равно выполняет действие, поэтому хук политики с неверным путём или падающим скриптом пропускает всё. Чтобы вместо этого блокировать действие, установите `"onFailure": "block"` для хука `command` или `http`. Значение по умолчанию — `"continue"`. Требуется Claude Code v2.1.295 или новее.970Для большинства событий, когда хук завершается сбоем или превышает таймаут, Claude Code всё равно выполняет действие. В результате хук политики с неверным путём или падающим скриптом пропускает всё. Чтобы вместо этого блокировать действие, установите `"onFailure": "block"` для хука `command` или `http`. Требуется Claude Code v2.1.295 или новее.
971
972<Note>
973 В Windows без Git Bash командный хук `PreToolUse` или `PermissionRequest` в форме оболочки, завершившийся сбоем при незаданном `onFailure`, может вместо этого [заблокировать вызов инструмента](#failed-hooks-on-windows-without-git-bash).
974</Note>
963 975
964Этот хук `PreToolUse` в `.claude/settings.json` запускает скрипт проекта перед каждой командой Bash и блокирует команду, если скрипт завершается сбоем:976Этот хук `PreToolUse` в `.claude/settings.json` запускает скрипт проекта перед каждой командой Bash и блокирует команду, если скрипт завершается сбоем:
965 977
1007* **Хуки `Stop`, `SubagentStop`, `TaskCompleted` и `TeammateIdle`**: код выхода 2 для этих событий отправляет Claude продолжать работу, а Claude не может исправить хук, который не запускается1019* **Хуки `Stop`, `SubagentStop`, `TaskCompleted` и `TeammateIdle`**: код выхода 2 для этих событий отправляет Claude продолжать работу, а Claude не может исправить хук, который не запускается
1008* **Фоновые командные хуки**: командные хуки, в которых задано [`async` или `asyncRewake`](#run-hooks-in-the-background)1020* **Фоновые командные хуки**: командные хуки, в которых задано [`async` или `asyncRewake`](#run-hooks-in-the-background)
1009 1021
1022<h4 id="failed-hooks-on-windows-without-git-bash">
1023 Сбой хуков в Windows без Git Bash
1024</h4>
1025
1026Если ошибка заблокированного вызова инструмента содержит этот текст, командный хук `PreToolUse` или `PermissionRequest` завершился сбоем или превысил таймаут и заблокировал вызов:
1027
1028```text theme={null}
1029blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.
1030```
1031
1032Хук в форме оболочки без заданного `shell` выполняется в PowerShell, если Git Bash не установлен, а скрипт, написанный для Bash, может не работать там в исходном виде. Выберите исправление, подходящее для вашего хука:
1033
1034* **Хук написан для Bash**: установите [Git for Windows](https://git-scm.com/downloads/win) или задайте [`CLAUDE_CODE_GIT_BASH_PATH`](/docs/ru/env-vars), если Git Bash установлен там, где Claude Code его не находит, а затем начните новую сессию
1035* **Хук запускает один файл `.exe`, а не файл `.cmd` или `.bat`**: укажите программу в `command`, а её аргументы в `args`, чтобы использовать [форму exec](#exec-form-and-shell-form), и добавьте [`"onFailure": "block"`](#block-the-action-when-a-hook-fails). Тогда Claude Code запускает программу без оболочки. Без `"onFailure": "block"` вызов может выполниться, если программа завершается сбоем, отсутствует или превышает таймаут
1036* **Хук написан для PowerShell**: добавьте в хук `"shell": "powershell"` и [`"onFailure": "block"`](#block-the-action-when-a-hook-fails). Без `"onFailure": "block"` вызов может выполниться, если хук по-прежнему завершается сбоем или превышает таймаут. Чтобы узнать причину сбоя хука, проверьте [отладочный лог](#debug-hooks)
1037* **Действие должно выполняться при сбое хука**: добавьте в хук `"onFailure": "continue"`
1038
1039Для хука, который показывает эту ошибку, любой код выхода, отличный от 0 или 2, считается [сбоем](#block-the-action-when-a-hook-fails), даже если хук выводит JSON, который не отклоняет вызов.
1040
1010<h4 id="exit-code-2-behavior-per-event">1041<h4 id="exit-code-2-behavior-per-event">
1011 Поведение кода выхода 2 для каждого события1042 Поведение кода выхода 2 для каждого события
1012</h4>1043</h4>
1060* **2xx с пустым телом**: успех, эквивалентно коду выхода 0 без вывода1091* **2xx с пустым телом**: успех, эквивалентно коду выхода 0 без вывода
1061* **2xx с телом в виде объекта JSON**: разбирается по той же схеме [вывода JSON](#json-output), что и для командных хуков. Тело, не прошедшее проверку схемы, является неблокирующей ошибкой1092* **2xx с телом в виде объекта JSON**: разбирается по той же схеме [вывода JSON](#json-output), что и для командных хуков. Тело, не прошедшее проверку схемы, является неблокирующей ошибкой
1062* **2xx с любым другим телом, например обычным текстом**: неблокирующая ошибка, обрабатывается так же, как статус не 2xx. Claude Code не добавляет текст в контекст Claude1093* **2xx с любым другим телом, например обычным текстом**: неблокирующая ошибка, обрабатывается так же, как статус не 2xx. Claude Code не добавляет текст в контекст Claude
1063* **Статус не 2xx**: неблокирующая ошибка, выполнение продолжается1094* **Статус не 2xx**: неблокирующая ошибка
1064* **Сбой соединения**: неблокирующая ошибка, выполнение продолжается1095* **Сбой соединения**: неблокирующая ошибка
1065* **Таймаут**: хук отменяется, как описано в разделе [Таймауты](#timeouts)1096* **Таймаут**: хук отменяется, как описано в разделе [Таймауты](#timeouts)
1066 1097
1067HTTP-хуки не могут сигнализировать о блокирующей ошибке только через код состояния: статус не 2xx или сбой соединения является [неблокирующей ошибкой](#exit-code-output). Чтобы заблокировать вызов инструмента или отклонить разрешение, верните ответ 2xx с телом JSON, содержащим соответствующие поля решения. Чтобы блокировать действие, когда запрос завершается сбоем или возвращает статус не 2xx, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).1098После [неблокирующей ошибки](#exit-code-output) действие выполняется, если хук не относится к тем, [сбой которых блокирует действие](#block-the-action-when-a-hook-fails). Чтобы заблокировать вызов инструмента или отклонить разрешение, верните ответ 2xx с телом JSON, содержащим соответствующие [поля решения](#decision-control). Чтобы блокировать действие, когда запрос завершается сбоем или возвращает статус не 2xx, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).
1068 1099
1069<h3 id="json-output">1100<h3 id="json-output">
1070 Вывод JSON1101 Вывод JSON
1573}1604}
1574```1605```
1575 1606
1607Когда промпт — это введённый вами [скилл](/docs/ru/skills) или пользовательская команда, например `/deploy staging`, хук получает эту строку в том виде, в каком вы её ввели, а не развёрнутое содержимое скилла. Если хук блокирует промпт, команда не выполняется, поэтому shell-команды, которые скилл [вставляет с помощью `` !`<command>` ``](/docs/ru/skills#inject-dynamic-context), тоже не выполняются. Чтобы вместо этого сопоставлять имя или аргументы команды, используйте [UserPromptExpansion](#userpromptexpansion).
1608
1576<h4 id="userpromptsubmit-decision-control">1609<h4 id="userpromptsubmit-decision-control">
1577 Управление решениями UserPromptSubmit1610 Управление решениями UserPromptSubmit
1578</h4>1611</h4>
2076 2109
2077| Поле | Описание |2110| Поле | Описание |
2078| :- | :- |2111| :- | :- |
2079| `permissionDecision` | `"allow"` пропускает запрос разрешения, за исключением [действий, которые не одобряет автоматически ни один режим](/docs/ru/permission-modes#actions-no-mode-auto-approves), [чтения по сетевым путям](/docs/ru/permissions#network-paths), а также `AskUserQuestion` и `ExitPlanMode`, для которых нужен [`updatedInput` в паре с ним](#allow-with-updatedinput). `"deny"` предотвращает вызов инструмента. `"ask"` просит пользователя подтвердить. `"defer"` корректно завершает работу, чтобы инструмент можно было возобновить позже. [Правила запрета и запроса](/docs/ru/permissions#manage-permissions) всё равно оцениваются независимо от того, что возвращает хук |2112| `permissionDecision` | `"allow"` пропускает запрос разрешения, кроме [действий, которые не подтверждаются автоматически ни в одном режиме](/docs/ru/permission-modes#actions-no-mode-auto-approves), и [чтения по сетевым путям](/docs/ru/permissions#network-paths). `AskUserQuestion` и `ExitPlanMode` требуют [`updatedInput` в паре с `"allow"`](#allow-with-updatedinput). Для режима планирования см. [Подтверждения хуками в режиме планирования](/docs/ru/permissions#hook-approvals-in-plan-mode). `"deny"` предотвращает вызов инструмента. `"ask"` запрашивает подтверждение у пользователя. `"defer"` корректно завершает работу, чтобы инструмент можно было возобновить позже. [Правила запрета и подтверждения](/docs/ru/permissions#manage-permissions) по-прежнему проверяются независимо от того, что возвращает хук |
2080| `permissionDecisionReason` | Для `"ask"` показывается пользователю в запросе разрешения. Когда Claude Code [запрещает вызов](/docs/ru/headless#turn-off-permission-prompts-in-unattended-runs) в запуске `-p`, где никто не может ответить на этот запрос, Claude вместо этого читает причину в результате инструмента. Для `"deny"` показывается Claude. Для `"allow"` и `"defer"` записывается только в [лог отладки](#debug-hooks) |2113| `permissionDecisionReason` | Для `"ask"` показывается пользователю в запросе разрешения. Когда Claude Code [запрещает вызов](/docs/ru/headless#turn-off-permission-prompts-in-unattended-runs) в запуске `-p`, где никто не может ответить на этот запрос, Claude вместо этого читает причину в результате инструмента. Для `"deny"` показывается Claude. Для `"allow"` и `"defer"` записывается только в [лог отладки](#debug-hooks) |
2081| `updatedInput` | Изменяет входные параметры инструмента перед выполнением. Заменяет весь объект входных данных, поэтому включайте неизменённые поля вместе с изменёнными. Claude Code оценивает правила разрешений и [пригодность команды Bash для автоматического перевода в фон](/docs/ru/tools-reference#foreground-commands-that-move-to-the-background) по входным данным, которые возвращает ваш хук, а не по тем, что отправил Claude. Сочетайте с `"allow"` для автоматического одобрения или с `"ask"`, чтобы показать пользователю изменённые входные данные. Для `"defer"` игнорируется |2114| `updatedInput` | Изменяет входные параметры инструмента перед выполнением. Заменяет весь объект входных данных, поэтому включайте неизменённые поля вместе с изменёнными. Claude Code оценивает правила разрешений и [пригодность команды Bash для автоматического перевода в фон](/docs/ru/tools-reference#foreground-commands-that-move-to-the-background) по входным данным, которые возвращает ваш хук, а не по тем, что отправил Claude. Сочетайте с `"allow"` для автоматического одобрения или с `"ask"`, чтобы показать пользователю изменённые входные данные. Для `"defer"` игнорируется |
2082| `additionalContext` | Строка, добавляемая в контекст Claude вместе с результатом инструмента. Игнорируется, когда `permissionDecision` равен `"defer"`. См. [Добавление контекста для Claude](#add-context-for-claude) |2115| `additionalContext` | Строка, добавляемая в контекст Claude вместе с результатом инструмента. Игнорируется, когда `permissionDecision` равен `"defer"`. См. [Добавление контекста для Claude](#add-context-for-claude) |
3718 3751
3719Claude Code показывает пользователю любое `systemMessage`, возвращённое хуком, независимо от решения, поэтому хук для отчёта о стоимости может вернуть `{"systemMessage": "..."}` и завершиться с кодом 0.3752Claude Code показывает пользователю любое `systemMessage`, возвращённое хуком, независимо от решения, поэтому хук для отчёта о стоимости может вернуть `{"systemMessage": "..."}` и завершиться с кодом 0.
3720 3753
3721Хук PreModelSwitch, не ответивший до истечения таймаута, блокирует переключение. О том, что делает таймаут для других событий, см. [Таймауты](#timeouts). Таймаут по умолчанию для этого события — 30 секунд. `PreModelSwitch` запускает только хуки `command`, `http` и `mcp_tool`, поэтому значения по умолчанию для `prompt` и `agent` не применяются.3754<h4 id="premodelswitch-timeouts-and-other-exit-codes">
3755 Таймауты PreModelSwitch и другие коды выхода
3756</h4>
3757
3758Хук PreModelSwitch, не ответивший до истечения таймаута, блокирует переключение. Таймаут по умолчанию для этого события — 30 секунд.
3722 3759
3723Хук, завершившийся с кодом, отличным от 0 или 2, и не выводящий решения в JSON, считается неблокирующей ошибкой, как описано в разделе [Другие коды выхода](#other-exit-codes).3760О том, что происходит при коде выхода, отличном от 0 или 2, см. в разделе [Другие коды выхода](#other-exit-codes).
3724 3761
3725<h3 id="postmodelswitch">3762<h3 id="postmodelswitch">
3726 PostModelSwitch3763 PostModelSwitch