Codex LB v1.24.0

Codex LB v1.24.0

Codex LB, Load Balance Multiple ChatGPT Accounts. Codex LB puts the accounts behind a single service that can manage authentication, route requests, track usage, and provide a central dashboard.
(4.6)

Developer

soju06

Category

Utilities

Operating System

All Platforms

Date Published

Tue Sep 01 2026

Review Codex LB v1.24.0

Codex LB is an open source load balancer and proxy designed for users who work with multiple ChatGPT accounts. Instead of configuring each account separately in every coding tool, Codex LB puts the accounts behind a single service that can manage authentication, route requests, track usage, and provide a central dashboard.

The main feature is account pooling. You can add multiple ChatGPT accounts and let Codex LB distribute requests between them. This can be particularly useful for developers who regularly use Codex or compatible coding agents and want a single endpoint instead of manually switching between accounts.

Usage tracking is another useful part of Codex LB. The dashboard provides information about account usage, tokens, costs, and usage trends. API keys can also have individual rate limits based on tokens, cost, time windows, and models, giving administrators more control over how the proxy is used.

Codex LB is not limited to the Codex CLI. It provides OpenAI compatible endpoints that can be used with Codex CLI, OpenCode, OpenClaw, Hermes Agent, and the OpenAI Python SDK. This makes it more useful as a general AI gateway rather than simply a utility for one particular client.

The dashboard is also a nice addition. Instead of managing everything through configuration files, users get a central interface for accounts, API keys, usage information, and other settings. Dashboard authentication supports passwords and optional TOTP, which is useful when the service is exposed beyond localhost.

Installation is relatively straightforward. Docker is the recommended option, but Codex LB can also be launched with uvx or Nix. The default setup uses SQLite, while PostgreSQL is available as an alternative database backend. Docker deployments use persistent application data, so that data should be included in your backup strategy.

For self hosted users, the simple deployment approach is particularly convenient. The project provides sensible defaults while still offering enough configuration options for more advanced deployments.

There are some important considerations, though. Running a proxy between coding clients and ChatGPT accounts adds another component that needs to be secured and maintained. If you expose the dashboard or API remotely, proper authentication, API keys, reverse proxy configuration, and network security become important.

Another consideration is whether managing multiple accounts fits within the applicable terms and policies of the services being accessed. Codex LB provides the technical infrastructure for account pooling, but users remain responsible for how they use those accounts and whether their setup complies with the relevant service rules.

The project is particularly interesting for developers who frequently switch between AI coding environments. Having one endpoint for several accounts can simplify configuration and make it easier to monitor usage from a central location.

Download Codex LB v1.24.0 - Software Mirrors

Codex LB v1.24.0 Python Package

codex_lb-1.24.0-py3-none-any.whl | 2.32 MB

Others Download related to Codex LB v1.24.0

codex_lb-1.24.0.tar.gz | 10.16 MB

Codex LB v1.24.0 Source Code

Codex LB v1.24.0 Source code (zip)

Codex LB v1.24.0 Source code (tar.gz)

Codex LB v1.24.0 Release Notes:

