A background-first macOS voice input tool. Press a hotkey, speak, and the corrected text is pasted into whatever app you're using.
$ npx -y skills add missuo/koe --agent claude-code
A background-first macOS voice input tool. Press a hotkey, speak, and the corrected text is pasted into whatever app you're using.
For more information, visit the documentation at koe.li.
Koe (声, pronounced "ko-eh") is the Japanese word for voice. Written as こえ in hiragana, it's one of the most fundamental words in the language — simple, clear, and direct. That's exactly the philosophy behind this tool: your voice goes in, clean text comes out, with nothing in between. No flashy UI, no unnecessary steps. Just 声 — voice, in its purest form.
I tried nearly every voice input app on the market. They were either paid, ugly, or inconvenient — bloated UIs, clunky dictionary management, and too many clicks to do simple things.
Koe takes a different approach:
~/.koe/. You can edit them with any text editor, vim, a script, or the built-in settings UI..txt file. No need to open an app and add words one by one through a GUI. Just edit ~/.koe/dictionary.txt — one term per line. You can even use Claude Code or other AI tools to bulk-generate domain-specific terms.hold to
press-and-hold, toggle to tap once to start/stop, or double_tap to
double-tap to start and single-tap to stop.1-9 to rewrite the result and copy that variant to the clipboardASR provider support:
Koe is Apple Silicon only. Two prebuilt apps are published per release: Koe (the standard app; cloud + Apple Speech providers) and Koe MLX (adds on-device MLX model support). Both are signed, notarized, and update themselves via Sparkle.
brew install koe --cask
You can also download the latest release directly from GitHub:
Koe updates itself in-app via Sparkle. Each build variant checks its own appcast feed hosted in this repository:
https://raw.githubusercontent.com/missuo/koe/main/docs/appcast.xmlhttps://raw.githubusercontent.com/missuo/koe/main/docs/appcast-mlx.xmlUpdates are checked automatically every 6 hours (and on demand from the menu bar
with Check for Updates...). When a new version is available, Sparkle downloads
the signed, notarized zip, verifies its EdDSA signature against the public key
embedded in the app, and installs it in place — no browser round-trip.
The appcasts (and the legacy docs/update-feed.json used by pre-Sparkle builds)
are updated automatically by the release workflow on every tagged release; they
are not edited by hand. See docs/release-signing.md
for the full release pipeline.
rustup)brew install xcodegen)git clone https://github.com/missuo/koe.git
cd koe
# Generate Xcode project
cd KoeApp && xcodegen && cd ..
# Build the standard app (cloud + Apple Speech)
make build
# Build the MLX app (adds on-device MLX models)
make build-mlx
make run
Or open the built app directly:
open ~/Library/Developer/Xcode/DerivedData/Koe-*/Build/Products/Release/Koe.app
Koe requires three core macOS permissions to function, plus one provider-specific permission when you use Apple Speech. You'll be prompted to grant them on first launch. Without any of the three core permissions, Koe cannot complete its main workflow.
| Permission | Why it's needed | What happens without it |
|---|---|---|
| Microphone | Captures audio from your mic and streams it to the ASR service for speech recognition. | Koe cannot hear you at all. Recording will not start. |
| Accessibility | Simulates a Cmd+V keystroke to paste the corrected text into the active input field of any app. | Koe will still copy the text to your clipboard, but cannot auto-paste. You'll need to paste manually. |
| Input Monitoring | Listens for the trigger key (default: Fn, configurable) globally so Koe can detect when you press/release it, regardless of which app is in the foreground. | Koe cannot detect the hotkey. You won't be able to trigger recording. |
| Speech Recognition | Required only when using the Apple Speech provider (macOS 26+). Allows on-device speech recognition. | Other providers (cloud, MLX, sherpa-onnx) work without this permission. |
To grant permissions: System Settings → Privacy & Security → enable Koe under the relevant categories above.
Koe may also ask for Notifications permission. This is optional and is only used for warning/error notifications and update-related diagnostics.
All config files live in ~/.koe/ and are auto-generated on first launch. You
can edit them directly, or use the built-in settings window (Setup Wizard) from
the menu bar. The settings window includes tabs for ASR, LLM, Controls, Dictionary,
System Prompt, Templates, and About. The System Prompt tab edits system_prompt.txt;
the Templates tab manages prompt-template visibility, ordering, and prompts; advanced
knobs such as user_prompt.txt, ASR custom headers, and advanced profile fields such as
no_reasoning_control remain file-based settings. When a local ASR provider is selected, the ASR tab shows
provider-specific controls: model picker with download/delete for MLX and
Sherpa-ONNX, or language picker with asset status and download for Apple Speech.
The LLM tab supports multiple profiles for OpenAI-compatible APIs, APFEL, and
local MLX models. Selecting MLX shows a model picker with download/status controls
instead of API fields.
~/.koe/
├── config.yaml # Main configuration
├── dictionary.txt # User dictionary (hotwords + LLM correction)
├── history.db # Usage statistics (SQLite, auto-created)
├── system_prompt.txt # LLM system prompt (customizable)
├── user_prompt.txt # LLM user prompt template (customizable)
└── models/ # Local ASR models
├── mlx/
│ └── Qwen3-ASR-0.6B-4bit/
│ ├── .koe-manifest.json
│ └── *.safetensors, config.json, ...
└── sherpa-onnx/
└── bilingual-zh-en/
├── .koe-manifest.json
└── *.onnx, tokens.txt, ...
Below is the full configuration with explanations for every field.
Koe uses a provider-based ASR config layout. Built-in providers: Doubao, Qwen, Apple Speech (local, macOS 26+), MLX (local, Apple Silicon), and sherpa-onnx (local, CPU).
koe is a Claude Code plugin with 1 hand-picked skill, indexed on Flowy in the Entertainment category. Install it with the command on its page. It includes koe-setup. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it