Usage analytics for Claude Code CLI
Project description
Claude Code Stats
Usage analytics for Claude Code CLI - see how much time you actually spend using Claude Code.
Features
- Active Time Tracking: Estimates actual usage time by analyzing gaps between messages (accounts for idle periods, breaks, and sessions left open overnight)
- Session Analytics: Track session counts, message breakdowns, and efficiency metrics
- HTML Stats Cards: Generate shareable cards for Reddit, social media, or your website (dark and light themes)
- Token Usage: Track input/output tokens per day with message and token ratios
- Command Usage: Monitor
/clearand/compactcommand frequency - Model Statistics: View token usage by model from Claude Code's cache
- Hourly Distribution: See when you're most active with Claude Code
Installation
Quick Start (No Installation)
# Clone and run directly
git clone https://github.com/joshroman/claude-code-stats.git
cd claude-code-stats
python3 claude_code_stats.py
Install as Package
pip install claude-code-stats
Or install from source:
git clone https://github.com/joshroman/claude-code-stats.git
cd claude-code-stats
pip install .
Usage
# Print markdown report to terminal
claude-code-stats
# Save report to file
claude-code-stats -o report.md
# Generate shareable HTML card (compact)
claude-code-stats --html card -o stats.html
# Generate full HTML stats card with chart
claude-code-stats --html full -o stats.html
# Specify time period (7, 30, or 90 days)
claude-code-stats --html full --period 30 -o stats.html
# Include token usage in markdown report
claude-code-stats --tokens
# Custom idle threshold (default: 15 minutes)
claude-code-stats --gap-threshold 10
# Quiet mode (no progress messages)
claude-code-stats -q -o report.md
# Light mode (Anthropic brand colors)
claude-code-stats --html full --light -o stats.html
# Add GitHub username to card
claude-code-stats --html full --username @yourname -o stats.html
Options
| Option | Description |
|---|---|
-o, --output FILE |
Save report to file (default: print to stdout) |
--html card|full |
Generate HTML output: card for compact, full for detailed with chart |
-p, --period 7|30|90 |
Time period for HTML output (default: 7 days) |
-t, --tokens |
Include token usage columns in markdown daily breakdown |
-g, --gap-threshold MINS |
Minutes of inactivity before counting as idle (default: 15) |
--light |
Use light theme with Anthropic brand colors |
-u, --username NAME |
GitHub username to display on HTML cards (or set GITHUB_USERNAME in .env) |
-q, --quiet |
Suppress progress messages |
-V, --version |
Show version number |
Sample Output
# Claude Code Usage Report
Generated: **2025-12-31 10:59**
## Summary
| Period | Sessions | Messages | Active Time | Wall-Clock | Efficiency |
|--------|----------|----------|-------------|------------|------------|
| Last 7 days | 273 | 35938 | **68.4h** | 453.6h | 15% |
| Last 30 days | 871 | 99885 | **191.9h** | 2370.9h | 8% |
## Last 7 Days - Daily Breakdown
| Date | Sessions | Active | Clock | User Msgs | Claude Msgs | Clears | Compacts |
|------|----------|--------|-------|-----------|-------------|--------|----------|
| 2025-12-31 | 22 | 9.4h | 21.2h | 260 | 3026 | 31 | 42 |
| 2025-12-30 | 34 | 11.9h | 2.5d | 306 | 3251 | 6 | 63 |
...
How It Works
Data Sources
Claude Code stores conversation data in ~/.claude/:
projects/**/*.jsonl- Conversation transcripts with timestamps__store.db- SQLite database with response timing datastats-cache.json- Pre-computed usage statistics
Methodology
Active Time is calculated by:
- Loading all message timestamps from conversation files
- Calculating gaps between consecutive messages
- Summing gaps that are ≤ threshold (default: 15 minutes)
- Longer gaps indicate idle time (bathroom breaks, meetings, left overnight)
This prevents inflated numbers from sessions that were left open but not actively used.
Metrics Explained
| Metric | Description |
|---|---|
| Active Time | Estimated actual usage (gaps ≤ threshold) |
| Wall-Clock Time | Total time from first to last message (includes idle) |
| User Prompts | Actual human messages (excludes tool results and system messages) |
| Claude Msgs | Number of Claude assistant responses |
| Tool Results | Tool/function call results returned to Claude |
| Message Ratio | Claude messages ÷ User prompts (how much Claude responds per prompt) |
| Token Ratio | Output tokens ÷ Input tokens |
| Clears | Number of /clear commands used |
| Compacts | Number of /compact commands + auto-compactions |
Requirements
- Python 3.8+
- Claude Code installed and used at least once
No external dependencies required - uses only Python standard library.
Privacy
This tool only reads data from your local ~/.claude/ directory. No data is sent anywhere - all processing happens locally on your machine.
Contributing
Contributions welcome! Please feel free to submit issues and pull requests.
License
MIT License - see LICENSE for details.
Related
- Claude Code - Anthropic's official CLI for Claude
- Claude Code Documentation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file claude_code_stats-0.1.1.tar.gz.
File metadata
- Download URL: claude_code_stats-0.1.1.tar.gz
- Upload date:
- Size: 15.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a33d6b72120520c1094e3a01bdba74e83a057dff0869ac3ac19ed4e787042577
|
|
| MD5 |
cd647dd8e63ee9395652ad0a49ae216b
|
|
| BLAKE2b-256 |
697cdd88ee3e526e659dd48fa0b70f77cde5737a4a1bc561bc245a4afd031824
|
File details
Details for the file claude_code_stats-0.1.1-py3-none-any.whl.
File metadata
- Download URL: claude_code_stats-0.1.1-py3-none-any.whl
- Upload date:
- Size: 23.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a579d4180a904d3530095eb42f04756d52be0cc40fa5f7ed51c8d3ebbd010ea5
|
|
| MD5 |
354b53bddb8aa0c78627f7c55f485849
|
|
| BLAKE2b-256 |
07a50389a46081ca6b6776b9588dda492c9781320f51f8ae0f6514444957f33a
|