You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
best-auth now fetches live usage (Codex app-server, bounded concurrency) before ranking, instead of relying on the menu bar app's cached usage file. When the app isn't running it no longer silently picks alphabetically off a stale/empty cache. Per-profile fetch failures fall back to the cached snapshot, and fresh snapshots are merged back into the cache.
best-auth --json emits a stable machine-readable report (selected, tier, score, candidates[], fetched). status --json and list --json emit structured output too. Default (non-JSON) best-auth output is unchanged: the bare selected profile ID.
best-auth now has documented, stable exit codes: 0 selected, 2 no eligible profile, 3 no profiles configured, 4 usage data unavailable, 6 keychain interaction required, 7 watchdog timeout.
Changed
Usage polling now uses Codex's app-server exclusively; removes the reverse-engineered usage API client and OAuth refresh-on-poll.
best-auth and import-auth are now official supported commands. import-auth exits 5 only on an identity mismatch (a refreshed credential belonging to a different account) and 1 for other failures.
Fixed
Fixed false "re-auth needed" status for profiles with valid tokens (bare 401/403 substrings false-positived on unrelated error messages such as port numbers).
Fixed best-auth reporting a different tier/score from what was used for selection when a rate-limit reset boundary was crossed between the ranking and report steps.
Fixed a potential data race between background usage refreshes and profile state.
best-auth no longer hangs forever in non-interactive shells (CI, command substitution, background tasks). When stdin is not a terminal (or --non-interactive is passed), a Keychain read that needs interactive consent now exits with a clear message (code 6) instead of blocking on a modal prompt with no UI. A global watchdog (--timeout, default 30s, exit 7) guarantees the command always terminates.