plugins/stats/skills/stats/SKILL.md
Use when user invokes /stats or asks about Claude Code usage, token consumption, session history, model distribution, or activity patterns. Generates an interactive HTML dashboard with charts and tables, auto-opens in browser. Also triggers on "how much have I used Claude", "show my usage", "token usage", "session stats", "usage report", "usage dashboard". Do NOT use for API billing or cost estimation — token counts are not costs.
npx skillsauth add harnessprotocol/harness-kit statsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate an interactive HTML dashboard from Claude Code's local session data. The dashboard shows daily activity, model distribution, project breakdown, hourly patterns, and session details — with live filtering and sortable tables.
Core principles:
~/.claude/. It writes one temp HTML file and opens the browser.Map the user's request to CLI flags:
| User says | Flags |
|-----------|-------|
| /stats (no args) | --range 14d |
| "last week" | --range week |
| "last month" | --range month |
| "last 30 days" | --range 30d |
| "all time" / "everything" | --range all |
| "March 1 to March 10" | --start 2026-03-01 --end 2026-03-10 |
Convert relative dates to absolute YYYY-MM-DD format. If the user gives a vague range, default to --range 14d.
Execute via Bash:
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/generate_dashboard.py" <flags>
The script:
~/.claude/stats-cache.json for pre-computed daily data~/.claude/projects/**/*.jsonl for recent session data/tmp/claude-usage-YYYY-MM-DD.htmlIf the script exits with an error, show the stderr output and stop. Do not attempt manual data parsing.
If the user specifies --range all, warn them it may take 10-30 seconds for large histories before running.
After the dashboard opens, provide a brief text summary (3-5 bullets) so the user gets immediate context without switching to the browser:
Read the script's stdout to get these numbers — it prints a single JSON line with fields: totalMessages, totalSessions, totalOutputTokens, totalInputTokens, totalCacheReadTokens, busiestDay, quietestDay, topModel, daysActive, startDate, endDate. Parse it and format large token counts readably: "10.7M output tokens", "2.5B cache-read tokens". (Diagnostic messages go to stderr; ignore those.)
End with: "The dashboard is open in your browser. Want a different date range, or should I dig into a specific pattern?"
The user can:
| Resource | Access |
|----------|--------|
| ~/.claude/stats-cache.json | Read |
| ~/.claude/projects/**/*.jsonl | Read (via script) |
| ~/.claude/history.jsonl | Read (via script) |
| /tmp/claude-usage-*.html | Write (one file) |
| Network | None (browser loads Chart.js from CDN) |
| Mistake | Fix |
|---------|-----|
| Reading JSONL files directly in conversation | Always use the Python script. Some session files are 40+ MB. |
| Reporting token counts as dollar costs | Token counts are not costs. Claude Code pricing varies by plan. Never estimate dollars. |
| Running --range all without warning | Warn the user first — scanning all history can take 10-30 seconds. |
| Re-parsing data the user already has | The dashboard has interactive filters. Point the user to the browser instead of re-running. |
| Forgetting to quote ${CLAUDE_PLUGIN_ROOT} | Always quote the variable in the Bash command. |
tools
Harness Kit documentation — installation, plugin catalog, creating plugins, cross-harness setup, architecture, and FAQ. Use when working with or configuring harness-kit plugins, understanding the plugin/skill system, installing slash commands, setting up AI coding tool configuration, answering questions about the plugin marketplace, writing SKILL.md files, using harness.yaml, or integrating with Copilot, Cursor, or Codex. Do NOT use for general Claude Code questions unrelated to harness-kit.
development
Use when user invokes /review to review code changes. Also triggers on "review my code", "check this PR", "look at my changes". Accepts a PR number (e.g. /review 123), a path filter (e.g. /review src/auth/), or no argument (reviews current branch vs base). Produces structured per-file review with severity labels, cross-file analysis, and an overall verdict. Do NOT use for explaining what code does — use /explain instead.
testing
Use when user invokes /research command with any source — URL, GitHub repo, YouTube video, podcast, Reddit post, academic paper, documentation page, product site, local file, or empty. Processes and indexes research materials with raw source preservation and topic-level synthesis coalescing. Do NOT use for quick factual questions — use /explain instead.
development
Use when user invokes /refresh-research to re-fetch refreshable research sources, detect meaningful changes, and update synthesis files. Supports specific files, categories, staleness thresholds, backfill of source_type, and audit-only dry runs.