ntfy-notifier

Featured

Send push notifications to your phone and desktop via ntfy.

Category: Integrations Tier: Highly useful within a category Source: Newly authored Updated: 2026-07-20

What it does

The agent sets up ntfy push notifications for your scripts, cron jobs, or agent tasks. You install the ntfy app on your phone, subscribe to a topic, and then any HTTP POST to that topic URL appears as a push notification. No mobile SDK integration, no certificate management, no per-platform setup.

How an agent uses it

  • The user wants push notifications for their scripts or agent tasks.
  • The user wants alerts on their phone when a cron job fails or a deploy completes.
  • The user wants a simple notification channel without setting up Firebase, APNS, or email.
  • The user says "send me a notification", "alert my phone", or "I want push notifications from my scripts".

What you get

Install this skill and your Hermes agent can send push notifications to your phone and desktop via ntfy. No manual setup, no scripts to run — the agent handles it.

Install command

hermes skills install https://raw.githubusercontent.com/THEROCKSSS/hermes-skills-portfolio/main/skills/ntfy-notifier/SKILL.md
View SKILL.md on GitHub
---
name: ntfy-notifier
description: Use when the user wants push notifications to their phone or desktop from a script, cron job, or agent task — via ntfy's HTTP pub/sub topics — without setting up Firebase, APNS, or a mobile SDK. Covers the public ntfy.sh server and self-hosting via Docker.
version: 1.0.0
author: Hermes Agent
license: MIT
metadata:
  hermes:
    tags: [notifications, ntfy, push, pub-sub, alerting, self-hosted]
    related_skills: [webhook-receiver, uptime-kuma-self-host, cron-task]
---

# ntfy-notifier

## Overview

Send push notifications to any device using ntfy — a simple HTTP-based pub/sub notification service. No SDK, no mobile app integration, no APNS/FCM setup. Just HTTP POST to a topic URL and the notification appears on any subscribed device.

## When to Use

- The user wants push notifications for their scripts or agent tasks.
- The user wants alerts on their phone when a cron job fails or a deploy completes.
- The user wants a simple notification channel without setting up Firebase, APNS, or email.
- The user says "send me a notification", "alert my phone", or "I want push notifications from my scripts".

## Setup

### Option A: Public server (fastest)

Use the public ntfy server at `https://ntfy.sh`. No setup needed — just pick a topic name and start sending.

1. Install the ntfy app on your phone:
   - **iOS**: App Store → "ntfy"
   - **Android**: Play Store → "ntfy" or F-Droid
2. Open the app, tap "+", subscribe to a topic (e.g., `my-alerts-abc123`)
3. Send a notification to that topic from any device

### Option B: Self-hosted (private)

```yaml
# docker-compose.yml
version: "3"
services:
  ntfy:
    image: binwiederhier/ntfy:latest
    container_name: ntfy
    restart: unless-stopped
    ports:
      - "8090:80"
    volumes:
      - ntfy-data:/var/lib/ntfy
    command: serve

volumes:
  ntfy-data:
```

```bash
docker compose up -d
```

In the phone app, set the server URL to `http://your-server:8090` and subscribe to a topic.

## Sending Notifications

### curl (simplest)

```bash
# Basic notification
curl -d "Deploy complete" ntfy.sh/my-alerts-abc123

# With title and priority
curl \
  -H "Title: Server Alert" \
  -H "Priority: high" \
  -H "Tags: warning,server" \
  -d "CPU usage at 95%" \
  ntfy.sh/my-alerts-abc123
```

### Python

```python
import requests

# Basic
requests.post("https://ntfy.sh/my-alerts-abc123", data="Build complete")

# With options
requests.post("https://ntfy.sh/my-alerts-abc123",
    data="Disk space critical: 2% remaining",
    headers={
        "Title": "Disk Alert",
        "Priority": "urgent",
        "Tags": "warning,disk",
        "Actions": "view, Open Dashboard, https://grafana.example.com"
    }
)
```

### With actions (buttons in the notification)

```bash
curl \
  -H "Title: Deploy Ready" \
  -H "Actions: view, Open PR, https://github.com/me/repo/pull/42; http, Approve, https://api.example.com/approve" \
  -d "PR #42 is ready for review" \
  ntfy.sh/my-alerts-abc123
```

The notification shows buttons: "Open PR" (opens URL) and "Approve" (sends HTTP request).

## Topics and Subscriptions

Topics are pub/sub channels identified by a name. No registration — anyone with the topic name can publish or subscribe.

