Claude Code с OpenRouter и DeepSeek нужно начинать не с копирования команды, а с выбора активного маршрута. OpenRouter нужен, когда именно OpenRouter владеет gateway, каталогом моделей, маршрутизацией провайдеров и журналом активности. Прямой DeepSeek нужен, когда запрос должен уходить в Anthropic-compatible API DeepSeek, с токеном DeepSeek, model ID DeepSeek и активностью в интерфейсах DeepSeek. Прокси или router-проект стоит считать экспериментом, пока не доказаны форма API, логи, стоимость и путь данных.
| Маршрут | Когда выбирать | Что должно совпасть до теста |
|---|---|---|
| OpenRouter | Нужны gateway, provider routing, каталог моделей и activity log OpenRouter. | Base URL OpenRouter, token OpenRouter, модель из текущего каталога OpenRouter и активность в OpenRouter. |
| DeepSeek direct | Нужен прямой Anthropic-compatible endpoint DeepSeek. | Base URL DeepSeek, token DeepSeek, model ID DeepSeek и активность на стороне DeepSeek. |
| Proxy/router | Проверяется сторонний adapter, локальный gateway или командный роутер. | Один владелец объясняет base URL, token, mapping модели, логи, обработку данных и стоимость. |
До первой реальной задачи в репозитории остановитесь, если /status, provider logs и маленький canary prompt не указывают на одного владельца. Один тест означает один base URL, одного владельца ключа и одного владельца модели. Если они расходятся, сначала откатите окружение.
Сначала маршрут, потом переменные
Типовая поломка выглядит как ошибка модели, но начинается с смешанной собственности. Base URL может указывать на OpenRouter, token быть взят у DeepSeek, а старая авторизация Anthropic все еще выигрывать в текущей сессии. Или прокси принимает HTTP-запрос, но не сохраняет форму Anthropic API, которую ожидает Claude Code. В таких случаях новый model ID только маскирует причину.
Граница ответственности на 2026-07-03 такая:
| Владелец | За что отвечает | Что не доказывает |
|---|---|---|
| Anthropic Claude Code docs | Поведение клиента, имена переменных, settings, /status, gateway boundary. | Что каждый сторонний provider или proxy поддержан Anthropic. |
| OpenRouter docs | Маршрут Claude Code через OpenRouter, token, base URL, имена моделей, provider activity. | Что прямой DeepSeek ведет себя так же, как OpenRouter routing. |
| DeepSeek docs | Anthropic-compatible endpoint, DeepSeek model IDs, mapping и caveats. | Что активен OpenRouter route или сторонний proxy надежен. |
| Proxy/router project | Собственный adapter, логи, data path, cost и compatibility claims. | Официальную поддержку Claude Code, provider price или tool behavior. |
OpenRouter cookbook полезен, когда OpenRouter является gateway owner. Документация DeepSeek полезна, когда владельцем является прямой DeepSeek endpoint. Документация Anthropic остается границей клиента Claude Code. Эти источники дополняют друг друга, но не могут заменять чужую ответственность.
Уберите конфликтующие credentials

