Skip to content
v0.1.82026-07-02

Sessions that stay signed in

Session refresh now recovers from expired tokens instead of dead-ending in 401s, Codex sign-in runs right in Settings, and realtime voice replies get a speaking-speed picker.

  • Session refresh that recovers. An expired access token no longer strands the app: the API proxy force-refreshes and retries once, and the launch-time session check heals a drifted token instead of silently failing.
  • Codex sign-in from Settings. OpenAI Codex OAuth now runs the CLI's device-code flow inside the app — it shows the code, opens the browser, and confirms when the sign-in lands. No terminal detour.
  • Voice replies at your speed. Pick how fast realtime voice answers speak, from 0.25x to 1.5x. The choice applies on the next connect.

Added

  • Device-code OAuth sign-in for OpenAI Codex in Settings and onboarding: start the flow, get the verification code, and the app confirms when the browser sign-in lands. Replaces the dead end where an expired Codex session had no re-auth path.
  • Speaking-speed picker for realtime voice replies (0.25x-1.5x), applied at connect time and clamped so a hand-edited preference can't break the session.

Changed

  • Loops board rework: tone-colored progress rings with state glyphs, a stalled indicator, and every non-running loop can be restarted.
  • Bundled runtime pin bumped to 0.17.3.

Fixed

  • Expired-session 401 loop: a rejected access token now forces a real refresh (bypassing the local freshness check that made retries a no-op) and retries the request once. Applies to voice session minting and profile loads.
  • Parallel requests that hit a 401 at the same time now share one refresh instead of firing several back-to-back.