Instead of one command per application, write one command with a slot: open {app} handles every app you have favourited.
The six slots
This is a fixed set. Anything else is flagged as an unknown parameter in the editor:
| Slot | For | How the spoken value is handled |
|---|---|---|
{app} | An application | Fuzzy-matched against your Voice Favourites |
{text} | Free text to type | Passed through as spoken |
{query} | A search term | Passed through as spoken |
{url} | A web address | "dot" → ., "slash" → /, "at" → @; https:// added if missing |
{path} | A file path | "slash" → your OS separator, "tilde" or "home" → ~, "up" → .. |
{key} | A key to press | Parsed as a key name |
{channel} or {recipient} are not supported. The editor will warn you, and at runtime the value is passed through with no handling.Writing one
Behind the scenes each phrase is compiled to an anchored pattern where literal words must match and the slot captures the rest. When several commands could match, the one with the most literal words wins — so open google beats open {app} for that exact phrase.
How {app} finds the right app
The spoken tail is scored against your Voice Favourites — exact name, then alias, then first word, then partial match, then a similarity comparison. A strong match runs immediately. A middling one offers a "Did you mean?" prompt with up to five suggestions. A weak one tells you it could not match.
Where this runs out of road
Because the recogniser only emits words from a fixed list, long or unpredictable values are unreliable. InkSpoke does try to recover them — when it recognises a known literal prefix, it replays the buffered audio through an unrestricted pass to capture what followed.
It works well for a filename or a short phrase. It is not a good way to dictate a full URL or a long search query, which is why no such templates ship.