Перед настройкой проверьте текущий shell. Не печатайте секреты, достаточно понять, какая переменная вообще установлена:
test -n "$ANTHROPIC_AUTH_TOKEN" && echo "ANTHROPIC_AUTH_TOKEN is set"
test -n "$ANTHROPIC_API_KEY" && echo "ANTHROPIC_API_KEY is set"
test -n "$ANTHROPIC_BASE_URL" && echo "ANTHROPIC_BASE_URL is set"
test -n "$ANTHROPIC_MODEL" && echo "ANTHROPIC_MODEL is set"
Неожиданный вывод надо разобрать до запуска Claude Code. Источником может быть shell profile, loader для .env, IDE terminal, devcontainer, CI secret или .claude/settings.local.json. Накладывать новый export поверх старого удобно только на минуту, а потом такая сессия становится недоказуемой.
Для чистого теста:
unset ANTHROPIC_AUTH_TOKEN
unset ANTHROPIC_API_KEY
unset ANTHROPIC_BASE_URL
unset ANTHROPIC_MODEL
Запускайте Claude Code из того же shell, который проверили. Если терминал, IDE и task runner стартуют процессы по-разному, проверяйте каждый путь отдельно.
Настройка OpenRouter
OpenRouter-ветка подходит, когда именно OpenRouter должен владеть gateway. Token приходит из OpenRouter, base URL указывает на OpenRouter, model selector берется из актуального каталога OpenRouter, а доказательство запроса появляется в OpenRouter activity.
Минимальный shell-test:
export ANTHROPIC_BASE_URL="https://openrouter.ai/api"
export ANTHROPIC_AUTH_TOKEN="$OPENROUTER_API_KEY"
unset ANTHROPIC_API_KEY
claude
/status
В документах и shared scripts используйте placeholder, а не реальный ключ. Смысл не в вечном model name, а в том, что ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN и модель относятся к одной OpenRouter-ветке.
Первое доказательство должно быть маленьким. Откройте новую сессию Claude Code, выполните /status, задайте короткий canary без изменения файлов и проверьте matching request в OpenRouter activity. Если локальный статус и activity не совпадают, откатите route и соберите его заново от одного owner.
Настройка прямого DeepSeek
DeepSeek direct выбирают, когда Claude Code должен отправлять Anthropic-compatible requests напрямую в DeepSeek. Здесь DeepSeek владеет endpoint, token, model ID, compatibility caveats и provider-side activity.
Пример shell-scoped теста:
export ANTHROPIC_BASE_URL="https://api.deepseek.com/anthropic"
export ANTHROPIC_AUTH_TOKEN="$DEEPSEEK_API_KEY"
export ANTHROPIC_MODEL="deepseek-v4-pro[1m]"
claude
/status
В документации DeepSeek также есть coding-agent варианты вроде deepseek-v4-flash. Не закрепляйте model ID как вечный. Availability, suffix, web-search behavior, mapping и price меняются; перед командным runbook их нужно сверить снова.
OpenRouter logs не доказывают прямой DeepSeek. Они доказывают OpenRouter-owned route, который может использовать DeepSeek provider. Для direct route нужны DeepSeek endpoint, DeepSeek model ID и DeepSeek activity.
settings.local вместо плавающего shell
Shell exports удобны для одного canary, но плохо переживают перерывы. Для повторяемых локальных экспериментов используйте ignored local settings, чтобы маршрут был виден, но секреты не попадали в commit.
DeepSeek direct может выглядеть так:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
"ANTHROPIC_AUTH_TOKEN": "$DEEPSEEK_API_KEY",
"ANTHROPIC_MODEL": "deepseek-v4-flash"
}
}
OpenRouter сохраняет ту же логику владельца:
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "$OPENROUTER_API_KEY",
"ANTHROPIC_MODEL": "openrouter-model-id-from-current-docs"
}
}
Сначала убедитесь, что .claude/settings.local.json игнорируется. Shared project settings не должны содержать provider tokens, private base URLs или личный выбор провайдера. Командная настройка описывает поведение, локальная настройка хранит частный route.
Проверка перед реальной работой

Проверка является частью настройки. Backend switch безопасен только тогда, когда route, credentials, model и provider evidence говорят одно и то же.
| Шаг | Что проверить | Проходной критерий |
|---|---|---|
| 1. Minimal prompt | Крошечный prompt без изменений в репозитории. | Нет auth/tool errors. |
2. /status | Какой account, route и model видит Claude Code. | Совпадает с выбранным owner. |
| 3. Environment | Base URL, token owner, model variable. | Оставлены только переменные целевого route. |
| 4. Provider activity | OpenRouter или DeepSeek dashboard/log. | Matching request появился у правильного provider owner. |
| 5. Read-only repo action | Прочитать config, объяснить scripts, выполнить harmless command. | Поведение нормальное, files не меняются. |
| 6. Rollback | Очистить env vars и перезапустить. | Сессия возвращается к известному route. |
Не пропускайте provider activity, если причина перехода связана со стоимостью, доступностью или моделью. /status показывает точку зрения клиента; provider activity показывает, кто реально видел запрос.
Первая ошибка: классификация

