Function hooks в Claude Code: хуки стали программируемым middleware

Function hooks в Claude Code: хуки стали программируемым middleware

У Claude Code давно есть hooks — детерминированные проверки, которые не дают модели забыть про правила из CLAUDE.md на середине долгой сессии: не трогай прод-базу, не удаляй ветки, не выполняй опасный CLI. Работает это надёжно, но плоско: hook умеет либо пропустить действие, либо заблокировать его. Новая функция — function hooks в Claude Code — убирает этот потолок и превращает хуки в программируемый слой между моделью и инструментами, по духу похожий на middleware в Express.js.

Чем не хватало старых hooks

Классический hook — это внешний shell-скрипт, который срабатывает перед вызовом инструмента и говорит «да» или «нет». Для многих задач этого достаточно: например, скрипт вроде Superbase Guard блокирует удаление продакшен-проектов и веток на уровне CLI-команды. Но у такого подхода есть жёсткие ограничения. Hook не может переписать промпт или дополнить его контекстом из базы знаний компании. Он не может нарисовать кнопку или статус-строку в интерфейсе, не может задать пользователю уточняющий вопрос, не может добавить новый инструмент или отредактировать описание существующего. И у него нет памяти — данные не переживают переход от одного hook к другому, не говоря уже о разных сессиях.

Function hooks в Claude Code: хуки как middleware

Function hooks решают все эти проблемы разом, потому что работают не как отдельный процесс, а как код, встроенный в цепочку вызовов. При любом обращении Claude Code к инструменту хук может сопоставить вызов с паттерном — например, bash-командой, подпадающей под регулярное выражение, — и не просто разрешить или заблокировать её, а переписать. Наглядный пример: хук автоматически подменяет npm install на pnpm install, чтобы в кодовой базе случайно не завёлся не тот пакетный менеджер. Так же легко реализуется кэш: перед веб-запросом хук заглядывает в собственное хранилище, и если URL уже загружался, отдаёт сохранённую копию вместо повторного запроса. Тем же механизмом можно подменить встроенный веб-поиск на вызов стороннего API (в демонстрации — Exa) с автоматическим откатом на штатный инструмент, если ключ не задан или запрос не удался.

Секреты, память и вопросы к пользователю

Самый показательный кейс — плагин, который перехватывает ввод и по энтропии распознаёт секреты, email-адреса и IP до того, как они попадут в транскрипт сессии. Найденный секрет хранится в оперативной памяти хука и подменяется в диалоге на идентификатор — модель буквально не видит реальное значение. А в момент, когда секрет нужен для настоящего API-запроса, хук на лету подставляет исходное значение обратно. Это тот же принцип, что и у agent-proxy решений, перехватывающих запрос и добавляющих секрет прямо в момент выполнения. Отдельно function hooks умеют рисовать собственные элементы интерфейса: например, живой статус деплоя в Vercel — очередь, сборка, готово — прямо в строке состояния Claude Code, с возможностью свернуть блок. Тем же путём можно заставить Claude Code спрашивать подтверждение перед рискованным действием: например, уточнять, не пора ли разбить файл после того, как он перевалил за тысячу строк, или требовать явного «да» перед отправкой рассылки.

Что это меняет

Главный сдвиг здесь не в конкретных примерах, а в самом принципе: правила, которые раньше жили в CLAUDE.md и системном промпте — и потому могли «выветриться» из контекстного окна за долгую сессию, — теперь можно закрепить в коде. Хук не забывает и не интерпретирует инструкцию вольно. А поскольку function hooks оформляются как плагины, ими так же легко делиться с командой через общий git-репозиторий, как обычным конфигом линтера. Для регулируемых индустрий вроде медицины или платежей это ещё и готовый механизм аудита: каждое событие Claude Code можно зеркалировать во внутреннее хранилище логов. Обратная сторона — растущая площадь для ошибок: чем больше логики уезжает в хуки-невидимки, тем важнее их документировать и тестировать, иначе поведение агента станет непредсказуемым уже по другой причине — не из-за забывчивости модели, а из-за скрытого кода, о котором забыла команда.

Ray Amjad — практические туториалы по Claude Code и AI-агентам. Источник: видео «Anthropic Just Dropped the Biggest Claude Code Update Yet».

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *