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

  1. Open Settings and turn on Voice commands (push-to-talk). This one switch enables every voice mode below.
  2. 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.
  3. 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:

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):

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:

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

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.

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

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.