# Рецепты хуков: автоформат, уведомления, проверка в конце

Курс: Claude Code: уровень профи — https://zero2claude.ru/learn/claude-code-pro
Канонический URL: https://zero2claude.ru/learn/claude-code-pro/2-2-recepty-hukov

Три рабочих рецепта на хуках — привести файл в порядок после правки, получить уведомление, когда Claude ждёт тебя, и проверить всё рабочее дерево в конце ответа. И граница, о которой забывают.

В прошлом уроке хук блокировал правку. Но хуки умеют не только запрещать. Вот три рецепта, которые окупаются с первого дня.

## Рецепт 1. Прибраться после правки — PostToolUse

`PostToolUse` срабатывает **после** успешного вызова инструмента. Повесь его на `Edit|Write`, и после каждой правки файла запустится твой скрипт: форматтер, линтер или простая чистка лишних пробелов.

```json
"PostToolUse": [
  {
    "matcher": "Edit|Write",
    "hooks": [
      { "type": "command", "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/format-after-edit.sh", "args": [] }
    ]
  }
]
```

Это убирает целый класс мелких правок «а теперь поправь форматирование»: файл приводится к стилю проекта сам.

## Рецепт 2. Позвать тебя — Notification

Длинная задача, ты ушёл за чаем, а Claude давно ждёт подтверждения. Хук на событие `Notification` может показать системное уведомление или проиграть звук, когда Claude Code нужно твоё внимание.

Такой хук — про тебя, а не про проект: на Mac и Linux уведомления делаются по-разному. Поэтому регистрируй его в своём `~/.claude/settings.json`, с путём туда, где у тебя лежит скрипт.

## Рецепт 3. Проверить в конце — Stop

`Stop` срабатывает, когда Claude закончил отвечать. Это лучшее место для проверки **всего** рабочего дерева разом: не появились ли изменения в защищённых файлах, проходят ли быстрые тесты.

## Граница, о которой забывают

Хук с `matcher: "Edit|Write"` видит **только инструменты редактирования**. Если Claude изменит файл командой оболочки — `echo X >> .env`, `sed -i`, `rm`, — этот хук ничего не заметит: команды идут через инструмент `Bash`.

Чтобы видеть всё, есть два пути:

- отдельный хук с `matcher: "Bash"`, который разбирает команду;
- хук на `Stop`, который в конце ответа проверяет рабочее дерево — ему всё равно, *как* сделано изменение.

## Проверяй хук без Claude

Любой скрипт хука можно запустить руками, подав на вход тот JSON, который прислал бы Claude Code. Если скрипт нельзя проверить отдельно, ему нельзя и доверять: ошибка в хуке молча ломает каждую сессию.

**Осторожно.** 
Хук выполняется на каждом событии. Медленный скрипт в PostToolUse — например, полный прогон тестов — замедлит каждую правку. В PostToolUse клади быстрое: форматирование, проверку одного файла. Тяжёлые проверки — в Stop, один раз на ответ.
