Что такое хуки Claude Code? Запуск shell-команд детерминированно
Хуки Claude Code — это определяемые пользователем shell-команды, которые автоматически запускаются в определённых точках жизненного цикла Claude Code, делая «это должно происходить всегда» реальным и детерминированным, не полагаясь на усмотрение LLM. Классических событий девять — SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Notification, Stop, SubagentStop, SessionEnd, PreCompact — из которых PreToolUse и другие могут блокировать (останавливая правки защищённых файлов или опасные команды). Настраиваете вы их в settings.json под ключом «hooks» как имя события -> matcher -> type + command. Контракт ввода/вывода: хук получает JSON на stdin (session_id, tool_input и т. д.) и возвращает результат через код выхода 0 (успех) / 2 (блок, со stderr, переданным обратно Claude) или структурированный JSON (continue, decision:block, permissionDecision: deny/allow/ask). Ключевой принцип: «хуки могут ужесточать, но не ослаблять ограничения» (deny всегда побеждает, блокирует даже при bypassPermissions). Классические сценарии: автоформат после правок (PostToolUse + Edit|Write), защита критичных файлов, остановка опасных команд, повторное внедрение контекста (SessionStart), уведомления/аудит и тесты перед остановкой (Stop). О безопасности: хуки выполняют произвольные shell-команды с вашими правами, поэтому настраивайте только доверенные и проверяйте/заключайте в кавычки входные данные; конфигурация хуков фиксируется при старте сессии (защитная функция), поэтому изменения в середине сессии не применяются. На основе официальной документации, с опорой на девять классических событий и контракт ввода/вывода.