CLI

stdpush login, run, listen — your terminal's missing output stream.

npm install -g stdpush

That installs the stdpush command. Prefer something shorter? Add your own shell alias: alias push=stdpush.

Connect a machine

stdpush login

Your 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 --release

stdpush 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 listen

A 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 anywhere

The --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; done

Listen 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 listen compiles 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, listen says 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; install libnotify if 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"

On this page