раздел 06

Hooks - фоновые автоматизации

Hooks - это shell-команды, которые Claude Code запускает автоматически на события: до правки файла, после правки, при остановке, при отправке вашего сообщения, при срабатывании инструмента. Hook видит происходящее и может разрешить, заблокировать или подменить действие.

Зачем

  • Авто-формат после каждой правки: prettier, black, gofmt. Никакого мусора в diff'ах.
  • Уведомления macOS, когда Claude закончил работу - можно идти за кофе и не сидеть пялиться в терминал.
  • Защита от случайностей: блок на чтение .env, блок на rm -rf, блок на push в main.
  • Авто-тесты после изменений Python-файлов: pytest -x в фоне.
  • Авто-коммиты после успешной задачи - чтобы не терять прогресс.
  • Логирование всех команд Claude в файл - для аудита и отладки.

Hook - это не модель, это обычная shell-команда. Она бесплатная, мгновенная, и работает независимо от того, какую модель вы используете.

Минимальный пример

В ~/.claude/settings.json или .claude/settings.json проекта:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "if echo \"$CLAUDE_FILE_PATHS\" | grep -q '\\.py$'; then black $CLAUDE_FILE_PATHS; fi"
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Готово\" with title \"Claude Code\" sound name \"Glass\"'"
          }
        ]
      }
    ]
  }
}

Что произойдёт:

  • После каждой правки .py файла - автоматически прогонится black
  • Когда Claude закончил - на macOS появится баннер с уведомлением и звуком

События hooks

Полный набор:

| Событие | Когда срабатывает | Может блокировать? | |---|---|---| | PreToolUse | До запуска инструмента (Read, Edit, Bash, ...) | Да | | PostToolUse | После успешного выполнения | Нет | | UserPromptSubmit | Когда вы отправили сообщение | Да | | Stop | Когда Claude закончил отвечать | Нет | | Notification | Когда Claude хочет показать уведомление | Нет | | SubagentStop | Когда субагент закончил | Нет | | PreCompact | До авто-сжатия контекста | Нет | | SessionStart | При старте сессии | Нет | | SessionEnd | При закрытии сессии | Нет |

Что в этом разделе

Полезные ссылки