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

ANTHROPIC_BASE_URL не работает в Claude Code: разбор по симптомам

Вход в claude.ai, 401, HTML вместо JSON, 400 Extra inputs и обрыв через три минуты — разные причины. Таблица связывает симптом с проверкой и исправлением.

••15 мин чтения•Claude Code
Цепочка Claude Code → env → ключ → шлюз с красным разрывом между env и ключом, плашки «/status + curl» и «2.1.299», заголовок «ANTHROPIC_BASE_URL не работает в Claude Code»

Когда ANTHROPIC_BASE_URL задан, а Claude Code всё равно открывает вход в claude.ai, ходит мимо шлюза или падает с ошибкой, сломан один из семи слоёв: переменная не дошла до процесса, ключ лежит не в той переменной, адрес шлюза записан не в той форме, шлюз отклоняет поля запроса, в вашей версии Claude Code есть ошибка, интерфейс вообще не читает эту переменную или сам маршрут не поддерживается Anthropic.

Какой именно слой, показывают две проверки:

  1. /status внутри Claude Code. Есть ли строка Anthropic base URL и чей ключ используется: Auth token или API key (ключ шлюза) либо Login method с аккаунтом claude.ai (ключ шлюза до сессии не дошёл).
  2. Один запрос curl к шлюзу из того же терминала. Если он не проходит, дело в адресе, ключе или сети. Если проходит, а Claude Code нет — в том, как Claude Code получает настройки, в версии или в полях запроса.

Про версию: 2.1.299, вышедшая 14 октября 2026 года, исправила четыре ошибки, которые проявляются только при собственном базовом URL, в том числе обрыв ответа после 180 секунд без данных. По состоянию на 15 октября 2026 года канал stable в npm всё ещё отдаёт 2.1.292, то есть на stable этих исправлений пока нет.

Сначала две проверки: /status и один запрос curl к шлюзу

Запустите claude и введите /status. На вкладке Status важны две строки (документация по шлюзам):

  • Anthropic base URL появляется, только если адрес шлюза задан. Нет строки — переменная не дошла до сессии, и все запросы идут напрямую в Anthropic.
  • Auth token или API key с именем ANTHROPIC_AUTH_TOKEN, ANTHROPIC_API_KEY или apiKeyHelper означает, что работает ключ шлюза. Строка Login method с аккаунтом claude.ai вместо неё — ключ шлюза в сессию не попал, и Claude Code использует сохранённый вход.
Схема: /status — нет строк шлюза, значит настройки не дошли до сессии; есть — curl к шлюзу: не прошёл — адрес, ключ или сеть, прошёл — Claude Code получает другие настройки, WAF, TLS, ошибки 400 или версия 2.1.299

Вторая проверка — однотокенный запрос к шлюзу в обход Claude Code. Команда из официальной документации читает переменные текущего терминала:

bash
curl -sS -w '\n%{http_code}\n' -X POST "$ANTHROPIC_BASE_URL/v1/messages" \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model": "claude-sonnet-4-6", "max_tokens": 1, "messages": [{"role": "user", "content": "."}]}'

Если шлюз ждёт ключ в заголовке x-api-key, замените строку Authorization на -H "x-api-key: $ANTHROPIC_API_KEY". Имя модели для этой проверки подбирать не нужно:

