EnglishРусский Map

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 звёзд).