Когда первый run падает, не добавляйте сразу новые настройки. Сначала классифицируйте ownership mismatch.
| Симптом | Вероятная причина | Первое действие |
|---|---|---|
401 или 403 | Token не принадлежит base URL owner, ключ истек, другая переменная выигрывает. | Очистить route vars, установить одного token owner, перезапустить. |
404, model not found, model mismatch | Model ID из другой ветки или устаревшего каталога. | Взять текущий ID у route owner, затем проверить provider activity. |
| Provider dashboard пуст | Запрос не дошел до ожидаемого владельца. | Проверить ANTHROPIC_BASE_URL, shell source, старую авторизацию или proxy. |
| Claude Code зависает или tools странные | Proxy частично совместим, headers/tool calls не сохраняются. | Вернуться к документированному route, proxy тестировать отдельно. |
| Cost появляется не там | Route owner и billing owner перепутаны. | Сверить /status и activity до следующих задач. |
| Free/unlimited route падает | Claim не подтвержден текущим provider evidence. | Считать обещание непроверенным, пока route, model и limits не доказаны. |
Быстрый recovery:
unset ANTHROPIC_AUTH_TOKEN
unset ANTHROPIC_API_KEY
unset ANTHROPIC_BASE_URL
unset ANTHROPIC_MODEL
claude
/status
После возврата к известному состоянию добавляйте только одну ветку. OpenRouter failure разбирается внутри OpenRouter base URL, token, model и activity. DeepSeek failure разбирается внутри DeepSeek endpoint, token, model ID и activity. Смешанный фикс обычно ломает доказуемость.
Стоимость, данные и стоп-правила
Стоимость не должна быть первой обещанной выгодой. Первая выгодa — доказуемый route. Prices, free tiers, provider priority, web-search charges, model availability и rate limits меняются быстрее, чем team runbook. Любое утверждение вроде free forever, unlimited или works with any model требует текущего доказательства от owner.
| Стоп-правило | Почему важно |
|---|---|
| Не отправлять sensitive code через непроверенный proxy | Неясно, кто логирует prompts, files и tool output. |
| Не верить cost claim без provider proof | OpenRouter и DeepSeek могут изменить price, availability или provider path. |
| Не называть non-Claude route официальной поддержкой Anthropic | Anthropic отвечает за клиентскую boundary, не за каждый gateway result. |
| Не commit-ить tokens и private base URLs | Shared settings не являются хранилищем секретов. |
| Не запускать real edits до provider activity proof | Агент должен иметь rollback path до изменения файлов. |
Если задача на самом деле про выбор gateway, сначала сравнивайте gateway routes. Если задача про установку CLI, начните с install path. Если DeepSeek нужен в другом продукте, не переносите тот product route в Claude Code settings.
Часто задаваемые вопросы
Можно ли использовать Claude Code с OpenRouter и DeepSeek?
Да, но не как один смешанный route. Одна сессия должна принадлежать OpenRouter, прямому DeepSeek или proxy owner. Base URL, token, model и evidence обязаны совпадать.
Что лучше: DeepSeek через OpenRouter или прямой DeepSeek?
OpenRouter подходит, когда нужны provider routing, каталог моделей, activity dashboard и gateway behavior OpenRouter. DeepSeek direct подходит, когда нужны Anthropic-compatible endpoint DeepSeek, DeepSeek model IDs и DeepSeek-side activity. Лучший route тот, который можно доказать для вашего repo, cost boundary и support owner.
Где хранить настройки Claude Code OpenRouter или DeepSeek?
Для canary используйте shell variables. Для повторяемого локального эксперимента используйте ignored .claude/settings.local.json. Не храните tokens, private base URLs и личные routes в shared settings.
Что доказывает /status?
Это первый client-side check. Он показывает, что Claude Code считает активным, но не доказывает provider-side route. Перед реальной работой добавьте environment check и activity в OpenRouter или DeepSeek.
Можно ли доверять бесплатной или unlimited route?
Только при текущем proof от provider owner. Free tier, unlimited claim, priority и pricing являются volatile facts. Для командной инструкции указывайте дату проверки, owner и rollback path.
Почему model name постоянно падает?
Model ID может принадлежать другой ветке. OpenRouter model name, DeepSeek direct model ID и Anthropic model alias не взаимозаменяемы. Очистите route, выберите одного owner и сверяйтесь с его текущей документацией.
