pimenov.ai

Лимиты ChatGPT Pro закончились: как я подключил в Codex DeepSeek, Kimi и GLM за $10 в месяц

Лимиты ChatGPT Pro закончились. Как я подключил в Codex DeepSeek, Kimi и GLM через Codex Router и OpenCode Go за $10 в месяц вместо второй подписки.

ИИРазработкаПрактикаКейс

Я некоторое время следил за создателем Codex Router в X и всё не мог собраться его поставить. Не было практической необходимости: обычного Codex хватало. Потом задач стало больше, и я начал регулярно упираться в лимиты ChatGPT Pro. Встал неприятный выбор: покупать вторую подписку за $200 в месяц, разводить работу между двумя машинами или попробовать подключить к одному рабочему процессу более дешёвые модели.

Я выбрал третий вариант. В этой статье — как мы установили Codex Router на MacBook и Mac mini, подключили DeepSeek и OpenCode Go, пережили поломку во время установки и после этого собрали безопасный сценарий обновления с быстрым возвратом к обычному Codex.

От второй подписки к одному рабочему процессу

На старте у меня уже был DeepSeek API. Он закрывал часть объёмных задач, но это был отдельный платный API-маршрут. Хотелось добавить подписку с несколькими моделями, чтобы не оплачивать каждую из них по отдельности и не переходить в другой интерфейс.

В сравнении у меня были два направления. Первое — Ollama, которое в моём исследовании выглядело как подписка за $20 в месяц. Второе — OpenCode Go. Я неожиданно обнаружил, что Go можно использовать не только внутри OpenCode: официальная страница прямо описывает его как подписку, которую можно подключать к любому агенту. На момент покупки цена составляла $5 за первый месяц, затем $10 в месяц; актуальные условия лучше проверять на странице OpenCode Go.

Меня убедили две вещи: набор моделей и цена. В одну подписку попадали DeepSeek, Kimi, GLM, Qwen, MiniMax и другие модели, а сам маршрут можно было подключить к Codex через совместимый адрес подключения. Поэтому я купил OpenCode Go и решил проверить, получится ли встроить его в тот же рабочий процесс.

Здесь есть важное различие. opencode-go/deepseek-v4-flash — это DeepSeek Flash, оплачиваемый через подписку OpenCode Go. deepseek/deepseek-v4-flash — прямой DeepSeek API, который тарифицируется отдельно. Названия похожи, но за ними разные поставщики, разные ключи доступа и разные счета за использование. Перепутать легко, а платить придётся дважды.

Что делает Codex Router

Codex Router — не модель и не отдельный чат. Это локальный Python/Node-адаптер между Codex и внешними провайдерами. Codex отправляет запрос на локальный адрес, Router переводит его в нужный формат, отправляет дальше, пропускает через себя поток ответа и возвращает его в Codex.

Он также собирает каталог моделей. После установки внешние модели появляются в обычном списке выбора Codex рядом со штатными моделями GPT. При этом проекты, навыки, MCP, права и сам рабочий контекст остаются в Codex. Переключается только модельный маршрут.

Один рабочий процесс Codex на двух машинах через локальные Router-инстансы
Один рабочий процесс Codex на двух машинах через локальные Router-инстансы

На двух машинах это устроено не как два разных Codex и не как один удалённый сервер. На MacBook и Mac mini стоят отдельные локальные копии Router, и каждая слушает только внутренний адрес своей машины. Поэтому MacBook может работать, даже если Mac mini выключен. Но Router нужно установить и проверить на каждой машине отдельно: ни настройки, ни ключи между компьютерами мы не копируем.

Какие маршруты мы включили

В рабочей политике я зафиксировал не «автоматически отдавать всё дешёвой модели», а ограниченное делегирование по типу задачи:

  • opencode-go/deepseek-v4-flash — большие документы, извлечение фактов, классификация и суммаризация;
  • opencode-go/deepseek-v4-pro и Kimi через OpenCode Go — ограниченное чтение кода, сравнение вариантов и разбор тестов без права записи в рабочую папку;
  • штатные модели OpenAI — архитектура, безопасность, доступы, секреты, боевая среда, любые внешние изменения и финальная сборка;
  • локальный Qwen на Mac mini — следующий этап, после подключения endpoint и отдельной health/read-only проверки.

