Глава 11

Используйте hooks для событий, а не для рассуждения

Hook запускается в определённой точке agent loop и подходит для format, audit, policy check или context injection. Он не должен превращаться во второй непрозрачный агент и не заменяет CI или server-side authorization.

Какое событие для какого действия годится - и где предел, - удобно видеть в таблице.

Событие · Практическое действие · Ограничение

  • Перед shell/tool - Проверить command, path, domain или риск side effect; Parser должен разбирать структурированный input, а не искать опасное слово наивным regex
  • После edit - Запустить formatter или записать audit event; Не запускайте полный suite после каждого символа
  • Перед остановкой - Проверить focused test или наличие отчета; Нужен предел повторов, иначе возможен loop
  • Начало session - Добавить краткий runtime context; Не выгружайте в context секреты и огромные логи

Различия продуктов здесь имеют значение, и переносить конфиг между ними нельзя. Claude Code настраивает hooks в settings JSON и документирует lifecycle events, включая PreToolUse, PostToolUse и Stop. Cursor хранит project hooks в .cursor/hooks.json, передаёт JSON по stdio и документирует события вроде beforeShellExecution и afterFileEdit. У Codex собственная hook system и trust model - синтаксис берут из текущей документации Codex.

Особое внимание - поведению при отказе.

Проверяйте fail behavior. В текущей документации Cursor command hook с exit code 2 блокирует действие, а прочие ненулевые коды считаются ошибкой hook, и действие по умолчанию продолжается. Если ваша политика должна fail closed, реализуйте и протестируйте именно этот контракт, а не предполагайте его.

И граница безопасности, потому что hook - это исполняемый код.

Hook запускает код. Project hook - исполняемая поверхность репозитория. Нужны trust controls, review изменений конфигурации, минимальные permissions и безопасный parser. Не запускайте hook из недоверенного репозитория вслепую.

События под контролем. Но даже идеальные hooks бесполезны, если среда невоспроизводима - к ней и переходим.

Ссылки