Local · Open source · No SaaS, no daemon

Know the real cost of Claude Code.

A local terminal dashboard that parses your Claude Code sessions, computes per-event cost in €, and shows your real subscription % straight from Anthropic's usage API — not a guess against made-up plan limits.

$ go install github.com/fullfran/claudeops-tui/cmd/claudeops@latest
claudeops — dashboard
ClaudeOps dashboard: real Anthropic subscription usage, daily cost in euros, burn rate, and top sessions
the difference

Real usage, not estimates.

Every other tool guesses your remaining quota by counting tokens against a hard-coded plan limit. ClaudeOps calls the same undocumented endpoint Claude Code's own /usage command uses — with OAuth token refresh.

Every other tracker

  • Counts tokens against a guessed plan limit
  • Drifts the moment Anthropic changes anything
  • Collapses token classes → wrong cost math
  • Ships a background daemon or phones home to a SaaS

ClaudeOps

  • Reads the real session / weekly / per-model % from Anthropic
  • Four-class token cost: input · output · cache read · cache create
  • 100% local SQLite (WAL) — nothing leaves your machine
  • One static Go binary. No daemon, no CGO, no account
real screenshots

Drill down to the last token.

Navigate sessions, models, and insights — all computed from your own data, no decoration.

what you get

One dashboard, eight tabs, zero guesswork.

Everything is computed from your own ~/.claude/projects/*.jsonl — parsed incrementally with fsnotify and persisted byte offsets.

%

Real subscription %

Live session, weekly, and per-model usage from Anthropic's OAuth usage API, with token refresh and a 5-minute cache.

Four-class cost

Per-event cost in € using input, output, cache_read and cache_create — collapsing them ruins the math.

Local SQLite

Events stored in WAL-mode SQLite via modernc.org/sqlite. No CGO, single-writer discipline, idempotent inserts.

Session drill-down

Per-model breakdown, hourly activity, token split, cache hit ratio, and duration for any session you pick.

Insights engine

Five computed insights: cache efficiency, model mix, cost trend, session efficiency, and peak hours — each toggleable.

Task attribution

claudeops task start "…" correlates events to active work by session and timestamp window.

MCP server

Seven read-only tools expose your data to Claude Code, opencode, or Cursor for conversational analysis.

Multi-provider

Pluggable providers track more than one subscription — Claude, Codex, and Gemini in one view.

Self-update

claudeops update upgrades the CLI when it's safe, and fails loudly with the manual command when it isn't.

how it works

From JSONL to dashboard in one pass.

01

Collect

fsnotify watches ~/.claude/projects and tails each file from its stored offset.

02

Parse + price

Permissive JSONL decoder → typed events → per-event € cost from TOML pricing.

03

Store

A single writer goroutine drains a buffered channel into WAL SQLite, idempotently.

04

Render

Bubbletea refreshes aggregates every 2s and overlays the real usage %.

talk to your usage

Ask Claude about your own spend.

The MCP server opens your database read-only and answers questions through Claude Code, opencode, or Cursor. Activate it only when you need it — then remove it to reclaim context tokens.

"What project am I spending the most on this week?" — and it just knows.

"Am I using cache effectively?" — straight from your data.

# register with Claude Code $ claude mcp add claudeops -- claudeops mcp # 7 read-only tools appear: claudeops_summary claudeops_sessions claudeops_session_detail claudeops_projects claudeops_models claudeops_daily claudeops_insights # done? reclaim the context $ claude mcp remove claudeops
status bar

Your quota, where you are already looking.

The dashboard is for digging in. The rest of the day you just want one line: how much quota is left, without switching windows. Works in tmux, in opencode, in Zellij, or in your shell prompt.

$ claudeops statusline 5h 3% · 7d 29%

tmux

One segment in your status-right. It follows the agent in the active pane — a Claude Code pane shows Anthropic, an opencode pane wired to OpenAI shows Codex.

set -g status-right "#(claudeops statusline --color) │ %H:%M"

opencode

A TUI plugin putting the same numbers beside the prompt. Declared in tui.json, not opencode.json.

// ~/.config/opencode/tui.json { "plugin": ["/path/to/claudeops.tsx"] }

Anything else

Zellij, a shell prompt, or anything that can run a command. --format json gives you the raw numbers.

$ claudeops statusline --format json [{"provider":"claude","windows":[…]}]

It can also warn you before you run out. The projection comes from observed utilisation, not from euro spend — those are different axes, and converting between them would be guessing. With too little history to be sure, it says nothing at all.

$ claudeops statusline --forecast 5h 62% · 7d 29% ⚠5h out in 1h20m

It does not call the API on every redraw. The snapshot is cached on disk and shared between processes, so a bar redrawing every two seconds makes one request a minute rather than thirty — and opening the dashboard alongside it costs nothing.

$ claudeops statusline doctor claude ok 5h 3% · 7d 29% codex ok 7d 0% (plan: plus, via opencode) copilot absent no credentials found

When the segment comes up empty — and it comes up empty on purpose, rather than putting an error in your bar — the doctor says why, and what to do about it.

install

Up and running in a minute.

Pure Go, no CGO required. Grab it with go install or build from source.

1

Install the binary

$ go install github.com/fullfran/claudeops-tui/cmd/claudeops@latest
2

Launch the dashboard

$ claudeops
3

Track a task (optional)

$ claudeops task start "refactor parser" $ claudeops task stop
4

Or build from source

$ git clone https://github.com/FullFran/claudeops-tui $ cd claudeops-tui $ CGO_ENABLED=0 go build -o claudeops ./cmd/claudeops