Release notes

FEATURE

Scaled Windows panels show full content without footer gaps or deadlocks

Scaled Windows panels now display all their content completely, eliminating the blank strip below the footer. _WindowsTrayController._apply_panel_zoom() now invokes window.usageApplyPanelZoom() from a background thread before delegating only resize and move work to the UI thread, avoiding a WebView2 deadlock. The usageApplyPanelZoom() function receives natural height and expands body before applying CSS zoom, while naturalContentHeight() temporarily removes that compensation during measurements so the scaled layout preserves ample space instead of clipping cards.

FEATURE

Windows tracks Grok CLI activity with fault-isolated log loaders

When you open today's usage panel on Windows to check costs, token totals, and the project list, Grok CLI records now appear too. Inside _WindowsTrayController._load_entries(), the controller calls grok_loader.load_entries() alongside the existing Claude and Codex loaders. If reading the Grok log fails, dedicated error handling preserves the Claude and Codex entries already collected.

FEATURE

Token Saver enforces three plain-language rules with versioned sidecars

When you ask Token Saver to shorten a reply, these three rules apply. Across all five languages, terse_mode_instruction in i18n.json and its standalone copies in usage_terse_mode.py's _DEFAULT_INSTRUCTION turn nominalizations back into verbs, cut sentences that announce without informing, and put known information before new information. Meanwhile, TERSE_HOOK_VERSION in installer/session_hooks.py and __version__ in usage_terse_mode.py both move to 1.3, so _installed_terse_version() keeps installed sidecars current instead of rewriting them on every session.

Original changelog

Original changelogScaled Windows panels show full content without footer gaps or deadlocks
**Scaled Windows panels now show all their content, with no blank strip below the footer.** `_WindowsTrayController._apply_panel_zoom()` now calls `window.usageApplyPanelZoom()` from a background thread before passing only resize and move work to the UI thread, avoiding a WebView2 deadlock. `usageApplyPanelZoom()` receives the natural height, expands `body` before applying CSS `zoom`, and `naturalContentHeight()` temporarily removes that compensation while measuring, so the scaled layout has enough space instead of clipping cards.
Original changelogWindows tracks Grok CLI activity with fault-isolated log loaders
**Windows now counts Grok CLI activity in today's cost, token total, and project list.** `_WindowsTrayController._load_entries()` now calls `grok_loader.load_entries()` alongside the Claude and Codex loaders. If reading the Grok log fails, its matching error handling leaves the Claude and Codex entries already collected intact.
Original changelogToken Saver enforces three plain-language rules with versioned sidecars
**Token Saver now gives short replies three concrete rules for plainer language.** The `terse_mode_instruction` strings in `i18n.json` and their standalone copies in `usage_terse_mode.py`'s `_DEFAULT_INSTRUCTION` now turn nominalizations back into verbs, cut sentences that announce without informing, and put known information before new information, in all five languages. `TERSE_HOOK_VERSION` in `installer/session_hooks.py` and `__version__` in `usage_terse_mode.py` both move to 1.3, so `_installed_terse_version()` keeps installed sidecars current instead of rewriting them on every session.