CLI
stdpush login, run, listen — your terminal's missing output stream.
npm install -g stdpushThat installs the stdpush command. Prefer something shorter? Add your
own shell alias: alias push=stdpush.
Connect a machine
stdpush loginYour browser opens to approve the machine — the same flow Claude Code and Codex use. The CLI receives a revocable per-machine token; your password never touches the terminal. For CI and headless boxes:
stdpush login --key std_live_... # save a project API key instead
# or just:
export STDPUSH_API_KEY=std_live_...Send
stdpush "Build finished"
./backup.sh 2>&1 | stdpush --title "Nightly backup" # stdin becomes the message
npm test || stdpush -p high "Tests failed on main"
stdpush --topic errors --click-url https://ci.example.com/42 "Deploy failed"Run anything, get pushed when it ends
stdpush run npm test
stdpush run cargo build --releasestdpush run inherits your terminal, then notifies with ✓/✗, the duration
and exit code (high priority on failure), and exits with the same code.
Safe to use in scripts.
Listen: your notifications on the desktop
stdpush listenA live tail of your notifications, right in the terminal, with a native desktop toast for each one (macOS, Windows, and Linux). Your phone still gets everything through the normal pipeline; listen is an extra tap on the stream while you're at your desk.
stdpush listen --project ci # one project only
stdpush listen --min-priority high # skip the routine stuff
stdpush listen --quiet # terminal only, no toasts
stdpush listen --json # NDJSON to stdout, pipe it anywhereThe --json mode turns your push stream into a composable input:
stdpush listen --json | jq -r .title
stdpush listen --json --min-priority high | while read -r n; do afplay alert.wav; doneListen is a tail, not a mailbox: while disconnected you miss nothing on your phone, and the terminal simply resumes when it reconnects.
First-run permissions
- macOS: the first
stdpush listencompiles a tiny local notifier app on your machine (Apple's own tools, nothing downloaded, no signing required) and macOS shows its standard prompt: stdpush would like to send you notifications. Approve it once. It then lives under System Settings → Notifications → stdpush like any app, and if you ever deny or disable it,listensays so and prints the command that reopens the right settings pane. - Windows: stdpush registers its name and icon for toasts on first use (per-user, no admin prompt) and gets its own entry under Settings → System → Notifications.
- Linux: toasts go through
notify-send; installlibnotifyif your distro doesn't ship it.
Toasts misbehaving? STDPUSH_DEBUG=1 stdpush listen prints each toast
attempt's exit status.
Projects
API keys imply their project; browser-login tokens can send to any of your projects:
stdpush projects # list (* = default)
stdpush use homelab # set the default
stdpush --project ci "Build green"