Skip to main content

Voice commands (Pro)

Voice commands turn your wake word into a hands-free remote control. Instead of only starting and stopping dictation, you map a spoken phrase to a real action — type a snippet, press a shortcut, open Slack, close a window, launch a URL — and trigger it by saying the reserved word "action."

This is a Pro feature. Free and trial-expired users can open the editor and build mappings, but the commands won't actually fire until you're on a Pro or Perpetual plan.

Two things must be true for a command to fire
  1. Your wake word (hands-free listening) is enabled — commands ride on the same offline listener, and it's English-only.
  2. You're on a Pro (or Perpetual) plan. If InkSpoke hears a command you've mapped while voice commands are off, it shows a balloon offering to turn them on.

How you speak a command​

Every voice command follows the same shape: your wake name, the reserved word action, then the phrase you mapped.

So with the default name "annika" and a mapping for the phrase "open slack," you say:

"annika action open slack"

The word action is reserved — it's what tells InkSpoke you're about to give a command rather than start dictation. Saying it opens a short (about 5-second) window to catch the phrase. Everything is case-insensitive.

Turn voice commands on​

  1. Open Settings → Hands-Free.
  2. Make sure the Wake Word tab shows wake word enabled (see Wake word setup). Commands can't work without it.
  3. Switch to the Voice Commands tab (marked with a PRO badge) and turn on Voice Commands.
  4. Click Manage Mappings to add your first command — or start from a starter template.
┌─ Hands-Free ────────────────────────────────────────────┐
│ Overview Wake Word [ Voice Commands ] PRO │
├─────────────────────────────────────────────────────────┤
│ Voice Commands [ ON ●— ] │
│ Continuous Commands [ ON ●— ] │
│ SendKeys injection mode [ Text Injection ▾ ] │
│ │
│ [ Manage Mappings ] Voice Favorites Vocabulary │
│ Words: 128 / 1000 │
│ │
│ [ Export ] [ Import ] │
└─────────────────────────────────────────────────────────┘

What a command can do — the 10 action types​

Every mapping runs exactly one action. When you pick the action type in the editor, the form shows only the fields that type needs.

IconAction typeWhat it doesKey fields
⌨Send KeysTypes free text where your cursor isText · Send Enter after · Secret
⌘Key CombinationPresses a key with modifiersKey · Modifiers (Ctrl/Shift/Alt/Cmd)
▶Open AppLaunches an appApp
✕Close AppQuits an app gracefullyApp
⚡Force Close AppForce-kills an unresponsive appApp
↗Bring to FrontFocuses an app's windowApp
↙Send to BackPushes an app's window behind othersApp
◇Hide AppHides an appApp
🔗Open URLOpens a URL in your default browserURL
📁Open FileOpens a file with its default handlerFile path
App actions run per-platform under the hood

Launching, closing, focusing, and hiding apps use a native path on each OS (AppleScript on macOS, Win32 on Windows, wmctrl/xdotool on Linux). For Key Combination, the cmd modifier maps to the Command key on macOS and to the Windows key on Windows.

Build a mapping in the editor​

Manage Mappings → Add Mapping opens the editor. A live "Say: annika action <phrase>" hint previews the exact utterance as you type.

┌─ Add Mapping ───────────────────────────────────────┐
│ Spoken phrase [ open {app} ] │
│ Say: annika action open {app} │
│ │
│ Action type [ ▶ Open App ▾ ] │
│ │
│ App ( ) Auto-detect from speech │
│ (•) Select specific app [ Pick ] │
│ ( ) Enter manually │
│ │
│ Group [ App Controls ▾ ] │
│ │
│ [ Cancel ] [ Save ] │
└─────────────────────────────────────────────────────┘

You'll set:

  • Spoken phrase — what you say after action. Keep it short and distinctive; long free phrases are harder for the offline engine to catch.
  • Action type — one of the ten above; the fields below adapt to it.
  • App-selection mode (for app actions) — three ways to decide which app:
    • Auto-detect from speech — resolve the app name you spoke against your Voice Favorites.
    • Select specific app — pin one app via the app picker.
    • Enter manually — type an identifier yourself.
  • Group — file the mapping under a named group or leave it ungrouped.

You can also Clone an existing mapping to seed a new one, and Edit or Delete any mapping from the list.

Reserved words the editor blocks​

Some phrases are off-limits because InkSpoke needs them for its own grammar. These are a hard error that stops you saving:

Blocked phraseWhy
actionOpens the command window.
commandOpens Command Mode (below).
pressRuns the built-in key-press command (below).
Your finish phrase (e.g. thank you annika)Stops and processes dictation.
Your cancel phrase (e.g. cancel annika)Aborts dictation.

Putting your wake name inside a phrase is only a soft warning — it works, but it's redundant, since you already say the name before action.

Secrets are stored safely

A Send Keys action can hold a secret value (say, a password snippet) instead of plain text. Secret values are encrypted at rest, so they aren't sitting in your settings as readable text. A secret can't be combined with the {last} token described below.

Make commands dynamic with placeholders​

