Хуки: действия на автомате
Хук — это правило для Claude Code: «когда происходит X, автоматически выполни Y». Claude закончил отвечать — играет звук. Сохранил файл — запускаются тесты. Хочет выполнить опасную команду — блокируется автоматически.
Хуки убирают из работы рутинные действия которые ты бы делал вручную. Один раз настроил — забыл, оно работает.
Что можно автоматизировать
| Сценарий | Зачем |
|---|---|
| Звук когда Claude закончил | Можно отойти от экрана — услышишь когда задача готова |
| Тесты после изменения кода | Если что-то сломал — сразу видно, не нужно вспоминать через час |
| Автоформатирование при сохранении | Код всегда красиво отформатирован, без ручного запуска линтера |
| Защита от опасных команд | Блокировка rm -rf, force-push в main и других необратимых действий |
| Уведомление в Telegram | Запустил долгую задачу, ушёл — приходит сообщение когда готово |
| Загрузка контекста при старте | При открытии проекта автоматически читается handoff.md или другой контекст |
Какие события бывают
Хук срабатывает на конкретное событие. Вот основные:
| Событие | Когда срабатывает | VS Code | Терминал |
|---|---|---|---|
PreToolUse |
Перед тем как Claude использует инструмент (напр. Bash) | ✓ | ✓ |
PostToolUse |
После использования инструмента | ✓ | ✓ |
Stop |
Claude закончил отвечать | ✓ | ✓ |
SessionStart |
При запуске новой сессии | ✓ | ✓ |
SessionEnd |
При завершении сессии | ✓ | ✓ |
Notification |
Claude ждёт ответа или подтверждения | ✗ | ✓ |
UserPromptSubmit |
При отправке пользовательского сообщения | ✓ | ✓ |
Если нужны все хуки в VS Code — включи claudeCode.useTerminal: true в настройках расширения.
Три типа хуков
Хук может быть трёх видов в зависимости от того, что именно он делает:
| Тип | Что делает | Когда выбирать |
|---|---|---|
command |
Запускает обычную shell-команду | Звук, скрипт, простое действие — самый стабильный вариант |
prompt |
Claude оценивает ситуацию и принимает решение | Когда нужна логика — например, проверка опасности команды |
agent |
Запускает мини-агента с инструментами | Сложные проверки, нужно прочитать файлы, проанализировать контекст |
Где живёт конфигурация
Хуки настраиваются в файлах settings.json на трёх уровнях (см. статью 03):
~/.claude/settings.json— глобальные хуки, работают везде.claude/settings.json— проектные хуки, в git, для всей команды.claude/settings.local.json— личные хуки, не в git
Хуки также можно встраивать прямо в скиллы — в YAML-шапке.
5 готовых примеров
1. Звук когда задача готова
Самый полезный хук на старте. Поставил задачу — ушёл пить кофе — услышал звук — вернулся к готовому результату.
Все примеры ниже — в формате JSON. Это просто способ записать настройки структурированно: фигурные скобки {} для блоков, ключи в кавычках, значения через двоеточие. Не пугайся если видишь впервые — Claude отлично пишет такой код, тебе достаточно скопировать и попросить «добавь это в мой ~/.claude/settings.json».
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "afplay /System/Library/Sounds/Glass.aiff >/dev/null 2>&1 &"
}
]
}
],
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "afplay /System/Library/Sounds/Glass.aiff >/dev/null 2>&1 &"
}
]
}
]
}
}
Что тут: afplay — встроенная macOS-утилита для воспроизведения звука. Glass.aiff — короткий системный звук, не раздражает. >/dev/null 2>&1 & — запуск в фоне, чтобы не блокировать вывод. Для Windows замени на powershell -c "[System.Media.SystemSounds]::Asterisk.Play()", для Linux — paplay /usr/share/sounds/freedesktop/stereo/complete.oga.
2. Автоформатирование после сохранения
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "npx prettier --write $CLAUDE_FILE_PATH"
}
]
}
]
}
}
После любого редактирования или создания файла — Prettier приводит его к единому стилю. Prettier — популярная программа которая автоматически форматирует код красиво (отступы, переносы, кавычки). Сэкономит время на ручном форматировании.
3. Тесты после изменения кода
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "npm test --silent || echo '⚠️ Тесты не прошли'"
}
]
}
]
}
}
Если тесты сломались — сразу видно. Не нужно вспоминать через час «а почему сайт перестал работать».
4. Защита от опасных команд
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "prompt",
"prompt": "Проверь команду на безопасность. Если она удаляет файлы (rm -rf), делает force-push в main, или экспортирует секреты — заблокируй. Иначе разреши."
}
]
}
]
}
}
Это уже умный хук — Claude сам оценивает каждую команду перед выполнением. Дополнение к статическим запретам в permissions.deny (см. deny-список в 03).
5. Уведомление в Telegram
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "curl -s -X POST https://api.telegram.org/bot$TG_BOT_TOKEN/sendMessage -d chat_id=$TG_CHAT_ID -d text='✅ Claude закончил задачу' >/dev/null"
}
]
}
]
}
}
Чтобы это работало: создай Telegram-бота через @BotFather, получи токен, узнай свой chat_id (через @userinfobot), пропиши TG_BOT_TOKEN и TG_CHAT_ID в env. Теперь даже если ушёл с компьютера — приходит сообщение «Claude готов».
Exit-коды и что они значат
Хук возвращает код, который определяет что произойдёт дальше:
| Код | Значение |
|---|---|
| 0 | Успех — продолжаем выполнение |
| 1 | Ошибка, но не критично — показать сообщение и продолжить |
| 2 | Блок — остановить выполнение (только для PreToolUse) |
Хуки внутри скиллов
Хуки можно встроить прямо в YAML-шапку скилла — тогда они работают только когда этот скилл активен:
---
name: secure-deploy
description: Деплой с проверками безопасности
hooks:
PreToolUse:
- matcher: "Bash"
hooks:
- type: command
command: "./scripts/safety-check.sh"
---
При деплое сначала запусти проверку безопасности, потом разверни.
Это полезно когда хук критичен для конкретного сценария но не нужен везде.
Где особенно полезны
- На VPS-серверах — где Claude работает 24/7, нужны автоматические проверки
- Для агентов работающих 24/7 — где нет тебя рядом смотреть за каждым действием
- В команде — где у всех должны срабатывать одинаковые правила автоматически
- Когда работаешь параллельно с несколькими задачами — звук помогает не пропускать момент готовности
Звук на завершение задачи и блокировка rm -rf — это два хука которые я ставлю первыми в любой среде. Поставил один раз — забыл. Работают надёжнее любых ручных проверок.