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
note

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