Skip to content

Repository files navigation

🐾 pounce

summon, aim, pounce

a keyboard-first command palette for macOS, where every command is a file

pre-release · every path that could lose your work is either reversible by design or stops to ask you first. that's the intent, not a warranty — config init won't clobber a config you already have, and brew uninstall pounce is the whole of the way out. tell us what breaks.


Hit ⌘Space, fuzzy-type three letters, hit return. Pounce is a small Swift daemon that draws a dmenu-style picker over your screen — your apps, your commands, one ranked list — and is gone again before you've thought about it.

A command is one shell script. The metadata lives in a comment. That's the whole API:

#!/bin/bash
# pounce: name = Say Hello
# pounce: icon = hand.wave
osascript -e 'display notification "🐾" with title "Pounce"'

Save that as ~/.config/pounce/commands/hello.sh and it's in the palette on the next open. No registry, no rebuild, no restart, no account.

Want a marketplace of pre-built extensions? Use Raycast. Want a launcher you can read end to end and change with a text editor? Pounce.

install

brew tap hausfold/tap
brew install pounce
brew services start pounce       # the palette daemon
pounce --request-accessibility   # approve the prompt, once

macOS gives ⌘Space to Spotlight — free it in System Settings → Keyboard → Keyboard Shortcuts → Spotlight, or pick another combo in config.json. If a key ever does nothing, pounce doctor names whatever ate it.

No Homebrew? Grab the DMG from the latest release, drag Pounce.app to Applications, open it — first launch registers a login item and starts the daemon. It's Developer ID signed and notarized either way, so there's no Gatekeeper detour and the Accessibility grant survives upgrades. On Nix, take the flake input, or kick the tyres with nix run github:hausfold/pounce -- --help.

Requires macOS 14 Sonoma or later, Apple Silicon. Updating is a nudge, never automatic: a new release pins Update Pounce to the first row until you take it, or skip that version with ⌘⏎.

what you get

  • answers, not searches — type 2*847, 72 f in c, 100 usd in eur or 14:00 utc in pst and the result pins to the top row; ⏎ copies it. No trigger prefix, no round-trip.
  • the stuff you'd otherwise hunt for — clipboard history, screenshot browser, file search, camera preview, and every System Settings pane as a first-class row that opens that pane, not just Settings.
  • your Shortcuts, as rows — every entry in your Shortcuts library is a first-class row; ⏎ runs it. It's also the way to reach an app's Shortcuts/Spotlight action: wrap it in a one-action shortcut once and it's a keystroke away, since macOS gives no one a way to fire another app's App Intent directly.
  • ⌘ is a character — the emoji picker holds symbols too, so typing command gets you ⌘, and arrows, math and box-drawing come with it. Plain Unicode; it pastes anywhere.
  • ⌘Tab across windows (opt-in) — MRU, fuzzy-filterable, per window not per app. With AeroSpace it groups rows by workspace.
  • quit on last window close (opt-in) — the Windows habit macOS never had.
  • transform the selection — pipe whatever's highlighted through any shell filter and paste it back: pounce --transform 'tr "[:lower:]" "[:upper:]"'.
  • hotkeys that are yours — the daemon grabs the key in-process (no client spawn, no socket), and leader sequences work: opt+space e → emoji.
  • pounce config init — writes a config with every setting at its default, a sentence above each, all commented out. You learn the settings by reading your own config.

MIT, no telemetry, no cloud, no login. The only things it ever calls home for are currency rates and the update check — both switched off with one line.

scripting it

Any script can borrow the palette. Pipe lines in, get the chosen one back:

echo -e "one\ntwo\nthree" | pounce -p "pick one:"

A submenu is just a command that re-invokes pounce with a new list — pick a brew service, then pick start/stop — and --chain keeps the window up between steps so it reads as one motion. Optional plugins ship the same way (docker, ssh, tailscale, spotify, bluetooth, audio, github, caffeinate, perplexity), off until you name them.

more

⌂ hausfold

About

open, native, scriptable command palette for macOS

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages