Release notes

FEATURE

HTML reports now feature interactive date filtering, letting recipients explore data instantly without installing an app

When emailing an exported HTML report to teammates or managers, recipients can now freely select the date range they want to inspect right on the page.

Previously, the report locked its timeframe at generation time, leaving recipients unable to adjust the view; switching to last week's numbers meant asking you to rerun the command. The new version directly embeds an ~80 KB summary table of "day × tool × model × project" into the page, and every date-dependent section recalculates live in the browser. A sticky date bar at the top provides five shortcut ranges and a custom from/to range. No app or regeneration is required, keeping shared files fully functional. Sections covering a fixed number of days clearly indicate their span, preventing users from assuming the view is broken when switching dates.

FEATURE

Cleaning up transcripts no longer erases usage history, with snapshots persisting totals and costs

Deleting old conversation transcripts to free up disk space no longer wipes out historical reports. Previously, reports recomputed everything from ~/.claude/projects and ~/.codex/sessions, which grow by roughly 1.9 GB each month, so clearing old files meant erasing history. The new version saves subtotal snapshots across five dimensions—session, date, tool, model, and project—into ~/.usage/usage_snapshot.json, while also recording each session's start time and duration so rankings survive. If a given day's loaded tokens are fewer than in the snapshot, that day is restored from the snapshot. Saved costs are kept as-is rather than repriced against today's prices. In tests across five ranges—today, this week, last 7 days, this month, and all—reports generated with transcripts fully kept versus simulated as completely deleted were byte-identical, except for generation time.

FEATURE

Report layout reorganized around reading flow, reducing visual noise and optimizing mobile viewing

When opening the usage report, the layout is now rearranged in reading order.

The sequence is now summary cards, usage trend, tools, projects, costliest sessions, fixed-span group, calculation details, and Year in Review. The main model section was removed because it duplicated tool numbers; tool rows can expand to reveal models and remain open after switching dates; the project donut chart was removed for repeating ranking data. "Weekly burn trend" is renamed to "Usage trend". Token composition, cache hit rate, and cost confidence are tucked into a collapsed calculation card, while five "fixed range" tags became a single note above their group. Colored bars were replaced with 2px lines along the bottom edge, with only token figures keeping their yellow color. Summary cards are separate rounded boxes that display abbreviated numbers first, followed by exact figures underneath. Section spacing, heading sizes, and horizontal margins are unified, with expandable rows highlighting on hover. On mobile, projects take one line and tools take two lines, session tables scroll horizontally, and the heatmap retains readable grid cells while automatically scrolling to the latest weeks. The opening summary removes the project count, as non-git folders and replayed history inflate the figure.

FEATURE

New daily stacked usage chart and cost confidence, with distinct tool colors eliminating confusion

To provide clear visibility into daily spending and usage pacing across different AIs, the report adds an intuitive daily usage chart. The chart displays a stacked bar per day colored by tool, featuring a Tokens/Cost toggle in the top-right corner and hover tooltips for daily breakdowns, automatically redrawing when the date range changes. To make each tool instantly recognizable, Grok's color is changed to pink, resolving the issue where its previous green blended into the adjacent Claude green. In addition, the report introduces a "Cost confidence" badge that specifies the exact proportion of usage backed by public pricing versus unpriced usage, explicitly naming models without public rates. The interface also clearly informs readers that reported costs represent API-equivalent values calculated from public price lists rather than subscription bills.

BUGFIX

Claude sessions in subdirectories attributed to parent repo via Git, with expanded cache preventing repeated lookups

Launching Claude inside a project subfolder now correctly attributes usage to the same parent project. Previously, adapters/claude.py handled sessions by taking only the last folder name in the path, causing tests/, docs/, or panels/ to be miscounted as standalone projects. The new version switches to resolve_project_name(), matching Codex, Grok, and Antigravity to determine the git root. To avoid repeated git calls when aggregating folders across multiple tools, the shared cache limit was raised from 256 to 2048 entries. Older dates that can only be replayed from subtotal snapshots retain the folder names recorded at that time.

BUGFIX

Report fixes layout and chart proportions, calibrating prior-period comparisons and mixed pricing

Several layout and statistical issues in the HTML report have been resolved. Previous-period comparisons no longer reach before the first day of data, eliminating artificial growth spikes such as ↑2799%. Tool groups mixed with unpriced models no longer hide their entire cost as —, properly displaying Antigravity's previously hidden $166. An issue where .rank-line's display:grid overrode the browser's [hidden] attribute has been fixed, ensuring collapsed rows actually collapse. Adding position:relative to .tokens-cell prevents session ranking bars from piling up in the top-left corner. Expanded model sub-rows now use corrected scaling rather than plotting project share on the total-volume scale, preventing a model accounting for 68.7% of a project from looking three times larger than the project itself.

