В Claude Code 2.1.295 упавший хук может блокировать действие

Допустим, ваш хук-охранник упал, не успел ответить или вернул странный код. До сих пор Claude Code в таком случае пропускал действие, как будто проверка прошла. В релизе 2.1.295 на Github появилась настройка onFailure: "block", и с ней такой сбой превращается в запрет.
Коротко
- Для хуков типа command и HTTP появилась настройка onFailure: "block": если хук не стартовал, вышел по таймауту или вернул неожиданный код, действие агента останавливается, а не проходит дальше.
- Шлюз Claude apps получил параметр timeouts.upstream_ttfb_ms для Bedrock, Vertex и Foundry: если поток не начался за заданное время, запрос уходит на запасной апстрим или получает ответ 502.
- В списке изменений режим блокировки описан только для хуков command и HTTP. Про остальные типы хуков релиз ничего не говорит, как и про то, получает ли Claude объяснение блокировки.
По данным блога Paul-schick, хуки появились в Claude Code в июне 2025 года и к началу 2026-го выросли с 6 типов событий до 17. Munder Difflin Blog насчитывает уже 33 события в версии 2.1.284 и напоминает, что ограничители на поведение хуков появлялись и раньше: в 2.1.143 зацикленным Stop-хукам разрешили не больше восьми блокировок подряд. На GitHub есть и сторонние охранники вроде agent-run-guard, в описании которого прямо сказано, что при внутренних ошибках он пропускает действие.
Хук с onFailure: "block" останавливает действие при трёх видах сбоя
Новая настройка работает для двух типов хуков: command, то есть shell-команды, и HTTP, то есть запроса на ваш эндпоинт. Если такой хук не смог запуститься, не уложился в таймаут или завершился с кодом, которого Claude Code не ждёт, действие блокируется. Раньше во всех трёх случаях оно проходило.
В том же релизе закрыты две похожие дыры в модах. Хук мода получал глубоко вложенный ввод инструмента обрезанным и без ошибки, так что охранник мог пропустить содержимое, которого не видел. А вызовы, которые мод делал во время перезагрузки воркера плагинных хуков, проходили мимо guard-хука другого мода, если у того был .catch. Сейчас такие вызовы отклоняются.
Ещё одна правка из той же области касается флагов --tools и --restricted. Они не применялись к встроенным инструментам, которые регистрируются после запуска, а устаревшие имена инструментов доходили до инструментов вне набора, разрешённого вызывающей стороне.
Терминал с OSC 7501 покажет, ждёт ли Claude Code вашего ответа
Program Status Protocol работает через управляющую последовательность OSC 7501. Терминал, который её понимает, показывает одно из трёх состояний: Claude Code работает, ждёт вас или закончил. В режиме claude -p, если stderr подключён к терминалу, появилась строка с объяснением, чего ждёт запуск, оставшийся открытым после последнего хода. Заодно исправлен текстовый вывод -p, который терял ранние ответы, когда фоновая работа запускала ещё один ход.
Несколько исправлений касаются зависаний. На ответах в десятки тысяч строк терминал замирал и игнорировал ctrl+c. Ответы, где цитаты каждые несколько строк вкладываются всё глубже, подвешивали его на секунды и съедали гигабайты памяти. Подсветка синтаксиса на очень длинных строках, длинных сериях пустых строк или незакрытых строках и heredoc могла держать экран от секунд до минут.
Шлюз Claude apps получил лимит на старт потока и списки моделей для апстримов
Параметр timeouts.upstream_ttfb_ms работает на апстримах Bedrock, Vertex, Foundry и других облачных. Он задаёт, сколько поток может стартовать, после чего запрос переключается на запасной апстрим или получает 502. У каждого апстрима появился необязательный список models: туда уходят только перечисленные модели, в том числе при переключении, а одна звёздочка в записи работает как шаблон.
За шлюзом на Amazon Bedrock токены для /context и чтения больших файлов считает AWS CountTokens API. Раньше для этого шёл запрос к модели на один токен, а сейчас нужно выдать право bedrock:CountTokens. Фоновые запросы за шлюзом уходят в Haiku 4.5, а там, где шлюз её не обслуживает, в модель сессии.
Исправлен сбой, при котором на модели [1m] падал каждый запрос, если шлюз, Bedrock, Vertex или Foundry отклоняли бету context-1m: Claude Code повторяет запрос без неё. Для режима повторов CLAUDE_CODE_RETRY_WATCHDOG добавлена переменная CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS, которая ограничивает ожидание после ошибок 429 и 529.
Описания MCP-инструментов обрезаются на 16 384 символах вместо 2 048
Описания, которые модель загружает через поиск инструментов, обрезаются на 16 384 символах, а не на 2 048, как раньше. Сообщения по WebSocket больше 16 МиБ не разбираются и закрывают соединение, как уже было на других транспортах. Коннекторы claude.ai на установках без флагов по умолчанию договариваются о версии протокола MCP 2026-07-28, отказаться можно через MCP_PROTOCOL_NEGOTIATION=legacy.
В headless- и SDK-сессиях удалённые MCP-серверы оставались отключёнными после перебоя дольше 15 секунд или без конца переподключались к серверу, который рвёт связь сразу после подключения. Повторные обрывы обрабатываются с нарастающей паузой, до 30 секунд. Исправлены и запросы одной и той же страницы, до 20 раз при каждом подключении, к серверам, которые повторяют курсор пагинации.
Почему охранник раньше пропускал действие при сбое
Блокировка в хуках устроена через код выхода 2: он останавливает действие и возвращает ошибку Claude. Охранников обычно вешают на PreToolUse, событие перед вызовом инструмента. PostToolUse срабатывает уже после успешного вызова и заблокировать ничего не может. Код 2 означает осознанный отказ, а падение самого хука до сих пор такого отказа не давало.
По данным Claude Code Docs, command-хук получает данные на stdin, а HTTP-хук получает их телом POST-запроса. Представьте турникет со считывателем пропусков: если считыватель сломан, турникет можно оставить открытым или закрыть. onFailure: "block" выбирает второй вариант и приравнивает молчащий хук к отказу.
В списке изменений режим описан только для command- и HTTP-хуков, хотя, по данным Claude Code Docs, хуками бывают ещё вызовы MCP-инструментов, промпты и субагенты. Что происходит с ними при сбое и видит ли Claude причину блокировки, релиз не уточняет. На наш взгляд, разумно, что блокировку включают явно: медленный, но исправный хук иначе мог бы неожиданно останавливать агента.
Какие терминалы покажут OSC 7501
Терминалы с поддержкой Program Status Protocol релиз не называет, так что проверять придётся самим. Неизвестно и то, получат ли onFailure остальные типы хуков. А главный вопрос придётся решать вам для каждой настройки: что для вас хуже, агент, который встаёт из-за сломанного хука, или проверка, которая тихо пропускается. Ответ зависит от того, что именно охраняет хук.
Читайте также
- Claude Code 2.1.294 чинит хуки, которые пропускали запреты
- Claude Code 2.1.292 ставит плагин вместе с маркетплейсом
- Claude Code 2.1.290 подсказывает модам, кто просит доступ
- В Claude Code появился агент, который читает вывод за вас
- Claude Code 2.1.288 вернёт промпт, стёртый по Ctrl+C
- На модах Claude Code Anthropic собрала /diff и AGENTS.md
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.
