v0.34.0 — Codex accounts in the menu bar
Codex accounts in the menu bar
The menu bar shell only ever drove the Claude switcher. Codex accounts could be switched from ccswap codex switch and from the TUI, but the one surface meant to sit open all day ignored them.
The menu now carries a Codex submenu: one row per managed account with its usage, click to switch, rotate-to-next, and add / disable / remove. Rows reuse the same renderer as the Claude rows, which already understood the Codex-only fields, so a row reads like:
2 you@example.com 5h 0% (4h 59m) · Weekly 96% (ahead) (4d 18h) · Resets 1 (expires 20d 4h) · Credits none
Settings gains an Auto-switch Codex accounts toggle that hosts CodexAutoSwitchEngine the same way the existing toggle hosts the Claude engine. The two are independent, and the row goes inert when no Codex auth store is present rather than showing a ticked box next to an engine that never started.
The Codex submenu offers only rotate-to-next, because CodexAccountSwitcher.switch() discards its strategy argument — there is no "best" or "next available" to offer. The menu bar title stays Claude-driven.
Refresh behavior
Both providers are snapshotted in the same worker pass, behind the existing single in-flight guard, each with its own snapshot source and network gate. One provider failing never discards the other's last-good snapshot, and enabling Claude auto-switch no longer has any way to freeze Codex usage at a stale value.
Codex active-account detection compares the resolved account number rather than reacting to any auth.json write. Since the refresh pass now covers both providers, refreshing on every write would have made each unrelated Codex token refresh pull a Claude usage API fetch along with it — the opposite of what this tool is for.
The usage log's de-duplication key is namespaced by provider. Slot 1 exists on both sides and is two different accounts.
Packaging
PyPI metadata is expanded and the project URLs point at the renamed repository. The README leads with the dashboard, features, and quick start.
Full changelog: v0.33.0...v0.34.0