Original changelog

Original changelogHTML reports now feature interactive date filtering, letting recipients explore data instantly without installing an app
**The report's date range can be changed inside the page** ([#137](https://github.com/aqua5230/usage/pull/137)). The HTML report used to freeze its period at generation time, so a copy sent to someone else could not be explored. A day × tool × model × project table (about 80 KB) is now embedded, and every date-dependent section recalculates in the browser from five shortcuts or a custom from/to range in a sticky bar. No app and no regeneration are needed, so a shared file stays fully usable. Sections that always cover a fixed span say so, so they don't look broken when the dates change.
Original changelogCleaning up transcripts no longer erases usage history, with snapshots persisting totals and costs
**Report history survives transcript cleanup.** The report recomputed everything from `~/.claude/projects` and `~/.codex/sessions`, which grow by roughly 1.9 GB a month, so deleting old transcripts erased report history with them. Totals are now kept in `~/.usage/usage_snapshot.json` at (session, date, tool, model, project) grain, plus each session's start time and duration so the session ranking survives too. When a day's live transcripts hold fewer tokens than the snapshot, that day is replayed from the snapshot; stored costs are used as-is rather than repriced against today's price list. On real data, reports for today / week / last 7 days / month / all were byte-identical except for the generation time with transcripts present and with all of them simulated as deleted.
Original changelogReport layout reorganized around reading flow, reducing visual noise and optimizing mobile viewing
**The report is reorganised around what people read first.** Order is now summary cards → usage trend → your tools → projects → costliest sessions → the fixed-span group (heatmap, habits, recent work, insights) → how these numbers are calculated → Year in Review. The main-model section repeated the tools section's numbers exactly, so it is gone; each tool row now expands to show its models, and expanded rows stay open when the date range changes. The project donut repeated the ranking below it and was removed. "Weekly burn trend" is now "Usage trend". Token mix, cache hit rate and cost confidence live in a collapsed "How these numbers are calculated" card. The five "fixed range" tags became one note above the group they apply to.
**Visual pass across the report.** Filled bars behind ranking, tool, composition and weekly rows became 2px tracks along the bottom edge; only token figures stay yellow. Summary cards are separate rounded boxes that lead with the abbreviated number and show the exact count underneath. Section spacing and title sizes are consistent, every section shares one left and right edge, and expandable rows highlight on hover. On phones, a project is one line instead of four, a tool is two lines instead of four, the session table scrolls sideways instead of wrapping, and the heatmap keeps readable cells and opens scrolled to the latest weeks.
**The summary sentence no longer states a project count.** Projects are attributed by working folder, so non-git folders and replayed history still inflate the number enough to mislead.
Original changelogNew daily stacked usage chart and cost confidence, with distinct tool colors eliminating confusion
**Daily usage chart.** A stacked bar per day, coloured by tool, with a Tokens/Cost toggle, a hover breakdown, and redraws when the date range changes.
**Cost confidence.** Shows how much usage has a public price and how much does not, names the unpriced models, and states plainly that cost is the API-equivalent value from public price lists, not a subscription bill.
**Grok is pink in the report.** Its previous green sat next to Claude's green in the stacked daily chart and the two could not be told apart.
Original changelogClaude sessions in subdirectories attributed to parent repo via Git, with expanded cache preventing repeated lookups
**Claude sessions opened in a repo subfolder no longer count as separate projects.** `adapters/claude.py` used only the last folder name, so `tests/`, `docs/` and `panels/` each became a project. It now uses the same `resolve_project_name()` git lookup as Codex, Grok and Antigravity, and the shared cache grew from 256 to 2048 entries so several tools' folders together don't push it into repeated `git` calls. Days that can only be replayed from the snapshot keep the folder names recorded at the time.
Original changelogReport fixes layout and chart proportions, calibrating prior-period comparisons and mixed pricing
**Previous-period comparisons no longer reach before the first day of data** ([#137](https://github.com/aqua5230/usage/pull/137)), which produced growth like `↑2799%`.
**A tool group with one unpriced model no longer hides its whole cost** ([#137](https://github.com/aqua5230/usage/pull/137)); Antigravity's $166 had been shown as `—`.
**Collapsed rows actually collapse** ([#137](https://github.com/aqua5230/usage/pull/137)). `.rank-line`'s `display:grid` outranked the browser's `[hidden]`, so collapsing changed the DOM but not the screen.
**Session ranking bars no longer pile up in the top-left corner** ([#137](https://github.com/aqua5230/usage/pull/137)); `.tokens-cell` was missing `position:relative`.
**Expanded model rows are no longer wider than their parent.** Child bars were drawn as share-of-project on the same scale as the parent's share-of-total, so a model at 68.7% of a project looked three times bigger than the project itself.