Что вернул curlЧто это значит
JSON, начинающийся с {"id":"msg_Адрес и ключ работают. Ищите причину в том, как настроен сам Claude Code
Ошибка о неизвестной моделиТоже успех: шлюз сначала принял ключ, а потом отклонил имя модели
401Ключ отклонён: он не того шлюза, отозван или лежит не в той переменной
Connection refused, Could not resolve hostПо адресу никто не отвечает или имя хоста не разрешается
HTML-страница или 404По этому пути отвечает не API: неверный путь, страница входа или ошибка прокси

Учтите одну ловушку. curl берёт значения из терминала, а Claude Code — из блока env в файле настроек, если там задана та же переменная: значение из settings-файла важнее export в shell. Если curl проходит, сравните адрес в строке Anthropic base URL с тем, что выводит echo $ANTHROPIC_BASE_URL. Разные значения — значит, Claude Code ходит не туда, куда вы проверяли.

Таблица симптомов: что видит Claude Code, причина и исправление

СимптомПричинаЧто сделать
Экран входа или просьба войти в claude.ai, хотя curl проходитКлюч шлюза не дошёл до процесса; env из проектного .claude/settings.json применяется только после мастера первого запуска и подтверждения доверия к папкеЗадать ANTHROPIC_AUTH_TOKEN через export или в ~/.claude/settings.json
В /status нет строки Anthropic base URLПеременная задана в другом терминале, в профиле, который не загружен, или не видна приложениюПеренести переменные в блок env файла ~/.claude/settings.json
Предупреждение при запуске с двумя источниками ключа, заканчивается на auth may not work as expectedАктивны и ключ шлюза, и сохранённый вход claude.ai/logout либо убрать переменную
ANTHROPIC_API_KEY задан, но игнорируется, вопроса нетКлюч однажды отклонили в диалоге подтверждения/config → Use custom API key
401 с недействительным токеномКлюч в заголовке, который шлюз не читает, или ключ отозванПоменять ANTHROPIC_AUTH_TOKEN ↔ ANTHROPIC_API_KEY, перевыпустить ключ
Connection refused … (ConnectionRefused) или Can't reach the API server … (ENOTFOUND)Неверный адрес, VPN или файрволcurl с тем же адресом, проверить сетевой путь
API returned an empty or malformed response (HTTP 200)Вместо API ответила HTML-страница: ошибка, страница входа или неверный путьОткрыть тело ответа в curl, исправить маршрут на шлюзе
403 Forbidden в HTML, а в логах шлюза пустоWAF перед шлюзом блокирует тело запросаИсключить путь /v1/messages из проверки тела
SSL certificate verification failed при рабочем curlClaude Code не доверяет корпоративному сертификатуNODE_EXTRA_CA_CERTS с путём к CA
400 с Extra inputs are not permitted или context_managementШлюз или модель за ним не принимает поля Claude CodeCLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
400 с thinking или adaptiveМодель за шлюзом не умеет adaptive thinkingОбновить модель на стороне шлюза
400 о лимите контекста словами шлюзаClaude Code не узнаёт чужую формулировку и не сжимает контекст/compact, затем CLAUDE_CODE_AUTO_COMPACT_WINDOW
Prompt is too long · automatic compaction failed около 200K токеновОшибка версий до 2.1.299 при имени модели из шлюзаОбновиться до 2.1.299+
Ответ обрывается после трёх минут тишиныОшибка версий до 2.1.299: порог 180 секундОбновиться; порог стал 300 секунд
В терминале работает, в VS Code или Claude Desktop нетРасширение и приложение берут настройки из других местclaudeCode.environmentVariables; в Desktop — своя форма настройки
Пропали Remote Control, голосовой ввод или поиск инструментов MCPТак задумано при чужом хосте и ключе шлюзаЧинить нечего, см. раздел о границах

Строки из официальной таблицы ошибок шлюза приведены с исходными текстами ошибок, остальные — по changelog Claude Code. Ниже — что проверять в каждом случае подробнее.

Claude Code просит войти в claude.ai, хотя ANTHROPIC_BASE_URL задан

Одного ANTHROPIC_BASE_URL мало: базовый URL — это адрес, а не учётные данные. Если задан только он, запросы пойдут через шлюз, но активной учётной записью останется сохранённый вход claude.ai, а с ним и лимиты и оплата подписки. Если вы переходите на шлюз из-за лимитов подписки, без ключа шлюза ничего не изменится; как устроены сами лимиты, разобрано в статье «Лимиты Claude Code: как посмотреть, понять ошибку и продолжить».

Ключ шлюза в переменной важнее сохранённого входа, но ведут себя переменные по-разному:

  • ANTHROPIC_AUTH_TOKEN начинает действовать сразу.
  • ANTHROPIC_API_KEY в интерактивном режиме один раз спрашивает подтверждение. Если тогда нажать «нет», ключ будет молча игнорироваться и вопрос больше не появится. Включается это в /config, пункт Use custom API key.

Если при запуске появляется предупреждение, где названы два источника учётных данных и в конце стоит auth may not work as expected (в старых версиях — Auth conflict: Both a token (SOURCE) and an API key (SOURCE) are set), активны одновременно ключ шлюза и сохранённый вход. Выполните /logout, чтобы остался только ключ шлюза. У OpenRouter такой конфликт, по его документации, выглядит как ошибки «модель не найдена»; после /logout перезапустите claude.

Третий вариант: curl проходит, а Claude Code всё равно показывает вход. У CLI нет своих учётных данных, а блок env из проектного .claude/settings.json или .claude/settings.local.json в интерактивной сессии применяется только после мастера первого запуска и подтверждения доверия к папке. Ключ, лежащий только там, при первом запуске не читается. Положите ANTHROPIC_AUTH_TOKEN туда, где Claude Code видит его сразу: в export в shell, в блок env файла ~/.claude/settings.json или в управляемые настройки организации. В проектный .claude/settings.json ключ не кладите вообще: этот файл коммитится и уходит всем, кто клонирует репозиторий.

Если вы решили вернуться к обычному входу и он завершается ошибкой, это отдельная задача: «Не удаётся войти в Claude Code: ошибки OAuth, 403 и 500».

Переменная не дошла до процесса: терминал, VS Code, Desktop и фоновые агенты

Переменная окружения действует только в том процессе, где её задали, и в процессах, запущенных из него. Отсюда несколько типичных расхождений (документация):

  • export в одном терминале не виден в другом. Чтобы значения сохранялись, добавьте их в ~/.zshrc, ~/.bashrc или $PROFILE PowerShell, а надёжнее — в блок env файла ~/.claude/settings.json (в Windows — %USERPROFILE%\.claude\settings.json).
  • Редактор, запущенный из Dock или меню «Пуск», не видит переменных, выставленных в терминале.
  • Фоновые агенты получают переменные, заданные только в shell, ненадёжно. Для шлюза, через который они обязаны ходить, официальная рекомендация — settings-файл.
  • Нативный установщик не читает файлы .env в проекте: так прямо сказано в инструкции OpenRouter.

То же правило объясняет случаи «не работает через прокси»: прокси, заданный переменными в одном терминале, не действует на процессы, запущенные иначе. При этом прокси и шлюз — разные вещи: прокси только пропускает трафик к api.anthropic.com, а шлюз сам принимает запросы API вместо Anthropic, и именно его адрес пишут в ANTHROPIC_BASE_URL.

Блок env выглядит так:

json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://llm-gateway.example.com",
    "ANTHROPIC_AUTH_TOKEN": "sk-gateway-key"
  }
}

