app_mouse_test.go: - TestTabAtXMatchesTabWidths: Verifies that tabAtX() correctly maps X coordinates to tab indices for all active tab states - Uses tabWidthForTest() helper that mirrors TabVisualWidth() logic - Catches regressions where tab hit detection drifts from rendering card_fix_test.go: - TestCardRowBackgroundFill: Verifies that CardRow() properly equalizes card heights and fills backgrounds on shorter cards - Forces TrueColor profile in init() to ensure ANSI codes generate - Validates that padding lines contain ANSI escape sequences, confirming background styling isn't stripped These tests guard against visual regressions that are hard to catch in manual testing, particularly the subtle issue where short cards in a row would have "punched out" gaps where their backgrounds didn't extend to match taller neighbors. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
cburn
A CLI and TUI dashboard for analyzing Claude Code usage metrics. Parses JSONL session logs from ~/.claude/projects/, computes token usage, costs, cache efficiency, and activity patterns.
Installation
go install github.com/theirongolddev/cburn@latest
Or build from source:
git clone https://github.com/theirongolddev/cburn.git
cd cburn
make install
Requires Go 1.24+.
Note: Ensure ~/go/bin is in your PATH:
# bash/zsh: add to ~/.bashrc or ~/.zshrc
export PATH="$HOME/go/bin:$PATH"
# fish: add to ~/.config/fish/config.fish
fish_add_path ~/go/bin
Quick Start
cburn # Summary of usage metrics
cburn tui # Interactive dashboard
cburn costs # Cost breakdown by token type
cburn status # Claude.ai subscription status
cburn daemon --detach # Background usage daemon + local API
CLI Commands
| Command | Description |
|---|---|
cburn |
Usage summary (default) |
cburn summary |
Detailed usage summary with costs |
cburn costs |
Cost breakdown by token type and model |
cburn daily |
Daily usage table |
cburn hourly |
Activity by hour of day |
cburn sessions |
Session list with details |
cburn models |
Model usage breakdown |
cburn projects |
Project usage ranking |
cburn status |
Claude.ai subscription status and rate limits |
cburn daemon |
Background daemon with JSON/SSE usage API |
cburn config |
Show current configuration |
cburn setup |
Interactive first-time setup wizard |
cburn tui |
Interactive dashboard |
Global Flags
-n, --days INT Time window in days (default: 30)
-p, --project STRING Filter to project (substring match)
-m, --model STRING Filter to model (substring match)
-d, --data-dir PATH Claude data directory (default: ~/.claude)
-q, --quiet Suppress progress output
--no-cache Skip SQLite cache, reparse everything
--no-subagents Exclude subagent sessions
Examples:
cburn -n 7 # Last 7 days
cburn costs -p myproject # Costs for a specific project
cburn sessions -m opus # Sessions using Opus models
cburn daily --no-subagents # Exclude spawned agents
cburn daemon --detach # Start daemon in background
cburn daemon status # Check daemon health and latest totals
cburn daemon stop # Stop daemon
Daemon Mode
cburn daemon runs a long-lived polling service that keeps usage snapshots warm and exposes local endpoints for downstream tools.
Default endpoint: http://127.0.0.1:8787
GET /healthz- liveness probeGET /v1/status- current aggregate snapshot and daemon runtime statusGET /v1/events- recent event buffer (JSON array)GET /v1/stream- Server-Sent Events stream (snapshot,usage_delta)
Example:
cburn daemon --detach --interval 10s
curl -s http://127.0.0.1:8787/v1/status | jq
TUI Dashboard
Launch with cburn tui. Navigate with keyboard:
| Key | Action |
|---|---|
o / c / s / b / x |
Jump to Overview / Costs / Sessions / Breakdown / Settings |
<- / -> |
Previous / Next tab |
j / k |
Navigate lists |
J / K |
Scroll detail pane |
Ctrl+d / Ctrl+u |
Scroll half-page |
Enter / f |
Expand session full-screen |
Esc |
Back to split view |
r |
Refresh data |
R |
Toggle auto-refresh |
? |
Help overlay |
q |
Quit |
Tabs
- Overview - Summary stats, daily activity chart, live hourly/minute charts
- Costs - Cost breakdown by token type and model, cache savings
- Sessions - Browseable session list with detail pane
- Breakdown - Model and project rankings
- Settings - Configuration management
Themes
Four color themes are available:
flexoki-dark(default) - Warm earth tonescatppuccin-mocha- Pastel colorstokyo-night- Cool blue/purpleterminal- ANSI 16 colors only
Change via cburn setup or edit ~/.config/cburn/config.toml.
Configuration
Config file: ~/.config/cburn/config.toml
[general]
default_days = 30
include_subagents = true
[claude_ai]
session_key = "sk-ant-sid..." # For subscription/rate limit data
[admin_api]
api_key = "sk-ant-admin-..." # For billing API (optional)
[appearance]
theme = "flexoki-dark"
[budget]
monthly_usd = 100 # Optional spending cap
[tui]
auto_refresh = true
refresh_interval_sec = 30
Environment Variables
| Variable | Description |
|---|---|
CLAUDE_SESSION_KEY |
Claude.ai session key (overrides config) |
ANTHROPIC_ADMIN_KEY |
Admin API key (overrides config) |
Claude.ai Session Key
The session key enables:
- Real-time rate limit monitoring (5-hour and 7-day windows)
- Overage spend tracking
- Organization info
To get your session key:
- Open claude.ai in your browser
- DevTools (F12) > Application > Cookies > claude.ai
- Copy the
sessionKeyvalue (starts withsk-ant-sid...)
Caching
Session data is cached in SQLite at ~/.cache/cburn/metrics_v2.db. The cache uses mtime-based diffing - unchanged files are not reparsed.
Force a full reparse with --no-cache.
Development
make build # Build ./cburn binary
make install # Install to ~/go/bin
make lint # Run golangci-lint
make test # Run unit tests
make test-race # Tests with race detector
make bench # Pipeline benchmarks
make fuzz # Fuzz the JSONL parser (30s default)
make clean # Remove binary and test cache
Architecture
~/.claude/projects/**/*.jsonl
-> source.ScanDir() + source.ParseFile() (parallel parsing)
-> store.Cache (SQLite, mtime-based incremental)
-> pipeline.Aggregate*() functions
-> CLI renderers (cmd/) or TUI tabs (internal/tui/)
| Package | Role |
|---|---|
cmd/ |
Cobra CLI commands |
internal/source |
File discovery and JSONL parsing |
internal/pipeline |
ETL orchestration and aggregation |
internal/store |
SQLite cache layer |
internal/model |
Domain types |
internal/config |
TOML config and pricing tables |
internal/daemon |
Background polling daemon + local HTTP/SSE API |
internal/cli |
Terminal formatting |
internal/claudeai |
Claude.ai API client |
internal/tui |
Bubble Tea dashboard |
internal/tui/components |
Reusable TUI components |
internal/tui/theme |
Color schemes |
License
MIT