Когда ANTHROPIC_BASE_URL задан, а Claude Code всё равно открывает вход в claude.ai, ходит мимо шлюза или падает с ошибкой, сломан один из семи слоёв: переменная не дошла до процесса, ключ лежит не в той переменной, адрес шлюза записан не в той форме, шлюз отклоняет поля запроса, в вашей версии Claude Code есть ошибка, интерфейс вообще не читает эту переменную или сам маршрут не поддерживается Anthropic.
Какой именно слой, показывают две проверки:
/statusвнутри Claude Code. Есть ли строкаAnthropic base URLи чей ключ используется:Auth tokenилиAPI key(ключ шлюза) либоLogin methodс аккаунтом claude.ai (ключ шлюза до сессии не дошёл).- Один запрос 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 использует сохранённый вход.

Вторая проверка — однотокенный запрос к шлюзу в обход Claude Code. Команда из официальной документации читает переменные текущего терминала:
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 при рабочем curl | Claude Code не доверяет корпоративному сертификату | NODE_EXTRA_CA_CERTS с путём к CA |
400 с Extra inputs are not permitted или context_management | Шлюз или модель за ним не принимает поля Claude Code | CLAUDE_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или$PROFILEPowerShell, а надёжнее — в блокenvфайла~/.claude/settings.json(в Windows —%USERPROFILE%\.claude\settings.json).- Редактор, запущенный из Dock или меню «Пуск», не видит переменных, выставленных в терминале.
- Фоновые агенты получают переменные, заданные только в shell, ненадёжно. Для шлюза, через который они обязаны ходить, официальная рекомендация — settings-файл.
- Нативный установщик не читает файлы
.envв проекте: так прямо сказано в инструкции OpenRouter.
То же правило объясняет случаи «не работает через прокси»: прокси, заданный переменными в одном терминале, не действует на процессы, запущенные иначе. При этом прокси и шлюз — разные вещи: прокси только пропускает трафик к api.anthropic.com, а шлюз сам принимает запросы API вместо Anthropic, и именно его адрес пишут в ANTHROPIC_BASE_URL.
Блок env выглядит так:
{
"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 в терминале работает:
{
"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_TOKEN | Authorization: Bearer … |
ANTHROPIC_API_KEY | x-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 | Ключ |
|---|---|---|
| OpenRouter | https://openrouter.ai/api | ANTHROPIC_AUTH_TOKEN, ANTHROPIC_API_KEY="" |
| Ollama на своём компьютере | http://localhost:11434 | ANTHROPIC_AUTH_TOKEN=ollama, ANTHROPIC_API_KEY="" |
| Ollama Cloud | https://ollama.com | ANTHROPIC_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 и условиями реальной сессии:
- Другой адрес или ключ. Значение из блока
envsettings-файла перекрывает 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.
{
"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:
- Ответ обрывался после 180 секунд без данных. Потоки через собственный базовый URL прерывались, если три минуты ничего не приходило. Теперь порог — 300 секунд. Это заметно на медленных шлюзах и локальных моделях с долгими паузами.
Prompt is too long · automatic compaction failedоколо 200K токенов. Сессии с моделью под именем из шлюза завершались этой ошибкой вместо того, чтобы отправить запрос.- Ключ шлюза уходил в Anthropic. Служебные запросы к Anthropic (флаги функций, запуск, fast mode, профиль, отзывы) несли API-ключ, настроенный для стороннего шлюза. Настоящие ключи Anthropic API по-прежнему отправляются.
- То же для управляемых настроек. Запрос серверных управляемых настроек нёс ключ шлюза, если
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 или новее, не объявлено.

Проверьте свою версию через 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.267 | 400 на каждый запрос: шлюз отклоняет pattern в схеме инструмента Artifact | Обновиться до 2.1.268+ или отключить артефакты |
| 2.1.275 | 400 с 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_TOKENClaude 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, а не только для вашего терминала.