Помните о приоритете: если та же переменная есть и в shell, и в settings-файле, применяется значение из файла. Старый адрес в ~/.claude/settings.json перекроет новый export без всяких предупреждений, поэтому после правок смотрите строку Anthropic base URL в /status.

VS Code и Claude Desktop берут настройки из других мест

Расширение VS Code проверяет учётные данные до запуска по своей настройке claudeCode.environmentVariables в пользовательском settings.json VS Code (команда Preferences: Open User Settings (JSON)). Значения из ~/.claude/settings.json доходят до запущенного процесса, но не до этой проверки входа, поэтому расширение может просить вход, хотя CLI в терминале работает:

json
{
  "claudeCode.environmentVariables": [
    { "name": "ANTHROPIC_BASE_URL", "value": "https://llm-gateway.example.com" },
    { "name": "ANTHROPIC_AUTH_TOKEN", "value": "sk-gateway-key" }
  ]
}

Claude Desktop вообще не читает ни ANTHROPIC_BASE_URL, ни settings.json. У приложения своя конфигурация сторонних поставщиков: её либо раздаёт администратор, либо вы заполняете сами через Help → Troubleshooting → Enable Developer Mode, затем Developer → Configure Third-Party Inference. Ошибка Gateway was unreachable в Desktop означает, что приложение не достучалось до этого адреса при запуске; проверяется тем же curl.

GitHub Actions и Agent SDK. Action claude-code-action читает ANTHROPIC_BASE_URL из блока env workflow, а ключ, переданный как anthropic_api_key, отправляет в заголовке x-api-key. Шлюзу с Bearer-токеном нужен ещё и ANTHROPIC_AUTH_TOKEN в env. В TypeScript SDK параметр options.env заменяет окружение целиком, поэтому разверните в нём ...process.env, иначе переменные шлюза пропадут; Python SDK объединяет окружения сам.

curl не проходит: 401, ConnectionRefused и базовый URL с /v1

Если проверочный запрос падает, Claude Code тут ни при чём: ошибка в адресе, ключе или сети.

401. Каждая переменная кладёт ключ в свой HTTP-заголовок (документация):

