Лимиты 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 и не как один удалённый сервер. На 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. Дешёвая модель получает узкую подзадачу, а не право самостоятельно менять проект или принимать финальное решение.
Установка на первой машине
Мы использовали публичный репозиторий 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. На первом проходе лучше выбрать одного поставщика и не включать платную проверку с реальным запросом.
В мастере установки мы:
- оставили обычный вход в 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: в этой версии такой вызов не является справкой и может запустить обновление.
Во время обновления 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.
Связанные материалы
- Как я собрал личную Codex-станцию: новый MacBook, Mac mini и два iPhone
- Лимиты Codex обнулили: почему GPT-5.6 Sol сжигал их быстрее ожидаемого
- Как поднять свою LLM и подключить к Codex
Эта схема полезна тем, кто хочет экономить лимиты основной подписки, но не готов отдавать весь рабочий процесс случайному автоматическому роутеру.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov
Если хотите разобрать свою задачу — напишите мне Если хотите разобрать свою задачу — напишите мне.
Можно прийти с идеей, черновым контекстом или уже живой задачей. Помогу быстро понять, где реальный следующий шаг, а где лишний шум.
Обычно хватает 2–3 сообщений, чтобы понять, могу ли я здесь реально помочь и в каком формате лучше двигаться дальше.
Дальше по теме
Почему не стоит подключать каждый новый инструмент к агенту и как вместо этого собрать библиотеку, которая работает на вас