Skip to article
Compare

Claudoscope vs ccusage: which Claude Code usage tracker fits how you work

· Liran Baba · 7 min read

People ask me this more than any other question about Claudoscope, usually phrased as "isn't this just ccusage with a window?" Fair question. Both tools read the same JSONL files under ~/.claude/projects/, both run locally, both are MIT licensed, and both will tell you what yesterday cost. Past that they were built for different jobs, and I still run both.

The short version

ccusage is a command-line report. You run npx ccusage@latest, it scans your local transcripts, and it prints a table of tokens and estimated cost by day, week, month, session, or 5-hour billing block. It runs anywhere Node or Bun runs, it emits JSON, and it now covers 18 different coding-agent CLIs, from Codex to Gemini CLI to OpenCode. If you want a number in a script, a cron job, or a Grafana panel, ccusage is the right shape.

Claudoscope is a native macOS menu bar app that watches those same files as they change. It keeps a browsable, searchable history of every session, shows cost by project, model, and day, scans transcripts for leaked credentials while the session is still running, fires cost alerts, lints your ~/.claude/ configuration, and exposes a read-only MCP server so Claude Code can query your own usage. It only runs on Apple Silicon Macs, and it is built for people who want the tool to come to them.

What they have in common

Both read ~/.claude/projects/<project>/<session-id>.jsonl. Neither modifies those files. Neither sends anything over the network: ccusage has an --offline flag for cached pricing, and Claudoscope makes no network requests at all. Both are free, MIT licensed, and open source. Both estimate cost from token counts and model pricing, which means neither one is your invoice. More on that below.

Feature comparison

Checked against the ccusage README and docs at ccusage.com on September 29, 2026. If something here is out of date, open an issue and I will fix it.

ccusageClaudoscope
What it isCLI, run with npx, bunx, or pnpm dlxNative macOS app (SwiftUI), lives in the menu bar
PlatformsAnywhere Node or Bun runsmacOS 14 or later, Apple Silicon
Installnpx ccusage@latestbrew install --cask claudoscope
Agents coveredClaude Code plus 17 other CLIs (Codex, Gemini CLI, OpenCode, Amp, Copilot CLI and more)Claude Code and Claude Cowork
Reportsdaily, weekly, monthly, session, blocks (5-hour windows), statusline (beta)Analytics by project, model, and day; cache hit rate; what-if calculator for model swaps
Live viewRemoved in v18 (blocks --live existed in v17)Menu bar widget with a live cost figure per running session
Browse a session's transcriptNo, usage totals onlyYes: full chat view, search, per-edit file diffs, subagent linkage
Secret scanningNoYes, regex plus entropy, with an on-screen alert while the session is active
Cost alertsNoFour rules: single-session cap, rolling window, daily, monthly
NotificationsNo"Claude needs you" and "Your turn", with terminal tab focus
Config linting and hardeningNo85 lint rules, 13 drift checks, one-click reversible baseline
Scripting interface--json on every reportRead-only MCP server with nine tools, so Claude Code itself can ask
Cost sourceClaude Code's costUSD field when present, otherwise LiteLLM pricing tables; --mode auto, calculate, or displayPer-message pricing tables for Anthropic or Vertex AI, reconciled against real invoices
Web search feesNot included, per the ccusage docsBilled at a cent per search, read from toolUseResult.searchCount
Offline--offline uses cached pricingAlways offline
ConfigJSON config files with schemaSettings window, nothing to configure by default
Price and licenseFree, MITFree, MIT

Where the cost numbers diverge

Run both on the same day and you will usually get numbers a few percent apart. The ccusage docs show this themselves: their cost-modes page has an example day at $12.45 in display mode and $12.38 in calculate mode, from the same transcript. Here is where the gaps come from.

ccusage in its default auto mode prefers the costUSD value that Claude Code writes into some JSONL records, and falls back to computing from tokens when that field is missing. Claudoscope prices every message from its own tables instead, because I wanted one consistent method across old and new transcripts and across the Anthropic and Vertex price lists.

