Release notes

FEATURE

Custom Claude Code config paths take effect everywhere, keeping status lines and project usage from going blank

If you relocate Claude Code's configuration directory, the status line and project usage can now be read properly everywhere.

Previously, "Set Up Status Line" still wrote to ~/.claude/settings.json, which Claude Code never read, leaving both quota bars stuck at 0% with "Reset imminent"; the fallback mechanism even surfaced a stale ~/.claude.json, and desktop apps launched from Finder or the Dock could not catch terminal environment variables, leaving project usage completely blank.

# Path resolution order (reads all when comma-separated, writes to the first entry):
# 1. Environment variable CLAUDE_CONFIG_DIR
# 2. launchctl getenv CLAUDE_CONFIG_DIR
# 3. Default path ~/.claude

# Moves with the variable: settings.json, .claude.json, projects/
# Stays pinned in place: statusline script, usage-status.json, preferences

The new loaders/claude_paths.py resolves directories in order so that Claude Code files follow the variable while usage's own files stay pinned in place, preventing misalignment from subprocesses and the desktop app reading and writing in different locations.

BUGFIX

Status line token counts no longer show 1000k at unit boundaries, adding the billion step

When checking usage progress in the status line, token values near unit boundaries no longer display an awkward 1000k.

Previously, the three status line scripts only upgraded to M when reaching 1,000,000, but k used integer formatting, causing values of 999,500 and above to round up to 1000k first; the scripts also lacked a B step, causing 1.5 billion to be printed as 1500.0M. The thresholds now compare against rounded boundaries (999,500 for k to M, 999,950,000 for M to B) and add the B step, matching the existing correct implementation in ui/tables.py.

FEATURE

Report weekly trend bars support hover display, showing date ranges and costs

When viewing weekly trend bars in the usage report, hovering over them now reveals their date range and cost.

Previously, each row only marked token counts, with no way to tell which week it was or how much it cost. The new version provides the exact timeframe and amount on hover, and clamps the displayed date range strictly to the report's actual span so an unfinished last week does not claim seven days next to three days of numbers.

FEATURE

Insight notes in reports become square and borderless, matching full-row fill styling

Insight notes at the bottom of the report are now entirely square, borderless tinted full rows. They were originally the last framed surfaces left across the entire report interface, featuring 8px rounded corners and a 3px left stripe, and have now been updated to match the visual style of the report's other full-row fills.

Original changelog

Original changelogCustom Claude Code config paths take effect everywhere, keeping status lines and project usage from going blank
**`CLAUDE_CONFIG_DIR` is respected everywhere, not only for transcripts** ([#129](https://github.com/aqua5230/usage/issues/129)). With a relocated Claude Code config dir, "Set Up Status Line" wrote to `~/.claude/settings.json`, which Claude Code never read, so both quota bars sat at 0% with "Reset imminent", the fallback surfaced a stale `~/.claude.json`, and Project Usage stayed empty because an `.app` launched from Finder or the Dock does not inherit the shell environment. A new `loaders/claude_paths.py` resolves the directory from the environment, then `launchctl getenv CLAUDE_CONFIG_DIR`, then `~/.claude`; comma-separated values are read in full and written to the first entry. Files Claude Code owns follow it — `settings.json`, `.claude.json` (inside the directory whenever the variable is set, the same rule Claude Code uses), and `projects/`. usage's own files — the statusline script, `usage-status.json`, prefs — stay pinned to `~/.claude`: the script runs as a Claude Code subprocess and sees the variable while the app may not, and deriving both from it would let them write and read in different places.
Original changelogStatus line token counts no longer show 1000k at unit boundaries, adding the billion step
**Token counts no longer read `1000k` at a unit boundary.** The three statusline scripts promoted to `M` at `value >= 1_000_000`, but `k` is formatted `:.0f`, so anything from 999,500 rounded to `1000k` first; there was no `B` step either, so 1.5 billion read `1500.0M`. The thresholds now compare against the rounded boundary (999,500 for k→M, 999,950,000 for M→B) and a `B` step was added, matching the already-correct version in `ui/tables.py`.
Original changelogReport weekly trend bars support hover display, showing date ranges and costs
**Weekly trend bars in the report show their date range and cost on hover.** Each row only carried a token count, with no way to tell which week it was or what it cost. The range is clamped to the report's actual span, so an unfinished last week does not claim seven days next to three days of numbers.
Original changelogInsight notes in reports become square and borderless, matching full-row fill styling
**Insight notes in the report are square, borderless tinted rows.** They were the last framed surface left — 8px corners and a 3px left stripe — and now match the report's other full-row fills.