Зачем это нужно#
Представьте, что вы наняли помощника для работы с кодом. Хуки — это как инструкции, которые вы оставляете этому помощнику: «Перед тем как удалить файл — проверь дважды», «После каждого изменения — убедись, что ничего не сломалось».
Хук (от англ. hook — «крючок») — это скрипт или инструкция, которая автоматически запускается в определённый момент работы Claude Code. Хуки позволяют:
- 🛡️ Блокировать опасные команды (например, удаление важных файлов)
- ✅ Проверять код перед сохранением
- 📋 Добавлять контекст в начале сессии
- 🔍 Контролировать качество работы
Когда срабатывают хуки#
Claude Code поддерживает несколько событий (моментов), к которым можно «прицепить» хук:
| Событие | Когда срабатывает | Для чего использовать |
|---|---|---|
SessionStart |
При запуске сессии | Загрузить настройки проекта |
UserPromptSubmit |
Когда вы отправляете запрос | Добавить контекст или проверить запрос |
PreToolUse |
Перед выполнением действия | Заблокировать опасные операции |
PostToolUse |
После выполнения действия | Проверить результат |
Stop |
Когда Claude заканчивает работу | Убедиться, что всё сделано |
SessionEnd |
При завершении сессии | Очистка, логирование |
Два типа хуков#
1. Командные хуки (command)#
Запускают скрипт (программу). Подходят для быстрых, точных проверок:
{
"type": "command",
"command": "bash ./scripts/check.sh",
"timeout": 10
}2. Промпт-хуки (prompt) — рекомендуемый вариант#
Используют ИИ для анализа ситуации. Подходят для сложных проверок:
{
"type": "prompt",
"prompt": "Проверь, безопасна ли эта операция с файлом. Верни 'approve' или 'deny'.",
"timeout": 30
}Пошаговая инструкция: настройка хуков#
Шаг 1: Где хранятся хуки#
Хуки можно настроить в двух местах:
- В настройках пользователя — файл
.claude/settings.json(действует для всех проектов) - В плагине — файл
hooks/hooks.jsonвнутри папки плагина
Шаг 2: Создаём простой хук — блокировка опасных команд#
Создайте файл .claude/settings.json в вашем проекте:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/block-rm.sh"
}
]
}
]
}
}Теперь создайте скрипт .claude/hooks/block-rm.sh:
#!/bin/bash
# Читаем данные о команде, которую хочет выполнить Claude
COMMAND=$(cat | jq -r '.tool_input.command')
# Если команда содержит rm -rf — блокируем!
if echo "$COMMAND" | grep -q 'rm -rf'; then
echo '{"hookSpecificOutput": {"permissionDecision": "deny", "permissionDecisionReason": "Опасная команда rm -rf заблокирована хуком"}}'
else
exit 0 # Всё в порядке, разрешаем
fiШаг 3: Хук безопасности из плагина security-guidance#
Плагин security-guidance содержит хук, который напоминает о безопасности при редактировании файлов:
{
"description": "Security reminder hook",
"hooks": {
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/hooks/security_reminder_hook.py"
}
],
"matcher": "Edit|Write|MultiEdit"
}
]
}
}Обратите внимание:
matcher— фильтр: хук сработает только для операцийEdit,WriteилиMultiEdit${CLAUDE_PLUGIN_ROOT}— переменная, которая указывает на папку плагина (используйте её всегда для переносимости)
Шаг 4: Хуки из плагина Hookify#
Плагин Hookify — это мощный инструмент, который позволяет создавать хуки через простые .local.md файлы. Вот пример блокировки опасной команды rm:
---
name: block-dangerous-rm
enabled: true
event: bash
pattern: rm\s+-rf
action: block
---
⚠️ **Опасная команда rm обнаружена!**
Эта команда может удалить важные файлы. Пожалуйста:
- Проверьте, что путь указан правильно
- Рассмотрите более безопасный вариант
- Убедитесь, что у вас есть резервная копияА вот пример хука, который требует запуск тестов перед завершением:
---
name: require-tests-run
enabled: false
event: stop
action: block
conditions:
- field: transcript
operator: not_contains
pattern: npm test|pytest|cargo test
---
**Тесты не обнаружены!**
Перед завершением запустите тесты, чтобы убедиться, что изменения работают.Hookify перехватывает все основные события: PreToolUse, PostToolUse, Stop, UserPromptSubmit.
Матчеры (Matchers) — фильтры для хуков#
Матчер — это фильтр, который определяет, когда именно сработает хук:
"matcher": "Write" // Только для записи файлов
"matcher": "Read|Write|Edit" // Для чтения, записи и редактирования
"matcher": "Bash" // Только для bash-команд
"matcher": "*" // Для всех операций
"matcher": "mcp__.*" // Для всех MCP-инструментовВажно помнить#
⚠️ Хуки загружаются при старте сессии. Если вы изменили хук, нужно перезапустить Claude Code, чтобы изменения вступили в силу.
Для отладки используйте:
claude --debugПроверить загруженные хуки можно командой /hooks внутри Claude Code.
Итоги урока#
- Хуки — это автоматические скрипты, которые срабатывают в определённые моменты работы Claude Code
- Существуют командные (скрипты) и промпт-хуки (на основе ИИ)
- Хуки позволяют блокировать опасные операции, проверять качество кода и добавлять контекст
- Матчеры фильтруют, для каких инструментов сработает хук
- Плагин Hookify позволяет создавать хуки через простые Markdown-файлы
- Всегда используйте
${CLAUDE_PLUGIN_ROOT}для путей в плагинах