Custom commands
This guide describes the current build.
For an ordinary shortcut, use the in-app editor first. It avoids JSON syntax and makes the change available immediately.
- Open the Command library: tray menu → Tools → Command library, or Settings → Tools → Command library. In v0.30.0-beta.2 and v0.22.1 it is the Commands tab in Settings.
- Under Voice Commands, select Add Command.
- Choose the action and speakable phrase, then use Test on the selected row.
- Reload re-reads
commands.jsonafter you edit it outside the app. It does not load plugin files: restart Samsara after changing a Python command plugin, and after switching a command pack.
What the editor supports
The Add Command dialog supports hotkeys, launching an application or file, typing fixed text, and individual key press, hold and release actions, and mouse clicks. Multi-step macros appear in the list but are not created from the dialog; the Custom Macros pack is off by default. Plugin commands are defined in source and cannot be edited or deleted in the dialog.
Command packs
The Command library also holds the pack switches. Disabling packs you do not use improves recognition accuracy. Core and Session are always on. Pack changes need a restart. Each pack has an anchor in the settings reference.
Things you can create by voice
- “save snippet sign off” saves your last dictation under a name; “insert sign off” types it. “Open snippets” lists them.
- After a missed command Samsara can offer to save what you said as another way to say it: say “save alias”; “remove alias …” undoes it.
- “save layout work”, “restore layout”, “list layouts”, “delete layout” keep named window arrangements.
Advanced paths
Advanced users can edit commands.json in the app folder. Back it up first: an app upgrade can replace it, although the updater backs up and migrates customised commands and drop-in plugins. Close Samsara while you edit, or use Reload afterward.
Python plugins live in plugins/commands/, are loaded once at startup, and run with the same permissions as Samsara. A file ending .disabled is not loaded. A plugin declares each command with @command("phrase", aliases=[...], pack=..., risk_class=...); the risk class decides whether the command asks before running, so declare it honestly. Only use code you trust. Give each command a distinct phrase, test potentially destructive shortcuts in a disposable window, and avoid phrases that sound like ordinary dictation.