| summary | Codex provider data sources: OpenAI web dashboard, Codex CLI RPC, credits, and local cost usage. | ||||
|---|---|---|---|---|---|
| read_when |
|
Codex has three automatic usage data paths (OAuth API, web dashboard, CLI RPC) plus a manual CLI PTY diagnostic parser and a local cost-usage scanner. The OAuth API is the default app source when credentials are available; web access is optional for dashboard extras.
- OAuth API (auth.json credentials).
- CLI RPC through
codex app-server. - If OpenAI web extras are enabled and a matching OpenAI web session is available (Automatic or Manual cookies),
dashboard extras load as a separate follow-up refresh and the source label becomes
primary + openai-web.
Usage source picker:
- Preferences → Providers → Codex → Usage source (Auto/OAuth/CLI).
- OpenAI web dashboard (when available).
- Codex CLI RPC through
codex app-server.
- Reads OAuth tokens from
~/.codex/auth.json(or$CODEX_HOME/auth.json). - Refreshes access tokens when
last_refreshis older than 8 days. - Calls
GET https://chatgpt.com/backend-api/wham/usage(default) withAuthorization: Bearer <token>.
- Enable it in Preferences -> Providers -> Codex -> OpenAI web extras.
- It exists for dashboard-only extras such as code review remaining, usage breakdown, and credits history.
- It is intentionally opt-in because it loads
chatgpt.comin a hidden WebView and can materially increase battery or network usage. - OpenAI web battery saver is a separate toggle. When enabled, routine background/settings-driven refreshes are reduced, but explicit manual refreshes still run.
- OpenAI web battery saver currently defaults to off.
- Preferences → Providers → Codex → OpenAI cookies (Automatic or Manual).
- URL:
https://chatgpt.com/codex/settings/usage. - Uses an off-screen
WKWebViewwith a per-accountWKWebsiteDataStore.- Store key: deterministic UUID from the normalized email.
- WebKit store can hold multiple accounts concurrently.
- Cookie import (Automatic mode, when WebKit store has no matching session or login required):
- Safari:
~/Library/Cookies/Cookies.binarycookies - Chrome/Chromium forks:
~/Library/Application Support/Google/Chrome/*/Cookies - Firefox:
~/Library/Application Support/Firefox/Profiles/*/cookies.sqlite
- Domains loaded:
chatgpt.com,openai.com. - No cookie-name filter; we import all matching domain cookies.
- Safari:
- Cached cookies: Keychain cache
com.steipete.codexbar.cache(accountcookie.codex, source + timestamp). Reused before re-importing from browsers. - Manual cookie header:
- Paste the
Cookie:header from achatgpt.comrequest in Preferences → Providers → Codex. - Used when OpenAI cookies are set to Manual.
- Paste the
- Account match:
- Signed-in email extracted from
client-bootstrapJSON in HTML (or__NEXT_DATA__). - If Codex email is known and does not match, the web path is rejected.
- Signed-in email extracted from
- Web scrape payload (via
OpenAIDashboardScrapeScript+OpenAIDashboardParser):- Rate limits (5h + weekly) parsed from body text.
- Credits remaining parsed from body text.
- Code review remaining (%).
- Usage breakdown chart (Recharts bar data + legend colors).
- Credits usage history table rows.
- Credits purchase URL (best-effort).
- Errors surfaced:
- Login required or Cloudflare interstitial.
- Launches local RPC server:
codex -s read-only -a untrusted app-server. - JSON-RPC over stdin/stdout:
initialize(client name/version)account/readaccount/rateLimits/read
- RPC reads are bounded: initialization has a longer startup budget, and normal requests have a shorter per-method
timeout. On timeout, CodexBar terminates the child
codex app-serverprocess so the stdout reader unwinds instead of leaving refresh stuck indefinitely. - Provides:
- Usage windows (primary + secondary) with reset timestamps.
- Credits snapshot (balance, hasCredits, unlimited).
- Account identity (email + plan type) when available.
- App-server errors are terminal for the CLI strategy, except when Codex includes a recoverable
wham/usageJSON body in the error text.
- Manual/debug parser only; automatic background refresh and
CodexBarCLI usage --source clido not launch bare Codex TUI. - Kept for explicit diagnostics/parser coverage because bare
codexTUI can start interactive auth and open browser tabs. - Parses rendered
/statusoutput:Credits:line5h limitline → percent + reset textWeekly limitline → percent + reset text
- Detects update prompts and surfaces a "CLI update needed" error.
- Latest Codex usage snapshot (from RPC, if available).
~/.codex/auth.json(JWT claims: email + plan).- OpenAI dashboard signed-in email (cached).
- Last imported browser cookie email (cached).
- Web dashboard fills credits only when OAuth/CLI do not provide them.
- CLI RPC:
account/rateLimits/read→ credits balance. - CLI PTY diagnostics can still parse
Credits:from saved/manual/statusoutput.
- Source files:
- Native Codex logs:
~/.codex/sessions/YYYY/MM/DD/*.jsonl~/.codex/archived_sessions/*.jsonl(flat; date inferred from filename when present)- Or
$CODEX_HOME/sessions/...+$CODEX_HOME/archived_sessions/...ifCODEX_HOMEis set.
- Supported pi sessions:
~/.pi/agent/sessions/**/*.jsonl
- Native Codex logs:
- Scanner:
- Native Codex logs parse
event_msgtoken_count entries andturn_contextmodel markers; when both are present,turn_contextis authoritative for the model bucket. - pi sessions count assistant-message usage rows and attribute
openai-codexassistant usage to Codex. - pi assistant usage is bucketed by assistant-turn timestamp, so mixed-model pi sessions can contribute to multiple days/models correctly.
- Native Codex logs parse
- Cache:
- Native + merged provider cache:
~/Library/Caches/CodexBar/cost-usage/codex-v2.json - pi session cache:
~/Library/Caches/CodexBar/cost-usage/pi-sessions-v1.json
- Native + merged provider cache:
- Window: last 30 days (rolling), with a 60s minimum refresh interval.
- Web:
Sources/CodexBarCore/OpenAIWeb/* - CLI RPC + diagnostic PTY parser:
Sources/CodexBarCore/UsageFetcher.swift,Sources/CodexBarCore/Providers/Codex/CodexStatusProbe.swift - Cost usage:
Sources/CodexBarCore/CostUsageFetcher.swift,Sources/CodexBarCore/PiSessionCostScanner.swift,Sources/CodexBarCore/PiSessionCostCache.swift,Sources/CodexBarCore/Vendored/CostUsage/*