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.
