From claude-ntfy
Use this skill when the user wants to set up ntfy notifications for claude-ntfy. Triggers on requests like "set up ntfy", "configure notifications", "initialize ntfy", or "setup notification server". Supports both new server setup and configuration of existing servers.
npx claudepluginhub jason-hchsieh/claude-ntfyThis skill uses the workspace's default tool permissions.
Guide the user through setting up ntfy notifications for claude-ntfy. Supports both new server setup and configuration of existing servers.
Configures Bark push, WeChat, and system notifications for Claude Code via .claude/claude-notification.local.md. Provides bash scripts for proactive task alerts.
Configures Bark push, WeChat, and system notifications for Claude Code projects. Enables persistent alerts and proactive sending via PowerShell scripts after tasks.
Sends push notifications via Gotify server for long-running task completions, errors, or events using bash scripts with curl, jq, title, priority, and markdown support.
Share bugs, ideas, or general feedback.
Guide the user through setting up ntfy notifications for claude-ntfy. Supports both new server setup and configuration of existing servers.
scripts/detect-config.shscripts/test-ntfy.shdocs/CONFIG.mdThis skill helps with three scenarios:
Before asking anything, run the detect script to see what's already configured:
bash "$CLAUDE_PLUGIN_ROOT/scripts/detect-config.sh"
This shows environment variables, config files, resolved configuration, and server connectivity. Use the output to skip steps that are already done and guide the user to what's missing.
Ask the user which setup applies to them:
Which setup scenario applies to you?
1. New Server Setup
→ Start a self-hosted ntfy server using Docker Compose
→ Good for: Local development, isolated setup, full control
2. Existing Server
→ Configure to use an existing ntfy server
→ Good for: Production setups, shared infrastructure, already running
3. Public Service (ntfy.sh)
→ Use the public ntfy.sh service (no setup needed)
→ Good for: Quick testing, no infrastructure cost
Please choose: 1, 2, or 3
Run docker --version and docker compose version to verify Docker is installed.
If Docker is not available, tell the user:
https://ntfy.sh serviceThe plugin includes a Docker Compose file. Start it:
docker compose -f $CLAUDE_PLUGIN_ROOT/docker/docker-compose.yml up -d
Verify it's running:
curl -s http://localhost:8080/v1/health | head -c 200
Expected: a JSON response indicating the server is healthy. If it fails, check:
lsof -i :8080)Ask the user how they want to configure claude-ntfy:
How would you like to configure claude-ntfy?
A. Environment Variables (Temporary)
export NTFY_TOPIC="claude-alerts"
export NTFY_SERVER_URL="http://localhost:8080"
B. Config File (Persistent)
Create ~/.config/claude-ntfy/config.json
Good for: Permanent setup, survives shell restarts
Please choose: A or B
If A (Environment Variables):
Ask for the topic name and provide the export commands:
export NTFY_TOPIC="claude-alerts"
export NTFY_SERVER_URL="http://localhost:8080"
If B (Config File):
Ask for the topic name, then create ~/.config/claude-ntfy/config.json:
mkdir -p ~/.config/claude-ntfy
{
"server_url": "http://localhost:8080",
"topic": "claude-alerts"
}
Guide through verification:
# Send a test notification
curl -H "Title: Test" \
-d "Claude-ntfy is working!" \
http://localhost:8080/claude-alerts
Run the detect script to check for existing configuration:
bash "$CLAUDE_PLUGIN_ROOT/scripts/detect-config.sh"
If configuration exists, show what was found and ask if user wants to:
If no configuration found, ask the user for:
Please provide the following information:
1. Server URL (e.g., https://ntfy.example.com or http://localhost:8080)
Server URL: [user input]
2. Topic name (e.g., claude-alerts)
Topic: [user input]
3. Authentication token (if required, leave blank if not)
Token (optional): [user input]
After gathering information, offer configuration options:
How would you like to store this configuration?
A. Environment Variables (for this shell session)
export NTFY_SERVER_URL="<url>"
export NTFY_TOPIC="<topic>"
[if token] export NTFY_TOKEN="<token>"
B. Config File (~/.config/claude-ntfy/config.json)
Persistent across sessions
Follows XDG Base Directory specification
Please choose: A or B
If A (Environment Variables):
Provide the export commands with the user's values.
If B (Config File):
Create ~/.config/claude-ntfy/config.json:
mkdir -p ~/.config/claude-ntfy
{
"server_url": "<user-provided-url>",
"topic": "<user-provided-topic>"
}
If token is provided, include it:
{
"server_url": "<user-provided-url>",
"topic": "<user-provided-topic>",
"token": "<user-provided-token>"
}
If token is included, set restrictive permissions:
chmod 600 ~/.config/claude-ntfy/config.json
Test the configuration:
# Test connectivity
curl -I "<server-url>/v1/health"
Expected: HTTP 200 response
ntfy.sh is public, so just configure the topic and URL:
Using ntfy.sh (public service)
Server: https://ntfy.sh
Topic: [ask user for topic name]
Use the same configuration options as Scenario 2.3:
# Environment variable
export NTFY_SERVER_URL="https://ntfy.sh"
export NTFY_TOPIC="<user-chosen-topic>"
Or in ~/.config/claude-ntfy/config.json:
{
"server_url": "https://ntfy.sh",
"topic": "<user-chosen-topic>"
}
~/.config/claude-ntfy/config.json (XDG Base Directory spec)
{
"server_url": "http://localhost:8080",
"topic": "claude-alerts",
"token": "tk_optional_bearer_token"
}
| Field | Required | Default | Description |
|---|---|---|---|
server_url | No | http://localhost:8080 | ntfy server URL |
topic | Yes | — | ntfy topic to publish to |
token | No | — | Bearer token for authentication |
When claude-ntfy loads, it uses this precedence (highest to lowest):
NTFY_SERVER_URL, NTFY_TOPIC, NTFY_TOKEN)~/.config/claude-ntfy/config.json)http://localhost:8080)After setup, verify:
claude plugin list | grep ntfyAfter setup is complete:
Install the plugin (if not already installed):
claude plugin add /path/to/claude-ntfy
Test notifications using the test-ntfy skill:
"Send a test notification to verify setup"
Start Claude Code - Notifications will now be sent automatically
# Run the detect script to see all config sources
bash "$CLAUDE_PLUGIN_ROOT/scripts/detect-config.sh"
Precedence: env vars > config file > defaults
# Test connectivity to server
curl -I "${NTFY_SERVER_URL:-http://localhost:8080}/v1/health"
# If using Docker locally, check it's running
docker ps | grep ntfy
# Check if port is in use
lsof -i :8080
NTFY_TOKEN is set correctlytk_...)docker system dfdocker logs ntfytest-ntfy skill after setup