#Хуки для урока 5 Среднего уровня
Три учебных хука для урока Среднего уровня «Закрепите правило хуком» и настройки, которые их регистрируют. Заголовок каждого скрипта говорит, что он делает, когда запускается, о его побочных эффектах, платформах, как его удалить, и содержит строку о тестировании.
| Скрипт | Событие и матчер | Что делает |
|---|---|---|
dot-claude/hooks/protect-files.sh |
PreToolUse, Edit\|Write |
Блокирует правки .env, package-lock.json и .git/ с кодом выхода 2. Скрипт из руководства по хукам без изменений |
dot-claude/hooks/format-after-edit.sh |
PostToolUse, Edit\|Write |
Убирает пробелы и табуляции в конце строк и оставляет один завершающий перевод строки в исходном файле, который только что изменил Claude. Только распространённые расширения исходного кода, например .js, .py и .sh: Markdown, патчи и файлы данных остаются как есть |
dot-claude/hooks/desktop-notify.sh |
Notification, любой тип |
Показывает уведомление на рабочем столе для каждого уведомления Claude Code, например о запросе разрешения, который ждёт |
#Как использовать
Из корня проекта:
mkdir -p .claude/hooks
cp <path-to-this-folder>/dot-claude/hooks/protect-files.sh <path-to-this-folder>/dot-claude/hooks/format-after-edit.sh .claude/hooks/
chmod +x .claude/hooks/*.sh
Затем объедините settings.snippet.json с .claude/settings.json своего проекта. Если в файле уже есть ключ hooks или permissions, добавьте эти записи рядом с существующими, а не заменяйте их.
desktop-notify.sh касается вас, а не проекта, поэтому он идёт в пользовательские настройки, где руководство по хукам регистрирует свои примеры уведомлений. Скопируйте его в ~/.claude/hooks/, сделайте исполняемым и добавьте это в ~/.claude/settings.json рядом с уже имеющимися ключами. Он записан в форме для оболочки, поэтому оболочка раскрывает ~:
"hooks": {
"Notification": [
{ "matcher": "", "hooks": [ { "type": "command", "command": "~/.claude/hooks/desktop-notify.sh" } ] }
]
}
settings.snippet.json:
- Что: регистрирует protect-files.sh и format-after-edit.sh в exec-форме, так что путь с ${CLAUDE_PROJECT_DIR} не нужно брать в кавычки, и добавляет правило deny Read(.env), которое также не даёт инструментам Edit и Write менять файл .env (Configure permissions).
- Когда: Claude Code читает его при старте сессии в проекте и перечитывает при изменении файла (Settings).
- Побочные эффекты: собственных нет; побочные эффекты скриптов перечислены в их заголовках.
- Платформы: macOS, Linux и WSL2. Скриптам нужны bash и jq, а format-after-edit.sh нужен ещё и python3.
- Удаление: удалите записи из .claude/settings.json.
Хуки из .claude/settings.json репозитория выполняются с правами вашего пользователя: в интерактивной сессии — как только вы доверились папке, а при запуске claude -p — без вопросов (Hooks reference). Прочитайте каждый скрипт, прежде чем его регистрировать.
Smoke-тест без Claude: bash test.sh.
Проверено в Claude Code v2.1.285 (stable) на macOS, 06.10.2026
Источники: Automate actions with hooks, Hooks reference, Configure permissions, Settings