Setup
ShadowNtfy needs three things: a ntfy server you run, an AI agent that posts its permission requests and questions to a topic on that server, and the channel added in the app. Pick one of the two ways below. Either way, the public ntfy.sh server is not supported.
Option 1: paste a prompt to your AI agent
This is the same prompt ShadowNtfy shows under "Paste the setup prompt". Your AI agent does the setup itself. It does not download or run any script. At the end it replies with the Server URL, Channel, and Auth Token to enter in ShadowNtfy.
Set up notifications so ShadowNtfy on my iPhone or iPad can show your questions and permission requests. Do this yourself. Do not download or run any script, and do not pipe a remote script into a shell.
1. Use a self-hosted ntfy server this computer and my phone can both reach. Never use the public ntfy.sh server. If I already run one, ask me for its URL. Otherwise run one on this machine and lock it so a publish without a token is refused.
2. Create one topic and one token that can publish and read that topic and the same topic with "-responses" appended.
3. When you need a permission approval, or you ask me a question, POST a JSON body to that topic. Keep it under 4000 bytes. Include request_id (a new id each time) and event_type ("permission_request" or "question_request"). For a permission, include the command or file you want. For a question, include a questions array. Each item has question and options, and each option has a label.
4. Wait for my reply on the responses topic, then continue. A permission reply is allow or deny. A question reply is the option I picked.
5. Reply with exactly these lines, filled in. Show the token once:
Server URL: <url>
Channel: <topic>
Auth Token: <token>
I add those in ShadowNtfy under Channels, Add Channel (Server URL, Channel, Auth Token).Option 2: the Claude Code hook installer
If your AI agent is Claude Code and your ntfy server is already running, this script installs hooks that send permission requests and questions to your topic and wait for your answer on <topic>-responses. It merges into ~/.claude/settings.json without touching your other hooks. Download it and read it before you run it:
curl -fsSL https://shadowntfyapp.pages.dev/install.sh -o install.sh less install.sh bash install.sh
It asks for:
- Server URL of your own ntfy server, for example
https://ntfy.example.com. It refuses ntfy.sh. - Topic, which you enter in ShadowNtfy as the Channel.
- Auth token with read and write access to the topic and to
<topic>-responses.
It writes ~/.claude/hooks/shadowntfy-hook.sh, shadowntfy-notify.sh, and shadowntfy.conf (readable only by you, because it holds the token). Useful flags:
bash install.sh --updaterefreshes the hook scripts and keeps your server URL, topic, token, and any settings you added to the conf.bash install.sh --set-notify allalso notifies on session start, session end, and when the AI agent stops.action(the default) is questions and permission requests only.bash install.sh --uninstallremoves the ShadowNtfy hooks and leaves your other hooks in place.
Files: install.sh, shadowntfy-hook.sh, shadowntfy-notify.sh. Requires curl and jq.
Then add the channel
In ShadowNtfy, open Channels, Add Channel, and enter the Server URL, the Channel (your topic), and the Auth Token. Tap Test Connection. The free version includes one channel; ShadowNtfy Pro adds more.