ПеременнаяЗаголовок
ANTHROPIC_AUTH_TOKENAuthorization: Bearer …
ANTHROPIC_API_KEYx-api-key: …
apiKeyHelperоба заголовка

Ключ в «чужой» переменной приходит в заголовке, который шлюз не читает, и запрос получает 401. Если владелец шлюза не сказал, какой заголовок нужен, начните с ANTHROPIC_AUTH_TOKEN, а при 401 переложите ключ в другую переменную. Для OpenRouter и Ollama ключ идёт в ANTHROPIC_AUTH_TOKEN, а ANTHROPIC_API_KEY нужно явно задать пустым (""): настоящий ключ Anthropic, оставшийся в профиле shell, уйдёт как x-api-key, и /logout этого не исправит.

Ещё одна причина «пустого» ключа — порядок строк в профиле. Строка ANTHROPIC_AUTH_TOKEN="$OPENROUTER_API_KEY" подставляет значение в момент загрузки профиля. Если OPENROUTER_API_KEY определён ниже, в другом файле или появляется позже из менеджера секретов, токен окажется пустым и каждый запрос упадёт на авторизации.

Форма адреса. Claude Code сам дописывает к базовому URL путь /v1/messages, поэтому в переменную пишут корень, без /v1:

Куда подключаетесьANTHROPIC_BASE_URLКлюч
OpenRouterhttps://openrouter.ai/apiANTHROPIC_AUTH_TOKEN, ANTHROPIC_API_KEY=""
Ollama на своём компьютереhttp://localhost:11434ANTHROPIC_AUTH_TOKEN=ollama, ANTHROPIC_API_KEY=""
Ollama Cloudhttps://ollama.comANTHROPIC_AUTH_TOKEN = ключ Ollama, ANTHROPIC_API_KEY=""
Корпоративный шлюз, LiteLLM, свой reverse proxyкорень, который выдал владелец шлюзапо типу ключа (см. таблицу выше)

Значения для сверки взяты из инструкций OpenRouter и Ollama. Для OpenRouter это именно https://openrouter.ai/api, а не https://openrouter.ai/api/v1. Если адрес уже заканчивается на /v1, запрос, судя по тому, как Claude Code строит путь, уйдёт на /v1/v1/messages; что ответит шлюз (обычно 404 или HTML), зависит от шлюза. Для reverse proxy на своём VPS то же правило: в переменную идёт адрес, по которому прокси принимает /v1/messages.

Connection refused, ENOTFOUND. Claude Code показывает Connection refused — a firewall or proxy may be blocking it (ConnectionRefused), когда по адресу никто не отвечает, или Can't reach the API server — check your internet or DNS (ENOTFOUND), когда имя хоста не разрешается. Перед этим он молча повторяет запрос с паузами, поэтому ошибка появляется не сразу. curl с тем же адресом падает мгновенно и с той же причиной: опечатка в адресе, выключенный шлюз, VPN или файрвол на пути.

API returned an empty or malformed response (HTTP 200). Шлюз или промежуточный прокси ответил не API, а HTML: страницей ошибки или страницей входа. Посмотрите тело ответа curl и исправьте маршрут на шлюзе, который так отвечает.

curl проходит, а Claude Code нет: settings.json, WAF и сертификаты

Если проверочный запрос успешен, ищите расхождение между условиями curl и условиями реальной сессии:

  • Другой адрес или ключ. Значение из блока env settings-файла перекрывает export, а curl читает только export. Сверьте /status с echo $ANTHROPIC_BASE_URL.
  • Ключ лежит только в проектном .claude/settings.json. До подтверждения доверия к папке он не применяется, отсюда просьба войти (разобрано выше).
  • 403 Forbidden в виде HTML, а в логах шлюза запроса нет. Перед шлюзом стоит WAF или reverse proxy с проверкой тела запроса. Промпты Claude Code содержат XML-подобные теги и исходный код, которые попадают под правила против межсайтового скриптинга, поэтому короткий curl проходит, а настоящая сессия — нет. Исключите путь /v1/messages из проверки тела: в AWS WAF это управляемое правило CrossSiteScripting_Body, в nginx с ModSecurity — соответствующие правила OWASP CRS.
  • Ошибки сертификата вроде SSL certificate verification failed или Self-signed certificate detected. Среда выполнения Claude Code не доверяет тому же центру сертификации, что curl; так бывает за корпоративными прокси с инспекцией TLS. Укажите путь к пакету сертификатов в NODE_EXTRA_CA_CERTS.
  • ANTHROPIC_API_KEY молча игнорируется — включите его в /config → Use custom API key.
  • Ошибки 400 — см. следующий раздел: curl отправляет минимальный запрос, а Claude Code — полный набор полей.

