Шлюз узнает, какой агент Claude Code прислал запрос

Счётчик контекста в Claude Code оценивал ходы инструментов-советников примерно вдвое дороже, чем они весят на самом деле, и авто-сжатие срабатывало примерно на половине реального окна. В релизе v2.1.273 на Github счёт поправили, а заодно добавили пять служебных заголовков запроса для LLM-шлюзов.
Коротко
- Anthropic добавила в Claude Code пять заголовков запроса, среди них x-claude-code-request-class и x-claude-code-agent-type; шлюз увидит их, только если выставить переменную CLAUDE_CODE_GATEWAY_HINT_HEADERS=1.
- Закрыли две дыры в проверке прав: Bash-команды, которые анализатор не разбирает до конца, пропускали запрос под permissions.blockReadsOutsideWorkingDirectories, а сабшелл прятал опасный rm в режиме bypass.
- Правку из 2.1.268 откатили, так что deny-правила Read и Edit снова не проверяются на неразбираемых строках вроде eval и env -C, зато time -p make build опять спрашивает разрешение вместо отказа.
Если вы не следили, зачем Claude Code вообще знать про шлюз: по описанию Amazon Web Services, Claude apps gateway запускается из того же бинаря claude командой claude gateway --config gateway.yaml, работает в серверном режиме и стоит между локальными клиентами и Amazon Bedrock, беря на себя доступ и учёт. По данным Gradually AI, предыдущий релиз v2.1.271 от 14 сентября добавил в ценовой блок шлюза множитель до 10 для внутреннего чарджбэка. Заголовки ложатся в эту же конструкцию.
Пять заголовков уходят в шлюз только с CLAUDE_CODE_GATEWAY_HINT_HEADERS=1
Список такой: x-claude-code-request-class, x-claude-code-agent-type, x-claude-code-prev-tool-durations, x-claude-code-compaction и x-claude-code-context-compacted. По умолчанию их нет вовсе. Выставляете переменную окружения, и каждый запрос уносит с собой класс запроса, тип агента, длительности предыдущих вызовов инструментов и признаки того, что контекст сжимался.
Шлюзу виден только HTTP-запрос: тело с промптом и заголовки. Примерно как наклейка на посылке, по которой курьер сортирует груз, не вскрывая коробку. По описанию Google Cloud Blog, идентичности клиента шлюз при этом не верит: почта и группы в метриках claude_code.token.usage берутся из подписанного токена сессии, а не из подставляемого клиентом OTEL_RESOURCE_ATTRIBUTES, а правила доступа из gateway.yaml перепроверяются на каждом вызове /v1/messages.
Рядом поменялась телеметрия: OTEL_LOG_TOOL_DETAILS=1 добавляет настоящие имена агентов, скиллов, плагинов и MCP-серверов в метрики стоимости и токенов. Ошибки 401 и 403 на Bedrock, Vertex и Foundry, а также 403 от шлюза приложений Claude, раньше советовали выполнить /login; сообщение стало называть конкретный ключ для обновления или отправлять к администратору шлюза.
Сабшелл прятал опасный rm в режиме bypass
Две правки по правам. Bash-команды, которые проверка разрешений не может разобрать целиком, под permissions.blockReadsOutsideWorkingDirectories проскакивали без запроса. Отдельно чинили случай, когда опасный rm внутри сабшелла не замечался в режиме bypass. И откатили изменение из 2.1.268, которое проверяло deny-правила Read и Edit на неразбираемых строках вроде eval и env -C.
Та же настройка blockReadsOutsideWorkingDirectories теперь честно работает с памятью: каталог памяти, выбранный настройками репозитория, не грузится в промпт, не вспоминается, не индексируется и не используется извлечением памяти. Скиллы, синхронизированные из claude.ai, после отключения Skills в организации оставались доступными, а уезжают в восстановимую корзину. И параметры allowManagedMcpServersOnly, deniedMcpServers, disableClaudeAiConnectors из MDM или managed-settings.json игнорировались, если рядом лежали серверные настройки.
/login стирал прежние размышления и заставлял переписывать весь кэш промпта
Команды /login, /upgrade и /extra-usage выбрасывали из разговора ранее накопленные размышления, и следующий запрос переписывал кэш промпта целиком. В длинных сессиях поправили и отзывчивость: прогресс хуков и активность субагентов перестали переобрабатывать весь разговор на каждое обновление.
Мелочи из того же списка: /tui отказывался перезапускаться из-за участника команды агентов, который уже закончил работу и не показывался в панели; сохранённые задачи из .claude/scheduled_tasks.json запускались в чужой сессии после копирования файла в другую папку, например в новый worktree; долгая сессия пересоздавала заглушку .git/info/exclude после удаления каталога .git; Read на macOS отказывался читать перетащенный скриншот с жалобой на изменившееся разрешение симлинка; символ «!» в начале строки терялся в shell-режиме, так что команды вида ! grep … теперь набираются.
Форк сессии из приложения Claude идёт фоновой задачей на вашем компьютере
Сессию, запущенную с claude --remote-control или через /remote-control, можно форкнуть прямо из приложения Claude, и форк пойдёт фоновой сессией на вашей машине. Клиентам Remote Control, подключённым к сессии в Claude Desktop, VS Code или JetBrains, отказывали в запросе занятости контекстного окна; это починили. Когда MCP-сервер отваливается посреди сессии и автопереподключение сдаётся, приходит уведомление со ссылкой на /mcp, и туда же отправляет сообщение об истёкшем входе в MCP-сервер.
Субагентов и фоновых агентов считали упавшими, а результат не доставляли, если в финальном потоковом ответе не было данных о токенах или id модели. Вывод SDK и --output-format stream-json терял остаток сообщений субагента и его финальный отчёт после перевода в фон, например через CLAUDE_AUTO_BACKGROUND_TASKS. Авто-режим останавливался ради подтверждения, когда инструмент Artifact загружал приложенный вами к чату файл в облачной или Remote Control сессии.
Чего в заметках нет: как именно шлюз должен реагировать на подсказки и в каком формате приходит x-claude-code-prev-tool-durations. Раз заголовки выключены по умолчанию, строить на них жёсткую логику шлюз не сможет, пока их не включит каждый клиент; на наш взгляд, флаг здесь выбран правильно, потому что служебные данные о сессии в чужой сервис лучше отправлять осознанно. Откат правки из 2.1.268 стоит держать в голове отдельно: удобство вернулось, а вместе с ним вернулась и дыра в проверке deny-правил на неразбираемых Bash-строках.
Когда вернётся серверный классификатор
Авто-режим на Bedrock, Vertex и Foundry переведён на локальный классификатор по умолчанию, и в заметках сказано, что так сделано пока. Срока, когда серверный классификатор платформы снова станет умолчанием, Anthropic не называет. Вернуть его можно переменной CLAUDE_CODE_AUTO_MODE_SERVER=1 и сравнить поведение на своих задачах. Заодно имеет смысл посмотреть на счётчик контекста: если авто-сжатие у вас срабатывало подозрительно рано, после правки оно должно дотягивать до полного окна.
Читайте также
- Плагины Claude Code теперь можно прогнать через тесты
- Claude Code 2.1.274 предупреждает, пока память не кончилась
- Claude Code выдаёт домены отдельно каждой команде
- В проекте без CLAUDE.md Claude Code 2.1.277 читает AGENTS.md
- Claude Code 2.1.268 синхронизирует тарифы шлюза
- Панель Claude Code выносится в отдельное окно
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.