Такой расклад сохраняет контроль у основного Codex. Дешёвая модель получает узкую подзадачу, а не право самостоятельно менять проект или принимать финальное решение.

Notion image

Установка на первой машине

Мы использовали публичный репозиторий Codex Router и стабильную рабочую копию с полным путём. Для самостоятельной установки на macOS официальный вариант с пошаговым мастером выглядит так:

curl -fsSL https://raw.githubusercontent.com/duolahypercho/codex-router/main/install.sh \
  | sh -s -- --target codex --guided

Перед запуском нужны Codex App или CLI, Node.js 22.19+ (автор проекта рекомендует Node.js 24 LTS), uv либо Python 3.10+ с venv, и Git. На первом проходе лучше выбрать одного поставщика и не включать платную проверку с реальным запросом.

В мастере установки мы:

  1. оставили обычный вход в OpenAI и существующие настройки Codex; 2. выбрали DeepSeek как первого внешнего поставщика; 3. ввели ключ только в скрытое локальное поле Router; 4. дождались установки фоновой службы для своего пользователя; 5. проверили конфигурацию командой doctor и по адресу проверки состояния.

Ключи нельзя вставлять в чат, передавать аргументом команды или класть в .env внутри проекта. Если поставщик уже настроен, установщик просто увидит, что ключ есть, и не покажет его значение.

После установки OpenCode Go подключается отдельным локальным шагом из рабочей копии Router:

./bin/model-router codex provider-key opencode-go set
./bin/model-router codex providers enable opencode-go
./bin/model-router codex multi-agent on

Первая команда открывает защищённый ввод ключа. Вторая включает семейство маршрутов OpenCode Go/Zen. Третья разрешает использовать выбранные модели для дочерних агентов — и это не значит, что каждая задача начнёт незаметно уходить в чужой счёт.

Проверка без платного запроса:

./bin/model-router codex doctor
./bin/model-router codex status
./bin/model-router codex providers
curl -fsS http://127.0.0.1:4102/health

После этого Codex нужно полностью закрыть через ⌘Q и открыть заново, затем создать новую задачу. Каталог моделей подгружается при запуске приложения. Выходить из Codex перед самой установкой не обязательно; перезапуск нужен после того, как Router уже применил конфигурацию.

Установка на Mac mini и обновление двух машин

На Mac mini мы повторили тот же контур: своя рабочая копия, своя фоновая служба, своя локальная проверка и тот же набор разрешённых поставщиков. Это чуть дольше, чем скопировать папку с MacBook, зато не переносит ключи и не создаёт скрытую зависимость одного компьютера от другого.

Позже мы сделали отдельную команду update-both.command. Сначала она делает предварительную проверку без изменений на обеих машинах: чистоту рабочей копии, ветку main, doctor, локальную проверку состояния и одинаковый доступный коммит. Затем обновляет Mac mini как пробную машину, снова выполняет doctor и проверку состояния, и только после этого берётся за MacBook.

Сценарий выглядит так:

update-both.command --check-only   # только проверка, без изменения Router
update-both.command                # проверка и обновление, с подтверждением UPDATE

Если Mac mini не проходит проверку, MacBook не обновляется. Если проверка после обновления не прошла, скрипт выполняет штатный откат Router. В конце обе машины должны быть на одном коммите, с зелёным doctor и работающей локальной проверкой состояния.

Если своего скрипта-обёртки нет, тот же принцип легко повторить руками. Сначала на Mac mini, из его рабочей копии:

./bin/update check
./bin/update
./bin/doctor
curl -fsS http://127.0.0.1:4102/health

Только после зелёной проверки повторить эти четыре шага на MacBook. Команда update check ничего не применяет. Не стоит запускать ./bin/update --help: в этой версии такой вызов не является справкой и может запустить обновление.

Безопасное обновление: сначала canary, затем второй компьютер, с проверкой и rollback
Безопасное обновление: сначала canary, затем второй компьютер, с проверкой и rollback

Во время обновления Codex можно оставить открытым, если в нём нет активного запроса. После успешного обновления нужно полностью закрыть и заново открыть Codex на обеих машинах. Скрипт не переносит ключи, не читает запросы к моделям и не делает платный inference smoke test автоматически.