Ошибки 400 от шлюза: Extra inputs, adaptive и лимит контекста

Claude Code отправляет на Anthropic-совместимый адрес поля, которые есть у Anthropic API, включая предварительные (beta). Шлюз, который передаёт запрос модели с более строгой проверкой, отвечает 400. Что делать, зависит от текста ошибки (таблица ошибок шлюза):

  • Extra inputs are not permitted, context_management или другие незнакомые поля. Задайте CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1: переменная убирает большинство предварительных заголовков и полей, а вместе с ними и поиск инструментов MCP. Некоторые beta-функции этим флагом не управляются; для них документация советует задать подходящую переменную провайдера CLAUDE_CODE_USE_*, чтобы Claude Code отправлял только то, что этот провайдер принимает.
  • Не работают названия сессий, вызов памяти или prompt-хуки, потому что шлюз не принимает structured outputs. С версии 2.1.288 можно отключить только их через CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS=1, не трогая остальные beta-функции.
  • thinking или adaptive, например Input tag 'adaptive' found. Модель за шлюзом не поддерживает adaptive thinking, которое Claude Code запрашивает для Opus 4.6, Sonnet 4.6, Haiku 5.5, Fable 5 и более новых моделей. Решение — обновить модель на стороне шлюза. Только для Opus 4.6 и Sonnet 4.6 можно вместо этого задать CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1.
  • Лимит контекста словами шлюза, например ContextWindowExceededError или prompt token count of N exceeds the limit of M. Шлюз ограничивает контекст сильнее, чем сама модель, и переписывает ошибку, поэтому Claude Code не узнаёт в ней «слишком длинный запрос» и не сжимает контекст сам. Восстановить сессию — /compact. Чтобы не повторялось, задайте CLAUDE_CODE_AUTO_COMPACT_WINDOW равным лимиту шлюза и CLAUDE_CODE_MAX_OUTPUT_TOKENS ниже лимита вывода модели.

Про CLAUDE_CODE_AUTO_COMPACT_WINDOW есть две детали из справочника переменных. Значение пишется целым числом: 120000 сработает, а 120k прочитается как 120 и поднимется до минимума. Минимум — 100 000 токенов, так что шлюз с лимитом ниже этого не подогнать, и остаётся только /compact. Если шлюз режет контекст на 200K, учтите изменение из 2.1.285: за собственным базовым URL сессии стали использовать окно 1M у моделей, где оно есть (Opus 4.7+, Sonnet 5+, Fable). В этом случае помогает /autocompact 200k.

json
{
  "env": {
    "CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1",
    "CLAUDE_CODE_AUTO_COMPACT_WINDOW": "120000"
  }
}

Число здесь — пример для шлюза с лимитом около 128K; подставьте лимит своего шлюза.

Два открытых отчёта на GitHub, которые Anthropic пока не подтвердила, касаются тех же ошибок. В #95087 описано, что первый запрос сессии к собственному базовому URL несёт блоки tool_addition, строгий шлюз отвечает 400, а Claude Code молча повторяет запрос без них; в комментарии от 13 октября 2026 года на версии 2.1.296 автор пишет о шлюзе, где повтор не сработал и диалог стал непригоден. В #101897 после обновления с 2.1.269 до 2.1.296 сессии на собственной модели падают с 400 и формулировкой maximum context length, а сжатие контекста не помогает; автору помог откат на 2.1.269. Как откатить версию, описано в статье «Changelog Claude Code: что изменилось и как откатить версию».

Версия 2.1.299: четыре исправления для шлюзов и stable на 2.1.292

