v0.4.0

Synced provider keys

Enter a cloud provider's API key once and every Mac you sign Luke into has it. A Sync section in Settings governs it: while on, your account's vault holds what this Mac's encrypted store holds, and turning it off deletes every synced copy while the local keys stay. A key your shell configured is never synced — only one you typed into Luke. (#574, #580)

A conversation that outlives the app

The History tab now survives a quit. The thread, and the facts you asked Luke to remember, live in his own application data under a real retention policy — the 200 most recent lines, nothing older than a fortnight — and Clear still empties the file along with the screen. Lines draw as they are being said, each carries its local timestamp, and every chat a line named draws a chip that opens it, even after the chat is archived. (#589, #614, #606, #618, #613)

Improvements

  • Luke opens at login, a switch under Appearance backed by macOS's own login items (#585)
  • Spoken exchanges run on the OpenAI Agents realtime SDK, which owns the connection, the session configuration, and the tool round-trips (#635, #630)
  • Several sessions changing at once arrive as one announcement instead of a run of them (#623, #628, #625)
  • Luke observes local OMP sessions, reading their title, status, recap, current tool, and conversation (#584)
  • A keyboard shortcut can be removed outright: the row says None, and Reset restores the default (#587)
  • A session's parting words are shown whole on its row and its own screen (#633)
  • Luke words his own announcements from the observed fields rather than reading a composed sentence (#588)
  • Ask about "that chat" right after an announcement and Luke resolves it to the one he just told you about, naming the candidates when nothing settles it (#599)
  • Spoken time is no longer metered: the hosted voice quota and the settings it needed are gone (#634)
  • Every provider API key hint reads the same way and links to the page that issues the key (#591)

Fixes

  • Fixed the Updates row moving under your cursor while an update downloaded (#581)
  • Fixed Luke silently losing the ability to lower and restore Music and Spotify, leaving an unkillable helper at full CPU (#582)
  • Fixed the landing page drawing its footer hairline across the hero art on phones (#583)
  • Fixed the landing page's hero mock spilling outside the phone's screen (#590)

Misc

  • Added Sentry crash reporting: unhandled exceptions from every Electron process and native minidumps, carrying no account identity (#632)
  • Added the hosted /api/observe endpoint, which runs each cloud adapter once under the caller's vault keys and answers a bounded roster (#573)
  • Added hosted act endpoints for messaging a session and creating a workspace (#571, #611, #620)
  • Updated how Luke's persona instructions describe his voice (#639)