# Changelog

## 2026.3.480

### Highlights

- macOS hearing now works permanently, not just for an hour. The capture daemon is rebuilt to run on macOS 13+ (universal Intel + Apple Silicon; the previous binary required macOS 26 and never ran elsewhere), and it now re-resolves the rotating Soniox key on every reconnect instead of caching one at startup — so live transcription no longer dies when the key rotates.
- The proactive assistant no longer goes silent when the primary model is unavailable: it now falls back to the configured backup model (e.g. grok-4.5) like the main chat lane already did.

### Changes

- audio-daemon: build universal (arm64 + x86_64) targeting macOS 13 (`-target …-macos13.0`); the previous build inherited the build machine's OS (macOS 26) as its minimum and dyld-aborted on every older Mac.
- audio-daemon: re-resolve the Soniox key on each WebSocket connect from env/.env, else the gateway's `provisioned-keys.json`; send `language_hints` (default `en`) for parity with the Windows listener.
- gateway (capture): while audio capture is active, re-mint the provisioned key every 40 min so the file the daemon reads never goes stale.
- proactive: the smart actor falls back to the configured fallback model(s) (grok-4.5, then moonshot) in OpenAI chat format when the Anthropic proxy can't answer — previously it had no failover and spammed HTTP 400s.

## 2026.3.479

### Highlights

- Fixed voice/hearing being completely dead on macOS installs: the mic-capture audio daemon is now bundled in the published package. It was never shipped before, so on any npm-installed macOS koi the daemon couldn't be found or built and the mic never turned on — Windows worked (its listener is plain bundled JS) but macOS didn't. Now both platforms hear.

### Changes

- packaging: ship `src/capture/audio-daemon/` (the macOS capture daemon app + source) in the npm package so `daemonBinary()` resolves on real installs; previously only present in dev checkouts.
- capture (macOS daemon): emit live `mic-partial.json` interim transcription (throttled ~100ms) so the visible-hearing ticker streams the wearer's words as they speak — matching the Windows listener. (Takes effect once the bundled daemon binary is rebuilt from this source on a machine with a working Swift toolchain.)

## 2026.3.478

### Highlights

- Fixed koi mishearing English as another language: the mic transcriber now pins recognition to English, so "Koi, …" stops being transcribed as Mandarin and the wake/stop words match reliably.
- Full-width punctuation from a drifted transcript ("Hey koi。") is normalized so wake, stop, and the hearing ticker still match.

### Changes

- capture: send `language_hints` to the speech-to-text (default `en`, override with `SONIOX_LANGUAGE_HINTS`) — stops per-utterance language drift that swallowed the wake word.
- capture: normalize full-width CJK punctuation to ASCII at the daemon, the trigger pipeline, and inside the stop matchers.
- capture: koi's own live work-narration no longer re-triggers it — narration lines register in the self-echo tracker at emit time, so their mic echoes can't spawn duplicate runs.
- capture: the replayed recent-audio context now attributes koi's own spoken replies as koi (not the user), so "answer what I just said" resolves correctly instead of replying to itself.
- tui: the hearing ticker handles wide characters (CJK/emoji) without breaking column alignment.

## 2026.3.477

### Highlights

- Voice you can trust: fixed every clip being cut off at ~60% of its length (an ffplay buffering flag made `-autoexit` fire early), so spoken replies and acks now play to the end.
- A real emergency stop: saying "koi stop" (or "koi abort") halts the mission, batches, and voice instantly — hardcoded, no model, no gating. A bare spoken "stop" does the same with a wearer-voice check so a TV or stranger can't kill your run.
- Visible hearing: a live ticker above the composer streams everything koi hears — trigger words color-coded by what they fired, with a tiny annotation (⏹STOP, ●wake, ⚡action, →smart, ∅reason, ·echo) anchored above the exact word, scrolling in sync. Debugging what koi heard and why it acted is now on-screen instead of in logs.
- Live captions synced to koi's voice: synthesis uses ElevenLabs character timestamps, so the caption lights up word-by-word exactly as the voice speaks it.

### Changes

- voice: barge-in now only triggers on stop-class utterances — repeating yourself while koi is replying no longer silences the reply.
- voice: wake acks and confirmations are short phrases instead of single words (isolated words synthesized as phonetic mush).
- triggers: bare wake ("koi." / "hey koi") is answered instantly from the trigger tail instead of burning a smart-lane run.
- triggers: short conversation-mode fragments without a koi mention require a positive wearer voice match — kills echo storms where koi's own voice or an open video spawned duplicate runs and tabs.
- triggers: every heard utterance now emits a verdict (including device-audio echo and self-echo drops), so the hearing ticker accounts for everything.
- instant lane: a fast-lane model maps direct spoken commands (play/open/close/volume/scroll…) to immediate visible actions, with learned-skill caching; self-complete control actions are swallowed so the slow lane can't undo them.
- stop: run-level abort — stop halts the whole mission, not just the current batch.

### Highlights

- Fixed the zen stage on Windows: the koi-pond backdrop now renders in full 24-bit color and covers the whole terminal on any window shape.
- Stopped console windows flashing every few seconds on Windows while the gateway advertises on the local network.

### Changes

- zen: primed TERM/COLORTERM on Windows so terminal-kit resolves a truecolor profile instead of a colorless generic one (previously every RGB attribute of the pond was dropped).
- zen: pond backdrop scales to cover the stage (aspect preserved, center-cropped) instead of letterboxing on wide or short windows.
- zen: boot size and resize events are logged under ZEN_DEBUG for diagnosing sizing issues.
- sessions: event logs now persist on Windows for session ids containing colons (previously every append failed with ENOENT and history replay was silently empty).
- windows: patched @homebridge/ciao to pass windowsHide to its periodic `arp -a` interface poll, eliminating the recurring terminal-window flash.

## 2026.3.425

### Highlights

- Added consent-scoped device capture, signed durable-graph synchronization, and preview delivery across macOS, Windows, and Linux.
- Added skippable natural-language onboarding with local dossier review before cross-device synchronization.

### Changes

- Added resumable event and preview outboxes with reconnect-safe cursor handling.
- Added file, process, audio, and input capture controls with bounded retention and explicit approved roots.
- Added cross-platform preview generation for images, video, documents, code, text, and other file types.
- Added gateway graph projection, capture-policy reload, and platform synchronization health reporting.

### Safety

- Capture remains off until the user approves a purpose and specific source categories.
- Passwords, tokens, secure fields, unapproved filesystem roots, and command-line contents are excluded.
- Dossier and preview synchronization require a separate approval and remain revocable.

## 2026.3.424

### Highlights

- Added Universal Access Orchestration across API, browser, enterprise, vault, device, and human-assisted routes.
- Rebuilt onboarding as six resumable stages that exhaustively map accounts, relationships, work, personalization, portraits, and realtime automation.

### Changes

- Added provider-neutral account, route, capability, health, trust, subscription, and policy models.
- Added lowest-friction route selection with short-lived opaque access leases.
- Added browser, messaging, email, enterprise directory, and vault discovery adapters.
- Added enterprise connection support for Google Workspace, Microsoft 365, Okta, Slack, GitHub, Nylas, and 1Password Connect.
- Added realtime event normalization, relevance policy, deduplication, Koi wakeups, and safe notification routing.
- Added per-user onboarding checkpoints, source coverage, provenance requirements, gap tracking, and continuous refresh instructions.

### Safety

- Credentials remain behind local references and are excluded from dossiers and platform snapshots.
- Human approval remains required for unavoidable consent, unlock, passkey, two-factor authentication, CAPTCHA, and security challenges.
