ccstats

ccstats is a fast CLI for token and cost usage analytics for Claude Code, OpenAI Codex, Cursor, and Grok logs.
Search keywords: claude code usage stats, codex usage stats, cursor usage stats, token usage cli, ai token cost tracker.
Highlights
- Fast local analysis of usage JSONL logs
- Claude Code support (
~/.claude/projects/) - OpenAI Codex support (
~/.codex/sessions/) - Experimental Cursor support (
Cursor/User/globalStorage/state.vscdb) - Grok support (
~/.grok/sessions/) - Daily/weekly/monthly/project/session views
- Top-N leaderboard ranking models or projects by cost share
- Optional model-level token and cost breakdown
- Reusable Rust SDK for embedding local usage and cost summaries in other apps
Installation
Homebrew (macOS/Linux)
Cargo binstall (prebuilt binary)
Cargo install (from source)
Shell script
|
# Install a specific version
| VERSION=v0.2.63
Manual download
Download prebuilt archives and SHA-256 checksums from GitHub Releases.
Quick Start (Codex)
# Install
# Today
# Daily trend
# Same result via unified source flag
Quick Start (Cursor)
Cursor support is experimental because Cursor's local database schema is not a public API. ccstats reads local SQLite tokenCount fields only and does not estimate missing usage.
# Install
# Today
# Daily trend
# Same source via alias
Quick Start (Grok)
Grok support reads local session summary.json, signals.json, and fallback updates.jsonl metadata under ~/.grok/sessions/. These files expose local context-token snapshots, not precise provider input/output billable usage or Grok account quota usage, so ccstats reports Grok context tokens as input tokens.
# Install
# Today's local context-token trend
# Daily local context-token trend
# Same source via alias
Crate Documentation
- docs.rs: https://docs.rs/ccstats/latest/ccstats/
- crates.io: https://crates.io/crates/ccstats
- The crate-level Rustdoc in
src/lib.rsexplains the SDK entry points and CLI runtime.
Rust SDK
ccstats can be used as a Rust library when another app needs structured local usage and cost data without spawning the CLI.
use ;
let summary = summarize_cost_with_cli_config?;
println!;
The SDK uses the same source registry, parsers, aggregation logic, pricing cache, and fallback pricing as the CLI. Use summarize_cost_with_cli_config when SDK output should follow the same persisted CLI defaults for timezone, offline pricing, strict pricing, and currency. Use summarize_cost when the caller wants fully explicit options. Returned summaries include total tokens, cache read/create tokens, reasoning tokens, per-model breakdowns, cost_usd, and an optional converted cost when SummaryOptions::currency is set.
Usage
Claude Code
# Today's usage
# Daily breakdown
# Weekly summary
# Monthly summary
# By project
# By session
# 5-hour billing blocks
# Top-N leaderboard (ranks by cost, falls back to tokens when costs unknown)
# With model breakdown
# JSON output
# Debug mode (timing info)
OpenAI Codex
# Codex subcommand mode
# Or use unified source flag
# Today's Codex usage
# Daily Codex breakdown
# Weekly Codex summary
# By session
# With model breakdown
Cursor (Experimental)
Cursor uses the unified source flag rather than a dedicated subcommand.
# Today's Cursor usage
# Daily Cursor breakdown
# Weekly Cursor summary
# By session/conversation
# Cursor alias
By default, ccstats checks these local Cursor databases:
- macOS:
~/Library/Application Support/Cursor/User/globalStorage/state.vscdb - Linux:
~/.config/Cursor/User/globalStorage/state.vscdb workspaceStorage/*/state.vscdbunder the same Cursor user directory
You can override the Cursor user directory with CURSOR_HOME:
CURSOR_HOME="/path/to/Cursor/User"
Current limitations:
- Only explicit
tokenCount/usage fields are counted. - Project aggregation and 5-hour billing blocks are not supported for Cursor.
- Cache creation, cache read, and reasoning token fields are reported as zero unless Cursor exposes them directly in a supported local record.
Grok
# Today's Grok local context-token trend
# Daily Grok local context-token breakdown
# Weekly Grok local context-token summary
# By session
# By project
# Grok alias
By default, ccstats checks Grok session files under:
~/.grok/sessions/**/summary.json~/.grok/sessions/**/signals.json~/.grok/sessions/**/updates.jsonlwhensignals.jsonis missing
You can override the Grok home directory with GROK_HOME:
GROK_HOME="/path/to/.grok"
Current limitations:
- Grok local session files expose context token usage, not exact provider input/output usage.
- These local context-token totals may not match Grok account, quota, or 5-hour usage UI totals when those views use server-side accounting.
- ccstats reports Grok context tokens as input tokens and leaves output, cache creation, cache read, and reasoning token fields at zero.
- Grok 5-hour billing blocks are not supported.
Common Options
# Bucket by timezone
# Locale-aware number formatting
# Filter by date
# Monthly budget forecast (uses --until as the as-of date when present)
# Select data source explicitly (supports aliases)
# Combine all supported data sources
# Experimental Cursor source (reads local SQLite tokenCount fields)
# Cursor alias
# Grok source and alias
# Offline mode (use cached pricing)
# Compact output
# Hide cost column
Session CSV Columns
ccstats session --csv now includes:
reasoning_tokenscache_creation_tokenscache_read_tokens
Parsing Warnings
When malformed JSONL records are encountered, ccstats reports them in stderr:
Warning: ignored <N> malformed records
Supported Data Sources
| Source | Directory | Features |
|---|---|---|
| Claude Code | ~/.claude/projects/ |
Projects, Billing Blocks, Deduplication |
| OpenAI Codex | ~/.codex/sessions/ |
Reasoning Tokens |
| All Sources | Multiple | Combined daily/weekly/monthly/today/statusline summaries |
| Cursor (experimental) | Cursor User/globalStorage/state.vscdb |
Local SQLite tokenCount fields only |
| Grok | ~/.grok/sessions/ |
Context-token session summaries, Projects |
Architecture
See docs/ARCHITECTURE.md for:
- Adding new data sources
- Data flow and processing pipeline
- Caching mechanism
- Architecture and module boundaries
See docs/algorithm/authoritative-token-accounting.md for:
- Token accounting rules
- Source-specific normalization
- Deduplication semantics
License
MIT. See LICENSE.