Хуки: действия на автомате

Хук — это правило для 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):

Хуки также можно встраивать прямо в скиллы — в YAML-шапке.

5 готовых примеров

1. Звук когда задача готова

Самый полезный хук на старте. Поставил задачу — ушёл пить кофе — услышал звук — вернулся к готовому результату.

Все примеры ниже — в формате JSON. Это просто способ записать настройки структурированно: фигурные скобки {} для блоков, ключи в кавычках, значения через двоеточие. Не пугайся если видишь впервые — Claude отлично пишет такой код, тебе достаточно скопировать и попросить «добавь это в мой ~/.claude/settings.json».

▸ ~/.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. Автоформатирование после сохранения

▸ Запуск Prettier на изменённых файлах
{
  "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. Защита от опасных команд

▸ Блокировка опасного через prompt-хук
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "prompt",
            "prompt": "Проверь команду на безопасность. Если она удаляет файлы (rm -rf), делает force-push в main, или экспортирует секреты — заблокируй. Иначе разреши."
          }
        ]
      }
    ]
  }
}

Это уже умный хук — Claude сам оценивает каждую команду перед выполнением. Дополнение к статическим запретам в permissions.deny (см. deny-список в 03).

5. Уведомление в Telegram

▸ Сообщение в 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"
---

При деплое сначала запусти проверку безопасности, потом разверни.

Это полезно когда хук критичен для конкретного сценария но не нужен везде.

Где особенно полезны

Личное

Звук на завершение задачи и блокировка rm -rf — это два хука которые я ставлю первыми в любой среде. Поставил один раз — забыл. Работают надёжнее любых ручных проверок.