Версия 2.1.299 опубликована в npm 14 октября 2026 года в 00:23 UTC (03:23 по Москве), следом в тот же день вышла 2.1.300. В changelog к 2.1.299 есть четыре исправления для работы через ANTHROPIC_BASE_URL:

  1. Ответ обрывался после 180 секунд без данных. Потоки через собственный базовый URL прерывались, если три минуты ничего не приходило. Теперь порог — 300 секунд. Это заметно на медленных шлюзах и локальных моделях с долгими паузами.
  2. Prompt is too long · automatic compaction failed около 200K токенов. Сессии с моделью под именем из шлюза завершались этой ошибкой вместо того, чтобы отправить запрос.
  3. Ключ шлюза уходил в Anthropic. Служебные запросы к Anthropic (флаги функций, запуск, fast mode, профиль, отзывы) несли API-ключ, настроенный для стороннего шлюза. Настоящие ключи Anthropic API по-прежнему отправляются.
  4. То же для управляемых настроек. Запрос серверных управляемых настроек нёс ключ шлюза, если ANTHROPIC_BASE_URL задан в файле управляемых настроек организации.

Какую видимую ошибку давали пункты 3 и 4, changelog не описывает. Это прежде всего вопрос того, куда уходил ключ; если ключ шлюза — секрет организации, сообщите об этом владельцу шлюза.

Нужно ли обновляться и как получить 2.1.299 на stable

По состоянию на 15 октября 2026 года в npm latest = 2.1.300, а stable = 2.1.292 (опубликована 6 октября). Канал stable по документации по установке отстаёт примерно на неделю и пропускает версии с крупными регрессиями. Из номеров версий следует, что у пользователей stable исправлений 2.1.299 пока нет; когда stable дойдёт до 2.1.299 или новее, не объявлено.

Шкала версий: stable стоит на 2.1.292 от 6 октября без исправлений, latest на 2.1.300; 2.1.299 от 14 октября исправила тайм-аут потока (300 с), Prompt is too long около 200K, утечку ключа шлюза в Anthropic и запрос управляемых настроек

Проверьте свою версию через claude --version и решите по симптому:

  • Ответы обрываются на долгих паузах, или вы видите automatic compaction failed около 200K — обновляйтесь, это именно те ошибки.
  • Ключ шлюза не должен попадать к Anthropic — обновляйтесь.
  • Всё работает, а шлюз отвечает быстро — можно дождаться, пока stable догонит.

Как обновиться:

  • Нативная установка на канале latest обновляется сама; claude update следует выбранному каналу.
  • Конкретная версия ставится так: curl -fsSL https://claude.ai/install.sh | bash -s 2.1.299. Чтобы потом при переходе на stable не откатиться назад, в настройках есть minimumVersion.
  • Homebrew сам не обновляется: cask claude-code идёт по stable, claude-code@latest — по latest (brew upgrade claude-code@latest). WinGet и apt по умолчанию тоже не обновляются сами.
  • Если вы задали CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1, чтобы трафик не уходил мимо шлюза, автообновление тоже выключено, и обновляться придётся вручную.

Если обновиться пока нельзя, а модель долго молчит, посмотрите на две переменные из справочника. API_FORCE_IDLE_TIMEOUT управляет пятиминутным тайм-аутом простоя потока, который по умолчанию включён для всех провайдеров, кроме прямого Anthropic API; 0 его выключает. API_TIMEOUT_MS задаёт общий тайм-аут запроса, по умолчанию 600 000 мс (10 минут). Как эти переменные соотносятся с порогом 180/300 секунд из changelog, в документации не описано.

Что раньше менялось для шлюзов: от 2.1.265 до 2.1.296

ВерсияЧто происходит за шлюзомЧто делать
2.1.265–2.1.267400 на каждый запрос: шлюз отклоняет pattern в схеме инструмента ArtifactОбновиться до 2.1.268+ или отключить артефакты
2.1.275400 с Input tag 'advisor_20260301'Обновиться до 2.1.276+ или CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1
2.1.285Окно 1M у поддерживающих моделей за собственным базовым URL/autocompact 200k, если шлюз режет на 200K
2.1.288Появилась CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTSДля шлюзов, отклоняющих structured outputs
2.1.290Исправлены запросы через шлюзы, которые отклоняют beta-заголовок со статусом не 400Обновиться
2.1.296Отчёты #95087 и #101897 (открыты)См. раздел об ошибках 400

Когда чинить нечего: не-Claude модели и функции, выключенные за шлюзом

