Voice dictation
Push-to-talk and hands-free dictation into any atrium input.
atrium dictates into any focused input — a terminal, the composer, Monaco, the markdown editor. Recognition runs on-device.
Two modes
Push-to-talk — hold a key, speak, release. The text is finalized and pasted into whatever has focus. The default key is right Option; a native key monitor detects the exact physical key on press and release, across every pane type, with no extra permission beyond the ones below.
While you hold, atrium suppresses silence and punctuation endpointing so the whole hold is treated as one utterance, and a 500 ms tail-capture grace keeps a key released a touch early from clipping your last word. The overlay shows a release-to-insert hint.
Hands-free — Cmd+Shift+M toggles dictation on and off. In this mode atrium segments on silence, so you can speak in several passes without touching a key. A mic button sits in the composer, left of send, with the bound push-to-talk key in its tooltip.
Voice submits
While dictating into any input:
- Saying "Full stop." submits immediately (equivalent to
Enter). - Saying "Send" or "Enter" alone, with no surrounding text, also submits.
Settings
Settings → Voice Dictation:
- Microphone device picker and an input volume slider with a live level meter.
- Push-to-talk key — rebindable, captured natively. A bare modifier (like right Option) or a full combo both work.
- Recognition engine.
- A permission card surfacing the three macOS permissions dictation needs: Microphone, Accessibility, and Speech Recognition. Missing grants show here rather than failing silently.
On-device recognition
Recognition is forced on-device wherever macOS supports it (config.speech.on_device_recognition, on by default).
This is not only a privacy default. Server-based recognition draws on a per-account request budget shared across processes — so running more than one atrium instance, or the per-utterance restart cycle, could exhaust it and leave the recognizer silently returning nothing at all: mic still capturing, zero partials, zero finals, zero errors. On-device recognition keeps it local and per-process. A feed watchdog also emits an error when voiced audio produces no results, so that failure mode can never be silent again.