У меня три ChatGPT-аккаунта. На каждом свои лимиты, своя история, свои причины существовать. И на каждом они кончаются в самый неподходящий момент.

Переключаться вручную то ещё удовольствие. Особенно когда работаешь через Codex CLI или OpenCode и хочешь просто писать код, а не следить за тем, на каком аккаунте сейчас крутится запрос.

Именно под эту боль и написан codex-lb.

Что это такое

Обратный прокси, который сидит между вашим клиентом и ChatGPT, раскидывает запросы по пулу аккаунтов и показывает в дашборде, кто сколько потратил.

Снаружи это обычный OpenAI-совместимый эндпоинт. Codex CLI, OpenCode, OpenAI Python SDK работают без переделок, просто меняешь base_url.

Внутри FastAPI, SQLAlchemy для хранения статистики, OAuth для авторизации в ChatGPT. Фронт написан отдельно, общается с бэкендом по REST.

Зачем это нужно, если есть официальный API

Официальный API берёт деньги за токены. ChatGPT Plus/Pro работает по фиксированной подписке с лимитами, но без поштучной оплаты. Если много генерируешь, особенно с моделями типа gpt-5.3-codex на высоком reasoning, подписка может оказаться выгоднее.

Один аккаунт упирается в лимиты. Два аккаунта требуют ручного переключения. Три и больше превращаются в хаос.

codex-lb решает именно это: пул аккаунтов ведёт себя как один бесшовный эндпоинт.

Как запустить

Проще всего через Docker:

docker volume create codex-lb-data
docker run -d --name codex-lb \
  -p 2455:2455 -p 1455:1455 \
  -v codex-lb-data:/var/lib/codex-lb \
  ghcr.io/soju06/codex-lb:latest

Открываешь localhost:2455, добавляешь аккаунты и готово.

Если Docker не нужен:

uvx codex-lb

Данные хранятся в ~/.codex-lb/, один каталог, легко бэкапить.

Подключение клиентов

Codex CLI — в ~/.codex/config.toml:

model = "gpt-5.3-codex"
model_reasoning_effort = "xhigh"
model_provider = "codex-lb"

[model_providers.codex-lb]
name = "OpenAI"
base_url = "http://127.0.0.1:2455/backend-api/codex"
wire_api = "responses"
requires_openai_auth = true

Важный момент: name должен быть именно "OpenAI". Это включает /compact эндпоинт, без которого часть функций Codex CLI не работает.

OpenCode — в ~/.config/opencode/opencode.json:

{
  "provider": {
    "codex-lb": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "codex-lb",
      "options": {
        "baseURL": "http://127.0.0.1:2455/v1"
      },
      "models": {
        "gpt-5.3-codex": {
          "name": "GPT-5.3 Codex",
          "reasoning": true,
          "interleaved": { "field": "reasoning_details" }
        }
      }
    }
  },
  "model": "codex-lb/gpt-5.3-codex"
}

OpenCode добавит codex-lb как дополнительного провайдера, не трогая стандартные. Если используете enabled_providers, не забудьте включить туда и codex-lb, иначе он просто не появится в списке.

Python SDK:

from openai import OpenAI

client = OpenAI(
    base_url="http://127.0.0.1:2455/v1",
    api_key="sk-clb-...",  # из дашборда
)

API-ключи и разграничение доступа

По умолчанию прокси открыт, любой клиент в сети может слать запросы. Для дома��него использования это нормально, но если сервер торчит наружу или к нему подключаются несколько человек, включите API Key Auth в Settings.

После этого каждый запрос должен нести Authorization: Bearer sk-clb-.... Ключи создаются в дашборде, полный ключ показывается только один раз при создании.

На каждый ключ можно поставить лимиты по токенам, стоимости, окну времени (день / неделя / месяц) и моделям.

Дашборд и статистика

Дашборд показывает по каждому аккаунту токены, стоимость и тренд за 28 дней. Видно, какой аккаунт скоро упрётся в лимиты.

Авторизация по паролю с опциональным TOTP. Настраивается в Settings.

Модели синхронизируются автоматически, не нужно вручную обновлять список при выходе новых.

Напоследок

Проект активно разрабатывается, issues закрываются быстро, PR принимаются. Если чего-то не хватает, лучше сразу создать issue.

Работает и с корпоративными аккаунтами ChatGPT Team.

GitHub