Voice Interaction in QUILL
QUILL can be driven by voice — hands-free, on your own device, with nothing uploaded. This page is the complete reference for what voice can do today, how each mode works, exactly which spoken commands are understood, and the safety rules that never change.
Everything here is part of the Hey QUILL program. It is off by default, always off in Safe Mode, and every layer keeps recognition on your machine.
The one safety rule
Voice can only run a curated, non-destructive allowlist of commands. Saying the wrong thing cannot close a document without saving, send, publish, or delete anything — those actions are simply not in voice’s vocabulary. The same allowlist bounds the AI agent. If you ask voice something it does not recognize as a safe command, it tells you what it heard and does nothing.
Turning voice on
- Open Settings and turn on Voice commands (push-to-talk). This one switch enables every voice mode below.
- Choose what listens (see below). To download nothing at all, set Voice recognition engine to Moonshine tiny, a small speech model that comes with QUILL. The default, Follow main engine, uses your offline engine (Whisper.cpp unless you changed it), which needs its engine and a model.
- Optionally assign keyboard shortcuts to the voice commands under Settings → Keyboard, so you can start them without the menu.
Voice is unavailable in Safe Mode, and needs microphone-capture
support (the optional sounddevice component, included in
standard installs).
Choosing the recognition engine
Voice interaction runs on an on-device speech engine, and you can choose which one under Settings → Voice recognition engine:
- Follow main engine (default) — uses whatever engine you already use for dictation.
- whisper.cpp — favors accuracy. A good choice for Voice Command and Conversation Mode when you want the most reliable recognition.
- Moonshine tiny — fast and light, with low idle cost, and built into QUILL, so there is nothing to download. English only. Recommended for the always-listening “Hey QUILL” wake word, where a small, quick engine matters more than transcription polish.
For whisper.cpp you need its engine and a model (download them from Tools → Speech → Speech and Dictation…, which opens Manage Speech Models, or from Help → Download Optional Components…); Moonshine tiny is already there. If the chosen engine or its model isn’t available, QUILL falls back to your main offline engine. If that has no model either, QUILL tells you, and choosing Moonshine tiny here fixes it with nothing to download.
This setting is only for the voice modes on this page. Live Dictation
(Ctrl+F11) has its own engine list in Dictation Settings,
and Locked Dictation uses the main offline engine described in “Choosing
a speech engine and model” below. The user guide’s section “Which speech
engine? A guide to choosing”, at the start of its dictation chapter,
compares them all.
Until October 2026 the light choice was Vosk. It is gone from this list because it knows only English, its last release was in 2022 and its models are checked by MD5 only, while Moonshine tiny ships with QUILL and is faster and more accurate. If you had chosen Vosk, QUILL switched you to Moonshine tiny and said so once. Vosk itself stays in QUILL, but only to work out podcast chapters.
The four ways to use voice
QUILL’s voice support was built in four layers. Each one builds on the one before it, and they share the same on-device recognition and the same safe allowlist.
1. Voice Command (push-to-talk)
Tools → Speech → Voice Command (Offline).
The simplest mode. Run the command, speak one command, run it again to stop and act. QUILL recognizes the phrase on your device and runs the matching command. Say “cancel” or “never mind” to abort.
Best when you want to fire a single command without touching the keyboard.
2. Voice Conversation Mode
Tools → Speech → Voice Conversation Mode.
The hands-free version. Run it once and QUILL listens for a command, then keeps a short follow-up window open after acting so you can chain commands — “next heading”, then “read aloud”, then “word count” — without arming again between them. A warm audio cue marks every state:
| Cue | Meaning |
|---|---|
| Rising three-note chime | Conversation mode turned on |
| Soft two-note | The microphone is open; speak your command |
| Gentle rise | Your command was recognized (a brief “cancel” window follows) |
| Sparkle | The action finished |
| Quiet tick | QUILL is still working, so the wait is never silent |
| Calm falling tone | Nothing matched |
| Settling tone | Relaxed back to rest |
Run it again, or say “stop”, to turn conversation mode off.
Your turn ends when you stop speaking — QUILL listens to the microphone’s energy and finishes the turn after your pause, rather than cutting you off at a fixed time. You can make it more personal, too: set your name in Settings and QUILL uses it in its prompts (“Listening, Jeff.”), with wording that varies naturally and follows the time of day. If you’d like the prompts spoken aloud, turn on Speak prompts aloud; QUILL keeps that silent whenever a screen reader is running, so it never talks over your reader.
Timing you can tune (Settings; set any to 0 to switch that part off):
- Pause before a command ends — how long a pause finishes what you are saying (used by the silence detection above).
- Cancel window — the beat after recognition during which “cancel” calls it off.
- Follow-up window — how long QUILL keeps listening after acting.
- Still-working tick interval — how often the “working” tick plays.
The nine cues are ordinary Sound Events — retune or replace them in any sound pack from the Sound Events dialog, exactly like every other QUILL earcon.
3. “Hey QUILL” wake word
Tools → Speech → Listen for Hey QUILL.
Always-listening. QUILL listens continuously, on your device, for the phrase “Hey QUILL”. Two ways to use it:
- “Hey QUILL, save file” — the trailing command runs straight away.
- “Hey QUILL” on its own — QUILL wakes and listens for your next command.
While it is on, the status bar shows that the microphone is live and plays a periodic reminder, so an open microphone is never a surprise. Run the command again, or say “stop”, to turn listening off instantly.
It stays off unless you say otherwise. Always-listening turns itself off when QUILL closes; a separate setting — Keep listening for “Hey QUILL” across restarts — lets you have it resume automatically at startup if you want that.
Checking what voice is doing — Speak Voice Status
Tools → Speech → Speak Voice Status tells you, at any moment, exactly what voice is up to: listening for “Hey QUILL”, in conversation mode, capturing a command, or not listening at all. It is a quick way to confirm the microphone state — assign it a shortcut for an instant check.
4. Ask a question — routed to Ask Quill
When you speak something that is a question rather than a command — either starting with “ask” (“ask what a heading is”) or shaped like a question (“how do I save my document”) — voice hands it to Ask Quill, QUILL’s AI assistant, with your question pre-filled and ready to send.
You press Enter to send it, so a person is always in the loop for anything that reaches the AI. Ask Quill answers with its own spoken-reply and change-review tools. This needs AI to be set up; if it is not, Ask Quill offers to set it up rather than failing. Questions are only routed to AI — voice never sends anything to a network service on its own.
What voice can run — the command allowlist
These are the commands voice understands today, with the phrases that select each. Matching is forgiving: the command’s own name works too, and close phrasings still match.
| Say | Runs |
|---|---|
| “save”, “save file”, “save document” | Save |
| “save all”, “save everything” | Save All |
| “new”, “new document”, “new file” | New |
| “undo” | Undo |
| “redo” | Redo |
| “select all” | Select All |
| “bold”, “make bold” | Bold |
| “italic”, “make italic” | Italic |
| “uppercase”, “make uppercase” | Upper Case |
| “lowercase”, “make lowercase” | Lower Case |
| “title case” | Title Case |
| “sentence case” | Sentence Case |
| “bullet list”, “bulleted list” | Insert Bullet List |
| “numbered list” | Insert Numbered List |
| “word count”, “count words” | Word Count |
| “spell check”, “check spelling” | Spell Check |
| “read aloud”, “start reading”, “pause reading” | Read Aloud (start/pause) |
| “stop reading”, “stop read aloud” | Stop Read Aloud |
| “next heading” | Next Heading |
| “previous heading”, “prior heading” | Previous Heading |
| “outline”, “show outline” | Outline Navigator |
| “find”, “search”, “find text” | Find |
| “soft wrap”, “word wrap” | Toggle Soft Wrap |
| “command palette”, “commands” | Command Palette |
Anywhere you can speak a command, you can also say “cancel”, “never mind”, “stop”, or “dismiss” to abort.
Teaching dictation your words (a dictation profile)
Dictation can learn your vocabulary. QUILL reads a small,
human-editable file called dictation.md in
the family’s dictation folder
(%LOCALAPPDATA%\QuillVille\Dictation on an installed copy;
it was copied there from your QUILL data folder, which keeps the old one
as a backup); edit it, save, and the next dictation uses it. Every
section is optional.
## Vocabulary
- QUILL
- wxPython
- GitHub
## Replacements
new line => \n
open paren => (
get hub => GitHub
## Commands
save everything => file.save_all- Vocabulary — names, jargon, and acronyms you use. QUILL passes these to the speech engine as a hint (Whisper’s initial prompt), so it spells them your way — “wxPython”, not “w x python”. Since 2026-08-17 the same list also powers a fuzzy correction pass on the finished transcript: near-misses are matched by spelling and sound across up to three words, so “charge b” is repaired to “ChargeBee” in exactly your casing, and “r and d” matches an “R&D” entry. That means engines that take no hint — Parakeet 3 included — still learn your words; nothing is corrected unless it is genuinely close to one of your terms.
- Replacements — spoken-to-written fixes applied to
the finished transcript, one per line as
spoken => written. Use\nfor a new line. Great for punctuation macros and names the engine keeps mishearing. - Commands — add your own spoken phrases for existing
commands, as
phrase => command.id. These still obey the same safe-command allowlist.
The profile applies everywhere dictation transcribes: Locked Dictation and the Dictate (Offline) toggle.
Choosing a speech engine and model
Locked Dictation, the Dictate (Offline) toggle and offline transcription are engine-agnostic and fully offline. Open Tools → Speech → Speech and Dictation… (Manage Speech Models), or run the guided setup from Help → Download Optional Components…, row Dictation (offline speech), and choose one of three engines. Nothing has to be downloaded first: until an engine has a model, the built-in Moonshine tiny does the work.
- Whisper (whisper.cpp) — the default, light and fast on any computer. The engine itself (about 8 MB) is fetched from QUILL’s own verified release the first time you need it. The small models are best for most people: Tiny (~75 MB) and Base (~145 MB) are fast and ideal for short voice commands; Small (~465 MB) is the recommended all-round choice. Larger models (Medium, Large) are more accurate but slower and much bigger. Only whisper.cpp has Small English with speaker detection, which labels who is speaking in a transcript. Choose it when you are not sure.
- QUILL speech models (via sherpa-onnx) — the models
every QUILL app shares, so one download serves QUILL’s Live Dictation,
QUILL Lite and QUILL Transcribe as well. The built-in Moonshine tiny is
there from the start, and is the model voice commands prefer when this
engine is your main one, so with it chosen nothing needs downloading.
Choose it when you already downloaded a model for Live
Dictation, or want Parakeet 3. Among the downloads:
- Parakeet 3 (NVIDIA) — the most reliable choice for dictation, and once its ~670 MB model is installed, dictation prefers it automatically (your explicit engine choice still wins). It covers 25 languages, detects which one you are speaking, runs on any CPU, and — unlike Whisper — never invents text from silence, so a thinking pause can never become a phantom “thank you” in your document.
- Nemotron 3.5 (NVIDIA) — a strong English and Spanish model that recognises while you speak.
- Faster Whisper — the most accurate, with a larger download and more memory, and the only engine that can use a graphics card. It installs when you choose it, where your copy of QUILL can install it. It has its own models and does not label speakers. Choose it for long recordings on a capable computer.
For Locked Dictation, if you have not chosen, QUILL picks for you in this order: an installed Parakeet 3, then whisper.cpp once it has a model, then the built-in Moonshine tiny. Your own choice always wins. The other offline tools (Dictate (Offline), transcription, captions and voice commands that follow the main engine) use the engine you chose, whisper.cpp unless you changed it, and ask for one of its models when it has none.
Every engine here keeps your speech on your computer. Live Dictation’s cloud choices (OpenAI and the speech providers, with your own account) are never used by voice commands or by these offline tools.
Privacy and control at a glance
- On-device. All speech recognition uses the offline engine. No audio and no transcript leave your computer for any voice mode. (Only Ask Quill, when you press send on a routed question, contacts the AI you configured — with the consent you already granted it.)
- Off by default. Every voice mode is off until you enable voice commands, and each listening session is something you start.
- Safe Mode. All voice modes are disabled in Safe Mode.
- Instant off. Running a mode’s command again, or saying “stop”, ends it immediately; always-listening also ends when QUILL closes unless you opt into persistence.
- Perceivable. Warm audio cues and a visible status keep the state of a hands-free session — and a live microphone — always knowable.
Roadmap
Voice interaction shipped in four phases, and the polish refinements
followed: true silence detection (your turn ends when you stop
speaking), personalized and optionally-spoken prompts with screen-reader
parity, the Speak Voice Status check, and the editable dictation
profile (dictation.md) are all in place. The one
genuinely future item is a dedicated low-power keyword spotter (so
always-listening costs even less than it does today). It is built, but
not switched on yet.