Codex Router — внешние модели (Anthropic, Kimi, DeepSeek, Grok) прямо в Codex
📂 Исходный код на GitHubНезависимый локальный роутер (MIT), который через один локальный шлюз с изоляцией учётных данных подключает к Codex App и CLI внешние модели — Anthropic, Kimi, DeepSeek, xAI Grok, GitHub Copilot, opencode Go, Command Code, Meta и другие — и вливает их в нативный каталог Codex, сохраняя рабочие профили, настройки и ChatGPT-логин.
Codex — официальный кодинг-агент OpenAI. Он отлично работает с нативными GPT-моделями и ChatGPT-планом, но до недавнего времени «запереть» в нём другие модели было непросто: Codex говорит на проприетарном Responses API и загружает каталог моделей только при старте приложения. Codex Router решает именно эту задачу — это независимый локальный роутер, который добавляет Anthropic, Kimi, DeepSeek, xAI Grok, GitHub Copilot, opencode Go, Command Code, Meta и будущие внешние модели прямиком в нативный каталог Codex App и CLI. Маршрутизированные модели появляются в обычном пикере рядом с GPT.
он не аффилирован с OpenAI, GitHub, Anthropic, Moonshot AI, DeepSeek, OpenRouter, opencode и упомянутым в README проектом opencodex.
Как это работает
Архитектура роутера на удивление проста и состоит из трёх локальных компонентов:
flowchart LR
C["Codex Responses :4202"] --> L1["LiteLLM :4200"]
L1 --> K1["Kimi OAuth :4201"]
L1 --> A1["API keys :4203"]
K1 --> P["External providers"]
A1 --> P
Codex отправляет запросы по Responses API на порт 4202. Далее LiteLLM переводит этот контракт в нативный протокол каждого провайдера — включая OpenAI-совместимые Chat Completions и Anthropic Messages — с сохранением стриминга и форм вызовов инструментов. Все слушатели привязываются к 127.0.0.1.
Перед чтением трафика моделей роутер аутентифицирует вызывающего и передаёт LiteLLM только случайный внутренний ключ. Финальный форвардер отбрасывает этот ключ и подставляет лишь выбранные учётные данные провайдера. Запросы, приходящие из браузера, отклоняются, публичные health-маршруты не раскрывают секретов, а сетевые ошибки санируются.
Установка
Есть три основных способа установки.
Homebrew — если вы уже пользуетесь Homebrew, проще всего взять формулу из официального tap'а:
brew tap duolahypercho/codex-router https://github.com/duolahypercho/codex-router
brew install codex-router
codex-router setup --guided
Первый Homebrew-установка может занять заметно дольше, потому что формула собирает заблокированные Python-зависимости из исходников. Перед удалением формулы нужно отдельно снять пользовательский сервис и управляемый конфиг Codex: codex-router uninstall, затем brew uninstall codex-router.
Guided-установщик для macOS или Linux:
curl -fsSL https://raw.githubusercontent.com/duolahypercho/codex-router/main/install.sh \
| sh -s -- --target codex --guided
Для Windows — PowerShell-версия install.ps1 с параметром -Target codex -Guided.
Через самого агента. README предлагает удобный вариант: вставить в задачу Codex короткий промпт со ссылкой на репозиторий, инструкцией следовать AGENTS.md, сохранять существующие модели и настройки и оставить перезапуск приложения человеку. Если совместимая аутентификация уже существует, агент может выполнить всё, кроме финального перезапуска.
Требования: Codex App или CLI, Node.js 22.19+ (рекомендуется 24 LTS), uv или Python 3.10+ с venv, а также Git для управляемого одно-командного чекаута и отката. На Linux роутер поддерживает Codex CLI.
Установщик не делает платных тестовых запросов, если только явно не выбран флаг --smoke-test. Каждый API-ключ вводится через скрытый терминальный промпт с отключённым эхом. Защищённые файлы получают права 600 на POSIX и ACL только для текущего пользователя на Windows.
Какие модели и провайдеры доступны
Каталог Codex «знает про учётные данные»: он включает модели только от включённых внешних провайдеров с сохранённым ключом или валидной OAuth-сессией. Нативные GPT-модели появляются только после подтверждения codex login status.
Из коробки в реестре уже есть:
- Kimi — K2.7 Coding Highspeed, Kimi K3. Доступны два разных пути: OAuth-сессия официального Kimi Code CLI (
kimi-oauth/...) и отдельно биллируемый API-ключ Kimi Platform (kimi-api/...). Это отдельные системы аутентификации и биллинга, поэтому записи намеренно сосуществуют. - DeepSeek — V4 Flash и V4 Pro по API-ключу.
- xAI Grok 4.5 — OAuth переиспользует официальный креденшнл CLI
~/.grok/auth.jsonи отправляет его только в документированный прокси Grok CLI. На этом пути роутер также подключает хостинговыеweb_searchиx_searchинструменты — ту же агентную поверхность, что использует Grok Build. - Anthropic — Claude Opus 4.8 через отдельно биллируемый API-ключ.
- GitHub Copilot — маршрутизирует модели аккаунта, которые явно поддерживают Responses API, стриминг и вызовы инструментов. Каталог зависит от тарифа и политики, поэтому у провайдера нет жёстко зашитых моделей: нужно сохранить fine-grained GitHub PAT с правом Copilot Requests, а затем курировать каталог через
./bin/curate-models github-copilot. Обычные токеныghp_не поддерживаются. - opencode Go и Zen — одним сохранённым ключом покрываются плоский Go-подписка (
https://opencode.ai/zen/go/v1) и pay-per-use Zen-эндпоинт. Внутри каталог разбит по протоколу:opencode-go(Chat Completions),opencode-go-messages(Anthropic Messages),opencode-go-responses(Responses) иopencode-zen. - Command Code — официальный Provider API (
https://api.commandcode.ai/provider/v1) для ChatGPT-совместимых и Messages-моделей. Важный нюанс: требуется тариф Provider или выше; Go-план получит отказ «Your Go plan doesn't include API access» — это проблема прав, а не учётных данных. Два пути аутентификации: OAuth черезcommand-code login(роутер только читает~/.commandcode/auth.json) или сохранённый ключ из Command Code Studio. - Meta — Muse Spark 1.2, Contributor-тир и 1.1 по Responses-протоколу, с контекстом в 1M токенов и effort'ами от minimal до xhigh.
- Ollama Cloud — GLM-5.2, Kimi K2.7, MiniMax M3, DeepSeek V4 через аккаунт ollama.com под отдельной квотой.
- Qwen / Alibaba Model Studio — Qwen3.8 Max, 3.7 Max/Plus, 3.6 Flash и кросс-вендорные DeepSeek/GLM через план-ключ Model Studio (префикс
sk-sp-). Ключ-only: бесплатный OAuth-тир Alibaba отключила 2026-04-15. - Каталог-only провайдеры — Groq, OpenRouter, Together AI, Fireworks, Cerebras, Mistral, NVIDIA NIM, SiliconFlow, Hugging Face Router, Google Gemini API, Chutes, GitHub Copilot. Моделей из коробки нет — каталоги слишком часто меняются, поэтому записи регистрируются для маршрутизации, а модели добавляются локальной курацией.
Для API-ключевых провайдеров живую выдачу можно курировать интерактивно: ./bin/curate-models PROVIDER спишет модели, которые провайдер сейчас рекламирует и которых нет в реестре, даст выключить лишние и сохранит их как пользовательские модели в защищённом состоянии. Курация спрашивает про размер контекста, поддержку изображений и reasoning-эффекты, поэтому новые модели получают переключатель effort'ов в пикере. Форма --models id1,id2 — аддитивная, а --remove id1,id2 — удаляет записи.
Лимиты квот без единого balance-эндпоинта
Отдельно стоит отметить, как роутер показывает лимиты. Большинство OpenAI-совместимых сервисов сообщают оставшееся окно вызывающего в каждом ответе через заголовки x-ratelimit-*, а Anthropic — под префиксом anthropic-ratelimit-*
Vision-мост: изображения для текстовых моделей
Большинство внешних кодинг-моделей не умеют «видеть». Вставьте скриншот в DeepSeek V4 Pro или GLM — и Codex либо откажет во вложении, либо провайдер отклонит ход. Vision-мост решает это на уровне роутера: он отправляет вставленное изображение в vision-модель, которую вы уже включили, и подставляет ответ в ход как текст ещё до того, как текстовую модель увидит изображение. Эта функция включена по умолчанию — вставили и готово.
Что текстовая модель получает — это доказательства, а не впечатление: краткое резюме, дословную расшифровку каждого читаемого слова, порядок разметки, значения таблиц и диаграмм, а также явный список того, что было слишком мелким или размытым для чтения. Последняя секция не даёт модели уверенно отвечать про деталь, которую никто не разглядел.
Есть и бесплатный офлайн-путь: если все ваши провайдеры текстовые (ситуация «только DeepSeek»), можно направить мост на маленькую локальную vision-модель через Ollama, llama.cpp или LM Studio. Это ничего не стоит, изображение не покидает компьютер и работает офлайн. Мост даже бенчмаркает установленные модели по их способности дословно читать текст — node src/vision-benchmark.mjs сверяет коды, числа и даты с известным изображением-счётом. Капшен-модели, которые «правдоподобно описывают и выдумывают цифры», никогда не окажутся наверху списка.
Локальные модели в Codex
Модели, запущенные на этой машине, могут появляться в пикере Codex как любой другой провайдер, но помечены как экспериментальные — и это звание заслужено. Использовать локальную модель как vision-ридер надежно, а вот как чат-модель — нет. Была замечена модель, которая проходила проверку способностей и проваливала идентичную проверку через несколько минут.
Создатели дают конкретные практические предупреждения. Каждая модель рекламируется для Codex как 32K, но сам Codex тратит около 20K токенов на инструкции и определения инструментов — остаётся примерно 12K на ваш код. Ещё важнее: Codex ведёт каждый ход через вызовы инструментов, поэтому модель без tool-calling провалится на первом же запросе — публикуются только те модели, которые Ollama сообщает как tool-способные.
файн-тюн qwen2.5-coder:7b реально запускал команды и создавал файлы, а вот llama3.2:3b в реальном промпте Codex отвечал про собственный системный промпт вместо задачи. Практический вывод — для агентной работы держитесь ближе к 7B, а мелкие модели оставьте для vision-моста. К тому же маленькие инструменты-модели могут быть медленными: холодная 3B-модель на первом ходу заняла больше минуты против секунд у хостинговой.
Скиллы для пользовательских моделей
Пользовательские модели (всё, что маршрутизируется через codex-router вместо встроенного OpenAI-бэкенда) получают полный нативный инструментарий Codex App — потоки, автомации, встроенный браузер, computer use — в уплощённом виде, который принимает провайдер. Слабые модели иногда требуют подсказок, как правильно вызывать эти инструменты, поэтому установщик добавляет небольшой набор скиллов в ~/.codex/skills/:
codex-router— ориентация: как работают уплощённыеcodex_app__/mcp__инструменты и когда читать сопутствующие скиллы;codex-app-threads— точные сигнатуры аргументов для операций с потоками;codex-in-app-browser— управление встроенным браузером черезmcp__node_repl__js;codex-computer-use— управление локальными приложениями через рантайм@oai/sky.
Скиллы находятся в skills/ этого репозитория. bin/install копирует их в ~/.codex/skills/, а bin/uninstall удаляет ровно их — никогда не трогая скилл, написанный вами. Коллизия имён с вашим собственным скиллом пропускается, а не перезаписывается.
Использование без OpenAI-логина
Переключатель Use without OpenAI login в трее выбирает управляемого кастомного провайдера для новых сессий Codex. В этом режиме включённые внешние модели используют OAuth-сессию или API-ключ своего провайдера и не требуют логина ChatGPT или OpenAI API. Сначала нужно подключить и включить хотя бы один внешний провайдер.
В этом режиме выбор модели происходит в собственном пикере Codex: каталог публикует внешние модели с их настоящими именами. Некоторые поверхности (в основном меню моделей в ChatGPT-десктопе) показывают только слаги, прошедшие серверный allowlist нативных слагов, поэтому логин-фри каталоги перепубликовывают внешние модели под нативными GPT-слагами, записывая соответствие в native-aliases.json. Выключение переключателя восстанавливает исходные значения model и model_provider
Панели управления: macOS-трей и кроссплатформенный Tauri
На macOS ./bin/model-router-tray собирает и открывает нативный панель в меню-баре: здоровье Codex, подробное использование активного провайдера, семидневный обзор каждого настроенного провайдера и автоматически применяемые элементы управления. При первом запуске приложение регистрирует себя как пункт входа в систему и открывается автоматически после перезагрузки. Оно также кладёт оверлей в стиле Dynamic Island в верхней части активного дисплея с данными об использовании по наведению.
Windows и Linux используют общий Tauri-компаньон из apps/desktop с тем же функционалом: фильтрация по подключённым провайдерам, нормализованные карточки квот, ежедневный график токенов, безопасная настройка провайдеров и анимированный статус активности. На Linux под X11 есть плавающая «таблетка» активности, а на Wayland — нет, потому что композитор владеет абсолютным размещением окон.
Обновление и откат
Для управляемого Git-чекаута обновление и откат выполняются одной командой:
./bin/model-router codex update
./bin/model-router codex rollback
Обновление требует чекаута main без правок в отслеживаемых файлах и распознанного origin репозитория. Неотслеживаемые файлы не блокируют обновление, а --force отбрасывает отслеживаемые правки, не удаляя неотслеживаемые. Предыдущая ревизия сохраняется как локальный rollback-ref, а неудачная установка восстанавливает предыдущую исходную ревизию. После обновления или отката рекомендуется выполнить doctor --fix, чтобы сгенерированный конфиг и сервис совпадали с исходной ревизией.
Тегированные релизы содержат .tar.gz и .zip-архивы исходников, SHA-256-суммы и GitHub-аттестации provenance сборки. Проект распространяется по лицензии MIT (см. LICENSE и NOTICE.md).
Итог
Codex Router — это зрелый и продуманный инструмент, который расширяет Agency-границу Codex: он снимает жёсткую привязку к нативным GPT-моделям и позволяет использовать любые современные модели в привычном интерфейсе и рабочем процессе Codex, сохраняя при этом безопасность учётных данных и существующую настройку. Особенно ценны vision-мост для текстовых моделей и изоляция учётных данных через скрытые промпты и файлы с правами 600. Для всех, кто подписан на Kimi, DeepSeek, Grok или Anthropic и хочет пользоваться ими внутри Codex, это, вероятно, самый комфортный и безопасный способ прямо сейчас.