Release notes

BUGFIX

Fixed full CPU core lockups and slow startup times caused by excessive scanning

Your computer won't be bogged down by two performance bugs anymore. First, if you had history containing obscure AI models missing from the system's pricing sheet, the app would wildly scan the entire thousand-item price list from top to bottom on every single refresh trying to find them. Worse, it never remembered failing, so it repeated the scan immediately after, pinning your processor (CPU) at 100%; the system now smartly memoizes "not found" results and skips them next time. Second, every time you restarted the app (or when it auto-launched at login), it parsed your entire Claude chat history completely from scratch because its cache only lived in temporary memory, which could take over 5 seconds on older installs. It now safely persists that parsed cache to your disk. It's like a checkout clerk who used to flip through a massive 2,000-page catalog every single time they encountered an unbarcoded item; now they simply tape a "not found" note to the register and skip it. Plus, they no longer need to re-read your entire 10-year purchase history from page one every morning just to clock in.

Original changelog

Original changelogFixed full CPU core lockups and slow startup times caused by excessive scanning
**Menu bar could peg a full CPU core after launch on machines with unpriced models in their history**: `pricing.py`'s model-to-price lookup ran a full linear scan of the entire LiteLLM pricing table for every history entry whose model wasn't in it, with no caching of the "not found" result — so every refresh re-scanned the same unresolvable models (e.g. sessions logged by a non-Anthropic/OpenAI backend) from scratch, thousands of times per refresh on machines with a lot of that history. The lookup is now memoized per pricing-table generation, so a given unresolvable model is only scanned once.
**Claude Code history reparsed from scratch on every relaunch**: `history_loader.py`'s per-file JSONL parse cache only lived in memory, unlike the matching Codex-side cache added in 0.24.0, so every app restart — including auto-launch at login — paid the full history reparse again (measured 5+ seconds on a long-lived install). It now persists to disk the same way the Codex loader already does.