prowl

command module
v0.5.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 4, 2026 License: Apache-2.0 Imports: 1 Imported by: 0

README ΒΆ

πŸ¦‰ prowl

CI Latest release Go version License

Keep watch over your pull requests.

A single-binary CLI + TUI for keeping tabs on the GitHub Pull Requests you care about. Track a list of GitHub PR URLs, then run a single command to see their current state (open / draft / merged / blocked), assignees, and GitHub merge-queue position β€” all in a Bubble Tea interactive table, with Enter to open the PR in your browser.

Re-record with vhs docs/demo/demo.tape β€” see docs/demo/.

Features

  • Interactive Bubble Tea TUI with arrow/vim (j/k) nav, open / copy / delete / refresh.
  • One-shot non-interactive listing with prowl list (use --json for agents).
  • GitHub merge-queue awareness (position + ETA).
  • Lightweight archival: move merged / closed PRs out of the active list.
  • Single static binary, no runtime dependencies beyond gh (used for auth).
  • XDG-compliant data files, compatible with the legacy prowl.sh.

Install

All install paths leave you with a prowl binary that must live on your PATH. Verify with:

prowl check

If the command is not found after installing, the directory holding the binary is not on your shell PATH β€” see the notes under each method.

Homebrew (macOS / Linux)

Copy-paste this and you're done β€” gh is pulled in as a formula dependency:

brew install figarocorso/tap/prowl
gh auth login          # follow the prompts (skip if already authenticated)
prowl check

The tap lives at figarocorso/homebrew-tap and is updated automatically on every release.

go install (Linux quick start)

Three copy-paste blocks: install Go, install gh + helpers, then install prowl. If you already have a recent Go toolchain on your PATH, skip to Step 3.

Step 1 β€” install Go

Pick one of the two options. Option B is recommended because some apt repos ship a Go version older than go install accepts.

Option A β€” distro package (Ubuntu 24.04+ / Debian trixie+):

sudo apt update && sudo apt install -y golang-go
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc

Option B β€” official tarball (any distro, latest stable Go):

GO_VER=1.23.4
curl -fsSL https://go.dev/dl/go${GO_VER}.linux-amd64.tar.gz | sudo tar -C /usr/local -xz
echo 'export PATH="/usr/local/go/bin:$HOME/go/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc

Full Go install docs: https://go.dev/doc/install.

Step 2 β€” install gh and clipboard / browser helpers
sudo apt update && sudo apt install -y gh xdg-utils xclip
gh auth login          # follow the prompts

xdg-utils lets prowl open PRs in your browser; xclip enables the copy-URL shortcut. Both are optional but recommended.

Step 3 β€” install prowl
go install github.com/figarocorso/prowl@latest
prowl check

go install drops the binary in $(go env GOBIN) (if set) or $(go env GOPATH)/bin β€” typically ~/go/bin, which Step 1 already added to your PATH.

Pre-built binaries

Grab the archive for your platform from the releases page, extract it, and move the prowl binary somewhere already on your PATH:

tar -xzf prowl_<version>_<os>_<arch>.tar.gz
sudo mv prowl /usr/local/bin/prowl
From source
git clone https://github.com/figarocorso/prowl.git
cd prowl
go build -o prowl .
sudo mv prowl /usr/local/bin/prowl     # or copy under any $PATH dir you own

Requirements

  • gh (GitHub CLI), authenticated for repos you want to inspect (prowl shells out to gh for auth state but uses cli/go-gh directly for API calls).

Optional:

  • open (macOS) / xdg-open (Linux) β€” open PRs in browser on Enter.
  • pbcopy / wl-copy / xclip / xsel β€” copy URL to clipboard.

Usage

prowl                                       # interactive TUI
prowl watch [--interval 30s]                # TUI + periodic auto-refresh
prowl list                                  # plain table on stdout
prowl list --json                           # JSON array (agent-friendly)
prowl list --open                           # only currently-open PRs
prowl list --source reviewed                # show archived list
prowl add https://github.com/owner/repo/pull/123
prowl remove https://github.com/owner/repo/pull/123
prowl archive                               # move merged/closed to reviewed
prowl get <url> [--json]                    # single-PR detail
prowl check                                 # environment / auth / data dir
prowl version
Watch mode

