Custom Actions, Scripts & Run Commands

Custom Actions, Scripts & Run Commands

Turn repeated commands into buttons and hotkeys: the Run Script, the automatic Setup/Archive scripts, and global or per-repo Custom Commands.

Keywords:custom commandcustom actionrun scriptsetup scriptarchive scriptbuttonhotkeyPROWL_WORKTREE_PATHPROWL_ROOT_PATHclose on successsplitterminal inputswift buildnpm testclaude -p

Overview#

Prowl has four distinct mechanisms for “run my command”:

MechanismScopeWhen it runsConfigured in
Run Scriptone per repoon demand (⌘R)Repo Settings → Run Script
Setup Scriptone per repoautomatically after a worktree is createdRepo Settings → Setup Script
Archive Scriptone per repoautomatically before a worktree is archivedRepo Settings → Archive Script
Custom Commandsmany, global or per repoon demand (button / hotkey / palette)Settings → Commands or Repo Settings → Custom Commands

All scripts run with these environment variables injected:

  • PROWL_WORKTREE_PATH — the active worktree’s directory.
  • PROWL_ROOT_PATH — the repository root.

Run Script (⌘R / ⌘.)#

A single per-repo command you launch on demand.

  • Run: ⌘R (run_script) — runs the repo’s Run Script in the focused worktree. If no Run Script is set, you’re prompted for one.
  • Stop: ⌘. (stop_script).
  • A toolbar Run button is shown when showRunButtonInToolbar is on.
  • While running, the worktree shows a running status; the tab is title-locked to the command until it finishes.

Setup Script (automatic on create)#

Set a per-repo Setup Script to bootstrap every new worktree — install deps, copy env files, warm caches, etc. It runs automatically right after worktree creation, in the new worktree, with PROWL_WORKTREE_PATH / PROWL_ROOT_PATH set.

Archive Script (automatic on archive)#

A per-repo Archive Script runs before a worktree is archived — tear down servers, clean artifacts, etc. If it exits non-zero, archiving stops and the worktree stays active, with the error shown.

Custom Commands (buttons + hotkeys)#

The most flexible option: define multiple named actions globally or per repository, each with its own SF Symbol icon, shell command, execution mode, optional close on success, and optional keyboard shortcut.

Execution modes:

ModeWhat it doesSupports “close on success”
Shell scriptruns in a new terminal tab
Terminal inputtypes the command into the focused pane
Splitruns in a new split of the focused pane (direction: right/left/down/top)

Close on success auto-closes the tab/split shortly after the command exits 0 (a brief delay lets you see the final output).

Visibility and order: local and Global commands both appear, even when their titles match. Enabled local commands appear first in their repository order, followed by enabled Global commands in their Global order. Turning a command off preserves its configuration, position, and hotkey, but removes it from the toolbar, Worktrees menu, Command Palette, and hotkey dispatch until re-enabled.

Global gates: a Global command appears in a repository only when it is enabled globally and enabled for that repository. New Global commands are enabled in every repository by default; Repo Settings can turn an individual Global command off without changing its definition. Global command fields and order are edited only in Settings → Commands.

Shortcut precedence: a repo command wins a collision with a Global command’s shortcut. Custom Command hotkeys take precedence over app shortcuts; conflicts (with reserved app actions or other custom commands) are detected when you record the key, and you choose Replace / Cancel.

Where they appear: enabled commands appear in the window toolbar, the Worktrees menu, and the Command Palette. Global commands are stored in ~/.prowl/global.onevcat.json; local commands remain in ~/.prowl/repo/<repo-name>/prowl.onevcat.json.

Example uses#

  • swift build on ⌘B (shell script).
  • npm run dev as a split that stays open (split mode, no close-on-success).
  • claude -p "review the current diff and summarize risks" (shell script) — a one-keystroke AI assistant.
  • git push && gh pr create --fill on a hotkey.

Settings recap#

  • Per repo (Repo Settings): runScript, setupScript, archiveScript, local Custom Commands, and per-repository visibility of Global Commands.
  • Global (Settings → Commands): Global Custom Commands and their order.
  • Global: showRunButtonInToolbar, showDefaultEditorInToolbar.

Gotchas for agents#

  • The three named scripts (runScript/setupScript/archiveScript) are one each per repo; Custom Commands are the “many” option at either scope.
  • Scripts always have PROWL_WORKTREE_PATH and PROWL_ROOT_PATH available — use them instead of assuming a working directory.
  • “Terminal input” mode types into whatever pane is focused — be sure of the target (the same caution as prowl send).