Хуки
Хуки (hooks) в Claude Code — автоматика на события жизненного цикла: автоформат после правки, запрет на опасные команды, инъекция контекста.
Хук — это действие, которое срабатывает автоматически на событие жизненного цикла агента. Не «попроси агента», а «всегда, когда происходит X, выполняй Y». Логику исполняет сам Claude Code, а не модель, — поэтому хук срабатывает детерминированно, каждый раз.
Описываются в settings.json под ключом hooks.
События
Хук цепляется к моменту в жизни сессии. Самые ходовые:
| Событие | Когда срабатывает |
|---|---|
SessionStart | старт сессии |
UserPromptSubmit | ты отправил сообщение |
PreToolUse | перед вызовом инструмента |
PostToolUse | после вызова инструмента |
Stop | агент закончил ответ |
Зачем
Хуки превращают «надо не забыть» в «происходит само»:
- Автоформат.
PostToolUseна правку файла → прогнать Prettier. Код всегда отформатирован. - Защита.
PreToolUse→ заблокировать опасную команду (rm -rf,git push --force) до выполнения. - Инъекция контекста.
UserPromptSubmit→ подмешать напоминание («отвечай по-русски», «не забудь про линтер»).
Многое из того, что кажется «встроенным поведением» агента, — на самом деле хуки. Например, авто-напоминания про правила или блокировки команд часто настроены именно так.
Как выглядит хук
Хук живёт в settings.json под ключом hooks. Структура: событие → matcher (на какой инструмент) → команда. Вот автоформат — после каждой правки файла прогнать по нему eslint --fix:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "jq -r '.tool_input.file_path' | xargs npx eslint --fix"
}
]
}
]
}
}Как работает: после Edit/Write Claude Code отдаёт хуку JSON события на stdin; jq достаёт путь изменённого файла и передаёт в eslint --fix.
Хук может не только запускать команду, но и блокировать действие — для этого на PreToolUse команда возвращает ненулевой код выхода:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "jq -r '.tool_input.command' | grep -qE 'rm -rf|git push --force' && { echo 'Опасная команда заблокирована' >&2; exit 2; } || exit 0"
}
]
}
]
}
}Код выхода 2 на PreToolUse отменяет вызов инструмента — агент опасную команду не выполнит.
Хук vs CLAUDE.md
Важная разница: CLAUDE.md — это просьба («старайся форматировать код»), которую модель может и проигнорировать. Хук — это гарантия («код будет отформатирован»), потому что его исполняет харнесс, а не модель. Нужна надёжность — это хук.
Полный список событий, форматы и примеры — в документации по хукам.
Проверь себя
1. Что такое хук?
2. Нужно гарантированно блокировать опасные команды до выполнения. Какое событие?
3. Чем хук надёжнее правила в CLAUDE.md?
MCP-серверы
MCP-серверы в Claude Code — как подключить внешние инструменты: Jira, Confluence, браузер, TMS. Что такое Model Context Protocol простыми словами.
Плагины и маркетплейсы
Плагины Claude Code — упаковка skills, сабагентов, хуков и MCP в один пакет, который ставится одной командой. Маркетплейсы для распространения.