App favorites and custom vocabulary
Voice control runs on a small, fully offline speech grammar (Vosk). That keeps it fast and private, but it also means the recognizer only reliably hears words it has been told about ahead of time. These two settings are how you tell it: app favorites teach it the apps you talk to, and custom vocabulary teaches it the names and jargon you use. Both live in Settings → Hands-Free → the Voice Commands tab.
Get these right and commands like "annika action open slack" fire the first time, every time.
Running commands that target apps (open / close / switch to) requires Pro, since voice commands are a Pro feature. Favorites and vocabulary are configured right next to them on the same tab.
App favorites — how "open <app>" gets resolved
An app favorite is an app you've added to a short, curated list so InkSpoke can match it when you
speak. Each favorite has a display name, an optional set of aliases, and an icon. When you say a
command like "annika action open slack" — or any command using the {app} placeholder — InkSpoke
takes the spoken app name and tries to resolve it against your favorites.
Why a curated list instead of every installed app? Two reasons: the offline recognizer can only listen for a bounded set of words (see the grammar budget below), and fuzzy matching against three or four apps you actually use is far more accurate than guessing across hundreds.
The matching ladder
InkSpoke doesn't require you to pronounce the app's exact registered name. It walks a ladder of increasingly forgiving matches, and only falls back to similarity scoring if the direct checks miss:
The similarity fallback is what makes a slightly misheard word still work. Its score decides what happens next:
| Similarity score | What InkSpoke does |
|---|---|
| ≥ 0.85 | High confidence — runs the command automatically. |
| 0.60 – 0.85 | Uncertain — shows a suggestion balloon so you can confirm the app it thinks you meant. |
| < 0.60 | Too far off — no match, and the command is skipped. |
If a command occasionally misfires, the fix is almost always an alias, not a sensitivity tweak.
Add the way you actually say the app: vs code, code, and ide for Visual Studio Code;
chat and messages for Slack. Each alias is a direct match, so it lands on the exact side of the
ladder instead of relying on the fuzzy score.
Adding and managing favorites
┌─ Voice Commands ▸ Voice Favorites ────────────────────┐
│ Apps for "open / close / switch to <app>" │
│ │
│ Slack slack, chat [ Edit ] [ ✕ ] │
│ VS Code vs code, code, ide [ Edit ] [ ✕ ] │
│ Chrome browser [ Edit ] [ ✕ ] │
│ │
│ [ + Add app ] [ Manage… ] │
└───────────────────────────────────────────────────────┘
- Open Settings → Hands-Free → Voice Commands and find the Voice Favorites section.
- Choose + Add app. Pick from your installed apps in the app picker, or enter one manually.
- Add any aliases — the alternate names you're likely to speak.
- Save. The app is now resolvable in every app-targeting command.
There's a shortcut, too: when you save a command that targets an app and that app isn't a favorite yet, InkSpoke asks "Add to favorites?" — so your favorites list tends to fill itself in as you build commands.
Custom vocabulary — teach the recognizer your words
The offline recognizer won't reliably hear a word it has never been given — a colleague's name, a
product codename, a tool like kubectl or nginx. Custom vocabulary is where you add those
domain words so they become part of the grammar the engine listens for.
┌─ Voice Commands ▸ Custom Vocabulary ──────────────────┐
│ Teach the offline recognizer your words │
│ │
│ [ kubernetes ✕ ] [ grafana ✕ ] [ nginx ✕ ] │
│ [ prisma ✕ ] [ anika ✕ ] │
│ │
│ Add words: [ pnpm, kafka, otel ] [ Add ] │
│ │
│ Words: 342 / 1000 ▐█████░░░░░░░░░░░░░▌ │
└──────────────────────────────────────────────────────── ┘
- In the Custom Vocabulary section, type a word into the add box and confirm — it becomes a removable chip.
- To add several at once, type them comma-separated (
pnpm, kafka, otel) and add them in one batch. - Remove a word by clearing its chip.
Entries are de-duplicated case-insensitively, so Kafka and kafka count once.
This custom vocabulary feeds the voice-control grammar — what the hands-free engine can hear. It is separate from the workspace / personal vocabulary that hints your dictation speech model. Adding a term in one place doesn't add it to the other. For the dictation side, see Personal context and dictionaries.
The grammar budget
Everything the offline engine listens for shares one grammar — and a bigger grammar is a slower, less accurate grammar. So InkSpoke caps the total number of distinct words it will load, and shows you a live meter of how much of that budget you're using.
The budget is shared across four contributors:
- the words in your command mappings (spoken phrases),
- your app favorites (names and aliases),
- your custom vocabulary, and
- the built-in conversion words InkSpoke needs (numbers, "press", key names, and so on).
| Value | |
|---|---|
Default budget (MaxWords) | 1,000 distinct words |
| Counted as | Distinct words across mappings, favorites, custom vocabulary, and built-ins |
| Where shown | The Words: X / Y counter under Custom Vocabulary |
The meter changes color as you approach the cap so you get a warning well before you hit it:
| Meter | Usage | Meaning |
|---|---|---|
| 🟢 Green | Below 70% | Plenty of room. |
| 🟡 Yellow | 70% – 90% | Getting full — prune if you can. |
| 🔴 Red | 90% and above | Near the cap — remove words before adding more. |
The budget isn't just a hard limit — it's a quality signal. A tight, relevant grammar recognizes your real words far more reliably than a bloated one. If the meter is yellow or red, remove favorites you never target by voice and vocabulary words you no longer use, rather than trying to cram everything in.
Platform notes
The matching logic, the vocabulary, and the grammar budget behave identically on Windows, macOS, and Linux. The only difference is how the app picker discovers your installed apps when you add a favorite:
| Windows | macOS | Linux | |
|---|---|---|---|
| Installed-app discovery | System registry | Spotlight / AppleScript | .desktop entries / wmctrl |
If an app doesn't show up in the picker on your platform, you can always add it manually and set the app identifier yourself.
Next steps
- Voice commands — build the "open / close / switch to <app>" commands that these favorites resolve.
- Wake word setup — the offline engine that listens for your name and these words.
- Personal context and dictionaries — the separate vocabulary that hints your dictation speech model.
- On-device vs. cloud & privacy — why the voice grammar stays fully offline.