I wrote this README by hand, no LLM :)
Balancing usage across several ChatGPT Codex accounts.
go install github.com/supabitapp/codex-balancer@latestcodex-balancer server # serve the proxy with a TUI at
The server runs at http://127.0.0.1:8317
/v1/responses— HTTPPOST(SSE or JSON) and WebSocketGET/codex/responsesand/v1/codex/responses— equivalent HTTPPOSTand WebSocketGETaliases for pi/v1/alpha/search,/v1/images/generationsand/v1/images/edits— unaryPOSTproxies for Codex's standalone web search and image tools, sent with a pool account's credentials/dashboard— HTML dashboard/stats— JSON stats of the server/accounts— add an account. On a real server, send this to your friends so they join the pool without exposing credentials.
The TUI also allows you to put a pause or priority on some accounts.
There is a CLI to manage the accounts
codex-balancer accounts add # sign in through a local browser
codex-balancer accounts list
codex-balancer accounts mode you@example.com priority
codex-balancer accounts mode you@example.com normalAdding an account preserves its existing model training setting.
Self-serve Business Pro Lite
(self_serve_business_prolite) accounts route using their per-account quota.
Other Business and Enterprise workspaces are displayed but excluded from routing.
Use the CLI to manage client API keys:
codex-balancer keys add my-laptop
codex-balancer keys list
codex-balancer keys rm my-laptopkeys list includes the input, cached, output, and total tokens attributed to
each key.
State lives in ~/.codex-balancer/state.db.
On each machine that runs Codex, export a key from the server before starting Codex:
export CODEX_BALANCER_API_KEY="<server-key>"add that to your ~/.zshrc or whatever env loading mechanism or shell you use.
Then in ~/.codex/config.toml:
model_provider = "balancer"
[model_providers.balancer]
name = "OpenAI" # must be exactly this for server-side compaction to work
base_url = "http://127.0.0.1:8317/v1"
env_key = "CODEX_BALANCER_API_KEY"
requires_openai_auth = true
supports_websockets = trueexport CODEX_BALANCER_API_KEY="<server-key>"Merge this into ~/.pi/agent/models.json, keeping any unrelated providers:
{
"providers": {
"openai-codex": {
"baseUrl": "http://127.0.0.1:8317/v1",
"apiKey": "$CODEX_BALANCER_API_KEY"
}
}
}HTTP Responses has verbose, request-correlated logs. Use server -no-tui -json
for JSON logs; clients can report X-Codex-Balancer-Request-Id from response
headers. Add -otel to export real traces to a configured OTLP HTTP collector:
OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4318 codex-balancer server -no-tui -json -otelSee OBSERVABILITY.md for trace configuration, privacy/buffering limits, and how to check account-switch boundaries and actual cached-token usage. Tracing is optional and does not change routing or retry behavior.
Routing logic is in ROUTING.md.