What's Changed

  • fix(quota-planner): compare warmup reset epochs in UTC by @Komzpa in #1623

  • Keep HTTP bridge missing-created watchdog armed after prelude by @Komzpa in #1580

  • docs(openspec): archive landed performance and reliability changes by @Soju06 in #1694

  • fix(proxy): release the API-key reservation on all exits of the models endpoints by @Komzpa in #1653

  • fix(compact): omit oversized non-state tool tail by @Komzpa in #1235

  • fix(dashboard): separate quota and purchased credits by @Dvredin in #1670

  • fix(dashboard): exclude cancelled/client_disconnected from error rate by @Soju06 in #1696

  • fix(proxy): durably recover hard HTTP bridge operations by @shaqman in #1657

  • fix(http-bridge): keep idle retirements out of retry circuit by @leventov in #1677

  • feat(reset-credits): add refresh scheduler enable toggle by @Soju06 in #1701

  • feat(telemetry): anonymous usage telemetry with informed opt-out consent by @Soju06 in #1618

  • fix(dashboard): pin web asset MIME types against poisoned OS registries by @Soju06 in #1709

  • docs(openspec): archive 90 landed changes and sync their specs by @Soju06 in #1713

  • fix(dashboard): distinguish first-run empty states from filter mismatch by @mastertyko in #1729

  • fix(chat): omit unset tools on mapped Responses payloads by @mastertyko in #1725

  • fix(http-bridge): refuse foreign claims on live DRAINING leases by @mastertyko in #1722

  • fix(proxy): keep stream idle timeouts account-neutral by @mastertyko in #1718

  • fix(proxy): settle compact failover before account health by @mastertyko in #1717

  • fix(proxy): close non-stream chat collect and map error status by @mastertyko in #1712

  • fix(proxy): sweep idle bridge sessions without request traffic by @Soju06 in #1747

  • docs(proxy): document cluster-wide account cap partitioning by @Soju06 in #1750

  • fix(cache): keep an aborted invalidation bump queued by @Soju06 in #1748

  • feat(db): report SQLite write transactions that outlive the busy timeout by @Soju06 in #1752

  • fix(proxy): fence successor bridge claims against the retiring predecessor by @Soju06 in #1751

  • fix(proxy): add explicit Daybreak capability routing by @mastertyko in #1742

  • fix(review): keep Codex review sessions resumable by @leventov in #1678

  • fix(accounts): recover Free accounts after reset by @HulianBuligon in #1700

  • fix(proxy): keep file-pin owner on soft 1011 reconnect by @mastertyko in #1761

  • fix(proxy): persist file ownership across replicas by @mastertyko in #1521

  • fix(proxy): scope backend Codex affinity by thread identity by @leventov in #1703

  • fix(http-bridge): preserve goal-restart recovery across reconnects by @leventov in #1680

  • fix(dashboard): preserve cancelled request count by @mastertyko in #1766

  • fix(dashboard): show cancelled request logs by @mastertyko in #1769

  • fix(dashboard): surface upstream route metadata by @mastertyko in #1767

  • fix(models): correct GPT-5.6 context windows by @kidclone3 in #1691

  • fix(auth): guard the refresh singleflight negative cache by successor ownership by @Komzpa in #1652

  • test(proxy): add property tests for response payload invariants by @iqbalmaulana03 in #1699

  • fix(http-bridge): dedupe retry circuit failures per send by @choi138 in #1743

  • fix(proxy): abandon unavailable owner on thread-scoped goal restart by @mastertyko in #1764

  • fix(proxy): do not rewrite thread locality for a file-pin owner by @mastertyko in #1765

  • fix(usage): settle live snapshots after account consolidation by @mastertyko in #1773

  • fix(proxy): normalize single-account warmup failures by @mastertyko in #1774

  • fix(proxy): settle terminal spool append failures by @mastertyko in #1775

  • chore(github): retire codex review label gate in favor of CodeRabbit by @Soju06 in #1763

  • fix(proxy): hold fenced hard turns through cooldown by @kevinsslin in #1739

  • fix(proxy): stop abandoning an unresolved inflight session-creation future by @Komzpa in #1644

  • chore(tooling): run Makefile Python scripts through uv by @kevinsslin in #1741

  • fix(proxy): separate websocket scope cleanup budget by @kevinsslin in #1723

  • fix(proxy): route source-owned models off the WebSocket transport by @Borealin in #1659

  • feat(proxy): report websocket cleanup phase by @kevinsslin in #1726

  • fix(proxy): complete disconnect cleanup — pool leak, charged reservation, mutable terminal reason by @Komzpa in #1645

  • fix(dashboard): show cancellation totals in reports by @mastertyko in #1772

  • feat(model-sources): advertise operator-declared reasoning efforts by @Borealin in #1661

  • feat(ui): customize dashboard request-log columns by @BrenticusMaximus in #1503

  • fix(proxy): keep abrupt eventless websocket drops account-neutral by @Soju06 in #1777

  • fix(db): bound wedged SQLite session teardown and reclaim the connection by @Soju06 in #1778

  • perf(proxy): disable permessage-deflate on direct-egress upstream websockets by @Soju06 in #1786

  • perf(middleware): convert BaseHTTPMiddleware layers to pure ASGI by @Soju06 in #1787

  • fix(compact): recover previous-response-pinned compaction from quota-excluded owners by @Soju06 in #1780

  • perf: coalesce same-owner sticky session TTL refresh upserts by @Soju06 in #1790

  • docs(dashboard): clarify routing, sticky affinity, quota thresholds, warm-up, and eligibility copy by @Soju06 in #1781

  • fix(server): serve h2c upgrade offers as plain HTTP/1.1 instead of rejecting them by @Soju06 in #1782

  • fix(db): add postgres shm_size and raise default pool headroom by @Soju06 in #1791

  • perf(dashboard): cap projections bulk usage-history read per account by @Soju06 in #1779

  • perf(accounts): bound the account-listing live tail with a 2h fold lag and a 30s summary cache by @Soju06 in #1792

  • perf(accounts): make account deletion a fast mark + background batch drain by @Soju06 in #1795

  • fix(usage): fence leaked live-usage-ingestor tasks and settle their failures deterministically by @Soju06 in #1783

  • fix(docker): upgrade util-linux family in runtime image for CVE-2026-53615 by @Soju06 in #1796

  • perf(proxy): validate stream payloads only for lifecycle events by @Soju06 in #1784

  • perf(api-keys,proxy): shape ORM hot-path queries by @Soju06 in #1788

  • perf(proxy): relay unmodified SSE frames verbatim by @Soju06 in #1785

  • perf(api-keys): skip usage reservations when no limit applies by @Soju06 in #1789

  • chore: release v1.24.0-beta.1 by @Soju06 in #1704

  • chore(ci): bump astral-sh/setup-uv from 9.0.0 to 10.0.1 by @dependabot[bot] in #1802

  • chore(deps): bump the python-minor-patch group with 10 updates by @dependabot[bot] in #1806

  • chore(deps): bump openai from 2.53.0 to 3.0.0 by @dependabot[bot] in #1807

  • chore(docker): bump astral-sh/uv from 0.12.3 to 0.12.5 by @dependabot[bot] in #1803

  • chore(deps): bump the frontend-minor-patch group in /frontend with 12 updates by @dependabot[bot] in #1804

  • chore(ci): bump github/codeql-action/upload-sarif from 4.37.6 to 4.37.7 by @dependabot[bot] in #1805

  • feat(api-keys): allow per-key reasoning effort policies by @yshishenya in #1642

  • test(proxy): keep eventless anchored bridge replay fail-closed by @kevinsslin in #1736

  • feat(reports): Add API Key Filtering to Reports Dashboard by @SAKTHIMARAN-VENOM in #1728

  • fix(proxy): compact transport switch + trigger canonicalization (supersedes #1749) by @Soju06 in #1809

  • feat(proxy): support Ultrafast service tier by @evan-choi in #1734

  • feat(ui): surface reasoning token usage by @chaoxu in #1801

  • fix(models): raise GPT-5.6 bootstrap max_context_window to 872k by @zenasharp in #1813

  • fix(proxy): drop malformed compact item ids by @yshishenya in #1815

  • chore(openspec): archive GPT-5.6 context-window changes in dependency order by @Soju06 in #1819

  • fix(proxy): classify parameterless previous response errors by @rknightion in #1818

  • chore: release v1.24.0-beta.2 by @Soju06 in #1810

  • fix(proxy): bind account-bound retries to dispatch owner by @mastertyko in #1829

  • fix(proxy): reject truncated chat completion streams by @mastertyko in #1833

  • fix(proxy): retain image reservation recovery ownership by @mastertyko in #1822

  • fix(warmup): warm paid-to-free transitions by @HulianBuligon in #1825

  • feat(model-sources): embeddings source capability with request-log accounting by @Komzpa in #1776

  • fix(helm): bind TTFT dashboard SQL datasource by @mastertyko in #1827

  • fix(reports): format full Cost values with grouping separators by @hanseo0507 in #1814

  • fix(proxy): preserve compact terminal error type by @mastertyko in #1824

  • feat(config): timeout-invariant linter — validate deadline/TTL inequalities at startup and in CI by @Komzpa in #1622

  • chore(repo): drop root agent-debris files and enforce a root-file allowlist budget by @Soju06 in #1837

  • fix(models): apply context-window overrides to /v1 input context fields by @yeongjun-cigro in #1808

  • test(oauth): make test_oauth_flow order-independent by fencing the shared OAuth store by @Soju06 in #1839

  • fix(http-bridge): classify recovery error frames and poison same-anchor eventless failures by @Soju06 in #1841

  • fix(proxy): O(1) shared-future admission waits + event-loop lag watchdog by @Soju06 in #1842

  • feat(telemetry): report consent state and send a decision-time opt-out signal by @Soju06 in #1835

  • chore: release v1.24.0-beta.3 by @Soju06 in #1834

  • feat(frontend): configure model-source reasoning efforts by @Komzpa in #1848

  • fix(proxy): absorb replay-safe compaction recovery by @Komzpa in #1849

  • fix(proxy): terminate suppressed duplicate tool-call replays by @Komzpa in #1706

  • fix(db): repair retired identity/warmup migration stamp by @Komzpa in #1847

  • fix(proxy): demote quarantined bridge reattach keys by @Komzpa in #1730

  • fix(proxy): guard model-transition owner-conflict fork by @Komzpa in #1619

  • Revert five squash merges landed outside the merge triage round by @Komzpa in #1858

  • fix(proxy): wait on usage-refresh singleflight without asyncio.shield by @Soju06 in #1897

  • chore: release v1.24.0-beta.4 by @Soju06 in #1851

  • chore(deps): bump the python-minor-patch group with 7 updates by @dependabot[bot] in #1915

  • chore(main): release 1.24.0 by @Soju06 in #1692

New Contributors

  • @Dvredin made their first contribution in #1670

  • @kidclone3 made their first contribution in #1691

  • @kevinsslin made their first contribution in #1739

  • @Borealin made their first contribution in #1659

  • @BrenticusMaximus made their first contribution in #1503

  • @SAKTHIMARAN-VENOM made their first contribution in #1728

  • @evan-choi made their first contribution in #1734

  • @chaoxu made their first contribution in #1801

  • @zenasharp made their first contribution in #1813

  • @hanseo0507 made their first contribution in #1814

Full Changelog: v1.23.0...v1.24.0

Install / Run

bash
uvx codex-lb
docker pull ghcr.io/Soju06/codex-lb:1.24.0
helm install codex-lb oci://ghcr.io/soju06/charts/codex-lb --version 1.24.0


Quick Start

# Docker (recommended)
docker volume create codex-lb-data
docker network inspect codex-lb-net >/dev/null 2>&1 || docker network create codex-lb-net
docker run -d --name codex-lb \
  --network codex-lb-net \
  -p 2455:2455 -p 1455:1455 \
  -v codex-lb-data:/var/lib/codex-lb \
  ghcr.io/soju06/codex-lb:latest

# or uvx
uvx codex-lb

# or nix
nix run github:Soju06/codex-lb

Open localhost:2455 → Add account → Done.

Accessing the dashboard remotely for the first time? You need a one-time bootstrap token — see Getting started.

Client Setup

Point any OpenAI-compatible client at codex-lb. For Codex CLI, ~/.codex/config.toml:

model = "gpt-5.6-sol"
model_reasoning_effort = "xhigh"
model_provider = "codex-lb"

[model_providers.codex-lb]
name = "openai"  # required — enables remote /responses/compact. Lowercase since Codex 2026-05-23; older "OpenAI" stops resolving gpt-5.5
base_url = "http://127.0.0.1:2455/backend-api/codex"
wire_api = "responses"
supports_websockets = true
requires_openai_auth = true # required for codex app

Documentation

Full docs live at https://soju06.github.io/codex-lb/:

Pros

  • Load balances requests across multiple ChatGPT accounts

  • Central dashboard for account and usage management

  • Tracks tokens, costs, and usage trends

  • OpenAI compatible API endpoints

  • Works with Codex CLI and several other AI clients

  • Configurable API key rate limits

  • Password and optional TOTP dashboard authentication

  • Supports Docker, uvx, and Nix

  • SQLite and PostgreSQL support

  • Open source

Cons

  • Adds another service that needs to be maintained

  • Remote deployments require careful security configuration

  • Multiple account usage may have policy or terms implications

  • More complex than using a single ChatGPT account directly

  • Requires persistent application data for account and usage management

Final Verdict

Codex LB is an impressive project for developers who need to manage multiple ChatGPT accounts from a single endpoint. Its combination of account pooling, usage tracking, API key management, OpenAI compatible endpoints, and a web dashboard makes it considerably more capable than a simple proxy.

The straightforward deployment options make it accessible to self hosted users, while support for PostgreSQL and multiple AI clients gives advanced users plenty of flexibility.

For developers already using several ChatGPT accounts and compatible coding agents, Codex LB can simplify account management considerably. For users with only one account, however, its additional complexity is probably unnecessary.

Comments on Codex LB v1.24.0