SKILL.md
CodexBar
Use this when asked about AI subscription usage, rate limits, remaining credits, or "how much Codex/Claude/Kimi do I have left".
CLI
- Binary:
codexbar(Homebrew) - Default invocation honors the in-app provider toggles:
codexbar usage
codexbar usage --format json
- Specific provider (
--provideraccepts codex, claude, kimi, gemini, copilot, cursor, openrouter, and many more — seecodexbar --help):
codexbar usage --provider codex --json
codexbar usage --provider claude --json
- Multiple accounts:
--account <label>,--account-index <n>, or--all-accounts(single provider only).
Auth model
Provider fetches ride existing sessions — OAuth caches, CLI credentials, or browser cookies. No secrets are passed on the command line.
- Codex: OpenAI web dashboard via oauth; falls back to Codex CLI.
- Claude: claude.ai API via browser session cookie; falls back to Claude CLI. "No Claude session key found in browser cookies" means log in to claude.ai in a supported browser (or rely on the CLI fallback).
- Token-based providers read the CodexBar config file.
Dashboard endpoints
The menu bar app serves its dashboard on loopback. The page pulls /dashboard/v1/snapshot and /cost; there is no /api/* namespace, so those paths 404 rather than telling you that you guessed. The snapshot endpoint requires auth, so when the CLI is unavailable the quickest honest check is to open the dashboard in a browser.
usage --all-accounts polls every account serially and takes well over ninety seconds. If it produces zero bytes on both stdout and stderr, it is not slow, it is blocked: the CLI is a helper inside CodexBar.app, and a pending macOS Gatekeeper prompt stops it dead with no output. Screenshot the screen before debugging the command.
Interpreting output
- Errors for providers that were never configured are noise, not failures — only report providers the user actually uses.
- Report percentage left, pace vs. expected, and reset time; the pace line ("in deficit"/"in reserve") is the actionable bit.
- Claude rows read
claude-swapstored backups, which produces two
confusing readings. The currently active slot shows as having no stored credentials, because the live login is an active profile and its backup only materialises when you switch away. And claude-swap keeps a last seen percentage that keeps rendering for accounts whose credentials are gone, so a dead account can read as healthy for days. A plausible percentage is not proof of a working credential; only refresh token yes in claude-swap list --token-status is.