the pngr cli
pngr is a single binary that does everything the web UI does, from the
terminal or CI. The same binary also runs the MCP
server for AI agents — pngr mcp.
install
# macOS / Linux (Homebrew)
brew tap marfx000/tap
brew install pngr
# Linux / CI
curl -sSL https://pngr.dev/install.sh | sh
# Go
go install pngr.dev/cli@latest
authenticate
The CLI authenticates with a personal access token — there's no
password login. Mint a token from
/settings/api-tokens in the web UI, then:
pngr auth login --token pngr_pat_… # stored at ~/.config/pngr/config.yaml (mode 0600)
pngr auth whoami # verify — prints current user + active org
In CI, set the PNGR_TOKEN env var instead — it overrides the config
file:
PNGR_TOKEN=$SECRET pngr monitor list --output json
The CLI is a credential cache, not an account manager. auth login
just stores the token locally — no server call. auth logout clears it
locally and makes no server call either; the token stays valid until you
revoke it from /settings/api-tokens. A PAT
acts as you, carrying your role in every org you belong to.
command reference
auth & config
pngr auth login --token pngr_pat_… store a PAT from /settings/api-tokens
pngr auth logout clear local config (no server call)
pngr auth whoami show current user + active org
pngr auth token print the stored PAT
pngr config show show active config (api url, org, token path)
pngr config set <key> <val> set a config value
pngr version
organizations
pngr org list list orgs you belong to
pngr org use <slug> switch active org (saved to config)
pngr org show show current org details
pngr org members list members and roles
pngr org invite <email> invite a member
monitors
pngr monitor list list all monitors with status
pngr monitor show <id|name> detailed view: status, uptime %, last result
pngr monitor create interactive prompt OR --flags
pngr monitor edit <id|name>
pngr monitor delete <id|name>
pngr monitor pause <id|name>
pngr monitor resume <id|name>
pngr monitor check <id|name> trigger an immediate check, stream the result
pngr monitor watch live auto-refreshing status table
incidents
pngr incident list recent incidents across all monitors
pngr incident list --monitor <id|name>
pngr incident show <id> full incident timeline
channels & rules
pngr channel list
pngr channel create interactive, type-specific prompts
pngr channel test <id|name> send a test notification
pngr channel delete <id|name>
pngr rule list
pngr rule create
pngr rule edit <id|name>
pngr rule delete <id|name>
stack / gitops
pngr apply -f stack.yaml reconcile the active org to match the file
pngr apply -f stack.yaml --dry-run print the diff without making changes
pngr apply -f stack.yaml -y skip the confirm prompt (CI)
pngr apply -f stack.yaml --prune delete resources not in the file
pngr diff -f stack.yaml tight-output alias for apply --dry-run
pngr dump export current org as a stack file (stdout)
pngr dump --merge stack.yaml re-emit preserving comments + key order
See stack as code for the full GitOps workflow.
output formats & config
Every command takes --output json or --output yaml for scripting.
The config file lives at ~/.config/pngr/config.yaml (XDG-compliant);
env vars override every value:
api_url: https://api.pngr.dev/v1
token: pngr_pat_… # overridden by PNGR_TOKEN
active_org: my-org-slug
output: table # table | json | yaml