Documentation

From your agent to your phone.

Set up Nudge, understand each alert, and find the fix when delivery stops.

01 / Setup

Get started

  1. Run the installer. Run the direct installer, or hand the cookbook to an agent. You will choose an access mode, notification types, and phone. Setup needs Docker (or Colima) and Node.
  2. Subscribe in the ntfy app. Use the server URL and topic the installer shows. All alert types share that one topic.
  3. Confirm the test alert. The installer sends one to your phone before setup is complete.
Open install guide
02 / Management

Managing your install

There is no separate CLI. Re-run the installer to add an agent or update — it keeps your server and topic. Each agent keeps its settings in its own file.

Management commands and what they do
TaskHow
Add an agent or updateRun sh install.sh again; the existing topic is kept.
Check what is wiredbash scripts/uninstall.sh --json inventory, read-only.
Stop notificationsbash scripts/uninstall.sh 1; the server keeps running.
03 / Delivery

How it works

  1. 01

    Your agent

    A supported agent reports questions, permission requests, finished turns, and failures.

  2. 02

    Nudge

    The plugin classifies the event, writes a short caption, and publishes it to ntfy.

  3. 03

    Your ntfy server

    Your server receives the alert. Auth allows your token to publish while anonymous subscribers can only read.

  4. 04

    Your phone

    The ntfy app shows alerts from one topic. On iOS, a content-free wake signal helps deliver them while the app is closed.

Keep the generated topic private. Anyone who knows its name can subscribe when anonymous reading is enabled.

04 / Alerts

Notifications

Five kinds of alerts arrive on the same topic.

Notification types, triggers, and examples
KindWhen it firesExample
❓ QuestionThe agent asks for input, including a form prompt.Pick environment · staging | prod
🔒 PermissionThe agent waits for your approval.read · config.json
✅ FinishedA turn completes without a question.Done in 1m 52s · 9 tools
🚨 ErrorA session or tool call fails. Repeats collapse for 60 seconds.shell failed · ECONNRESET
📣 CustomThe agent calls the ntfy_notify tool.Whatever the agent wrote

Codex currently supports question, permission, and finished alerts. Error and custom alerts are available in OpenCode. Codex permission pings are muted when global Auto-review is set or Full access/never ask is reported. Codex hooks cannot see per-chat reviewer overrides.

Questions and permission requests are urgent; errors are high priority; finished alerts use the default priority. Change alert settings.

05 / Connection

Access modes

Choose how your phone reaches your ntfy server.

Access modes, phone requirements, and availability
ModePhone needsWorksNotes
LocalSame Wi-FiHome networkPlain HTTP on a trusted LAN.
TailscaleTailscale appAnywherePrivate access with a *.ts.net TLS name.
CloudflareNothing extraAnywherePublic URL through a Cloudflare Tunnel.

If you switch modes, re-subscribe in the ntfy app using the new server URL.

06 / Settings

Configuration

The installer writes these settings for you. OpenCode settings live in project or global opencode.json. The table below describes OpenCode options. Codex uses .codex/nudge.json with serverUrl, token, topic, and event toggles; its hooks live in .codex/hooks.json and require trust in /hooks. Command Code, Pi, and Hermes keep their own nudge.json — ~/.commandcode/nudge.json, ~/.pi/agent/nudge.json, ~/.hermes/nudge.json (project scope uses .commandcode/ and .pi/).

Configuration options and what they control
SettingWhat it controls
serverUrlThe ntfy server Nudge publishes to. Use the address your agent can reach.
tokenPermission to publish. You can use a literal token or NTFY_TOKEN.
baseTopicThe topic your phone subscribes to. Nudge generates one if you leave it unset.
eventsWhich alert kinds are enabled, plus their priority and tags.

If the phone uses a different URL from the agent, make sure both URLs reach the same server.

07 / Fixes

Troubleshooting

Common notification issues and fixes
What you seeWhat to check
No alerts on your phoneCheck the server URL and topic in the ntfy app, then check that agent's nudge.json. In OpenCode, you can also ask for a test alert with ntfy_notify. Confirm that the event kind is enabled.
Publish fails with 401 or 403The publish token is missing or wrong. Update token or NTFY_TOKEN.
iOS alerts arrive only while the app is openFor a self-hosted server, check its upstream-base-url: "https://ntfy.sh" setting.
Alerts stopped after changing access modesRemove the old phone subscription and add it again with the new server URL.
08 / Uninstall

Uninstall

Three cumulative levels. Level 1 removes each agent's config and stops notifications; level 2 also stops the server and tunnel, keeping data; level 3 wipes data and the plugin clone and is irreversible.

Start with the read-only inventory, then run the level you want. Level 3 needs the exact data-dir path confirmed.

curl -fsSL https://raw.githubusercontent.com/tomfc23/nudge/main/scripts/uninstall.sh -o uninstall.sh

Legacy ~/.config/ntfy-archive settings are removed by level 1. Full details: UNINSTALL.md.