- **Pick a unique topic name** — `my-alerts-abc123` is better than `alerts` (which anyone could read)
- **Subscribe on your phone** — open the ntfy app, add the topic
- **Subscribe via CLI** — `ntfy subscribe my-alerts-abc123`
- **Subscribe via curl** — `curl -s ntfy.sh/my-alerts-abc123/sse` (Server-Sent Events stream)

## Priority Levels

| Priority | Behavior |
|---|---|
| `default` | Normal notification, no sound |
| `high` | Notification sound, may bypass Do Not Disturb |
| `urgent` | Notification sound, bypasses Do Not Disturb, may repeat |

```bash
curl -H "Priority: urgent" -d "Server is DOWN" ntfy.sh/my-alerts-abc123
```

## Common Patterns

| Pattern | Command |
|---|---|
| Script success | `curl -d "Backup complete" ntfy.sh/my-topic` |
| Script failure | `curl -H "Priority: high" -d "Backup FAILED" ntfy.sh/my-topic` |
| Cron job heartbeat | `curl -d "Job ran OK" ntfy.sh/my-topic` (send after each run) |
| Deploy notification | `curl -H "Title: Deploy" -d "v1.2.3 live" ntfy.sh/my-topic` |
| With action button | `curl -H "Actions: view, Logs, https://..." -d "Build failed" ntfy.sh/my-topic` |

## Common Pitfalls

1. **Public topics are public.** Anyone who guesses your topic name can read your notifications. Use a long, random topic name (e.g., `alerts-k7m3x9p2q4`), never a plain word like `alerts`. For sensitive notifications, self-host.
2. **No authentication on the public server.** The public ntfy.sh server doesn't require auth — anyone can publish to any topic they can guess. If you need auth, self-host and configure access control.
3. **Rate limiting on the public server.** ntfy.sh rate-limits to roughly 60 requests/hour per IP. For higher volume (e.g., per-line log streaming), self-host instead.
4. **Topic name collisions.** Two unrelated users on the same topic name (e.g., both picking "test") will see each other's notifications. Always use a unique, hard-to-guess topic name.
5. **No delivery guarantees by default.** ntfy is fire-and-forget — if no client is subscribed when a message is sent, it's lost unless message caching is enabled on a self-hosted server.
6. **Self-hosted push silently fails on iOS without HTTPS.** iOS requires HTTPS for background push delivery. Put a self-hosted ntfy instance behind Caddy or nginx with TLS, or iOS clients won't receive notifications when the app is backgrounded.

## Verification Checklist

- [ ] A test `curl -d "test" ntfy.sh/<topic>` (or self-hosted equivalent) returns HTTP 200
- [ ] The notification actually arrives on the subscribed device/app, not just a 200 from the API
- [ ] Topic name is long/random enough that it isn't guessable (not `alerts`, `test`, `notify`)
- [ ] Priority level matches the alert's urgency (`urgent` for outages, `default` for routine heartbeats)
- [ ] For self-hosted setups: the server is reachable over HTTPS if iOS clients are involved
- [ ] Any `Actions` buttons open the correct URL / fire the correct HTTP request when tapped
# ntfy-notifier



Send push notifications to your phone and desktop via simple HTTP requests — no SDK, no Firebase, no APNS.



## What it does



The agent sets up ntfy push notifications for your scripts, cron jobs, or agent tasks. You install the ntfy app on your phone, subscribe to a topic, and then any HTTP POST to that topic URL appears as a push notification. No mobile SDK integration, no certificate management, no per-platform setup.



## Install



```bash

hermes skills install https://raw.githubusercontent.com/THEROCKSSS/hermes-skills-portfolio/main/skills/ntfy-notifier/SKILL.md

```



## How to use



```

"Send me a notification when my build finishes"

```



The agent:

1. Picks a unique topic name (or uses one you specify)

2. Tells you to install the ntfy app and subscribe to the topic

3. Adds a curl call to your script: `curl -d "Build complete" ntfy.sh/your-topic`

4. Tests it — you get a notification on your phone



## Example



```

User: "Alert my phone if the backup script fails"



Agent:

  1. Topic: backup-alerts-x7k2m9

  2. Instructs: install ntfy app, subscribe to "backup-alerts-x7k2m9"

  3. Adds to backup script:

     curl -H "Priority: high" -H "Title: Backup Failed" \

       -d "Backup failed at $(date)" ntfy.sh/backup-alerts-x7k2m9

  4. Tests: curl -d "Test alert" ntfy.sh/backup-alerts-x7k2m9

  5. Returns: "You should see a test notification on your phone."

```



## Sending a notification



```bash

# Basic

curl -d "Hello" ntfy.sh/your-topic



# With title and priority

curl -H "Title: Alert" -H "Priority: high" -d "Server down" ntfy.sh/your-topic

```



The notification appears instantly on any device subscribed to the topic.