Everything stays on your machine.
ccgauge is built for a simple promise: your conversation transcripts and your AI spend are none of our business. The dashboard, the CLI, and the MCP server all run locally and never make outbound network calls at runtime.
At runtime, ccgauge does not talk to any third-party server. Not to Anthropic. Not to OpenAI. Not to "ccgauge.dev". Bind defaults to 127.0.0.1.
No analytics, no error-reporting service, no anonymized "usage stats". The dashboard ships without a tracking pixel and the CLI doesn't phone home.
You don't sign in. ccgauge doesn't need your API key — it reads token counts from the JSONL your CLI already writes.
What ccgauge reads
Read-only access to existing files your CLI already created. ccgauge never edits or deletes these — it only parses.
| What | Where | Why |
|---|---|---|
| Claude Code JSONL session files | ~/.claude/projects/ | Source of truth for assistant tokens, model, cwd, tool calls, timestamps. |
| OpenAI Codex CLI JSONL session files | ~/.codex/sessions/ | Same role for Codex, plus the cumulative `token_count` events we delta-fy. |
| Optional config-dir override | $CCGAUGE_CONFIG_DIR | Lets you point at an alternate root (e.g. a snapshot from another machine). |
What ccgauge writes
All writes are to your home directory under ~/.ccgauge/. Nothing leaves the box.
| What | Where | Why |
|---|---|---|
| On-disk parser cache | ~/.ccgauge/cache/index-v2.json | Memoizes parsed JSONL so the dashboard starts fast. Invalidated on parserVersion bump. |
| MCP-specific cache | ~/.ccgauge/cache/index-mcp-v2.json | Separate file used only when running `ccgauge mcp`, so MCP doesn't contend with the dashboard. |
| Background-service state | ~/.ccgauge/state.json | Stores PID / port / log path so `ccgauge stop|restart|status` can find a running instance. |
| Background-service log | ~/.ccgauge/ccgauge.log | Captures stdout/stderr from the detached server. Tail with `ccgauge logs -f`. |
Verifiable
Don't take our word for it. ccgauge is MIT-licensed and the source is on GitHub. If you're on a corporate machine with strict outbound rules, two ways to sanity-check:
- Run with the network blocked. Start ccgauge while your machine is offline (or with a firewall denying outbound). Everything works exactly the same.
- Watch the network with Little Snitch / pfSense / tcpdump. You'll see precisely zero outbound packets from node for the lifetime of the ccgauge process.
- Read the source. Open
lib/data-loader/scan.tsandlib/providers/*to see exactly what gets parsed. Search forfetch(and you'll find nothing but the dashboard's own SSR-internal calls.
What we don't do
- Send anything to a third-party server.
- Edit or delete your CLI's JSONL session files.
- Subscribe to Anthropic / OpenAI billing APIs — the dashboard's numbers are derived from local files × built-in price tables.
- Phone home for updates. You upgrade ccgauge by running
npm i -g ccgauge@latestwhen you want to.
Source on GitHub
MIT licensed. Read every line that touches your data.