Часть «неработающего» — не ошибка настройки, а граница маршрута:

  • Не-Claude модели. Anthropic не поддерживает подключение Claude Code к моделям не Claude ни через какой шлюз и не проверяет сторонние шлюзы. DeepSeek, GLM, Kimi, Qwen или локальная модель через ANTHROPIC_BASE_URL могут работать частично, но исправлять расхождения в формате будет некому. OpenRouter гарантирует работу Claude Code только с провайдером Anthropic (Anthropic 1P). У Ollama, по её документации, не полностью поддерживаются встроенный WebSearch и расширенное управление инструментами; нужна модель с поддержкой инструментов и контекст от 64K для крупных репозиториев.
  • Remote Control и голосовой ввод. Обе функции завязаны на аккаунт claude.ai и недоступны, пока активен ключ шлюза. Remote Control к тому же отключён, если ANTHROPIC_BASE_URL указывает не на api.anthropic.com (с версии 2.1.196).
  • Поиск инструментов MCP. На чужом хосте он по умолчанию выключен, и все инструменты MCP загружаются сразу. ENABLE_TOOL_SEARCH=true возвращает его, если шлюз пропускает блоки tool_reference.
  • /fast. Проверка доступности fast mode идёт напрямую на api.anthropic.com и не следует ANTHROPIC_BASE_URL; при закрытом выходе в интернет или ключе шлюза в ANTHROPIC_API_KEY она не проходит. С одним ANTHROPIC_AUTH_TOKEN Claude Code считает fast mode выключенным организацией; обходится через CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1.
  • Облачные сессии и Slack через шлюз не ходят вовсе.
  • Управляемые настройки с forceLoginMethod или forceLoginOrgUUID несовместимы с ключом шлюза. Это решает администратор, а не вы.

Если модели шлюза не видны в /model, это поправимо: CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 заставляет Claude Code запросить список моделей у шлюза при запуске. Отдельно о пропавшей модели в списке — в статье «Fable 5.1 не появляется в Claude Code: причины и решения». Ошибка 529 может прийти и от Anthropic, и от вашего шлюза; что она означает — в материале «Claude 529 overloaded_error: что это значит и как исправить в 2026 году».

Вопросы об ANTHROPIC_BASE_URL в Claude Code

Почему curl к шлюзу работает, а Claude Code нет?

Сначала убедитесь, что Claude Code получает те же значения, что и curl: блок env в settings-файле перекрывает export, а ключ из проектного .claude/settings.json не применяется до подтверждения доверия. Если значения совпадают, остаются три причины, которые короткий curl не ловит: WAF перед шлюзом режет настоящие промпты (403 в HTML), Claude Code не доверяет корпоративному сертификату (NODE_EXTRA_CA_CERTS) или шлюз отклоняет поля полного запроса (400).

Нужно ли обновлять Claude Code до 2.1.299, если через шлюз всё работает?

Не обязательно. Обновление нужно, если ответы обрываются на долгих паузах, сессии падают с automatic compaction failed около 200K токенов или вам важно, чтобы ключ шлюза не уходил в Anthropic. Пользователи канала stable по состоянию на 15 октября 2026 года сидят на 2.1.292 и этих исправлений не получили.

Можно ли через ANTHROPIC_BASE_URL подключить DeepSeek, GLM или локальную модель?

Технически Claude Code отправит запросы на любой Anthropic-совместимый адрес, но Anthropic такой маршрут не поддерживает. Часть функций может не работать, а ошибки формата на стороне модели придётся решать с владельцем шлюза или провайдера. Если основная цель — стабильная работа всех функций, нужен шлюз, за которым стоят модели Claude.

Где взять ключ для ANTHROPIC_AUTH_TOKEN или ANTHROPIC_API_KEY?

Ключ для шлюза выдаёт тот, кто им управляет: команда корпоративного шлюза, личный кабинет OpenRouter, Ollama Cloud (для локальной Ollama подходит строка ollama). Ключ Anthropic API из консоли Anthropic нужен только для прямого подключения к Anthropic; через сторонний шлюз он не работает и, оставленный в ANTHROPIC_API_KEY, только мешает.

Чем ANTHROPIC_BASE_URL отличается от прокси или VPN?

ANTHROPIC_BASE_URL меняет адрес, куда Claude Code отправляет запросы API: туда должен отвечать шлюз в формате Anthropic. Прокси или VPN лишь пропускают трафик к тому же api.anthropic.com. Общее у них одно: и то и другое должно быть задано для процесса Claude Code, а не только для вашего терминала.

Нашли ошибку или столкнулись с проблемой, которой нет в статье? Отправьте адрес статьи и описание на hi@laozhang.ai. Мы проверим и обновим текст.