Перейти к содержанию

claude-code

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

Claude News

Допустим, ваш хук-охранник упал, не успел ответить или вернул странный код. До сих пор 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 остальные типы хуков. А главный вопрос придётся решать вам для каждой настройки: что для вас хуже, агент, который встаёт из-за сломанного хука, или проверка, которая тихо пропускается. Ответ зависит от того, что именно охраняет хук.

Читайте также

  1. Claude Code 2.1.294 чинит хуки, которые пропускали запреты
  2. Claude Code 2.1.292 ставит плагин вместе с маркетплейсом
  3. Claude Code 2.1.290 подсказывает модам, кто просит доступ
  4. В Claude Code появился агент, который читает вывод за вас
  5. Claude Code 2.1.288 вернёт промпт, стёртый по Ctrl+C
  6. На модах Claude Code Anthropic собрала /diff и AGENTS.md

Комментарии

Пока никто не написал. Будьте первым.

Присоединяйтесь к разговору

Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.

Из Google мы используем только имя и аватар. Почту не сохраняем.