The macOS runtime has two parts:
  • Python owns capture, transcription, grammar cleanup, replacements, clipboard and paste output, history, sockets, LaunchAgent lifecycle, and CLI commands.
  • Swift owns the visible menu bar app, overlay, settings, onboarding, and IPC rendering.

Hotkeys

Double-tap dictation follows ui.auto_paste: clipboard by default, cursor paste when enabled. Hold-to-record always pastes the result at the cursor. Text-transform shortcuts require grammar correction to be enabled with a working backend. The menu bar icon opens a status panel: The More menu carries copy-last, the transcripts, audio, and log folders, update check, service restart, and the tutorial replay. Esc closes the panel; controls that need the service disable themselves while it is unreachable instead of failing silently.

Settings panels

Settings save to ~/.whisper/config.toml and apply immediately — the trigger key, transform shortcuts, and the TTS shortcut all rebind live. Engine and grammar backend switches happen in place with rollback.

Overlay states

The floating overlay shows recording duration, waveform, processing progress, copied or pasted result, errors, and speaking state. Python publishes state snapshots over IPC. Swift drops stalled IPC consumers instead of blocking the transcription pipeline.