Repository navigation
Kaho 2.4.0
Runs on macOS 14 (Sonoma) again. 2.2.0 bundled a Python and speech library built for macOS 15, so on macOS 14 it quit at launch without showing anything. 2.4.0 is built against macOS 14, and the release script now refuses to ship any file that needs a newer macOS than Kaho claims. Tested on a macOS 14.3 MacBook Air.
Download Kaho-2.4.0.zip, unzip it, and drag Kaho into Applications. This release ships as a zip, not a DMG: the app is notarized by Apple and stapled, but Apple's notary service is still holding the DMG wrapper. A DMG will be added here once it clears. With Homebrew: brew install --cask utsavanand/kaho/kaho.
A reliability release. An independent audit of the whole application
found eighteen reproducible defects; this fixes all of them. The worst
could cost a dictation the user had already finished speaking.
- A stuck microphone no longer loses your words. macOS's audio stack
can block forever while releasing a device, and Kaho waited for that
release before handing the recording to the model — so a hang
discarded speech that had already been captured. The transcript is
now submitted first and the device released afterwards. (Swapping
stop for abort would not have helped: both route through the same
blocking call.) - A dictation that takes too long says so instead of vanishing. The
watchdog used to hide the pill, which erased the only sign that
anything was still running — and because cancellability was read off
whether the pill was visible, it also silently stopped Escape from
working on that job. - Cancelling one dictation can no longer discard another. Cancellation
and spoken-instruction ranges were shared between recordings, so
stopping one dictation and cancelling the next threw away the first,
and starting a new one erased the previous one's instruction
boundaries. - A failed rewrite never costs you the transcript. Three paths could
throw away recognised speech: a tokenizer without a chat template, a
malformed custom endpoint, and a provider returning a null response.
All three now fall back to pasting what you said. - The reported time is the time you actually waited. It used to start
after the worker picked the job up, so microphone shutdown and queue
waiting were invisible — a four-second stall logged as 0.00s. - Audio that is too quiet, silent, or missing now says so on the pill
rather than only in a log file. A microphone turned down read as the
app being broken. - A slow device release is no longer reported as a wedged one. The old
five-second threshold fired on healthy recordings and sent people to
Restart Kaho for something that recovered on its own. - An instruction too short to use is no longer transcribed into your
message. - A dictation already finished can no longer be stopped by a leftover
timer from an abandoned one, and starting a new one can no longer
hide the pill of a recording still in progress. - A microphone that fails to open is no longer left claimed. The stream
was not closed when it failed to start, so one bad open made every
later open fail too — and any error other than a PortAudio one left
the app unable to record at all until it was restarted. - Changing the hotkey while holding it no longer strands the recording.
Releasing the old key stopped matching, so the microphone stayed open
with nothing to end it. - A damaged settings file or history entry no longer stops the app
starting. Both checks accepted valid JSON of the wrong shape and then
crashed on it later. - Warmups no longer pile up behind each other when several dictations
follow in quick succession.
2.3.0 was built but never published: Apple's notary service stalled on
it for hours, and by the time that was clear the build was eight fixes
behind. Its contents are included here.