Agent-first CLI to check AI usage across multiple accounts.
- Human dashboard in TTY mode
- Structured JSON by default in non-TTY mode
- NDJSON streaming for paginated reads
- Raw JSON payloads for all mutating commands
- Runtime schema introspection with
describe - Field masks with
--fields --dry-runfor all mutating commands- Headless auth via Playwright storage-state import
- Output path sandboxing to the current working directory
- Node.js 18+
- Chrome installed for browser-based auth
- Codex usage reads the Codex CLI auth file from
~/.codex/auth.jsonor$CODEX_HOME/auth.json - Cursor usage needs a Cursor cookie or Playwright storage state provided through environment variables
npx @howells/gauge@latestnpm install -g @howells/gauge
gaugegauge
gauge --quick
gauge list
gauge add personal
gauge add codex work --codex-home ~/.codex-work
gauge add cursor work --storage-state-file ./cursor-state.json
gauge refresh personal
gauge refresh cursor work --storage-state-file ./cursor-state.json
gauge remove personal --dry-runInspect the runtime schema first:
gauge describe --format jsonUse structured output with field masks:
gauge status --format json \
--fields recommendation.account.name,accounts.nameStream paginated reads as NDJSON:
gauge list --format ndjson --page-size 1 --page-allPass raw payloads directly:
gauge add --json '{"name":"personal","storage_state_file":"./state.json"}' --format json
gauge add --json '{"provider":"cursor","name":"work","storage_state_file":"./cursor-state.json"}' --format json
gauge add --json '{"provider":"codex","name":"work","codex_home":"./codex-home"}' --format json
gauge refresh --input-file payload.json --dry-run --format jsonWrite output to a sandboxed file inside the current working directory:
gauge describe --format json --output-file ./artifacts/gauge-schema.jsonImport Playwright storage state without opening Chrome:
gauge add --json '{"name":"personal","storage_state_file":"./state.json"}'You can also use environment variables.
export GAUGE_STORAGE_STATE_FILE=./state.json
gauge add personal --format jsonexport GAUGE_STORAGE_STATE_JSON='{"cookies":[],"origins":[]}'
gauge refresh personal --dry-run --format jsonCursor usage can be read from a named account with a Playwright storage state
that contains cursor.com cookies:
gauge add cursor work --storage-state-file ./cursor-state.json
gauge status --format jsonFor ambient, non-configured Cursor usage, you can also provide a cookie header or storage state through environment variables:
export GAUGE_CURSOR_COOKIE='WorkosCursorSessionToken=...'
gauge status --format jsonexport GAUGE_CURSOR_STORAGE_STATE_FILE=./cursor-state.json
gauge status --format jsonSupported environment variables:
GAUGE_CURSOR_COOKIEGAUGE_CURSOR_COOKIE_FILEGAUGE_CURSOR_STORAGE_STATE_FILEGAUGE_CURSOR_STORAGE_STATE_JSON
- The agent is not a trusted operator.
- Use
--dry-runbefore mutating commands. - Use
--fieldson read commands to control context size. - Use
describeinstead of scraping--help. - Output files must stay inside the current working directory.
- Structured output is sanitized by default. Disable with
--no-sanitizeonly if you have a trusted downstream consumer.
- Account data is stored in
~/.gauge/ - Browser auth stores Playwright storage state in the same directory
- Local files are written with restrictive permissions where supported
MIT