Persistent usage cache
Release log
Every vibestats ship, in one place.
CLI fixes, web changes, model support, and migration notes. Written for people who want the diff without reading the diff.
Public releases tracked from package history.
Launch-era notes stay visible for debugging old installs.
4 recent releases sit at the top.
Current window
Recent work
The top releases stay expanded so new CLI behavior, model naming, and hosted page changes are easy to scan.
Persistent usage cache
Added a local persistent cache so repeated CLI stats commands reuse unchanged usage sources while keeping refresh and bypass controls available.
- Repeated usage, activity, wrapped, Codex, and combined stats runs now reuse cached file-level parses when source fingerprints are unchanged.
- Added --no-cache and --refresh-cache for one-off bypasses or forced cache rebuilds.
- Cache invalidation tracks Claude JSONL, Codex sessions, Factory pairs, and OpenCode database WAL files while using atomic best-effort writes.
Usage command aliases
Made live limit commands easier to discover by routing bare usage scopes to the same local limit view and adding help for unknown commands.
- Bare usage scopes such as usage all and usage codex now open the local live limit view unless stats flags are provided.
- Usage stats flags such as total, daily, and since still keep the token usage table behavior for combined or Codex-only stats.
- Unknown positional commands now exit with a concise help message instead of silently scanning usage data.
Local usage limits
Added local CLI limit views for Claude and Codex with provider-colored progress bars and weekly pace signals.
- Added limits commands for Claude, Codex, and combined local rate-limit snapshots without provider API keys.
- Claude usage now reads the interactive usage view through a temporary tmux session and cleans it up after capture.
- Codex limits use the local app-server path and render alongside Claude with blue and green progress bars plus reserve or deficit pace output.
Opus 4.7 model labels
Updated model handling for the latest Opus release and added a Claude-only family filter.
- Generic Opus usage now displays as Opus 4.7 while existing Opus 4.6 usage remains versioned separately.
- Added the o47 share token so CLI-generated links and hosted pages preserve the new Opus label.
- Added a Claude family filter alongside the existing Kimi and MiniMax filters.
Kimi and MiniMax usage filters
Added first-class family filters for Kimi and MiniMax across usage, wrapped, activity, and share output.
- Added `--kimi` and `--minimax` filters that narrow local usage stats to just those model families across Claude-compatible, OpenCode, Factory, and Codex-backed sources.
- Normalized Kimi-code and MiniMax-code aliases so local model labels and shared pages stay consistent.
- Extended the web share and legacy views so filtered stats render with family-specific titles instead of generic Claude/Codex labels.
MiniMax and Kimi multi-source stats
Expanded Claude-compatible ingestion beyond raw Claude JSONL so MiniMax and Kimi usage now lands correctly in usage tables, wrapped stats, and hosted shares.
- Added local ingestion from Claude projects, OpenCode, and Droid/Factory sessions instead of relying on just one Claude-compatible store.
- Fixed the Claude-compatible dedup logic that was dropping later usage-bearing assistant events and undercounting MiniMax and Kimi tokens.
- Applied official routed pricing for Fireworks Kimi K2.5 Turbo and Fireworks MiniMax M2 family rates so the new models contribute real cost instead of $0.
Subagent-aware stats and Claude diagnostics
Fixed the biggest stats correctness issue in the CLI by separating canonical main sessions from subagents while keeping token and cost totals intact.
- Claude and Codex session counts now distinguish main sessions from subagents instead of inflating headline session totals.
- Added `--claude-system` and `--claude-limits` commands for inspecting `~/.claude.json`, `~/.claude/usage-data`, cache freshness, and local rate-limit signals.
- Refined the web share surfaces again with restored legacy usage/wrapped balance, tighter activity hover layout, and cleaner host-aware share behavior.
Web-hosted share URLs
Shifted the CLI to emit share links that stay on the vibestats web host instead of exposing backend endpoints.
- CLI share output now prefers user-facing web URLs.
- Prepared the ground for the later share-page visual cleanups and host redirect fixes.
Share publishing stabilisation
Cleaned up release metadata and fixed the publishing path for vibestats shares.
- Resolved share publishing failures that could break generated share pages.
- Tightened release metadata so the CLI and hosted share flow stayed in sync.
Activity heatmap and hosted sharing
Introduced the bigger second wave of web functionality: activity graphs, richer share artifacts, and deployment support.
- Added the GitHub-style activity heatmap view.
- Introduced the share artifact system and hosted share pages.
- Added Docker deployment support for the web app.
Model naming cleanup
Polished model naming and filtering so the Claude and Codex views read like product names instead of raw internals.
- Fixed Sonnet 4.6 to show the proper display name instead of a generic `Sonnet` label.
- Filtered GPT-family models out of the Claude-only presentation and tightened footer copy.
Codex names in share UI
Made the hosted share pages understand and render Codex model names correctly.
- Web share UI now shows Codex model display names instead of awkward raw identifiers.
- Synced the CLI package metadata for the 1.3.3 line.
Release metadata sync
Small release to align package metadata and published versioning.
- Synced package metadata to the intended release state.
Full GPT-5.x Codex variant support
Expanded Codex model detection so the CLI recognizes the broader GPT-5.3, 5.2, and 5.1 Codex variant set cleanly.
- Added support for GPT-5.3, GPT-5.2, and GPT-5.1 Codex naming variants.
- Reduced raw-model fallbacks for Codex users.
Rolling windows for usage views
Added a cleaner way to inspect recent usage windows directly from the CLI.
- Added `--last N` date-window support for usage queries.
- Started the 1.3 release line with a more flexible usage-report workflow.
New model support
Expanded model awareness for the newer Claude and Codex-era releases.
- Added Opus 4.6 and GPT-5.3 model support.
Project and session drill-downs
Made the CLI much more useful for day-to-day debugging by adding finer filters and a stronger landing-page presentation.
- Added `--project` and `--sessions` flags for per-project and per-chat breakdowns.
- Added interactive visual effects to the landing pages.
Local timezone grouping
Corrected date bucketing so activity follows the user's local day instead of UTC rollover edges.
- Switched usage grouping from UTC date boundaries to local timezone-aware grouping.
Async loading and tier sorting
Improved the CLI feel for larger histories by making loading more responsive and model ordering more intuitive.
- Added async file loading with an animated spinner.
- Sorted Claude models by tier priority, keeping Opus above Sonnet and Haiku.
Launch-day packaging refresh
Small republish in the middle of the loading and spinner rollout.
- Stability release during the spinner/loading iteration cycle.
Launch-day packaging refresh
Another small republish while the CLI loading experience was being tuned.
- Intermediate release to keep the rollout moving during rapid CLI UX iteration.
TTY-safe spinner behaviour
Hardened the spinner logic so it still animates in more terminal environments.
- Forced spinner animation regardless of TTY detection quirks.
Single-line spinner compatibility
Reduced spinner complexity to improve terminal compatibility.
- Simplified the spinner to a single-line presentation for better compatibility.
Spinner hold-time fix
Kept the spinner visible long enough to feel intentional during quick operations.
- Forced a full minimum spinner display interval.
Spinner dwell polish
Smoothed the loading motion so it no longer flashes by too quickly.
- Added a minimum display time for the animated spinner.
Immediate spinner render
Removed the awkward initial pause before the loading indicator appeared.
- Rendered the first spinner frame immediately.
Wave spinner
Introduced the first branded CLI loading animation.
- Added the VIBESTATS wave animation spinner.
Wrapped URL polish
Cleaned up the wrapped share route and made the generated URL feel less brittle.
- Fixed wrapped shares to use the `/wrapped/` path correctly.
- Improved full share URL UX.
Orange share-link styling
Small presentation release focused on matching the vibestats visual language.
- Added orange styling to the usage share link.
Raw model normalization
Reduced duplicate model rows caused by inconsistent raw IDs.
- Normalized raw model IDs to prevent duplicate entries.
Parity fixes for usage decoding
Closed some of the biggest mismatches between vibestats, ccusage, and the web decoder.
- Deduplicated messages to better match ccusage totals.
- Added missing model-name mappings to the web decoder.
Historical stats-cache support
Added support for the Claude `stats-cache.json` path so older activity can be reconstructed more reliably.
- Loaded historical usage from `stats-cache.json`.
Automatic long-range monthly view
Made longer windows easier to scan without requiring manual aggregation switches.
- Automatically switched to monthly aggregation for long date ranges.
Codex session parsing fix
Brought Codex usage parsing in line with the real on-disk session format.
- Fixed Codex usage parsing to match actual session files.
Share URL correctness fixes
Resolved two of the most obvious share-flow routing issues.
- Fixed the shared usage window to show the last 31 days instead of the first 31.
- Redirected usage shortlinks to `/` instead of `/wrapped`.
Usage sharing foundations
Started the first real sharing workflow for usage reports and tightened the web chrome around it.
- Added the `--share` flag for usage stats.
- Added footer links on the web pages and refreshed vibestats branding docs.
Domain and filtering cleanup
Early polish release after the rename to vibestats.
- Updated URLs to `vibestats.wolfai.dev`.
- Filtered synthetic models out of user-facing output.
Sparkle logo and CLI typing animation
Added some of the first branded UI details to the web experience.
- Introduced the sparkle logo treatment and command typing animation on the landing page.
Token counting accuracy
Corrected the early CLI math so totals lined up with the reference tooling.
- Matched token counting more closely to ccusage.
Launch UI refresh
Quick visual polish pass right after the initial release.
- Refined the web UI with a sleeker launch look.
Initial release
The first public vibestats package, launched as Claude Code Wrapped.
- Shipped the initial Claude Code Wrapped CLI and web experience.