hausfold

pounce

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:

PluginWhat it doesNeeds
Audio DevicesSwitch sound output & inputswitchaudio-osx
BluetoothConnect & disconnect paired devicesblueutil
CaffeinateKeep the Mac awake, indefinitely or on a timernothing
DockerStart/stop/restart & tail container logsany engine that answers docker ps
GitHubJump to your PRs, reviews, issues & reposgh, authenticated
PerplexityA fresh Perplexity thread from a typed questiona browser
SpotifyPlayback controlsSpotify.app
SSH HostsPick a host from ~/.ssh/confighosts in ~/.ssh/config
TailscaleConnect/disconnect, copy an IPthe 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:

  1. $POUNCE_BUILTIN_DIR: the built-ins that ship with the package
  2. $POUNCE_EXTRA_COMMAND_DIRS (colon-separated): layers added by Nix consumers like haus
  3. $POUNCE_COMMAND_PATH (colon-separated): ad-hoc extra directories
  4. ~/.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" }
  }
}

On this page