Commands
What ships in the palette out of the box, the plugin shelf that's off by default, and how a command in your own folder shadows one of ours.
A command is a shell script, and everything in this page is one, including every built-in. There is no privileged tier: read any of them, copy one, or replace it with your own.
Built-in commands
Out of the box: Activity Monitor, Brew Services, Camera, Capitalize / Lowercase (rewrite the text selected in any app), Clipboard History, Emoji & Symbols, Find Files, Force Quit, Lock Screen, Ports, Report Pounce Issue, Screenshots, and System Settings, where every pane is its own command, so "Displays" goes to Displays rather than to the Settings window.
On a Homebrew install there is one more: Update Pounce, which self-updates
in place. brew upgrade pounce on Homebrew, an in-place swap when the app was
dragged to /Applications, or a nudge to haus update on Nix and haus, since
the next rebuild would revert an in-place update anyway.
Two-step commands
Some commands open a second picker instead of acting immediately (Brew
Services lists services, Force Quit lists processes), and Pounce swaps the
list in place, with no window flicker. That is not a special capability;
it's a script calling pounce again. See writing your own
command.
The plugin shelf
A shelf of plugins ships off by default, because each assumes a specific tool, service, or app:
| Plugin | What it does | Needs |
|---|---|---|
| Audio Devices | Switch sound output & input | switchaudio-osx |
| Bluetooth | Connect & disconnect paired devices | blueutil |
| Caffeinate | Keep the Mac awake, indefinitely or on a timer | nothing |
| Docker | Start/stop/restart & tail container logs | any engine that answers docker ps |
| GitHub | Jump to your PRs, reviews, issues & repos | gh, authenticated |
| Perplexity | A fresh Perplexity thread from a typed question | a browser |
| Spotify | Playback controls | Spotify.app |
| SSH Hosts | Pick a host from ~/.ssh/config | hosts in ~/.ssh/config |
| Tailscale | Connect/disconnect, copy an IP | the tailscale CLI |
On Nix, enable by id:
pounce-commands.override { plugins = [ "docker" "ssh" ]; }Off Nix, every plugin is still just one script: copy it from
pkgs/pounce-commands/optional/
into ~/.config/pounce/commands/ and it is live on the next ⌘Space.
Where commands are discovered
Later sources shadow earlier ones by filename, so yours always win:
$POUNCE_BUILTIN_DIR: the built-ins that ship with the package$POUNCE_EXTRA_COMMAND_DIRS(colon-separated): layers added by Nix consumers like haus$POUNCE_COMMAND_PATH(colon-separated): ad-hoc extra directories~/.config/pounce/commands: yours, highest precedence
Override a built-in
Want to change what "Lock Screen" does? Drop your own lock.sh in
~/.config/pounce/commands/ with the same filename, and yours takes over.
A non-.sh file (a .tsv or .json data catalog) is ignored wherever it
sits. A helper script that shouldn't itself be a command belongs in a
subdirectory (e.g. data/), which Pounce doesn't descend into.
Hiding, renaming and binding a row
Any command, app or built-in mode can be dropped from the list, given a search shorthand, or given a global key of its own, all in one map, in config:
{
"items": {
"cmd:brew-services": { "enabled": false },
"cmd:emoji": { "alias": "emo", "hotkey": "opt+space e" }
}
}Beyond launching
Two opt-in behaviours that aren't a palette: an MRU window switcher, and asking an app to quit when its last window closes.
Writing your own command
One shell script with an optional comment header. No SDK, no manifest, no build step. Plus submenus, chaining, and pounce as a generic picker.