Эта страница предоставляет справочную документацию по реализации хуков в Claude Code.
~/.claude/settings.json
- Пользовательские настройки.claude/settings.json
- Настройки проекта.claude/settings.local.json
- Локальные настройки проекта (не коммитятся)PreToolUse
и PostToolUse
)
Write
сопоставляется только с инструментом WriteEdit|Write
или Notebook.*
*
для сопоставления всех инструментов. Вы также можете использовать пустую строку (""
) или оставить
matcher
пустым.type
: В настоящее время поддерживается только "command"
command
: Bash-команда для выполнения (может использовать переменную окружения $CLAUDE_PROJECT_DIR
)timeout
: (Необязательно) Как долго команда должна выполняться, в секундах, перед
отменой этой конкретной команды.UserPromptSubmit
, Notification
, Stop
и SubagentStop
,
которые не используют сопоставители, вы можете опустить поле matcher:
CLAUDE_PROJECT_DIR
(доступна только когда
Claude Code запускает команду хука) для ссылки на скрипты, хранящиеся в вашем проекте,
обеспечивая их работу независимо от текущего каталога Claude:
Task
- Задачи субагентов (см. документацию по субагентам)Bash
- Команды оболочкиGlob
- Сопоставление шаблонов файловGrep
- Поиск содержимогоRead
- Чтение файловEdit
, MultiEdit
- Редактирование файловWrite
- Запись файловWebFetch
, WebSearch
- Веб-операцииmanual
- Вызывается из /compact
auto
- Вызывается из автосжатия (из-за полного контекстного окна)startup
- Вызывается при запускеresume
- Вызывается из --resume
, --continue
или /resume
clear
- Вызывается из /clear
compact
- Вызывается из автоматического или ручного сжатия.reason
во входных данных хука будет одним из:
clear
- Сессия очищена командой /clearlogout
- Пользователь вышел из системыprompt_input_exit
- Пользователь вышел, пока был виден ввод подсказкиother
- Другие причины выходаtool_input
зависит от инструмента.
tool_input
и tool_response
зависит от инструмента.
stop_hook_active
равно true, когда Claude Code уже продолжает работу в результате
хука остановки. Проверьте это значение или обработайте транскрипт, чтобы предотвратить бесконечную работу Claude Code.
manual
, custom_instructions
берется из того, что пользователь передает в
/compact
. Для auto
, custom_instructions
пуст.
stdout
показывается пользователю в режиме транскрипта
(CTRL-R), за исключением UserPromptSubmit
и SessionStart
, где stdout
добавляется в контекст.stderr
передается обратно Claude для автоматической обработки. См. поведение для каждого события хука ниже.stderr
показывается пользователю и
выполнение продолжается.UserPromptSubmit
, где stdout вводится как контекст.Событие хука | Поведение |
---|---|
PreToolUse | Блокирует вызов инструмента, показывает stderr Claude |
PostToolUse | Показывает stderr Claude (инструмент уже выполнился) |
Notification | Н/Д, показывает stderr только пользователю |
UserPromptSubmit | Блокирует обработку подсказки, стирает подсказку, показывает stderr только пользователю |
Stop | Блокирует остановку, показывает stderr Claude |
SubagentStop | Блокирует остановку, показывает stderr субагенту Claude |
PreCompact | Н/Д, показывает stderr только пользователю |
SessionStart | Н/Д, показывает stderr только пользователю |
SessionEnd | Н/Д, показывает stderr только пользователю |
stdout
для более сложного контроля:
continue
равно false, Claude прекращает обработку после выполнения хуков.
PreToolUse
, это отличается от "permissionDecision": "deny"
, которое
только блокирует конкретный вызов инструмента и предоставляет автоматическую обратную связь Claude.PostToolUse
, это отличается от "decision": "block"
, которое
предоставляет автоматизированную обратную связь Claude.UserPromptSubmit
, это предотвращает обработку подсказки.Stop
и SubagentStop
, это имеет приоритет над любым
выходом "decision": "block"
."continue" = false
имеет приоритет над любым
выходом "decision": "block"
.stopReason
сопровождает continue
с причиной, показываемой пользователю, не показываемой
Claude.
PreToolUse
PreToolUse
могут контролировать, выполняется ли вызов инструмента.
"allow"
обходит систему разрешений. permissionDecisionReason
показывается
пользователю, но не Claude."deny"
предотвращает выполнение вызова инструмента. permissionDecisionReason
показывается Claude."ask"
просит пользователя подтвердить вызов инструмента в UI.
permissionDecisionReason
показывается пользователю, но не Claude.decision
и reason
устарели для хуков PreToolUse.
Используйте hookSpecificOutput.permissionDecision
и
hookSpecificOutput.permissionDecisionReason
вместо них. Устаревшие поля
"approve"
и "block"
соответствуют "allow"
и "deny"
соответственно.PostToolUse
PostToolUse
могут предоставлять обратную связь Claude после выполнения инструмента.
"block"
автоматически запрашивает Claude с reason
.undefined
ничего не делает. reason
игнорируется."hookSpecificOutput.additionalContext"
добавляет контекст для рассмотрения Claude.UserPromptSubmit
UserPromptSubmit
могут контролировать, обрабатывается ли подсказка пользователя.
"block"
предотвращает обработку подсказки. Отправленная подсказка
стирается из контекста. "reason"
показывается пользователю, но не добавляется в контекст.undefined
позволяет подсказке продолжаться нормально. "reason"
игнорируется."hookSpecificOutput.additionalContext"
добавляет строку в контекст, если не
заблокировано.Stop
/SubagentStop
Stop
и SubagentStop
могут контролировать, должен ли Claude продолжать.
"block"
предотвращает остановку Claude. Вы должны заполнить reason
, чтобы Claude
знал, как продолжить.undefined
позволяет Claude остановиться. reason
игнорируется.SessionStart
SessionStart
позволяют вам загружать контекст в начале сессии.
"hookSpecificOutput.additionalContext"
добавляет строку в контекст.additionalContext
нескольких хуков объединяются.SessionEnd
SessionEnd
выполняются при завершении сессии. Они не могут блокировать завершение сессии,
но могут выполнять задачи очистки.
UserPromptSubmit
вы можете внедрить контекст любым из методов:UserPromptSubmit
)mcp__<server>__<tool>
, например:
mcp__memory__create_entities
- Инструмент создания сущностей сервера памятиmcp__filesystem__read_file
- Инструмент чтения файлов файловой системыmcp__github__search_repositories
- Инструмент поиска сервера GitHub"$VAR"
, а не $VAR
..
в путях файлов$CLAUDE_PROJECT_DIR
для пути проекта).env
, .git/
, ключей и т.д./hooks
для применения измененийCLAUDE_PROJECT_DIR
доступна и содержит
абсолютный путь к корневому каталогу проекта (где был запущен Claude Code)--debug
)/hooks
, чтобы увидеть, зарегистрирован ли ваш хукclaude --debug
, чтобы увидеть детали выполнения хуков\"
внутри JSON-строкclaude --debug
, чтобы увидеть подробное
выполнение хуковclaude --debug
, чтобы увидеть детали выполнения хуков: