Хуки заставляют Claude Code делать рутину автоматически: форматировать код после правок, гонять линт, блокировать опасные команды. Это не просьба к модели, а гарантированное действие на событие. Разберём, как настроить.
Ты наверняка ловил это: просишь Claude «всегда форматируй код после правок» — и через десять сообщений он про это забывает. Инструкции в промте — это просьба, а не гарантия: модель может их проигнорировать, особенно в длинной сессии. Хуки решают проблему в корне. Это твои команды, которые Claude Code запускает сам в нужный момент, и они срабатывают всегда, независимо от внимания модели.
Что узнаешь из гайда
settings.json — по шагамЧасть 1 · Понятие
Главное
Хук — это твоя команда, которую Claude Code запускает автоматически в определённый момент: до вызова инструмента, после правки файла, при старте сессии. Срабатывает гарантированно, а не «если модель вспомнит».
Слово «хук» (от английского hook — «зацепка») значит точку, к которой можно «прицепить» своё действие. В Claude Code такими точками служат события: агент собирается вызвать инструмент, агент правит файл, ты отправил промт, сессия закончилась. На каждое из этих событий можно повесить команду — обычную команду терминала, которую система запустит сама.
Инструкция в промте — это просьба. Хук — это гарантия.
В этом ключевое отличие. Когда ты пишешь в промте «форматируй код», Claude может это сделать, а может забыть. Хук PostToolUse, который запускает форматтер после каждой правки файла, сработает всегда — он не зависит от того, помнит модель про правило или нет.
Часть 2 · Смысл
Хуки берут на себя ту рутину, которую глупо каждый раз проговаривать модели. Три самых частых сценария:
rm -rf).Общая идея: всё, что должно происходить всегда и независимо от модели, выноси в хуки. Так ты перестаёшь полагаться на память Claude и получаешь стабильное поведение проекта. Это разгружает и контекст — не нужно держать в нём инструкции про формат и линт.
Хуки хорошо дружат с субагентами и скилами: субагенты задают роли, скилы — навыки, хуки — гарантированные действия на события. Вместе они и превращают Claude Code в настроенную рабочую систему, а не просто умный чат.
Часть 3 · События
Хук привязывается к событию. Вот основные точки, к которым можно прицепиться:
| Событие | Когда срабатывает |
|---|---|
| PreToolUse | Перед вызовом инструмента — можно заблокировать |
| PostToolUse | После вызова инструмента (например, после правки файла) |
| UserPromptSubmit | Когда ты отправил промт |
| Stop | Когда агент закончил ответ |
| SessionStart / SessionEnd | Начало и конец сессии |
| PreCompact | Перед сжатием контекста |
На практике 90% хуков висят на двух событиях: PostToolUse (что сделать после правки — формат, линт) и PreToolUse (что проверить до действия — защита). Остальные нужны под более тонкие сценарии вроде загрузки контекста при старте сессии.
Часть 4 · Настройка
Главное
Хуки описываются в файле settings.json в блоке hooks: событие → matcher (на какие инструменты реагировать) → command (что запустить). Личные — в ~/.claude/settings.json, проектные — в .claude/settings.json.
Вот рабочий хук, который запускает Prettier после каждой правки файла. Разберём по частям:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
}
]
}
]
}
}Читается так: на событие PostToolUse (после действия), если инструмент — Edit или Write (правка файла), запусти команду. Команда здесь берёт путь к файлу из данных события (через jq) и прогоняет по нему Prettier. matcher — это фильтр: "Edit|Write" значит «реагируй только на эти инструменты, на остальные не трогай».
Где живёт файл
Личные настройки — ~/.claude/settings.json (работают во всех проектах). Командные — .claude/settings.json внутри репозитория (едут в гит, у всей команды одинаковые хуки). Та же логика, что у скилов и субагентов: личное в домашней папке, командное — в проекте.
Часть 5 · Примеры
Кроме автоформата выше, два частых хука: линт после правок и защита от опасных действий.
Тот же PostToolUse, но вместо форматтера — твой скрипт проверки:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "/path/to/lint-check.sh"
}
]
}
]
}
}Для запретов есть два пути. Простой — список deny в правах доступа: Claude просто не сможет выполнить команду из чёрного списка.
{
"permissions": {
"allow": [
"Bash(npm test *)",
"Bash(npm run *)"
],
"deny": [
"Bash(rm -rf *)"
]
}
}Более гибкий путь — хук на событие PreToolUse: он срабатывает перед вызовом инструмента и может проверить команду своим скриптом. Если скрипт завершится с кодом 2, действие блокируется — Claude не выполнит то, что ты запретил. Это полезно для сложных проверок, которые не выразить простым списком.
Коротко
PostToolUse с matcher: "Edit|Write".deny в permissions.PreToolUse, выход с кодом 2 блокирует действие.Часть 6 · Граница
Минимальный набор
Большинству хватает двух хуков: автоформат после правок и линт. Защиту от опасных команд проще закрыть списком deny в правах, а не отдельным скриптом. Начни с этого минимума — он закрывает 90% рутины, и не плоди хуки, пока реально не упрёшься в потребность.
Когда хук не нужен
Если правило гибкое и зависит от ситуации — это не хук, а инструкция в CLAUDE.md. Хук хорош для жёсткого «всегда делай так»: формат, линт, запрет. Стиль кода, тон, архитектурные предпочтения — это контекст, его не автоматизируешь командой. И не вешай тяжёлые команды на частые события: хук на каждую правку, который идёт пять секунд, замедлит всю работу.
Коротко
hooks в settings.json: событие, matcher, command.Вопросы
Хук — это твоя команда, которую Claude Code запускает автоматически в определённый момент работы: до вызова инструмента, после правки файла, при отправке промта и так далее. В отличие от инструкции в промте, хук срабатывает гарантированно, а не «если модель вспомнит». Это способ автоматизировать рутину вроде форматирования кода после каждой правки или блокировки опасных команд.
Хуки описываются в файле settings.json в блоке hooks: указываешь событие (например, PostToolUse), matcher (на какие инструменты реагировать) и command — команду, которую запустить. Файл живёт в ~/.claude/settings.json для личных настроек или .claude/settings.json в проекте для командных. После сохранения хук начинает срабатывать сам, без отдельного запуска.
Основные события: PreToolUse (перед вызовом инструмента), PostToolUse (после), UserPromptSubmit (когда ты отправил промт), Stop (когда агент закончил), SessionStart и SessionEnd, PreCompact (перед сжатием контекста). Самые ходовые — PreToolUse для защиты от опасных действий и PostToolUse для автоформата и линта после правок.
Хук — это гарантированное действие на событие, а скил и CLAUDE.md — это контекст, которому модель следует на своё усмотрение. Инструкцию в CLAUDE.md Claude может забыть в длинной сессии. Хук же запускает твою команду всегда, когда срабатывает событие. Поэтому хуки используют для строгих правил: формат, линт, запреты.
Читать дальше
Хуки автоматизируют рутину, скилы дают навыки. В маркетплейсе ИИ-офиса собраны готовые навыки для Claude Code: разработка, дизайн, контент, автоматизация. Каждый с описанием и установкой — ставь и пользуйся.
Открыть маркетплейс скиловА разборы, эфиры и живое сообщество вайбкодеров — в Telegram ИИ-офиса.