prowl watch opens the same TUI as prowl but re-fetches the active PR list on a timer, so a long-running window stays current without you pressing r.

prowl watch                 # default: refresh every 30s
prowl watch --interval 1m   # custom cadence (minimum 5s to spare GitHub)

Press q or Ctrl-C to exit. The default 30s balances staying fresh against the GitHub API rate limit; intervals below 5s are rejected.

Output styling: human terminals get colored, emoji-prefixed output. Pipes, NO_COLOR=1, and --plain (alias --no-color) force ASCII-only output that is safe for AI agents, scripts, and CI logs. --json is unaffected.

Data files

prowl tracks two plain-text files, one URL per line:

File Purpose
prs-active.txt PRs you're watching
prs-reviewed.txt Archive of PRs once they've merged or been closed

By default they live in ${XDG_DATA_HOME:-$HOME/.local/share}/prowl/. Legacy prs-unmerged.txt / prs-merged.txt / prs-closed.txt files are migrated automatically on first run.

Choosing a different data directory

Priority (highest to lowest):

  1. --data-dir <path> flag
  2. PROWL_DATA_DIR env var
  3. ${XDG_DATA_HOME}/prowl
  4. ~/.local/share/prowl

Individual file paths can also be overridden via PROWL_ACTIVE and PROWL_REVIEWED.

Profiles

Use --profile <name> (or PROWL_PROFILE=<name>) to keep PRs from different contexts in separate subdirectories of the data dir (e.g. work vs personal). When unset, prowl uses the base data dir unchanged so existing setups keep working.

prowl --profile work add https://github.com/acme/api/pull/1234
PROWL_PROFILE=personal prowl list
Optional config file

prowl looks for an optional YAML config at ${XDG_CONFIG_HOME:-~/.config}/prowl/config.yml:

refresh_interval: 30s
columns: [PR, Assignee, Status, Details, URL]
Raycast integration (macOS)

This repo ships two Raycast Script Commands in raycast/ that launch prowl in an iTerm tab.

By default they prefer the Go binary prowl; if it isn't on PATH they fall back to prowl.sh (legacy). Override with PROWL_BIN=/abs/path.

Authentication

prowl uses cli/go-gh and inherits whatever credentials gh has set up. Authenticate once with:

gh auth login

Public PRs work without authentication; private PRs require it.

AI / agent integration (MCP server)

prowl ships a stdio Model Context Protocol server so AI agents can query your tracked PRs directly. Start it with:

prowl mcp

Available tools (read-only by default):

Tool Purpose
list_prs List tracked PRs. Filter by source / status / assignee.
get_pr Full detail for a single PR (state, assignees, queue position).
get_pr_diff Unified diff for a PR (or summary=true for {files,+,-} digest).

Mutating tools (add_pr, remove_pr) are gated behind --allow-mutations or PROWL_MCP_ALLOW_MUTATIONS=true.

Claude Code / Claude Desktop config

Add to your mcpServers section:

{
  "mcpServers": {
    "prowl": {
      "command": "prowl",
      "args": ["mcp"]
    }
  }
}

To enable mutations, swap the args for ["mcp", "--allow-mutations"].

Legacy bash script

The original prowl.sh (Bash + gh + jq) lives in legacy/ for users not ready to switch. It reads the same data directory as the Go binary, so the two can coexist.

License

Apache License 2.0 β€” see LICENSE.

Contributing

See CONTRIBUTING.md for development setup, coverage policy, git hooks, and the release process.

Documentation ΒΆ

The Go Gopher

There is no documentation for this package.

Directories ΒΆ

Path Synopsis
internal
data
Package data fetches Pull Request metadata from GitHub.
Package data fetches Pull Request metadata from GitHub.
mcp
Package mcp implements a small stdio JSON-RPC 2.0 server that speaks the Model Context Protocol.
Package mcp implements a small stdio JSON-RPC 2.0 server that speaks the Model Context Protocol.
store
Package store reads and writes the plain-text PR list files used by prowl.
Package store reads and writes the plain-text PR list files used by prowl.
tui
Package tui hosts the Bubble Tea TUI for prowl.
Package tui hosts the Bubble Tea TUI for prowl.
ui
Package ui centralises terminal styling helpers used by the CLI.
Package ui centralises terminal styling helpers used by the CLI.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL