Skip to content

CLI

anypager is a single-binary CLI for sending alerts from your terminal, scripts, and cron jobs.

Install

bash
curl -fsSL https://anypager.app/install.sh | sh
powershell
irm https://anypager.app/install.ps1 | iex

On macOS and Linux the binary lands in /usr/local/bin/anypager; set ANYPAGER_BIN_DIR to install elsewhere. On Windows it lands in %LOCALAPPDATA%\AnyPager, which the installer adds to your user PATH — open a new terminal afterwards.

Both installers verify the download against SHA256SUMS. To skip them, take the build for your platform directly:

PlatformDownload
macOS, Apple Siliconanypager-darwin-arm64
macOS, Intelanypager-darwin-x86_64
Linux, x86-64anypager-linux-x86_64
Linux, ARM64anypager-linux-aarch64
Windows, x86-64anypager-windows-x86_64.exe

The Linux builds link statically against musl, so they run on Alpine and on older glibc distributions without extra packages.

Authenticate

bash
$ anypager login
Email: you@example.com
Check your email for the magic link...
Logged in and paired! Try: anypager 'hello world'
bash
# Generate a code in the dashboard first.
$ anypager pair ABC123
Paired successfully! Try: anypager 'hello world'

login sends you a magic link and pairs the CLI automatically once you click it. Credentials are stored in ~/.anypager/config.toml.

Send alerts

The message is the whole point, so it works with no subcommand at all:

bash
anypager "deploy finished"
anypager --critical "prod DB is down"
anypager --info "nightly backup finished"

Or explicitly via send:

bash
anypager send "deploy finished"
anypager send --critical "prod DB is down"
anypager send --target member:usr_abc123 "your build broke"
anypager send --target group:grp_backend "API error rate over 5%"
anypager send --target schedule:sch_oncall --critical "paging whoever is on call"

Output:

text
Alert alrt_9k2f queued for 1 responder(s)

Send flags

FlagMeaning
-c, --criticalCritical alert: breaks through silence, Do Not Disturb, and Focus
--infoInfo notification: fire-and-forget, no acknowledge or resolve
--workspace <ID>Send in a specific workspace (defaults to the selected one)
--target <kind:id>Destination: member:<id>, group:<id>, or schedule:<id>
-q, --quietSuppress output

--critical and --info are mutually exclusive: --critical pages loudly and waits for acknowledgement, --info just delivers an FYI that needs no response.

Without --target, the alert goes to you — the paired account's member.

Bare form uses split target flags

The subcommand-less form (anypager "msg") takes the target as two flags instead: --target-type member --target <id>. Prefer anypager send with the combined --target member:<id> form.

Workspaces and targets

bash
anypager workspace list          # list accessible workspaces
anypager workspace use ws_123    # select the default workspace
anypager targets                 # list groups and schedules in it
anypager status                  # show account, device, and workspace status

All commands

CommandDescription
anypager <MESSAGE>Send an alert (no subcommand needed)
anypager loginAuthenticate via magic link and pair automatically
anypager pair <CODE>Pair using a 6-character dashboard code
anypager unpairRemove this device
anypager statusShow account status
anypager send <MESSAGE>Send an alert with target/workspace flags
anypager workspace listList accessible workspaces
anypager workspace use <ID>Select the default workspace
anypager targetsList groups and on-call schedules

Every command exits non-zero on failure, so && / || chains behave as expected in scripts:

bash
./deploy.sh || anypager --critical "deploy failed on $(hostname)"

Configuration

~/.anypager/config.toml%USERPROFILE%\.anypager\config.toml on Windows — stores the device key (dk_…), device id, and the selected workspace. Delete the file or run anypager unpair to reset.

AnyPager — push-first on-call paging.