The pattern
Nerve has two sender paths for external events: webhook senders for services that can post HTTPS, and the CLI for scripts or machines that can run nerve send. Both are signal sources, not inbox credentials.
A sender can create alerts for one pipe. It cannot read history, decrypt old content, connect as an agent, or execute commands.
Protocol-first integrations
Nerve does not need a separate exporter for every tool that can already post HTTP or run a command. Use webhook senders for HTTPS-capable services, nerve send for scripts and CI runners, the GitHub Action for GitHub workflows, API paths for custom senders, and the optional agent for signed bounded actions.
For Prometheus, Grafana, Alertmanager, Playwright, GitHub Actions, cron, backup scripts and deploy tools, Nerve is the encrypted phone delivery path. The source system remains the detector or workflow owner.
Webhook sender
Use the webhook path when a SaaS product, monitor, deploy tool, or automation platform can send an HTTP event but cannot install the CLI. Keep the payload short: title, status, environment, URL, and the few fields needed to decide what to do next.
Script output
# Send the output of any command
./deploy.sh 2>&1 | tail -5 | nerve send
# Send on failure only
./backup.sh || echo "backup failed on $(hostname)" | nerve send --severity critical
Curl response
# Forward API response to your phone
curl -s https://api.example.com/status | jq -r '.message' | nerve send
# Alert on non-200
HTTP=$(curl -s -o /dev/null -w "%{http_code}" https://api.example.com/health)
[ "$HTTP" != "200" ] && echo "API returned $HTTP" | nerve send --severity critical
Log file watcher
# Send every error line from a log to your phone
tail -F /var/log/app/error.log | while read -r line; do
echo "$line" | nerve send --severity alert
done
Local JSON bridge
If a service sends noisy JSON, or you need filtering before the alert leaves your network, run a tiny listener on your own machine or private network. The listener should extract a short message and call nerve send.
#!/bin/bash
# Mini webhook receiver using netcat
# Listen on port 9999, extract body, send to Nerve
while true; do
REQUEST=$(nc -l -p 9999 -q 1)
BODY=$(echo "$REQUEST" | sed -n '/^\r$/,$p' | tail -n +2)
if [ -n "$BODY" ]; then
echo "$BODY" | jq -r '.text // .message // .summary // .' 2>/dev/null | nerve send
fi
done
Git push hook
# .git/hooks/post-push or server-side post-receive
#!/bin/bash
export NERVE_DSN="nerve://TOKEN:[email protected]"
echo "Push: $(git log -1 --pretty='%s') to $(git rev-parse --abbrev-ref HEAD)" | nerve send
Makefile target
notify:
@echo "Build complete: $(PROJECT)" | nerve send
deploy: build
./deploy.sh || (echo "deploy FAILED" | nerve send --severity critical && exit 1)
@echo "Deployed $(PROJECT)" | nerve send
Systemd ExecStartPost
[Service]
ExecStart=/usr/local/bin/my-app
ExecStartPost=/bin/sh -c 'echo "my-app started on $(hostname)" | nerve send'
ExecStopPost=/bin/sh -c 'echo "my-app stopped on $(hostname)" | nerve send --severity alert'
Where encryption happens
For CLI and bridge flows, encryption happens when nerve send runs with NERVE_DSN in the sender environment. For webhook sender flows, keep the payload intentionally small and treat the webhook URL as a send-only credential scoped to one pipe.
Why not a generic webhook inbox?
Quick start
curl -fsSL https://nerve.ink/install.sh | sh
export NERVE_DSN="nerve://TOKEN:[email protected]"
echo "your first signal" | nerve send
FAQ
How do I send a webhook notification to my phone?
Use a webhook sender when the source can post HTTPS. Use nerve send when the source can run a command or when you want local filtering before sending.
Can I receive JSON webhooks on my phone?
Yes. Send concise webhook fields directly, or run a local bridge and pipe JSON through jq when you need filtering.
Is this like Pushover or ntfy?
Similar concept, but Nerve encrypts the payload before it leaves your machine and the sender token cannot read history.