The headline change is a toolchain swap: I replaced Biome with oxc for linting and formatting. It touched 169 files — new .oxlintrc.json and .oxfmtrc.json configs in place of biome.json, the verify pipeline rewired to call the new tools, and the editor set up to use them. The one piece Biome had that oxc didn’t was my filename-convention rule, so I ported it as a custom plugin (oxlint-rules/filenameConvention.ts) rather than lose it. It’s a big mechanical diff, but the result is a faster lint/format step that fits the rest of the Rust-based tooling I’ve been leaning on.

The features were about making the dashboard remember things across restarts. Peak usage history now persists, so the rate-limit indicator can show how usage has trended rather than just the current snapshot, and the selected session persists and is shared — reload the page or reconnect and you land back on the session you were looking at, and that selection is shared across connected views. A small touch on top: the badge for the currently-open session now animates, so it’s obvious at a glance which card is live.

The rest was reliability, much of it on the Windows side now that sessions span both hosts. I bounded the Windows reconnect loop when there’s a version mismatch and bounded daemon spawn retries, so a wedged Windows host can’t spin forever; failed session restores now surface in the UI instead of failing silently; and forwarding a Windows session strips its host namespace so the path resolves cleanly on the WSL side. One backlog fix too: items without a plan now rewind correctly when sent back through review.