Назад к подкастамClaude
Claude Code 101
Hooks в Claude Code
Hooks let you run commands at different points in Claude code's life cycle.
Hooks позволяют запускать команды в различных точках жизненного цикла Claude Code.
The key difference between hooks and everything else we covered is that hooks are deterministic.
Ключевое отличие hooks от всего остального, что мы рассмотрели, заключается в том, что hooks детерминированы.
They always run.
Они всегда выполняются.
So, put it this way.
Скажем так.
You can tell Claude in your claude.md file to run prettier after every file edit and most of the time it will do that, but sometimes it won't.
Вы можете указать Claude в файле claude.md запускать prettier после каждого редактирования файла, и в большинстве случаев он так и делает, но иногда нет.
It's not perfect.
Это не идеально.
But a hook makes it happen every single time with no exceptions.
Но hook гарантирует, что это происходит каждый раз без исключений.
Common use cases could include auto formatting after file edits, logging all executed commands for compliance, blocking dangerous operations like modifying production files, and sending yourself notifications when Claude finishes a task.
Распространённые случаи использования включают автоматическое форматирование после редактирования файлов, логирование всех выполненных команд для соответствия требованиям, блокировку опасных операций, таких как изменение производственных файлов, и отправку уведомлений, когда Claude завершает задачу.
Hooks are configured in your settings.json file.
Hooks настраиваются в файле settings.json.
You pick an event, optionally set a matcher for which tool it applies to, and provide a command to run.
Вы выбираете событие, при необходимости устанавливаете matcher для того, к какому инструменту оно применяется, и указываете команду для выполнения.
User prompts submit runs when you submit a prompt before Claude processes it.
UserPromptSubmit запускается, когда вы отправляете prompt до того, как Claude обработает его.
Pre-tool use which runs before a tool call, post-tool use runs after a tool call completes.
PreToolUse запускается перед вызовом инструмента, PostToolUse запускается после завершения вызова инструмента.
Notification runs when Claude sends a notification, and stop runs when Claude finishes responding.
Notification запускается, когда Claude отправляет уведомление, а Stop запускается, когда Claude завершает ответ.
The most common hook.
Самый распространённый hook.
Auto formatting after edits.
Автоматическое форматирование после редактирования.
You set a post-tool use hook with a matcher of edit or multi-edit, right?
Вы устанавливаете hook PostToolUse с matcher для edit или multi-edit, верно?
So, it fires whenever Claude modifies a file.
Таким образом, он срабатывает каждый раз, когда Claude изменяет файл.
The command checks the file extension and runs the appropriate formatter.
Команда проверяет расширение файла и запускает соответствующий форматтер.
This could be prettier for TypeScript, go format for go, rough for Python, whatever your project uses.
Это может быть prettier для TypeScript, go format для Go, ruff для Python, что использует ваш проект.
Pre-tool use hooks can block tool calls before they execute.
Hooks PreToolUse могут блокировать вызовы инструментов до их выполнения.
So, your hook receives the tool name and input as JSON on stdin.
Ваш hook получает имя инструмента и входные данные в формате JSON через stdin.
If it exits with code two, the action is blocked and the STD error message gets fed back to Claude's feedback so Claude knows why it was blocked and can adjust.
Если он завершается с кодом 2, действие блокируется, а сообщение стандартной ошибки передаётся обратно Claude, чтобы Claude знал, почему оно было заблокировано, и мог скорректироваться.
Exit code zero means proceed.
Код выхода 0 означает продолжить.
Exit code two means block.
Код выхода 2 означает заблокировать.
This is how you enforce hard rules.
Именно так вы применяете жёсткие правила.
Block writes to a production config directory, block bash commands that contain rm-rf, block commits to main, whatever your team needs to be guaranteed, not suggested.
Блокировать записи в производственный каталог конфигурации, блокировать bash-команды, содержащие rm-rf, блокировать коммиты в main, что бы вашей команде ни нужно было гарантировать, а не просто предлагать.
Hooks configured in .Claude/settings.json are project level and can be checked into your repo. This means that your entire team gets the same hooks automatically.
Hooks, настроенные в .Claude/settings.json, являются уровнем проекта и могут быть зарегистрированы в вашем репозитории. Это означает, что вся ваша команда автоматически получает одинаковые hooks.
Use the Claude project dir environment variable in your commands to reference scripts stored in your project so they work regardless of Claude's current working directory.
Используйте переменную окружения директории проекта Claude в своих командах для ссылки на скрипты, хранящиеся в вашем проекте, чтобы они работали независимо от текущей рабочей директории Claude.
[music]
[music]
Hooks gives you deterministic control over Claude code's behavior.
Hooks дают вам детерминированный контроль над поведением Claude Code.
[music]
[music]
Use post-tool-use for auto-formatting and logging. Use pre-tool-use to block dangerous operations. Configure them in the /hooks or in settings.
Используйте PostToolUse для автоматического форматирования и логирования. Используйте PreToolUse для блокировки опасных операций. Настройте их в /hooks или в settings.
json
json
[music]
[music]
and check them into your repository so your team gets them, too.
и зарегистрируйте их в своём репозитории, чтобы ваша команда тоже их получила.
If something needs to happen every time without fail, don't put it in a prompt.
Если что-то должно происходить каждый раз без сбоев, не вставляйте это в prompt.
Put it in a hook.
Вставьте это в hook.
[music]
[music]