v2026.6.23
Made Dictate private by default: an unset provider resolves to the on-device `faster-whisper` backend.
AI agents and tools can read these release notes as plain Markdown.
This release covers 1 pull request.
Highlights
- Made Dictate private by default: an unset provider resolves to the on-device
faster-whisperbackend. - Changed the default push-to-talk shortcut from Ctrl+Right to Ctrl+D across the engine, daemon, preflight, doctor, Windows control, the push-to-talk dialog presets, the default config, and the UI.
- Made recording resilient instead of hard-blocked: recording is never disabled by provider state.
- Added a
dictate configsubcommand group for headless/agent setup:set-key <backend> <key>(format-validated, saved to the OS secret store),set-provider private|online,set-model <id>, andshow(provider mode, model, per-backend key presence, secret-store status). - Restored on-screen navigation that the native-decorations switch had hidden: the capture (mic) home now carries a settings gear and a Notes button, since the custom titlebar holding the old gear/search is hidden under native window decorations.
- Note "Export" no longer claims success while writing nothing.
Changes
- Restored on-screen navigation that the native-decorations switch had hidden: the capture (mic) home now carries a settings gear and a Notes button, since the custom titlebar holding the old gear/search is hidden under native window decorations. The capture screen stays the home; Notes is a searchable list of recent dictations one tap away, and back returns to the mic.
- Made the Wayland default push-to-talk shortcut Ctrl+D too, matching every other platform (it previously fell back to Ctrl+Space on Wayland).
- Added a
dictate configsubcommand group for headless/agent setup:set-key <backend> <key>(format-validated, saved to the OS secret store),set-provider private|online,set-model <id>, andshow(provider mode, model, per-backend key presence, secret-store status). Output is plain and scriptable. - Added provider resilience via a new
ProviderSupervisor: it tracks the preferred vs. active backend with on-device always available as the floor, classifies failures (auth / rate-limit / budget / unreachable), and applies class-aware exponential backoff with a single cancellable timer (never busy-polls). It probes for recovery opportunistically and on network-up, and emitsprovider-degraded/provider-recoveredevents to the UI over SSE. - Added live provider-health tracking end to end: an engine
health_sinkreports every online-backend transcription outcome, the UI server publishesprovider-healthSSE events on each state change, and the UI hydrates and updates from them. - Added a quiet "or hold Ctrl + D" shortcut hint (derived from the stored shortcut) to the ready state.
- Made Dictate private by default: an unset provider resolves to the on-device
faster-whisperbackend. Online (xAI) transcription now requires an explicitly configured key. - Changed the default push-to-talk shortcut from Ctrl+Right to Ctrl+D across the engine, daemon, preflight, doctor, Windows control, the push-to-talk dialog presets, the default config, and the UI.
- Made recording resilient instead of hard-blocked: recording is never disabled by provider state. A degraded provider now shows a one-shot flash-ring pulse and toast, an "On-device ·
unreachable" strip during recording, and a quiet config hint when online with no key — replacing the previous fully blocked home screen. - Long (note-mode) recordings now retry the remote provider up to twice with backoff before degrading to on-device; quick push-to-talk dictation keeps its existing fail-fast CPU fallback. The supervisor learns from every outcome.
- Dropped the timestamp from the copy-last-note row and shortened the ready-state status copy.
Fixes
- Re-centred the cradle-mic desktop/app icon. It was shifted off-centre; the Linux package icons and the Windows
.icoare regenerated from the canonicalassets/dictate.svg, with the cradle rendering as a clean curve. - Note "Export" no longer claims success while writing nothing. The packaged webview has no file-download path, so it now copies the note as Markdown to the clipboard and says so ("Copied as Markdown").
- Fixed the engine-version test to assert against
RELEASE_VERSIONdynamically instead of a hardcoded version that went stale after CalVer bumps.
Contribution record
CHANGELOG/records/2026.6.23.md lists every pull request in this release once, with its related issues and thanks.