CyberCLI

← All engines · Delivery

ntfy adapter

stable

v1.0.0 · last updated 2026-06-06 · source: cybercli.delivery.channels.ntfy

§1

What it does

Push notification via ntfy.sh (or a self-hosted ntfy server) — the lowest-friction mobile push channel that needs no app-store account, no API key, just a topic name.

§2

Why you care

ntfy is the channel for the operator who wants mobile push without setting up Pushover or PagerDuty. Install the ntfy app, subscribe to a topic, and the engine pushes alerts to that topic. Self-hosted ntfy is the sovereign variant — your alerts never touch a third party.

For local-only deployments (air-gapped, regulated environments where third-party push services are off the table), self-hosted ntfy is the only mobile push path that survives. The adapter speaks both flavors with one config flag.

§3

How it works

The adapter POSTs to `{ntfy_host}/{topic}` with a JSON body carrying the title, body, priority (1-5), tags, and a click URL pointing back at the engine's `/audit?decision_id=...` page. Self-hosted ntfy + authenticated topics are configured via the credential vault.

Priority maps to CYCON: CYCON 1-2 → priority 5 (max, vibrate + bypass DND), CYCON 3 → priority 4, CYCON 4-5 → priority 3 (default). The mapping is overrideable via `[delivery.adapters.ntfy.cycon_priority_map]`.

§4

Configure & observe

CLI

$ cybercli channels test <destination_id>

POST a test notification to the configured topic; verify it lands on the operator's subscribed device.

Dashboard surfaces

/channels (ntfy card)

Configure the ntfy host (default ntfy.sh), the topic name, and (for self-hosted) the auth credentials.

Audit row shape

Outcomes emitted
notification_sentnotification_failed
Parameters block

parameters.channel: ntfy + parameters.destination_id + parameters.ntfy_host + parameters.topic_hash (NOT the raw topic — a hash, for forensic replay without leaking topic identity).

§5

Status

Stable — the public ntfy.sh + self-hosted variants both ship in the v1 acceptance install. The CYCON-to-priority mapping is the locked default; operators rarely need to tune it.

How this engine talks to the rest

Upstream · feeds this engine
Downstream · this engine feeds