✻ Claude Code по-русски
🎧 Аудиокурс

#Хуки для урока 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