| name | codeburn-claude-cost-dashboard |
| description | Interactive TUI dashboard for visualizing Claude Code token usage, costs, and task breakdowns by project, model, and activity type. |
| triggers | ["show me my Claude Code spending","track AI coding token costs","visualize claude code usage","see where my AI tokens are going","install codeburn dashboard","export claude code cost report","check my coding AI spend today","analyze claude code session costs"] |
CodeBurn
Skill by ara.so — Daily 2026 Skills collection.
CodeBurn is an interactive TUI dashboard that reads Claude Code session transcripts directly from disk (~/.claude/projects/) and visualizes token usage, costs, and task breakdowns by project, model, activity type, MCP server, and tool. No API keys, no proxy — pure local file analysis.
Install
npm install -g codeburn
npx codeburn
Requirements: Node.js 20+, Claude Code installed (session data at ~/.claude/projects/)
Key Commands
codeburn
codeburn today
codeburn month
codeburn report -p month
codeburn status
codeburn status --format json
codeburn export
codeburn export -f json
codeburn install-menubar
codeburn uninstall-menubar
TUI Keyboard Navigation
| Key | Action |
|---|
← → arrow keys | Switch between Today / 7 Days / Month |
1 2 3 | Period shortcuts |
q | Quit |
What CodeBurn Tracks
13 Task Categories (deterministic, no LLM calls)
| Category | Trigger Pattern |
|---|
| Coding | Edit, Write tools |
| Debugging | Error/fix keywords + tool usage |
| Feature Dev | "add", "create", "implement" keywords |
| Refactoring | "refactor", "rename", "simplify" |
| Testing | pytest, vitest, jest in Bash |
| Exploration | Read, Grep, WebSearch without edits |
| Planning | EnterPlanMode, TaskCreate tools |
| Delegation | Agent tool spawns |
| Git Ops | git push/commit/merge in Bash |
| Build/Deploy | npm build, docker, pm2 |
| Brainstorming | "brainstorm", "what if", "design" |
| Conversation | No tools, pure text exchange |
| General | Skill tool, uncategorized |
One-Shot Rate
For edit-heavy categories, CodeBurn detects Edit → Bash → Edit retry cycles. The 1-shot rate shows what percentage of edit turns succeeded without retries. 90% means the AI got it right first try 9/10 times.
Pricing
Fetched from LiteLLM model prices, auto-cached 24h at ~/.cache/codeburn/. Covers input, output, cache write, cache read, and web search costs. Falls back to hardcoded prices if fetch fails.
Data Source
Claude Code stores session transcripts as JSONL:
~/.claude/projects/<sanitized-path>/<session-id>.jsonl
Each assistant entry contains: model name, token usage (input/output/cache_read/cache_write), tool_use blocks, timestamps. CodeBurn deduplicates by API message ID to prevent double-counting across sessions.
macOS Menu Bar Setup
brew install --cask swiftbar
codeburn install-menubar
To remove:
codeburn uninstall-menubar
Export Examples
codeburn export
codeburn export -f json
JSON Export Structure
{
"exported_at": "2026-04-14T10:00:00Z",
"periods": {
"today": {
"total_cost": 1.42,
"total_tokens": 284000,
"by_project": { "my-app": 0.89, "other-project": 0.53 },
"by_model": { "claude-sonnet-4-5": 1.10, "claude-opus-4-5": 0.32 },
"by_activity": {
"Coding": { "cost": 0.65, "turns": 34, "one_shot_rate"
...
...
Project Structure
src/
cli.ts # Commander.js entry point
dashboard.tsx # Ink TUI (React for terminals)
parser.ts # JSONL reader, dedup, date filter
models.ts # LiteLLM pricing, cost calculation
classifier.ts # 13-category task classifier
types.ts # Type definitions
format.ts # Text rendering (status bar)
menubar.ts # SwiftBar plugin generator
export.ts # CSV/JSON multi-period export
Programmatic Usage (TypeScript)
If you want to integrate CodeBurn's parsing logic into your own scripts:
import { parseSessions } from 'codeburn/parser';
import { calculateCost } from 'codeburn/models';
import { classifyTurn } from 'codeburn/classifier';
const sessions = await parseSessions({
startDate: new Date('2026-04-01'),
endDate: new Date('2026-04-14'),
});
for (const turn of sessions.turns) {
const category = classifyTurn(turn);
const cost = await calculateCost(turn.model, turn.usage);
console.log(`${category}: $${cost.toFixed(4)}`);
}
import { getStatus } from 'codeburn/format';
const status = await getStatus();
console.log(status);
const statusJson = await getStatus({ format: 'json' });
const data = JSON.parse(statusJson);
Common Patterns
Daily Cost Check in CI/Shell Scripts
#!/bin/bash
SPEND=$(codeburn status --format json | jq '.today.cost')
echo "Today's Claude spend: \$$SPEND"
if (( $(echo "$SPEND > 5.00" | bc -l) )); then
echo "⚠️ High AI spend today: \$$SPEND"
fi
Export and Analyze with jq
codeburn export -f json | jq '.periods["7d"].by_model'
codeburn export -f json | jq '
.periods["30d"].by_project
| to_entries
| sort_by(-.value)
| .[0]
'
Automate Weekly Reports
#!/bin/bash
OUTPUT_DIR="$HOME/ai-cost-reports"
mkdir -p "$OUTPUT_DIR"
DATE=$(date +%Y-%m-%d)
codeburn export -f json > "$OUTPUT_DIR/week-$DATE.json"
codeburn status >> "$OUTPUT_DIR/history.log"
echo "[$DATE] Report saved to $OUTPUT_DIR/week-$DATE.json"
Troubleshooting
No data shown / "No sessions found"
ls ~/.claude/projects/
ls ~/.claude/projects/<project-name>/
node --version
Pricing fetch fails / shows $0.00
rm -rf ~/.cache/codeburn/
codeburn today
Menu bar widget not updating
codeburn uninstall-menubar
codeburn install-menubar
Double-counted costs
CodeBurn deduplicates by API message ID automatically. If you see unexpectedly high numbers, check for duplicate JSONL files:
find ~/.claude/projects/ -name "*.jsonl" | xargs wc -l | sort -rn | head -20
TUI rendering issues
echo $TERM
COLORTERM=truecolor codeburn
Related
- ccusage — inspiration for this project
- LiteLLM — model pricing data source
- SwiftBar — macOS menu bar plugin host