claude-code-router
- title
- claude-code-router
- type
- toolbox
- summary
- Маршрутизатор уровня запросов для работы Claude Code со сторонними провайдерами моделей и слотами под разные задачи
- tags
- typescript, claude-code, llm, api-gateway
- language
- TypeScript
- license
- MIT
- created
- 2026-05-13
- updated
- 2026-09-13
- lang
- ru
- translation_of
- claude-code-router
- source_updated
- 2026-09-13
- translated
- 2026-09-14
- translator
- lllm/antigravity/gemini-3.7-flash-medium
Claude Code Router (ccr) - маршрутизатор уровня запросов, работающий между Claude Code и одним или несколькими провайдерами моделей. Сам бинарник Claude Code остаётся без изменений; ccr перехватывает API-вызовы, применяет таблицу маршрутизации, трансформирует запросы и ответы под конкретного провайдера и пересылает их. Интерфейс Anthropic, модели чьи угодно.
Возможности
- Поддержка нескольких провайдеров - OpenRouter, DeepSeek, Gemini, Ollama, Volcengine, SiliconFlow, ModelScope, DashScope, AIHubMix, а также любые совместимые с OpenAI эндпоинты.
- Правила маршрутизации - слоты
default,background,think,longContext,image,webSearchсопоставляются с паройprovider,model, поэтому запросы разных типов уходят на разные модели. - Трансформеры - модификация запросов и ответов под конкретных провайдеров (в поставку входят трансформеры
openrouter,deepseek,gemini,enhancetool,maxtoken,reasoning,tooluse; можно подключать новые). - Динамическое переключение - слеш-команда
/modelпрямо из Claude Code меняет маршрут по умолчанию на лету, аccr modelделает то же самое из отдельного терминала. - CLI -
ccr code,ccr model,ccr status,ccr logs,ccr restart. - Интеграция с GitHub Actions - неинтерактивный режим (
NON_INTERACTIVE_MODE: true) выставляетCI=true,FORCE_COLOR=0и настраивает работу со stdin, чтобы Claude Code мог запускаться в workflow. - Интерполяция переменных окружения -
"$OPENAI_API_KEY"/"${GEMINI_API_KEY}"вconfig.json, чтобы не хранить секреты в файле. - Система плагинов - достаточно положить TypeScript-файл в директорию трансформеров, и ccr загрузит его при перезапуске.
Как это устроено
config.json (по пути ~/.claude-code-router/config.json) объявляет провайдеров и роутер. У каждого провайдера есть name, api_base_url, api_key, models и опциональный transformer. Секция Router задаёт значения по умолчанию:
{
"Providers": [
{
"name": "deepseek",
"api_base_url": "https://api.deepseek.com/chat/completions",
"api_key": "$DEEPSEEK_API_KEY",
"models": ["deepseek-chat", "deepseek-reasoner"],
"transformer": {
"use": ["deepseek"],
"deepseek-chat": { "use": ["tooluse"] }
}
},
{
"name": "ollama",
"api_base_url": "http://localhost:11434/v1/chat/completions",
"api_key": "ollama",
"models": ["qwen2.5-coder:latest"]
}
],
"Router": {
"default": "deepseek,deepseek-chat",
"background": "ollama,qwen2.5-coder:latest",
"think": "deepseek,deepseek-reasoner"
}
}
Два уровня логирования: серверные логи в формате pino в ~/.claude-code-router/logs/ccr-*.log (события HTTP / API) и отдельный claude-code-router.log для решений маршрутизации и событий бизнес-логики. Переменная APIKEY включает проверку общего секрета в заголовке Authorization / x-api-key; если она не задана, HOST принудительно выставляется в 127.0.0.1, чтобы неавторизованный демон ни при каких условиях не слушал внешнюю сеть.
Установка
npm install -g @anthropic-ai/claude-code
npm install -g @musistudio/claude-code-router
Затем нужно направить Claude Code на ccr (настройка переменных окружения подробно описана в документации проекта).
Место в экосистеме
CCR - это аналог cc-mirror на уровне запросов: цель та же (Claude Code на моделях сторонних провайдеров), механизм другой. CC-Mirror клонирует установку под каждого провайдера; ccr оставляет одну установку и маршрутизирует обращения в момент запроса. В обоих проектах есть интеграция с ccrouter, поэтому варианты cc-mirror могут использовать ccr как бэкенд. Проект cursor-bridge находится на противоположном конце того же семейства: никакой конфигурации, без демона, один бэкенд и процесс, который живёт и умирает вместе с терминалом.
Концептуально это llm-api-routing-layer - той же природы, что Vercel AI Gateway, Helicone, LiteLLM, - только upstream-клиентом выступает конкретно Claude Code, а трансформеры знают формат вызова инструментов Claude Code. 33k звёзд делают проект самым популярным LLM-шлюзом, заточенным под Claude Code.
Ограничения
- Конфигурация правится вручную в JSON - параметров много, и легко ошибиться в структуре.
- Качество вызова инструментов (tool use) у разных провайдеров неравномерное; трансформеры сглаживают явные нестыковки, но специфические особенности моделей остаются.
- Маршрутизация ломает кэш промптов. Состояние KV привязано к конкретной модели и не переносится между ними, поэтому переключение через
/modelили слот, отправляющий запросыthinkна другую модель, заново заполняет контекст всей сессии по ценам без кэширования - см. prompt-caching-in-agents. В portal-shunt-token-routing маршрутизация устроена по задачам: объёмные чтения уходят отдельными вызовами, поэтому кэш основной сессии сохраняется. - Один экземпляр ccr по умолчанию однопользовательский - механизм
APIKEYдаёт лишь базовую защиту, а не полноценную многопользовательскую авторизацию. - Проект спонсируется Z.ai (промо-баннер GLM-CODING-PLAN висит прямо вверху README); их заинтересованность в развитии ccr носит структурный, а не контрактный характер.
Репозиторий: https://github.com/musistudio/claude-code-router (MIT, 33.8k звёзд).