A spoken phrase can include a placeholder that captures part of what you said and drops it into the action. Type { in a field and an autocomplete list of placeholders appears; a live chip preview highlights them.

PlaceholderCapturesExample phraseWhat it does
{app}An app nameclose {app}Targets the app you named
{text}Free texttype {text}Send Keys types what you said
{query}A search phrasesearch {query}Substitutes the phrase
{url}A URLopen {url}Substitutes the address
{path}A file pathopen file {path}Substitutes the path
{key}A key namepress {key}Substitutes the key

InkSpoke normalizes each placeholder by type — URLs, file paths, or raw text. An unrecognized name shows a soft "Unknown parameter(s)…" warning so you can fix a typo.

Long free text is unreliable offline

The wake-word engine uses a fixed offline vocabulary, so long, unpredictable dictation — full URLs, long search queries, arbitrary prose — often won't be caught cleanly. That's why the shipped Web templates deliberately avoid {query} and {url}. Prefer short, predictable phrases and lean on your custom vocabulary for words the engine should know.

Re-inject your last dictation with {last}​

In a Send Keys action, the token {last} (or {latest}) is replaced at run time with your most recent dictated text from history and typed out character by character. It's the rescue button for a dictation that landed in the wrong window because focus changed: just say the command and your last words are re-typed where your cursor is now.

  • It always uses the Unicode-safe typing path and bypasses the clipboard, regardless of your injection-mode setting.
  • If your history is empty, the command is skipped with a "No previous text to insert" status.
  • The seeded "insert last item" template is exactly this, ready to use.

The built-in "press" command​

You don't need a mapping to press keys. Say the reserved word press after action and name the keys:

  • "annika action press enter"
  • "annika action press control s"
  • "annika action press a b tab" (a sequence)

A balloon confirms the press. Because press is reserved, no mapping of yours can start with it.

The "command" trigger (Command Mode)​

Saying "annika command" opens the Command Mode overlay hands-free — the same thing the Command Mode hotkey does. Select some text first, say the trigger, then speak your instruction ("make this formal," "translate to Spanish").

How typed text is delivered​

The SendKeys injection mode picker on the Voice Commands tab controls how Send Keys text reaches the target app. It doesn't affect app or key-combo actions.

ModeHow it typesBest for
Text Injection (default)Clipboard-paste / batched Unicode — fast and Unicode-safeAlmost everything; keeps accents, emoji, and non-Latin scripts
Keystroke SimulationPer-character synthetic key presses (US-QWERTY / ASCII only)Apps and games that reject synthetic Unicode input
Power users — when to switch to Keystroke Simulation

Some games and locked-down apps ignore pasted or batched Unicode input and only accept "real" key presses. Switch to Keystroke Simulation for those. The trade-off: it's ASCII-only, so typographic punctuation (smart quotes, em dashes, ellipses) is folded down to plain ASCII, and truly non-ASCII characters can't be sent this way. Leave the default Text Injection on everywhere else.

Chain commands without repeating the wake name​

With Continuous Commands on (the default), the listener stays armed for a short follow-up window after each command or dictation finishes. You can fire the next command — or your quick-confirm phrase — without saying the wake name again.

Each success re-arms the window; it ends when you say your cancel phrase, when it times out, or when you click the countdown balloon. A small countdown balloon shows the app is still listening — you can hide it with the "…balloon" toggle. The window length reuses your Quick Confirm window setting.

SettingDefaultWhat it does
Voice Commands (VoiceCommandsEnabled)OffMaster switch; Pro-gated.
Continuous Commands (ContinuousCommandsEnabled)OnKeeps the listener armed for a follow-up.
Show continuous-command balloon (ShowContinuousCommandBalloon)OnThe listening countdown balloon.
SendKeys injection mode (CommandInjectionMode)Text InjectionHow Send Keys text is delivered.

Organize with groups​

As your command set grows, tidy it up. In Manage Mappings you can create named groups, rename them inline, reorder them, enable or disable a whole group at once, or leave mappings Ungrouped. Deleting a group moves its mappings back to Ungrouped rather than losing them.

Start from a template​

You don't have to author phrases and actions from scratch. Manage Mappings → Browse Templates opens a searchable catalog of ready-made commands grouped by category. Add one directly, or Edit before adding to open the normal form pre-filled.

CategoryExample commands
Terminalstart claude, run dev, git status, clear screen, hit {text}
App Controlsopen {app}, close {app}, switch to {app}
Text Autofilltype {text}, insert email, insert signature, insert password
Webopen google, open youtube, open github, open chat gpt
Editorsave file, find in file
Productivitycopy, paste, screenshot
Historyinsert last item
What's pre-installed vs. what you add

Only "insert last item" (the {last} re-inject command) is auto-seeded on first launch — everything else you add yourself from the catalog. "insert password" is a Pro-only secret template. If you delete a seeded command, InkSpoke won't silently resurrect it.

Template shortcuts are macOS-flavored

The templates' key combos are written for macOS (⌘S to save, ⌘F to find, ⌘H to hide, and so on). On Windows and Linux the cmd modifier maps to the Command/Windows key — check that each shortcut does what you expect in your app, and edit the mapping if not.

Back up and share with bundles​

The Export and Import buttons at the bottom of the Voice Commands tab move your whole voice-command setup — groups, mappings, app favorites, and custom vocabulary — as a single JSON file (default name inkspoke-commands-YYYY-MM-DD.json).

  • Export is available to everyone — a handy backup before you experiment.
  • Import is Pro-gated. It opens a preview where you pick which categories to bring in, then applies them, skipping anything that would conflict with what you already have.

Next steps​

  • Wake word setup — the offline listener every voice command depends on, plus finish/cancel/quick-confirm phrases.
  • Favorites & vocabulary — teach the engine your app names and jargon so {app} and custom phrases resolve reliably.
  • Command Mode — transform selected text by voice, triggerable with "<wake> command."
  • General & hotkeys — where keyboard shortcuts (including the Command Mode hotkey) live.