Repository navigation
Kaho 2.2.0
Say how you want it written, in the same breath.
Hold the hotkey and dictate. While still holding, press right Shift and keep talking — everything said while it's down is an instruction, not part of the message. Let go of Shift and you're dictating again.
"tell Mark I can't make the offsite, suggest November" → ⇧ → "formal, two sentences"
"Mark, I am unable to attend the offsite; I recommend scheduling it in November."
Same words, different instruction:
→ ⇧ → "casual, like texting a friend"
"Hey Mark, I'm sorry but I can't make the offsite, gonna suggest November instead."
The same app needs a different voice for a leader, a junior, and family, so no per-app rule can guess it — only you know, and only at that moment. Other tools solve this with saved modes and prompt libraries you have to maintain. Here the instruction is just speech: said once, used once, never stored.
Four times faster on short dictations
Transcription moves from Whisper large-v3-turbo to Qwen3-ASR 1.7B. On an M4 Max, measured back to back:
| clip | before | after |
|---|---|---|
| 1.4 s | 0.51 s | 0.12 s |
| 10.3 s | 0.60 s | 0.42 s |
| 29.6 s | 0.78 s | 1.06 s |
Accuracy improves too (WER 1.5% → 1.3% clean, 4.4% → 3.4% on jargon). The two cross at roughly 15–20 seconds: across 677 logged dictations the median is 6.3 s and 84% are under 20 s, so most get faster and the longest ~15% get slower. Dropping torch also shrinks the download from 478 MB to 357 MB.
Bring your own key — optional, never required
The rewrite step can run on OpenAI, Anthropic, or any OpenAI-compatible endpoint (Groq, OpenRouter, a local Ollama). Worth it for "turn this ramble into a clear paragraph", where a 4B model has a real ceiling.
On-device stays the default and the fallback. No key, no network, bad endpoint — it falls back to the local model and tells you, so a cloud problem can never cost you your words. The key is stored in your Keychain, never in Kaho's settings file.
Speech-to-text always stays on this Mac. Only the transcript is ever sent, and only if you set a key.
Also
- Tap to start, tap to stop. Holding is still the default and is self-limiting, but holding a key through a long prompt is tiring — and if you can't hold a modifier down at all, this is the difference between usable and not.
- Pin your language. Left to detect, the model guesses per 30-second window and can get a short sentence wrong.
- Escape cancels. Mid-recording the audio is dropped; mid-transcription the result is discarded rather than pasted.
- ⌘C, ⌘V, ⌘X and ⌘A work. macOS routes these through the menu bar and Kaho never had an Edit menu, so copying from History needed a right-click.
- A stuck microphone says so. macOS's audio stack can wedge mid-recording; the pill now reports it and Restart Kaho recovers.
- The app can say its own name. The dictionary shipped with "Kaho" commented out, so it transcribed as "Kahoot".
- The app bundle now carries its own notarization ticket, so a first launch works offline.
Install
Download the DMG below and drag Kaho to Applications, or:
brew install --cask utsavanand/kaho/kaho
Apple Silicon, macOS 14+. First launch downloads about 2.3 GB of models.