Claudoscope bills web search. Claude Code records the count in toolUseResult.searchCount, and the documented server_tool_use.web_search_requests field is always zero in transcripts. I only found this by reconciling against a real bill. ccusage's docs say tool API calls like web search are not included, so on a research-heavy day it will read low by a cent per search.

Claude Code's JSONL contains partial streaming records with a null stop_reason. Sum every record and you double-count. Claudoscope dedupes these; I shipped that bug once and my estimates ran 1.5 to 2x over the Vertex invoice until I caught it. I have not audited how ccusage handles this, so I will not claim it gets it wrong.

Model families matter too. Claudoscope matches a closed list of the generations that billed at older rates and prices anything unrecognized at the current rate, because a model id it has never seen is more likely new than ancient. ccusage takes its table from LiteLLM and models.dev with historical schedules keyed by timestamp. Both approaches work; they will disagree for a few days after a new model ships.

None of this makes either tool wrong. Your bill is the Console usage page or your cloud provider's invoice. Everything else is an estimate, and both projects say so.

When ccusage is the better choice

Pick ccusage if any of these describe you.

You are not on an Apple Silicon Mac. Claudoscope will not run, and I have no plans to port it.

The number needs to end up somewhere other than a screen: a script, a CI step, a nightly report, a dashboard you already own. ccusage daily --json is exactly that interface, and there is no equivalent in Claudoscope short of asking Claude Code over MCP.

Several agent CLIs are in play and one report across all of them is the goal. Claudoscope only understands Claude Code and Cowork transcripts.

A cost readout in Claude Code's own status line is what you are after. ccusage statusline does that, although Claude Code's built-in status line now has a cost field too.

Another app running in the background is one too many. ccusage runs when you call it and exits.

When Claudoscope is the better choice

Pick Claudoscope if the totals are not the point.

You want to find a session, not just its cost. Search by what you asked, open the transcript, see every file Claude edited with the diffs, jump to the moment it happened.

You want to be told while it is happening: a session burning through a rolling-window threshold, a credential that just landed in a transcript, Claude sitting on a permission prompt while you read something else.

You are on the Enterprise API. There is no per-session spend anywhere in Anthropic's tooling for that setup, and cookie-based trackers cannot see it either. Both ccusage and Claudoscope work there because they read files, but only one of them keeps the history and alerts you.

You care what ended up in those transcripts. Claude Code writes everything it reads into them, including the .env file that started this whole project.

You want to ask in plain language. With the MCP server on, "what did I spend on this project last week, by model" is a prompt in Claude Code, answered from your local data.

Running both

They do not conflict. Both are read-only against the JSONL, and Claudoscope's SQLite index is a separate file, so ccusage never sees it. I keep ccusage around for the --json output and for checking my own numbers against a second implementation. When the two disagree by more than a few percent, one of us has a pricing table bug, and more than once it was me.

Coming from ccusage: what maps to what

ccusageClaudoscope
ccusage dailyAnalytics, day view
ccusage weekly or monthlyAnalytics with a date range, or the daily and monthly cost alerts
ccusage sessionSessions list, sorted by cost
ccusage blocksNo 5-hour block view. The rolling-window alert (5 minutes to 4 hours) covers the "am I burning right now" case, but if you plan around Anthropic's billing windows this is a real gap
--projectThe project filter above the sidebar
--jsonThe get_usage MCP tool
--mode calculateThe only mode; Claudoscope always calculates

One more thing ccusage users notice: Claudoscope's first launch on a large corpus does a full parse in the background, then paints from the SQLite cache on every launch after that. On my roughly 3,000 sessions across 74 projects that is sub-second once the cache exists.

Install

Free, MIT licensed, macOS 14 or later on Apple Silicon:

brew tap cordwainersmith/claudoscope
brew install --cask claudoscope

Or take the DMG from the releases page. If you decide ccusage is the better fit, it is at ccusage.com and I mean that without any edge to it.

Start exploring your Claude Code sessions, free and open source.

Free, MIT-licensed, and maintained in the open. Requires macOS 14.0 (Sonoma) or later.