Что сломалось во время настройки

На этапе перехода с пробной рабочей копии на стабильную установка оборвалась. В Codex появилось сообщение:

stream disconnected before completion: error sending request for url
(http://127.0.0.1:4102/_codex-router/.../v1/responses)

Сначала это выглядело так, будто сам Router сломал Codex. Но проверка без изменений показала другое: сбой случился на стыке двух локальных рабочих копий. Новая служба стартовала раньше, чем в файле установки успевал смениться владелец состояния. Она видела прежнего владельца — пробную установку — и честно отказывалась работать с чужим состоянием: foreign_state_owner. Повторные попытки launchd только повторяли этот отказ.

То есть проблема была не в LiteLLM, не в ключе DeepSeek, не в OpenCode Go и не в моделях. Сам Codex потерял поток к локальному 127.0.0.1:4102, пока установщик выполнял транзакцию. Встроенная защита отката вернула обычную конфигурацию Codex, сняла службу автозапуска и закрыла локальные порты. Выглядело это тревожно, но ни проекты, ни вход, ни ключи, ни рабочие данные не пострадали.

Исправление было аккуратным: мы заранее назначили стабильную рабочую копию владельцем состояния, повторно запустили штатную установку, а затем проверили doctor, состояние, службу, каталог моделей и локальные порты. На обеих машинах остался один стабильный коммит, Router показывал версию 0.4.0-beta.2, в каталоге было 20 маршрутов, а внешние сервисы слушали только 127.0.0.1.

Отдельно выяснилось, что значок в строке меню изначально не установился: первый автоматический запуск прошёл с ключом --no-tray. К поломке Router это отношения не имело — приложение для строки меню мы собрали и поставили позже. А когда оно однажды показало Router unavailable при зелёной проверке состояния, дело оказалось в переменной PATH: графическая оболочка не видела Node из fnm. Сам Router при этом продолжал работать.

Аварийный bypass, если Router недоступен

После этого я не стал рассчитывать на незаметное автоматическое переключение: оно способно сменить поставщика и счёт прямо посреди задачи. Вместо этого мы оставили явный аварийный сценарий.

Если Router мешает открыть Codex, из каталога установки можно отключить его штатной командой:

cd ~/.local/share/codex-router
./bin/disable

Затем полностью закрыть и открыть Codex. Он вернётся к прямому маршруту OpenAI, а внешние модели временно исчезнут из списка выбора. Проекты, вход в ChatGPT, профили, MCP и ключи поставщиков эта команда не трогает.

Когда причина устранена, Router возвращается так:

./bin/enable
curl -fsS http://127.0.0.1:4102/health

Для этого мы также сохранили в Finder готовые команды 01-router-emergency-off.command, 02-router-restore.command и 00-router-status.command. В результате поломка Router может временно отключить внешние модели, но не лишает доступа к основным штатным моделям Codex.

Что получилось в итоге

У меня остался один Codex Desktop на каждой машине и один привычный способ работать над проектами. В выборе моделей появились дополнительные маршруты, а сами проекты не пришлось переносить в другой клиент. MacBook и Mac mini имеют собственные локальные Router-инстансы, поэтому отказ одной машины не блокирует другую.

Главный вывод оказался практическим: Router стоит внедрять не как магический переключатель всех моделей, а как отдельный локальный слой с понятными границами. Нужно различать прямой доступ по API и маршруты по подписке, не смешивать поставщиков в тихом переключении, обновлять машины по очереди и держать под рукой одну команду для возврата к обычному Codex.

Такой контур не делает сбой невозможным. Он делает его обратимым: если Router не отвечает, основной Codex остаётся доступен; если обновление не прошло проверку, второй компьютер не затрагивается; если новый checkout конфликтует со старым, есть rollback и понятный владелец состояния.

Следующий шаг

Если хотите сначала разобраться с каталогом моделей и принципом выбора маршрута, начните с материала Codex Router: несколько моделей в одном Codex.

Связанные материалы

Эта схема полезна тем, кто хочет экономить лимиты основной подписки, но не готов отдавать весь рабочий процесс случайному автоматическому роутеру.

Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov