Skip to content

Kaho 2.2.0

Choose a tag to compare

@utsavanand utsavanand released this 02 Oct 09:14
· 60 commits to main since this release
v2.2.0
7c86902

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.