Skip to main content

Smart matching and precedence

InkSpoke can choose a workspace for you on every dictation, so the right vocabulary, tone, and domain knowledge apply automatically without you touching a menu. This page explains how the automatic match is scored, and the exact order InkSpoke follows when more than one thing could decide the workspace.

The short version

Add a few tags to a workspace — usually the apps and websites you use it for — and InkSpoke does the rest. When you start dictating, it looks at the window you're focused on, finds the workspace whose tags fit best, and shows that choice on the listening overlay. If nothing matches, it falls back to a workspace you've marked as the default. You can always override the pick for a single session, or pin one workspace so it's used everywhere.

How smart window matching works

When you press your dictation hotkey, InkSpoke reads three signals about the app in front of you and scores every active workspace's tags against them:

┌──────────────────────────────────────────────────────────┐
│ Foreground app │
│ │
│ Window title → "invoice_march.xlsx — Excel" ← primary
│ App name → "Excel" ← fallback
│ Bundle id → "com.microsoft.Excel" ← strongest
│ │
└─────────────────────────────────────────────────────────┘
│ score against every active
▼ workspace's tags
┌───────────────────────┐
│ Highest score wins │
└───────────────────────┘

The scoring follows a clear ranking:

Match on…Tag formStrength
Bundle idbundle:<id> (e.g. bundle:com.microsoft.VSCode)Strongest — scores highest
Window titleplain tag (e.g. github, jira)Strong — beats an app-name match on a tie
App nameplain tag (e.g. excel, slack)Fallback

The window title is the primary signal because it's the most specific — it often contains the document name, the site, or the repo you're in, not just the program. A bundle:<id> tag is the most precise of all and always wins a tie, which makes it the reliable choice on macOS where bundle identifiers are stable.

It tolerates near-spellings

You don't have to tag every exact variant of an app's name. Matching is forgiving in two ways:

  • Small typos and near-spellings are accepted for tags of five characters or more (up to a couple of characters of difference). A tag like slack still matches even if the window text is slightly off.
  • Trailing version digits are ignored — the tag iterm matches a window called iTerm2.
Tag the site, not just the app

Because the window title is the primary signal, a browser tag like github or figma will match whenever that site's name is in the tab/window title — even though every tab runs in the same browser. The workspace wizard can add a website tag for you by fetching the page's title automatically.

Turning smart matching on or off

Smart matching (labeled Smart Injection in the app) is on by default. You'll find the toggle on Settings → Workspaces.

SettingWhereDefaultWhat it does
Smart Injection (SmartInjectionEnabled)Settings → WorkspacesOnTurns automatic window matching on or off

When it's off, InkSpoke won't auto-pick anything from the window — the overlay's workspace list starts at Select Workspace instead of Auto, and it uses only a pinned or default workspace (see below).

Same on every OS

Smart matching works the same on Windows, macOS, and Linux. It relies on the platform reading the foreground window's title and app info, so the behavior is identical — only the underlying system used to read that information differs.

The precedence order

Smart matching is only one of four ways a workspace can be chosen, and they don't compete freely — InkSpoke resolves them in a strict priority order. The first one that yields an active workspace wins; if a candidate is inactive or has been deleted, InkSpoke falls through to the next.

PrioritySourceScopeHow you set it
1Pinned workspaceSticky — used everywhere until you unpinStar it in Settings → Workspaces (or in the wizard)
2Overlay overrideThis dictation session only, not savedPick it from the workspace dropdown on the listening overlay
3Smart auto-matchPer window, automaticNothing to do — just add tags
4Default workspaceFallback when nothing above appliesKebab menu on the grid card, or the detail panel

A useful way to read this: pinning is a deliberate "always use this," an overlay override is a one-off "use this just now," smart matching is the everyday automatic behavior, and the default is the safety net.

Pin, override, and set a default

Pin a workspace (always use this one)

Pinning forces one workspace for every dictation, ignoring the window entirely. It's ideal when you're heads-down on a single project.

  1. Open Settings → Workspaces.
  2. On the workspace card, click the star / pin control.
  3. The pinned workspace is shown on the page and now takes priority over smart matching.

To go back to automatic behavior, unpin it — smart matching resumes immediately.

Override for one session (just this time)

When the auto-match isn't what you want for a particular dictation, change it right on the listening overlay. This choice lasts only for the current session and is never saved.

┌────────────────────────────────────────────────┐
│ ● Listening… Alt+Space │
├────────────────────────────────────────────────┤
│ ▁▃▅▇▅▃▁▂▄▆▄▂ │
│ │
│ [ Workspace: ● Legal ▾ ] [ EN ▾ ] [ Send ]│
└────────────────────────────────────────────────┘
  1. Start dictation as usual so the overlay appears.
  2. Open the workspace picker dropdown.
  3. Choose a different workspace — or Auto to hand control back to smart matching.

A green indicator marks the workspace that smart matching pre-selected, so you can see at a glance what InkSpoke chose before you change it. Learn more on The listening overlay.

Set a default (the fallback)

The default workspace is used only when nothing is pinned, you didn't override, and smart matching found nothing. It's independent of smart matching — a good place to put your everyday general-purpose workspace.

  1. Open Settings → Workspaces.
  2. On the workspace card, open the kebab (⋮) menu and choose Set as default (you can also set it from the workspace's detail panel).
  3. That workspace now fills in whenever no higher-priority choice applies.

Power users

  • bundle:<id> beats everything. If a plain tag keeps matching the wrong app (common with Electron apps that share a browser-like title), add a bundle:<id> tag instead — it scores highest and wins ties. On macOS, use the app's bundle identifier; on Windows and Linux, a plain app-name tag is usually enough.
  • Only active workspaces are considered. A deactivated workspace is skipped at every level of the precedence chain, and InkSpoke falls through to the next candidate — so deactivating is a quick way to take a workspace out of matching without deleting it.
  • A hotkey for smart matching. You can assign a hotkey to toggle Smart Injection on and off. It has no default binding, so it stays unbound until you set one in your hotkey settings.
  • Nothing matched? If every check comes up empty, InkSpoke dictates with your global settings only (personal context, global vocabulary, and your active models) — never a wrong workspace.
Pinning overrides the window

While a workspace is pinned, smart matching is effectively bypassed — the pinned workspace is used even in apps it wasn't tagged for. If auto-matching suddenly seems "stuck," check whether a workspace is pinned.

Next steps