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

> Claude Code игнорирует ANTHROPIC_BASE_URL или падает с 401/400? /status и один curl показывают, где поломка; версия 2.1.299 исправила четыре ошибки шлюзов.

- Source: https://www.aifreeapi.com/ru/posts/claude-code-anthropic-base-url-not-working
- Language: ru
- Published: 2026-10-15
- Updated: 2026-10-15
- Publisher: AI Free API (https://www.aifreeapi.com)

Когда `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** важны две строки ([документация по шлюзам](https://code.claude.com/docs/ru/llm-gateway-connect#check-for-an-existing-configuration)):

- `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](https://www.aifreeapi.com/posts/ru/claude-code-anthropic-base-url-not-working/img/two-checks-flow.webp)

Вторая проверка — однотокенный запрос к шлюзу в обход 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](https://code.claude.com/docs/ru/llm-gateway-connect#set-in-a-settings-file). Если 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 | Так задумано при чужом хосте и ключе шлюза | Чинить нечего, см. раздел о границах |

Строки из официальной [таблицы ошибок шлюза](https://code.claude.com/docs/ru/llm-gateway-connect#troubleshoot-gateway-errors) приведены с исходными текстами ошибок, остальные — по [changelog Claude Code](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md). Ниже — что проверять в каждом случае подробнее.

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

Одного `ANTHROPIC_BASE_URL` мало: базовый URL — это адрес, а не учётные данные. Если задан только он, запросы пойдут через шлюз, но [активной учётной записью останется сохранённый вход claude.ai](https://code.claude.com/docs/ru/llm-gateway#subscriptions-and-gateways), а с ним и лимиты и оплата подписки. Если вы переходите на шлюз из-за лимитов подписки, без ключа шлюза ничего не изменится; как устроены сами лимиты, разобрано в статье «[Лимиты Claude Code: как посмотреть, понять ошибку и продолжить](/ru/posts/claude-code-rate-limit)».

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

- `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 такой конфликт, [по его документации](https://openrouter.ai/docs/cookbook/coding-agents/claude-code-integration), выглядит как ошибки «модель не найдена»; после `/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](/ru/posts/claude-code-oauth-error)».

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

Переменная окружения действует только в том процессе, где её задали, и в процессах, запущенных из него. Отсюда несколько типичных расхождений ([документация](https://code.claude.com/docs/ru/llm-gateway-connect#set-as-shell-environment-variables)):

- `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-заголовок ([документация](https://code.claude.com/docs/ru/llm-gateway-connect#how-the-credential-variable-maps-to-a-header)):

| Переменная | Заголовок |
|---|---|
| `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](https://openrouter.ai/docs/cookbook/coding-agents/claude-code-integration) и [Ollama](https://docs.ollama.com/integrations/claude-code). Для 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`. Что делать, зависит от текста ошибки ([таблица ошибок шлюза](https://code.claude.com/docs/ru/llm-gateway-connect#troubleshoot-gateway-errors)):

- **`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` есть две детали из [справочника переменных](https://code.claude.com/docs/ru/env-vars). Значение пишется целым числом: `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](https://github.com/anthropics/claude-code/issues/95087) описано, что первый запрос сессии к собственному базовому URL несёт блоки `tool_addition`, строгий шлюз отвечает `400`, а Claude Code молча повторяет запрос без них; в комментарии от 13 октября 2026 года на версии 2.1.296 автор пишет о шлюзе, где повтор не сработал и диалог стал непригоден. В [#101897](https://github.com/anthropics/claude-code/issues/101897) после обновления с 2.1.269 до 2.1.296 сессии на собственной модели падают с `400` и формулировкой `maximum context length`, а сжатие контекста не помогает; автору помог откат на 2.1.269. Как откатить версию, описано в статье «[Changelog Claude Code: что изменилось и как откатить версию](/ru/posts/claude-code-changelog)».

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

Версия 2.1.299 опубликована в npm 14 октября 2026 года в 00:23 UTC (03:23 по Москве), следом в тот же день вышла 2.1.300. В [changelog](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md) к 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 по [документации по установке](https://code.claude.com/docs/ru/setup) отстаёт примерно на неделю и пропускает версии с крупными регрессиями. Из номеров версий следует, что у пользователей 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 и запрос управляемых настроек](https://www.aifreeapi.com/posts/ru/claude-code-anthropic-base-url-not-working/img/version-2-1-299-channels.webp)

Проверьте свою версию через `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`, чтобы трафик не уходил мимо шлюза, автообновление тоже выключено, и обновляться придётся вручную.

Если обновиться пока нельзя, а модель долго молчит, посмотрите на две переменные из [справочника](https://code.claude.com/docs/ru/env-vars). `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 [не поддерживает](https://code.claude.com/docs/ru/llm-gateway) подключение 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: причины и решения](/ru/posts/claude-code-fable-5-1-not-available)». Ошибка 529 может прийти и от Anthropic, и от вашего шлюза; что она означает — в материале «[Claude 529 overloaded_error: что это значит и как исправить в 2026 году](/ru/posts/claude-529-overloaded-error)».

## Вопросы об 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, а не только для вашего терминала.
