# Ntfyx — Phone Notifications & Replies for Claude Code, Codex and Scripts

Phone notifications for Claude Code, Codex and scripts. Send to public Topics without pairing, or pair a protected Topic for encrypted CLI messages and verified phone answers.

Official website: https://ntfyx.me/

## Verified product facts

### What is Ntfyx?

Ntfyx is a phone inbox for your AI agents and scripts, on iPhone and Android. Claude Code, Codex, scripts and server jobs send updates to your phone. When they need a decision, confirm, choose or type a reply under the original question, and the work on your computer continues. Protected Topic Agent and CLI messages are end-to-end encrypted. Public Topics allow anonymous reading and sending and do not accept answers or Call reminders. The app also offers HTTP notifications through HTTPS links, optional call-style message reminders, hourly service monitors and notification subscriptions.

Details: https://ntfyx.me/about/

### Can I send an HTTP notification or webhook to my phone?

Yes. Open HTTPS Push on the phone to prepare MyNotify. The app generates a short sk_ send-only key and prepares your HTTPS sending link. Tap Send to receive hello, or copy the link. Open it with GET to send a notification using the final URL-encoded path segment, or keep the whole copied URL fixed and POST dynamic text, JSON or form content to it. No app update or CLI is required for that URL. CLI 0.3.0 and local MCP can create independent wh_ sending keys after separate phone-approved webhook management authorization; monitor permission does not grant it. Revoking management does not itself disable existing sending URLs. The HTTPS service processes this plaintext request, then encrypts the message for authorized receivers. Keep the whole sending link private because it includes your key. Rotate the key in the app to invalidate old links. It cannot read messages, manage the Inbox or receive agent replies.

Details: https://ntfyx.me/docs/http-push/

### How does My Monitor check a service?

Open Discover → My Monitor and add a public HTTP or HTTPS address. Checks run every hour and require a final HTTP 2xx status; optionally require the response to contain specified text or a simple JSON object field equal to a chosen primitive value. Every check result is grouped into one Session per service in the system My Monitor Topic. In app 1.5.3, preview text or JSON before entering your expectation. Only notify on failure is on by default: healthy results stay in the conversation silently; turn it off to receive an alert for every check. It does not consume your custom Topic allowance. The paired CLI and local MCP tools can manage these same items after explicit, revocable phone approval valid for up to 24 hours; the grant covers all My Monitor items. The monitoring service reads the address, rule and response. Individual scheduled outcomes are kept for seven days. For weeks with check activity, a non-silent English summary with emoji is scheduled for Monday at 00:00 UTC, reporting counts, completed-check success rate and response time, subject to mute and delivery settings. This is hourly monitoring, not real-time incident response or an SLA.

Details: https://ntfyx.me/docs/service-monitoring/

### Can an agent or webhook send a call-style alert?

Yes, for protected Topics. On Ntfyx iPhone and Android 1.6.0 or later, enable Call notifications in Settings and grant the required system permissions. CLI 0.4.1 can request --alert-mode call; local MCP uses alert_mode=call, and a JSON webhook can use ntfyx.alert_mode=call. It is an attention request for a message, not a voice call or permission to execute a task. Topic mute and quiet hours control eligible alerts. Android full-screen display depends on notification and channel permissions. iOS background registration lasts up to 24 hours and needs the app opened daily to renew; unavailable registration falls back to ordinary notifications. An already in-flight iOS system call can briefly appear before ending after a quiet-state change. Focus, system settings, network and delivery limits still apply; delivery or sound is not guaranteed.

Details: https://ntfyx.me/docs/call-alerts/

### Receive messages from your own tools

Your authorized AI agents, scripts and services can send task updates to your Ntfyx Inbox. Use ntfyx send for a notification, or ntfyx ask and local MCP tools when a workflow needs your answer.

Details: https://ntfyx.me/docs/notifications/

### Can I reply to an AI agent from my phone?

In a protected Topic, allow or deny one request, choose an offered option or type a text answer. Select Reply on the question to open a quoted composer. Your answer stays below that question, and the sending computer verifies the signed reply. Sending a reply does not prove an external action has completed.

Details: https://ntfyx.me/docs/phone-approval/

### How do related messages stay together?

A Topic groups messages from sources you authorize. Use the same session ID inside the same Topic to keep one task’s updates and replies in a Session conversation. Without a session ID, each new message starts a separate conversation. Grouping does not grant access to other Topics or export the agent’s whole transcript.

Details: https://ntfyx.me/docs/sessions/

### Do I need a computer for notification subscriptions?

No. Open Discover in the iPhone or Android app, review a public notification source and confirm its subscription. No computer, CLI, pairing scan or Ntfyx account is needed. Receive future editions in its Topic; pause or unsubscribe from the phone. Each source lists its coverage and schedule. Private agent messages are not used to generate these updates.

Details: https://ntfyx.me/plugins/

### What can I use for free?

Free includes 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests, one monitor and one subscription. Notification-source subscriptions and public follows share the subscription allowance. Topic count is not a paid entitlement. Public Topics support ordinary and rich messages; protected Topics also support verified answers and Call reminders.

Details: https://ntfyx.me/limits/

### What can the server and public publishers see?

Protected Topic CLI and agent message titles, bodies, options and replies are end-to-end encrypted on your devices. Public Topic names and messages are readable by the service and anyone with the Topic ID or link. The explicit fixed monitor-access and webhook-management questions and their signed phone answers are disclosed to the service for verification. HTTPS push and webhook requests are readable by the service before encrypted delivery. Optional provider verification secrets are encrypted and stored by the service, then used in plaintext to verify the raw webhook body; they are hosted secrets, not hidden from the service. My Monitor reads the monitored address, rule and response; a public publisher knows the content it publishes. The relay routes ciphertext and processes operational metadata such as identifiers, time, size and push tokens. Do not put secrets in monitored URLs or request examples. Independent security review is not complete.

Details: https://ntfyx.me/security/

### Does a notification or reply mean the task is complete?

No. Sending, delivery, a signed answer, a one-time claim and the result of an external action are distinct states. An approval workflow must verify the answer and claim it once before continuing. Denied, expired, cancelled or unverified requests do not authorize the action. Ntfyx is not a remote shell.

Details: https://ntfyx.me/docs/phone-approval/

### Which platforms are available?

The iPhone and Android apps are publicly available. The companion CLI has signed downloads for Windows, macOS and Linux; your phone authorizes the optional Web Inbox. Android push requires Google Play services. Windows x64 / ARM64 provides the full CLI and local MCP. Apple silicon Mac native approvals are verified with Claude Code 2.1.303 and Codex 0.163.0 and require CLI 0.1.5+. Intel Mac native approvals remain unverified and return to the terminal.

Details: https://ntfyx.me/download/

### Do Claude Code and Codex work in the same way?

Both provide local MCP question tools and phone-reply guidance. Completion hooks are available on macOS / Linux. Claude Code also bridges AskUserQuestion; Codex native request_user_input is not intercepted. Native execution approvals have verified Linux x64 support for Claude Code 2.1.283 / 2.1.284 and Codex 0.158.0; Apple silicon Mac native approvals are verified with Claude Code 2.1.303 and Codex 0.163.0 and require CLI 0.1.5+. Intel Mac native approvals remain unverified and return to the terminal. Codex requires interactive TUI and /hooks trust; codex exec does not trigger permission hooks. Claude setup permission hooks require --permissions on. Other MCP clients require host-specific configuration. This is not a hosted ChatGPT or Claude app-directory connector. On Windows, use direct CLI setup or local MCP. Claude Code hooks require 2.1.139+; an older or unknown version gets MCP only. Codex on Windows provides MCP questions without automatic hooks. The marketplace plugin uses POSIX shell hooks; use direct setup on Windows. Native tool permission approvals retain their separate platform and host policy.

Details: https://ntfyx.me/docs/agent-plugins/

### How does Ntfyx differ from a push alert or chat bot?

Ntfyx combines task messages, answers attached to the original question, and Topic/Session history with an opt-in notification marketplace. A workflow can wait for a verified confirmation, choice or text answer. Push services and bots have different reply, encryption and integration features; compare their current official documentation and the setup your workflow needs.

Details: https://ntfyx.me/docs/notification-tools/

## 可核验的产品事实

### Ntfyx 是什么？

Ntfyx 是给 AI Agent 和脚本用的手机收件箱，支持 iPhone 和 Android。Claude Code、Codex、脚本和服务器任务把进展发到手机；需要你决定时，在原问题下确认、选择或回复文字，电脑上的任务接着运行。受保护 Topic 的 Agent 与 CLI 消息端到端加密。公开 Topic 无需密钥即可读写，不支持应答或 Call。App 还提供 HTTPS 链接发送的 HTTP 通知、可选来电式消息提醒、每小时服务监控和通知订阅。

说明: https://ntfyx.me/zh/about/

### 可以用 HTTP 请求或 Webhook 发通知到手机吗？

可以。在手机打开 HTTPS 推送后准备 MyNotify。App 自动生成简短的 sk_ 仅发送 key 和专属 HTTPS 发送链接。点击“发送”收到 hello，或复制链接，用 GET 访问时，最后一段是编码后的消息；也可保留整条复制地址不变，POST 动态文本、JSON 或 form 内容，无需更新 App 或安装 CLI。CLI 0.3.0 与本地 MCP 另经手机批准 Webhook 管理后可创建独立 wh_ 发送 key；监控授权不能复用，撤销管理也不会自动停用已有发送 URL。HTTPS 服务会读取这份明文请求，再为已授权接收端加密投递。完整链接包含发送 key，请保管好；可在 App 重新生成 key，使旧链接失效。它不能读取消息、管理收件箱或接收 Agent 回复。

说明: https://ntfyx.me/zh/docs/http-push/

### My Monitor 如何检查服务？

在“发现 → 我的监控”添加公开 HTTP 或 HTTPS 地址。每小时检查一次，要求最终 HTTP 状态为 2xx，也可要求响应包含指定文本，或简单 JSON 对象字段等于指定的基础类型值。每个服务在系统 My Monitor Topic 中对应一个 Session，所有检查结果进入同一会话，不占自定义 Topic 额度。App 1.5.3 可先预览文本或 JSON 再填写预期，默认仅失败时推送；正常结果静默留在会话，关闭此选项则每次检查都提醒。已配对的 CLI 与本地 MCP 可在手机明确批准后管理同一组监控，授权覆盖全部 My Monitor 项、最长 24 小时且可撤销。监控服务会读取地址、规则和响应，逐次检测记录保留七天；有检查活动的每周计划于下周一 00:00 UTC 发送带表情的英文非静默周报，统计次数、已完成检查的成功率和响应时间，仍遵守静音与投递设置。这是每小时监控，不是实时事故响应或 SLA。

说明: https://ntfyx.me/zh/docs/service-monitoring/

### Agent 或 Webhook 可以发来电式强提醒吗？

可以，用于受保护 Topic。Ntfyx iPhone 和 Android 1.6.0 起，在设置主动开启默认关闭的 Call 通知，并授予所需系统权限。CLI 0.4.1 可指定 --alert-mode call，本地 MCP 使用 alert_mode=call，JSON Webhook 使用 ntfyx.alert_mode=call。它用于提醒查看消息，不进行语音通话，也不批准任务执行。符合条件的提醒受 Topic 静音与安静时段控制；Android 全屏展示还取决于通知和渠道权限。iOS 后台登记最长 24 小时，需要每天打开 App 续期；登记不可用时退回普通通知。静音状态变化前已在途的 iOS 系统来电可能短暂出现后立即结束。专注模式、系统设置、网络和投递限制仍适用，不保证送达或响铃。

说明: https://ntfyx.me/zh/docs/call-alerts/

### 接收自己的工具发来的消息

由你授权的 AI Agent、脚本和服务可以把任务进展发到 Ntfyx 收件箱。普通通知使用 ntfyx send；工作流需要你回答时，使用 ntfyx ask 或本地 MCP 提问工具。

说明: https://ntfyx.me/docs/notifications/

### 可以在手机回复 AI Agent 吗？

在受保护 Topic 中允许或拒绝一次请求、选择给定选项，或者输入文字。点击原问题的“回复”，进入带引用的输入框；答案留在原问题下，发送方电脑会核验签名。回复已发送不等于外部操作已执行完成。

说明: https://ntfyx.me/zh/docs/phone-approval/

### 相关消息怎样留在同一个会话？

Topic 汇集已授权来源的消息。同一次任务在同一个 Topic 内使用相同 session ID，进展和回复就会留在一个 Session 会话中。不传 session ID 时，每条新消息独立成会话。分组不会授权其他 Topic，也不会导出 Agent 的完整对话。

说明: https://ntfyx.me/zh/docs/sessions/

### 通知订阅需要电脑吗？

不需要。在 iPhone 或 Android App 中打开“发现”，核对公开通知源后确认订阅，无需电脑、CLI、扫码配对或 Ntfyx 账号。后续更新进入对应 Topic，可在手机暂停或退订。每个来源分别说明覆盖范围和更新频率，不使用私有 Agent 消息生成这些内容。

说明: https://ntfyx.me/zh/plugins/

### 免费可以使用哪些功能？

免费版每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。通知源订阅与公开 Topic 关注共享名额，Topic 数量不作为付费权益。公开 Topic 支持普通与富消息，受保护 Topic 还支持已核验的应答与 Call。

说明: https://ntfyx.me/limits/

### 服务端和公开发布者能看到哪些信息？

受保护 Topic 中 CLI 与 Agent 消息的标题、正文、选项和回复在设备上端到端加密；公开 Topic 的名称和消息对服务端及持有标识或链接的人可见。明确的监控 / Webhook 管理固定授权问题及手机签名答案会披露给服务端核验。HTTPS 推送与 Webhook 请求在加密投递前对服务可见；可选供应商验证 secret 由服务加密存储，并在验签时以明文验证原始 body，是托管 secret，并非服务端不可见；My Monitor 会读取监控地址、规则和响应，公开发布者知道自己发送的内容。中继转发密文，仍处理标识符、时间、大小和推送令牌等运行元数据。不要在监控 URL 或请求示例中放密钥。尚未完成独立安全审计。

说明: https://ntfyx.me/security/

### 通知或回复送达，是否说明任务已完成？

不说明。发送、投递、签名答案、单次领取和外部操作结果是不同状态。需要审批的工作流必须先验签并单次领取，再继续操作。拒绝、过期、取消或未通过核验的请求都不构成授权。Ntfyx 不提供远程终端。

说明: https://ntfyx.me/docs/phone-approval/

### 目前支持哪些平台？

iPhone 与 Android App 已公开上架，配套 CLI 提供 Windows、macOS 和 Linux 的签名下载，手机可以授权可选的 Web 收件箱。Android 推送需要 Google Play 服务，Windows x64 / ARM64 提供完整 CLI 与本地 MCP。Apple 芯片 Mac 已验证 Claude Code 2.1.303 与 Codex 0.163.0 的原生审批，需 CLI 0.1.5+；Intel Mac 原生审批仍未验证，回到终端处理。

说明: https://ntfyx.me/zh/download/

### Claude Code 和 Codex 的接入一样吗？

两者都提供本地 MCP 提问工具和手机回复指引；macOS / Linux 提供完成通知 Hook。Claude Code 还可桥接 AskUserQuestion；Codex 原生 request_user_input 不会被拦截。原生执行审批已验证 Linux x64 上的 Claude Code 2.1.283 / 2.1.284 与 Codex 0.158.0，Apple 芯片 Mac 已验证 Claude Code 2.1.303 与 Codex 0.163.0 的原生审批，需 CLI 0.1.5+；Intel Mac 原生审批仍未验证，回到终端处理。Codex 仍需交互 TUI 与 /hooks 信任；codex exec 不触发权限 Hook。Claude setup 原生权限 Hook 需显式 --permissions on。其他 MCP 客户端需按宿主配置接入。这不是托管的 ChatGPT 或 Claude App 目录连接器。 Windows 使用 CLI 的直接 setup 或本地 MCP。Claude Code Hook 需要 2.1.139+；旧版或无法确认版本时只配置 MCP。Codex 在 Windows 提供 MCP 提问，不配置自动 Hook。市场插件的 Hook 使用 POSIX shell，Windows 请使用直接 setup。原生工具权限审批仍按单独的平台与宿主允许范围处理。

说明: https://ntfyx.me/zh/docs/agent-plugins/

### 它和普通推送或聊天机器人有什么区别？

Ntfyx 将任务消息、绑定原问题的回答、Topic/Session 记录与可选的通知商城放在一起，工作流可以等待已核验的确认、选择或文字答案。推送服务和机器人的回复、加密及集成能力各有不同，应结合其当前官方文档和自己的接入需求选择。

说明: https://ntfyx.me/zh/docs/notification-tools/

---

# Download Ntfyx for Windows, macOS, Linux and your phone

Source: https://ntfyx.me/download/

Updated: 2026-11-05

Download Ntfyx CLI 0.6.1 for Windows, macOS and Linux.

## Where to start with the public app

As of 2026-10-29, confirmed public releases are iOS 1.8.3 and Android 1.8.2. Update from your store, then use the public Topic or private connection entry on your phone. Android background push requires Google Play services.

> iPhone 1.8.3 accepts a name or link in the public Topic entry. Android 1.8.2 provides create, public subscription and private scanning entries. For agent answers, choose a protected Topic and verify one actual phone message and one signed reply.

- [Connect Claude Code / Codex to your phone](https://ntfyx.me/docs/agent-plugins/)
- [Existing public Topic: first message](https://ntfyx.me/docs/public-topics/)
- [HTTPS push](https://ntfyx.me/docs/http-push/)
- [Quickstart and mode choice](https://ntfyx.me/docs/quickstart/)
- [Creation and notification troubleshooting](https://ntfyx.me/docs/troubleshooting/)

## Download on your phone

On a computer, choose App Store or Google Play above to scan a download QR code with your phone camera. On a phone, the button opens the store directly. Direct store links also work without JavaScript. Download codes are public store links, not pairing or authorization codes.

## iPhone · App Store

Ntfyx 1.8.3 is publicly available for iOS 18.4 or later. Confirm requests or write quoted replies; related task messages stay in one conversation. Your phone authorizes CLI and browser connections. No Ntfyx account is required.

- [Download on the App Store](https://apps.apple.com/app/id6817353404)

## Android on Google Play

Ntfyx 1.8.2 is publicly available for Android 10 or later. Confirm requests, choose options or send a text reply. Google Play services are needed for push; foreground Inbox use remains available without notification permission.

- [Get Ntfyx on Google Play](https://play.google.com/store/apps/details?id=me.ntfyx.app)

## Free subscriptions, without a computer

Open Discover on your phone, choose a notification source, then review its scope, schedule and notification preference before confirming. Free includes one shared subscription slot for a notification source or public Topic follow. Topic count is not a paid entitlement; every plan has a 1,000-Topic technical limit. No computer, CLI or pairing scan is required for subscriptions. Pause or unsubscribe whenever you want.

- [Browse the notification marketplace](https://ntfyx.me/plugins/)

## CLI 0.6.1

Complete CLI and local MCP for Windows x64 / ARM64, macOS Apple silicon / Intel and Linux glibc x64 / ARM64, including phone-authorized monitor and webhook management. Every binary and archive is authenticated by the Ntfyx release signature. macOS Developer ID signing and notarization are recorded separately from native runtime acceptance.

- [macOS Apple silicon](https://ntfyx.me/releases/0.6.1/ntfyx-darwin-arm64.tar.gz)
- [macOS Intel](https://ntfyx.me/releases/0.6.1/ntfyx-darwin-x64.tar.gz)
- [Linux glibc x64](https://ntfyx.me/releases/0.6.1/ntfyx-linux-x64.tar.gz)
- [Linux glibc ARM64](https://ntfyx.me/releases/0.6.1/ntfyx-linux-arm64.tar.gz)
- [Windows x64](https://ntfyx.me/releases/0.6.1/ntfyx-win32-x64.zip)
- [Windows ARM64](https://ntfyx.me/releases/0.6.1/ntfyx-win32-arm64.zip)
- [Windows x64 executable](https://ntfyx.me/releases/0.6.1/ntfyx-win32-x64.exe)
- [Windows ARM64 executable](https://ntfyx.me/releases/0.6.1/ntfyx-win32-arm64.exe)

## Platform checks

Six release targets are available: macOS Apple silicon / Intel, Linux glibc x64 / ARM64 and Windows x64 / ARM64. Both Mac binaries carry Developer ID signatures and accepted Apple notarization. Linux x64 and Apple silicon completion hooks were tested using the actual signed release input and an isolated encrypted receiver. Native installer and upgrade checks are recorded separately; Linux ARM64 native execution and receipt on the user’s own phone were not verified in this release.

## Browser Inbox

The encrypted Web Inbox and API are live. A compatible primary iPhone or Android phone authorizes the browser as an additional receiver with independent keys. The browser does not acquire the phone management identity or earlier message history.

- [Open the Web Inbox](https://app.ntfyx.me/)

## Verify and inspect

The installer checks the release signature and the exact binary checksum before replacing an executable. The application remains proprietary; third-party licenses and runtime replacement rights are included with the release.

- [Signed release manifest](https://ntfyx.me/releases/0.6.1/manifest.json)
- [Manifest signature](https://ntfyx.me/releases/0.6.1/manifest.sig)
- [SHA256 checksums](https://ntfyx.me/releases/0.6.1/SHA256SUMS)
- [Checksum signature](https://ntfyx.me/releases/0.6.1/SHA256SUMS.sig)
- [Release public key](https://ntfyx.me/releases/0.6.1/release-public-key.pem)
- [License](https://ntfyx.me/releases/0.6.1/LICENSE)
- [Third-party notices](https://ntfyx.me/releases/0.6.1/THIRD_PARTY_NOTICES.txt)
- [Runtime library replacement instructions](https://ntfyx.me/releases/0.6.1/RELINKING.md)

## Session conversations

CLI 0.1.3 and current clients group related messages into Sessions within a Topic. Confirm or choose on the original message; select Reply for a quoted text answer. CLI 0.1.3 includes --session-id and --session-name; run ntfyx upgrade to update. Read the guide for examples, standalone-message defaults and availability.

- [Sessions and message replies](https://ntfyx.me/docs/sessions/)

## Chrome notifications and replies

Chrome extension 0.2.4 is publicly listed on the Chrome Web Store. The current protected-message protocol requires Chrome 0.4.0, submitted and still under review as of 28 October 2026. The public 0.2.4 listing does not establish compatibility with that protocol. Use the phone-authorized Web Inbox while waiting for the compatible extension. The extension provides desktop notifications, a phone-authorized Inbox and original-message replies. Each Topic needs its own phone authorization; Chrome must stay running for background checks. The current Web Inbox remains available.

- [Chrome extension: setup and publication status](https://ntfyx.me/docs/chrome-extension/)

## Runtime requirements

Runtime requirements: Windows 10 1809+, macOS 13+, and glibc-based Linux. x64 CPUs require Nehalem / SSE4.2 or newer; AVX2 is not required. These are the official requirements for the embedded Bun 1.4.2 runtime; tested systems are recorded separately.

- [Bun 1.4.2 official system and CPU requirements](https://github.com/oven-sh/bun/blob/bun-v1.4.2/docs/installation.mdx#cpu-requirements)

## Receiver versions for rich messages

Rich rendering requires iOS/Android 1.8.0, Chrome 0.4.0 or the updated Web Inbox. Verified public store versions are iOS 1.8.3, Android 1.8.2 and Chrome 0.2.4. Upgrade when the required version is available in your store. Rich rendering is already live in the Web Inbox.

- [Rich-message formats and complete example](https://ntfyx.me/docs/rich-messages/)

---

# Start free. Choose your message allowance.

Source: https://ntfyx.me/pricing/

Updated: 2026-10-29

100 messages daily free; Plus $1.99/month for 1,000 daily; Pro $9.90/month for 20,000 daily. Call and answer requests are included in those totals.

## Choose your plan

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Plus: $1.99/month, 1,000 messages per UTC day, including up to 100 Call reminders and 100 answer requests; five monitors and five subscriptions. Pro: $9.90/month, 20,000 messages per UTC day, including up to 200 Call reminders and 500 answer requests; fifty monitors and fifty subscriptions. As of 2026-10-29, confirmed public releases are iOS 1.8.3 and Android 1.8.2. Update from your store, then use the public Topic or private connection entry on your phone. Android background push requires Google Play services. Message plans require iOS/Android 1.8.0 or later. These are US-dollar reference prices. Purchase availability, localized prices and taxes are shown by your store before purchase; availability does not establish that every regional purchase flow has been tested.

| Included | Free | Plus · monthly | Pro · monthly |
| --- | --- | --- | --- |
| US reference price | $0 | $1.99 / month | $9.90 / month |
| Messages / UTC day | 100 | 1,000 | 20,000 |
| Call reminders / UTC day | 10 | 100 | 200 |
| Answer requests / UTC day | 10 | 100 | 500 |
| Monitors | 1 | 5 | 50 |
| Subscriptions (sources + public follows) | 1 | 5 | 50 |
| Topics | Same technical limit | Same technical limit | Same technical limit |
| Ads or unrelated content | None | None | None |

> As of 2026-10-29, confirmed public releases are iOS 1.8.3 and Android 1.8.2. Update from your store, then use the public Topic or private connection entry on your phone. Android background push requires Google Play services. Message plans require iOS/Android 1.8.0 or later. These are US-dollar reference prices. Purchase availability, localized prices and taxes are shown by your store before purchase; availability does not establish that every regional purchase flow has been tested. HTTPS push, hosted monitors and public sources have separate content boundaries; see the security guide.

- [Full service limits](https://ntfyx.me/limits/)

## Purchase, change plans and restore

Monthly purchases restore verified plan access, not encryption keys. Concurrent valid grants use the highest plan; their allowances do not add together. Changing stores does not cancel an existing renewal. Apple or Google Play handles purchases made in that store. Manage renewal and refunds in the original store, including after phone migration. Purchases in another store do not cancel existing renewal. Plan allowances do not stack. Store confirmation shows the effective date and any charge when changing plans. Paid plans automatically renew every month at the displayed store price until canceled. Cancel Apple renewal at least 24 hours before the period ends, or Google Play renewal before the next billing date, in the original store. Deleting the app or Inbox does not cancel a subscription. Free does not require a purchase.

- [Renewal, cancellation and refund terms](https://ntfyx.me/terms/)
- [Manage Apple subscriptions](https://support.apple.com/118428)
- [Manage Google Play subscriptions](https://support.google.com/googleplay/answer/7018481)

## If your plan changes

Existing content and valid requests are preserved. A downgrade can restrict creation and activation until you are within the applicable allowance; it does not give unlimited traffic or erase encryption keys. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

- [Recover your Inbox](https://ntfyx.me/docs/recovery/)
- [Purchase terms](https://ntfyx.me/terms/)

---

# HTTPS notifications, agent replies and hourly service checks

Source: https://ntfyx.me/docs/

Updated: 2026-10-28

Phone notifications for Claude Code, Codex and scripts. Send to public Topics without pairing, or pair a protected Topic for encrypted CLI messages and verified phone answers.

## Choose notifications or verified answers

An existing public Topic needs no pairing or key. A private HTTPS push link is send-only and the service reads its input. Verified phone answers require a paired protected Topic; CLI and agent content on that path is end-to-end encrypted.

- [Choose a path and send your first message](https://ntfyx.me/docs/quickstart/)
- [Public Topics without pairing](https://ntfyx.me/docs/public-topics/)
- [Protected questions and verified replies](https://ntfyx.me/docs/agent-reply-walkthrough/)

## Send lightweight rich messages

Choose bounded native content, from ordinary text to Markdown, tables and charts. The CLI works without MCP.

- [Rich-message formats and complete example](https://ntfyx.me/docs/rich-messages/)

## Choose the notification workflow you need

Start with the outcome: a completed agent task, a question that needs your answer, an HTTP event, an optional call-style alert, or an hourly service check. Each guide covers one workflow, setup and its limits.

- [AI agent phone notifications](https://ntfyx.me/docs/agent-notifications/)
- [Reply to an AI agent from your phone](https://ntfyx.me/docs/phone-approval/)
- [HTTP notifications and POST webhooks](https://ntfyx.me/docs/http-push/)
- [Call-style message alerts](https://ntfyx.me/docs/call-alerts/)
- [Hourly HTTP, text and JSON monitoring](https://ntfyx.me/docs/service-monitoring/)

## Start with an HTTPS notification

Yes. Open HTTPS Push on the phone to prepare MyNotify. The app generates a short sk_ send-only key and prepares your HTTPS sending link. Tap Send to receive hello, or copy the link. Open it with GET to send a notification using the final URL-encoded path segment, or keep the whole copied URL fixed and POST dynamic text, JSON or form content to it. No app update or CLI is required for that URL. CLI 0.3.0 and local MCP can create independent wh_ sending keys after separate phone-approved webhook management authorization; monitor permission does not grant it. Revoking management does not itself disable existing sending URLs. The HTTPS service processes this plaintext request, then encrypts the message for authorized receivers. Keep the whole sending link private because it includes your key. Rotate the key in the app to invalidate old links. It cannot read messages, manage the Inbox or receive agent replies.

- [MyNotify HTTPS request guide](https://ntfyx.me/docs/http-push/)

## Keep an eye on a public service

Open Discover → My Monitor and add a public HTTP or HTTPS address. Checks run every hour and require a final HTTP 2xx status; optionally require the response to contain specified text or a simple JSON object field equal to a chosen primitive value. Every check result is grouped into one Session per service in the system My Monitor Topic. In app 1.5.3, preview text or JSON before entering your expectation. Only notify on failure is on by default: healthy results stay in the conversation silently; turn it off to receive an alert for every check. It does not consume your custom Topic allowance. The paired CLI and local MCP tools can manage these same items after explicit, revocable phone approval valid for up to 24 hours; the grant covers all My Monitor items. The monitoring service reads the address, rule and response. Individual scheduled outcomes are kept for seven days. For weeks with check activity, a non-silent English summary with emoji is scheduled for Monday at 00:00 UTC, reporting counts, completed-check success rate and response time, subject to mute and delivery settings. This is hourly monitoring, not real-time incident response or an SLA.

- [My Monitor and hourly checks](https://ntfyx.me/docs/service-monitoring/)

## What Ntfyx does

Ntfyx sends task notifications and questions from AI agents, CLI tools and scripts to your iPhone, Android phone or authorized Web Inbox. Read progress, confirm a request, choose an option or write a reply beneath the original message. A Session ID keeps one task’s messages together. No Ntfyx account is required.

> iPhone 1.8.3, Android 1.8.2 and the signed Windows/macOS/Linux CLI are publicly available. Use the CLI for your own agent and script workflows; official public-content subscriptions only need the phone app. A Web browser is optional.

- [中文产品与使用说明](https://ntfyx.me/zh/docs/)
- [Read documentation as Markdown](https://ntfyx.me/docs.md)

## Just your agents and tools

Protected Topic messages from paired agents and tools are encrypted for your authorized devices. Public Topic content is visible to the service and anyone with its identifier or link. Send a message yourself or connect a source you want to hear from. Ntfyx does not insert ads or unrelated content. Your phone authorizes sources and can revoke them; Topics and quiet hours help you control alerts.

- [Who can send messages? See the FAQ](https://ntfyx.me/docs/faq/)

## The CLI and agent conversation

First authorize a source on your phone. After that, messages and answers travel as encrypted, signed envelopes. The relay routes them; your devices interpret their content.

1. Install the CLI. Run ntfyx connect and scan its fresh, one-time QR code in the phone app. Name or choose the Topic on your phone, then authorize the source. Keep the QR private.
2. Connect an agent through local MCP or a supported Claude Code / Codex hook, or use ntfyx send and ntfyx ask directly.
3. The source encrypts the title, body and context for each authorized receiver and signs the complete envelope. The relay validates and stores ciphertext. APNs or FCM can alert or wake the phone; foreground sync retrieves events. Push-provider acceptance alone does not prove delivery.
4. The phone or authorized browser verifies the sender, decrypts the content and presents the question. Allow, Deny, choice and text are all explicit answers.
5. Your receiver signs and encrypts the answer. The relay accepts the first valid answer for the pending request; another answer cannot replace it.
6. The original source verifies that the answer matches this request. An executor acquires a one-time claim and records consumption before continuing its own operation.

> An Allow is a decision, not proof of execution. A signed execution update can report what happened next, but a one-time claim cannot guarantee exactly-once effects in an external system.

## The pieces you control

An Inbox belongs to the primary phone identity. Topics separate work streams; public Topics allow anyone knowing the ID to read and send, while protected Topics require authorized sources and receivers. The phone manages both modes. A Session groups one task inside a protected Topic.

| Piece | Purpose | Authority |
| --- | --- | --- |
| Primary phone | Reads, replies and manages the Inbox. | Holds the management root and authorizes sources and browsers. |
| Topic | Groups a stream of work, such as one project. | The phone manages its signed membership list. |
| Source | A CLI, script or agent that sends messages. | Own sending and reply keys; no phone management key. |
| Web Inbox | An optional second screen for new messages. | Own receiver keys; only phone-approved access. |

- [Start with the quickstart](https://ntfyx.me/docs/quickstart/)

## Why the content stays private

For protected Topics, content is encrypted on the sending endpoint for the intended receivers. Content private keys stay on authorized endpoints; the relay does not receive those private keys. Each envelope also carries a signature, so a client checks who sent it and which request an answer belongs to. Pairing binds the one-time secret to the service origin, device role and keys.

| Protected content | What the service still sees |
| --- | --- |
| Protected message titles, bodies, options, answers, links and local display labels are encrypted. Topic API names are service metadata; protected clients use a fixed wire label. | Opaque routing IDs, timing, size, event kind, request state and delivery information. |
| A new browser receives independent keys and only newly addressed messages. | Its authorization, connection and revocation state. |
| Browser private keys are non-extractable WebCrypto keys; the local cache is encrypted. | A compromised endpoint or malicious served app code can still read content after decryption. |

> Encryption does not hide all metadata or traffic. There is no full key transparency or historical forward secrecy after receiver-key compromise. The service is not independently security-audited.

- [Read the security model](https://ntfyx.me/security/)
- [Data handling and retention](https://ntfyx.me/privacy/)

## When something changes

A phone can revoke a source or browser. Old browser history is not shared with a newly authorized browser, and removing access cannot erase content that was already delivered. Pending requests expire at their deadlines; an old draft, late answer or lost connection must never turn into a fresh Allow.

- [Recovery and lost devices](https://ntfyx.me/docs/recovery/)
- [Service limits and retention](https://ntfyx.me/limits/)

## When the agent needs your input

Completion alerts, tool permission requests and missing information need different integrations. Use the guide below to choose a supported permission hook or explicitly ask for a choice or text reply through the CLI or local MCP. Existing terminal prompts are not automatically forwarded.

- [Agent waiting for input: notifications and replies](https://ntfyx.me/docs/agent-waiting-for-input/)
- [Multiple coding agents and projects](https://ntfyx.me/docs/multiple-agent-notifications/)
- [SSH and remote server jobs](https://ntfyx.me/docs/ssh-job-notifications/)

## Session conversations

CLI 0.1.3 and current clients group related messages into Sessions within a Topic. Confirm or choose on the original message; select Reply for a quoted text answer. CLI 0.1.3 includes --session-id and --session-name; run ntfyx upgrade to update. Read the guide for examples, standalone-message defaults and availability.

- [Sessions and message replies](https://ntfyx.me/docs/sessions/)

## Chrome notifications and replies

Chrome extension 0.2.4 is publicly listed on the Chrome Web Store. The current protected-message protocol requires Chrome 0.4.0, submitted and still under review as of 28 October 2026. The public 0.2.4 listing does not establish compatibility with that protocol. Use the phone-authorized Web Inbox while waiting for the compatible extension. The extension provides desktop notifications, a phone-authorized Inbox and original-message replies. Each Topic needs its own phone authorization; Chrome must stay running for background checks. The current Web Inbox remains available.

- [Chrome extension: setup and publication status](https://ntfyx.me/docs/chrome-extension/)

## Notification sources

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Open Discover in the iPhone or Android app, review a public notification source and confirm its subscription. No computer, CLI, pairing scan or Ntfyx account is needed. Receive future editions in its Topic; pause or unsubscribe from the phone. Each source lists its coverage and schedule. Private agent messages are not used to generate these updates. Free includes 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests, one monitor and one subscription. Notification-source subscriptions and public follows share the subscription allowance. Topic count is not a paid entitlement. Public Topics support ordinary and rich messages; protected Topics also support verified answers and Call reminders.

- [All sources, schedules and phone availability](https://ntfyx.me/plugins/)

## How Ntfyx compares with notification tools

Ntfyx combines task messages, answers attached to the original question, and Topic/Session history with an opt-in notification marketplace. A workflow can wait for a verified confirmation, choice or text answer. Push services and bots have different reply, encryption and integration features; compare their current official documentation and the setup your workflow needs.

- [Compare Ntfyx, ntfy, Bark, Pushover and Gotify](https://ntfyx.me/docs/notification-tools/)
- [Messages, replies and free-use FAQ](https://ntfyx.me/docs/faq/)

## Follow a complete workflow

Two reproducible walkthroughs show the steps, what was actually verified, and how to recognize failures or timeouts.

- [Walkthrough: send hello from your phone](https://ntfyx.me/docs/https-push-walkthrough/)
- [Walkthrough: agent questions, replies and one-time claims](https://ntfyx.me/docs/agent-reply-walkthrough/)

## Develop a notification source

Run your own collector, submit its metadata and sample, and wait for phone review before publishing to subscribers. This is separate from a local agent plugin.

- [Official notification plugin development](https://ntfyx.me/docs/plugin-development/)

## More agent notification and reply workflows

Choose a guide by task completion, waiting for input and agent host.

- [Claude Code notifications](https://ntfyx.me/docs/claude-code-notifications/)
- [Codex notifications and replies](https://ntfyx.me/docs/codex-phone-approval/)
- [An agent is waiting for input](https://ntfyx.me/docs/agent-waiting-for-input/)
- [AI agent notifications on your phone](https://ntfyx.me/docs/agent-notifications/)

## Public Topics: send your first notification without pairing

Anyone with an existing public Topic ID or link can read and send without an account, pairing or key. The name and messages are readable by the service and anyone with the link; keep passwords, private logs and approval requests out of it. Public messages support text, Markdown and lightweight rich content, without answers, approvals or Call reminders. Use a protected Topic for private messages, authenticated senders or signed answers.

- [Public Topics: send your first notification without pairing](https://ntfyx.me/docs/public-topics/)

## Complete your own automation task

Start with a complete, copyable example and check the job result, send receipt and phone message separately.

- [GitHub Actions failure notifications](https://ntfyx.me/docs/github-actions-notifications/)
- [n8n workflow error notifications](https://ntfyx.me/docs/n8n-error-notifications/)
- [Script and PowerShell notifications](https://ntfyx.me/docs/notifications/)

---

# Quickstart: your first notification or verified answer

Source: https://ntfyx.me/docs/quickstart/

Updated: 2026-10-29

Choose an existing public Topic, private HTTPS push or protected Topic. Check the first message on your phone, then try a verified answer.

## Choose your first task

For a notification, start with the route that fits your sender. Complete one message receipt on your own phone; use a protected Topic when an Agent needs your answer. The connection animation illustrates protected Topic pairing.

| Goal | What you need | Content boundary |
| --- | --- | --- |
| Notify an existing public Topic | A real shared link or ID; browser or CLI 0.6.0+ | No pairing; service and link holders can read, link holders can send; no answers or Call |
| Send from a service over HTTPS | A private sending link generated on your phone | The link contains a send-only key; service reads input before encrypted delivery |
| Let an Agent wait for an answer | Phone app, CLI and protected Topic pairing | Authorized Source encrypts locally; answers require verification and one-time claim |

- [Public Topic: first message](https://ntfyx.me/docs/public-topics/)
- [HTTPS push tutorial](https://ntfyx.me/docs/http-push/)

## Notification path: public Topic or private HTTPS link

With an existing public Topic, follow the public guide to check its name, send a non-sensitive message and confirm phone receipt. The phone must own or have confirmed following the Topic; visiting its webpage is not a subscription. For a non-public notification, use the complete private link from phone HTTPS Push and follow its hello walkthrough. The service can read HTTPS input; use the protected CLI route below when content must be encrypted at the sender.

> As of 2026-10-29, confirmed public releases are iOS 1.8.3 and Android 1.8.2. Update from your store, then use the public Topic or private connection entry on your phone. Android background push requires Google Play services.

- [Check public downloads](https://ntfyx.me/download/)
- [Phone hello walkthrough](https://ntfyx.me/docs/https-push-walkthrough/)

## Answer path: prepare the phone and CLI

Install Ntfyx on iPhone or Android and the CLI on Windows, macOS or Linux. Android background push requires Google Play services. Follow the installer for your OS, then check ntfyx version. The commands below work once the CLI is installed on any of these desktop platforms; use the PowerShell installation instructions on Windows. No Ntfyx account is required, but your phone must authorize this sender.

```
ntfyx version --json
ntfyx connect
```

- [Install for your OS](https://ntfyx.me/install/)
- [Phone apps and version requirements](https://ntfyx.me/download/)

## 1. Connect a protected Topic

Keep ntfyx connect running, choose the private Topic connection option on the phone and scan the fresh QR on your trusted computer. Confirm the Source and choose a protected Topic; when creating through pairing, follow the connection flow offered by your installed version. A public link is not a pairing code. Once connected, run topics and note the local CLI alias. Replace Work below if your listed alias differs.

```
ntfyx topics
```

> The QR authorizes a sender you trust; keep it private. If a creation entry is missing, check the version guidance in troubleshooting and preserve your current identity and data.

- [Creation and pairing troubleshooting](https://ntfyx.me/docs/troubleshooting/)

## 2. Receive an encrypted notification

Send this non-sensitive test and open its Topic in the phone Inbox. Confirm that Build 42 passed appears. CLI success means acceptance by the service; phone foreground synchronization, background push and a system banner are separate observations. Foreground Inbox synchronization can work even when system notification permission is declined.

```
ntfyx send "Build 42 passed" --topic Work --json
```

- [Message received without an alert](https://ntfyx.me/docs/troubleshooting/)

## 3. Answer a harmless question

Keep the terminal waiting, open the original question on the phone and choose Allow or Deny. This command demonstrates a question; it is not connected to a deployment, payment or external action. Synchronous ask verifies the answer at the original Source and acquires its one-time claim before returning an allowed result. Deny is a complete answer; a timeout is not consent and a late answer cannot restart an ended job.

```
ntfyx ask "Continue this harmless demo?" --topic Work --allow-deny --wait 60s --expires 90s --json
```

> Accept the answer path only when the original CLI reports its verified outcome, not merely when the phone shows submitted. A successful Allow exits 0, Deny exits 10 and a wait timeout exits 14. A successful read-only result query is not execution authorization.

- [Connect your Agent](https://ntfyx.me/docs/agent-plugins/)
- [Signed answers and execution boundaries](https://ntfyx.me/docs/phone-approval/)

## Optional: receive new messages in a browser

Open the Web Inbox and authorize its fresh QR with the primary phone. The browser receives independent receiver keys and reads new messages addressed to it after authorization; it does not inherit old phone history. Keep the page open for updates. A public Topic webpage does not need this pairing step, and its content is public.

- [Open Web Inbox](https://app.ntfyx.me/)
- [Follow the troubleshooting checks](https://ntfyx.me/docs/troubleshooting/)

---

# CLI reference.

Source: https://ntfyx.me/docs/cli/

Updated: 2026-10-27

Send notifications, ask questions, inspect state, and integrate carefully.

## Connections and delivery

connect displays an existing connection without silently replacing it. create explicitly asks for a new Topic. send publishes a notification. ask supports confirmation, choices, and text. Use --help for the exact syntax supported by your installed build.

```
ntfyx connect
ntfyx create
ntfyx send "Done"
ntfyx ask "Continue?" --allow-deny
ntfyx result REQUEST_ID
ntfyx doctor
```

## Result and claim are different

Reading result is read-only. It is not permission to repeat an action. A verified answer must pass a one-time claim and a durable local ledger before resuming the original invocation. Retry ambiguous delivery with the original ID and exact signed bytes. Never turn a timeout, cancellation, invalid answer, or network error into Allow.

## Exit codes

Use structured JSON and the installed CLI help for automation. A successful result read is separate from permission to execute an action.

| Code | Meaning |
| --- | --- |
| 0 | The documented command succeeded. |
| 2 | Invalid input. |
| 10 | Denied by the receiver. |
| 11 / 12 / 13 | Expired / cancelled / replaced. |
| 14 / 15 | Wait timed out / already consumed. |
| 20 / 21 | Pairing or ambiguous Topic / revoked or invalid credential. |
| 22 / 23 | Quota or inactive Topic / network or delivery uncertainty. |
| 24 / 25 / 26 | Verification failure / local storage failure / unsupported host. |

## Timeouts and stdin

ask owns its request and applies the keep-pending rule when its wait ends. result only observes and does not cancel the request when a wait ends. stdin data must remain within the 16 KiB payload limit. Claude permission context that exceeds the limit returns to the terminal; it must never be truncated and remotely approved.

## Local security

Credentials live in restricted local files. Compiled binaries must not auto-load project .env or bunfig files. Run from untrusted working directories only with the hardened released executable. Do not paste pairing links, recovery codes, tokens, or content into diagnostic reports.

## Session conversations

CLI 0.1.3 and current clients group related messages into Sessions within a Topic. Confirm or choose on the original message; select Reply for a quoted text answer. CLI 0.1.3 includes --session-id and --session-name; run ntfyx upgrade to update. Read the guide for examples, standalone-message defaults and availability.

- [Sessions and message replies](https://ntfyx.me/docs/sessions/)

## Session conversations

CLI 0.1.3+ supports --session-id and --session-name on send and ask, with NTFYX_SESSION_ID and NTFYX_SESSION_NAME as defaults. Keep the same ID for one task; without an ID each message starts a separate conversation.

```
ntfyx send "Build passed" --session-id release-24 --session-name "Release v2.4"
```

- [Session guide](https://ntfyx.me/docs/sessions/)

## Manage My Monitor from CLI or MCP

CLI 0.2.0 can manage the same My Monitor items as your phone. Open My Monitor in the app once, then authorize your paired Source. Your primary phone must approve the exact monitor read/write scope. The default grant lasts 24 hours; --expires accepts 5 minutes to 24 hours. It ends when it expires, you revoke it, the Source is disconnected, or phone/root authority changes. Phone and root private keys stay on the phone. Only this authorization question and answer are explicitly disclosed to the service for verification; ordinary agent exchanges keep their existing encryption.

```
ntfyx monitor authorize
ntfyx monitor add --name "My service" --url https://example.com/health --dry-run
ntfyx monitor add --name "My service" --url https://example.com/health
ntfyx monitor list
ntfyx monitor show MONITOR_ID
ntfyx monitor update MONITOR_ID --json-field ok --equals true
ntfyx monitor test MONITOR_ID
ntfyx monitor pause MONITOR_ID
ntfyx monitor resume MONITOR_ID
ntfyx monitor revoke
```

> Agents can start with monitor authorize --async --no-input, then poll monitor auth-status AUTHORIZATION_ID. Pending, Deny and expiry never grant access. The same commands operate on the existing hourly service; they do not install a local scheduler. Revoke stops this Source's management access while saved monitors keep running.

## Discover capabilities and recover work

Use capabilities or help COMMAND --json for command schemas and authorization requirements. Unsupported command options fail before remote work; send --dry-run is rejected. topics and sources list only local connection profiles. requests list/show read this Source's encrypted local request ledger without claiming replies; use result REQUEST_ID for current server status. marketplace list/show verify the public catalogue signature and do not subscribe you to anything. MCP provides capability discovery and the monitor authorization, management and test tools.

```
ntfyx capabilities
ntfyx help monitor add --json
ntfyx requests list --limit 20
ntfyx requests show REQUEST_ID
ntfyx marketplace list
```

## Preview, concurrency and safe retries

monitor add/update accept a complete configuration through --stdin; updates made with flags preserve unspecified fields. --dry-run returns a plan without changing server state. --operation-id accepts a stable base64url ID of 22–80 characters. Reuse it with exact input after an uncertain response; the protected local ledger retains the original intent. --generation checks the record version and rejects concurrent changes instead of overwriting them. monitor test/preview return exit 1 for an unhealthy observation; their JSON explains the result. Reads do not create monitor alerts. Keep response samples as untrusted data, not agent instructions.

## Separate webhook keys with CLI or MCP

CLI 0.3.0 and the local MCP tools can manage independent wh_ sending keys. First prepare HTTPS Push on the primary phone, pair your Source, then request separate webhook management permission. Your phone must approve the fixed Topic and scope; monitor permission does not grant webhook management. The management grant lasts up to 24 hours. A created key can last until its owner Source expires, which can be longer than that grant.

```
ntfyx webhook authorize --async --no-input --expires 24h --json
ntfyx webhook auth-status AUTHORIZATION_ID --json
ntfyx webhook create --name "Deploy alerts" --url-file ./private-webhook-url.txt --json
ntfyx webhook list --json
ntfyx webhook show WEBHOOK_ID --json
ntfyx webhook update WEBHOOK_ID --name "Production deploys" --dry-run --json
ntfyx webhook rotate WEBHOOK_ID --url-file ./next-private-webhook-url.txt --json
ntfyx webhook disable WEBHOOK_ID --json
ntfyx webhook enable WEBHOOK_ID --json
ntfyx webhook delete WEBHOOK_ID --json
ntfyx webhook revoke --json
```

> --url-file must name a new file: the CLI creates it with owner-private permissions (0600 on macOS/Linux; current-user DACL on Windows) and returns only its path and metadata. The raw URL/key is not returned through ordinary stdout, MCP or the local ledger. Updates preserve omitted fields and support --dry-run, --operation-id=ID and --generation N.

## Stop sending and revoke management separately

webhook revoke ends the current Source's management grant; it does not disable keys already created. Use disable or delete to stop an individual URL. Owner Source revocation or expiry, a primary-phone key/identity change, or a root-version change invalidates its keys. Pausing the parent HTTPS sender pauses its children and can be resumed with the same parent token. Rotating the parent token invalidates old child keys. Each Inbox supports up to 100 nondeleted keys. At capacity, the service can reclaim permanently invalid keys; revoked management grants or a recoverable parent pause do not cause reclamation. Keys share the existing HTTPS sender's 60 requests per minute admission limit. Ordinary message limits also apply: 30 new messages per minute and 10 per 2 seconds per Source.

## Optional GitHub or Standard Webhooks signatures

Generic mode authenticates the private bearer URL. For a child key, explicitly choose github or standard and provide a separate private verification-secret file. GitHub checks X-Hub-Signature-256 against the raw request body; it does not sign the delivery ID or timestamp. Standard Webhooks binds the delivery ID, timestamp and raw body, with a 300-second past/future window. A configured signature mode rejects missing or invalid signatures; a header alone never enables a mode or permits a downgrade. Standard Webhooks is a community convention, not a universal payload format.

```
ntfyx webhook create --name "GitHub events" --signature-mode github \
  --verification-secret-file ./github-webhook-secret.txt \
  --url-file ./private-github-url.txt --json
```

> The service encrypts and stores the verification secret and uses its plaintext to verify requests. This is a hosted secret, not a secret hidden from the service. Switching to none removes it. Webhook bodies are processed by the service before encrypted delivery; ordinary Agent messages keep their existing encryption.

- [GitHub signature validation](https://docs.github.com/en/webhooks/using-webhooks/validating-webhook-deliveries)
- [Standard Webhooks specification](https://github.com/standard-webhooks/standard-webhooks/blob/main/spec/standard-webhooks.md)

## Desktop CLI and MCP platforms

Windows x64 / ARM64, macOS Apple silicon / Intel and Linux glibc x64 / ARM64 provide the full CLI and local MCP, including messages, questions, phone-authorized My Monitor and webhook management. Native host permission approvals have separate adapter, operating-system, version and tool requirements. On Windows, use direct CLI setup or local MCP. Claude Code hooks require 2.1.139+; an older or unknown version gets MCP only. Codex on Windows provides MCP questions without automatic hooks. The marketplace plugin uses POSIX shell hooks; use direct setup on Windows. Native tool permission approvals retain their separate platform and host policy.

| Platform | CLI / MCP, monitors and webhooks | Native host permission approvals |
| --- | --- | --- |
| macOS Apple silicon | Full functionality | Claude Code / Codex: subject to host-version and tool policy |
| macOS Intel | Full functionality | Native approvals stay in the terminal; CLI / MCP questions remain available |
| Linux glibc x64 | Full functionality | Claude Code / Codex: subject to host-version and tool policy |
| Linux glibc ARM64 | Full functionality | Native approvals stay in the terminal; CLI / MCP questions remain available |
| Windows x64 | Full functionality | Native approvals stay in the terminal; CLI / MCP questions remain available |
| Windows ARM64 | Full functionality | Native approvals stay in the terminal; CLI / MCP questions remain available |

> Native machine runtime acceptance, downloadable architecture and native agent permission adapters are separate evidence. Core CLI acceptance does not enable every host permission request. Codex still needs interactive TUI and the user's /hooks trust; codex exec does not trigger this approval flow.

## Runtime requirements

Runtime requirements: Windows 10 1809+, macOS 13+, and glibc-based Linux. x64 CPUs require Nehalem / SSE4.2 or newer; AVX2 is not required. These are the official requirements for the embedded Bun 1.4.2 runtime; tested systems are recorded separately.

- [Bun 1.4.2 official system and CPU requirements](https://github.com/oven-sh/bun/blob/bun-v1.4.2/docs/installation.mdx#cpu-requirements)

## Install on Windows

Run the official installer in PowerShell without administrator rights. It selects the native x64 or ARM64 download and verifies the Ntfyx release signature and exact hash. Manual script or ZIP downloads and npm with an existing Node.js 24 installation are alternatives in the detailed guide. The release signature is not a claim of Windows Authenticode signing.

```
irm https://ntfyx.me/install.ps1 | iex
ntfyx version --json
ntfyx connect
```

> If the installer reports user_path_updated=false, installation can still succeed: invoke the returned absolute target and retain your organization's PATH policy. A standalone install can pin an official immutable version with ntfyx upgrade --target-version 0.6.1 --json; npm still owns npm-installed updates.

## macOS / Linux shell and npm

install.sh is for macOS and Linux; do not run its bash command as a PowerShell installer. npm requires Node.js 24 and installs the current wrapper on all six listed platforms, verifying the signed native binary. Standalone installations use ntfyx upgrade; npm owns updates for npm installations.

```
curl -fsSL https://ntfyx.me/install.sh | bash

# npm / Node.js 24
npm install -g ntfyx@0.6.1
ntfyx version --json
ntfyx connect
```

## Plain and rich messages

CLI 0.6.0 independently sends ordinary text, Markdown and native metric/table/chart messages, with local validation before sending. See the guide for receiver version requirements and store availability.

- [Rich-message formats and complete example](https://ntfyx.me/docs/rich-messages/)

## Public Topics: send your first notification without pairing

Anyone with an existing public Topic ID or link can read and send without an account, pairing or key. The name and messages are readable by the service and anyone with the link; keep passwords, private logs and approval requests out of it. Public messages support text, Markdown and lightweight rich content, without answers, approvals or Call reminders. Use a protected Topic for private messages, authenticated senders or signed answers.

- [Public Topics: send your first notification without pairing](https://ntfyx.me/docs/public-topics/)

---

# AI agent phone notifications and replies: Claude Code, Codex and MCP

Source: https://ntfyx.me/docs/agents/

Updated: 2026-10-29

Use Ntfyx for AI agent completion notifications, choices and text replies from your phone. Connect Claude Code, Codex, pi or local MCP with documented host limits.

## Phone replies and Session conversations

CLI 0.6.0 and plugin 0.4.1 include rich messages, Session IDs, a phone-reply skill and the Claude AskUserQuestion bridge. Single-choice questions use buttons with an optional text alternative; multi-select currently uses typed option numbers. Codex uses MCP for phone questions; native request_user_input is not intercepted. Execution approvals below have a separate compatibility matrix.

- [One-command setup and marketplace plugins](https://ntfyx.me/docs/agent-plugins/)

## Agent setup on Windows

On Windows, use direct CLI setup or local MCP. Claude Code hooks require 2.1.139+; an older or unknown version gets MCP only. Codex on Windows provides MCP questions without automatic hooks. The marketplace plugin uses POSIX shell hooks; use direct setup on Windows. Native tool permission approvals retain their separate platform and host policy.

```
ntfyx setup claude-code --dry-run
ntfyx setup claude-code

ntfyx setup codex --dry-run
ntfyx setup codex
```

- [Windows installation and platform scope](https://ntfyx.me/docs/cli/#install-on-windows)

## MCP

After connecting the CLI to your phone, add a local stdio server to your MCP client. It starts the executable shown below. Merge this entry with existing servers; do not replace unrelated configuration or weaken your client’s tool policy.

```
{"mcpServers":{"ntfyx":{"command":"ntfyx","args":["mcp"]}}}
```

> MCP exposes notification and question tools. It does not imply native interception of every permission prompt in every agent.

## Claude Code

In CLI 0.1.5, ntfyx setup claude-code adds question and notification hooks plus the MCP server; native permission hooks are off by default and require ntfyx setup claude-code --permissions on. Setup merges selected lifecycle hooks to your Claude Code settings, with a backup of each file. The PermissionRequest adapter handles one invocation at a time, with a 90-second remote wait and a 100-second hook timeout. Existing deny rules and other hooks stay in place, and the terminal can still answer. A late Allow cannot revive an invocation that has ended. Unsupported tools, oversized context, unexpected payloads, verification failures and timeouts return control to the terminal.

```
ntfyx setup claude-code --dry-run
ntfyx setup claude-code
```

## Codex

Requires ntfyx CLI 0.1.2 or later on Linux x64, or 0.1.5 or later on Apple silicon Mac. ntfyx setup codex adds a PermissionRequest hook for shell commands (Bash) and file changes (apply_patch), plus a Stop hook, to your Codex hooks.json, and registers the MCP server with codex mcp add. Codex runs only hooks you have reviewed: open Codex and trust the two ntfyx hooks with /hooks. Approvals work in interactive sessions. codex exec turns approvals off, so it never asks.

```
ntfyx setup codex --dry-run
ntfyx setup codex
```

- [Step-by-step Codex phone approval setup](https://ntfyx.me/docs/codex-phone-approval/)
- [Codex usage and reset-credit alerts](https://ntfyx.me/docs/codex-usage-alerts/)

## Install as a plugin

Plugin 0.4.1 includes step-by-step phone setup, rich-message guidance, local MCP, phone replies, completion/approval hooks, and Claude AskUserQuestion forwarding. Requires CLI 0.6.0+. Add the public Ntfyx marketplace; official curated-directory inclusion is separate. Use either the plugin or ntfyx setup for each agent to avoid duplicate hooks.

```
# Claude Code
/plugin marketplace add KaylaONeal/ntfyx-agent-plugins
/plugin install ntfyx@ntfyx

# Codex (then trust the hooks with /hooks)
codex plugin marketplace add KaylaONeal/ntfyx-agent-plugins
codex plugin add ntfyx@ntfyx

# pi
pi install git:github.com/KaylaONeal/ntfyx-agent-plugins
```

## pi

The pi package registers the ntfyx MCP tools, adds the skill and sends a notification when a turn ends. Phone approval for bash is opt-in: risky asks before commands such as rm -rf, sudo, git push, publish and deploy; bash asks before every command. Deny blocks the command. Without a verified phone answer, pi falls back to its own confirmation, or blocks when there is no UI.

```
NTFYX_PI_APPROVAL=risky pi
NTFYX_PI_APPROVAL=bash pi
```

## Verification status

Phone approval is enabled from the minimum verified host version on a verified platform, and only when the request payload matches the host’s documented format. Anything unexpected goes back to the terminal. Real-host runs with the compiled CLI and the encrypted relay passed for Claude Code 2.1.283 (full suite) and 2.1.284 (Bash, Edit and Write, Allow and Deny) and for Codex 0.158 in an interactive session (Bash and apply_patch, Allow and Deny), all on Linux x64. Apple silicon Mac real-host verification on 19 October 2026 also passed with Claude Code 2.1.303 (8 lifecycle/tool cases and 6 policy cases) and Codex 0.163.0 (4 interactive cases), requiring CLI 0.1.5+. The receiver in those runs was programmatic, not a physical iPhone. Apple silicon Mac native approvals are verified with Claude Code 2.1.303 and Codex 0.163.0 and require CLI 0.1.5+. Intel Mac native approvals remain unverified and return to the terminal. Codex requires interactive TUI and /hooks trust; codex exec does not trigger permission hooks. Interactive terminal-choice precedence in Claude Code remains unverified.

## What an approval means

Approval permits the original, bound request once. It does not authorize arbitrary future shell commands. Ntfyx records a unique remote decision and one-time consumption; it cannot guarantee exactly-once effects for every external system.

## When the agent needs your input

Completion alerts, tool permission requests and missing information need different integrations. Use the guide below to choose a supported permission hook or explicitly ask for a choice or text reply through the CLI or local MCP. Existing terminal prompts are not automatically forwarded.

- [Agent waiting for input: notifications and replies](https://ntfyx.me/docs/agent-waiting-for-input/)
- [Multiple coding agents and projects](https://ntfyx.me/docs/multiple-agent-notifications/)
- [SSH and remote server jobs](https://ntfyx.me/docs/ssh-job-notifications/)

## Session conversations

CLI 0.1.3 and current clients group related messages into Sessions within a Topic. Confirm or choose on the original message; select Reply for a quoted text answer. CLI 0.1.3 includes --session-id and --session-name; run ntfyx upgrade to update. Read the guide for examples, standalone-message defaults and availability.

- [Sessions and message replies](https://ntfyx.me/docs/sessions/)

## Plain and rich messages

CLI 0.6.0 independently sends ordinary text, Markdown and native metric/table/chart messages, with local validation before sending. See the guide for receiver version requirements and store availability.

- [Rich-message formats and complete example](https://ntfyx.me/docs/rich-messages/)

---

# Recover your Inbox and restore purchases

Source: https://ntfyx.me/docs/recovery/

Updated: 2026-10-28

Encryption recovery and purchase restoration solve different problems.

## Create a recovery package

On a compatible primary phone, export the encrypted recovery package after local identity confirmation. It contains root and phone receiver material, never Source private keys or a plaintext message database. Save the separate recovery code securely; it is not inside the file.

## Move to a new iPhone

Import the package and enter the recovery code. The client verifies it without changing the working configuration on failure. New root and receiver keys must be saved locally before committing the migration. After successful rotation, old phone and browser sessions stop working and pending requests from before recovery are cancelled. Export an updated recovery package.

## What can be recovered

Only still-retained ciphertext addressed to the recovered phone keys can be read. Already-expired history cannot be promised. An old backup cannot take over an Inbox whose root has already rotated. Sources keep their own keys; reconnect when migration or authorization requires it.

## Restore purchases

The original store can restore a valid entitlement without restoring any message keys. If all keys and backups are lost, support cannot decrypt your Inbox. Starting fresh requires an explicit service switch if the entitlement has an active Inbox; it does not silently reactivate or decrypt the old one.

## Android and cross-platform availability

Android supports the existing recovery format and single-primary-phone model. Migration rotates the root/phone and revokes the previous phone; it does not add a second primary Inbox. Bidirectional physical iPhone/Android migration and minimum installed iPhone compatibility are still being verified. Purchase restore queries only the current store and does not supply old encryption keys. Existing legitimate Inbox rights from another store stay associated with that Inbox; they are not automatically converted into a purchase in the new store.

---

# Troubleshoot missing phone alerts, Topic creation and replies

Source: https://ntfyx.me/docs/troubleshooting/

Updated: 2026-10-29

Check service acceptance, the phone Inbox and system alerts separately. Diagnose Topic creation, subscriptions, daily quotas and an Agent still waiting after a reply.

## Find the last confirmed step

Use one non-sensitive test message and note its time, App/CLI versions and visible error code. Avoid a burst of resends. Separate service acceptance, device receipt and the displayed system alert.

| Observation | Check first | Expected result |
| --- | --- | --- |
| Send errored or its result is unknown | Original error, connectivity and quota; preserve operation ID | A known rejection or safe recovery of the original send |
| Accepted, absent from phone Inbox | Correct Topic, confirmed follow and foreground refresh | The test appears in the matching phone Topic |
| Present in Inbox, absent from lock screen/banner | System permission, Topic mute, Focus and background push | A new test alerts, or an intentional mute explains it |

## The phone sees a message, but no push

When the message is in the Inbox, check alert settings first and keep the current Topic and identity. After changing a setting, send one new test and note its time and whether the app was backgrounded. Foreground synchronization does not prove that APNs/FCM push succeeded.

1. Check Ntfyx system notification permission and the banner, sound and lock-screen options you want.
2. Check mute and daily quiet hours inside this Topic, then system Focus/Do Not Disturb. Quiet hours pause alerts while messages and replies continue.
3. Open Ntfyx online to synchronize, then background it for a new test. Unlock after restarting. An iPhone before first unlock or a timed-out notification extension may show only a generic encrypted-message alert.
4. On Android, check Google Play services, connectivity to Google and the Ntfyx notification channel. Reopen after force-stop. Notification listeners/forwarders can remove alerts; blanket disabling of battery protections is not required.
5. If it still fails, report the time and the specific observation “received in phone, no system alert.” Do not include push tokens, message bodies or sending URLs.

## Accepted, but missing from the phone

Open and refresh the matching Topic. Public Topic owners receive directly; other readers must confirm the follow after preview. Reading the webpage does not subscribe the phone. Check whether the follow is paused/unsubscribed or a local block hides the source. For protected messages, match the sender’s local alias with the Topic authorized on the phone. A newly authorized browser lacking old history is expected.

1. For a public send, use public read to match the accepted message id; this establishes cloud readability only. Public content lasts 24 hours, so an empty feed after expiry does not prove earlier rejection.
2. For protected CLI messages, run ntfyx topics and ntfyx doctor as the original paired user. Do not copy another user’s credentials to repair a connection.
3. Check connectivity and the original service environment. If one foreground refresh still leaves it missing, retain acceptance time and redacted errors for support; renaming, guessing IDs or repeated creation cannot recover it.

```
ntfyx public read --topic TOPIC_ID --limit 20 --json
```

- [Public creation versus following](https://ntfyx.me/docs/public-topics/)

## Cannot create a Topic, or a name leaves the button disabled

As of 2026-10-29, confirmed public releases are iOS 1.8.3 and Android 1.8.2. Update from your store, then use the public Topic or private connection entry on your phone. Android background push requires Google Play services.

1. Check the installed version first. Update from the store if you are on 1.8.1; a backend update cannot restore its missing button.
2. On iPhone 1.8.3 or later, enter a name or link in the public Topic entry, preview the existing or new Topic and confirm. Android 1.8.2 offers separate public creation, existing public-link subscription and private scanning entries; its subscription field needs a real link or ID.
3. For agent answers, choose private scanning and a protected Topic. Public Topics cannot accept signed answers.
4. After a submitted operation with an unknown result, refresh the original Inbox and resume that operation. Preserve its identity and app data instead of starting a replacement. If it remains stuck, record the version and error code and contact support.

> Preserve app data, keys, original sending links and Inbox. Reinstalling or clearing data is not an entry troubleshooting step.

- [Current downloads](https://ntfyx.me/download/)
- [Step-by-step phone setup for agents](https://ntfyx.me/docs/agent-plugins/)

## Quota changes, daily limits and pauses

Use the actual error and phone plan usage; do not treat every failure as “no free Topics left.” Topic count is not a paid tier. Free/Plus/Pro include 100/1,000/20,000 messages per UTC day, with separate Call and question sublimits. Already accepted answers can still finish. A paired CLI can inspect usage; anonymous public senders need the owner to check.

```
ntfyx usage --json
```

| State / error | Next step |
| --- | --- |
| quota_switch_in_progress | A free-allowance recovery fix was deployed on 28 October. After network connectivity returns, retry the original operation with its original URL and operation ID. If persistent, report time/version and preserve the Inbox; do not buy again or create a new identity. |
| daily_message_limit | Check the owner’s allowance. Wait for the next UTC day or let the owner decide whether to change plans; avoid retry loops. |
| daily_call_limit / daily_request_limit | That sublimit is exhausted; wait for reset. Do not silently downgrade a question into a notification or treat timeout as Allow. |
| rate_limit / storage_limit | Honor Retry-After when present and reduce frequency. Storage is separate from daily allowance; retain evidence if it persists. |
| Paused Topic or follow | Check whether the user paused it deliberately. Restore that item only when intended; do not create another to bypass the pause. |

- [Plans and counting rules](https://ntfyx.me/pricing/)

## Answered, but the Agent did not continue

A saved phone reply is not an execution receipt. Check whether the original terminal/Agent is still running, then inspect the original request ID. The Source may be offline or revoked, its wait may have ended, or an external operation may have an unknown outcome.

1. Use result from the original paired user and CLI environment to inspect the original request. This is a read-only observation; do not add --claim just to test.
2. pending means unfinished; answered requires reading the verified decision. Preserve Deny instead of silently replacing the question to seek Allow.
3. expired/cancelled/replaced means the original request ended. A phone draft or late answer cannot revive it.
4. For a claimed answer or unknown execution outcome, inspect the original task log and target system. One-time claim cannot guarantee exactly-once external effects; do not automatically rerun them.

```
ntfyx result REQUEST_ID --json
```

- [Verified answers and one-time claims](https://ntfyx.me/docs/phone-approval/)

## Expired pairing, offline drafts and browser history

Pairing codes expire after five minutes. Generate a fresh code on the trusted Source only after the original pairing is known expired or cancelled, and check that phone and Source use the same environment. Offline drafts require connectivity and a fresh state/deadline check before submission. A new browser has independent keys and cannot read earlier messages; “Earlier request updated” does not give it authority to answer an old question. Do not edit a pairing URL or share its fragment.

## When to contact support and what to include

If the ordered checks still fail, provide App/CLI version, OS, time and timezone, redacted error code and the last confirmed step: accepted, received in phone, no system alert or answer submitted. For a missing creation entry, give the installed version; do not report a pending build’s test result as your own phone result. Preview any diagnostic report before sending it yourself. Exclude message bodies, answers, Topic links, full sending URLs, tokens, pairing codes, recovery packages and private keys.

- [Support channel](https://ntfyx.me/support/)

---

# Ntfyx encryption: CLI, HTTPS push and hosted monitors

Source: https://ntfyx.me/security/

Updated: 2026-10-28

Protected Topic CLI and agent messages are encrypted on your devices. Public Topic names and content are readable by the service and anyone with the identifier. HTTPS push and My Monitor process plaintext inputs before encrypted delivery. Understand the boundary for each path.

## The short answer

For protected Topics, your CLI encrypts message content for each authorized receiver before sending it. The iPhone or Web Inbox verifies the sender and decrypts locally. Replies are signed and encrypted back to the original source and authorized receivers. Content private keys stay on those endpoints; the relay routes ciphertext.

> End-to-end encryption protects content in transit through the relay. It does not protect a compromised endpoint, hide every piece of metadata, guarantee delivery, or prove that an approved action ran. Independent security review is not complete.

## HTTPS push and My Monitor use hosted senders

The simple HTTPS push entry point receives the title and body over TLS. Ntfyx can process that plaintext before encrypting a standard notification for the authorized receiving devices. Its phone-created push key grants sending only to one configured Topic; it cannot read messages, manage your Inbox or receive agent replies. My Monitor reads its public URL, expected rule and a bounded response to perform checks, then encrypts alerts. These hosted paths are not sender-to-phone end-to-end encryption. Protected Topic CLI and agent messages are encrypted on their sending device; public Topic content is visible to the service and anyone with its ID or link.

> Use a paired protected Topic with ntfyx send when the notification content must remain unreadable to the hosted sender. Do not place credentials in push URL query strings or monitored URLs.

- [HTTPS push and key scope](https://ntfyx.me/docs/http-push/)
- [Hourly monitor inputs and controls](https://ntfyx.me/docs/service-monitoring/)
- [Privacy and retention](https://ntfyx.me/privacy/)

## Follow one message and answer

The phone is the management authority. Scanning a private, five-minute QR authorizes a particular source or browser for a protected Topic; knowing its identifier alone grants no access. Public Topics instead allow anyone with the identifier to read and send ordinary messages, without answers or Call.

1. The phone binds authorization to the service origin, role and endpoint keys. It signs the Topic membership list. The CLI source and browser do not receive the phone management key.
2. The source verifies the membership list, encrypts a separate copy for every authorized receiver, and signs the envelope including all recipient ciphertexts.
3. The relay validates the envelope and routes stored ciphertext. APNs wakes or alerts the iPhone with a generic notification path; content is decrypted locally when keys are available.
4. The receiver checks the sender and envelope before opening its copy. A browser sees newly addressed messages after it joins, not earlier phone history.
5. The receiver signs and encrypts its answer bound to the original request. The relay accepts only the first valid answer while the request is pending.
6. The source verifies the answer and request binding, then acquires the one-time consumption claim before continuing. An external side effect needs its own durable outcome and idempotency handling.

## Who can see what?

Encryption applies to content, not all service operation. The source that creates a message and any agent or model that already had that text are inside your workflow’s trust boundary.

| Participant | Content and access |
| --- | --- |
| Your CLI / agent computer | Sees the message it creates and replies addressed to it. An agent may separately send context to its configured model provider. |
| Ntfyx HTTPS entry point / monitor service | Can read HTTPS request content or monitor configuration and bounded responses before generating encrypted notifications. A hosted publisher knows the content it sends. |
| Authorized iPhone / browser | Decrypts its addressed messages and replies. Device previews or browser extensions can expose content after decryption. |
| Ntfyx relay and gateway | Process ciphertext, opaque routing IDs, event kind, timestamps, sizes, request states and delivery information. They do not receive content private keys. Public Topic names and messages are readable by the service; a Topic API name is metadata, so protected clients upload a fixed label and retain the real label locally. |
| Apple push service | Handles notification delivery and device-token metadata. Ntfyx message plaintext is not submitted as the APNs title or body. |
| A newly authorized browser | Has independent receiver keys for newly addressed content. It does not gain the phone management root or earlier encrypted history. |

- [Providers, metadata and retention](https://ntfyx.me/privacy/)
- [Browser access and revocation](https://ntfyx.me/docs/web/)

## Cryptography and protocol scope

Protocol v1 uses HPKE with DHKEM(P-256, HKDF-SHA256), HKDF-SHA256 and AES-256-GCM. Separate P-256 ES256 signing keys authenticate compact JWS envelopes including the recipient ciphertexts. Clients verify the original signed bytes. These choices do not by themselves establish a secure system; membership checks, key handling, request binding and endpoint integrity also matter.

- [RFC 9180: Hybrid Public Key Encryption](https://www.rfc-editor.org/rfc/rfc9180)
- [RFC 7515: JSON Web Signature](https://www.rfc-editor.org/rfc/rfc7515)
- [RFC 7518: ES256 algorithms](https://www.rfc-editor.org/rfc/rfc7518)

## What Allow and revoke actually mean

A verified Allow authorizes the original bound request once. A read-only result query, message acceptance, receipt or timeout is not authorization. If a claim or external operation has an unknown outcome, investigate before retrying. Revoking a source or browser removes future service access; it cannot delete screenshots, exported text or already-delivered local copies.

> Ntfyx does not promise exactly-once effects in an external deployment or payment system. It also has no full key transparency or historical forward secrecy after a receiver key is compromised.

- [Run the harmless approval example](https://ntfyx.me/docs/phone-approval/)
- [Result, claim and exit-code reference](https://ntfyx.me/docs/cli/)

## Recovery: three common failure cases

Keep the encrypted recovery package and its separate recovery code in safe, separate places before changing phones. Apple purchase restoration restores the plan; it does not recreate cryptographic keys.

| Situation | Consequence / next step |
| --- | --- |
| Phone lost; valid package and code available | Use the documented recovery flow. Review old device and source access afterward. |
| Package available, but recovery code lost | Support cannot decrypt the package. A purchase receipt cannot replace the code. |
| Phone keys lost; no usable package and code | Support cannot recover old content. Starting a new Inbox does not decrypt old messages. |
| Browser storage cleared | Pair the browser again. Its old receiver identity and earlier history do not reappear automatically. |

- [Recovery, source keys and purchase restoration](https://ntfyx.me/docs/recovery/)

## Verification and remaining limits

As of 30 September 2026, project protocol tests cover published RFC 9180 Base / PSK vectors, cross-language vectors, signature tampering and per-recipient decryption. Local relay tests cover signed replies and repeat-claim rejection. Real Claude and Codex host tests use the specific versions and modes listed in their guides; programmatic receivers in those tests do not establish phone or APNs delivery. The public scripts and plugin configuration are inspectable; the application source and internal test logs are not published as an audit.

- [Protocol check summary (JSON, 30 September 2026)](https://ntfyx.me/security/verification.json)
- [Public examples and verification scope](https://github.com/KaylaONeal/ntfyx-examples)
- [Public agent plugin configuration](https://github.com/KaylaONeal/ntfyx-agent-plugins)
- [Claude verification scope](https://ntfyx.me/docs/claude-code-notifications/#add-native-permission-decisions)
- [Codex verification scope](https://ntfyx.me/docs/codex-phone-approval/#what-was-verified)

## Report a security issue

Independent security review has not yet been completed. Send findings privately to x@bagex.online, the operator contact. Include only the minimum diagnostic context. Never include real keys, pairing links, recovery codes, tokens or private message content.

- [Security contact](mailto:x@bagex.online)
- [Safe support diagnostics](https://ntfyx.me/support/)

## Public Topics: send your first notification without pairing

Anyone with an existing public Topic ID or link can read and send without an account, pairing or key. The name and messages are readable by the service and anyone with the link; keep passwords, private logs and approval requests out of it. Public messages support text, Markdown and lightweight rich content, without answers, approvals or Call reminders. Use a protected Topic for private messages, authenticated senders or signed answers.

- [Public Topics: send your first notification without pairing](https://ntfyx.me/docs/public-topics/)

---

# Service limits.

Source: https://ntfyx.me/limits/

Updated: 2026-10-28

Message allowances depend on Free, Plus or Pro. Public Topics allow anonymous reading and sending; protected Topics support verified answers and Call reminders.

## Topics and devices

These limits apply per Inbox unless stated otherwise. A temporary browser also uses a browser slot. Deleting a Topic releases its record; pausing it does not.

| Resource | Limit |
| --- | --- |
| Plan allowances | Free / Plus / Pro: 100 / 1,000 / 20,000 total messages per UTC day; 1 / 5 / 50 monitors and subscriptions |
| Total Topic records | 1000 for every plan; Topic count is not a paid entitlement. |
| Sources | 20 per Topic · 100 per Inbox |
| Receivers | 1 primary phone (iPhone or Android) + 2 browsers |

- [Compare plans](https://ntfyx.me/pricing/)

## Daily budgets and rate limits

Daily budgets reset at UTC midnight. This does not reset pending requests, storage or Topic state. Idempotent retries do not create duplicate logical events. Accepted replies, cancellations and receipts do not consume the new-message budget, but API rate limits still apply.

| Operation | Limit |
| --- | --- |
| All new messages | Free 100 / Plus 1,000 / Pro 20,000 per UTC day, including requests, monitor results and subscribed updates |
| Call reminders | Free 10 / Plus 100 / Pro 200; also consume one total message |
| New answer requests | Free 10 / Plus 100 / Pro 500; also consume one total message |
| Pending requests | At most 1000; storage reservation can reject earlier |
| New-event rate | 30 / minute per Source, burst 10; 120 / minute per Inbox |
| Control writes | 60 / minute per principal; 300 / minute per Inbox. Includes answers, claim, cancellation and receipts. |
| Read and sync | 120 / minute per principal; at most 100 events per page |
| Pairing creation | 10 / 10 minutes per IP, plus device protections. An IP address does not prove identity. |

## Message sizes

Limits apply to the complete encoded payload. Oversized content is rejected, never silently truncated and approved. The payload and encrypted-envelope limits must both pass.

| Content | Limit |
| --- | --- |
| Plaintext payload | 16 KiB including title, body, options and context |
| Encrypted envelope | 96 KiB including encoding, recipient ciphertexts and signature |
| Reply text / Deny note | 4 KiB / 2 KiB |
| Choice options | 2–8 options; ID 1–32 ASCII characters; label at most 120 Unicode characters |

## Deadlines and temporary access

The service checks expiry during reads and submissions. Cleanup jobs reclaim space; they do not determine whether an expired answer is valid.

| Item | Lifetime |
| --- | --- |
| Pairing QR | 5 minutes · single use |
| CLI question | 15 minutes by default · at most 24 hours |
| Claude permission question | 90 seconds for the request and remote wait; 100-second hook timeout |
| Temporary demo | 15 minutes · at most 10 events · source expires automatically |

## Storage and retention

Ordinary messages cannot use the capacity reserved for accepted requests and answers. A new request reserves room for its maximum answer and necessary terminal records before acceptance. Insufficient capacity refuses the request early; the service must not accept a question and later drop its Deny because ordinary storage is full.

| Storage | Limit / retention |
| --- | --- |
| Inbox ciphertext | 4156.25 MiB total · 3750 MiB ordinary + 406.25 MiB reserved |
| Public messages and protected relay ciphertext | At most 24 hours, within the storage limit |
| Public send retry receipts | Seven days of minimal IDs and content hashes; no message body |
| Requests and answers | Pending until the deadline; retained 1 days after reaching a terminal state |
| iPhone local history | Up to 90 days / 10,000 records; active requests and pending answers are protected |
| Web local history | Up to 30 days / 5,000 records delivered to that browser; can be cleared locally |
| CLI consumption ledger | 30 days after terminal state; active requests are protected |
| Service idempotency / consumption tombstones | 30 days of minimal IDs, hashes and terminal state; no extension of content retention |

> When ordinary storage is full, new ordinary messages are refused. The phone can explicitly clear ordinary relay history; that does not erase already-delivered device copies. Other metadata and provider recovery-copy retention are described in the Privacy notice.

- [Privacy and provider retention](https://ntfyx.me/privacy/)

## Muting and notification grouping

Muting a Topic changes phone alerts, not delivery, encrypted storage or the ability to reply. Muting ends at the selected time. Rapid ordinary progress may share a system notification per opaque task ID; requests retain distinct notification identifiers. Notification routing does not require a plaintext project or Topic name. In iPhone builds that offer daily quiet hours, you can set a repeating range, including overnight; the default is 22:00–09:00. This feature depends on the installed build and does not stop messages or replies.

## Hourly service monitors

Free / Plus / Pro include 1 / 5 / 50 monitors. Checks run hourly. Paused monitors keep their slots until deleted. Accepted result messages and weekly summaries use the same daily message allowance as other messages. Quota exhaustion delays message delivery while checks continue; pending delivery is bounded and newer results may be coalesced. Message content expires after 24 hours; numeric check observations have their separate seven-day window.

- [Monitor rules, limits and privacy](https://ntfyx.me/docs/service-monitoring/)

---

# Codex usage and reset-credit alerts on your phone

Source: https://ntfyx.me/docs/codex-usage-alerts/

Updated: 2026-10-29

Get an encrypted notification when a new Codex rate-limit reset credit arrives, before an unused one expires, when usage reaches 80% or 95%, and when your limit resets.

## What you get

Ntfyx checks your Codex usage on your own computer and sends only the alert text, end-to-end encrypted, to your phone. The first check sends one summary; later checks send only changes.

| Alert | When |
| --- | --- |
| New Codex reset credit | A rate-limit reset credit was added to your account |
| Reset credit expires in 3 days / 24 hours | An unused credit is close to its expiry date |
| Codex usage at 80% / 95% | Once per usage window |
| Codex limit reset | A window that was at least half used has reset |
| Usage limit reached / available again | Codex reports that ordinary usage is blocked, then allowed again |

## Set it up

Install and connect ntfyx CLI 0.1.2 or later first, or run ntfyx upgrade. The setup command installs a systemd user timer on Linux or a LaunchAgent on macOS that checks every 15 minutes. Use --interval to change the period (5 minutes or more) and --remove to uninstall.

```
ntfyx setup codex-usage --dry-run
ntfyx setup codex-usage
```

## Try one check

A dry run reads your current usage and prints the alerts it would send, without sending anything or saving state.

```
ntfyx watch codex-usage --dry-run
```

## Check the path before enabling a schedule

The dry run above shows your own usage locally and makes no notification or state-file change. Once the preview looks right, run one real check. On its first run the watcher sends a single summary, not a backlog of old threshold alerts. Confirm you can read that summary in the paired Inbox before installing the repeating task.

```
ntfyx watch codex-usage --once
```

> Keep dry-run output private: it describes your account usage. A successful send is relay acceptance; check the receiver separately. The computer must be awake and the user scheduler active for periodic checks.

![Ntfyx Web Inbox showing a Codex usage summary with a five-hour window and a reset credit.](https://ntfyx.me/guides/codex-usage.png)

Real Ntfyx formatter and local encrypted Web test, with invented account usage. This is not a physical iPhone capture or a claim about your account.

- [Notification troubleshooting](https://ntfyx.me/docs/troubleshooting/)

## How it works

Ntfyx starts your installed Codex in its local app-server mode and makes a read-only usage request, the same data Codex shows in its own status view. It never reads the Codex login file and never redeems a reset credit. It keeps a small state file next to your Ntfyx credentials so each alert is sent once.

## Limits

You need to be signed in to Codex with a ChatGPT plan that has usage limits. The Codex app-server interface is marked experimental. If a Codex update changes it, checks stop with an error instead of guessing. Redeeming a reset credit stays in Codex.

- [Agents, Codex and phone approvals](https://ntfyx.me/docs/agents/)
- [CLI reference](https://ntfyx.me/docs/cli/)

## Verification and failure behavior

Checked 30 September 2026 with Codex 0.158.0: a real account dry run read usage without redeeming a credit. Automated tests used controlled usage snapshots with the real local encrypted relay and a programmatic receiver; they covered threshold and reset-credit changes without spending account credits. These checks do not establish physical iPhone delivery. If login, the experimental interface, or transport fails, inspect the command or scheduler error; do not delete state just to force another alert.

```
ntfyx setup codex-usage --remove
```

- [Codex phone approvals are a separate setup](https://ntfyx.me/docs/codex-phone-approval/)

---

# Phone notifications for shell scripts, cron and backups

Source: https://ntfyx.me/docs/notifications/

Updated: 2026-10-28

Send phone notifications from shell scripts, PowerShell, backups and scheduled jobs. Preserve task exit codes and check notification receipt separately.

## Choose public, HTTPS or encrypted script notifications

An existing public Topic accepts non-sensitive messages without pairing. A private HTTPS link suits service webhooks; the service reads input before encrypted delivery. The wrappers below use a protected Topic: first pair the CLI as the same user that runs the job, so the sender encrypts content locally. Keep private logs out of public Topics.

- [Public Topic: no pairing](https://ntfyx.me/docs/public-topics/)
- [Private HTTPS push](https://ntfyx.me/docs/http-push/)
- [Protected Topic pairing](https://ntfyx.me/docs/quickstart/)

## Before you start

For the protected CLI scripts below, install Ntfyx CLI 0.6.0+ on Windows, macOS or Linux and the app on iPhone (iOS 18.4+) or Android (Android 10+). Android background push requires Google Play services. Pair the CLI as the same user who runs the task; installing it alone does not authorize the sender. Free includes 100 messages per UTC day. Use ntfyx topics to find your local alias and replace Work in the examples. The shell installer below is for macOS/Linux; Windows installation and current phone availability are on the download page.

1. Run ntfyx connect on the trusted computer and keep the fresh QR private.
2. Use the phone’s private Topic connection flow to authorize this Source. Update older apps from the store and follow the private scanning entry; current versions are listed in the quickstart.
3. Confirm one actual phone message before adding the wrapper to your own task.

```
curl -fsSL https://ntfyx.me/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
ntfyx version --json
ntfyx connect
ntfyx topics
```

> The shell examples below target macOS / Linux. Windows has the full CLI and local MCP; use PowerShell commands and your own scheduler. Native host permissions retain their separate compatibility policy.

- [Pairing and CLI setup](https://ntfyx.me/docs/quickstart/)
- [Current downloads and availability](https://ntfyx.me/download/)

## Send your first alert

Once paired, send a plain notification to the Work connection. The CLI encrypts it for your authorized receivers. A successful send means the service accepted the message; the phone still needs notification permissions and a working delivery path.

```
ntfyx send "Build finished. Ready to review." --title "Build complete" --topic Work
```

## Notify when a command exits

Download the short wrapper and inspect it before running. It runs the command exactly as passed, then sends a generic exit-status notification. It does not forward the command arguments or terminal output.

```
curl -fsSLo notify-after.sh https://ntfyx.me/examples/scripts/notify-after.sh
cat notify-after.sh
bash notify-after.sh Work bash -c 'printf "Example job finished\n"'
```

- [Read notify-after.sh](https://ntfyx.me/examples/scripts/notify-after.sh)

## Keep the result in your terminal

A successful command exits 0. A failed command keeps its own exit status, even when the notification cannot be sent. The wrapper writes a warning if notification acceptance is not confirmed. Avoid putting credentials or sensitive logs into notification text.

```
bash notify-after.sh Work bash -c 'exit 7'
printf "Original command exit: %s\n" "$?"
```

![Ntfyx Web Inbox displaying Task finished with an exit status of zero.](https://ntfyx.me/guides/job-notification.png)

Actual local Web test, using a synthetic job. The notification contains an exit status, not the terminal output.

## Builds and backups

Pass your existing command as separate arguments. The wrapper runs it once and reports its exit status. The backup example below creates an archive containing only the downloaded wrapper, in a temporary directory. Inspect the command before running it; a successful archive is not proof that a backup can be restored.

```
bash notify-after.sh Work npm run build

# Harmless backup sample: archive only this downloaded script.
ntfyx_demo_dir="$(mktemp -d)"
bash notify-after.sh Work tar -czf "$ntfyx_demo_dir/sample.tar.gz" notify-after.sh
ntfyx_backup_status=$?
printf "Backup exit status: %s\n" "$ntfyx_backup_status"
# If the backup succeeded, inspect the archive separately.
if [ "$ntfyx_backup_status" -eq 0 ]; then
  tar -tzf "$ntfyx_demo_dir/sample.tar.gz"
fi
```

- [Use the same wrapper with Claude Code](https://ntfyx.me/docs/claude-code-notifications/)
- [Wait for an explicit decision](https://ntfyx.me/docs/phone-approval/)

## Schedule with cron on Linux

Install and pair as the same user that runs the job. Cron has a smaller environment than an interactive terminal: set PATH, use absolute paths, and keep job output in a local log. Run the exact command manually first. This sample sends a harmless completion alert at 09:00 in the scheduler’s timezone; replace YOUR_USER and the script path before adding it with crontab -e. On macOS, use your existing launchd scheduler instead.

```
# Example user crontab; replace YOUR_USER before use.
PATH=/home/YOUR_USER/.local/bin:/usr/bin:/bin
0 9 * * * /bin/bash /home/YOUR_USER/notify-after.sh Work /bin/true >> /home/YOUR_USER/ntfyx-job.log 2>&1
```

> Do not run the job as root just to make pairing work. Credentials belong to the paired user. This wrapper cannot notify if the computer is off, the scheduler never starts it, or the process is killed before the send step.

## Diagnose a missing or failed notification

Test a failed job with exit 7 before relying on the wrapper. If the job fails and sending also fails, the wrapper still exits 7 and writes a notification warning. Check the local log, ntfyx doctor, the configured Topic, and phone notification permission, Focus and quiet hours. Acceptance by the relay does not prove the phone displayed an alert.

| Job result | Notification result | Wrapper exit |
| --- | --- | --- |
| Success (0) | Accepted | 0 |
| Failure (7) | Accepted | 7 |
| Failure (7) | Not confirmed | 7, with a warning |
| Success (0) | Not confirmed | 0, with a warning |

- [Delivery and pairing troubleshooting](https://ntfyx.me/docs/troubleshooting/)

## What was verified

These scripts were tested with the compiled CLI, a real local encrypted relay and signed replies from the Web Inbox. Phone authorization in that automated test used a programmatic identity. The screenshots show synthetic messages from that local Web test; they are not iPhone or APNs delivery evidence.

- [Read the example source and verification scope](https://github.com/KaylaONeal/ntfyx-examples)

## Windows PowerShell: a complete exit-notification wrapper

Save this as notify-after.ps1 and run it as the paired Windows user. It wraps a native executable, runs the task once and saves $LASTEXITCODE before sending separately. Run PowerShell task scripts through powershell.exe or pwsh.exe -File and give them explicit exit codes. Notification failure does not replace the task result; a task that cannot start returns 127. Arguments and output stay local.

```
# Save as notify-after.ps1. Runs a native executable once.
param(
  [Parameter(Mandatory=$true)][string]$Topic,
  [Parameter(Mandatory=$true)][string]$TaskExecutable,
  [string[]]$TaskArguments = @(),
  [string]$Ntfyx = 'ntfyx'
)
# Nonzero native exits are job results, not PowerShell exceptions.
$PSNativeCommandUseErrorActionPreference = $false
$ntfyxJobStatus = 127
try {
  $ntfyxTask = Get-Command $TaskExecutable -CommandType Application -ErrorAction Stop
  & $ntfyxTask.Source @TaskArguments
  $ntfyxJobStatus = $LASTEXITCODE
} catch {
  [Console]::Error.WriteLine('Task could not start; status 127.')
}
$ntfyxTitle = if ($ntfyxJobStatus -eq 0) { 'Task finished' } else { 'Task failed' }
try {
  $ntfyxCommand = Get-Command $Ntfyx -CommandType Application -ErrorAction Stop
  & $ntfyxCommand.Source send "Task exited with status $ntfyxJobStatus. Check the local log." --title $ntfyxTitle --topic $Topic | Out-Null
  if ($LASTEXITCODE -ne 0) {
    [Console]::Error.WriteLine('Notification not confirmed; job exit status is preserved.')
  }
} catch {
  [Console]::Error.WriteLine('Notification could not start; job exit status is preserved.')
}
exit $ntfyxJobStatus
```

- [PowerShell exit-status reference](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_automatic_variables#lastexitcode)

## Test success, failure and notification failure

Run these harmless child processes in PowerShell. The first two should return 0 and 7. The third deliberately uses a nonexistent notifier and must still return 7 with a warning. Each task runs once. Check the matching phone message before replacing the task with your own command. Tools with special success codes, such as robocopy, need their own result mapping before using a generic nonzero-is-failure wrapper.

```
.\notify-after.ps1 -Topic Work -TaskExecutable "$env:ComSpec" -TaskArguments @('/d', '/c', 'exit 0')
"Job exit: $LASTEXITCODE"
.\notify-after.ps1 -Topic Work -TaskExecutable "$env:ComSpec" -TaskArguments @('/d', '/c', 'exit 7')
"Job exit: $LASTEXITCODE"
.\notify-after.ps1 -Topic Work -TaskExecutable "$env:ComSpec" -TaskArguments @('/d', '/c', 'exit 7') -Ntfyx 'missing-ntfyx-test.exe'
"Job exit: $LASTEXITCODE"
```

## Windows Task Scheduler: fix the user and paths

Schedulers do not inherit the full interactive environment. Run as the same paired account, use absolute CLI/wrapper/task paths and set the task working directory. This runner.ps1 example requires your actual username and task paths. In Task Scheduler, set Program to the full powershell.exe path, Arguments to -NoProfile -File "C:\Jobs\runner.ps1", and Start in to C:\Jobs. Keep the existing script-execution policy. Run this exact action manually before checking task history and Last Run Result.

```
# C:\Jobs\runner.ps1; task.ps1 must exit with its own result.
$ntfyxRun = @{
  Topic = 'Work'
  Ntfyx = 'C:\Users\YOUR_USER\AppData\Local\Ntfyx\bin\ntfyx.exe'
  TaskExecutable = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'
  TaskArguments = @('-NoProfile', '-File', 'C:\Jobs\task.ps1')
}
& 'C:\Jobs\notify-after.ps1' @ntfyxRun
exit $LASTEXITCODE
```

> Do not switch to SYSTEM or copy another account’s pairing keys to repair access. A wrapper cannot alert if the scheduler never starts it, the computer is off or the process ends before notification. Windows scheduling and physical phone receipt need separate acceptance in your environment.

- [Microsoft scheduled-task paths and users](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/schtasks-create)

## Backups: report the exit code, then verify restoration separately

Place the inspected notify-after.sh in the job directory. This runner takes a source directory and a new archive path, runs tar once and returns its exit code. The destination is created exclusively, so concurrent runs cannot overwrite an earlier backup. A failed run can leave a partial archive; do not treat it as usable. Start with a temporary sample directory. A successful notification means tar returned 0; it does not prove completeness or restorability. Keep your backup tool’s own exit semantics and perform restore checks in a separate temporary directory.

```
#!/usr/bin/env bash
# Save beside notify-after.sh as backup-run.sh.
set -u
if [ "$#" -ne 3 ]; then
  printf 'Usage: bash backup-run.sh TOPIC SOURCE_DIR NEW_ARCHIVE\n' >&2
  exit 2
fi
ntfyx_topic="$1"
ntfyx_source="$2"
ntfyx_archive="$3"
if [ ! -d "$ntfyx_source" ] || [ -e "$ntfyx_archive" ] || [ -L "$ntfyx_archive" ]; then
  printf 'Use an existing source directory and a new archive path.\n' >&2
  exit 2
fi
ntfyx_script_dir="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" || exit 2
set -C # Refuse an existing output during redirection, including a racing writer.
bash "$ntfyx_script_dir/notify-after.sh" "$ntfyx_topic" \
  tar -czf - -C "$ntfyx_source" . > "$ntfyx_archive"
ntfyx_backup_status=$?
exit "$ntfyx_backup_status"
```

- [Backup alert use case](https://ntfyx.me/use-cases/backup-alerts/)
- [Remote backups and SSH results](https://ntfyx.me/docs/ssh-job-notifications/)

## Complete your own automation task

Start with a complete, copyable example and check the job result, send receipt and phone message separately.

- [GitHub Actions failure notifications](https://ntfyx.me/docs/github-actions-notifications/)
- [n8n workflow error notifications](https://ntfyx.me/docs/n8n-error-notifications/)
- [Script and PowerShell notifications](https://ntfyx.me/docs/notifications/)

---

# Web Inbox: receive and reply in your browser

Source: https://ntfyx.me/docs/web/

Updated: 2026-10-27

Authorize a browser from your iPhone or Android phone, read new encrypted messages and answer questions on a larger screen.

## Connect an existing Topic

Open the Web Inbox on the computer. On your primary phone, open the Topic’s connection action and scan the browser’s current QR code. Confirm the expected browser and Topic. Codes expire after five minutes; create a new one if it expires. The Web Inbox is an optional receiver, while the iPhone remains the management device.

1. Open app.ntfyx.me and display its connection QR.
2. Open the protected Topic’s menu > Connect browser on your phone, then scan and confirm the browser.
3. Keep the Web Inbox open to receive new messages and send replies.

- [Open Web Inbox](https://app.ntfyx.me/)
- [Resolve pairing problems](https://ntfyx.me/docs/troubleshooting/)

## Read and answer

A connected browser receives new messages addressed to it and decrypts them locally. It can answer Allow / Deny, choice and text requests, using its own signing key. An answer is not permission for an unrelated action. A newly connected browser cannot see the earlier phone history. Browsers are subject to the same service limits; adding one does not require creating a second Topic.

## Revoke browser access

Use the primary phone’s Topic settings to revoke a browser you no longer trust. Revocation stops future authorized access and delivery. It cannot erase content already delivered to that browser. Clear the local browser data separately when leaving a shared computer. Do not share your recovery code or pairing links.

- [Encryption and its limits](https://ntfyx.me/security/)
- [Recovery after changing phones](https://ntfyx.me/docs/recovery/)

## Only the sources you choose

The Web Inbox shows new encrypted messages addressed to this authorized browser, from your authorized agents and tools or official public-content subscriptions you explicitly choose. Each subscription Topic needs separate phone authorization for a browser receiver. It does not insert advertisements or unrelated content. A new browser cannot obtain earlier phone history.

## Session conversations

CLI 0.1.3 and current clients group related messages into Sessions within a Topic. Confirm or choose on the original message; select Reply for a quoted text answer. CLI 0.1.3 includes --session-id and --session-name; run ntfyx upgrade to update. Read the guide for examples, standalone-message defaults and availability.

- [Sessions and message replies](https://ntfyx.me/docs/sessions/)

## Chrome notifications and replies

Chrome extension 0.2.4 is publicly listed on the Chrome Web Store. The current protected-message protocol requires Chrome 0.4.0, submitted and still under review as of 28 October 2026. The public 0.2.4 listing does not establish compatibility with that protocol. Use the phone-authorized Web Inbox while waiting for the compatible extension. The extension provides desktop notifications, a phone-authorized Inbox and original-message replies. Each Topic needs its own phone authorization; Chrome must stay running for background checks. The current Web Inbox remains available.

- [Chrome extension: setup and publication status](https://ntfyx.me/docs/chrome-extension/)

## Plain and rich messages

CLI 0.6.0 independently sends ordinary text, Markdown and native metric/table/chart messages, with local validation before sending. See the guide for receiver version requirements and store availability.

- [Rich-message formats and complete example](https://ntfyx.me/docs/rich-messages/)

---

# Ntfyx FAQ: HTTPS push, agent replies and hourly service checks

Source: https://ntfyx.me/docs/faq/

Updated: 2026-10-28

Phone notifications for Claude Code, Codex and scripts. Send to public Topics without pairing, or pair a protected Topic for encrypted CLI messages and verified phone answers.

## How does My Monitor check a service?

Open Discover → My Monitor and add a public HTTP or HTTPS address. Checks run every hour and require a final HTTP 2xx status; optionally require the response to contain specified text or a simple JSON object field equal to a chosen primitive value. Every check result is grouped into one Session per service in the system My Monitor Topic. In app 1.5.3, preview text or JSON before entering your expectation. Only notify on failure is on by default: healthy results stay in the conversation silently; turn it off to receive an alert for every check. It does not consume your custom Topic allowance. The paired CLI and local MCP tools can manage these same items after explicit, revocable phone approval valid for up to 24 hours; the grant covers all My Monitor items. The monitoring service reads the address, rule and response. Individual scheduled outcomes are kept for seven days. For weeks with check activity, a non-silent English summary with emoji is scheduled for Monday at 00:00 UTC, reporting counts, completed-check success rate and response time, subject to mute and delivery settings. This is hourly monitoring, not real-time incident response or an SLA.

- [Guide and scope](https://ntfyx.me/docs/service-monitoring/)

## Can I send an HTTP notification or webhook to my phone?

Yes. Open HTTPS Push on the phone to prepare MyNotify. The app generates a short sk_ send-only key and prepares your HTTPS sending link. Tap Send to receive hello, or copy the link. Open it with GET to send a notification using the final URL-encoded path segment, or keep the whole copied URL fixed and POST dynamic text, JSON or form content to it. No app update or CLI is required for that URL. CLI 0.3.0 and local MCP can create independent wh_ sending keys after separate phone-approved webhook management authorization; monitor permission does not grant it. Revoking management does not itself disable existing sending URLs. The HTTPS service processes this plaintext request, then encrypts the message for authorized receivers. Keep the whole sending link private because it includes your key. Rotate the key in the app to invalidate old links. It cannot read messages, manage the Inbox or receive agent replies.

- [Guide and scope](https://ntfyx.me/docs/http-push/)

## What is Ntfyx?

Phone notifications for Claude Code, Codex and scripts. Send to public Topics without pairing, or pair a protected Topic for encrypted CLI messages and verified phone answers. The official website is ntfyx.me. The product is named Ntfyx on the App Store and Google Play; ntfyx is its companion CLI command. The tagline is “notify x to me”. No Ntfyx account is required.

## Who can send me messages?

Protected Topic agents, CLI tools, scripts and services need authorization on the primary phone. Anyone knowing a public Topic ID or link can read and send there, without pairing; public messages cannot request answers or Call. You can also explicitly subscribe to official public-content sources in Discover. Ntfyx does not automatically subscribe you or insert unrelated content. Revoke a source, or pause and unsubscribe from a subscription, on your phone.

## Does Ntfyx show ads or other content?

Ntfyx does not insert ads or unrelated content into the Inbox, including during free use. You choose your own authorized sources and may opt into official notification subscriptions. Pairing tests and necessary connection or security status support the Inbox. The Technology digest uses public headlines and links; its publisher knows the public content it sends, but does not use private agent messages.

## Which platforms can I use?

The primary phone app is public on the App Store (iPhone 1.8.3, iOS 18.4+) and Google Play (Android 1.8.2, Android 10+). Current signed CLI 0.6.1 supports Windows, macOS and Linux glibc; musl Linux is not supported. Your phone can authorize an optional Web Inbox. Android push requires Google Play services.

- [Current downloads and availability](https://ntfyx.me/download/)

## Can I use Ntfyx with ChatGPT or Claude?

Agents that can run the CLI or launch a local stdio MCP server can use the notification and question tools, subject to their host’s permissions. The documented Claude Code permission adapter has a specific tested scope. Ntfyx is not a published ChatGPT or Claude app-directory integration, and local stdio support does not imply that a cloud chat interface can launch a program on your computer. Finding this documentation in AI search is separate from connecting an agent.

- [Supported agent integration and configuration](https://ntfyx.me/docs/agents/)

## What does a Topic mean?

A Topic groups messages from a source or a workflow, such as Work or Backups. Free includes one shared subscription slot for a notification source or public Topic follow. Topic count is not a paid entitlement; every plan has a 1,000-Topic technical limit. Public Topics allow anyone knowing the ID to read and send messages. Protected Topics receive private messages and questions from authorized agents, scripts or services. Connecting an authorized browser to an existing Topic does not create another Topic. Message, device, storage and rate limits still apply.

- [Service limits](https://ntfyx.me/limits/)

## Can the server read my messages?

Protected Topic CLI and agent message titles, bodies, options and replies are end-to-end encrypted on your devices. Public Topic names and messages are readable by the service and anyone with the Topic ID or link. The explicit fixed monitor-access and webhook-management questions and their signed phone answers are disclosed to the service for verification. HTTPS push and webhook requests are readable by the service before encrypted delivery. Optional provider verification secrets are encrypted and stored by the service, then used in plaintext to verify the raw webhook body; they are hosted secrets, not hidden from the service. My Monitor reads the monitored address, rule and response; a public publisher knows the content it publishes. The relay routes ciphertext and processes operational metadata such as identifiers, time, size and push tokens. Do not put secrets in monitored URLs or request examples. Independent security review is not complete.

- [Security model and limitations](https://ntfyx.me/security/)
- [Privacy and retention](https://ntfyx.me/privacy/)

## How do I keep access when changing phones?

Keep an encrypted recovery package and its separate recovery code if you want to migrate your Inbox. Support cannot recover lost encryption keys or expired history. Check your recovery materials before removing the original phone.

- [Recovery guide](https://ntfyx.me/docs/recovery/)

## What does “For your eyes only” mean?

Protected Topic CLI and agent message titles, bodies, options and replies are end-to-end encrypted on your devices. Public Topic names and messages are readable by the service and anyone with the Topic ID or link. The explicit fixed monitor-access and webhook-management questions and their signed phone answers are disclosed to the service for verification. HTTPS push and webhook requests are readable by the service before encrypted delivery. Optional provider verification secrets are encrypted and stored by the service, then used in plaintext to verify the raw webhook body; they are hosted secrets, not hidden from the service. My Monitor reads the monitored address, rule and response; a public publisher knows the content it publishes. The relay routes ciphertext and processes operational metadata such as identifiers, time, size and push tokens. Do not put secrets in monitored URLs or request examples. Independent security review is not complete.

- [Read the encryption model and its limits](https://ntfyx.me/security/)

## How do I connect Claude Code or Codex?

Choose your agent in the installer on this page. One command installs the signed CLI, guides phone pairing and configures local MCP, hooks and phone-reply guidance. Restart the agent and answer a test question. You can also install from the public Ntfyx plugin marketplace.

- [Session guide and availability](https://ntfyx.me/docs/sessions/)

## What is a Session in Ntfyx?

A Session groups messages and replies for one task inside a Topic. The Inbox shows the latest message for each session; opening it reveals the conversation. Session conversations are available with CLI 0.1.3+ and current phone and Web apps.

- [Session guide and availability](https://ntfyx.me/docs/sessions/)

## How do I keep agent messages in one conversation?

With CLI 0.1.3 or later, send notifications and questions with the same --session-id inside the same Topic. A session can include multiple authorized sources. Without a session ID, each new message starts its own conversation.

- [Session guide and availability](https://ntfyx.me/docs/sessions/)

## Which message does my reply answer?

Confirm or choose directly on the original message. For text, select Reply on that message and write in the quoted composer. New questions do not change the reply target. Confirmed choices and sent text appear below a light divider inside the original message.

- [Session guide and availability](https://ntfyx.me/docs/sessions/)

## Can I delete a whole Session?

In the updated Web Inbox, open the conversation actions, select Delete conversation and confirm. Phone support arrives with Ntfyx 1.4 after store approval. This removes existing messages from that device and keeps resynchronized history hidden. New messages can reopen the conversation. Other devices and already submitted replies are unchanged.

- [Session guide and availability](https://ntfyx.me/docs/sessions/)

## Does this enable unrestricted remote control?

No. A reply answers one explicit request. The sender verifies it before continuing; an expired or denied request does not grant approval. A session does not give an agent new permissions or forward arbitrary terminal prompts.

- [Session guide and availability](https://ntfyx.me/docs/sessions/)

## How do I install the Claude Code or Codex plugin?

Choose one-command setup on the homepage, or install CLI 0.6.0+ and add KaylaONeal/ntfyx-agent-plugins as the Ntfyx marketplace. Plugin 0.4.1 includes step-by-step phone setup, local MCP, rich-message guidance, phone replies and Session support. Claude AskUserQuestion is bridged; Codex uses explicit MCP questions. Public Ntfyx marketplace installation and official directory inclusion are separate.

- [Agent plugins and compatibility](https://ntfyx.me/docs/agent-plugins/)

## Can I receive and reply to notifications in Chrome?

Chrome extension 0.2.4 is publicly listed on the Chrome Web Store. The current protected-message protocol requires Chrome 0.4.0, submitted and still under review as of 28 October 2026. The public 0.2.4 listing does not establish compatibility with that protocol. Use the phone-authorized Web Inbox while waiting for the compatible extension. The extension provides desktop alerts, a toolbar unread count, Topic/Session history and original-message replies. The primary phone authorizes each Topic separately. For now, use the available Web Inbox.

- [Chrome extension: setup and publication status](https://ntfyx.me/docs/chrome-extension/)

## Will Chrome notify me after I close the browser?

The extension needs Chrome running for background checks and desktop alerts. Sleep, offline mode, organization policies or OS notification settings can delay delivery. Opening the Inbox requests a fresh synchronization. An alert, a reply accepted by the service and an agent action completed are different states.

- [Chrome extension: setup and publication status](https://ntfyx.me/docs/chrome-extension/)

## Can I use official subscriptions without a computer?

No. Open Discover in the iPhone or Android app, review a public notification source and confirm its subscription. No computer, CLI, pairing scan or Ntfyx account is needed. Receive future editions in its Topic; pause or unsubscribe from the phone. Each source lists its coverage and schedule. Private agent messages are not used to generate these updates. Free includes 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests, one monitor and one subscription. Notification-source subscriptions and public follows share the subscription allowance. Topic count is not a paid entitlement. Public Topics support ordinary and rich messages; protected Topics also support verified answers and Call reminders.

- [Notification marketplace and free subscriptions](https://ntfyx.me/plugins/)

## How do I install the phone app from a computer?

Choose App Store or Google Play on the homepage or Downloads page, then scan the download QR with your phone camera. The dialog also has a direct store link. On a phone the buttons open their stores directly. The links work without JavaScript, and download QR codes do not authorize devices.

- [Phone apps and computer downloads](https://ntfyx.me/download/)

## What can I use for free?

Free includes 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests, one monitor and one subscription. Notification-source subscriptions and public follows share the subscription allowance. Topic count is not a paid entitlement. Public Topics support ordinary and rich messages; protected Topics also support verified answers and Call reminders.

- [Details and verified scope](https://ntfyx.me/limits/)

## How does Ntfyx differ from a push alert or chat bot?

Ntfyx combines task messages, answers attached to the original question, and Topic/Session history with an opt-in notification marketplace. A workflow can wait for a verified confirmation, choice or text answer. Push services and bots have different reply, encryption and integration features; compare their current official documentation and the setup your workflow needs.

- [Details and verified scope](https://ntfyx.me/docs/notification-tools/)

---

# Claude Code notifications: phone alerts and replies

Source: https://ntfyx.me/docs/claude-code-notifications/

Updated: 2026-10-29

Get Claude Code completion alerts, answer AskUserQuestion or supported permissions with Ntfyx on iPhone, Android or Web. Includes setup and verified host limits.

## How can I get Claude Code notifications on my phone?

Install Ntfyx on iPhone or Android, pair the signed companion CLI on your Windows, macOS or Linux computer, then use ntfyx setup claude-code or the Ntfyx plugin. Completion hooks send task updates. The AskUserQuestion bridge and explicit local MCP questions let you choose or type a reply. Native permission decisions retain verified Linux x64 support. Apple silicon Mac native approvals are verified with Claude Code 2.1.303 and Codex 0.163.0 and require CLI 0.1.5+. Intel Mac native approvals remain unverified and return to the terminal. Setup does not make every Claude interaction remotely controllable.

- [One-command Claude Code setup and question support](https://ntfyx.me/docs/agent-plugins/)

## Agent setup on Windows

On Windows, use direct CLI setup or local MCP. Claude Code hooks require 2.1.139+; an older or unknown version gets MCP only. Codex on Windows provides MCP questions without automatic hooks. The marketplace plugin uses POSIX shell hooks; use direct setup on Windows. Native tool permission approvals retain their separate platform and host policy.

```
ntfyx setup claude-code --dry-run
ntfyx setup claude-code

ntfyx setup codex --dry-run
ntfyx setup codex
```

- [Windows installation and platform scope](https://ntfyx.me/docs/cli/#install-on-windows)

## Reply when Claude Code needs your input

Ntfyx brings task notifications and supported questions from Claude Code to your iPhone, Android phone or authorized Web Inbox. Install the companion CLI and use the one-command setup or Ntfyx plugin. The AskUserQuestion bridge forwards single-choice questions with a text alternative; multi-select uses typed option numbers. Explicit questions can also use local MCP. Native tool permission decisions have separate Linux x64 / Apple silicon Mac compatibility and timeout requirements below.

- [Claude Code plugin and AskUserQuestion setup](https://ntfyx.me/docs/agent-plugins/)
- [Download the phone app and CLI](https://ntfyx.me/download/)

## Choose the interaction you need

For a simple “finished” alert, wrap a Claude Code command. For a supported permission decision, install the Ntfyx hook and review the request on your phone. To continue the whole Claude conversation from another device, consider Claude’s own Remote Control.

| Goal | Use | Scope |
| --- | --- | --- |
| Know when a command exits | notify-after.sh + claude -p | Fixed status summary; output stays in the terminal. |
| Answer a tool permission request | Ntfyx PermissionRequest hook | Linux x64, plus Apple silicon Mac with Claude Code 2.1.303 and CLI 0.1.5+. |
| Continue a Claude session remotely | Claude Remote Control | Official phone/browser session interface; eligible account required. |

## Before you start

For the protected CLI scripts below, install Ntfyx CLI 0.6.0+ on Windows, macOS or Linux and the app on iPhone (iOS 18.4+) or Android (Android 10+). Android background push requires Google Play services. Pair the CLI as the same user who runs the task; installing it alone does not authorize the sender. Free includes 100 messages per UTC day. Use ntfyx topics to find your local alias and replace Work in the examples. The shell installer below is for macOS/Linux; Windows installation and current phone availability are on the download page.

1. Run ntfyx connect on the trusted computer and keep the fresh QR private.
2. Use the phone’s private Topic connection flow to authorize this Source. Update older apps from the store and follow the private scanning entry; current versions are listed in the quickstart.
3. Confirm one actual phone message before adding the wrapper to your own task.

```
curl -fsSL https://ntfyx.me/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
ntfyx version --json
ntfyx connect
ntfyx topics
```

> The shell examples below target macOS / Linux. Windows has the full CLI and local MCP; use PowerShell commands and your own scheduler. Native host permissions retain their separate compatibility policy.

- [Pairing and CLI setup](https://ntfyx.me/docs/quickstart/)
- [Current downloads and availability](https://ntfyx.me/download/)

## Use your existing Claude Code setup

This example needs Claude Code installed, authenticated and permitted to run the requested task. Claude Code usage is governed by your own account and plan. The -p option runs a prompt and exits. This wrapper observes the process exit; it is not a hook for every turn of an interactive chat.

- [Claude Code CLI reference](https://code.claude.com/docs/en/cli-reference)

## Inspect the wrapper

The same small wrapper used for shell notifications works with Claude Code. It sends only a generic completion status and preserves the command’s exit code.

```
curl -fsSLo notify-after.sh https://ntfyx.me/examples/scripts/notify-after.sh
cat notify-after.sh
```

## Run a small task

From a project whose README you are allowed to share with your configured Claude service, run this read-only request. Review any permissions requested by your Claude client under your normal policy. On process exit, Ntfyx sends Task finished or Task failed to Work.

```
bash notify-after.sh Work claude -p "Explain this project's README without changing files."
```

> An exit code of 0 reports process success, not that the model’s answer is correct. This example does not alter Claude’s permission settings or send your prompt through Ntfyx.

## Read the alert and return to your work

Your phone displays the encrypted notification after delivery and local decryption. A phone-authorized browser can receive newly addressed messages too. Open the original terminal to read the answer. If no notification arrives, check CLI pairing, the warning in the terminal and phone notification settings.

- [Notification troubleshooting](https://ntfyx.me/docs/troubleshooting/)
- [Optional Web Inbox](https://ntfyx.me/docs/web/)

## Add native permission decisions

Preview the changes, then apply them on the paired computer. Setup preserves unrelated configuration and registers local MCP tools plus lifecycle hooks. Use setup or the Ntfyx plugin, not both. A supported PermissionRequest waits up to 90 seconds for the signed answer inside a 100-second host hook timeout. Existing deny rules still apply.

1. Keep Claude running on the computer and let an ordinary task reach a permission request under your existing policy.
2. Check the complete tool context on the phone. Allow authorizes that invocation once; Deny blocks it.
3. On an unsupported request, timeout or verification error, return to the terminal. A late Allow cannot restart an ended invocation.

```
ntfyx setup claude-code --permissions on --dry-run
ntfyx setup claude-code --permissions on
```

> Verified 30 September 2026: Claude Code 2.1.283 and 2.1.284, Linux x64, non-interactive Bash / Edit / Write Allow and Deny. Apple silicon Mac Bash / Edit / Write approval passed with Claude Code 2.1.303 on 19 October 2026 and requires CLI 0.1.5+. Intel Mac native approval remains unverified and returns to the terminal. Enable Claude permission hooks explicitly with --permissions on. Claude interactive terminal-choice precedence is not yet verified.

- [Host compatibility and plugin installation](https://ntfyx.me/docs/agents/)
- [Try a harmless standalone approval](https://ntfyx.me/docs/phone-approval/)

## When Claude Remote Control is a better fit

Claude Remote Control continues a local session through the Claude app or browser, with mobile push options. The local computer and Claude process must stay running. Its current requirements include an eligible Pro, Max, Team or Enterprise subscription and Claude sign-in; API-key or custom API-endpoint setups are excluded. Choose it when you want the full conversation. Ntfyx also carries ordinary script notifications and requests from other sources into named Topics.

- [Claude Remote Control: requirements and mobile notifications](https://code.claude.com/docs/en/remote-control)
- [Compare notification tools](https://ntfyx.me/docs/notification-tools/)

## What was verified

These scripts were tested with the compiled CLI, a real local encrypted relay and signed replies from the Web Inbox. Phone authorization in that automated test used a programmatic identity. The screenshots show synthetic messages from that local Web test; they are not iPhone or APNs delivery evidence. The wrapper was exercised with harmless shell processes; this tutorial test did not make a new paid Claude request. Separate real-host tests cover the versions and modes stated above. Ntfyx is not currently listed in the ChatGPT or Claude app directories.

- [Read the example source and verification scope](https://github.com/KaylaONeal/ntfyx-examples)

## When the agent needs your input

Completion alerts, tool permission requests and missing information need different integrations. Use the guide below to choose a supported permission hook or explicitly ask for a choice or text reply through the CLI or local MCP. Existing terminal prompts are not automatically forwarded.

- [Agent waiting for input: notifications and replies](https://ntfyx.me/docs/agent-waiting-for-input/)
- [Multiple coding agents and projects](https://ntfyx.me/docs/multiple-agent-notifications/)
- [SSH and remote server jobs](https://ntfyx.me/docs/ssh-job-notifications/)

## Compare ways to use coding agents from your phone

Compare full-session access, completion notifications, permission decisions and answers, with official sources, encryption scope, account requirements and starting prices.

- [Claude Code and Codex on your phone](https://ntfyx.me/docs/coding-agents-on-your-phone/)

## More agent notification and reply workflows

Choose a guide by task completion, waiting for input and agent host.

- [Codex notifications and replies](https://ntfyx.me/docs/codex-phone-approval/)
- [An agent is waiting for input](https://ntfyx.me/docs/agent-waiting-for-input/)
- [AI agent notifications on your phone](https://ntfyx.me/docs/agent-notifications/)

---

# Codex notifications: phone alerts and replies

Source: https://ntfyx.me/docs/codex-phone-approval/

Updated: 2026-10-29

Get Codex notifications on iPhone or Android and reply through local MCP. Native approvals require a verified Linux x64 or Apple silicon Mac setup; Windows uses MCP questions.

## How can I receive Codex alerts and approve from my phone?

Pair Ntfyx with your iPhone or Android phone, then use ntfyx setup codex or the Ntfyx plugin. On macOS / Linux, completion hooks send task alerts; local MCP questions can request a choice or text reply. Native permission approvals require the documented Linux x64 or Apple silicon Mac combination, interactive TUI and your own /hooks trust. Apple silicon Mac native approvals are verified with Claude Code 2.1.303 and Codex 0.163.0 and require CLI 0.1.5+. Intel Mac native approvals remain unverified and return to the terminal. The integration does not intercept Codex request_user_input or approvals in codex exec.

- [Codex plugin setup and question limits](https://ntfyx.me/docs/agent-plugins/)
- [Current phone apps and signed CLI](https://ntfyx.me/download/)

## Agent setup on Windows

On Windows, use direct CLI setup or local MCP. Claude Code hooks require 2.1.139+; an older or unknown version gets MCP only. Codex on Windows provides MCP questions without automatic hooks. The marketplace plugin uses POSIX shell hooks; use direct setup on Windows. Native tool permission approvals retain their separate platform and host policy.

```
ntfyx setup claude-code --dry-run
ntfyx setup claude-code

ntfyx setup codex --dry-run
ntfyx setup codex
```

- [Windows installation and platform scope](https://ntfyx.me/docs/cli/#install-on-windows)

## What this integration does

Ntfyx forwards supported Codex permission requests to your paired iPhone, Android phone or authorized Web Inbox. The running Codex invocation receives a verified Allow or Deny. This is a local CLI integration; it does not add Ntfyx to ChatGPT’s cloud app directory or move your Codex session to the phone.

> Native approvals require Ntfyx CLI 0.1.2+ and Codex 0.158.0+ on Linux x64. Codex 0.158.0 was tested on 30 September 2026. Apple silicon Mac native approval was verified with Codex 0.163.0 on 19 October 2026 and requires CLI 0.1.5+. Intel Mac native approval remains unverified and returns to the terminal.

## Before you start

For the protected CLI scripts below, install Ntfyx CLI 0.6.0+ on Windows, macOS or Linux and the app on iPhone (iOS 18.4+) or Android (Android 10+). Android background push requires Google Play services. Pair the CLI as the same user who runs the task; installing it alone does not authorize the sender. Free includes 100 messages per UTC day. Use ntfyx topics to find your local alias and replace Work in the examples. The shell installer below is for macOS/Linux; Windows installation and current phone availability are on the download page.

1. Run ntfyx connect on the trusted computer and keep the fresh QR private.
2. Use the phone’s private Topic connection flow to authorize this Source. Update older apps from the store and follow the private scanning entry; current versions are listed in the quickstart.
3. Confirm one actual phone message before adding the wrapper to your own task.

```
curl -fsSL https://ntfyx.me/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
ntfyx version --json
ntfyx connect
ntfyx topics
```

> The shell examples below target macOS / Linux. Windows has the full CLI and local MCP; use PowerShell commands and your own scheduler. Native host permissions retain their separate compatibility policy.

- [Pairing and CLI setup](https://ntfyx.me/docs/quickstart/)
- [Current downloads and availability](https://ntfyx.me/download/)

## Preview and install the integration

Run setup on the same computer and user account as your Codex session. It adds PermissionRequest and Stop hooks to hooks.json and registers the local Ntfyx MCP server. Review the dry run first. If you already installed the Ntfyx agent plugin, use that installation instead of adding duplicate hooks.

```
codex --version
ntfyx setup codex --dry-run
ntfyx setup codex
```

- [Plugin installation and supported hosts](https://ntfyx.me/docs/agents/)

## Review the hooks in Codex

Open an interactive Codex session. Type /hooks, inspect the two Ntfyx hooks and trust them yourself if they match your intended setup. The CLI cannot grant this trust for you. Keep your existing sandbox, approval policy and deny rules.

1. Confirm the paired connection with ntfyx send before testing a permission request.
2. Use a harmless task you intend to run. If Codex asks permission for Bash or apply_patch, review that exact request on the phone.
3. Choose Deny first and confirm the proposed action was blocked. Try Allow on a fresh harmless request only if you want it executed.

```
codex
```

> Do not change the sandbox or disable local safeguards just to produce a prompt. If your local policy already allows a tool, there may be no PermissionRequest to forward.

## Understand when no phone request appears

The hook is designed for interactive terminal sessions. codex exec disables approvals and does not trigger this permission hook in the verified version. The app-server approval path has not been verified. A host update must match the supported payload format before Ntfyx can answer.

| Symptom | Check |
| --- | --- |
| No hook runs | Open /hooks and review trust; check setup or plugin installation. |
| No permission request | Confirm interactive mode and whether local policy actually asks. |
| Return to terminal | Check host version, Linux x64 or Apple silicon Mac, the Mac CLI minimum, tool kind and context size. |
| Request timed out | Answer locally; an ended invocation is not revived by a late phone answer. |
| Signed Deny | The action must remain blocked; do not silently retry it as Allow. |

- [Troubleshoot delivery separately](https://ntfyx.me/docs/troubleshooting/)

## What was verified

On 30 September 2026, real Codex 0.158.0 interactive TUI sessions on Linux x64 passed Bash and apply_patch Allow / Deny cases with the compiled Ntfyx CLI and an encrypted local relay. The receiver was programmatic, not a physical iPhone. On 19 October 2026, Codex 0.163.0 interactive TUI on Apple silicon Mac passed all four Bash / apply_patch Allow and Deny cases; CLI 0.1.5+ enables that platform. Intel Mac native approval remains unverified. These checks do not establish every Codex version, physical phone push delivery or an independent security audit. Unsupported inputs return control to the local host.

- [Public plugin configuration and installation](https://github.com/KaylaONeal/ntfyx-agent-plugins)
- [How signed replies and one-time claims work](https://ntfyx.me/security/)

## Also need usage or reset-credit reminders?

Usage alerts are a separate opt-in task. They read local Codex status and send a notification when limits or reset credits change; they never redeem credits or approve tools.

- [Codex usage and reset-credit alerts](https://ntfyx.me/docs/codex-usage-alerts/)

## When the agent needs your input

Completion alerts, tool permission requests and missing information need different integrations. Use the guide below to choose a supported permission hook or explicitly ask for a choice or text reply through the CLI or local MCP. Existing terminal prompts are not automatically forwarded.

- [Agent waiting for input: notifications and replies](https://ntfyx.me/docs/agent-waiting-for-input/)
- [Multiple coding agents and projects](https://ntfyx.me/docs/multiple-agent-notifications/)
- [SSH and remote server jobs](https://ntfyx.me/docs/ssh-job-notifications/)

## Compare ways to use coding agents from your phone

Compare full-session access, completion notifications, permission decisions and answers, with official sources, encryption scope, account requirements and starting prices.

- [Claude Code and Codex on your phone](https://ntfyx.me/docs/coding-agents-on-your-phone/)

## More agent notification and reply workflows

Choose a guide by task completion, waiting for input and agent host.

- [Claude Code notifications](https://ntfyx.me/docs/claude-code-notifications/)
- [An agent is waiting for input](https://ntfyx.me/docs/agent-waiting-for-input/)
- [AI agent notifications on your phone](https://ntfyx.me/docs/agent-notifications/)

---

# Reply to AI agents from your phone: confirmations, choices and text

Source: https://ntfyx.me/docs/phone-approval/

Updated: 2026-10-23

Answer an AI agent on iPhone or Android. Keep replies attached to the original question; the paired computer verifies and claims the answer before continuing.

## How do I reply to an AI agent from my phone?

Pair Ntfyx with the computer running your task. When the agent or script explicitly sends a question, open it on iPhone or Android and confirm, choose an option or type an answer. The reply stays under its original question. The waiting computer verifies the signed answer and claims it once before the workflow decides what to do next. Keep the computer and waiting process running.

- [Install and pair](https://ntfyx.me/download/)
- [Receive agent notifications](https://ntfyx.me/docs/agent-notifications/)

## Try a notification, confirmation, choice and text reply

Run one command at a time after pairing. These examples use your default authorized Topic; add --topic with an existing alias to select another. Each ask waits for its own answer. All four messages share one Session because they use the same session ID in the same Topic. The examples print results; they do not execute your answer or authorize an external operation.

```
ntfyx send "The result is ready to review" --session-id review-demo --session-name "Demo review"
ntfyx ask "Continue this harmless demo?" --allow-deny --session-id review-demo --wait 60s --expires 90s --json
ntfyx ask "What should I check first?" --choice summary=Summary --choice logs=Logs --session-id review-demo --wait 60s --expires 90s --json
ntfyx ask "Add a review note" --text --session-id review-demo --wait 60s --expires 90s --json
```

> A valid choice or text answer can return success without meaning “allow.” Read the answer type and value. For example, a valid Stop choice must stop the workflow.

## Separate a waiting task from a complete walkthrough

The waiting-for-input guide helps diagnose an agent that needs a decision. The reply walkthrough demonstrates a complete choice → text → confirmation flow with a dated verification record. This page explains the shared phone-reply and approval contract.

- [Agent waiting for input](https://ntfyx.me/docs/agent-waiting-for-input/)
- [Runnable reply walkthrough and evidence](https://ntfyx.me/docs/agent-reply-walkthrough/)

## Before you start

For the protected CLI scripts below, install Ntfyx CLI 0.6.0+ on Windows, macOS or Linux and the app on iPhone (iOS 18.4+) or Android (Android 10+). Android background push requires Google Play services. Pair the CLI as the same user who runs the task; installing it alone does not authorize the sender. Free includes 100 messages per UTC day. Use ntfyx topics to find your local alias and replace Work in the examples. The shell installer below is for macOS/Linux; Windows installation and current phone availability are on the download page.

1. Run ntfyx connect on the trusted computer and keep the fresh QR private.
2. Use the phone’s private Topic connection flow to authorize this Source. Update older apps from the store and follow the private scanning entry; current versions are listed in the quickstart.
3. Confirm one actual phone message before adding the wrapper to your own task.

```
curl -fsSL https://ntfyx.me/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
ntfyx version --json
ntfyx connect
ntfyx topics
```

> The shell examples below target macOS / Linux. Windows has the full CLI and local MCP; use PowerShell commands and your own scheduler. Native host permissions retain their separate compatibility policy.

- [Pairing and CLI setup](https://ntfyx.me/docs/quickstart/)
- [Current downloads and availability](https://ntfyx.me/download/)

## Inspect and run the demo

This example asks a question, waits synchronously and prints a harmless demo message only when the CLI returns success. It does not deploy software, run a payment or execute an external operation.

```
curl -fsSLo approval-demo.sh https://ntfyx.me/examples/scripts/approval-demo.sh
cat approval-demo.sh
bash approval-demo.sh Work
```

- [Read approval-demo.sh](https://ntfyx.me/examples/scripts/approval-demo.sh)

## Answer on your phone

Open the request titled Review the demo step. Check the question and choose Allow or Deny. You can also answer a new request in a browser that your phone authorized. The receiver signs and encrypts the answer for the original source.

![Ntfyx Web Inbox showing Continue the demo with Allow and Deny actions.](https://ntfyx.me/guides/approval-request.png)

Actual local Web test with a synthetic request. A signed browser answer exercises the same request protocol; this screenshot does not establish phone delivery.

## Understand the exit status

The script waits up to 60 seconds by default and the request expires after 90 seconds. A pending request can remain answerable after the local wait ends. A late reply never restarts an exited script.

```
bash approval-demo.sh Work 1s
```

| Outcome | CLI exit | Demo continues? |
| --- | --- | --- |
| Verified Allow and claim acquired | 0 | Yes, prints one demo line. |
| Deny | 10 | No. |
| Local wait timed out | 14 | No. |
| Answer already claimed | 15 | No. |
| Transport failure | Nonzero | No. |

> Do not replace synchronous ask with ask --async or a read-only result query. Those commands can return successfully while a request is still pending or its answer is Deny.

## Connect a real operation carefully

The synchronous CLI verifies the reply and acquires its one-time claim before returning success. Only the successful branch may continue. Keep your external operation idempotent and record its outcome separately: a claim cannot make an external deployment or transaction exactly once. If the result of a claim or operation is unknown, investigate instead of automatically rerunning the operation or requesting a fresh approval.

- [CLI result and claim semantics](https://ntfyx.me/docs/cli/)
- [Encryption and trust boundaries](https://ntfyx.me/security/)

## What was verified

These scripts were tested with the compiled CLI, a real local encrypted relay and signed replies from the Web Inbox. Phone authorization in that automated test used a programmatic identity. The screenshots show synthetic messages from that local Web test; they are not iPhone or APNs delivery evidence.

- [Read the example source and verification scope](https://github.com/KaylaONeal/ntfyx-examples)

## When the agent needs your input

Completion alerts, tool permission requests and missing information need different integrations. Use the guide below to choose a supported permission hook or explicitly ask for a choice or text reply through the CLI or local MCP. Existing terminal prompts are not automatically forwarded.

- [Agent waiting for input: notifications and replies](https://ntfyx.me/docs/agent-waiting-for-input/)
- [Multiple coding agents and projects](https://ntfyx.me/docs/multiple-agent-notifications/)
- [SSH and remote server jobs](https://ntfyx.me/docs/ssh-job-notifications/)

## Compare ways to use coding agents from your phone

Compare full-session access, completion notifications, permission decisions and answers, with official sources, encryption scope, account requirements and starting prices.

- [Claude Code and Codex on your phone](https://ntfyx.me/docs/coding-agents-on-your-phone/)

## Question tools and native permissions have different scopes

Both provide local MCP question tools and phone-reply guidance. Completion hooks are available on macOS / Linux. Claude Code also bridges AskUserQuestion; Codex native request_user_input is not intercepted. Native execution approvals have verified Linux x64 support for Claude Code 2.1.283 / 2.1.284 and Codex 0.158.0; Apple silicon Mac native approvals are verified with Claude Code 2.1.303 and Codex 0.163.0 and require CLI 0.1.5+. Intel Mac native approvals remain unverified and return to the terminal. Codex requires interactive TUI and /hooks trust; codex exec does not trigger permission hooks. Claude setup permission hooks require --permissions on. Other MCP clients require host-specific configuration. This is not a hosted ChatGPT or Claude app-directory connector. On Windows, use direct CLI setup or local MCP. Claude Code hooks require 2.1.139+; an older or unknown version gets MCP only. Codex on Windows provides MCP questions without automatic hooks. The marketplace plugin uses POSIX shell hooks; use direct setup on Windows. Native tool permission approvals retain their separate platform and host policy.

> A completion notification does not create a question. A phone answer does not change the host sandbox, deny rules or trust decisions. Ntfyx carries selected messages and questions; it does not provide a remote terminal or mirror the whole agent conversation.

- [Claude Code integration](https://ntfyx.me/docs/claude-code-notifications/)
- [Codex integration](https://ntfyx.me/docs/codex-phone-approval/)

## What is encrypted?

Protected Topic CLI and agent message titles, bodies, options and replies are end-to-end encrypted on your devices. Public Topic names and messages are readable by the service and anyone with the Topic ID or link. The explicit fixed monitor-access and webhook-management questions and their signed phone answers are disclosed to the service for verification. HTTPS push and webhook requests are readable by the service before encrypted delivery. Optional provider verification secrets are encrypted and stored by the service, then used in plaintext to verify the raw webhook body; they are hosted secrets, not hidden from the service. My Monitor reads the monitored address, rule and response; a public publisher knows the content it publishes. The relay routes ciphertext and processes operational metadata such as identifiers, time, size and push tokens. Do not put secrets in monitored URLs or request examples. Independent security review is not complete.

- [Encryption and verification](https://ntfyx.me/security/)

---

# Ntfyx: a notification and reply app

Source: https://ntfyx.me/about/

Updated: 2026-10-24

What Ntfyx does, who operates it, official apps and source repositories, regional availability and where encryption begins.

## What is Ntfyx?

Ntfyx is a phone inbox for your AI agents and scripts, on iPhone and Android. Claude Code, Codex, scripts and server jobs send updates to your phone. When they need a decision, confirm, choose or type a reply under the original question, and the work on your computer continues. Protected Topic Agent and CLI messages are end-to-end encrypted. Public Topics allow anonymous reading and sending and do not accept answers or Call reminders. The app also offers HTTP notifications through HTTPS links, optional call-style message reminders, hourly service monitors and notification subscriptions. You can choose a free notification subscription in the app, without a computer.

- [Send an HTTPS notification](https://ntfyx.me/docs/http-push/)
- [Answer your agent](https://ntfyx.me/docs/agent-plugins/)
- [Hourly service monitoring](https://ntfyx.me/docs/service-monitoring/)

## Official apps and downloads

The official website is ntfyx.me. Public release versions, verified 2026-10-29: iPhone 1.8.3, Android 1.8.2 and companion CLI 0.6.1 for Windows, macOS and Linux. Chrome extension 0.2.4 has a public Chrome Web Store listing, checked 2026-10-26. Your phone authorizes the optional Chrome or Web Inbox receiver. Check the download page for feature minimums and updated availability.

- [Ntfyx on the App Store](https://apps.apple.com/app/id6817353404)
- [Ntfyx on Google Play](https://play.google.com/store/apps/details?id=me.ntfyx.app)
- [Ntfyx on the Chrome Web Store](https://chromewebstore.google.com/detail/acjjebbohlohmihfigkbnjabmjdgkkdi)
- [Downloads and compatibility](https://ntfyx.me/download/)

## App Store regions: checked 19 October 2026

The iPhone app is configured for 174 App Store territories, including all 27 European Union countries. The United States and Germany Ntfyx store pages were actually opened and visible on 19 October 2026. Mainland China is not included: the app has not completed the required mainland app filing and is not offered there. Availability depends on your storefront and may change.

- [United States App Store listing](https://apps.apple.com/us/app/ntfyx/id6817353404)
- [Germany App Store listing](https://apps.apple.com/de/app/ntfyx/id6817353404)

## Who operates Ntfyx?

Ntfyx is operated by 湖南巴格智能科技有限公司 (Hunan Bage Intelligent Technology Co., Ltd.). The same operator is named in the privacy notice and phone-store developer information. Use the official links on this page to identify the product and its support channels.

- [Privacy notice and operator details](https://ntfyx.me/privacy/)
- [Contact support](https://ntfyx.me/support/)
- [Service status](https://status.ntfyx.me/)

## Where encryption begins

Protected Topic CLI and agent message titles, bodies, options and replies are end-to-end encrypted on your devices. Public Topic names and messages are readable by the service and anyone with the Topic ID or link. The explicit fixed monitor-access and webhook-management questions and their signed phone answers are disclosed to the service for verification. HTTPS push and webhook requests are readable by the service before encrypted delivery. Optional provider verification secrets are encrypted and stored by the service, then used in plaintext to verify the raw webhook body; they are hosted secrets, not hidden from the service. My Monitor reads the monitored address, rule and response; a public publisher knows the content it publishes. The relay routes ciphertext and processes operational metadata such as identifiers, time, size and push tokens. Do not put secrets in monitored URLs or request examples. Independent security review is not complete.

- [Encryption and service boundaries](https://ntfyx.me/security/)
- [Free allowance and service limits](https://ntfyx.me/limits/)

## Public code and the product name

The Ntfyx agent adapters and runnable examples are published in the two repositories below under MIT. That license covers those repositories; the app, companion CLI and hosted service have separate licenses and terms. Ntfyx does not provide a supported self-hosted core release. Ntfyx at ntfyx.me and ntfy at ntfy.sh are different products; follow the documentation for the product you install.

- [Ntfyx agent plugins on GitHub](https://github.com/KaylaONeal/ntfyx-agent-plugins)
- [Ntfyx runnable examples on GitHub](https://github.com/KaylaONeal/ntfyx-examples)
- [Compare notification workflows](https://ntfyx.me/docs/notification-tools/)
- [ntfy official website](https://ntfy.sh/)
- [Ntfyx terms](https://ntfyx.me/terms/)

## Official CLI package and MCP Registry

Public registry APIs checked on 2026-10-24: npm package ntfyx 0.4.1 is published, and MCP Registry entry me.ntfyx/ntfyx 0.4.1 is active and latest. MCP runs locally over stdio and requires pairing approved by the Ntfyx phone app. Registry inclusion is separate from a recommendation or listing in an AI product’s built-in store.

- [npm: ntfyx](https://www.npmjs.com/package/ntfyx)
- [MCP Registry: me.ntfyx/ntfyx (JSON)](https://registry.modelcontextprotocol.io/v0.1/servers/me.ntfyx%2Fntfyx/versions/latest)
- [MCP setup and pairing](https://ntfyx.me/docs/agent-plugins/)

---

# Ntfyx：通知与回复 App

Source: https://ntfyx.me/zh/about/

Updated: 2026-10-24

了解 Ntfyx 的用途、运营主体、官方 App 与代码仓库、地区可用状态，以及不同接入方式的加密边界。

## Ntfyx 是什么？

Ntfyx 是给 AI Agent 和脚本用的手机收件箱，支持 iPhone 和 Android。Claude Code、Codex、脚本和服务器任务把进展发到手机；需要你决定时，在原问题下确认、选择或回复文字，电脑上的任务接着运行。受保护 Topic 的 Agent 与 CLI 消息端到端加密。公开 Topic 无需密钥即可读写，不支持应答或 Call。App 还提供 HTTPS 链接发送的 HTTP 通知、可选来电式消息提醒、每小时服务监控和通知订阅。 也可直接在 App 选择一个免费通知订阅，无需电脑。

- [用 HTTPS 发送通知](https://ntfyx.me/zh/docs/http-push/)
- [在手机回答 Agent](https://ntfyx.me/zh/docs/agent-plugins/)
- [每小时检查服务](https://ntfyx.me/zh/docs/service-monitoring/)

## 官方 App 与下载渠道

官方网站为 ntfyx.me。已于 2026-10-29 核对的公开版本：iPhone 1.8.3、Android 1.8.2，以及适用于 Windows、macOS 和 Linux 的配套 CLI 0.6.1。Chrome 扩展 0.2.4 的公开商店页面已于 2026-10-26 核对。Chrome 或 Web 收件箱需要手机授权。各功能的最低版本与后续可用状态请查看下载页。

- [App Store 上的 Ntfyx](https://apps.apple.com/app/id6817353404)
- [Google Play 上的 Ntfyx](https://play.google.com/store/apps/details?id=me.ntfyx.app)
- [Chrome 应用商店上的 Ntfyx](https://chromewebstore.google.com/detail/acjjebbohlohmihfigkbnjabmjdgkkdi)
- [下载与兼容要求](https://ntfyx.me/zh/download/)

## App Store 地区：2026 年 10 月 19 日核对

iPhone App 已配置在 174 个 App Store 地区发行，包含欧盟 27 国；2026 年 10 月 19 日实际打开美国区和德国区 Ntfyx 页面，均确认可见。中国大陆不在发行范围内：本 App 尚未完成大陆所需的 App 备案，暂未在大陆提供。实际下载取决于所在商店，地区可用状态可能变化。

- [美国区 App Store 页面](https://apps.apple.com/us/app/ntfyx/id6817353404)
- [德国区 App Store 页面](https://apps.apple.com/de/app/ntfyx/id6817353404)

## 谁在运营 Ntfyx？

Ntfyx 由湖南巴格智能科技有限公司（Hunan Bage Intelligent Technology Co., Ltd.）运营。隐私说明与手机商店的开发者资料列明同一运营主体。请通过本页官方链接识别产品及联系支持。

- [隐私说明与运营主体](https://ntfyx.me/privacy/)
- [联系支持](https://ntfyx.me/support/)
- [服务状态](https://status.ntfyx.me/)

## 加密从哪里开始？

受保护 Topic 中 CLI 与 Agent 消息的标题、正文、选项和回复在设备上端到端加密；公开 Topic 的名称和消息对服务端及持有标识或链接的人可见。明确的监控 / Webhook 管理固定授权问题及手机签名答案会披露给服务端核验。HTTPS 推送与 Webhook 请求在加密投递前对服务可见；可选供应商验证 secret 由服务加密存储，并在验签时以明文验证原始 body，是托管 secret，并非服务端不可见；My Monitor 会读取监控地址、规则和响应，公开发布者知道自己发送的内容。中继转发密文，仍处理标识符、时间、大小和推送令牌等运行元数据。不要在监控 URL 或请求示例中放密钥。尚未完成独立安全审计。

- [加密与服务边界](https://ntfyx.me/security/)
- [免费额度与服务限制](https://ntfyx.me/limits/)

## 公开代码与产品名称

Ntfyx 的 Agent 适配层和可运行示例以 MIT 许可公开在下方两个仓库。MIT 适用于这些仓库内容；App、配套 CLI 与托管服务采用各自许可和条款。Ntfyx 没有受支持的核心自托管发行包。ntfyx.me 的 Ntfyx 与 ntfy.sh 的 ntfy 是不同产品，请使用对应产品的文档。

- [GitHub：Ntfyx Agent 插件](https://github.com/KaylaONeal/ntfyx-agent-plugins)
- [GitHub：Ntfyx 可运行示例](https://github.com/KaylaONeal/ntfyx-examples)
- [按使用方式对比通知工具](https://ntfyx.me/zh/docs/notification-tools/)
- [ntfy 官方网站](https://ntfy.sh/)
- [Ntfyx 服务条款](https://ntfyx.me/terms/)

## 官方 CLI 包与 MCP Registry

2026-10-24 通过公开注册表 API 核对：npm 包 ntfyx 0.4.1 已发布，MCP Registry 的 me.ntfyx/ntfyx 0.4.1 标记为 active 和 latest。MCP 使用本地 stdio 连接，需先用 Ntfyx 手机 App 批准配对。注册表收录不代表 ChatGPT、Claude 或其他产品已在其内置商店推荐。

- [npm: ntfyx](https://www.npmjs.com/package/ntfyx)
- [MCP Registry: me.ntfyx/ntfyx (JSON)](https://registry.modelcontextprotocol.io/v0.1/servers/me.ntfyx%2Fntfyx/versions/latest)
- [MCP 安装与配对](https://ntfyx.me/zh/docs/agent-plugins/)

---

# Claude Code 手机通知、提问与回复：Ntfyx 接入指南

Source: https://ntfyx.me/zh/docs/claude-code-notifications/

Updated: 2026-10-24

用 Ntfyx 在 iPhone、Android 或 Web 接收 Claude Code 完成通知，回答 AskUserQuestion 和支持的权限请求。了解安装、签名回复、原生审批范围与版本要求。

## 如何在手机接收 Claude Code 通知？

在 iPhone 或 Android 安装 Ntfyx，用手机配对 Windows、macOS 或 Linux 电脑上的签名 CLI，再运行 ntfyx setup claude-code 或安装 Ntfyx 插件。完成 Hook 发送任务状态通知；AskUserQuestion 桥接和显式本地 MCP 提问支持选择或文字回复。原生权限审批已验证 Linux x64。Apple 芯片 Mac 已验证 Claude Code 2.1.303 与 Codex 0.163.0 的原生审批，需 CLI 0.1.5+；Intel Mac 原生审批仍未验证，回到终端处理。安装接入不会让所有 Claude 交互都变成远程可控。

- [一条命令设置、插件与提问支持](https://ntfyx.me/zh/docs/agent-plugins/)
- [English guide](https://ntfyx.me/docs/claude-code-notifications/)

## Windows Agent 接入

Windows 使用 CLI 的直接 setup 或本地 MCP。Claude Code Hook 需要 2.1.139+；旧版或无法确认版本时只配置 MCP。Codex 在 Windows 提供 MCP 提问，不配置自动 Hook。市场插件的 Hook 使用 POSIX shell，Windows 请使用直接 setup。原生工具权限审批仍按单独的平台与宿主允许范围处理。

```
ntfyx setup claude-code --dry-run
ntfyx setup claude-code

ntfyx setup codex --dry-run
ntfyx setup codex
```

- [Windows 安装与平台范围](https://ntfyx.me/zh/download/)

## Claude Code 需要补充信息时，怎样回复？

Ntfyx 把 Claude Code 的任务通知和支持的问题发送到 iPhone、Android 手机或手机授权的 Web 收件箱。安装配套 CLI，再使用一条命令设置或 Ntfyx 插件。AskUserQuestion 桥接将单选题转成按钮，并提供文字替代回答；多选题当前通过输入选项编号回答。Agent 也可以显式调用本地 MCP 提问。原生工具权限审批采用下文 Linux x64 与 Apple 芯片 Mac 的版本范围和超时规则。

- [插件与 AskUserQuestion 设置](https://ntfyx.me/zh/docs/agent-plugins/)
- [下载手机 App 和 CLI](https://ntfyx.me/download/)

## 按需求选择接入方式

只想知道任务是否结束，可以包装一条 Claude Code 命令。需要回答支持的工具权限请求，可以安装 Ntfyx Hook，在手机核对原请求。需要在另一台设备继续整个 Claude 对话时，可以考虑 Claude 官方 Remote Control。

| 目标 | 接入方式 | 范围 |
| --- | --- | --- |
| 知道命令何时退出 | notify-after.sh + claude -p | 固定状态摘要；终端输出留在电脑。 |
| 回答工具权限请求 | Ntfyx PermissionRequest Hook | Linux x64，以及 Apple 芯片 Mac 上 Claude Code 2.1.303 + CLI 0.1.5+ 的 Bash / Edit / Write 流程。 |
| 远程继续 Claude 会话 | Claude Remote Control | 官方手机／浏览器会话界面；需要符合条件的账户。 |

## 开始前需要准备什么？

在 Windows、macOS 或 Linux 电脑安装当前 Ntfyx CLI 0.6.1，并在 iPhone（iOS 18.4+）或 Android 手机（Android 10+）安装 Ntfyx。当前公开手机版本为 iPhone 1.8.3、Android 1.8.2；下方新版 Topic 接入步骤需要手机 App 1.8.1 或以上，公开可用状态请以下载页为准。Android 推送需要 Google Play 服务。只安装 CLI 不会自动连接手机。免费版包含 1 个由通知源订阅和公开 Topic 关注共用的订阅名额。所有套餐共用 1,000 个 Topic 的技术上限，Topic 数量不作为付费权益。多个已授权来源可以共用受保护 Topic。

1. 在电脑显示新的配对二维码；不要公开二维码。
2. 在手机打开“连接私有 Topic”扫码并选择已有受保护 Topic；如需新建，使用“添加 Topic”中的“连接私有 Topic”扫描同一二维码，命名后授权这台电脑。
3. 以下命令使用 Work 作为 CLI 本地连接别名；请替换为你实际配置的别名。

```
curl -fsSL https://ntfyx.me/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
ntfyx version --json
ntfyx connect
ntfyx topics
```

> 下方 shell 示例用于 macOS / Linux。Windows 提供完整 CLI 与本地 MCP，请使用 PowerShell 安装命令及自己的调度器。宿主原生权限仍按独立兼容范围处理。

- [配对与 CLI 设置（英文）](https://ntfyx.me/docs/quickstart/)
- [当前下载与可用状态](https://ntfyx.me/download/)

## 沿用你现有的 Claude Code 环境

以下示例需要已经安装、认证并有权执行所请求任务的 Claude Code。Claude Code 的使用受你自己的账户和套餐约束。-p 会执行一个提示并退出；包装脚本观察的是进程退出，不是交互式聊天每一轮的 Hook。

- [Claude Code 官方 CLI 说明](https://code.claude.com/docs/en/cli-reference)

## 先阅读通知包装脚本

用于 shell 通知的同一份小脚本也适用于 Claude Code。它只发送通用完成状态，并保留原命令退出码。

```
curl -fsSLo notify-after.sh https://ntfyx.me/examples/scripts/notify-after.sh
cat notify-after.sh
```

## 运行一项小任务

在你有权向所配置 Claude 服务提供 README 的项目中，执行下面的只读请求。按原有策略核对 Claude 客户端提出的权限请求。进程退出后，Ntfyx 会向 Work 发送 Task finished 或 Task failed。

```
bash notify-after.sh Work claude -p "Explain this project's README without changing files."
```

> 退出码0只报告进程成功，不证明模型回答正确。此示例不修改 Claude 权限设置，也不会把你的提示通过 Ntfyx 发送。

## 查看提醒，再回到电脑继续

消息送达并在手机本地解密后，手机显示通知。由手机授权的浏览器也能接收新发送给它的消息。回到原终端阅读 Claude 的回答；没有收到提醒时，检查 CLI 配对、终端警告与手机通知设置。

- [通知排查（英文）](https://ntfyx.me/docs/troubleshooting/)
- [可选 Web 收件箱（英文）](https://ntfyx.me/docs/web/)

## 接入原生工具权限审批

先预览将修改的配置，再在已配对电脑应用。setup 保留无关配置，注册本地 MCP 工具与生命周期 Hook。setup 和 Ntfyx 插件二选一，避免重复 Hook。支持的 PermissionRequest 在100秒宿主 Hook 超时内，等待签名回答最多90秒；既有拒绝规则仍然生效。

1. 保持电脑上的 Claude 运行，让正常任务按既有策略触发一次权限请求。
2. 在手机检查完整工具上下文。Allow 只授权本次调用，Deny 阻止它。
3. 请求不支持、超时或回复验证失败时，回到终端处理。迟到的 Allow 不会重新启动已结束的调用。

```
ntfyx setup claude-code --permissions on --dry-run
ntfyx setup claude-code --permissions on
```

> 2026年9月30日已验证：Claude Code 2.1.283 与2.1.284、Linux x64、非交互式 Bash / Edit / Write 的 Allow 和 Deny。2026年10月19日，Apple 芯片 Mac 上 Claude Code 2.1.303 的 Bash / Edit / Write 允许、拒绝与生命周期验收通过，需 CLI 0.1.5+，并显式设置 --permissions on；Intel Mac 仍回到终端；Claude 交互式终端选项的优先级尚未验证。

- [宿主兼容范围（英文）](https://ntfyx.me/docs/agents/)
- [插件安装与功能范围](https://ntfyx.me/zh/docs/agent-plugins/)
- [无害的独立审批示例（英文）](https://ntfyx.me/docs/phone-approval/)

## 什么时候更适合 Claude Remote Control？

Claude Remote Control 通过 Claude App 或浏览器继续本机会话，并提供手机推送选项。本机电脑和 Claude 进程必须持续运行。其当前要求包括符合条件的 Pro、Max、Team 或 Enterprise 订阅及 Claude 登录；API key 和自定义 API endpoint 配置不在适用范围。需要完整会话时，可以选择该方案；Ntfyx 同时把普通脚本通知和其他来源的请求整理到命名 Topic 中。

- [Claude Remote Control 官方要求与手机通知](https://code.claude.com/docs/en/remote-control)
- [通知工具选型（英文）](https://ntfyx.me/docs/notification-tools/)

## 这些示例验证了什么？

脚本已用编译后的 CLI、真实本地加密中继和 Web 收件箱签名回复进行测试；自动测试中的手机授权使用程序化身份。相关示例截图是本地 Web 测试的合成消息，不是 iPhone 或 APNs 送达证据。通知包装脚本使用无害的 shell 进程测试，本教程没有新发起付费 Claude 请求。原生宿主测试独立覆盖上文列出的版本与运行模式。Ntfyx 当前没有在 ChatGPT 或 Claude 应用目录公开收录。

- [示例源码与验证范围](https://github.com/KaylaONeal/ntfyx-examples)

## Agent 等待你补充信息时

完成提醒、工具权限请求和缺失信息需要不同接入方式。按对应指南选择支持的权限 Hook，或通过 CLI／本地 MCP 显式请求选项或文字回复。已有终端提示不会自动转发。

- [Agent 等待输入：通知与回复](https://ntfyx.me/zh/docs/agent-waiting-for-input/)
- [多个 Agent 与项目](https://ntfyx.me/zh/docs/multiple-agent-notifications/)
- [SSH 与服务器任务](https://ntfyx.me/zh/docs/ssh-job-notifications/)

## 按手机使用需求比较方案

查看完整会话、完成提醒、权限审批与问题回答的分别比较，包含官方来源、加密、账号和价格起点。

- [Claude Code、Codex 手机方案比较](https://ntfyx.me/zh/docs/coding-agents-on-your-phone/)

## 更多 Agent 通知与回复场景

按任务完成、等待输入与宿主类型选择接入指南。

- [Codex 手机通知与回复](https://ntfyx.me/zh/docs/codex-phone-approval/)
- [Agent 等待确认或输入](https://ntfyx.me/zh/docs/agent-waiting-for-input/)
- [AI Agent 手机通知](https://ntfyx.me/zh/docs/agent-notifications/)

---

# Codex 手机通知与权限审批：Ntfyx 接入指南

Source: https://ntfyx.me/zh/docs/codex-phone-approval/

Updated: 2026-10-24

Codex 完成任务时通知 iPhone 或 Android，并通过本地 MCP 回复问题。原生权限审批限已验证的 Linux x64 或 Apple 芯片 Mac 组合；Windows 使用 MCP 提问。

## 如何在手机接收 Codex 提醒并确认权限？

用 Ntfyx 配对 iPhone 或 Android 手机，再运行 ntfyx setup codex 或安装 Ntfyx 插件。macOS / Linux 的完成 Hook 发送任务提醒，本地 MCP 可以请求选项或文字回答。原生权限审批需要文档所列 Linux x64 或 Apple 芯片 Mac 组合、交互式 TUI，并由你在 /hooks 中信任 Hook。Apple 芯片 Mac 已验证 Claude Code 2.1.303 与 Codex 0.163.0 的原生审批，需 CLI 0.1.5+；Intel Mac 原生审批仍未验证，回到终端处理。不会拦截 Codex request_user_input，也不会在 codex exec 中提供原生权限审批。

- [Codex 插件与提问范围](https://ntfyx.me/zh/docs/agent-plugins/)
- [当前手机 App 与签名 CLI](https://ntfyx.me/download/)
- [English guide](https://ntfyx.me/docs/codex-phone-approval/)

## Windows Agent 接入

Windows 使用 CLI 的直接 setup 或本地 MCP。Claude Code Hook 需要 2.1.139+；旧版或无法确认版本时只配置 MCP。Codex 在 Windows 提供 MCP 提问，不配置自动 Hook。市场插件的 Hook 使用 POSIX shell，Windows 请使用直接 setup。原生工具权限审批仍按单独的平台与宿主允许范围处理。

```
ntfyx setup claude-code --dry-run
ntfyx setup claude-code

ntfyx setup codex --dry-run
ntfyx setup codex
```

- [Windows 安装与平台范围](https://ntfyx.me/zh/download/)

## 这项接入提供什么？

Ntfyx 把支持的 Codex 权限请求发送到已配对的 iPhone、Android 手机或手机授权的 Web 收件箱。正在运行的 Codex 调用获得经过验证的 Allow 或 Deny。这是本地 CLI 接入，不会把 Ntfyx 加入 ChatGPT 云端应用目录，也不会把整个 Codex 会话搬到手机。

> 原生审批要求 Ntfyx CLI 0.1.2+、Codex 0.158.0+ 与 Linux x64。Codex 0.158.0 已于2026年9月30日测试。2026年10月19日已验证 Apple 芯片 Mac 上 Codex 0.163.0 的原生审批，需 CLI 0.1.5+；Intel Mac 仍回到终端。

## 开始前需要准备什么？

在 Windows、macOS 或 Linux 电脑安装当前 Ntfyx CLI 0.6.1，并在 iPhone（iOS 18.4+）或 Android 手机（Android 10+）安装 Ntfyx。当前公开手机版本为 iPhone 1.8.3、Android 1.8.2；下方新版 Topic 接入步骤需要手机 App 1.8.1 或以上，公开可用状态请以下载页为准。Android 推送需要 Google Play 服务。只安装 CLI 不会自动连接手机。免费版包含 1 个由通知源订阅和公开 Topic 关注共用的订阅名额。所有套餐共用 1,000 个 Topic 的技术上限，Topic 数量不作为付费权益。多个已授权来源可以共用受保护 Topic。

1. 在电脑显示新的配对二维码；不要公开二维码。
2. 在手机打开“连接私有 Topic”扫码并选择已有受保护 Topic；如需新建，使用“添加 Topic”中的“连接私有 Topic”扫描同一二维码，命名后授权这台电脑。
3. 以下命令使用 Work 作为 CLI 本地连接别名；请替换为你实际配置的别名。

```
curl -fsSL https://ntfyx.me/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
ntfyx version --json
ntfyx connect
ntfyx topics
```

> 下方 shell 示例用于 macOS / Linux。Windows 提供完整 CLI 与本地 MCP，请使用 PowerShell 安装命令及自己的调度器。宿主原生权限仍按独立兼容范围处理。

- [配对与 CLI 设置（英文）](https://ntfyx.me/docs/quickstart/)
- [当前下载与可用状态](https://ntfyx.me/download/)

## 预览并安装接入配置

在运行 Codex 会话的同一电脑、同一用户下执行 setup。它在 hooks.json 中加入 PermissionRequest 与 Stop Hook，并注册本地 Ntfyx MCP server。先检查 dry-run；已经安装 Ntfyx Agent 插件时，使用现有插件，不再叠加同一组 Hook。

```
codex --version
ntfyx setup codex --dry-run
ntfyx setup codex
```

- [插件安装与平台范围](https://ntfyx.me/zh/docs/agent-plugins/)
- [宿主兼容说明（英文）](https://ntfyx.me/docs/agents/)

## 在 Codex 中核对并信任 Hook

打开交互式 Codex 会话，输入 /hooks，检查两个 Ntfyx Hook。只有它们符合你的预期配置时，才由你本人信任。CLI 不能代替你授予信任；保留原有 sandbox、approval policy 和拒绝规则。

1. 测试权限请求前，先用 ntfyx send 确认已配对连接正常。
2. 使用你本来就打算运行的无害任务。Codex 为 Bash 或 apply_patch 请求权限时，在手机核对这次确切请求。
3. 先选择 Deny 并确认拟执行操作被阻止。只有确实希望执行时，才对新的无害请求测试 Allow。

```
codex
```

> 不要为了制造提示而改变 sandbox 或关闭本地保护。既有策略已经允许某个工具时，可能不会产生可转发的 PermissionRequest。

## 没有收到手机请求时，检查什么？

该 Hook 用于交互式终端会话。在已验证版本中，codex exec 关闭审批，不触发这个权限 Hook；app-server 审批路径尚未验证。宿主更新后的请求必须符合支持的 payload 格式，Ntfyx 才能回答。

| 现象 | 检查项 |
| --- | --- |
| 没有执行 Hook | 在 /hooks 核对信任，检查 setup 或插件安装。 |
| 没有权限请求 | 核对交互模式，以及本地策略是否确实要求确认。 |
| 回到终端 | 检查宿主版本、Linux x64 或 Apple 芯片 Mac、CLI 0.1.5+（Mac）、工具类型和上下文大小。 |
| 请求超时 | 在本地回答；迟到的手机回答不会恢复已结束调用。 |
| 已签名的 Deny | 操作必须保持阻止；不能静默重试成 Allow。 |

- [单独排查通知送达（英文）](https://ntfyx.me/docs/troubleshooting/)

## 已经验证的范围

2026年9月30日，真实 Codex 0.158.0 的 Linux x64 交互式 TUI、Bash 与 apply_patch Allow / Deny 测试，使用编译后的 Ntfyx CLI 和本地加密中继通过。接收端是程序化身份，不是实体 iPhone。2026年10月19日，Apple 芯片 Mac 上 Codex 0.163.0 交互 TUI 的 Bash / apply_patch 允许与拒绝四项通过，需 CLI 0.1.5+；Intel Mac 原生审批仍未验证。这些结果不涵盖所有 Codex 版本、实体手机推送或独立安全审计；不支持的输入回到本地宿主处理。

- [公开插件配置与安装](https://github.com/KaylaONeal/ntfyx-agent-plugins)
- [签名回复与单次领取（英文）](https://ntfyx.me/security/)

## 还需要用量与 reset-credit 提醒吗？

用量提醒是单独启用的任务。它只读本地 Codex 状态，在限额或 reset 卡变化时发送通知，不兑换 reset 卡，也不审批工具。

- [Codex 用量与 reset 卡提醒（英文）](https://ntfyx.me/docs/codex-usage-alerts/)

## Agent 等待你补充信息时

完成提醒、工具权限请求和缺失信息需要不同接入方式。按对应指南选择支持的权限 Hook，或通过 CLI／本地 MCP 显式请求选项或文字回复。已有终端提示不会自动转发。

- [Agent 等待输入：通知与回复](https://ntfyx.me/zh/docs/agent-waiting-for-input/)
- [多个 Agent 与项目](https://ntfyx.me/zh/docs/multiple-agent-notifications/)
- [SSH 与服务器任务](https://ntfyx.me/zh/docs/ssh-job-notifications/)

## 按手机使用需求比较方案

查看完整会话、完成提醒、权限审批与问题回答的分别比较，包含官方来源、加密、账号和价格起点。

- [Claude Code、Codex 手机方案比较](https://ntfyx.me/zh/docs/coding-agents-on-your-phone/)

## 更多 Agent 通知与回复场景

按任务完成、等待输入与宿主类型选择接入指南。

- [Claude Code 手机通知](https://ntfyx.me/zh/docs/claude-code-notifications/)
- [Agent 等待确认或输入](https://ntfyx.me/zh/docs/agent-waiting-for-input/)
- [AI Agent 手机通知](https://ntfyx.me/zh/docs/agent-notifications/)

---

# Ntfyx vs ntfy, Bark, Pushover and Gotify: choose by workflow

Source: https://ntfyx.me/docs/notification-tools/

Updated: 2026-10-29

Compare the same backup alert and human confirmation workflow in Ntfyx, ntfy, Bark, Pushover and Gotify, with platforms, prices, retention and official sources checked 28 October 2026.

## The short answer

Choose Ntfyx when you want incoming task messages and an answer that stays with its original question, in a hosted app with optional phone-only notification subscriptions. Evaluate ntfy for general publish/subscribe and actions, Bark for custom iPhone push, Pushover for API alerts and acknowledgment receipts, or Gotify for a server you operate with Web/Android receivers.

> Written by Ntfyx. Official documentation was checked on 28 October 2026; this is a workflow comparison, not a comparative device, latency or security benchmark. “Not established by the reviewed documentation” does not mean a feature is impossible or absent from every extension.

## Send the same backup alert with Ntfyx or ntfy

Use the harmless message “Backup test failed (exit 1)” in either setup below. Both paths work without pairing a computer. Ntfyx HTTPS Push uses a private sending URL prepared on the phone; ntfy can publish anonymously to a topic you choose. These examples send a test message, not a backup or a retry.

```
# Run either command after configuring its variable.
# Ntfyx: use the complete HTTPS Push link copied from your phone.
curl --fail-with-body --silent --show-error --max-time 30 \
  -H "Content-Type: text/plain; charset=utf-8" \
  --data-binary "Backup test failed (exit 1)" "${NTFYX_PUSH_URL:?Set the private sending URL}"

# ntfy: use the same topic you subscribed to in its phone app.
curl --fail-with-body --silent --show-error --max-time 30 \
  --data-binary "Backup test failed (exit 1)" "https://ntfy.sh/${NTFY_TOPIC:?Set your topic}"
```

| Step | Ntfyx HTTPS Push | ntfy |
| --- | --- | --- |
| Prepare the receiver | Open HTTPS Push in the phone app, wait for it to be ready, and copy the complete sending link. | In the ntfy phone app, subscribe to a long, unique topic on ntfy.sh. The same topic name goes into the sending URL. |
| Configure the script | Set NTFYX_PUSH_URL privately to the copied link. It grants sending only; anyone who gets it can send. | Set NTFY_TOPIC to the chosen topic. An unreserved public topic permits anyone with its name to read and send. |
| Observe the result | Check MyNotify in the app, then check the phone alert separately. The service reads HTTPS input before encrypting delivery. | Check the subscribed topic and phone alert separately. Use access controls or your own server when anonymous topic access does not fit. |

> Keep real backup logs and secrets out of public messages. HTTP acceptance does not prove a phone displayed an alert. After a timeout, inspect the original outcome before resending. For a real job, preserve the backup exit code even if notification delivery fails; the backup guide includes that wrapper.

- [Ntfyx HTTPS setup and retry rules](https://ntfyx.me/docs/http-push/)
- [Backup failure example](https://ntfyx.me/use-cases/backup-alerts/)
- [ntfy: anonymous HTTP publishing and limits](https://docs.ntfy.sh/publish/)

## Public Topics are a separate Ntfyx option

With an existing public Topic ID or link, CLI 0.6.0 can send and read without pairing, a key or a Ntfyx account. The phone follows that existing Topic; following does not create one. Public content is readable by the service and anyone with the link, and cannot carry answers, approvals or Call reminders. Each accepted public message counts against the Topic owner’s daily message allowance; following uses the follower’s subscription slot.

```
ntfyx public info --topic TOPIC_ID --json
ntfyx public send "Backup test failed (exit 1)" --topic TOPIC_ID --accept-public-terms --json
ntfyx public read --topic TOPIC_ID --limit 5 --json
```

> As of 2026-10-29, confirmed public releases are iOS 1.8.3 and Android 1.8.2. Update from your store, then use the public Topic or private connection entry on your phone. Android background push requires Google Play services. Read the public-content terms before accepting them. Check your own phone receipt after creating or following a Topic.

- [Public Topic setup and first message](https://ntfyx.me/docs/public-topics/)
- [Public-content terms](https://ntfyx.me/terms/)
- [Current app availability](https://ntfyx.me/download/)

## Choose the interaction you need

A notification action, an acknowledgment receipt and an answer tied to a question solve different parts of a workflow. MCP integration and encryption can be useful, but neither word alone describes the full user experience.

| Tool | Documented interaction and context |
| --- | --- |
| Ntfyx | Confirm, choose an option or send a quoted text reply. Replies stay with the original question; related task updates share a Session. |
| ntfy | Up to three notification actions can open links, send HTTP requests, copy text or use Android broadcasts. Client support varies. Define and test any additional question/reply contract you need. |
| Bark | The official API supports custom push and grouping; its tutorial also documents MCP integration. For an original-question answer and task continuation workflow, verify or implement the response contract separately. |
| Pushover | Emergency-priority notifications have acknowledgment receipts and callbacks. A receipt is a delivery/acknowledgment workflow; your integration must define what it authorizes. |
| Gotify | A built-in /mcp endpoint exposes send_message with a send-only application token. Message extras support click URLs and Android intents. Sending an input-needed alert does not itself supply an authenticated answer to that input. |

- [ntfy: action buttons](https://docs.ntfy.sh/publish/#action-buttons)
- [Bark: API and MCP integration](https://github.com/Finb/Bark/blob/master/docs/en-us/tutorial.md#mcp)
- [Pushover: acknowledgment receipts and callbacks](https://pushover.net/api/receipts)
- [Gotify: built-in MCP endpoint](https://gotify.net/docs/mcp)
- [Gotify: message links and Android intents](https://gotify.net/docs/msgextras)

## Ask a person before retrying the backup

Start with the same question: “Review the backup failure and allow one retry?” A button, acknowledgment and signed answer can all be useful. The integration must define exactly which action may follow.

```
ntfyx ask "Review the backup failure and allow one retry?" --allow-deny --wait 5m --json
```

| Tool | What the person does | What the sender must check |
| --- | --- | --- |
| ntfy | Tap a notification action that opens a review page or sends an HTTP request to your endpoint. | Your endpoint supplies authentication, binds the request to this backup attempt, and rejects expired or repeated actions. Check action support on the chosen client. |
| Pushover | Acknowledge an emergency-priority notification. | Inspect its receipt or callback. Define whether that acknowledgment means “seen” or permission to retry; the receipt alone does not define the business action. |
| Ntfyx protected Topic | Allow or deny the original question on an authorized receiver. | Synchronous ask verifies the signed answer, original request and deadline, then claims it once. Only the requested, verified Allow permits the agreed retry; report the backup result separately. |

> This command requires a paired protected Topic and only asks the question; it does not retry a backup. Deny, timeout, cancellation and an unverified answer cannot authorize continuation. A one-time answer claim does not make an external backup or transaction execute exactly once.

- [Ntfyx pairing, Allow/Deny and exit handling](https://ntfyx.me/docs/phone-approval/)
- [ntfy: action buttons](https://docs.ntfy.sh/publish/#action-buttons)
- [Pushover: acknowledgment receipts and callbacks](https://pushover.net/api/receipts)

## Hosting, receiver and privacy choices

Choose the receiver platforms first, then who operates the server and which encryption mode is enabled. TLS, self-hosting and end-to-end content encryption answer different questions. Other products also document encrypted content; Ntfyx does not claim encryption as an exclusive feature.

| Tool | Deployment and receivers | Privacy scope to check |
| --- | --- | --- |
| Ntfyx | Hosted service. iPhone, Android and Web; protected Web Inbox access needs phone authorization. The companion CLI supports macOS, Linux and Windows. No supported self-host package. | Protected Topic CLI and agent message titles, bodies, options and replies are end-to-end encrypted on your devices. Public Topic names and messages are readable by the service and anyone with the Topic ID or link. The explicit fixed monitor-access and webhook-management questions and their signed phone answers are disclosed to the service for verification. HTTPS push and webhook requests are readable by the service before encrypted delivery. Optional provider verification secrets are encrypted and stored by the service, then used in plaintext to verify the raw webhook body; they are hosted secrets, not hidden from the service. My Monitor reads the monitored address, rule and response; a public publisher knows the content it publishes. The relay routes ciphertext and processes operational metadata such as identifiers, time, size and push tokens. Do not put secrets in monitored URLs or request examples. Independent security review is not complete. |
| ntfy | Hosted ntfy.sh or your own server; Android, iOS and Web clients. | The reviewed privacy documentation explains transport encryption and message handling. Self-hosting changes who operates the server; a native E2EE mode was not established by the documents reviewed here. |
| Bark | iPhone app with an open-source, self-hostable server. | Optional encrypted push is documented. Check how your sender and iPhone share the encryption key; encrypted content is not unique to Ntfyx. |
| Pushover | Hosted service with Android, iOS and desktop browser receivers. | The API documents optional sender-to-device E2EE with encrypted=1 for iOS/Android. Check mode and client requirements rather than assuming every notification uses it. |
| Gotify | Open-source server and Web UI, with an Android client. | Self-hosting puts the server under your control. Evaluate the chosen transport, server access and client encryption mode; self-hosting alone is not proof of E2EE. |

- [ntfy: clients and self-hosting](https://docs.ntfy.sh/faq/#can-i-self-host-it)
- [ntfy: privacy and message handling](https://docs.ntfy.sh/privacy/)
- [Bark: official app and server](https://github.com/Finb/Bark)
- [Bark: optional encrypted push](https://github.com/Finb/Bark/blob/master/docs/en-us/encryption.md)
- [Pushover: optional end-to-end encryption](https://pushover.net/api#e2ee)
- [Pushover: receiver platforms](https://pushover.net/)
- [Gotify: server and clients](https://gotify.net/)
- [Gotify: transport and authentication configuration](https://gotify.net/docs/config)
- [Ntfyx security model and recovery limits](https://ntfyx.me/security/)

## Prices, retention and limits

Compare the allowance period and who operates storage, not just the plan name. The figures below were checked on 28 October 2026; hosted checkout and local app-store prices remain authoritative. Self-hosting adds your own hosting and maintenance costs. Device history is separate from server retention.

| Tool | Price and sending allowance | Server retention and limits |
| --- | --- | --- |
| Ntfyx | Free: 100 messages/UTC day. Plus: US reference $1.99/month, 1,000/day. Pro: $9.90/month, 20,000/day. Call and answer requests share those totals; monitor and subscription slots also apply. | Ordinary public messages and protected relay ciphertext: at most 24 hours, within storage capacity. Pending questions last to their deadline; terminal request/answer data lasts another 24 hours. This is not unlimited history. |
| ntfy.sh | Anonymous use is free with 250 messages/day on ntfy.sh. Hosted paid plans increase limits; Supporter lists $6/month with monthly billing, or $5/month equivalent with annual billing. | Default message cache: 12 hours. Default attachment expiry: 3 hours. Published free-host limits include 4,096-byte messages and 2 MB attachments; self-host settings and paid tiers can differ. |
| Bark | The official project describes the app as free. A self-hosted server has your own operating costs. | Check the selected server and iPhone history settings. The linked overview and tutorials do not establish a uniform hosted quota or retention promise. |
| Pushover | Individual license: US $4.99 once per receiving platform, after a 30-day trial. The account shares 10,000 API messages/month across its applications; higher capacity and Teams are separate. | Deleted from the server after delivery is verified; unverified messages expire after 21 days. API message body limit: 1,024 UTF-8 characters. Device copies have their own history. |
| Gotify | Open-source software you operate; budget for server, storage and maintenance instead of a hosted plan. | Storage and access settings belong to your deployment. Review its database cleanup and backup policy; no shared hosted retention or message allowance is assumed here. |

> As of 2026-10-29, confirmed public releases are iOS 1.8.3 and Android 1.8.2. Update from your store, then use the public Topic or private connection entry on your phone. Android background push requires Google Play services. Message plans require iOS/Android 1.8.0 or later. These are US-dollar reference prices. Purchase availability, localized prices and taxes are shown by your store before purchase; availability does not establish that every regional purchase flow has been tested.

- [Ntfyx plans](https://ntfyx.me/pricing/)
- [Ntfyx storage and service limits](https://ntfyx.me/limits/)
- [ntfy: hosted plans](https://ntfy.sh/#pricing)
- [ntfy: anonymous HTTP publishing and limits](https://docs.ntfy.sh/publish/)
- [ntfy: privacy and message handling](https://docs.ntfy.sh/privacy/)
- [Bark: official app and server](https://github.com/Finb/Bark)
- [Pushover: individual and team prices](https://pushover.net/pricing)
- [Pushover: message API](https://pushover.net/api)
- [Gotify: transport and authentication configuration](https://gotify.net/docs/config)

## What the Ntfyx workflow includes

In a protected Topic, allow or deny one request, choose an offered option or type a text answer. Select Reply on the question to open a quoted composer. Your answer stays below that question, and the sending computer verifies the signed reply. Sending a reply does not prove an external action has completed. A Topic groups messages from sources you authorize. Use the same session ID inside the same Topic to keep one task’s updates and replies in a Session conversation. Without a session ID, each new message starts a separate conversation. Grouping does not grant access to other Topics or export the agent’s whole transcript.

1. Your tool sends an update or a question into the authorized Topic.
2. Open the task conversation and answer the original question.
3. The sender receives and verifies the answer, then continues its own task.
4. A later message can report the result in that same conversation.

> No. Sending, delivery, a signed answer, a one-time claim and the result of an external action are distinct states. An approval workflow must verify the answer and claim it once before continuing. Denied, expired, cancelled or unverified requests do not authorize the action. Ntfyx is not a remote shell.

- [Task conversations and replies](https://ntfyx.me/docs/sessions/)
- [Supported agent integration and platform limits](https://ntfyx.me/docs/agent-plugins/)

## Free start and service scope

No. Open Discover in the iPhone or Android app, review a public notification source and confirm its subscription. No computer, CLI, pairing scan or Ntfyx account is needed. Receive future editions in its Topic; pause or unsubscribe from the phone. Each source lists its coverage and schedule. Private agent messages are not used to generate these updates. Free includes 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests, one monitor and one subscription. Notification-source subscriptions and public follows share the subscription allowance. Topic count is not a paid entitlement. Public Topics support ordinary and rich messages; protected Topics also support verified answers and Call reminders.

> The marketplace is an optional way to receive future public-source updates. It does not connect your computer, run downloaded plugin code or replay all old previews. Each source states its coverage and cadence. Message, device, storage and rate limits still apply.

- [Browse the notification marketplace](https://ntfyx.me/plugins/)
- [Service limits](https://ntfyx.me/limits/)
- [Download the phone app](https://ntfyx.me/download/)

## When to choose another approach

If operating your own notification server is a requirement, start with the self-hostable tools above. If you only need a completion alert, a simple publish API may be enough. If you need a general conversation with contacts, full remote desktop access or arbitrary terminal-input forwarding, that is outside Ntfyx’s documented scope. Android push requires Google Play services; agent approval support has specific host and platform requirements.

- [ntfy: clients and self-hosting](https://docs.ntfy.sh/faq/#can-i-self-host-it)
- [Bark: official app and server](https://github.com/Finb/Bark)
- [Gotify: server and clients](https://gotify.net/)
- [Ntfyx platform and availability details](https://ntfyx.me/download/)

## Is Ntfyx the same product as ntfy (ntfy.sh)?

No. Ntfyx (ntfyx.me) and ntfy (ntfy.sh) are separate products with no affiliation. Ntfyx brings command and script notifications, agent questions and phone replies into one Inbox. ntfy is an HTTP publish/subscribe notification service with hosted and self-hosted options.

## What makes Ntfyx different from a push notification tool?

Ntfyx combines received messages, answers attached to the original question and task conversations. You can also subscribe to selected notification sources directly on the phone. Compare the complete workflow you need: other tools support useful actions, receipts, encryption or MCP too.

## Do I need a computer for notification-source subscriptions?

No. Open Discover in the iPhone or Android app, review a public notification source and confirm its subscription. No computer, CLI, pairing scan or Ntfyx account is needed. Receive future editions in its Topic; pause or unsubscribe from the phone. Each source lists its coverage and schedule. Private agent messages are not used to generate these updates. Free includes 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests, one monitor and one subscription. Notification-source subscriptions and public follows share the subscription allowance. Topic count is not a paid entitlement. Public Topics support ordinary and rich messages; protected Topics also support verified answers and Call reminders.

## Are MCP integration or encrypted notifications unique to Ntfyx?

No. Gotify and Bark document MCP integration. Bark documents encrypted push, and Pushover documents optional end-to-end encryption for iOS/Android. Ntfyx’s proposed fit is the combination of original-question replies, task context, phone authorization and optional source subscriptions.

## Does a button click or sent reply mean that the task finished?

No. Receiving a notification, acknowledging it, authorizing a request and completing an external action are separate events. Ntfyx lets the sender verify an answer tied to the request; your tool still has to execute the action and report the result.

## When is Ntfyx not the right fit?

If supported self-hosting is required, evaluate ntfy, Bark or Gotify. Ntfyx is not a general contact messenger or a way to forward arbitrary terminal input. Its CLI supports macOS, Linux and Windows; native agent approval behavior has separate host and platform requirements.

## Official sources and verification date

Sources below were checked on 28 October 2026. Features can change, and a documented API capability may require client configuration or custom integration. For Ntfyx, the linked product guides describe the supported workflow and its limits; this page makes no claim of faster delivery, unique encryption or independent certification.

- [ntfy: anonymous HTTP publishing and limits](https://docs.ntfy.sh/publish/)
- [ntfy: hosted plans](https://ntfy.sh/#pricing)
- [ntfy: action buttons](https://docs.ntfy.sh/publish/#action-buttons)
- [ntfy: clients and self-hosting](https://docs.ntfy.sh/faq/#can-i-self-host-it)
- [ntfy: privacy and message handling](https://docs.ntfy.sh/privacy/)
- [Bark: official app and server](https://github.com/Finb/Bark)
- [Bark: optional encrypted push](https://github.com/Finb/Bark/blob/master/docs/en-us/encryption.md)
- [Bark: API and MCP integration](https://github.com/Finb/Bark/blob/master/docs/en-us/tutorial.md#mcp)
- [Pushover: message API](https://pushover.net/api)
- [Pushover: individual and team prices](https://pushover.net/pricing)
- [Pushover: acknowledgment receipts and callbacks](https://pushover.net/api/receipts)
- [Pushover: optional end-to-end encryption](https://pushover.net/api#e2ee)
- [Pushover: receiver platforms](https://pushover.net/)
- [Gotify: server and clients](https://gotify.net/)
- [Gotify: built-in MCP endpoint](https://gotify.net/docs/mcp)
- [Gotify: message links and Android intents](https://gotify.net/docs/msgextras)
- [Gotify: transport and authentication configuration](https://gotify.net/docs/config)

## Compare ways to use coding agents from your phone

Compare full-session access, completion notifications, permission decisions and answers, with official sources, encryption scope, account requirements and starting prices.

- [Claude Code and Codex on your phone](https://ntfyx.me/docs/coding-agents-on-your-phone/)

## Choose by the workflow you need

For Ntfyx, compare five separate needs: task completion, a signed answer attached to its question, a send-only HTTP event, an optional call-style reminder, and an hourly status/text/JSON check. Other products may also support replies or actions; evaluate their current documentation against your own requirements.

- [AI agent phone notifications](https://ntfyx.me/docs/agent-notifications/)
- [Reply to an AI agent from your phone](https://ntfyx.me/docs/phone-approval/)
- [HTTP notifications and POST webhooks](https://ntfyx.me/docs/http-push/)
- [Call-style message alerts](https://ntfyx.me/docs/call-alerts/)
- [Hourly HTTP, text and JSON monitoring](https://ntfyx.me/docs/service-monitoring/)

---

# Ntfyx、ntfy、Bark、Pushover 与 Gotify：按消息流程选工具

Source: https://ntfyx.me/zh/docs/notification-tools/

Updated: 2026-10-29

按同一备份通知和人工确认任务比较 Ntfyx、ntfy、Bark、Pushover 与 Gotify，核对平台、价格、保留时间与限制。官方来源核对日期：2026 年 10 月 28 日。

## 先看结论

希望在托管 App 中接收任务消息、带着原问题回答，并可直接在手机订阅通知来源时，可以选择 Ntfyx。通用发布/订阅与通知操作可评估 ntfy；自定义 iPhone 推送可看 Bark；API 提醒与确认回执可看 Pushover；自己运营服务端并用 Web/Android 接收可看 Gotify。

> 本页由 Ntfyx 编写，官方文档核对日期为 2026 年 10 月 28 日。这是功能流程选型，不是横向真机、延迟或安全测评。“所查文档未确认”不代表该功能不可能实现，也不代表所有扩展都没有。

## 同一条备份通知，Ntfyx 与 ntfy 怎样配置

下面两种配置都发送无副作用的“Backup test failed (exit 1)”演练消息，均无需配对电脑。Ntfyx HTTPS 推送使用手机准备的私有发送 URL；ntfy 可以匿名发送到自选 Topic。示例只发送测试消息，不运行备份或重试任务。

```
# Run either command after configuring its variable.
# Ntfyx: use the complete HTTPS Push link copied from your phone.
curl --fail-with-body --silent --show-error --max-time 30 \
  -H "Content-Type: text/plain; charset=utf-8" \
  --data-binary "Backup test failed (exit 1)" "${NTFYX_PUSH_URL:?Set the private sending URL}"

# ntfy: use the same topic you subscribed to in its phone app.
curl --fail-with-body --silent --show-error --max-time 30 \
  --data-binary "Backup test failed (exit 1)" "https://ntfy.sh/${NTFY_TOPIC:?Set your topic}"
```

| 步骤 | Ntfyx HTTPS Push | ntfy |
| --- | --- | --- |
| 准备接收端 | 在手机 App 打开 HTTPS 推送，等待准备完成并复制完整发送链接。 | 在 ntfy 手机 App 订阅 ntfy.sh 上一个足够长且唯一的 Topic，在发送 URL 中使用同一名称。 |
| 配置脚本 | 在私有配置中将复制链接设为 NTFYX_PUSH_URL。链接只有发送权限，拿到它的人可以发送。 | 将选定名称设为 NTFY_TOPIC。未受保护的公开 Topic 允许持有名称的人读写。 |
| 观察结果 | 先在 App 的 MyNotify 查看消息，再单独核对系统提醒。服务先读取 HTTPS 输入，再加密投递。 | 分别核对订阅的 Topic 和手机提醒；匿名访问不适用时，使用访问控制或自托管服务。 |

> 不要把真实备份日志或密钥放进公开消息。HTTP 已受理不代表手机已展示提醒；超时后先核对原发送结果。接入实际任务时，即使通知失败，也要保留备份本身的退出码，备份指南提供了完整包装脚本。

- [Ntfyx HTTPS 配置与重试规则](https://ntfyx.me/zh/docs/http-push/)
- [备份失败示例](https://ntfyx.me/zh/use-cases/backup-alerts/)
- [ntfy：匿名 HTTP 发送与限制](https://docs.ntfy.sh/publish/)

## Ntfyx 也可以使用公开 Topic

已有公开 Topic 标识或链接时，CLI 0.6.0 可免配对、免密钥、免 Ntfyx 账号读写，手机关注这个已有 Topic；关注不会创建新 Topic。服务端及持有链接的人能读取公开内容，不支持应答、审批或 Call。每条受理的公开消息计入 Topic 所有者的日消息额度，关注占用关注者的订阅名额。

```
ntfyx public info --topic TOPIC_ID --json
ntfyx public send "Backup test failed (exit 1)" --topic TOPIC_ID --accept-public-terms --json
ntfyx public read --topic TOPIC_ID --limit 5 --json
```

> 截至 2026-10-29 已确认公开版为 iOS 1.8.3、Android 1.8.2。在商店更新后，按手机上的公开 Topic 或私密连接入口继续；Android 后台推送需要 Google Play 服务。 接受前先阅读公开内容条款。创建或关注后，发送一条测试消息并核对手机实际收到。

- [公开 Topic 接入与首条消息](https://ntfyx.me/zh/docs/public-topics/)
- [公开内容条款](https://ntfyx.me/zh/terms/)
- [当前 App 可用版本](https://ntfyx.me/zh/download/)

## 先选你需要的交互

通知操作、确认回执和对应原问题的回答，解决的是流程中不同环节。MCP 接入和加密都很有用，但单看这两个词，无法判断完整使用体验。

| 工具 | 已记录的交互与上下文 |
| --- | --- |
| Ntfyx | 在原问题下确认、选择选项或引用文字回复；同一次任务的相关消息保留在 Session 会话中。 |
| ntfy | 每条通知最多可带 3 个操作，可打开链接、发送 HTTP 请求、复制文字或发送 Android 广播，支持范围随客户端而异。需要额外问答约定时，应在自己的接入中实现和验证。 |
| Bark | 官方 API 提供自定义推送和分组，教程也包含 MCP 接入。需要原问题回答与任务继续流程时，另行核对或实现回复约定。 |
| Pushover | 紧急优先级通知支持确认回执与回调。回执属于送达与确认流程，具体授权什么操作仍由接入方定义。 |
| Gotify | 内置 /mcp 端点使用只可发送消息的 application token，提供 send_message。消息扩展支持点击链接和 Android intent；发送“需要输入”的提醒，本身不等于已实现该问题的可信回答。 |

- [ntfy：通知操作按钮](https://docs.ntfy.sh/publish/#action-buttons)
- [Bark：API 与 MCP 接入](https://github.com/Finb/Bark/blob/master/docs/en-us/tutorial.md#mcp)
- [Pushover：确认回执与回调](https://pushover.net/api/receipts)
- [Gotify：内置 MCP 端点](https://gotify.net/docs/mcp)
- [Gotify：消息链接与 Android intent](https://gotify.net/docs/msgextras)

## 重试备份前，请人确认

使用同一个问题：“查看备份失败后，是否允许重试一次？”按钮、确认回执和签名答案都有用，接入方都需要明确回答允许执行什么操作。

```
ntfyx ask "Review the backup failure and allow one retry?" --allow-deny --wait 5m --json
```

| 工具 | 用户怎样操作 | 发送方需要核对什么 |
| --- | --- | --- |
| ntfy | 点击通知操作，打开审核页或向自己的接口发 HTTP 请求。 | 自己的接口负责身份验证、绑定本次备份，并拒绝过期或重复操作；核对所选客户端支持的操作类型。 |
| Pushover | 确认一条紧急优先级通知。 | 查询回执或回调，明确确认是“已看见”还是“允许重试”；回执本身不定义业务操作。 |
| Ntfyx protected Topic | 在已授权接收端对原问题选择允许或拒绝。 | 同步 ask 核验签名答案、原请求和截止时间，再单次领取。只有对应请求且核验通过的允许，才授权约定的重试；备份结果需另外报告。 |

> 此命令需要已配对的受保护 Topic，只提问，不执行备份重试。拒绝、超时、取消或未通过核验的答案都不能授权继续。答案的单次领取也不能保证外部备份或交易恰好执行一次。

- [Ntfyx 配对、允许／拒绝与退出处理](https://ntfyx.me/zh/docs/phone-approval/)
- [ntfy：通知操作按钮](https://docs.ntfy.sh/publish/#action-buttons)
- [Pushover：确认回执与回调](https://pushover.net/api/receipts)

## 部署、接收端与隐私选择

先看接收设备，再看谁运营服务端、启用了什么加密模式。TLS、自托管与内容端到端加密回答的是不同问题。其他产品同样提供加密内容，Ntfyx 不把加密当成独有能力。

| 工具 | 部署与接收端 | 需要核对的隐私范围 |
| --- | --- | --- |
| Ntfyx | 托管服务。支持 iPhone、Android 和 Web；受保护 Web 收件箱需手机授权。配套 CLI 支持 macOS、Linux 和 Windows，没有受支持的自托管安装包。 | 受保护 Topic 中 CLI 与 Agent 消息的标题、正文、选项和回复在设备上端到端加密；公开 Topic 的名称和消息对服务端及持有标识或链接的人可见。明确的监控 / Webhook 管理固定授权问题及手机签名答案会披露给服务端核验。HTTPS 推送与 Webhook 请求在加密投递前对服务可见；可选供应商验证 secret 由服务加密存储，并在验签时以明文验证原始 body，是托管 secret，并非服务端不可见；My Monitor 会读取监控地址、规则和响应，公开发布者知道自己发送的内容。中继转发密文，仍处理标识符、时间、大小和推送令牌等运行元数据。不要在监控 URL 或请求示例中放密钥。尚未完成独立安全审计。 |
| ntfy | 可使用托管 ntfy.sh 或自己的服务端，提供 Android、iOS 和 Web 客户端。 | 本轮核对的隐私文档说明了传输加密与消息处理。自托管可以选择服务端运营方；所查文档未确认原生端到端加密模式。 |
| Bark | iPhone App，服务端开源并支持自托管。 | 官方提供可选加密推送。应核对发送端与 iPhone 如何持有加密密钥；加密内容并非 Ntfyx 独有。 |
| Pushover | 托管服务，提供 Android、iOS 与桌面浏览器接收端。 | API 为 iOS/Android 提供 encrypted=1 的可选发送端到设备端加密。应核对模式与客户端要求，不能假设所有通知默认使用。 |
| Gotify | 开源服务端与 Web 界面，提供 Android 客户端。 | 自托管让你管理服务端。仍需核对传输、服务端可访问内容及客户端加密模式，自托管本身不能证明端到端加密。 |

- [ntfy：客户端与自托管](https://docs.ntfy.sh/faq/#can-i-self-host-it)
- [ntfy：隐私与消息处理](https://docs.ntfy.sh/privacy/)
- [Bark：官方 App 与服务端](https://github.com/Finb/Bark)
- [Bark：可选加密推送](https://github.com/Finb/Bark/blob/master/docs/en-us/encryption.md)
- [Pushover：可选端到端加密](https://pushover.net/api#e2ee)
- [Pushover：接收平台](https://pushover.net/)
- [Gotify：服务端与客户端](https://gotify.net/)
- [Gotify：传输与身份验证配置](https://gotify.net/docs/config)
- [Ntfyx 安全模型与恢复边界](https://ntfyx.me/security/)

## 价格、保留时间与限制

比较额度周期和存储由谁运营，而不只看套餐名。下列数据核对于 2026 年 10 月 28 日，托管服务结算页与当地应用商店价格为准。自托管另有自己的服务器和维护成本，设备历史与服务端保留时间也需分开。

| 工具 | 价格与发送额度 | 服务端保留时间与限制 |
| --- | --- | --- |
| Ntfyx | Free 每 UTC 日 100 条；Plus 美元参考价 $1.99/月、每天 1,000 条；Pro $9.90/月、每天 20,000 条。Call 和应答请求包含在总额中，另有监控和订阅名额。 | 普通公开消息和受保护中继密文最多保留 24 小时，并受容量限制。待答问题保留至截止时间，终态请求／答案再保留 24 小时，并非无限历史。 |
| ntfy.sh | ntfy.sh 匿名免费使用每天 250 条。托管付费套餐提高限制；Supporter 按月付费为 $6/月，年付折合 $5/月。 | 默认消息缓存 12 小时、附件 3 小时。免费托管公布的限制含 4,096 字节正文、2 MB 附件，自托管设置与付费档位可不同。 |
| Bark | 官方项目说明 App 免费，自托管服务另有自己的运行成本。 | 核对所选服务端及 iPhone 历史设置；所链概览与教程没有给出统一的托管额度或保留承诺。 |
| Pushover | 个人许可为每个接收平台一次性 $4.99 美元，可试用 30 天。账号下各应用共享每月 10,000 条 API 消息，更高额度和 Teams 另计。 | 服务端在验证送达后删除消息，未验证送达的消息 21 天后删除。API 正文上限为 1,024 个 UTF-8 字符，设备副本另有本地历史。 |
| Gotify | 自行运营的开源软件，需核算服务器、存储和维护成本。 | 存储与访问设置取决于自己的部署，需核对数据库清理与备份策略；这里不假定统一托管保留期或消息额度。 |

> 截至 2026-10-29 已确认公开版为 iOS 1.8.3、Android 1.8.2。在商店更新后，按手机上的公开 Topic 或私密连接入口继续；Android 后台推送需要 Google Play 服务。 消息套餐需要 iOS／Android 1.8.0 或以上。所列为美元参考价；所在地区的可购买状态、本地价格与税费以购买前的商店页面为准，上架不代表各地区真实购买流程均已验收。

- [Ntfyx 套餐](https://ntfyx.me/pricing/)
- [Ntfyx 存储与服务限制](https://ntfyx.me/limits/)
- [ntfy：托管套餐](https://ntfy.sh/#pricing)
- [ntfy：匿名 HTTP 发送与限制](https://docs.ntfy.sh/publish/)
- [ntfy：隐私与消息处理](https://docs.ntfy.sh/privacy/)
- [Bark：官方 App 与服务端](https://github.com/Finb/Bark)
- [Pushover：个人与团队价格](https://pushover.net/pricing)
- [Pushover：消息 API](https://pushover.net/api)
- [Gotify：传输与身份验证配置](https://gotify.net/docs/config)

## Ntfyx 把哪些步骤放在一起

在受保护 Topic 中允许或拒绝一次请求、选择给定选项，或者输入文字。点击原问题的“回复”，进入带引用的输入框；答案留在原问题下，发送方电脑会核验签名。回复已发送不等于外部操作已执行完成。 Topic 汇集已授权来源的消息。同一次任务在同一个 Topic 内使用相同 session ID，进展和回复就会留在一个 Session 会话中。不传 session ID 时，每条新消息独立成会话。分组不会授权其他 Topic，也不会导出 Agent 的完整对话。

1. 工具把进展或问题发到已授权的 Topic。
2. 打开任务会话，带着原问题回答。
3. 发送端收到并核验回答，再继续自己的任务。
4. 后续消息可以在同一会话中报告执行结果。

> 不说明。发送、投递、签名答案、单次领取和外部操作结果是不同状态。需要审批的工作流必须先验签并单次领取，再继续操作。拒绝、过期、取消或未通过核验的请求都不构成授权。Ntfyx 不提供远程终端。

- [任务会话与回复](https://ntfyx.me/zh/docs/sessions/)
- [Agent 接入与平台边界](https://ntfyx.me/zh/docs/agent-plugins/)

## 免费开始与服务范围

不需要。在 iPhone 或 Android App 中打开“发现”，核对公开通知源后确认订阅，无需电脑、CLI、扫码配对或 Ntfyx 账号。后续更新进入对应 Topic，可在手机暂停或退订。每个来源分别说明覆盖范围和更新频率，不使用私有 Agent 消息生成这些内容。 免费版每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。通知源订阅与公开 Topic 关注共享名额，Topic 数量不作为付费权益。公开 Topic 支持普通与富消息，受保护 Topic 还支持已核验的应答与 Call。

> 通知商城是可选的后续公开动态来源，不会替你连接电脑，不运行下载的插件代码，也不会回放所有旧预览。各来源分别说明覆盖范围与频率，消息、设备、存储和速率限制仍然适用。

- [浏览通知商城](https://ntfyx.me/zh/plugins/)
- [服务限制](https://ntfyx.me/limits/)
- [下载手机 App](https://ntfyx.me/zh/download/)

## 什么时候更适合其他方案

必须自己运营通知服务端时，优先评估上面的自托管工具。只需要任务完成提醒时，简单的发布 API 可能就足够。联系人聊天、完整远程桌面或任意终端输入转发，超出 Ntfyx 当前说明的范围。Android 推送依赖 Google Play 服务，Agent 审批也有具体宿主与平台要求。

- [ntfy：客户端与自托管](https://docs.ntfy.sh/faq/#can-i-self-host-it)
- [Bark：官方 App 与服务端](https://github.com/Finb/Bark)
- [Gotify：服务端与客户端](https://gotify.net/)
- [Ntfyx 平台与可用范围](https://ntfyx.me/zh/download/)

## Ntfyx 与 ntfy（ntfy.sh）是同一个产品吗？

不是。Ntfyx（ntfyx.me）与 ntfy（ntfy.sh）是不同产品，没有隶属关系。Ntfyx 将命令和脚本通知、Agent 提问与手机回复放进一个收件箱；ntfy 是支持托管与自托管的 HTTP 发布/订阅通知服务。

## Ntfyx 与普通推送通知工具有什么不同？

Ntfyx 把接收消息、对应原问题的回答与任务会话放在一起，也可以直接在手机选择通知来源。应比较完整流程：其他工具同样提供有用的操作按钮、回执、加密或 MCP 接入。

## 订阅通知来源需要电脑吗？

不需要。在 iPhone 或 Android App 中打开“发现”，核对公开通知源后确认订阅，无需电脑、CLI、扫码配对或 Ntfyx 账号。后续更新进入对应 Topic，可在手机暂停或退订。每个来源分别说明覆盖范围和更新频率，不使用私有 Agent 消息生成这些内容。 免费版每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。通知源订阅与公开 Topic 关注共享名额，Topic 数量不作为付费权益。公开 Topic 支持普通与富消息，受保护 Topic 还支持已核验的应答与 Call。

## MCP 接入或加密通知是 Ntfyx 独有的吗？

不是。Gotify 与 Bark 官方都介绍了 MCP 接入；Bark 提供加密推送，Pushover 为 iOS/Android 提供可选端到端加密。Ntfyx 的适用场景是把原问题回复、任务上下文、手机授权和可选来源订阅组合使用。

## 点击按钮或回复已发送，就代表任务完成了吗？

不代表。收到通知、确认收到、授权请求与外部操作完成是不同事件。Ntfyx 让发送端核验与请求对应的回答；工具仍需实际执行操作并报告结果。

## 哪些需求不适合 Ntfyx？

如果必须使用受支持的自托管服务，可评估 ntfy、Bark 或 Gotify。Ntfyx 不是联系人聊天软件，也不会转发任意终端输入；CLI 支持 macOS、Linux 和 Windows，原生 Agent 审批有独立的宿主与平台要求。

## 官方来源与核对日期

以下官方来源核对于 2026 年 10 月 28 日。功能可能变化，文档中的 API 能力也可能需要客户端配置或自行接入。Ntfyx 的支持流程与边界见所链产品说明；本页不宣称更快送达、独有加密或已获独立认证。

- [ntfy：匿名 HTTP 发送与限制](https://docs.ntfy.sh/publish/)
- [ntfy：托管套餐](https://ntfy.sh/#pricing)
- [ntfy：通知操作按钮](https://docs.ntfy.sh/publish/#action-buttons)
- [ntfy：客户端与自托管](https://docs.ntfy.sh/faq/#can-i-self-host-it)
- [ntfy：隐私与消息处理](https://docs.ntfy.sh/privacy/)
- [Bark：官方 App 与服务端](https://github.com/Finb/Bark)
- [Bark：可选加密推送](https://github.com/Finb/Bark/blob/master/docs/en-us/encryption.md)
- [Bark：API 与 MCP 接入](https://github.com/Finb/Bark/blob/master/docs/en-us/tutorial.md#mcp)
- [Pushover：消息 API](https://pushover.net/api)
- [Pushover：个人与团队价格](https://pushover.net/pricing)
- [Pushover：确认回执与回调](https://pushover.net/api/receipts)
- [Pushover：可选端到端加密](https://pushover.net/api#e2ee)
- [Pushover：接收平台](https://pushover.net/)
- [Gotify：服务端与客户端](https://gotify.net/)
- [Gotify：内置 MCP 端点](https://gotify.net/docs/mcp)
- [Gotify：消息链接与 Android intent](https://gotify.net/docs/msgextras)
- [Gotify：传输与身份验证配置](https://gotify.net/docs/config)

## 按手机使用需求比较方案

查看完整会话、完成提醒、权限审批与问题回答的分别比较，包含官方来源、加密、账号和价格起点。

- [Claude Code、Codex 手机方案比较](https://ntfyx.me/zh/docs/coding-agents-on-your-phone/)

## 按实际工作流选择

选择 Ntfyx 时分别核对五类需求：任务完成通知、绑定原问题的签名回答、仅发送 HTTP 事件、可选来电式提醒，以及每小时状态码/文本/JSON 检查。其他产品也可能支持回复或动作，请结合其当前文档和自己的需求判断。

- [AI Agent 手机通知](https://ntfyx.me/zh/docs/agent-notifications/)
- [在手机回复 AI Agent](https://ntfyx.me/zh/docs/phone-approval/)
- [HTTP 通知与 POST Webhook](https://ntfyx.me/zh/docs/http-push/)
- [来电式消息强提醒](https://ntfyx.me/zh/docs/call-alerts/)
- [每小时 HTTP、文本与 JSON 监控](https://ntfyx.me/zh/docs/service-monitoring/)

---

# Ntfyx 常见问题：HTTPS 推送、Agent 回复与服务监控

Source: https://ntfyx.me/zh/docs/faq/

Updated: 2026-10-28

了解 MyNotify HTTPS 请求、My Monitor 每小时服务检查、Agent 原问题回复、免费通知订阅与各通道加密边界。

## Ntfyx 与 ntfy（ntfy.sh）是同一个产品吗？

不是。Ntfyx（ntfyx.me）与 ntfy（ntfy.sh）是不同产品，没有隶属关系。Ntfyx 将命令和脚本通知、Agent 提问与手机回复放进一个收件箱；ntfy 是支持托管与自托管的 HTTP 发布/订阅通知服务。

## Ntfyx 是什么？

接收 Claude Code、Codex 与脚本的手机通知。已有公开 Topic 免配对收发；受保护 Topic 配对后支持加密 CLI 消息与验证应答。 官方网站为 ntfyx.me。通知可用已有公开 Topic 或私有 HTTPS 链接；验证 Agent 回答则需受保护 Topic 与配套 CLI 配对。

## Agent 怎样把问题发到手机？

先选择受保护 Topic。安装签名 CLI，用手机 App 扫码授权，再配置 Agent。Claude Code 可以通过桥接转发 AskUserQuestion；Codex 和其他支持的 MCP 客户端主动调用 Ntfyx 提问工具。原生权限请求通过单独的 Hook 接入。

## 可以在手机回复 AI Agent 吗？

在受保护 Topic 中允许或拒绝一次请求、选择给定选项，或者输入文字。点击原问题的“回复”，进入带引用的输入框；答案留在原问题下，发送方电脑会核验签名。回复已发送不等于外部操作已执行完成。

## Agent 或 Webhook 可以发来电式强提醒吗？

可以，用于受保护 Topic。Ntfyx iPhone 和 Android 1.6.0 起，在设置主动开启默认关闭的 Call 通知，并授予所需系统权限。CLI 0.4.1 可指定 --alert-mode call，本地 MCP 使用 alert_mode=call，JSON Webhook 使用 ntfyx.alert_mode=call。它用于提醒查看消息，不进行语音通话，也不批准任务执行。符合条件的提醒受 Topic 静音与安静时段控制；Android 全屏展示还取决于通知和渠道权限。iOS 后台登记最长 24 小时，需要每天打开 App 续期；登记不可用时退回普通通知。静音状态变化前已在途的 iOS 系统来电可能短暂出现后立即结束。专注模式、系统设置、网络和投递限制仍适用，不保证送达或响铃。

## Claude Code 和 Codex 的接入一样吗？

两者都提供本地 MCP 提问工具和手机回复指引；macOS / Linux 提供完成通知 Hook。Claude Code 还可桥接 AskUserQuestion；Codex 原生 request_user_input 不会被拦截。原生执行审批已验证 Linux x64 上的 Claude Code 2.1.283 / 2.1.284 与 Codex 0.158.0，Apple 芯片 Mac 已验证 Claude Code 2.1.303 与 Codex 0.163.0 的原生审批，需 CLI 0.1.5+；Intel Mac 原生审批仍未验证，回到终端处理。Codex 仍需交互 TUI 与 /hooks 信任；codex exec 不触发权限 Hook。Claude setup 原生权限 Hook 需显式 --permissions on。其他 MCP 客户端需按宿主配置接入。这不是托管的 ChatGPT 或 Claude App 目录连接器。 Windows 使用 CLI 的直接 setup 或本地 MCP。Claude Code Hook 需要 2.1.139+；旧版或无法确认版本时只配置 MCP。Codex 在 Windows 提供 MCP 提问，不配置自动 Hook。市场插件的 Hook 使用 POSIX shell，Windows 请使用直接 setup。原生工具权限审批仍按单独的平台与宿主允许范围处理。

## 相关消息怎样留在同一个会话？

Topic 汇集已授权来源的消息。同一次任务在同一个 Topic 内使用相同 session ID，进展和回复就会留在一个 Session 会话中。不传 session ID 时，每条新消息独立成会话。分组不会授权其他 Topic，也不会导出 Agent 的完整对话。

## 需要哪些设备？

验证 Agent 回答：一部 iPhone 或 Android 手机，加一台装有配套 CLI 的 Windows、macOS 或 Linux 电脑。公开 Topic 收发只需 HTTP 客户端或浏览器。HTTPS 链接推送、每小时监控和通知订阅只需要手机。手机还可授权可选的 Web 收件箱。Android 推送需要 Google Play 服务。

## 可以不配对就发送吗？

可以发送到已有公开 Topic：知道标识或链接的人无需密钥即可读写。消息对服务及持有链接的人可见，不能请求应答或 Call。也可只在手机设置私有 HTTPS 仅发送链接；这条路径由服务读取输入后再加密投递。

## 免费可以使用哪些功能？

免费版每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。通知源订阅与公开 Topic 关注共享名额，Topic 数量不作为付费权益。公开 Topic 支持普通与富消息，受保护 Topic 还支持已核验的应答与 Call。

## 服务端和公开发布者能看到哪些信息？

受保护 Topic 中 CLI 与 Agent 消息的标题、正文、选项和回复在设备上端到端加密；公开 Topic 的名称和消息对服务端及持有标识或链接的人可见。明确的监控 / Webhook 管理固定授权问题及手机签名答案会披露给服务端核验。HTTPS 推送与 Webhook 请求在加密投递前对服务可见；可选供应商验证 secret 由服务加密存储，并在验签时以明文验证原始 body，是托管 secret，并非服务端不可见；My Monitor 会读取监控地址、规则和响应，公开发布者知道自己发送的内容。中继转发密文，仍处理标识符、时间、大小和推送令牌等运行元数据。不要在监控 URL 或请求示例中放密钥。尚未完成独立安全审计。

## 它和普通推送或聊天机器人有什么区别？

Ntfyx 将任务消息、绑定原问题的回答、Topic/Session 记录与可选的通知商城放在一起，工作流可以等待已核验的确认、选择或文字答案。推送服务和机器人的回复、加密及集成能力各有不同，应结合其当前官方文档和自己的接入需求选择。

## 可以用 HTTP 请求或 Webhook 发通知到手机吗？

可以。在手机打开 HTTPS 推送后准备 MyNotify。App 自动生成简短的 sk_ 仅发送 key 和专属 HTTPS 发送链接。点击“发送”收到 hello，或复制链接，用 GET 访问时，最后一段是编码后的消息；也可保留整条复制地址不变，POST 动态文本、JSON 或 form 内容，无需更新 App 或安装 CLI。CLI 0.3.0 与本地 MCP 另经手机批准 Webhook 管理后可创建独立 wh_ 发送 key；监控授权不能复用，撤销管理也不会自动停用已有发送 URL。HTTPS 服务会读取这份明文请求，再为已授权接收端加密投递。完整链接包含发送 key，请保管好；可在 App 重新生成 key，使旧链接失效。它不能读取消息、管理收件箱或接收 Agent 回复。

## My Monitor 如何检查服务？

在“发现 → 我的监控”添加公开 HTTP 或 HTTPS 地址。每小时检查一次，要求最终 HTTP 状态为 2xx，也可要求响应包含指定文本，或简单 JSON 对象字段等于指定的基础类型值。每个服务在系统 My Monitor Topic 中对应一个 Session，所有检查结果进入同一会话，不占自定义 Topic 额度。App 1.5.3 可先预览文本或 JSON 再填写预期，默认仅失败时推送；正常结果静默留在会话，关闭此选项则每次检查都提醒。已配对的 CLI 与本地 MCP 可在手机明确批准后管理同一组监控，授权覆盖全部 My Monitor 项、最长 24 小时且可撤销。监控服务会读取地址、规则和响应，逐次检测记录保留七天；有检查活动的每周计划于下周一 00:00 UTC 发送带表情的英文非静默周报，统计次数、已完成检查的成功率和响应时间，仍遵守静音与投递设置。这是每小时监控，不是实时事故响应或 SLA。

## 通知订阅需要电脑吗？

不需要。在 iPhone 或 Android App 中打开“发现”，核对公开通知源后确认订阅，无需电脑、CLI、扫码配对或 Ntfyx 账号。后续更新进入对应 Topic，可在手机暂停或退订。每个来源分别说明覆盖范围和更新频率，不使用私有 Agent 消息生成这些内容。

## 可以在 Chrome 接收和回复吗？

Chrome 扩展 0.2.4 已在 Chrome 应用商店公开。当前受保护消息协议要求 Chrome 0.4.0，截至 2026 年 10 月 28 日该版已提交、仍待审；公开 0.2.4 上架不代表兼容新版协议。等待兼容扩展期间可使用手机授权的 Web 收件箱。 兼容版本可提供桌面通知与原消息回复。每个 Topic 需手机分别授权，后台检查需要 Chrome 保持运行。现有手机授权的 Web 收件箱可继续使用。

## 在电脑上怎样下载手机 App？

点击 App Store 或 Google Play 显示二维码，用手机相机扫码下载；弹窗也提供直接商店链接。在手机点击商店按钮会直接打开商店。下载二维码不会授权设备。

## 接下来从哪里开始？

打开 App，在 MyNotify 发送 HTTPS 测试；需要留意服务时，从“发现 → 我的监控”添加地址。只关注公开动态，可以选择一个通知源。Agent 提问与回复再按接入指南授权电脑。

- [HTTPS 请求入门](https://ntfyx.me/zh/docs/http-push/)
- [每小时服务监控](https://ntfyx.me/zh/docs/service-monitoring/)
- [通知商城与免费订阅](https://ntfyx.me/zh/plugins/)
- [Agent 接入与实际兼容范围](https://ntfyx.me/zh/docs/agent-plugins/)
- [下载手机 App](https://ntfyx.me/zh/download/)

---

# Ntfyx on Android: current status

Source: https://ntfyx.me/docs/android/

Updated: 2026-10-28

Native Android development, privacy, device requirements and release status.

## Development status

Ntfyx 1.8.2 is publicly available for Android 10 or later. Confirm requests, choose options or send a text reply. Google Play services are needed for push; foreground Inbox use remains available without notification permission.

- [Current downloads](https://ntfyx.me/download/)

## The same primary phone model

Android is available as an equal primary phone for one encrypted Inbox, with phone-authorized browsers and Sources. It works without an iPhone or Ntfyx login. It does not introduce two primary phones, Google sign-in or cloud-readable messages. Moving between phone platforms requires valid recovery material and replaces the previous primary phone.

## Device and notification support

The development baseline is Android 10 or later. The first release targets overseas devices with Google Play services for FCM push. Notification permission and channels use Android settings; denying notification permission must still permit pairing and foreground use. Devices without Google Play services cannot be promised push delivery. Force-stopping the app prevents normal background delivery until it is opened again.

## Purchases and key recovery

Free includes 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests, one monitor and one subscription. Notification-source subscriptions and public follows share the subscription allowance. Topic count is not a paid entitlement. Public Topics support ordinary and rich messages; protected Topics also support verified answers and Call reminders. Restoring a verified store entitlement does not restore encryption keys. Keep your encrypted recovery file and recovery code separately. Purchase restoration queries the current store; a new purchase does not cancel a subscription in another store. No purchase is needed to start receiving messages or use the included notification subscription.

## Help and deletion

You can ask for deletion without installing or reinstalling an app. Keep pairing links, recovery codes, private keys and purchase tokens out of support messages. The public request page explains identity verification and retained records.

- [Request deletion](https://ntfyx.me/delete-data/)
- [Support](https://ntfyx.me/support/)
- [Privacy notice](https://ntfyx.me/privacy/)

---

# AI agent waiting for input? Reply from your phone

Source: https://ntfyx.me/docs/agent-waiting-for-input/

Updated: 2026-10-29

When Claude Code, Codex or a script needs you, distinguish completion alerts, permission approvals and missing information. Send a signed choice or text reply with Ntfyx.

## Why an agent can stop halfway

A coding agent can finish tests and still need a person to choose a target, explain a requirement or approve an operation. If you have left the terminal, that wait can be easy to miss. Ntfyx sends an encrypted question to your phone or an authorized Web Inbox. Your sending client verifies the signed answer before the workflow continues. Completion, permission and an open question are different events; choose the integration that matches the wait.

| What happened | What to use | What happens next |
| --- | --- | --- |
| The task or command finished | send or a completion hook | You read the result; no answer is required. |
| A supported tool needs permission | Native PermissionRequest adapter | Allow or Deny goes back to that invocation. |
| The workflow needs a choice or missing information | ask or local stdio MCP | The agent or script receives the verified choice or text. |
| An arbitrary terminal prompt is blocked | An explicit integration or the terminal | Ntfyx does not automatically read or answer every prompt. |

## Before you connect

Use current Ntfyx CLI 0.6.1 on Windows, macOS or Linux and a primary phone app. iPhone 1.8.3 is available on the App Store; Android 1.8.2 is available on Google Play. Android push requires Google Play services. The phone authorizes each computer or server as its own Source; an optional Web Inbox receives new messages after phone authorization.

```
curl -fsSL https://ntfyx.me/install.sh | bash
ntfyx connect
ntfyx topics
```

> The shell examples below target macOS / Linux. Windows has the full CLI and local MCP; use PowerShell commands and your own scheduler. Native host permissions retain their separate compatibility policy.

- [Downloads and current availability](https://ntfyx.me/download/)
- [Pair your first computer](https://ntfyx.me/docs/quickstart/)

## Receive a permission request

Run setup in dry-run mode first, review the change, then install the supported adapter. Claude Code Bash, Edit and Write and Codex Bash and apply_patch have real-host verification on Linux x64. Codex requires you to trust the hooks with /hooks and use its interactive TUI; codex exec does not ask for approvals. Apple silicon Mac native approvals are verified with Claude Code 2.1.303 and Codex 0.163.0 and require CLI 0.1.5+. Intel Mac native approvals remain unverified and return to the terminal. Claude interactive terminal-choice precedence remains unverified. A timeout, unknown payload or invalid answer falls back to the terminal without Allow.

```
ntfyx setup claude-code --permissions on --dry-run
ntfyx setup claude-code --permissions on

# For Codex: review and trust the hooks with /hooks.
ntfyx setup codex --dry-run
ntfyx setup codex
```

- [Agent setup and verified compatibility](https://ntfyx.me/docs/agents/)
- [Claude Code permissions and completion alerts](https://ntfyx.me/docs/claude-code-notifications/)
- [Codex interactive phone approvals](https://ntfyx.me/docs/codex-phone-approval/)
- [Reply results and one-time claims](https://ntfyx.me/docs/cli/)

## Ask for the next environment

Use an explicit choice when the workflow can enumerate valid answers. Work is your local CLI alias; replace it with an alias from ntfyx topics. This request asks what to inspect. It does not deploy to the selected environment.

```
ntfyx ask "Which environment should I check?" \
  --choice staging=Staging --choice production=Production \
  --topic Work --wait 60s --expires 90s --json
```

## Ask for missing information

For an instruction such as “check the checkout flow”, use a text request. For an agent, configure the local MCP server and tell it to use ntfyx_ask when it needs your answer. The agent must actively call the MCP tool, or use the installed Claude Code AskUserQuestion bridge. Codex native request_user_input and arbitrary terminal prompts are not intercepted. Treat text as input to the workflow. Never evaluate a phone reply as shell code.

```
ntfyx ask "What should I check next?" \
  --text --topic Work --wait 60s --expires 90s --json
```

- [Local MCP tools and setup](https://ntfyx.me/docs/agents/)

## Try the complete input loop

Download and inspect this harmless example. It waits for a verified choice or text answer and prints a completion line; it runs no deployment, purchase or other external action. An unanswered request exits without that completion line. The CLI performs answer verification and the one-time claim.

```
curl -fsSLo input-demo.sh https://ntfyx.me/examples/scripts/input-demo.sh
cat input-demo.sh
bash input-demo.sh Work choice
bash input-demo.sh Work text
```

- [Read input-demo.sh](https://ntfyx.me/examples/scripts/input-demo.sh)

## If you do not answer in time

The wait duration must not exceed the request lifetime. The CLI cancels a timed-out wait unless you explicitly keep it pending. Deny, expiry, verification failure and an uncertain claim must not authorize the next action. A reply arriving after an invocation has ended cannot bring that invocation back. A one-time claim coordinates consumption of an answer; it does not guarantee exactly-once effects in another service.

| Outcome | Expected workflow behavior |
| --- | --- |
| Verified Allow or valid choice/text with a successful claim | Continue only the corresponding supported workflow. |
| Deny or expiry | Stop or return control to the terminal. |
| Network or verification failure | Report the uncertainty; do not invent an answer. |
| Unknown or previously consumed claim | Do not blindly repeat an external action. |

## When you need the whole conversation

Ntfyx carries notifications and individual questions. If you need to inspect the entire Claude conversation and continue the session from another device, compare Claude Remote Control. If a tool has no supported permission integration, a completion notification remains useful, but it does not provide automatic input forwarding.

- [Claude Remote Control documentation](https://code.claude.com/docs/en/remote-control)
- [Compare notification and remote-control tools](https://ntfyx.me/docs/notification-tools/)
- [Organize several projects](https://ntfyx.me/docs/multiple-agent-notifications/)

## Privacy, phones and availability

Titles, questions, options and answers are encrypted on your devices. The relay still sees routing metadata, timing and sizes. Endpoint compromise can expose plaintext. The two phone platforms share the interaction protocol, while store purchases and push providers differ. Restoring a purchase never restores your encryption keys.

- [Security model and remaining limits](https://ntfyx.me/security/)
- [Android platform guide](https://ntfyx.me/docs/android/)
- [Recover keys and purchases separately](https://ntfyx.me/docs/recovery/)

---

# AI Agent 等待确认或输入？在手机上回复

Source: https://ntfyx.me/zh/docs/agent-waiting-for-input/

Updated: 2026-10-29

Claude Code、Codex 或脚本跑到一半等你回答？区分完成通知、权限审批与补充信息，用 Ntfyx 从手机回复允许、选项或文字。

## 任务没有结束，但 Agent 已经在等你

Agent 可能跑完测试后，需要你选择环境、解释需求，或确认下一步操作。离开终端时，这个等待很容易被错过。Ntfyx 把加密问题送到手机或已授权的 Web 收件箱；发送端验证回答签名后，按相应工作流继续。完成通知、工具权限和普通提问需要不同的接入方式。

| 当前状态 | 接入方式 | 下一步 |
| --- | --- | --- |
| 任务或命令已结束 | send 或完成 Hook | 收到结果，不需要回答。 |
| 支持的工具请求操作权限 | 原生 PermissionRequest 适配 | 把允许或拒绝回传给这次调用。 |
| 需要你选择或补充信息 | ask 或本地 stdio MCP | 工作流收到已验证的选项或文字。 |
| 任意终端提示正在等待 | 显式接入，或回到终端 | 不会自动读取和接管所有输入提示。 |

## 连接前的准备

电脑或服务器安装当前 Ntfyx CLI 0.6.1。iPhone 1.8.3 已在 App Store 上架；Android 1.8.2 已在 Google Play 上架。Android 推送需要 Google Play 服务。手机独立授权每台电脑或服务器；Web 收件箱是可选接收端，只能接收授权后发给它的新消息。

```
curl -fsSL https://ntfyx.me/install.sh | bash
ntfyx connect
ntfyx topics
```

> 下方 shell 示例用于 macOS / Linux。Windows 提供完整 CLI 与本地 MCP，请使用 PowerShell 安装命令及自己的调度器。宿主原生权限仍按独立兼容范围处理。

- [下载与实际可用状态](https://ntfyx.me/download/)
- [第一次连接电脑](https://ntfyx.me/docs/quickstart/)

## 原生权限审批如何接入

先运行 dry-run，查看将修改的配置，再安装适配器。Linux x64 上已有 Claude Code 的 Bash、Edit、Write，以及 Codex 的 Bash、apply_patch 真实宿主验证。Codex 需要本人在 /hooks 信任配置，并使用交互式 TUI；codex exec 不会发起审批。Apple 芯片 Mac 已验证 Claude Code 2.1.303 与 Codex 0.163.0 的原生审批，需 CLI 0.1.5+；Intel Mac 原生审批仍未验证，回到终端处理。Claude 交互终端选项的优先级仍未验证。超时、未知请求或无效回答会回到终端，不自动允许。

```
ntfyx setup claude-code --permissions on --dry-run
ntfyx setup claude-code --permissions on

ntfyx setup codex --dry-run
ntfyx setup codex
```

- [支持的宿主版本与平台（英文）](https://ntfyx.me/docs/agents/)
- [Claude Code 手机通知与审批](https://ntfyx.me/zh/docs/claude-code-notifications/)
- [Codex 手机审批完整步骤](https://ntfyx.me/zh/docs/codex-phone-approval/)

## 让 Agent 请你选择环境

可枚举的答案适合用选项请求。把 Work 替换成 ntfyx topics 显示的本地别名。这条命令只询问要检查哪个环境，不会向所选环境发布任何内容。

```
ntfyx ask "接下来检查哪个环境？" \
  --choice staging=预发布 --choice production=生产 \
  --topic Work --wait 60s --expires 90s --json
```

## 让 Agent 请你补充一句指示

需要“检查一下结账流程”这样的说明时，使用文字请求。给 Agent 配置本地 MCP，并要求它在需要你回答时主动调用 ntfyx_ask。Agent 需要主动调用 MCP 工具，或使用已安装的 Claude Code AskUserQuestion 桥接；Codex 原生 request_user_input 和任意终端提示不会被拦截。文字回答是工作流输入，不能直接作为 shell 命令执行。

```
ntfyx ask "接下来检查什么？" \
  --text --topic Work --wait 60s --expires 90s --json
```

- [本地 MCP 工具与安装](https://ntfyx.me/docs/agents/)

## 跑通一次无副作用的演示

下载并阅读示例脚本后再执行。脚本只在收到已验证的选项或文字回答后打印完成提示，不执行发布、购买等外部操作；未回答时不会继续。回答签名校验和单次领取由 CLI 处理。

```
curl -fsSLo input-demo.sh https://ntfyx.me/examples/scripts/input-demo.sh
cat input-demo.sh
bash input-demo.sh Work choice
bash input-demo.sh Work text
```

- [查看 input-demo.sh](https://ntfyx.me/examples/scripts/input-demo.sh)

## 超时、拒绝和重复回答会怎样

等待时长不能超过请求有效期。除非明确选择保留 pending，CLI 等待超时后会取消请求。拒绝、过期、校验失败或不确定的领取结果，都不能授权下一步操作。已经结束的调用不会被迟到的允许回复复活。单次领取控制回答消费，不能保证其他服务的外部操作恰好执行一次。

| 结果 | 应采取的行为 |
| --- | --- |
| 回答有效，且成功领取消费权 | 只继续对应的工作流。 |
| 拒绝或过期 | 停止，或回到终端处理。 |
| 网络或签名校验失败 | 报告失败或未知状态，不猜回答。 |
| 已经消费，或领取结果未知 | 不要盲目重复外部操作。 |

## 与远程控制整个会话的区别

Ntfyx 传递通知和单次问题。如果需要查看完整 Claude 对话并在另一台设备继续会话，可以比较 Claude 官方 Remote Control。没有支持的权限适配时，仍能做完成通知，但不代表可以自动转发任意终端输入。

- [Claude 官方 Remote Control](https://code.claude.com/docs/en/remote-control)
- [通知工具选型](https://ntfyx.me/docs/notification-tools/)
- [同时管理多个项目](https://ntfyx.me/zh/docs/multiple-agent-notifications/)

## 手机、隐私与恢复

标题、问题、选项和回答在设备上加密，中继仍可见路由元数据、时间和大小。设备被入侵仍可能暴露明文。iPhone 和 Android 使用同一交互协议，商店购买与推送服务不同。恢复购买不会恢复加密密钥。

- [安全模型与边界](https://ntfyx.me/security/)
- [Android 平台说明](https://ntfyx.me/docs/android/)
- [密钥与购买恢复](https://ntfyx.me/docs/recovery/)

---

# Notifications for multiple coding agents and projects

Source: https://ntfyx.me/docs/multiple-agent-notifications/

Updated: 2026-10-28

Route Claude Code, Codex, CLI and server alerts to one phone. Use Sources for independent access and Topics to organize workflows without paying per agent.

## Which project is waiting for you?

A build in one repository can finish while another agent waits for permission and a backup job reports a failure. Give each source a recognizable name and use a concise title and project context. A useful alert tells you what needs your attention, rather than repeating an entire terminal transcript. Ntfyx receives ordinary messages and individual questions in the same Inbox.

## Before you connect

Use current Ntfyx CLI 0.6.1 on Windows, macOS or Linux and a primary phone app. iPhone 1.8.3 is available on the App Store; Android 1.8.2 is available on Google Play. Android push requires Google Play services. The phone authorizes each computer or server as its own Source; an optional Web Inbox receives new messages after phone authorization.

```
curl -fsSL https://ntfyx.me/install.sh | bash
ntfyx connect
ntfyx topics
```

> The shell examples below target macOS / Linux. Windows has the full CLI and local MCP; use PowerShell commands and your own scheduler. Native host permissions retain their separate compatibility policy.

- [Downloads and current availability](https://ntfyx.me/download/)
- [Pair your first computer](https://ntfyx.me/docs/quickstart/)

## Start with one Topic

Free includes 100 messages per day, one monitor and one subscription. Topic count is not a paid entitlement. Protected Topics accept separately authorized Sources; public Topics allow anyone with the ID to read and send ordinary or rich messages. Plus and Pro increase daily messages, monitors and subscriptions. Check the installed store for available products and local prices. Message and traffic limits still apply.

```
ntfyx topics
ntfyx send "Website build passed" --title "Website" --topic Work
ntfyx send "Backup failed: inspect the server log" --title "Backups" --topic Work
```

- [Source, receiver and message limits](https://ntfyx.me/limits/)
- [Free and Plus](https://ntfyx.me/pricing/)

## Add independently revocable computers

Run connect on each trusted computer or server and authorize it from the phone. A source on a server can be revoked without giving that server the management root. Do not clone your desktop credentials onto every host. Agent and project labels identify messages; if two agents must be revoked separately, pair separate Source identities.

```
ntfyx connect
ntfyx sources
```

- [Phone authority and revocation](https://ntfyx.me/security/)

## Separate workflows when it helps

Keep different tasks in separate Sessions inside your custom Topic. Free includes one shared subscription slot for notification sources or public Topic follows. All plans share a 1,000-Topic technical limit; Topic count is not a paid entitlement. If you already have multiple authorized Topics, named CLI aliases select which connection send and ask use; adding an alias does not create a Topic or grant additional access. Choose an existing alias from topics before running these examples.

```
ntfyx send "Ready to review" --topic Work
ntfyx ask "Which environment should I inspect?" \
  --choice staging=Staging --choice production=Production --topic Work --json
```

## Reduce noise without losing the request

Use send for status updates and ask only when a person needs to decide or provide information. Optional quiet hours pause push alerts while synchronization and replies remain available. A short request can expire during quiet hours, so choose a lifetime that matches the workflow. Multiple devices can attempt to answer; the service arbitrates one accepted answer, and the sender must verify it before proceeding.

- [Agent questions, timeouts and choices](https://ntfyx.me/docs/agent-waiting-for-input/)
- [Authorize a browser Inbox](https://ntfyx.me/docs/web/)

## Know the current scope

Ntfyx is a personal Inbox with one active primary phone and up to two authorized browsers, not a team on-call system. There is no current shared team roster, escalation schedule or multi-person approval policy. Native approval adapters are limited to documented tools, host versions and platforms. Use the explicit ask/MCP path for questions in other workflows.

- [Verified agent compatibility](https://ntfyx.me/docs/agents/)
- [SSH and remote server jobs](https://ntfyx.me/docs/ssh-job-notifications/)

---

# 多个 Agent、项目与服务器，如何统一接收通知

Source: https://ntfyx.me/zh/docs/multiple-agent-notifications/

Updated: 2026-10-28

把 Claude Code、Codex、CLI 和服务器提醒送到一部手机。用 Source 独立授权，用 Topic 组织工作流，不按 Agent 数量收费。

## 一眼看清哪个项目在等你

一个仓库构建结束，另一个 Agent 等待确认，服务器备份却报错了。给来源取清楚的名称，在标题和简短正文里说明项目与需要关注的事情。提醒应提供足够的上下文，不必复制整段终端记录。Ntfyx 在同一个收件箱处理普通通知与单次问题。

## 连接前的准备

电脑或服务器安装当前 Ntfyx CLI 0.6.1。iPhone 1.8.3 已在 App Store 上架；Android 1.8.2 已在 Google Play 上架。Android 推送需要 Google Play 服务。手机独立授权每台电脑或服务器；Web 收件箱是可选接收端，只能接收授权后发给它的新消息。

```
curl -fsSL https://ntfyx.me/install.sh | bash
ntfyx connect
ntfyx topics
```

> 下方 shell 示例用于 macOS / Linux。Windows 提供完整 CLI 与本地 MCP，请使用 PowerShell 安装命令及自己的调度器。宿主原生权限仍按独立兼容范围处理。

- [下载与实际可用状态](https://ntfyx.me/download/)
- [第一次连接电脑](https://ntfyx.me/docs/quickstart/)

## 从一个免费 Topic 开始

免费版每天 100 条消息、1 个监控和 1 个订阅，Topic 数量不作为付费权益。受保护 Topic 可连接已授权 Source；公开 Topic 持有标识即可读写普通或富消息。Plus 与 Pro 提升消息、监控和订阅额度，所在商店显示当前可用商品及价格；消息和流量限制仍然适用。

```
ntfyx topics
ntfyx send "官网构建通过" --title "官网" --topic Work
ntfyx send "备份失败：请查看服务器日志" --title "备份" --topic Work
```

- [来源、设备与消息限制](https://ntfyx.me/limits/)
- [免费版与 Plus](https://ntfyx.me/pricing/)

## 每台机器独立连接和撤销

在可信电脑或服务器分别运行 connect，由手机授权。服务器只获得它自己的发送身份，不获得手机管理根。不要把桌面凭据复制到所有机器。Agent 名与项目标签用于展示；需要单独撤销的 Agent，应建立独立 Source 身份。

```
ntfyx connect
ntfyx sources
```

- [手机权限与撤销边界](https://ntfyx.me/security/)

## 需要时再分工作流

不同任务可以使用同一个自定义 Topic 下的独立 Session。免费版包含 1 个由通知源订阅和公开 Topic 关注共用的订阅名额。所有套餐共用 1,000 个 Topic 的技术上限，Topic 数量不作为付费权益。如果收件箱中已经有多个已授权 Topic，可以用 CLI 本地别名选择连接；添加别名不会自动创建 Topic 或授予额外访问权限。下面的 Work 应替换成 topics 中实际存在的连接别名。

```
ntfyx send "可以检查结果了" --topic Work
ntfyx ask "检查哪个环境？" \
  --choice staging=预发布 --choice production=生产 --topic Work --json
```

## 减少噪声，保留真正的问题

普通状态用 send，确实需要你决策或补充信息时才用 ask。每日静音只暂停推送提醒，消息同步和回复仍可用；有效期很短的问题可能在静音时过期，应按工作流设置时长。多个设备同时回答时，中继仲裁一个已接受答案，发送端验证后才能继续。

- [提问、选项和超时行为](https://ntfyx.me/zh/docs/agent-waiting-for-input/)
- [授权 Web 收件箱](https://ntfyx.me/docs/web/)

## 目前是个人收件箱

首版支持一个活跃主手机与最多两个已授权浏览器，没有团队值班表、升级通知、多人的审批策略。原生权限适配只覆盖文档列出的工具、宿主版本和平台。其他工作流可以显式调用 ask 或本地 MCP 提问。

- [Agent 兼容范围](https://ntfyx.me/docs/agents/)
- [SSH 与远程服务器任务](https://ntfyx.me/zh/docs/ssh-job-notifications/)

---

# Phone notifications for SSH and remote server jobs

Source: https://ntfyx.me/docs/ssh-job-notifications/

Updated: 2026-10-29

Get a phone alert after an SSH build, backup or long-running Linux job. Pair a server independently, preserve exit codes and handle sessions that disconnect.

## Choose where the notification runs

You can notify from your laptop after an SSH command returns, or from the server when its own job exits. These choices have different failure boundaries. The laptop approach needs only its existing Ntfyx connection, but a broken SSH connection may give you a transport error rather than a known job result. A paired server can notify independently of the laptop if the job itself remains running.

| Run the wrapper on | Useful for | Important boundary |
| --- | --- | --- |
| Your laptop | A foreground SSH command | Disconnect can hide the remote result. |
| The paired remote host | An existing persistent or scheduled job | The host and outbound network must remain available. |
| An unpaired CI runner | An existing public Topic or private HTTPS webhook | Public content is readable; HTTPS input is service-readable; store keys privately. |

## Before you connect

Use current Ntfyx CLI 0.6.1 on Windows, macOS or Linux and a primary phone app. iPhone 1.8.3 is available on the App Store; Android 1.8.2 is available on Google Play. Android push requires Google Play services. The phone authorizes each computer or server as its own Source; an optional Web Inbox receives new messages after phone authorization.

```
curl -fsSL https://ntfyx.me/install.sh | bash
ntfyx connect
ntfyx topics
```

> The shell examples below target macOS / Linux. Windows has the full CLI and local MCP; use PowerShell commands and your own scheduler. Native host permissions retain their separate compatibility policy.

- [Downloads and current availability](https://ntfyx.me/download/)
- [Pair your first computer](https://ntfyx.me/docs/quickstart/)

## Notify when a foreground SSH command returns

Save the complete script below as notify-ssh.sh. From the paired computer run bash notify-ssh.sh Work YOUR_HOST 'cd /path/to/project && npm run build'. SSH returns 255 on error, which cannot establish whether the remote job failed or stopped; a remote program may also return 255. The wrapper preserves that status and reports the outcome as unknown.

```
#!/usr/bin/env bash
# Save as notify-ssh.sh. Usage: bash notify-ssh.sh TOPIC HOST 'COMMAND'
set -u
if [ "$#" -lt 2 ]; then
  printf 'Usage: bash notify-ssh.sh TOPIC HOST [COMMAND]\n' >&2
  exit 2
fi
ntfyx_topic="$1"
shift
ssh "$@"
ntfyx_ssh_status=$?
case "$ntfyx_ssh_status" in
  0) ntfyx_title='SSH command finished'
     ntfyx_body='SSH returned status 0. Check the remote result and log.' ;;
  255) ntfyx_title='SSH result unknown'
       ntfyx_body='SSH returned 255. Check the connection and remote job before rerunning it.' ;;
  *) ntfyx_title='SSH command failed'
     ntfyx_body="SSH returned status $ntfyx_ssh_status. Check the remote log." ;;
esac
if ! ntfyx send "$ntfyx_body" --title "$ntfyx_title" --topic "$ntfyx_topic" >/dev/null; then
  printf 'Notification not confirmed; SSH exit status is preserved.\n' >&2
fi
exit "$ntfyx_ssh_status"
```

- [OpenSSH exit status](https://man.openbsd.org/ssh#EXIT_STATUS)
- [Local script and backup wrappers](https://ntfyx.me/docs/notifications/)

## Pair the server as its own Source

Install the supported CLI on the remote Linux or macOS host, run connect there, then scan its temporary QR with the phone. Choose an existing protected Topic or create one within the shared technical limit. Keep the QR private and pair as the same user that runs the job. Ntfyx does not connect inbound to your server or start a new SSH tunnel.

```
# Run on the remote host, as the job owner.
curl -fsSL https://ntfyx.me/install.sh | bash
ntfyx connect
ntfyx send "Server connection ready" --topic Work
```

## Let an existing job notify independently

Put notify-after.sh on the paired server and call it from your existing tmux session, scheduler or service. This wrapper reports a command result; it does not keep the process alive, restart a failed job, or detect a scheduler that never ran. Cron needs explicit PATH and absolute paths. Keep logs on the server, and configure your job supervisor separately if you need persistence.

```
# Run in your existing persistent session on the paired server.
bash /path/to/notify-after.sh Work bash -c 'printf "Remote demo finished\n"'
```

- [Linux cron setup](https://ntfyx.me/docs/notifications/#schedule-with-cron-on-linux)
- [Delivery troubleshooting](https://ntfyx.me/docs/troubleshooting/)

## Request a decision without opening remote shell access

A server script can ask for Allow/Deny, a named choice or short text. Your answer goes back to that request, not into an unrestricted interactive shell. Review context, stop on expiry or verification failure, and never execute arbitrary reply text. There is no built-in team escalation or infrastructure incident SLA.

```
ntfyx ask "Which environment should I inspect?" \
  --choice staging=Staging --choice production=Production \
  --topic Work --wait 60s --expires 90s --json
```

- [Phone questions and input](https://ntfyx.me/docs/agent-waiting-for-input/)
- [Sources and revocation](https://ntfyx.me/security/)

## Start with a use case

From agent questions to weekly subscriptions and website alerts, start with a use case. See what reaches your phone, then follow the steps to connect.

- [Explore all use cases](https://ntfyx.me/use-cases/)

## After a disconnect, inspect the remote job before rerunning

Use the original task log or existing process supervisor to determine whether the job is running, finished or failed before deciding what to do. A broken local SSH connection does not establish remote completion. For laptop-independent alerts, run notify-after.sh on the server as the task owner through its existing persistent session or scheduler. It still cannot detect host power loss or a job that never started. Exercise normal and failed exits, then separately test your own disconnect scenario.

- [GitHub Actions failure notifications](https://ntfyx.me/docs/github-actions-notifications/)
- [Troubleshoot by observed state](https://ntfyx.me/docs/troubleshooting/)

---

# SSH、远程构建和服务器任务结束后，通知手机

Source: https://ntfyx.me/zh/docs/ssh-job-notifications/

Updated: 2026-10-29

为 SSH 构建、备份和长时间 Linux 任务添加手机提醒。区分本机与服务器发送，保留退出码，明确 SSH 断连后的状态。

## 提醒应该从哪台机器发出

可以在笔记本上等待 SSH 命令返回后通知，也可以在服务器任务结束时从服务器通知。前者使用电脑现有连接，但 SSH 断开可能只得到通信错误，不能据此确认远端任务结果。独立配对的服务器可以在电脑断开后继续发送提醒，前提是任务仍在运行。

| 包装脚本运行位置 | 适合的任务 | 需要注意 |
| --- | --- | --- |
| 笔记本 | 前台 SSH 命令 | 断连可能导致远端结果未知。 |
| 已配对服务器 | 已有持久会话或定时任务 | 主机和出站网络需要可用。 |
| 未配对 CI 执行器 | 已有公开 Topic 或私有 HTTPS Webhook | 公开内容可见；HTTPS 输入对服务可见；密钥放私密配置。 |

## 连接前的准备

电脑或服务器安装当前 Ntfyx CLI 0.6.1。iPhone 1.8.3 已在 App Store 上架；Android 1.8.2 已在 Google Play 上架。Android 推送需要 Google Play 服务。手机独立授权每台电脑或服务器；Web 收件箱是可选接收端，只能接收授权后发给它的新消息。

```
curl -fsSL https://ntfyx.me/install.sh | bash
ntfyx connect
ntfyx topics
```

> 下方 shell 示例用于 macOS / Linux。Windows 提供完整 CLI 与本地 MCP，请使用 PowerShell 安装命令及自己的调度器。宿主原生权限仍按独立兼容范围处理。

- [下载与实际可用状态](https://ntfyx.me/download/)
- [第一次连接电脑](https://ntfyx.me/docs/quickstart/)

## 在电脑等待 SSH 返回后提醒

保存下方完整脚本为 notify-ssh.sh，在已配对电脑执行 bash notify-ssh.sh Work YOUR_HOST 'cd /path/to/project && npm run build'。SSH 的 255 表示错误，不能据此断定远端任务失败或停止；即使远端程序本身返回 255，也要先核对。脚本保留退出码并把这类结果标为未知。

```
#!/usr/bin/env bash
# Save as notify-ssh.sh. Usage: bash notify-ssh.sh TOPIC HOST 'COMMAND'
set -u
if [ "$#" -lt 2 ]; then
  printf 'Usage: bash notify-ssh.sh TOPIC HOST [COMMAND]\n' >&2
  exit 2
fi
ntfyx_topic="$1"
shift
ssh "$@"
ntfyx_ssh_status=$?
case "$ntfyx_ssh_status" in
  0) ntfyx_title='SSH command finished'
     ntfyx_body='SSH returned status 0. Check the remote result and log.' ;;
  255) ntfyx_title='SSH result unknown'
       ntfyx_body='SSH returned 255. Check the connection and remote job before rerunning it.' ;;
  *) ntfyx_title='SSH command failed'
     ntfyx_body="SSH returned status $ntfyx_ssh_status. Check the remote log." ;;
esac
if ! ntfyx send "$ntfyx_body" --title "$ntfyx_title" --topic "$ntfyx_topic" >/dev/null; then
  printf 'Notification not confirmed; SSH exit status is preserved.\n' >&2
fi
exit "$ntfyx_ssh_status"
```

- [OpenSSH 退出状态](https://man.openbsd.org/ssh#EXIT_STATUS)
- [本机脚本与备份包装](https://ntfyx.me/zh/docs/notifications/)

## 把服务器独立配对为 Source

在支持的 Linux 或 macOS 主机安装 CLI，运行 connect，然后用手机扫描终端临时二维码。选择现有受保护 Topic，或在统一技术上限内新建。二维码应保密，配对应以运行任务的同一用户完成。Ntfyx 不会向服务器发起入站连接，也不需要另开 SSH 隧道。

```
# 在远端主机，以任务所属用户运行。
curl -fsSL https://ntfyx.me/install.sh | bash
ntfyx connect
ntfyx send "服务器连接已就绪" --topic Work
```

## 让既有持久任务独立通知

在已配对服务器保存 notify-after.sh，从现有 tmux 会话、定时器或服务调用。包装脚本负责报告退出结果，不负责保活、重启或发现完全没有启动的任务。cron 需要明确 PATH 和绝对路径。日志留在服务器，任务持久运行由原调度或进程管理方式负责。

```
# 在已配对服务器的既有持久会话运行。
bash /path/to/notify-after.sh Work bash -c 'printf "Remote demo finished\n"'
```

- [Linux cron 示例](https://ntfyx.me/docs/notifications/#schedule-with-cron-on-linux)
- [通知排错](https://ntfyx.me/docs/troubleshooting/)

## 请人决策，不开放任意远程 shell

服务器脚本可以请求允许、拒绝、选项或短文字。回答只返回给对应请求，不构成无限制交互 shell。需要查看上下文，遇到过期或校验失败就停止，不直接执行回复文字。首版不提供团队升级通知或基础设施事故 SLA。

```
ntfyx ask "接下来检查哪个环境？" \
  --choice staging=预发布 --choice production=生产 \
  --topic Work --wait 60s --expires 90s --json
```

- [手机提问与输入](https://ntfyx.me/zh/docs/agent-waiting-for-input/)
- [来源与撤销](https://ntfyx.me/security/)

## 按使用场景开始

从 Agent 等你回答，到每周订阅和网站异常，选一个场景开始。看手机会收到什么，再按步骤接好。

- [查看全部案例](https://ntfyx.me/zh/use-cases/)

## 断连后先核对远端，不重跑备份

先通过原任务日志或现有进程管理器确认任务仍在运行、已完成还是失败，再决定后续动作。本机 SSH 断开不证明远端命令已结束。需要独立于笔记本的提醒时，在服务器同一任务用户下使用 notify-after.sh，由原有持久会话或调度器运行；它仍不能发现机器断电或任务完全没启动。先分别演练正常退出与失败，再单独测试自己的断连场景。

- [GitHub Actions 失败通知](https://ntfyx.me/zh/docs/github-actions-notifications/)
- [按状态排查通知](https://ntfyx.me/zh/docs/troubleshooting/)

---

# Agent sessions: keep notifications and replies in one conversation

Source: https://ntfyx.me/docs/sessions/

Updated: 2026-10-17

Use Ntfyx Session conversations: group CLI and agent messages by session ID inside a Topic, confirm the original message, and send text replies with a clear reference.

## Availability: released

Session conversations are available in CLI 0.1.3+, iOS 1.1.0+, Android 1.1.0+ and the Web Inbox. Run ntfyx upgrade if your CLI help does not list --session-id. The homepage animation illustrates the installed experience and does not operate a real agent.

- [Published downloads and platform availability](https://ntfyx.me/download/)

## Inbox → Topic → Session → messages

A Topic is an authorized delivery channel. A Session is a conversation within that Topic, usually representing one agent run, deployment or long-running job. The Inbox groups conversations under their Topics and shows each session’s latest message. Opening a session shows notifications and questions in their original order, with verified replies attached to the corresponding messages. Session grouping does not create another Topic or change its access controls.

| Level | Purpose | Example |
| --- | --- | --- |
| Inbox | Your authorized receiving device | Phone or Web Inbox |
| Topic | Sources, permissions and notification settings | Development |
| Session | One task and its conversation | Release v2.4 |
| Message | A notification or one request for input | Build passed / Publish preview? |

## Send related messages with the same session ID

After connecting your CLI to a Topic, supply --session-id to send and ask. Use a stable ID for one task and a different ID for a new run. --session-name gives the conversation a readable name. The identifier is matched within a Topic; reusing it in another Topic does not merge the conversations. Multiple authorized sources in the same Topic can contribute to the same session.

```
ntfyx send "Build passed" --session-id release-24 --session-name "Release v2.4"
ntfyx ask "Publish the preview?" --allow-deny --session-id release-24
ntfyx ask "What should I check next?" --text --session-id release-24
```

> These examples require CLI 0.1.3 or later. ask waits for a signed reply; it does not deploy anything by itself. Do not treat receipt of a notification as permission to execute an action.

## Use one ID for an agent run

An agent or script can set NTFYX_SESSION_ID and optionally NTFYX_SESSION_NAME for a run. Explicit command flags override the environment. The --sessionid spelling is also accepted. Choose non-secret opaque identifiers; session names provide the readable context.

```
export NTFYX_SESSION_ID=release-24
export NTFYX_SESSION_NAME="Release v2.4"
ntfyx send "Tests passed"
ntfyx ask "What should I check next?" --text
```

- [Agent and local MCP integration](https://ntfyx.me/docs/agents/)
- [CLI results and one-time claims](https://ntfyx.me/docs/cli/)

## Confirm the message; quote the question

Allow once, Deny and choice options appear on the message asking for the decision. For a text answer, tap the message or select Reply. The composer quotes that question. Close it to keep a draft without sending; select another message to answer that one. A newly arriving question does not replace the current reply target. Sent answers appear below a light divider inside the original message, with their own reply time and delivery status. The original message keeps its place in the conversation. Sending, retry and terminal states stay attached to the request they describe.

## Delete an entire conversation on this device

The updated Web Inbox provides Delete conversation in the conversation actions, with confirmation. The same feature arrives on phones with Ntfyx 1.4 after store approval. It removes the conversation’s existing messages, unread markers and unsent drafts on the current device. Paging, sync and restart keep that old history hidden; later new messages can make the conversation appear again. Other conversations and devices are unchanged. Already signed replies remain queued, and pending actions remain separately reviewable. Deleting a conversation does not cancel a request or a store subscription.

## No session ID means a separate conversation

An ordinary notification without a session ID keeps the independent-message behavior: each new notification becomes a separate session. Equal titles do not merge messages. Requests remain separate decisions even when they share a session ID; replying to one does not answer the others. Session grouping does not restore earlier history to a newly authorized browser.

- [Phone-authorized Web Inbox](https://ntfyx.me/docs/web/)
- [Multiple agents and projects](https://ntfyx.me/docs/multiple-agent-notifications/)

## Grouping does not change approval or encryption

The sender still verifies the reply against the original request, revision and deadline. Cancellation, expiry and a Deny never become an Allow. Messages and replies remain end-to-end encrypted for authorized devices, while the relay retains operational metadata. A session is not a general chat endpoint and does not grant remote-shell access. Use the existing result and single-claim workflow for actions that must run only once.

- [Phone approval gate](https://ntfyx.me/docs/phone-approval/)
- [Encryption and remaining limitations](https://ntfyx.me/security/)

---

# Session 会话：把 Agent 通知、确认与回复放在同一个聊天里

Source: https://ntfyx.me/zh/docs/sessions/

Updated: 2026-10-17

了解 Ntfyx 新版 Session：在同一个 Topic 内按 session ID 聚合 CLI 与 Agent 消息，在原消息上确认，文字回复引用原问题，保留每件事的上下文。

## 可用状态：正式发布

Session 已在 CLI 0.1.3+、iOS 1.1.0+、Android 1.1.0+ 和 Web 收件箱提供。旧 CLI 可运行 ntfyx upgrade 升级；ntfyx help 会列出 --session-id。首页是已发布体验的示意动画，不会操作真实 Agent。

- [公开下载与平台可用状态](https://ntfyx.me/download/)

## Inbox → Topic → Session → 消息

Topic 是授权和投递通道；Session 是通道内的一段会话，通常对应 Agent 的一次运行、一次发布或一个长任务。Inbox 在各 Topic 下显示会话列表，每行展示该会话最新消息；点开后，按原消息时间查看通知和问题，已验证回复保留在对应消息内。创建 Session 不等于新建 Topic，也不会改变授权。

| 层级 | 用途 | 示例 |
| --- | --- | --- |
| Inbox | 已授权设备的收件箱 | 手机或 Web |
| Topic | 来源、访问权限与提醒设置 | 开发工作 |
| Session | 一件事的聊天记录 | 发布 v2.4 |
| 消息 | 通知或一次具体提问 | 构建通过 / 发布预览版本？ |

## 用相同 session ID 聚合同一件事

CLI 连接 Topic 后，在 send 和 ask 中指定相同的 --session-id。一次任务使用稳定的 ID，新一轮任务使用新 ID；--session-name 提供可读名称。相同 ID 只在同一个 Topic 内聚合，不跨 Topic 合并；同一 Topic 的多个已授权来源可以参与同一个会话。

```
ntfyx send "构建通过" --session-id release-24 --session-name "发布 v2.4"
ntfyx ask "发布预览版本？" --allow-deny --session-id release-24
ntfyx ask "接下来检查什么？" --text --session-id release-24
```

> 以上命令需要 CLI 0.1.3 或更高版本。ask 等待已签名回复，本身不会执行部署；收到通知不等于授权执行。

## 给 Agent 的一次运行设置会话

Agent 或脚本可以设置 NTFYX_SESSION_ID 和 NTFYX_SESSION_NAME，在整次运行中复用。命令行参数优先于环境变量，也支持 --sessionid 写法。ID 建议使用不含秘密的任务标识，可读上下文放在会话名称中。

```
export NTFYX_SESSION_ID=release-24
export NTFYX_SESSION_NAME="发布 v2.4"
ntfyx send "测试通过"
ntfyx ask "接下来检查什么？" --text
```

- [Agent 与本地 MCP 接入（英文）](https://ntfyx.me/docs/agents/)
- [CLI 回复校验与一次性消费（英文）](https://ntfyx.me/docs/cli/)

## 在原消息上确认，引用原问题回复

允许一次、拒绝和选项直接位于提出请求的消息下方。文字题点击消息正文或“回复”，底部输入区会引用原问题。关闭只保留草稿，不发送也不取消原请求；改答其他消息必须从那条消息发起。新问题到达不会切换输入对象。已发送回复追加到原消息内的浅色分割线下，显示独立回复时间与送达状态，原消息位置保持不变；发送中、等待重试、过期和已处理状态始终对应原请求。

## 一次删除当前设备上的整个会话

新版 Web 收件箱的会话操作提供“删除会话”，需要再次确认；手机端随 Ntfyx 1.4 审核通过后提供。操作一次移除当前设备上该会话的已有消息、未读标记和未提交草稿。之后翻历史、重新同步和重启不会恢复旧消息，新消息仍可让会话再次出现；其他会话和其他设备不受影响。已签名排队的回复会保留，待处理请求仍可单独查看。删除会话不会取消请求，也不会取消商店订阅。

## 不传 Session ID：每条消息独立成会话

没有指定 Session ID 时，每条普通消息独立成一个会话，保留原来的单条通知习惯；标题相同不会自动合并。即使多个问题属于同一 Session，每次回复仍只处理一条请求。浏览器新加入 Topic 也不会因会话聚合而获得此前的历史。

- [Web 收件箱说明（英文）](https://ntfyx.me/docs/web/)
- [多个项目与 Agent](https://ntfyx.me/zh/docs/multiple-agent-notifications/)

## 会话聚合不改变授权与加密边界

发送端仍核验原请求、版本、摘要与截止时间；取消、过期或拒绝都不是允许。消息与回复继续向已授权设备端到端加密，中继仍会处理必要运行元数据。Session 不增加远程执行权限，不是任意聊天或远程 Shell 的入口。涉及只能执行一次的操作，继续使用既有 result 与一次性 claim 流程。

- [手机确认与执行边界（英文）](https://ntfyx.me/docs/phone-approval/)
- [加密模型与限制（英文）](https://ntfyx.me/security/)

---

# Claude Code & Codex phone notifications: plugin setup guide

Source: https://ntfyx.me/docs/agent-plugins/

Updated: 2026-10-29

Give your agent the setup guide: download Ntfyx, install the plugin, pair your phone, receive a notification and answer a test question. Includes plugin updates.

## Installed the plugin? Connect your phone next.

Ntfyx sends Claude Code and Codex task notifications and questions to your phone. Plugin 0.4.1 includes guided setup and requires CLI 0.6.0+. Give your current agent the prompt below. It handles computer installation, checks and tests while guiding your phone steps.

```
Read https://ntfyx.me/agent-install.md and guide me through connecting the Ntfyx phone app. Check my existing installation, reuse existing connections and give me one phone step at a time until I receive a test notification and answer a test question.
```

- [Complete guide for your agent](https://ntfyx.me/agent-install.md)
- [GitHub setup guide](https://github.com/KaylaONeal/ntfyx-agent-plugins/blob/main/install.md)
- [Plugin 0.4.1 release notes](https://github.com/KaylaONeal/ntfyx-agent-plugins/releases/tag/v0.4.1)

## Agent setup on Windows

On Windows, use direct CLI setup or local MCP. Claude Code hooks require 2.1.139+; an older or unknown version gets MCP only. Codex on Windows provides MCP questions without automatic hooks. The marketplace plugin uses POSIX shell hooks; use direct setup on Windows. Native tool permission approvals retain their separate platform and host policy.

```
ntfyx setup claude-code --dry-run
ntfyx setup claude-code

ntfyx setup codex --dry-run
ntfyx setup codex
```

- [Windows installation and platform scope](https://ntfyx.me/docs/cli/#install-on-windows)

## 1. Install and open Ntfyx on your phone

Use the App Store on iPhone or Google Play on Android. Install Ntfyx, open it once and allow notifications if you want system alerts. No Ntfyx account is required. Android background push requires Google Play services. The phone app and computer CLI are separate components.

- [iPhone · App Store](https://apps.apple.com/app/id6817353404)
- [Android · Google Play](https://play.google.com/store/apps/details?id=me.ntfyx.app)
- [Current versions and system requirements](https://ntfyx.me/download/)

## 2. Let your agent check the computer

If the plugin is installed, give the agent the guide above; Claude Code also accepts /ntfyx:setup. It checks the CLI, plugin and existing Topics. For a first install, install only the plugin for your current host and the CLI for your OS. Restart Codex and review its hook trust prompt in /hooks. Use one integration method per host to avoid duplicate notifications. Marketplace shell hooks require Windows, macOS or Linux; on Windows, follow the CLI/MCP setup guide for that host.

```
# Claude Code
claude plugin marketplace add KaylaONeal/ntfyx-agent-plugins
claude plugin install ntfyx@ntfyx

# Codex
codex plugin marketplace add KaylaONeal/ntfyx-agent-plugins
codex plugin add ntfyx@ntfyx
```

- [CLI installation: Windows / macOS / Linux](https://ntfyx.me/install/)

## 3. Scan and authorize a protected Topic

The agent runs ntfyx connect and keeps it waiting. On the phone, open Add or Connect, choose the private Topic connection / scan option and scan the fresh QR on this trusted computer. Check the Source, choose a protected Topic such as MyNotify and confirm on your phone. Continue when the computer reports a completed connection. Reuse a working connection; public Topics cannot accept verified answers to agent questions.

> Keep the QR between you and the trusted computer. If it expires, let the agent check the original connection state before continuing; preserve app data and existing keys.

## 4. Receive a notification, then answer a test question

The agent first sends a non-sensitive test notification. Open the matching Topic on your phone and confirm the message appears. Then ask a harmless test question while the original call waits. Select or type your answer on the phone and check that the agent reports your actual answer. Service acceptance, phone receipt and verified reply are separate checks.

```
Use Ntfyx to send a test notification. After I confirm receipt, ask on my phone “Read the docs or run a test next?” and wait for my actual answer.
```

- [Missing notifications or an agent still waiting](https://ntfyx.me/docs/troubleshooting/)

## 5. Everyday use and resuming after a restart

At the start of a task say: “Notify me with Ntfyx when this task finishes; ask on my phone and wait when you need a decision.” After a restart say: “Continue Ntfyx setup, inspect the existing installation and Topics, and resume the unfinished step.” Claude Code can run /ntfyx:setup again; Codex can read this guide again. Keep one Session for the task so its messages and replies stay together.

## Still seeing 0.4.0? Update the marketplace and plugin.

Adding a marketplace, installing a plugin and refreshing its cache are separate steps. Run the commands for your host, then close and reopen the agent. Check for plugin 0.4.1 or later and run the setup guide. Plugin and CLI versions are independent; preserve pairing data during updates.

```
# Claude Code
claude plugin marketplace update ntfyx
claude plugin update ntfyx@ntfyx

# Codex
codex plugin marketplace upgrade ntfyx
codex plugin add ntfyx@ntfyx
```

## One-command setup is also available

For macOS / Linux users without the plugin, the direct installer below guides pairing and configures the host. If you already installed the plugin, continue its setup path. Windows users should use the PowerShell or npm instructions on the installation page.

```
# Claude Code
curl -fsSL https://ntfyx.me/install.sh | bash -s -- --agent claude-code

# Codex
curl -fsSL https://ntfyx.me/install.sh | bash -s -- --agent codex
```

## Which questions reach the phone?

Native AskUserQuestion has encrypted integration tests; real-host/device acceptance is separate. Tool execution approval is a different feature, with Linux x64 and Apple silicon Mac combinations listed in the Agent guide. Apple silicon Mac native approvals are verified with Claude Code 2.1.303 and Codex 0.163.0 and require CLI 0.1.5+. Intel Mac native approvals remain unverified and return to the terminal. Codex requires interactive TUI and /hooks trust; codex exec does not trigger permission hooks. The phone route respects cancellations, deadlines, signatures and one-time claims. A late answer cannot resume an ended invocation.

| Host | Phone questions | Native prompt behavior |
| --- | --- | --- |
| Claude Code | MCP questions and native AskUserQuestion bridge | Single-choice buttons with free text; up to four questions in order; multi-select via typed option numbers |
| Codex | MCP questions with phone-reply guidance | Native request_user_input is not intercepted by this plugin |
| pi | MCP through the included extension and skill | Native question UI not intercepted |
| Cursor / Gemini CLI / OpenCode / Copilot | Local MCP may be configured using the host’s own settings | No Ntfyx native-question bridge has been released for these hosts |

- [Native execution approval compatibility](https://ntfyx.me/docs/agents/)

## Sessions keep the context

Use one session_id for one agent conversation. Native hooks carry the host session ID; MCP calls use session_id and session_name. Without an ID, messages remain separate. The conversation groups messages you send; it does not export the whole agent transcript or give the phone remote-shell access.

```
ntfyx send "Build passed" --session-id release-24 --session-name "Release v2.4"
ntfyx ask "What next?" --text --session-id release-24
```

- [Session behavior and examples](https://ntfyx.me/docs/sessions/)

## Local by design

The plugin runs the paired CLI on your computer. It does not send your private keys to a hosted MCP service. Cloud chats cannot run that local executable. A plugin install never replaces the host’s sandbox, hook trust or permission policy. Official directory distribution has separate rules and review; the public Ntfyx marketplace is available now.

- [Encryption and limitations](https://ntfyx.me/security/)
- [Troubleshooting](https://ntfyx.me/docs/troubleshooting/)

## Run a complete question and reply

Send status in one Session, receive a choice and a text answer, and verify the one-time claim before continuing.

- [Walkthrough: agent questions, replies and one-time claims](https://ntfyx.me/docs/agent-reply-walkthrough/)

## Start with a use case

From agent questions to weekly subscriptions and website alerts, start with a use case. See what reaches your phone, then follow the steps to connect.

- [Explore all use cases](https://ntfyx.me/use-cases/)

## Plain and rich messages

CLI 0.6.0 independently sends ordinary text, Markdown and native metric/table/chart messages, with local validation before sending. See the guide for receiver version requirements and store availability.

- [Rich-message formats and complete example](https://ntfyx.me/docs/rich-messages/)

---

# Claude Code / Codex 手机通知：插件安装与配对教程

Source: https://ntfyx.me/zh/docs/agent-plugins/

Updated: 2026-10-29

把安装指南交给 Agent，逐步下载 Ntfyx App、安装插件、扫码配对，接收第一条手机通知并回答测试题。含旧版插件升级与日常用法。

## 插件装好了，下一步怎么连手机？

Ntfyx 把 Claude Code 和 Codex 的任务通知与问题发到手机。插件 0.4.1 提供逐步接入指引，电脑需要 CLI 0.6.0+。把下面这段话交给当前 Agent，它负责电脑上的安装、检查和测试；你只需按提示操作手机。

```
请读取 https://ntfyx.me/agent-install.md，带我一步步连接 Ntfyx 手机 App。先检查已有安装，复用现有连接，每次只让我做一个手机操作，直到我收到测试通知并在手机回答一道测试题。
```

- [交给 Agent 的完整安装指南](https://ntfyx.me/agent-install.md)
- [GitHub 安装指南](https://github.com/KaylaONeal/ntfyx-agent-plugins/blob/main/install.md)
- [插件 0.4.1 发布说明](https://github.com/KaylaONeal/ntfyx-agent-plugins/releases/tag/v0.4.1)

## Windows Agent 接入

Windows 使用 CLI 的直接 setup 或本地 MCP。Claude Code Hook 需要 2.1.139+；旧版或无法确认版本时只配置 MCP。Codex 在 Windows 提供 MCP 提问，不配置自动 Hook。市场插件的 Hook 使用 POSIX shell，Windows 请使用直接 setup。原生工具权限审批仍按单独的平台与宿主允许范围处理。

```
ntfyx setup claude-code --dry-run
ntfyx setup claude-code

ntfyx setup codex --dry-run
ntfyx setup codex
```

- [Windows 安装与平台范围](https://ntfyx.me/zh/download/)

## 1. 在手机安装并打开 Ntfyx

iPhone 打开 App Store，Android 打开 Google Play。安装 Ntfyx 并打开一次；希望收到系统提醒时允许通知。无需注册 Ntfyx 账号。Android 后台推送需要 Google Play 服务。手机与电脑安装的是不同组件。

- [iPhone · App Store](https://apps.apple.com/app/id6817353404)
- [Android · Google Play](https://play.google.com/store/apps/details?id=me.ntfyx.app)
- [当前版本与系统要求](https://ntfyx.me/zh/download/)

## 2. 让 Agent 检查电脑接入

已有插件时，直接让 Agent 执行上面的指南；Claude Code 也可输入 /ntfyx:setup。它会检查 CLI、插件和已有 Topic。首次安装时，只安装当前使用的宿主插件，并按系统安装 CLI。Codex 重开后按 /hooks 提示检查并信任 Hook。每个宿主使用插件或直接配置中的一种，避免重复通知。市场包的 shell Hook 适用于 macOS / Linux；Windows 按该宿主的 CLI/MCP 指南接入。

```
# Claude Code
claude plugin marketplace add KaylaONeal/ntfyx-agent-plugins
claude plugin install ntfyx@ntfyx

# Codex
codex plugin marketplace add KaylaONeal/ntfyx-agent-plugins
codex plugin add ntfyx@ntfyx
```

- [CLI 安装：Windows / macOS / Linux](https://ntfyx.me/install/)

## 3. 手机扫码，授权受保护 Topic

Agent 在电脑运行 ntfyx connect 并保持等待。手机进入添加或连接入口，选择私密 Topic 连接／扫描二维码，扫描这台可信电脑上的新二维码。核对发送端并选择受保护 Topic（例如 MyNotify），在手机确认。等电脑显示连接完成后继续。已有可用连接时复用；公开 Topic 无法接收 Agent 问题的签名回答。

> 二维码只在你和可信电脑之间展示，不上传公开网页。二维码过期时让 Agent 检查原连接状态后继续，不要删除手机数据或已有密钥。

## 4. 收到通知，再回答一道测试题

Agent 先发送一条无敏感信息的测试通知。打开手机对应 Topic，确认看见消息。接着让 Agent 发一道无副作用的问题，并保持原调用等待；在手机选择或输入答案，直到 Agent 显示你实际回答的内容。电脑受理成功、手机收到和答案验签成功是三个独立检查。

```
用 Ntfyx 发一条测试通知。等我确认收到后，在手机问我“下一步先看文档还是运行测试？”，等待我的实际回答。
```

- [未收到通知或 Agent 没继续](https://ntfyx.me/zh/docs/troubleshooting/)

## 5. 日常使用与重启后继续

任务开始时告诉 Agent：“这次任务完成后用 Ntfyx 通知我；需要我决定时在手机提问并等待。”重启后告诉它：“继续 Ntfyx 接入，检查已有安装和 Topic，从上次未完成的步骤开始。”Claude Code 可再运行 /ntfyx:setup；Codex 可再次提供本页指南。一个任务保持同一个 Session，手机就能看到相关消息和回复。

## 安装后还是 0.4.0，怎样升级？

添加市场、安装插件和更新本地缓存是不同步骤。按自己使用的宿主执行下方命令，然后关闭并重开 Agent。确认插件为 0.4.1 或更新版本，再运行接入指引。插件版本与 CLI 版本独立；不要为升级删除配对数据。

```
# Claude Code
claude plugin marketplace update ntfyx
claude plugin update ntfyx@ntfyx

# Codex
codex plugin marketplace upgrade ntfyx
codex plugin add ntfyx@ntfyx
```

## 也可以一键直接配置

尚未使用插件的 macOS / Linux 用户可用下面的直接配置。安装器引导配对并配置宿主；已安装插件时继续使用插件路径即可。Windows 使用安装页的 PowerShell 或 npm 方式。

```
# Claude Code
curl -fsSL https://ntfyx.me/install.sh | bash -s -- --agent claude-code

# Codex
curl -fsSL https://ntfyx.me/install.sh | bash -s -- --agent codex
```

## 哪些 Agent 问题能转到手机？

Claude 原生问答已通过真实加密链路的集成测试，真实宿主与手机验收单独记录。工具执行审批是另一项能力，已验证的 Linux x64 与 Apple 芯片 Mac 范围见 Agent 文档。Apple 芯片 Mac 已验证 Claude Code 2.1.303 与 Codex 0.163.0 的原生审批，需 CLI 0.1.5+；Intel Mac 原生审批仍未验证，回到终端处理。Codex 仍需交互 TUI 与 /hooks 信任；codex exec 不触发权限 Hook。取消、超时、验签失败或已消费都不会成为允许；已经结束的调用不会被迟到回复恢复。

| Agent | 手机问答 | 原生提问 |
| --- | --- | --- |
| Claude Code | MCP 问答与 AskUserQuestion 桥接 | 单选按钮和补充文字；多题依次发送；多选用文字填写选项编号 |
| Codex | 通过 MCP 与手机问答指引主动提问 | 暂不接管 request_user_input |
| pi | 扩展注册 MCP 并加载问答指引 | 暂不接管原生提问界面 |
| Cursor / Gemini CLI / OpenCode / Copilot | 可按各自配置格式接入本地 MCP | 尚未发布 Ntfyx 原生提问适配 |

- [执行审批的版本与平台范围](https://ntfyx.me/docs/agents/)

## Session 保留任务上下文

同一个 Agent 会话使用同一个 session_id，session_name 是可读名称。原生 Hook 自动带上宿主会话 ID；MCP 或脚本显式传入。不传 ID 时每条消息独立成会话。Session 只聚合主动发送的消息，不会导出完整 Agent 对话，也不增加远程执行权限。

```
ntfyx send "构建通过" --session-id release-24 --session-name "发布 v2.4"
ntfyx ask "接下来检查什么？" --text --session-id release-24
```

- [会话规则与更多示例](https://ntfyx.me/zh/docs/sessions/)

## 密钥留在你的电脑上

受保护 Topic 通过已配对的本地 CLI 发送；消息和回复在设备上加密，中继只处理密文与必要元数据。公开 Topic 无需配对，正文对服务端和持有链接的人可见。云端聊天无法直接运行你电脑上的本地 MCP。安装不会替代宿主的沙箱、Hook 信任和权限设置。官方目录上架有独立规则和审核，当前可以直接添加 Ntfyx 市场安装。

- [安全与限制](https://ntfyx.me/security/)
- [联系支持](https://ntfyx.me/support/)

## 跑通提问与回复

在同一 Session 中发送状态、取得选择与文字回复，并核对一次领取结果。

- [实际案例：Agent 提问、回复与一次领取](https://ntfyx.me/zh/docs/agent-reply-walkthrough/)

## 按使用场景开始

从 Agent 等你回答，到每周订阅和网站异常，选一个场景开始。看手机会收到什么，再按步骤接好。

- [查看全部案例](https://ntfyx.me/zh/use-cases/)

## 普通消息与富消息

CLI 0.6.0 可独立发送普通文字、Markdown 和带指标／表格／图表的原生富消息，并在发送前本地校验。显示端版本与商店审核状态详见指南。

- [富消息格式与完整示例](https://ntfyx.me/zh/docs/rich-messages/)

---

# Ntfyx for Chrome: encrypted agent notifications and replies

Source: https://ntfyx.me/docs/chrome-extension/

Updated: 2026-10-28

Get the official Ntfyx Chrome extension for notifications and in-context replies. Phone authorization, Topic scope, Session conversations and delivery limits explained.

## Chrome extension 0.2.4: available on the Chrome Web Store

Chrome extension 0.2.4 is publicly listed on the Chrome Web Store. The current protected-message protocol requires Chrome 0.4.0, submitted and still under review as of 28 October 2026. The public 0.2.4 listing does not establish compatibility with that protocol. Use the phone-authorized Web Inbox while waiting for the compatible extension. Public listing and displayed version checked on 26 October 2026.

> For the current protocol, wait until the listing offers 0.4.0 or later, then authorize each protected Topic from your phone. Chrome must remain running for background checks and desktop notifications.

- [Get Ntfyx on the Chrome Web Store](https://chromewebstore.google.com/detail/acjjebbohlohmihfigkbnjabmjdgkkdi)
- [Open Web Inbox](https://app.ntfyx.me/)
- [Download the phone app](https://ntfyx.me/download/)

## Your agents, next to your work

The extension adds desktop notifications, a toolbar unread count and a side-panel Inbox to your browser. View Topics, open Sessions and respond below the original question. Keep your phone for the initial authorization and access management. It receives messages from sources you connect; it does not read the pages you visit or automatically intercept every terminal prompt.

## Authorize each Topic from your phone

Open Ntfyx on your primary iPhone or Android phone before connecting the browser. The extension has its own receiver keys, separate from the phone’s management identity. Authorization is scoped to a Topic: authorizing one Topic does not automatically open every Topic in your Inbox.

1. Open the extension connection screen and name this browser connection.
2. Create a fresh one-time QR code. Scan it in the Ntfyx phone app.
3. Check the browser name, select the intended Topic and approve on the phone.
4. Send a new test message to that Topic. To receive another Topic, repeat Add another Topic and approve it on the same primary phone.

> Only approve a browser you trust. The QR code and connection link contain a one-time pairing secret; keep them out of support reports, public screenshots and shared documents.

- [Phone app downloads](https://ntfyx.me/download/)
- [Pairing and receiver security](https://ntfyx.me/security/)

## One task, one Session

Within a Topic, the same Session ID groups related messages into one conversation. Inbox shows the latest activity; opening the Session shows its message history. Without a Session ID, each new message starts a separate conversation. A new receiver can only decrypt messages newly addressed to its authorized keys; it does not download the phone’s complete past history.

```
ntfyx send "Homepage update is ready" --session-id homepage-update --session-name "Homepage update"
ntfyx ask "Publish the homepage?" --allow-deny --session-id homepage-update
ntfyx ask "What should change?" --text --session-id homepage-update
```

- [Session rules and CLI examples](https://ntfyx.me/docs/sessions/)

## Reply on the message that asked

Allow or deny a request, or choose a supplied option, with the compact controls directly below it. For a text question, select Reply to focus an input that quotes the original question. Your answer and its status appear below that question, separated by a light divider. New messages do not change your reply target. Sending a reply does not establish that an agent has executed an external action; follow the actual receipt and execution status.

- [Agent question and integration support](https://ntfyx.me/docs/agent-plugins/)

## Discover official notification sources

Browse official notification sources and public previews in Discover. Subscribe and manage subscriptions on your primary phone with Ntfyx 1.2.0 or later, then authorize Chrome for that Topic to receive future editions. Existing browser connections do not automatically gain access to a new subscription Topic. Digest updates are ordinary notifications and do not ask for approval or a reply.

- [Technology digest and phone subscription](https://ntfyx.me/plugins/tech-digest/)

## Notifications, previews and quiet Topics

The extension’s notification settings let you switch desktop alerts on or off, mute individual Topics and choose whether system notifications can contain decrypted titles and message text. Message preview is off by default: the generic alert lets you open the Inbox without putting its contents in the operating system’s notification history. The toolbar unread count and the Inbox are separate from whether a system alert was shown.

> Chrome and your operating system may block or suppress desktop notifications. Check both settings if the Inbox updates but no alert appears.

## When Chrome is closed or your connection drops

Chrome needs to be running for its background checks and desktop notifications. Closing the entire browser, suspending the computer, going offline or applying an organization’s browser policies can delay delivery. Opening the Inbox requests a fresh synchronization. A reply saved for retry must keep its original signed bytes; it remains pending until the service accepts it or its actual terminal state is reconciled. A delayed or cancelled request cannot be treated as permission to continue.

## Permissions with one purpose

The extension requests only the capabilities needed for the encrypted Inbox: notifications for desktop alerts, alarms for periodic background work, a side panel for viewing and replying, and access to the Ntfyx encrypted API. Its executable code is packaged with the extension. It does not request browser history, website content, cookies or permission to inject code into every page.

- [Privacy, storage and deletion](https://ntfyx.me/privacy/)
- [Encryption and remaining limits](https://ntfyx.me/security/)

## Disconnect, revoke and remove local copies

Disconnecting clears this extension’s local connection, receiver keys, cached messages and drafts. It attempts to revoke the browser receiver; if the network is unavailable, revoke it on the primary phone as well. Revocation stops future access but cannot erase copies already delivered to a device. Extension data is separate from the hosted Web Inbox, even in the same browser. Clearing one does not silently clear the other.

- [Recovery and key loss](https://ntfyx.me/docs/recovery/)
- [Request service data deletion](https://ntfyx.me/delete-data/)
- [Get help without sending secrets](https://ntfyx.me/support/)

## Plain and rich messages

CLI 0.6.0 independently sends ordinary text, Markdown and native metric/table/chart messages, with local validation before sending. See the guide for receiver version requirements and store availability.

- [Rich-message formats and complete example](https://ntfyx.me/docs/rich-messages/)

---

# Ntfyx Chrome 扩展：Agent 加密通知与消息回复

Source: https://ntfyx.me/zh/docs/chrome-extension/

Updated: 2026-10-28

在浏览器接收 Agent 通知、查看 Topic 与 Session、在原消息上确认或引用回复。了解手机首次授权、每个 Topic 的访问范围、权限与 Chrome 通知限制。

## Chrome 扩展 0.2.4：已在 Chrome 应用商店公开

Chrome 扩展 0.2.4 已在 Chrome 应用商店公开。当前受保护消息协议要求 Chrome 0.4.0，截至 2026 年 10 月 28 日该版已提交、仍待审；公开 0.2.4 上架不代表兼容新版协议。等待兼容扩展期间可使用手机授权的 Web 收件箱。 公开页面与显示版本已于 2026 年 10 月 26 日核对。

> 从官方商店页面安装，再用手机分别授权需要接收的 Topic。后台检查与桌面提醒需要 Chrome 保持运行。

- [在 Chrome 应用商店获取 Ntfyx](https://chromewebstore.google.com/detail/acjjebbohlohmihfigkbnjabmjdgkkdi)
- [打开 Web 收件箱](https://app.ntfyx.me/)
- [下载手机 App](https://ntfyx.me/zh/download/)

## 工作时，Agent 消息就在手边

扩展在浏览器提供桌面通知、工具栏未读数量和侧栏收件箱。查看 Topic，进入 Session，并在原问题下处理回复。首次授权与访问管理仍由主手机完成。扩展只接收已连接来源主动发送的消息，不读取你浏览的网页，也不会自动截获所有终端提示。

## 每个 Topic 分别由手机授权

先在主 iPhone 或 Android 手机打开 Ntfyx，再连接浏览器。扩展使用独立接收密钥，不获得手机管理根。授权限定到所选 Topic；连接一个 Topic 不会自动打开收件箱中的其他 Topic。

1. 打开扩展连接页，为当前浏览器连接命名。
2. 生成新的单次二维码，用 Ntfyx 手机 App 扫描。
3. 在手机核对浏览器名称，选择要接收的 Topic 并确认。
4. 向该 Topic 发一条新的测试消息。需要另一个 Topic 时，使用“添加另一个 Topic”，再由同一主手机扫码授权。

> 只授权你信任的浏览器。二维码和连接链接包含单次配对秘密，不要放进诊断报告、公开截图或共享文档。

- [手机 App 下载](https://ntfyx.me/download/)
- [配对与接收端安全](https://ntfyx.me/security/)

## 一件事，一个 Session 会话

同一 Topic 内使用相同 Session ID，相关消息聚合在一个会话。Inbox 显示最新活动，进入会话后查看消息历史。不指定 Session ID 时，每条新消息独立成会话。新接收端只能解密授权后新发送给它的消息，不会取得手机全部旧历史。

```
ntfyx send "首页改版已准备好" --session-id homepage-update --session-name "首页改版"
ntfyx ask "发布首页？" --allow-deny --session-id homepage-update
ntfyx ask "哪里需要调整？" --text --session-id homepage-update
```

- [Session 规则与 CLI 示例](https://ntfyx.me/zh/docs/sessions/)

## 在哪条消息提问，就在哪条消息回复

确认与选项采用原消息下方的紧凑按钮。文字问题点击“回复”，输入框聚焦并引用原问题。答案和实际状态回填到原消息浅色分割线下；新消息不会切换当前回复目标。回复已发送不代表 Agent 已执行外部操作，要继续查看真实回执和执行状态。

- [Agent 提问与适配范围](https://ntfyx.me/zh/docs/agent-plugins/)

## 发现官方通知源

在“发现”中浏览官方通知源和公开预览。订阅与管理在安装 Ntfyx 1.2.0 或更高版本的主手机完成，再为该 Topic 单独授权 Chrome 接收后续内容。已有浏览器连接不会自动获得新订阅 Topic 的权限。热点摘要是普通通知，不要求审批或回复。

- [科技热点与手机订阅](https://ntfyx.me/zh/plugins/tech-digest/)

## 桌面提醒、消息预览与 Topic 静音

在扩展通知设置中开关桌面提醒、对单独 Topic 静音，并选择是否允许系统通知显示解密后的标题和正文。消息预览默认关闭，通用提醒可以打开收件箱，同时避免把正文放进系统通知记录。工具栏未读数量和收件箱内容，与系统是否显示提醒是不同状态。

> Chrome 或操作系统可能阻止、抑制桌面通知。收件箱更新但没有提醒时，分别检查两处设置。

## Chrome 关闭、电脑休眠或断网时

Chrome 需要保持运行，扩展才能进行后台检查和桌面提醒。退出整个浏览器、电脑休眠、断网或组织的浏览器策略可能造成延迟。打开收件箱会请求重新同步。等待重试的回复必须保持原签名内容，直到服务接受或确认实际终态；延迟、取消和过期都不能变成允许。

## 权限只服务于加密收件箱

扩展仅使用加密收件箱需要的能力：通知权限用于桌面提醒，定时唤醒用于后台同步，侧栏用于查看和回复，Ntfyx API 访问用于加密服务。可执行代码随扩展包提供，不申请浏览历史、网页内容、Cookie 或全站脚本注入权限。

- [隐私、存储与删除](https://ntfyx.me/privacy/)
- [加密与现有边界](https://ntfyx.me/security/)

## 断开连接、撤销与本地副本

断开连接会清除扩展本地连接、接收密钥、缓存消息和草稿，并尝试撤销浏览器接收端。网络不可用时，也应在主手机撤销。撤销停止后续访问，但不能擦除已送达设备的副本。同一个浏览器内，扩展与 Web 收件箱使用独立数据；清除一方不会自动清除另一方。

- [密钥丢失与恢复](https://ntfyx.me/docs/recovery/)
- [请求删除服务数据](https://ntfyx.me/zh/delete-data/)
- [安全地联系支持](https://ntfyx.me/support/)

## 普通消息与富消息

CLI 0.6.0 可独立发送普通文字、Markdown 和带指标／表格／图表的原生富消息，并在发送前本地校验。显示端版本与商店审核状态详见指南。

- [富消息格式与完整示例](https://ntfyx.me/zh/docs/rich-messages/)

---

# Technology digest — Ntfyx notification sources

Source: https://ntfyx.me/plugins/tech-digest/

Updated: 2026-10-17

Follow a daily technology digest in Ntfyx. Public Hacker News headlines and original links, delivered to a private Topic after you subscribe on your phone.

## A daily digest you choose to receive

Technology digest is a free notification source published by Ntfyx. Each daily message contains up to five English Hacker News headlines, original links and public factual metadata. Ntfyx does not fetch article bodies or generate AI summaries for this source. This service is independent of Hacker News.

- [Hacker News official API and data fields](https://github.com/HackerNews/API)

## Availability

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Technology digest subscriptions work in Ntfyx 1.2.0 or later; the expanded catalog needs 1.3 or later. Updated opportunity-source explanations arrive with 1.4. Check the installed version and source health before subscribing.

- [Current downloads and store availability](https://ntfyx.me/download/)

## Subscribe on your primary phone

In a compatible Ntfyx app, open Discover, choose Technology digest, review its sources and select Free subscription. Confirm the digest time, time zone and notification preference. No Ntfyx account, computer, CLI or camera scan is required for this subscription. Your personal Inbox is created on your device if needed.

1. Open Ntfyx → Discover → Technology digest.
2. Choose the digest time and confirm the subscription.
3. Open the new Topic in Inbox. Future editions are grouped into dated sessions.

> A public preview is separate from messages delivered to your Inbox. New subscriptions receive future editions; they do not import a backlog.

## Read on Chrome or the Web

Subscribe and manage the source on your primary phone. To receive future editions in a browser, authorize that browser for the new Topic using the existing phone pairing flow. Connecting one Topic does not grant access to every other Topic. A new browser does not receive the phone’s earlier history.

- [Chrome extension and phone authorization](https://ntfyx.me/docs/chrome-extension/)
- [Open Web Inbox](https://app.ntfyx.me/)

## Frequency, quota and control

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

## Encryption and public content

Your phone authorizes a private Topic and an independent sending identity for this subscription. The publisher encrypts deliveries for authorized recipient devices. Ntfyx knows the public material it publishes and the necessary subscription routing metadata. Your private agent conversations are not used to generate these digests. The browser cannot hold the phone management key or subscribe on your behalf.

- [Security boundaries](https://ntfyx.me/security/)
- [Privacy policy](https://ntfyx.me/privacy/)

## Content problems or stopping delivery

Use Manage subscription to pause or unsubscribe. Report a content issue or block its publisher from the app, or contact support. Disabling system notifications does not unsubscribe. Already dispatched system notifications may arrive after you unsubscribe; stopping future delivery does not recall content already received.

- [Contact Ntfyx support](https://ntfyx.me/support/)

## Explore all sources

11 notification sources offer different content and schedules, with source scope, checking intervals and phone compatibility stated explicitly.

- [Source directory and availability](https://ntfyx.me/plugins/)

---

# 科技热点 — Ntfyx 通知源

Source: https://ntfyx.me/zh/plugins/tech-digest/

Updated: 2026-10-17

在 Ntfyx 手机端订阅每日科技热点。英文 Hacker News 短标题、原文链接和公开事实数据，进入你独立的 Topic 与日期会话。

## 每天一条，你主动选择的资讯

科技热点是 Ntfyx 提供的免费通知源。每期最多五条英文 Hacker News 短标题、原文链接和公开事实数据；不抓取文章正文，不自动翻译或生成 AI 摘要。此服务与 Hacker News 无隶属关系。

- [Hacker News 官方 API 与数据字段](https://github.com/HackerNews/API)

## 当前可用范围

当前公开手机版本为 iPhone 1.8.3、Android 1.8.2。科技热点订阅适用于 Ntfyx 1.2.0 或更高版本，扩展目录需要 1.3 或更高版本。新的机会源说明随 1.4 更新提供，请核对所装版本与来源状态后订阅。

- [查看当前下载与商店版本](https://ntfyx.me/zh/download/)

## 在主手机确认订阅

在支持此功能的 Ntfyx 中打开“发现”，进入“科技热点”，查看来源后选择“免费订阅”，确认摘要时间、时区和提醒偏好。不需要 Ntfyx 注册账号、电脑、CLI 或扫码；如尚无 Inbox，由设备按现有方式创建。

1. 打开 Ntfyx → 发现 → 科技热点。
2. 选择摘要时间并确认订阅。
3. 回到 Inbox 的科技热点 Topic，后续每期按日期聚合为会话。

> 公开预览不等于已经投递到 Inbox 的消息。新订阅只接收后续发布，不会批量导入旧内容。

## 在 Chrome 或 Web 阅读

订阅与管理由主手机完成。需要浏览器收件时，按现有流程由手机为新 Topic 授权该浏览器。已经连接某个 Topic 不代表自动获得其他 Topic 的权限；新浏览器也不会补取手机过去的历史。

- [Chrome 扩展与手机授权](https://ntfyx.me/zh/docs/chrome-extension/)
- [打开 Web 收件箱](https://app.ntfyx.me/)

## 频率、名额与退出

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。

## 加密与公开内容的边界

手机授权一个私有 Topic 及独立发送身份，发布端向合法接收设备分别加密。Ntfyx 作为内容提供方知道自己发布的公开资讯，以及必要订阅路由元数据；你的私人 Agent 消息不会用于生成热点。浏览器不持有手机管理根，不能代替手机新增或取消订阅。

- [查看加密边界](https://ntfyx.me/security/)
- [隐私说明](https://ntfyx.me/privacy/)

## 内容问题与停止接收

可在“管理订阅”中暂停或退订，也可在 App 中举报内容、屏蔽发布者，或联系支持。关闭系统通知不等于退订。已经交给系统推送的通知仍可能到达；停止后续投递不能撤回已经收到的内容。

- [联系 Ntfyx 支持](https://ntfyx.me/support/)

## 浏览全部通知源

11 个通知源提供不同内容与频率，分别说明来源范围、计划检查与手机兼容。

- [通知源目录与可用范围](https://ntfyx.me/zh/plugins/)

---

# New product digest — Ntfyx notification sources

Source: https://ntfyx.me/plugins/product-launches/

Updated: 2026-10-17

Discover recent Show HN products and projects, with original sites and discussion links.

## Content and its actual source

Ntfyx uses Hacker News’s official public API to select up to five Show HN posts from the previous 48 hours, ranked by score at collection. This is a snapshot of that community’s submissions, not a Product Hunt leaderboard, an exhaustive launch database or an endorsement. Article bodies are not collected.

- [Show HN](https://news.ycombinator.com/show)
- [Hacker News official API](https://github.com/HackerNews/API)

## Frequency and delivery

One daily digest at your chosen local time. New subscriptions receive future editions without importing earlier posts; scheduled collection and delivery may be delayed.

- [Source collection health (public, read-only)](https://api.ntfyx.me/v1/market/health)

## Phone availability

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Technology digest works from 1.2.0 and the expanded catalog needs 1.3 or later. Updated opportunity-source explanations arrive with 1.4; check your installed version. Web browses the public catalog and previews; the primary phone still confirms subscriptions.

- [Current public downloads](https://ntfyx.me/download/)

## Subscribe in a compatible app

Use the compatible version listed above, choose this source in Discover on your primary phone, review the sources, schedule and notification preference, then confirm the free subscription. No computer, CLI or scan is needed. The phone creates a private Topic; a browser needs separate authorization for that Topic. A preview is not a received message.

## Slots and stopping delivery

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

## Public content and private messages

The publisher knows its public content and necessary subscription routing and schedule. This grants no access to private agent messages. Your phone authorizes each Topic and sender, and deliveries are encrypted for authorized recipient devices. Ntfyx is independent of the listed sources.

- [Browse all sources](https://ntfyx.me/plugins/)

---

# GitHub Trending · daily — Ntfyx notification sources

Source: https://ntfyx.me/plugins/github-trending-daily/

Updated: 2026-10-17

GitHub’s official daily Trending window, with repository links and stars gained during that window.

## Content and its actual source

The source reads GitHub’s official Trending page with since=daily. Up to five repositories retain the displayed order and period star gain. This is the rolling-window snapshot observed at collection, not a search sorted by lifetime stars or an independently reconstructed calendar-period total. Repository descriptions keep their original language. Source failures or HTML changes do not produce an invented replacement ranking.

- [GitHub official Trending · daily](https://github.com/trending?since=daily)

## Frequency and delivery

Delivered daily at your chosen local time and time zone. The cloud collects rolling snapshots daily for different time zones. Scheduled checks and delivery may be delayed; the observation date remains visible.

- [Source collection health (public, read-only)](https://api.ntfyx.me/v1/market/health)

## Phone availability

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Technology digest works from 1.2.0 and the expanded catalog needs 1.3 or later. Updated opportunity-source explanations arrive with 1.4; check your installed version. Web browses the public catalog and previews; the primary phone still confirms subscriptions.

- [Current public downloads](https://ntfyx.me/download/)

## Subscribe in a compatible app

Use the compatible version listed above, choose this source in Discover on your primary phone, review the sources, schedule and notification preference, then confirm the free subscription. No computer, CLI or scan is needed. The phone creates a private Topic; a browser needs separate authorization for that Topic. A preview is not a received message.

## Slots and stopping delivery

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

## Public content and private messages

The publisher knows its public content and necessary subscription routing and schedule. This grants no access to private agent messages. Your phone authorizes each Topic and sender, and deliveries are encrypted for authorized recipient devices. Ntfyx is independent of the listed sources.

- [Browse all sources](https://ntfyx.me/plugins/)

---

# GitHub Trending · weekly — Ntfyx notification sources

Source: https://ntfyx.me/plugins/github-trending-weekly/

Updated: 2026-10-25

GitHub’s official weekly Trending window, with repository links and stars gained during that window.

## Content and its actual source

The source reads GitHub’s official Trending page with since=weekly. Up to five repositories retain the displayed order and period star gain. This is the rolling-window snapshot observed at collection, not a search sorted by lifetime stars or an independently reconstructed calendar-period total. Repository descriptions keep their original language. Source failures or HTML changes do not produce an invented replacement ranking.

- [GitHub official Trending · weekly](https://github.com/trending?since=weekly)

## Frequency and delivery

Delivered on Mondays at your chosen local time and time zone. The cloud collects rolling snapshots daily for different time zones. Scheduled checks and delivery may be delayed; the observation date remains visible.

- [Source collection health (public, read-only)](https://api.ntfyx.me/v1/market/health)

## Phone availability

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Technology digest works from 1.2.0 and the expanded catalog needs 1.3 or later. Updated opportunity-source explanations arrive with 1.4; check your installed version. Web browses the public catalog and previews; the primary phone still confirms subscriptions.

- [Current public downloads](https://ntfyx.me/download/)

## Subscribe in a compatible app

Use the compatible version listed above, choose this source in Discover on your primary phone, review the sources, schedule and notification preference, then confirm the free subscription. No computer, CLI or scan is needed. The phone creates a private Topic; a browser needs separate authorization for that Topic. A preview is not a received message.

## Slots and stopping delivery

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

## Public content and private messages

The publisher knows its public content and necessary subscription routing and schedule. This grants no access to private agent messages. Your phone authorizes each Topic and sender, and deliveries are encrypted for authorized recipient devices. Ntfyx is independent of the listed sources.

- [Browse all sources](https://ntfyx.me/plugins/)

## Start with a use case

From agent questions to weekly subscriptions and website alerts, start with a use case. See what reaches your phone, then follow the steps to connect.

- [Explore all use cases](https://ntfyx.me/use-cases/)

---

# GitHub Trending · monthly — Ntfyx notification sources

Source: https://ntfyx.me/plugins/github-trending-monthly/

Updated: 2026-10-17

GitHub’s official monthly Trending window, with repository links and stars gained during that window.

## Content and its actual source

The source reads GitHub’s official Trending page with since=monthly. Up to five repositories retain the displayed order and period star gain. This is the rolling-window snapshot observed at collection, not a search sorted by lifetime stars or an independently reconstructed calendar-period total. Repository descriptions keep their original language. Source failures or HTML changes do not produce an invented replacement ranking.

- [GitHub official Trending · monthly](https://github.com/trending?since=monthly)

## Frequency and delivery

Delivered on the first day of each month at your chosen local time and time zone. The cloud collects rolling snapshots daily for different time zones. Scheduled checks and delivery may be delayed; the observation date remains visible.

- [Source collection health (public, read-only)](https://api.ntfyx.me/v1/market/health)

## Phone availability

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Technology digest works from 1.2.0 and the expanded catalog needs 1.3 or later. Updated opportunity-source explanations arrive with 1.4; check your installed version. Web browses the public catalog and previews; the primary phone still confirms subscriptions.

- [Current public downloads](https://ntfyx.me/download/)

## Subscribe in a compatible app

Use the compatible version listed above, choose this source in Discover on your primary phone, review the sources, schedule and notification preference, then confirm the free subscription. No computer, CLI or scan is needed. The phone creates a private Topic; a browser needs separate authorization for that Topic. A preview is not a received message.

## Slots and stopping delivery

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

## Public content and private messages

The publisher knows its public content and necessary subscription routing and schedule. This grants no access to private agent messages. Your phone authorizes each Topic and sender, and deliveries are encrypted for authorized recipient devices. Ntfyx is independent of the listed sources.

- [Browse all sources](https://ntfyx.me/plugins/)

---

# Codex reset announcements — Ntfyx notification sources

Source: https://ntfyx.me/plugins/codex-reset-alerts/

Updated: 2026-10-17

Codex reset announcements from Tibo (@thsottiaux) on X, separate from your personal Codex usage.

## Content and its actual source

Only verified original posts from the stated account are eligible. A public announcement does not read, measure or prove that your personal quota has reset. Ntfyx does not obtain your Codex login or redeem credits for you. The existing local CLI usage watcher is a separate feature that reads usage on your own computer. Ntfyx is independent of the source account and OpenAI.

- [Tibo (@thsottiaux) on X](https://x.com/thsottiaux)

## Frequency and delivery

Event-based announcements, checked every five minutes rather than a real-time stream. Source availability, collection, scheduling and push delivery can add delays. Without a matching verified post, no reset alert is invented. New subscriptions do not replay a backlog.

- [Source collection health (public, read-only)](https://api.ntfyx.me/v1/market/health)

## Phone availability

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Technology digest works from 1.2.0 and the expanded catalog needs 1.3 or later. Updated opportunity-source explanations arrive with 1.4; check your installed version. Web browses the public catalog and previews; the primary phone still confirms subscriptions.

- [Current public downloads](https://ntfyx.me/download/)

## Subscribe in a compatible app

Use the compatible version listed above, choose this source in Discover on your primary phone, review the sources, schedule and notification preference, then confirm the free subscription. No computer, CLI or scan is needed. The phone creates a private Topic; a browser needs separate authorization for that Topic. A preview is not a received message.

## Slots and stopping delivery

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

## Public content and private messages

The publisher knows its public content and necessary subscription routing and schedule. This grants no access to private agent messages. Your phone authorizes each Topic and sender, and deliveries are encrypted for authorized recipient devices. Ntfyx is independent of the listed sources.

- [Browse all sources](https://ntfyx.me/plugins/)
- [Separate feature: local Codex usage watcher](https://ntfyx.me/docs/codex-usage-alerts/)

---

# VPS restock alerts — Ntfyx notification sources

Source: https://ntfyx.me/plugins/vps-restock-alerts/

Updated: 2026-10-17

Recently verified OVH VPS stockouts becoming available, with exact model and datacenter scope.

## Content and its actual source

Checks OVH 2027 models 1–4 at 11 specified datacenters, Linux with local storage only, through the official aggregated availability API. An alert requires a recent explicit unavailable-to-available transition. A first observation of available stock establishes a baseline and sends no restock claim. This is not a monitor for every provider, product or storage option. Availability can change before you open the original order page.

- [OVH official availability API](https://ca.api.ovh.com/v1/vps/order/rule/datacenter/aggregated)
- [OVH VPS](https://www.ovhcloud.com/en/vps/)

## Frequency and delivery

Checked about every five minutes. Collection and delivery can be delayed; an alert does not reserve stock.

- [Source collection health (public, read-only)](https://api.ntfyx.me/v1/market/health)

## Phone availability

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Technology digest works from 1.2.0 and the expanded catalog needs 1.3 or later. Updated opportunity-source explanations arrive with 1.4; check your installed version. Web browses the public catalog and previews; the primary phone still confirms subscriptions.

- [Current public downloads](https://ntfyx.me/download/)

## Subscribe in a compatible app

Use the compatible version listed above, choose this source in Discover on your primary phone, review the sources, schedule and notification preference, then confirm the free subscription. No computer, CLI or scan is needed. The phone creates a private Topic; a browser needs separate authorization for that Topic. A preview is not a received message.

## Slots and stopping delivery

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

## Public content and private messages

The publisher knows its public content and necessary subscription routing and schedule. This grants no access to private agent messages. Your phone authorizes each Topic and sender, and deliveries are encrypted for authorized recipient devices. Ntfyx is independent of the listed sources.

- [Browse all sources](https://ntfyx.me/plugins/)

---

# Official AI benefits — Ntfyx notification sources

Source: https://ntfyx.me/plugins/ai-official-benefits/

Updated: 2026-10-17

Human-reviewed OpenAI and Anthropic benefits with official eligibility, region and deadline details.

## Content and its actual source

This is a human-reviewed official campaign list, not an automated detector of every promotion. A campaign needs an approved official-source record with its benefit, eligibility, regions and deadline verified. Ordinary free tiers, standing student programs without a new benefit, referrals and Codex reset announcements are excluded. There is currently no approved active campaign, so the source remains quiet. Your own eligibility is determined by the provider; Ntfyx does not apply or redeem a benefit for you.

- [OpenAI](https://openai.com/)
- [Anthropic](https://www.anthropic.com/)
- [Claude](https://claude.com/)

## Frequency and delivery

Only approved and still-active official campaigns can generate new messages. Quiet periods do not mean an undisclosed campaign was found.

- [Source collection health (public, read-only)](https://api.ntfyx.me/v1/market/health)

## Phone availability

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Technology digest works from 1.2.0 and the expanded catalog needs 1.3 or later. Updated opportunity-source explanations arrive with 1.4; check your installed version. Web browses the public catalog and previews; the primary phone still confirms subscriptions.

- [Current public downloads](https://ntfyx.me/download/)

## Subscribe in a compatible app

Use the compatible version listed above, choose this source in Discover on your primary phone, review the sources, schedule and notification preference, then confirm the free subscription. No computer, CLI or scan is needed. The phone creates a private Topic; a browser needs separate authorization for that Topic. A preview is not a received message.

## Slots and stopping delivery

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

## Public content and private messages

The publisher knows its public content and necessary subscription routing and schedule. This grants no access to private agent messages. Your phone authorizes each Topic and sender, and deliveries are encrypted for authorized recipient devices. Ntfyx is independent of the listed sources.

- [Browse all sources](https://ntfyx.me/plugins/)

---

# Free-to-keep games — Ntfyx notification sources

Source: https://ntfyx.me/plugins/free-game-giveaways/

Updated: 2026-10-17

Full paid games currently free to claim and keep, discovered through GamerPower and verified against Epic.

## Content and its actual source

GamerPower supplies candidates; Epic's official catalog verifies a full paid game is currently free to claim and keep in the supported CN or US storefront. The first release covers Epic campaigns and merges the same campaign across both regions. Demos, trials, free weekends, DLC, items and ordinary permanently free games are excluded. Check the original store for your account's eligibility and claim deadline. A notification does not claim the game for you.

- [GamerPower API](https://www.gamerpower.com/api-read)
- [Epic free games](https://store.epicgames.com/free-games)

## Frequency and delivery

Checked about every ten minutes; source data and delivery can be delayed. End dates are reported only when the official source provides them.

- [Source collection health (public, read-only)](https://api.ntfyx.me/v1/market/health)

## Phone availability

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Technology digest works from 1.2.0 and the expanded catalog needs 1.3 or later. Updated opportunity-source explanations arrive with 1.4; check your installed version. Web browses the public catalog and previews; the primary phone still confirms subscriptions.

- [Current public downloads](https://ntfyx.me/download/)

## Subscribe in a compatible app

Use the compatible version listed above, choose this source in Discover on your primary phone, review the sources, schedule and notification preference, then confirm the free subscription. No computer, CLI or scan is needed. The phone creates a private Topic; a browser needs separate authorization for that Topic. A preview is not a received message.

## Slots and stopping delivery

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

## Public content and private messages

The publisher knows its public content and necessary subscription routing and schedule. This grants no access to private agent messages. Your phone authorizes each Topic and sender, and deliveries are encrypted for authorized recipient devices. Ntfyx is independent of the listed sources.

- [Browse all sources](https://ntfyx.me/plugins/)

---

# App Store price drops to free — Ntfyx notification sources

Source: https://ntfyx.me/plugins/app-store-free/

Updated: 2026-10-17

Recent paid-to-zero download-price changes in a selected pool of 23 practical iPhone and iPad apps in CN and US.

## Content and its actual source

The selected 23-app paid utility pool is checked in the CN and US App Store storefronts through Apple's official lookup data. An alert requires a recent paid-to-zero change for the same app, storefront and currency. The scope is the download price only: in-app purchases, subscriptions and their free trials are excluded. This does not cover the entire App Store. An unknown promotion end time remains unknown; a free download does not promise that every feature is free.

- [Apple lookup](https://itunes.apple.com/lookup)
- [App Store](https://apps.apple.com/)

## Frequency and delivery

Checked hourly. Apple's cached responses can delay detection; verify the current price on the original App Store page before downloading.

- [Source collection health (public, read-only)](https://api.ntfyx.me/v1/market/health)

## Phone availability

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Technology digest works from 1.2.0 and the expanded catalog needs 1.3 or later. Updated opportunity-source explanations arrive with 1.4; check your installed version. Web browses the public catalog and previews; the primary phone still confirms subscriptions.

- [Current public downloads](https://ntfyx.me/download/)

## Subscribe in a compatible app

Use the compatible version listed above, choose this source in Discover on your primary phone, review the sources, schedule and notification preference, then confirm the free subscription. No computer, CLI or scan is needed. The phone creates a private Topic; a browser needs separate authorization for that Topic. A preview is not a received message.

## Slots and stopping delivery

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

## Public content and private messages

The publisher knows its public content and necessary subscription routing and schedule. This grants no access to private agent messages. Your phone authorizes each Topic and sender, and deliveries are encrypted for authorized recipient devices. Ntfyx is independent of the listed sources.

- [Browse all sources](https://ntfyx.me/plugins/)

---

# 基金套利通知 — Ntfyx notification sources

Source: https://ntfyx.me/plugins/cn-lof-nav-watch/

Updated: 2026-10-19

关注18只LOF的历史净值参考差价，覆盖互联网科技、黄金与贵金属、原油与能源、白银及境内股债主题，保留行情时间、净值日期与中文提醒。

## Content and its actual source

按下表关注18只精选LOF，不代表全市场覆盖或当前有套利机会。新浪提供场内价格和已披露单位净值，腾讯核价；历史净值参考差价按（场内价格÷该日期单位净值−1）计算。消息保留行情时间、净值日期和两源累计成交量，累计成交量不是可成交深度。

境内普通及白银基金参考前一个受支持内地交易日净值；QDII参考有日期的已披露净值，境外市场时差、汇率与净值滞后都可能形成差异。这不是盘中IOPV、当前申赎价格或同期估值。油气股票、原油基金和白银期货分别标注，不混为同一资产。

溢价对应待核验的申购后场内卖出路径，折价对应待核验的场内买入后赎回路径。当前申赎开放、额度、停牌与确认、转托管、可卖或可赎回、到账时间均需官网核验；新增基金费用尚未核实。佣金和滑点未计，不计算扣费后利润，不宣称套利可执行。C类不自动等于免申购费：161716官网资料仍列申购金额低于100万元的标准费率0.80%，实际渠道费率另核对。名称与正文保持中文；不覆盖ETF盘中IOPV、可转债或A/H价差。

| 主题 | 基金、代码与类型 |
| --- | --- |
| 境内行业 | 境内股票指数：白酒基金A 161725、煤炭等权A 161724、证券基金A 161720、生物医药A 161726。 |
| 境内债券 | 招商信用添利A 161713、招商双债C 161716。 |
| 互联网与科技 | 富国移动互联网A 161025（境内）；交银中国互联A 164906、易方达标普信息科技A人民币 161128、易方达纳斯达克100联接A人民币 161130（后三只为QDII）。纳指产品为ETF联接LOF，不是ETF本体。 |
| 黄金与贵金属 | 易方达黄金主题A人民币 161116、嘉实黄金 160719、汇添富黄金及贵金属A 164701。均为QDII，投资海外黄金及贵金属基金。 |
| 原油与能源 | 嘉实原油 160723、易方达原油A人民币 161129、南方原油A 501018、华宝油气A 162411。均为QDII；前三只为原油基金，华宝油气投资上游油气股票。 |
| 白银 | 国投瑞银白银期货A 161226。境内白银期货，不是现货白银。 |

- [新浪财经行情](https://hq.sinajs.cn/)
- [腾讯财经核价](https://qt.gtimg.cn/)
- [招商基金：白酒基金 LOF（161725）](https://www.cmfchina.com/web/fundDetail/161725/index.html)
- [招商基金：煤炭等权 LOF（161724）](https://www.cmfchina.com/web/fundDetail/161724/index.html)
- [招商基金：证券基金 LOF（161720）](https://www.cmfchina.com/web/fundDetail/161720/index.html)
- [招商基金：生物医药 LOF（161726）](https://www.cmfchina.com/web/fundDetail/161726/index.html)
- [招商基金：信用添利 LOF（161713）](https://www.cmfchina.com/web/fundDetail/161713/index.html)
- [招商基金：双债 LOF（161716）](https://www.cmfchina.com/web/fundDetail/161716/index.html)
- [富国基金：互联网 LOF A（161025）](https://www.fullgoal.com.cn/fundDetail/161025/index.html)
- [交银施罗德：中国互联 LOF A（164906）](https://www.fund001.com/fund/164906/index.shtml)
- [易方达：标普信息科技 LOF A人民币（161128）官方报告](https://cdn.efunds.com.cn/owch/data/bulletin/20260422/%E6%98%93%E6%96%B9%E8%BE%BE%E6%A0%87%E6%99%AE%E4%BF%A1%E6%81%AF%E7%A7%91%E6%8A%80%E6%8C%87%E6%95%B0%E8%AF%81%E5%88%B8%E6%8A%95%E8%B5%84%E5%9F%BA%E9%87%91%EF%BC%88LOF%EF%BC%892026%E5%B9%B4%E7%AC%AC1%E5%AD%A3%E5%BA%A6%E6%8A%A5%E5%91%8A.pdf)
- [易方达：纳斯达克100联接 LOF A人民币（161130）官方报告](https://cdn.efunds.com.cn/owch/data/bulletin/20260422/%E6%98%93%E6%96%B9%E8%BE%BE%E7%BA%B3%E6%96%AF%E8%BE%BE%E5%85%8B100%E4%BA%A4%E6%98%93%E5%9E%8B%E5%BC%80%E6%94%BE%E5%BC%8F%E6%8C%87%E6%95%B0%E8%AF%81%E5%88%B8%E6%8A%95%E8%B5%84%E5%9F%BA%E9%87%91%E8%81%94%E6%8E%A5%E5%9F%BA%E9%87%91%EF%BC%88LOF%EF%BC%892026%E5%B9%B4%E7%AC%AC1%E5%AD%A3%E5%BA%A6%E6%8A%A5%E5%91%8A.pdf)
- [易方达：黄金主题 LOF A人民币（161116）历史公告](https://cdn.efunds.com.cn/owch/data/bulletin/20260127/%E6%98%93%E6%96%B9%E8%BE%BE%E9%BB%84%E9%87%91%E4%B8%BB%E9%A2%98%E8%AF%81%E5%88%B8%E6%8A%95%E8%B5%84%E5%9F%BA%E9%87%91%EF%BC%88LOF%EF%BC%89A%E7%B1%BB%E4%BA%BA%E6%B0%91%E5%B8%81%E4%BB%BD%E9%A2%9D%E6%9A%82%E5%81%9C%E7%94%B3%E8%B4%AD%E5%8F%8A%E5%AE%9A%E6%9C%9F%E5%AE%9A%E9%A2%9D%E6%8A%95%E8%B5%84%E4%B8%9A%E5%8A%A1%E7%9A%84%E5%85%AC%E5%91%8A.pdf)
- [嘉实基金：黄金 LOF（160719）](https://www.jsfund.cn/main/fund/160719/fundNav.shtml)
- [汇添富：黄金及贵金属 LOF A（164701）](https://www.99fund.com/main/products/pofund/164701/fundgk.shtml)
- [上交所：南方原油 LOF A（501018）](https://star.sse.com.cn/assortment/fund/list/starlof/basic/index.shtml?FUNDID=501018)
- [嘉实基金：原油 LOF（160723）](https://www.jsfund.cn/main/fund/160723/fundNav.shtml)
- [易方达：原油 LOF A人民币（161129）官方报告](https://static.cninfo.com.cn/finalpage/2026-07-21/1225432653.PDF)
- [华宝基金：油气 LOF A（162411）历史公告](https://www.fsfund.com/static/notice/2026/02/09/4488dc60-416f-4fcb-bc24-84005fc60c59/%E5%8D%8E%E5%AE%9D%E6%A0%87%E6%99%AE%E7%9F%B3%E6%B2%B9%E5%A4%A9%E7%84%B6%E6%B0%94%E4%B8%8A%E6%B8%B8%E8%82%A1%E7%A5%A8%E6%8C%87%E6%95%B0%E8%AF%81%E5%88%B8%E6%8A%95%E8%B5%84%E5%9F%BA%E9%87%91%28LOF%29%E8%B0%83%E6%95%B4%E5%A4%A7%E9%A2%9D%E7%94%B3%E8%B4%AD%EF%BC%88%E5%90%AB%E5%AE%9A%E6%8A%95%EF%BC%89%E9%87%91%E9%A2%9D%E4%B8%8A%E9%99%90%E7%9A%84%E5%85%AC%E5%91%8A.pdf)
- [深交所：国投白银 LOF A（161226）历史公告](https://disc.static.szse.cn/disc/disk03/finalpage/2026-08-07/43e6572f-15eb-4377-bcbb-c1d9efb73209.PDF)

## Frequency and delivery

在支持的中国内地交易时段约每五分钟检查。同方向折价或溢价幅度达到5%，经两个独立计划样本确认后提醒；幅度回落至3%或以下才重新待触发，至少冷却30分钟。两次采样不表示期间持续存在差价。首次采集、净值基准变化、日切或数据中断后静默建立基线，不补发历史机会；初次已在高差价区间也不立即提醒，须先回落至3%或以下再重新触发。价格缺失、过期、两源不一致或休市时保持静默。采集与送达可能延迟，公开预览不等于已收到通知。

- [Source collection health (public, read-only)](https://api.ntfyx.me/v1/market/health)

## Phone availability

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Technology digest works from 1.2.0 and the expanded catalog needs 1.3 or later. Updated opportunity-source explanations arrive with 1.4; check your installed version. Web browses the public catalog and previews; the primary phone still confirms subscriptions.

- [Current public downloads](https://ntfyx.me/download/)

## Subscribe in a compatible app

Use the compatible version listed above, choose this source in Discover on your primary phone, review the sources, schedule and notification preference, then confirm the free subscription. No computer, CLI or scan is needed. The phone creates a private Topic; a browser needs separate authorization for that Topic. A preview is not a received message.

## Slots and stopping delivery

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

## Public content and private messages

The publisher knows its public content and necessary subscription routing and schedule. This grants no access to private agent messages. Your phone authorizes each Topic and sender, and deliveries are encrypted for authorized recipient devices. Ntfyx is independent of the listed sources.

- [Browse all sources](https://ntfyx.me/plugins/)

---

# Notification marketplace: free updates you choose — Ntfyx

Source: https://ntfyx.me/plugins/

Updated: 2026-10-19

Compare 11 official sources for technology, products, GitHub, Codex, VPS, AI benefits, games, App Store price drops and Chinese fund arbitrage-gap alerts. Check coverage, schedules and free subscriptions.

## Choose the public updates you want

Opt-in sources appear alongside your agent and script messages in Inbox. They do not use private conversations to generate updates or insert ads. The 11 notification sources differ in content and schedule.

- [Technology digest](https://ntfyx.me/plugins/tech-digest/)
- [New product digest](https://ntfyx.me/plugins/product-launches/)
- [GitHub Trending · daily](https://ntfyx.me/plugins/github-trending-daily/)
- [GitHub Trending · weekly](https://ntfyx.me/plugins/github-trending-weekly/)
- [GitHub Trending · monthly](https://ntfyx.me/plugins/github-trending-monthly/)
- [Codex reset announcements](https://ntfyx.me/plugins/codex-reset-alerts/)
- [VPS restock alerts](https://ntfyx.me/plugins/vps-restock-alerts/)
- [Official AI benefits](https://ntfyx.me/plugins/ai-official-benefits/)
- [Free-to-keep games](https://ntfyx.me/plugins/free-game-giveaways/)
- [App Store price drops to free](https://ntfyx.me/plugins/app-store-free/)
- [基金套利通知](https://ntfyx.me/plugins/cn-lof-nav-watch/)

## Sources and schedules

Digests contain up to five items. GitHub retains its official rolling window and observation date; public announcements do not establish personal quota changes. Digest schedules use your chosen time zone. Chinese fund trading hours and quote times use China Standard Time; delivery may be delayed.

| Source | Actual origin | Delivery |
| --- | --- | --- |
| Technology digest | Hacker News official API | Daily |
| New product digest | Show HN · official Hacker News API | Daily |
| GitHub Trending · daily | GitHub official Trending · daily | Daily |
| GitHub Trending · weekly | GitHub official Trending · weekly | Mondays |
| GitHub Trending · monthly | GitHub official Trending · monthly | First day of each month |
| Codex reset announcements | Original X posts by Tibo @thsottiaux | Events · five-minute checks |
| VPS restock alerts | OVH official aggregated VPS availability | Events · about five-minute checks |
| Official AI benefits | Reviewed OpenAI / Anthropic official campaign records | Reviewed campaign events |
| Free-to-keep games | GamerPower discovery + Epic official verification | Events · about ten-minute checks |
| App Store price drops to free | Apple official lookup · 23 selected paid utility apps | Events · hourly checks |
| 基金套利通知 | 新浪单位净值及价格＋腾讯核价 | 交易时段约五分钟检查 · 中文 |

## Current phone versions and new sources

Current public phone releases are iPhone 1.8.3 and Android 1.8.2. Technology digest works from 1.2.0 and the expanded catalog needs 1.3 or later. Updated opportunity-source explanations arrive with 1.4; check your installed version. Web browses the public catalog and previews; the primary phone still confirms subscriptions.

- [Current public downloads](https://ntfyx.me/download/)
- [Open Web public catalog](https://app.ntfyx.me/)

## Free subscriptions and delivery controls

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade.

- [Source collection health (public, read-only)](https://api.ntfyx.me/v1/market/health)

## Submit your own notification source

Run your collector and submit metadata and a sample without an account or credential. Each later notification also waits for its own in-app 确定/拒绝 decision before publication. Existing built-in official collectors keep their approved automatic schedules and app subscription workflow.

- [Submission guide, script and schema](https://ntfyx.me/docs/plugin-development/)

---

# 新产品日报 — Ntfyx 通知源

Source: https://ntfyx.me/zh/plugins/product-launches/

Updated: 2026-10-17

关注 Show HN 新近发布的产品和项目，附原始网站与讨论链接。

## 内容与真实来源

通过 Hacker News 官方公开 API，选取过去 48 小时最多五条 Show HN 产品或项目，按采集时的分数排序。这是该社区投稿的快照，不是 Product Hunt 榜单，不是全部新产品数据库，也不代表产品背书。不抓取文章正文。

- [Show HN](https://news.ycombinator.com/show)
- [Hacker News official API](https://github.com/HackerNews/API)

## 频率与投递

每天按你选择的当地时间投递一条摘要。新订阅接收后续发布，不导入旧帖；计划采集和投递可能延迟。

- [来源采集状态（公开只读）](https://api.ntfyx.me/v1/market/health)

## 手机可用范围

当前公开手机版本为 iPhone 1.8.3、Android 1.8.2。科技热点从 1.2.0 支持，扩展目录需要 1.3 或更高版本。新的机会源说明随 1.4 更新提供；请核对所装版本。Web 可浏览公开目录和预览，订阅仍由主手机确认。

- [当前公开下载](https://ntfyx.me/zh/download/)

## 在兼容版本中订阅

使用上方列出的兼容版本，在主手机的“发现”选择此源，核对来源、时间和提醒偏好，再确认免费订阅。无需电脑、CLI 或扫码。手机创建私有 Topic；浏览器需要为这个 Topic 单独授权。公开预览不等于已经收到消息。

## 名额与停止接收

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。

## 公开内容与私人消息

托管发布器知道自己发布的公开内容和必要订阅路由、时间设置；这不会授予其读取私人 Agent 消息的权限。手机授权每个 Topic 与发送身份，内容向合法接收设备加密。Ntfyx 与所列来源无隶属关系。

- [浏览全部通知源](https://ntfyx.me/zh/plugins/)

---

# GitHub 趋势日报 — Ntfyx 通知源

Source: https://ntfyx.me/zh/plugins/github-trending-daily/

Updated: 2026-10-17

GitHub 官方日趋势窗口快照，保留仓库原始链接与期间新增 star 说明。

## 内容与真实来源

读取 GitHub 官方 Trending 页的 since=daily 榜单，最多五个仓库保留原站顺序和期间新增 star。这是采集时的滚动窗口快照，不是按累计 star 排序的搜索结果，也不是自行重建的日历周期总量。仓库简介保留原始语言；来源失败或 HTML 结构改变时，不编造替代榜单。

- [GitHub official Trending · daily](https://github.com/trending?since=daily)

## 频率与投递

每日按你选择的时区与当地时间投递。云端每天采集滚动快照，供不同时区使用当前可用的一期；计划检查与投递可能延迟，并保留采集日期。

- [来源采集状态（公开只读）](https://api.ntfyx.me/v1/market/health)

## 手机可用范围

当前公开手机版本为 iPhone 1.8.3、Android 1.8.2。科技热点从 1.2.0 支持，扩展目录需要 1.3 或更高版本。新的机会源说明随 1.4 更新提供；请核对所装版本。Web 可浏览公开目录和预览，订阅仍由主手机确认。

- [当前公开下载](https://ntfyx.me/zh/download/)

## 在兼容版本中订阅

使用上方列出的兼容版本，在主手机的“发现”选择此源，核对来源、时间和提醒偏好，再确认免费订阅。无需电脑、CLI 或扫码。手机创建私有 Topic；浏览器需要为这个 Topic 单独授权。公开预览不等于已经收到消息。

## 名额与停止接收

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。

## 公开内容与私人消息

托管发布器知道自己发布的公开内容和必要订阅路由、时间设置；这不会授予其读取私人 Agent 消息的权限。手机授权每个 Topic 与发送身份，内容向合法接收设备加密。Ntfyx 与所列来源无隶属关系。

- [浏览全部通知源](https://ntfyx.me/zh/plugins/)

---

# GitHub 趋势周报 — Ntfyx 通知源

Source: https://ntfyx.me/zh/plugins/github-trending-weekly/

Updated: 2026-10-25

GitHub 官方周趋势窗口快照，保留仓库原始链接与期间新增 star 说明。

## 内容与真实来源

读取 GitHub 官方 Trending 页的 since=weekly 榜单，最多五个仓库保留原站顺序和期间新增 star。这是采集时的滚动窗口快照，不是按累计 star 排序的搜索结果，也不是自行重建的日历周期总量。仓库简介保留原始语言；来源失败或 HTML 结构改变时，不编造替代榜单。

- [GitHub official Trending · weekly](https://github.com/trending?since=weekly)

## 频率与投递

每周一按你选择的时区与当地时间投递。云端每天采集滚动快照，供不同时区使用当前可用的一期；计划检查与投递可能延迟，并保留采集日期。

- [来源采集状态（公开只读）](https://api.ntfyx.me/v1/market/health)

## 手机可用范围

当前公开手机版本为 iPhone 1.8.3、Android 1.8.2。科技热点从 1.2.0 支持，扩展目录需要 1.3 或更高版本。新的机会源说明随 1.4 更新提供；请核对所装版本。Web 可浏览公开目录和预览，订阅仍由主手机确认。

- [当前公开下载](https://ntfyx.me/zh/download/)

## 在兼容版本中订阅

使用上方列出的兼容版本，在主手机的“发现”选择此源，核对来源、时间和提醒偏好，再确认免费订阅。无需电脑、CLI 或扫码。手机创建私有 Topic；浏览器需要为这个 Topic 单独授权。公开预览不等于已经收到消息。

## 名额与停止接收

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。

## 公开内容与私人消息

托管发布器知道自己发布的公开内容和必要订阅路由、时间设置；这不会授予其读取私人 Agent 消息的权限。手机授权每个 Topic 与发送身份，内容向合法接收设备加密。Ntfyx 与所列来源无隶属关系。

- [浏览全部通知源](https://ntfyx.me/zh/plugins/)

## 按使用场景开始

从 Agent 等你回答，到每周订阅和网站异常，选一个场景开始。看手机会收到什么，再按步骤接好。

- [查看全部案例](https://ntfyx.me/zh/use-cases/)

---

# GitHub 趋势月报 — Ntfyx 通知源

Source: https://ntfyx.me/zh/plugins/github-trending-monthly/

Updated: 2026-10-17

GitHub 官方月趋势窗口快照，保留仓库原始链接与期间新增 star 说明。

## 内容与真实来源

读取 GitHub 官方 Trending 页的 since=monthly 榜单，最多五个仓库保留原站顺序和期间新增 star。这是采集时的滚动窗口快照，不是按累计 star 排序的搜索结果，也不是自行重建的日历周期总量。仓库简介保留原始语言；来源失败或 HTML 结构改变时，不编造替代榜单。

- [GitHub official Trending · monthly](https://github.com/trending?since=monthly)

## 频率与投递

每月 1 日按你选择的时区与当地时间投递。云端每天采集滚动快照，供不同时区使用当前可用的一期；计划检查与投递可能延迟，并保留采集日期。

- [来源采集状态（公开只读）](https://api.ntfyx.me/v1/market/health)

## 手机可用范围

当前公开手机版本为 iPhone 1.8.3、Android 1.8.2。科技热点从 1.2.0 支持，扩展目录需要 1.3 或更高版本。新的机会源说明随 1.4 更新提供；请核对所装版本。Web 可浏览公开目录和预览，订阅仍由主手机确认。

- [当前公开下载](https://ntfyx.me/zh/download/)

## 在兼容版本中订阅

使用上方列出的兼容版本，在主手机的“发现”选择此源，核对来源、时间和提醒偏好，再确认免费订阅。无需电脑、CLI 或扫码。手机创建私有 Topic；浏览器需要为这个 Topic 单独授权。公开预览不等于已经收到消息。

## 名额与停止接收

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。

## 公开内容与私人消息

托管发布器知道自己发布的公开内容和必要订阅路由、时间设置；这不会授予其读取私人 Agent 消息的权限。手机授权每个 Topic 与发送身份，内容向合法接收设备加密。Ntfyx 与所列来源无隶属关系。

- [浏览全部通知源](https://ntfyx.me/zh/plugins/)

---

# Codex reset 公告 — Ntfyx 通知源

Source: https://ntfyx.me/zh/plugins/codex-reset-alerts/

Updated: 2026-10-17

关注 Tibo（@thsottiaux）在 X 发布的 Codex reset 公告，与个人 Codex 用量监控分开。

## 内容与真实来源

仅转发所列账号经核实的原始公告。公开帖子不会读取、测量或证明你的个人额度已重置；Ntfyx 不获取 Codex 登录，也不会代你兑换额度。已有本地 CLI 用量监控是在自己电脑读取用量的另一项功能。Ntfyx 与所列账号及 OpenAI 无隶属关系。

- [Tibo (@thsottiaux) on X](https://x.com/thsottiaux)

## 频率与投递

按公告事件更新，每五分钟采集一次，不是实时流。来源可用性、采集、调度与推送均可能造成延迟；没有匹配且核实的原帖，就不编造重置提醒。新订阅不批量补发旧公告。

- [来源采集状态（公开只读）](https://api.ntfyx.me/v1/market/health)

## 手机可用范围

当前公开手机版本为 iPhone 1.8.3、Android 1.8.2。科技热点从 1.2.0 支持，扩展目录需要 1.3 或更高版本。新的机会源说明随 1.4 更新提供；请核对所装版本。Web 可浏览公开目录和预览，订阅仍由主手机确认。

- [当前公开下载](https://ntfyx.me/zh/download/)

## 在兼容版本中订阅

使用上方列出的兼容版本，在主手机的“发现”选择此源，核对来源、时间和提醒偏好，再确认免费订阅。无需电脑、CLI 或扫码。手机创建私有 Topic；浏览器需要为这个 Topic 单独授权。公开预览不等于已经收到消息。

## 名额与停止接收

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。

## 公开内容与私人消息

托管发布器知道自己发布的公开内容和必要订阅路由、时间设置；这不会授予其读取私人 Agent 消息的权限。手机授权每个 Topic 与发送身份，内容向合法接收设备加密。Ntfyx 与所列来源无隶属关系。

- [浏览全部通知源](https://ntfyx.me/zh/plugins/)
- [另一个功能：本地 Codex 用量监控](https://ntfyx.me/docs/codex-usage-alerts/)

---

# VPS 补货 — Ntfyx 通知源

Source: https://ntfyx.me/zh/plugins/vps-restock-alerts/

Updated: 2026-10-17

近期核实缺货的 OVH VPS 恢复有货，范围限定型号与机房。

## 内容与真实来源

通过 OVH 官方聚合库存 API 检查 2027 model1–4 的 11 个指定机房，仅 Linux 与本地存储。只有近期明确缺货转为有货才提醒；首次观察为有货只建立基线，不声称补货。不覆盖全部供应商、产品或存储选项，打开原始下单页前库存可能已变化。

- [OVH official availability API](https://ca.api.ovh.com/v1/vps/order/rule/datacenter/aggregated)
- [OVH VPS](https://www.ovhcloud.com/en/vps/)

## 频率与投递

约每五分钟检查，采集与投递可能延迟；通知不会锁定库存。

- [来源采集状态（公开只读）](https://api.ntfyx.me/v1/market/health)

## 手机可用范围

当前公开手机版本为 iPhone 1.8.3、Android 1.8.2。科技热点从 1.2.0 支持，扩展目录需要 1.3 或更高版本。新的机会源说明随 1.4 更新提供；请核对所装版本。Web 可浏览公开目录和预览，订阅仍由主手机确认。

- [当前公开下载](https://ntfyx.me/zh/download/)

## 在兼容版本中订阅

使用上方列出的兼容版本，在主手机的“发现”选择此源，核对来源、时间和提醒偏好，再确认免费订阅。无需电脑、CLI 或扫码。手机创建私有 Topic；浏览器需要为这个 Topic 单独授权。公开预览不等于已经收到消息。

## 名额与停止接收

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。

## 公开内容与私人消息

托管发布器知道自己发布的公开内容和必要订阅路由、时间设置；这不会授予其读取私人 Agent 消息的权限。手机授权每个 Topic 与发送身份，内容向合法接收设备加密。Ntfyx 与所列来源无隶属关系。

- [浏览全部通知源](https://ntfyx.me/zh/plugins/)

---

# 官方 AI 福利 — Ntfyx 通知源

Source: https://ntfyx.me/zh/plugins/ai-official-benefits/

Updated: 2026-10-17

人工审核的 OpenAI 与 Anthropic 官方福利，核验资格、地区和期限。

## 内容与真实来源

这是人工审核的官方活动清单，不是自动发现所有优惠的雷达。活动须有获批的官方来源记录，并核实福利内容、资格、地区与截止时间。不包含常规免费层、没有新增福利的长期学生计划、推荐奖励或 Codex reset 公告。目前没有获批且仍有效的活动，因此保持安静。个人资格由提供方判断，Ntfyx 不代替申请或领取。

- [OpenAI](https://openai.com/)
- [Anthropic](https://www.anthropic.com/)
- [Claude](https://claude.com/)

## 频率与投递

只有获批且仍有效的官方活动才会触发新消息；保持安静不代表发现了未公开的活动。

- [来源采集状态（公开只读）](https://api.ntfyx.me/v1/market/health)

## 手机可用范围

当前公开手机版本为 iPhone 1.8.3、Android 1.8.2。科技热点从 1.2.0 支持，扩展目录需要 1.3 或更高版本。新的机会源说明随 1.4 更新提供；请核对所装版本。Web 可浏览公开目录和预览，订阅仍由主手机确认。

- [当前公开下载](https://ntfyx.me/zh/download/)

## 在兼容版本中订阅

使用上方列出的兼容版本，在主手机的“发现”选择此源，核对来源、时间和提醒偏好，再确认免费订阅。无需电脑、CLI 或扫码。手机创建私有 Topic；浏览器需要为这个 Topic 单独授权。公开预览不等于已经收到消息。

## 名额与停止接收

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。

## 公开内容与私人消息

托管发布器知道自己发布的公开内容和必要订阅路由、时间设置；这不会授予其读取私人 Agent 消息的权限。手机授权每个 Topic 与发送身份，内容向合法接收设备加密。Ntfyx 与所列来源无隶属关系。

- [浏览全部通知源](https://ntfyx.me/zh/plugins/)

---

# 正版游戏限免 — Ntfyx 通知源

Source: https://ntfyx.me/zh/plugins/free-game-giveaways/

Updated: 2026-10-17

通过 GamerPower 发现候选，再由 Epic 官方复核完整付费游戏的免费领取与保留规则。

## 内容与真实来源

GamerPower 提供候选，由 Epic 官方目录复核完整付费游戏在支持的中国或美国区处于免费领取、可保留的窗口。首期覆盖 Epic 活动，相同活动在两区合并。排除试玩、试用、免费周末、DLC、道具和常驻免费游戏。请在原始商店核对账号资格与领取截止时间，通知不会代替领取。

- [GamerPower API](https://www.gamerpower.com/api-read)
- [Epic free games](https://store.epicgames.com/free-games)

## 频率与投递

约每十分钟检查，来源数据与送达可能延迟；只有官方来源提供结束时间时才展示。

- [来源采集状态（公开只读）](https://api.ntfyx.me/v1/market/health)

## 手机可用范围

当前公开手机版本为 iPhone 1.8.3、Android 1.8.2。科技热点从 1.2.0 支持，扩展目录需要 1.3 或更高版本。新的机会源说明随 1.4 更新提供；请核对所装版本。Web 可浏览公开目录和预览，订阅仍由主手机确认。

- [当前公开下载](https://ntfyx.me/zh/download/)

## 在兼容版本中订阅

使用上方列出的兼容版本，在主手机的“发现”选择此源，核对来源、时间和提醒偏好，再确认免费订阅。无需电脑、CLI 或扫码。手机创建私有 Topic；浏览器需要为这个 Topic 单独授权。公开预览不等于已经收到消息。

## 名额与停止接收

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。

## 公开内容与私人消息

托管发布器知道自己发布的公开内容和必要订阅路由、时间设置；这不会授予其读取私人 Agent 消息的权限。手机授权每个 Topic 与发送身份，内容向合法接收设备加密。Ntfyx 与所列来源无隶属关系。

- [浏览全部通知源](https://ntfyx.me/zh/plugins/)

---

# App Store 限免 — Ntfyx 通知源

Source: https://ntfyx.me/zh/plugins/app-store-free/

Updated: 2026-10-17

集中关注国区、美区 23 款精选 iPhone/iPad 实用付费软件的近期付费转零下载价变化。

## 内容与真实来源

通过 Apple 官方查询数据，检查国区和美区 23 款精选实用付费软件池。只有同一软件、同区、同币种近期付费转零才通知。仅覆盖下载价格，排除内购、订阅及其免费试用；不覆盖整个 App Store。促销结束时间未知时保持未知，免费下载不代表所有功能均免费。

- [Apple lookup](https://itunes.apple.com/lookup)
- [App Store](https://apps.apple.com/)

## 频率与投递

每小时检查，Apple 缓存可能延迟发现；下载前请在原始 App Store 页面核对当前价格。

- [来源采集状态（公开只读）](https://api.ntfyx.me/v1/market/health)

## 手机可用范围

当前公开手机版本为 iPhone 1.8.3、Android 1.8.2。科技热点从 1.2.0 支持，扩展目录需要 1.3 或更高版本。新的机会源说明随 1.4 更新提供；请核对所装版本。Web 可浏览公开目录和预览，订阅仍由主手机确认。

- [当前公开下载](https://ntfyx.me/zh/download/)

## 在兼容版本中订阅

使用上方列出的兼容版本，在主手机的“发现”选择此源，核对来源、时间和提醒偏好，再确认免费订阅。无需电脑、CLI 或扫码。手机创建私有 Topic；浏览器需要为这个 Topic 单独授权。公开预览不等于已经收到消息。

## 名额与停止接收

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。

## 公开内容与私人消息

托管发布器知道自己发布的公开内容和必要订阅路由、时间设置；这不会授予其读取私人 Agent 消息的权限。手机授权每个 Topic 与发送身份，内容向合法接收设备加密。Ntfyx 与所列来源无隶属关系。

- [浏览全部通知源](https://ntfyx.me/zh/plugins/)

---

# 基金套利通知 — Ntfyx 通知源

Source: https://ntfyx.me/zh/plugins/cn-lof-nav-watch/

Updated: 2026-10-19

关注18只LOF的历史净值参考差价，覆盖互联网科技、黄金与贵金属、原油与能源、白银及境内股债主题，保留行情时间、净值日期与中文提醒。

## 内容与真实来源

按下表关注18只精选LOF，不代表全市场覆盖或当前有套利机会。新浪提供场内价格和已披露单位净值，腾讯核价；历史净值参考差价按（场内价格÷该日期单位净值−1）计算。消息保留行情时间、净值日期和两源累计成交量，累计成交量不是可成交深度。

境内普通及白银基金参考前一个受支持内地交易日净值；QDII参考有日期的已披露净值，境外市场时差、汇率与净值滞后都可能形成差异。这不是盘中IOPV、当前申赎价格或同期估值。油气股票、原油基金和白银期货分别标注，不混为同一资产。

溢价对应待核验的申购后场内卖出路径，折价对应待核验的场内买入后赎回路径。当前申赎开放、额度、停牌与确认、转托管、可卖或可赎回、到账时间均需官网核验；新增基金费用尚未核实。佣金和滑点未计，不计算扣费后利润，不宣称套利可执行。C类不自动等于免申购费：161716官网资料仍列申购金额低于100万元的标准费率0.80%，实际渠道费率另核对。名称与正文保持中文；不覆盖ETF盘中IOPV、可转债或A/H价差。

| 主题 | 基金、代码与类型 |
| --- | --- |
| 境内行业 | 境内股票指数：白酒基金A 161725、煤炭等权A 161724、证券基金A 161720、生物医药A 161726。 |
| 境内债券 | 招商信用添利A 161713、招商双债C 161716。 |
| 互联网与科技 | 富国移动互联网A 161025（境内）；交银中国互联A 164906、易方达标普信息科技A人民币 161128、易方达纳斯达克100联接A人民币 161130（后三只为QDII）。纳指产品为ETF联接LOF，不是ETF本体。 |
| 黄金与贵金属 | 易方达黄金主题A人民币 161116、嘉实黄金 160719、汇添富黄金及贵金属A 164701。均为QDII，投资海外黄金及贵金属基金。 |
| 原油与能源 | 嘉实原油 160723、易方达原油A人民币 161129、南方原油A 501018、华宝油气A 162411。均为QDII；前三只为原油基金，华宝油气投资上游油气股票。 |
| 白银 | 国投瑞银白银期货A 161226。境内白银期货，不是现货白银。 |

- [新浪财经行情](https://hq.sinajs.cn/)
- [腾讯财经核价](https://qt.gtimg.cn/)
- [招商基金：白酒基金 LOF（161725）](https://www.cmfchina.com/web/fundDetail/161725/index.html)
- [招商基金：煤炭等权 LOF（161724）](https://www.cmfchina.com/web/fundDetail/161724/index.html)
- [招商基金：证券基金 LOF（161720）](https://www.cmfchina.com/web/fundDetail/161720/index.html)
- [招商基金：生物医药 LOF（161726）](https://www.cmfchina.com/web/fundDetail/161726/index.html)
- [招商基金：信用添利 LOF（161713）](https://www.cmfchina.com/web/fundDetail/161713/index.html)
- [招商基金：双债 LOF（161716）](https://www.cmfchina.com/web/fundDetail/161716/index.html)
- [富国基金：互联网 LOF A（161025）](https://www.fullgoal.com.cn/fundDetail/161025/index.html)
- [交银施罗德：中国互联 LOF A（164906）](https://www.fund001.com/fund/164906/index.shtml)
- [易方达：标普信息科技 LOF A人民币（161128）官方报告](https://cdn.efunds.com.cn/owch/data/bulletin/20260422/%E6%98%93%E6%96%B9%E8%BE%BE%E6%A0%87%E6%99%AE%E4%BF%A1%E6%81%AF%E7%A7%91%E6%8A%80%E6%8C%87%E6%95%B0%E8%AF%81%E5%88%B8%E6%8A%95%E8%B5%84%E5%9F%BA%E9%87%91%EF%BC%88LOF%EF%BC%892026%E5%B9%B4%E7%AC%AC1%E5%AD%A3%E5%BA%A6%E6%8A%A5%E5%91%8A.pdf)
- [易方达：纳斯达克100联接 LOF A人民币（161130）官方报告](https://cdn.efunds.com.cn/owch/data/bulletin/20260422/%E6%98%93%E6%96%B9%E8%BE%BE%E7%BA%B3%E6%96%AF%E8%BE%BE%E5%85%8B100%E4%BA%A4%E6%98%93%E5%9E%8B%E5%BC%80%E6%94%BE%E5%BC%8F%E6%8C%87%E6%95%B0%E8%AF%81%E5%88%B8%E6%8A%95%E8%B5%84%E5%9F%BA%E9%87%91%E8%81%94%E6%8E%A5%E5%9F%BA%E9%87%91%EF%BC%88LOF%EF%BC%892026%E5%B9%B4%E7%AC%AC1%E5%AD%A3%E5%BA%A6%E6%8A%A5%E5%91%8A.pdf)
- [易方达：黄金主题 LOF A人民币（161116）历史公告](https://cdn.efunds.com.cn/owch/data/bulletin/20260127/%E6%98%93%E6%96%B9%E8%BE%BE%E9%BB%84%E9%87%91%E4%B8%BB%E9%A2%98%E8%AF%81%E5%88%B8%E6%8A%95%E8%B5%84%E5%9F%BA%E9%87%91%EF%BC%88LOF%EF%BC%89A%E7%B1%BB%E4%BA%BA%E6%B0%91%E5%B8%81%E4%BB%BD%E9%A2%9D%E6%9A%82%E5%81%9C%E7%94%B3%E8%B4%AD%E5%8F%8A%E5%AE%9A%E6%9C%9F%E5%AE%9A%E9%A2%9D%E6%8A%95%E8%B5%84%E4%B8%9A%E5%8A%A1%E7%9A%84%E5%85%AC%E5%91%8A.pdf)
- [嘉实基金：黄金 LOF（160719）](https://www.jsfund.cn/main/fund/160719/fundNav.shtml)
- [汇添富：黄金及贵金属 LOF A（164701）](https://www.99fund.com/main/products/pofund/164701/fundgk.shtml)
- [上交所：南方原油 LOF A（501018）](https://star.sse.com.cn/assortment/fund/list/starlof/basic/index.shtml?FUNDID=501018)
- [嘉实基金：原油 LOF（160723）](https://www.jsfund.cn/main/fund/160723/fundNav.shtml)
- [易方达：原油 LOF A人民币（161129）官方报告](https://static.cninfo.com.cn/finalpage/2026-07-21/1225432653.PDF)
- [华宝基金：油气 LOF A（162411）历史公告](https://www.fsfund.com/static/notice/2026/02/09/4488dc60-416f-4fcb-bc24-84005fc60c59/%E5%8D%8E%E5%AE%9D%E6%A0%87%E6%99%AE%E7%9F%B3%E6%B2%B9%E5%A4%A9%E7%84%B6%E6%B0%94%E4%B8%8A%E6%B8%B8%E8%82%A1%E7%A5%A8%E6%8C%87%E6%95%B0%E8%AF%81%E5%88%B8%E6%8A%95%E8%B5%84%E5%9F%BA%E9%87%91%28LOF%29%E8%B0%83%E6%95%B4%E5%A4%A7%E9%A2%9D%E7%94%B3%E8%B4%AD%EF%BC%88%E5%90%AB%E5%AE%9A%E6%8A%95%EF%BC%89%E9%87%91%E9%A2%9D%E4%B8%8A%E9%99%90%E7%9A%84%E5%85%AC%E5%91%8A.pdf)
- [深交所：国投白银 LOF A（161226）历史公告](https://disc.static.szse.cn/disc/disk03/finalpage/2026-08-07/43e6572f-15eb-4377-bcbb-c1d9efb73209.PDF)

## 频率与投递

在支持的中国内地交易时段约每五分钟检查。同方向折价或溢价幅度达到5%，经两个独立计划样本确认后提醒；幅度回落至3%或以下才重新待触发，至少冷却30分钟。两次采样不表示期间持续存在差价。首次采集、净值基准变化、日切或数据中断后静默建立基线，不补发历史机会；初次已在高差价区间也不立即提醒，须先回落至3%或以下再重新触发。价格缺失、过期、两源不一致或休市时保持静默。采集与送达可能延迟，公开预览不等于已收到通知。

- [来源采集状态（公开只读）](https://api.ntfyx.me/v1/market/health)

## 手机可用范围

当前公开手机版本为 iPhone 1.8.3、Android 1.8.2。科技热点从 1.2.0 支持，扩展目录需要 1.3 或更高版本。新的机会源说明随 1.4 更新提供；请核对所装版本。Web 可浏览公开目录和预览，订阅仍由主手机确认。

- [当前公开下载](https://ntfyx.me/zh/download/)

## 在兼容版本中订阅

使用上方列出的兼容版本，在主手机的“发现”选择此源，核对来源、时间和提醒偏好，再确认免费订阅。无需电脑、CLI 或扫码。手机创建私有 Topic；浏览器需要为这个 Topic 单独授权。公开预览不等于已经收到消息。

## 名额与停止接收

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。

## 公开内容与私人消息

托管发布器知道自己发布的公开内容和必要订阅路由、时间设置；这不会授予其读取私人 Agent 消息的权限。手机授权每个 Topic 与发送身份，内容向合法接收设备加密。Ntfyx 与所列来源无隶属关系。

- [浏览全部通知源](https://ntfyx.me/zh/plugins/)

---

# 通知商城：免费订阅你关注的动态 — Ntfyx

Source: https://ntfyx.me/zh/plugins/

Updated: 2026-10-19

比较 11 个官方通知源：科技、新产品、GitHub、Codex 公告、VPS、AI 福利、游戏与 App Store 限免、基金套利通知。核对范围、频率与免费订阅方式。

## 选择你想关注的公开更新

官方通知源由你主动订阅，与自己的 Agent 和脚本消息一起进入 Inbox；不会用私人消息生成资讯，也不会插入广告。11 个通知源的内容和频率分别如下。

- [科技热点](https://ntfyx.me/zh/plugins/tech-digest/)
- [新产品日报](https://ntfyx.me/zh/plugins/product-launches/)
- [GitHub 趋势日报](https://ntfyx.me/zh/plugins/github-trending-daily/)
- [GitHub 趋势周报](https://ntfyx.me/zh/plugins/github-trending-weekly/)
- [GitHub 趋势月报](https://ntfyx.me/zh/plugins/github-trending-monthly/)
- [Codex reset 公告](https://ntfyx.me/zh/plugins/codex-reset-alerts/)
- [VPS 补货](https://ntfyx.me/zh/plugins/vps-restock-alerts/)
- [官方 AI 福利](https://ntfyx.me/zh/plugins/ai-official-benefits/)
- [正版游戏限免](https://ntfyx.me/zh/plugins/free-game-giveaways/)
- [App Store 限免](https://ntfyx.me/zh/plugins/app-store-free/)
- [基金套利通知](https://ntfyx.me/zh/plugins/cn-lof-nav-watch/)

## 来源与频率

摘要最多五项。GitHub 保留官方滚动窗口和采集日期；公告事件不等于个人额度变化。摘要按你选择的时区投递；A股基金的交易时段与行情时间采用中国标准时间，实际投递可能延迟。

| 通知源 | 真实来源 | 投递 |
| --- | --- | --- |
| 科技热点 | Hacker News 官方 API | 每日 |
| 新产品日报 | Show HN · Hacker News 官方 API | 每日 |
| GitHub 趋势日报 | GitHub 官方 Trending · daily | 每日 |
| GitHub 趋势周报 | GitHub 官方 Trending · weekly | 每周一 |
| GitHub 趋势月报 | GitHub 官方 Trending · monthly | 每月 1 日 |
| Codex reset 公告 | Tibo @thsottiaux 的 X 原帖 | 事件 · 每五分钟采集 |
| VPS 补货 | OVH 官方 VPS 聚合库存 | 事件 · 约五分钟检查 |
| 官方 AI 福利 | 人工审核的 OpenAI / Anthropic 官方活动记录 | 已审核活动事件 |
| 正版游戏限免 | GamerPower 发现 + Epic 官方复核 | 事件 · 约十分钟检查 |
| App Store 限免 | Apple 官方查询 · 23 款精选实用付费软件 | 事件 · 每小时检查 |
| 基金套利通知 | 新浪单位净值及价格＋腾讯核价 | 交易时段约五分钟检查 · 中文 |

## 当前手机版本与新源

当前公开手机版本为 iPhone 1.8.3、Android 1.8.2。科技热点从 1.2.0 支持，扩展目录需要 1.3 或更高版本。新的机会源说明随 1.4 更新提供；请核对所装版本。Web 可浏览公开目录和预览，订阅仍由主手机确认。

- [当前公开下载](https://ntfyx.me/zh/download/)
- [打开 Web 公开目录](https://app.ntfyx.me/)

## 免费订阅与接收管理

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。

- [来源采集状态（公开只读）](https://api.ntfyx.me/v1/market/health)

## 投稿自己的通知插件

自行采集内容，直接提交介绍与示例，无需账号或凭据。每条后续通知也独立等待管理员在 App 点“确定／拒绝”，批准后才公开发布。原内置官方源继续按已批准的计划自动采集，现有 App 订阅方式不变。

- [投稿指南、脚本与 Schema](https://ntfyx.me/zh/docs/plugin-development/)

---

# 下载 Ntfyx：iPhone、Android 与电脑 CLI

Source: https://ntfyx.me/zh/download/

Updated: 2026-11-05

iPhone 1.8.3 已上架 App Store，Android 1.8.2 已上架 Google Play。下载手机 App，按需连接 Windows/macOS/Linux CLI 或 Web 收件箱。

## 现在下载后怎样开始

截至 2026-10-29 已确认公开版为 iOS 1.8.3、Android 1.8.2。在商店更新后，按手机上的公开 Topic 或私密连接入口继续；Android 后台推送需要 Google Play 服务。

> iPhone 1.8.3 起在公开 Topic 入口填写名称或链接；Android 1.8.2 提供新建、公开订阅和私密扫码入口。连接 Agent 时选择受保护 Topic，并验证一条实际手机消息和一次签名回复。

- [连接 Claude Code / Codex 到手机](https://ntfyx.me/zh/docs/agent-plugins/)
- [已有公开 Topic：第一条消息](https://ntfyx.me/zh/docs/public-topics/)
- [HTTPS 推送](https://ntfyx.me/zh/docs/http-push/)
- [入门与模式选择](https://ntfyx.me/zh/docs/quickstart/)
- [创建与提醒排障](https://ntfyx.me/zh/docs/troubleshooting/)

## Codex 完成通知已修复

CLI 0.6.1 会发送 Codex 或 Claude Code 的实际最终回答，通知显示摘要，详情保留 Markdown。旧版用户在电脑运行 ntfyx upgrade；npm 安装则运行 npm install -g ntfyx@0.6.1。无需重新配对手机。

```
ntfyx upgrade
ntfyx version --json
```

## 用手机下载

在电脑点击上方 App Store 或 Google Play，使用手机相机扫描弹出的下载二维码；弹窗也提供直接商店链接。在手机点击对应商店按钮会直接打开商店。关闭 JavaScript 后，商店链接仍可使用。下载码是公开商店地址，不是配对或设备授权码。

## iPhone · App Store

当前公开版本为 1.8.3，需要 iOS 18.4 或更高版本。支持消息通知、请求确认、选项与文字回复，以及 Topic 内的 Session 会话。手机管理来源和浏览器授权，无需 Ntfyx 账号。

- [iPhone · App Store](https://apps.apple.com/app/id6817353404)

## Android · Google Play

当前公开版本为 1.8.2，需要 Android 10 或更高版本。支持消息通知、请求确认、选项与文字回复。推送需要 Google Play 服务；未授予通知权限时，仍可在前台同步收件箱。

- [Android · Google Play](https://play.google.com/store/apps/details?id=me.ntfyx.app)

## 官方通知订阅：无需电脑

在手机的“发现”中选择你关注的通知源，查看覆盖范围、时间与提醒偏好后确认免费订阅。免费版包含 1 个由通知源订阅和公开 Topic 关注共用的订阅名额。所有套餐共用 1,000 个 Topic 的技术上限，Topic 数量不作为付费权益。无需电脑、CLI 或扫码；可以静音、暂停或退订，不会读取私有 Agent 消息。

- [通知商城：来源、频率与免费订阅](https://ntfyx.me/zh/plugins/)

## Windows / macOS / Linux · CLI 0.6.1

Windows x64 / ARM64、macOS Apple 芯片 / Intel、Linux glibc x64 / ARM64 均提供完整 CLI 与本地 MCP，包含消息、问答、手机授权的 My Monitor 和 Webhook 管理。宿主原生权限审批另按适配器的系统、版本与工具范围处理。

```
npm install -g ntfyx@0.6.1
ntfyx version --json
ntfyx connect
```

- [Agent 插件与一键安装](https://ntfyx.me/zh/docs/agent-plugins/)
- [CLI 下载、签名与平台验证详情（英文）](https://ntfyx.me/download/#cli-0-6-1)

## 可选的 Web 收件箱

用主手机授权浏览器，浏览器使用独立接收密钥，接收授权后发给它的新消息。新增浏览器不会自动获得手机先前的消息记录。

- [打开 Web 收件箱](https://app.ntfyx.me/)
- [中文使用说明](https://ntfyx.me/zh/docs/)

## Chrome 扩展状态

Chrome 扩展 0.2.4 已在 Chrome 应用商店公开。当前受保护消息协议要求 Chrome 0.4.0，截至 2026 年 10 月 28 日该版已提交、仍待审；公开 0.2.4 上架不代表兼容新版协议。等待兼容扩展期间可使用手机授权的 Web 收件箱。 每个 Topic 需要主手机分别授权，后台检查需要 Chrome 保持运行。现有 Web 收件箱可继续使用。

- [Chrome 扩展、桌面通知与审核状态](https://ntfyx.me/zh/docs/chrome-extension/)

## 桌面 CLI 与 MCP 平台

Windows x64 / ARM64、macOS Apple 芯片 / Intel、Linux glibc x64 / ARM64 均提供完整 CLI 与本地 MCP，包含消息、问答、手机授权的 My Monitor 和 Webhook 管理。宿主原生权限审批另按适配器的系统、版本与工具范围处理。 Windows 使用 CLI 的直接 setup 或本地 MCP。Claude Code Hook 需要 2.1.139+；旧版或无法确认版本时只配置 MCP。Codex 在 Windows 提供 MCP 提问，不配置自动 Hook。市场插件的 Hook 使用 POSIX shell，Windows 请使用直接 setup。原生工具权限审批仍按单独的平台与宿主允许范围处理。

| 平台 | CLI / MCP、监控与 Webhook | 宿主原生权限审批 |
| --- | --- | --- |
| macOS Apple silicon | 完整功能 | Claude Code / Codex：按宿主版本与工具策略 |
| macOS Intel | 完整功能 | 保留终端原生审批；CLI / MCP 问答可用 |
| Linux glibc x64 | 完整功能 | Claude Code / Codex：按宿主版本与工具策略 |
| Linux glibc ARM64 | 完整功能 | 保留终端原生审批；CLI / MCP 问答可用 |
| Windows x64 | 完整功能 | 保留终端原生审批；CLI / MCP 问答可用 |
| Windows ARM64 | 完整功能 | 保留终端原生审批；CLI / MCP 问答可用 |

> 原生机器运行验收、可下载的架构与 Agent 原生权限适配是三项不同证据。不要把基础 CLI 验收当作允许所有宿主权限请求。Codex 仍需交互 TUI 与本人 /hooks 信任，codex exec 不触发该审批流程。

## 运行要求

运行要求：Windows 10 1809+、macOS 13+；Linux 使用 glibc 构建。x64 CPU 需要 Nehalem / SSE4.2 或更新架构，不要求 AVX2。以上为内置 Bun 1.4.2 的官方要求；实际验收系统单独记录。

- [Bun 1.4.2 官方系统与 CPU 要求](https://github.com/oven-sh/bun/blob/bun-v1.4.2/docs/installation.mdx#cpu-requirements)

## Windows 安装

在 PowerShell 运行官方安装命令，无需管理员权限。安装器选择本机 x64 或 ARM64 下载，核对 Ntfyx 发行签名与精确 hash。也可按详细安装指南手动下载脚本或 ZIP，或使用已有 Node.js 24 的 npm。此处的发行签名不冒充 Windows Authenticode 证书。

```
irm https://ntfyx.me/install.ps1 | iex
ntfyx version --json
ntfyx connect
```

> 若安装器返回 user_path_updated=false，安装仍可能成功；使用返回的 target 绝对路径运行，不绕过组织 PATH 策略。独立安装可选 ntfyx upgrade --target-version 0.6.1 --json，固定官方不可变版本；npm 安装仍由 npm 更新。

## macOS / Linux shell 与 npm

install.sh 用于 macOS 与 Linux，不在 Windows PowerShell 运行 bash 命令。npm 需要 Node.js 24，可在上述六个平台安装当前发行的包装器；包装器同样核对签名后的原生二进制。独立安装使用 ntfyx upgrade，npm 安装由 npm 管理更新。

```
curl -fsSL https://ntfyx.me/install.sh | bash

# npm / Node.js 24
npm install -g ntfyx@0.6.1
ntfyx version --json
ntfyx connect
```

## 富消息的接收端版本

富消息展示需要 iOS／Android 1.8.0、Chrome 0.4.0 或更新后的 Web Inbox。已核实的商店公开版本：iOS 1.8.3、Android 1.8.2、Chrome 0.2.4。请按商店实际可用版本升级；Web 的富消息展示现已上线。

- [富消息格式与完整示例](https://ntfyx.me/zh/docs/rich-messages/)

---

# HTTP push notifications: send a webhook to your phone

Source: https://ntfyx.me/docs/http-push/

Updated: 2026-10-28

Send HTTP notifications to iPhone or Android with a private HTTPS link or POST webhook. Use text, JSON or form data; no CLI installation is required.

## How do I send an HTTP notification to my phone?

Copy the private HTTPS Push link from Ntfyx on your phone. Open it to send a notification, or keep the URL fixed and POST text, JSON or form content from your service. No CLI is required. The key grants sending only; the service reads the input before encrypted delivery.

1. Open Ntfyx. A new Inbox prepares the MyNotify custom Topic. Existing Inboxes keep their own Topic names.
2. Tap Send. The app submits a real remote HTTPS request and waits for the matching message to appear in Inbox.
3. Copy your sending link. Open it to send, or use it in your script or service.

> These instructions require the phone release that includes HTTPS push. Check the installed app and current download availability. A static website example never sends a notification.

- [Downloads and app availability](https://ntfyx.me/download/)

## One private URL for GET or POST

Copy the complete HTTPS Push URL from Ntfyx. Opening it with GET sends the message in its final path segment. To connect a service, keep the copied URL fixed and POST a text body or a JSON text field. HTTP notification describes the integration; the sending URL uses encrypted HTTPS transport. The service reads the request before encrypting delivery to the phone.

```
curl --request POST "$NTFYX_WEBHOOK_URL" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: example-build-123" \
  --data '{"title":"Build","text":"Build complete"}'
```

> Set NTFYX_WEBHOOK_URL privately to the complete link copied from your phone. Reuse the same idempotency key only for an identical retry. This example reports a result; it does not ask for an answer.

## Your sending link

The app prepares https://api.ntfyx.me/v1/send/{key}/{topic}/{message} with your own short sk_ key and Topic. The default test message is hello. Short keys require app 1.5.2; existing versioned links continue to work. Copy the whole URL or tap Send. Open the URL to send a notification; replace only the last segment with your URL-encoded message. The key stays bound to its original Topic: editing the Topic segment does not grant access to another Topic. The example below is a placeholder and cannot send.

```
https://api.ntfyx.me/v1/send/sk_EXAMPLE_KEY_123456789A/MyNotify/hello
```

## Use your copied link as a fixed POST webhook

Copy the whole HTTPS Push link from your phone and paste it into the webhook URL field of your service. Select POST and send the message in the body. You can keep the existing /hello ending: POST takes the dynamic message from its body, while opening the same URL with GET keeps the existing URL-message behavior. This works with the existing app link; no new app update is required for this use.

1. Open HTTPS Push in Ntfyx and copy your private sending link.
2. Paste that fixed URL into your service. Use POST with application/json and a text field, or text/plain.
3. Send a test and confirm that the matching message reaches the phone. An accepted HTTP response alone does not establish receipt.

```
POST YOUR_PRIVATE_APP_URL
Content-Type: application/json
Idempotency-Key: build-123

{"text":"Build complete"}
```

> The example uses a placeholder. The real URL contains a send-only secret. Keep it in the service's private webhook configuration; do not place it in public logs or screenshots.

## Supported bodies and retries

Accepts a JSON string; JSON body, message, text or content fields; plain UTF-8 text; and URL-encoded form fields, including payload JSON. Every present text alias must be a string, and multiple aliases must have the same value. Other event JSON is displayed as JSON text; output over 12,000 characters is rejected with 413, never truncated. An optional title and Session fields can group messages. Body upload reading has an absolute five-second deadline; a 408 timeout is retryable. This is a body-reading limit, not a five-second total-request or phone-delivery guarantee. The raw request is limited to 64 KiB, the message to 12,000 characters and the title to 120. The final JSON message also has a 16 KiB encrypted-payload limit including JSON overhead, so multibyte text may reach that limit first. Invalid UTF-8, duplicate JSON/form keys, conflicting aliases and unsupported formats are rejected. Attachments and URLs are not fetched; text support does not imply full Slack blocks or Discord embeds/files compatibility.

| Body | Example |
| --- | --- |
| application/json | {"text":"Build complete"} |
| application/json | {"title":"Deploy","body":"Release ready"} |
| text/plain | Build complete |
| application/x-www-form-urlencoded | message=Build%20complete |

> Reuse the same Idempotency-Key and input after an uncertain result. The same ID with different content is rejected; without an ID, each request is a new notification. Respect Retry-After on 429/503. A 2xx receipt means accepted, not delivered. Provider retry policies differ: GitHub does not automatically redeliver failed webhooks.

- [GitHub delivery failures](https://docs.github.com/en/webhooks/using-webhooks/handling-failed-webhook-deliveries)

## Separate webhook keys with CLI or MCP

CLI 0.3.0 and the local MCP tools can manage independent wh_ sending keys. First prepare HTTPS Push on the primary phone, pair your Source, then request separate webhook management permission. Your phone must approve the fixed Topic and scope; monitor permission does not grant webhook management. The management grant lasts up to 24 hours. A created key can last until its owner Source expires, which can be longer than that grant.

```
ntfyx webhook authorize --async --no-input --expires 24h --json
ntfyx webhook auth-status AUTHORIZATION_ID --json
ntfyx webhook create --name "Deploy alerts" --url-file ./private-webhook-url.txt --json
ntfyx webhook list --json
ntfyx webhook show WEBHOOK_ID --json
ntfyx webhook update WEBHOOK_ID --name "Production deploys" --dry-run --json
ntfyx webhook rotate WEBHOOK_ID --url-file ./next-private-webhook-url.txt --json
ntfyx webhook disable WEBHOOK_ID --json
ntfyx webhook enable WEBHOOK_ID --json
ntfyx webhook delete WEBHOOK_ID --json
ntfyx webhook revoke --json
```

> --url-file must name a new file: the CLI creates it with owner-private permissions (0600 on macOS/Linux; current-user DACL on Windows) and returns only its path and metadata. The raw URL/key is not returned through ordinary stdout, MCP or the local ledger. Updates preserve omitted fields and support --dry-run, --operation-id=ID and --generation N.

## Stop sending and revoke management separately

webhook revoke ends the current Source's management grant; it does not disable keys already created. Use disable or delete to stop an individual URL. Owner Source revocation or expiry, a primary-phone key/identity change, or a root-version change invalidates its keys. Pausing the parent HTTPS sender pauses its children and can be resumed with the same parent token. Rotating the parent token invalidates old child keys. Each Inbox supports up to 100 nondeleted keys. At capacity, the service can reclaim permanently invalid keys; revoked management grants or a recoverable parent pause do not cause reclamation. Keys share the existing HTTPS sender's 60 requests per minute admission limit. Ordinary message limits also apply: 30 new messages per minute and 10 per 2 seconds per Source.

## Optional GitHub or Standard Webhooks signatures

Generic mode authenticates the private bearer URL. For a child key, explicitly choose github or standard and provide a separate private verification-secret file. GitHub checks X-Hub-Signature-256 against the raw request body; it does not sign the delivery ID or timestamp. Standard Webhooks binds the delivery ID, timestamp and raw body, with a 300-second past/future window. A configured signature mode rejects missing or invalid signatures; a header alone never enables a mode or permits a downgrade. Standard Webhooks is a community convention, not a universal payload format.

```
ntfyx webhook create --name "GitHub events" --signature-mode github \
  --verification-secret-file ./github-webhook-secret.txt \
  --url-file ./private-github-url.txt --json
```

> The service encrypts and stores the verification secret and uses its plaintext to verify requests. This is a hosted secret, not a secret hidden from the service. Switching to none removes it. Webhook bodies are processed by the service before encrypted delivery; ordinary Agent messages keep their existing encryption.

- [GitHub signature validation](https://docs.github.com/en/webhooks/using-webhooks/validating-webhook-deliveries)
- [Standard Webhooks specification](https://github.com/standard-webhooks/standard-webhooks/blob/main/spec/standard-webhooks.md)

## Messages and safe retries

The Topic alias becomes the notification title; the final path segment becomes its message. Encode each segment once using UTF-8 percent encoding, including spaces, slashes, #, ? and emoji. A message can contain 1–2,000 characters, and the complete encoded URL must fit 8,192 UTF-8 bytes. Each ordinary visit sends a new notification. The app test keeps an Idempotency-Key header until its matching message is received, so an uncertain response can be retried without duplicating it. HEAD and prefetch requests do not send.

## Keep your link private

The full URL contains your send-only key. Anyone holding it can send to its bound Topic. Do not publish it or paste it into public screenshots, shared logs or link-preview services. Manage or rotate the key in the app to invalidate old links. The key cannot read messages or manage your Inbox.

## Advanced: POST remains available

Existing JSON POST integrations still work. They carry the raw push token in the Authorization header and support longer bodies and optional Session fields. The POST push token and the short sk_ sending key are separate credentials; keep both private.

```
curl -X POST 'https://api.ntfyx.me/v1/push/YOUR_INBOX_ID/YOUR_PUSH_ID' -H 'Authorization: Bearer YOUR_PUSH_KEY' -H 'Content-Type: application/json' -d '{"title":"Deployment","body":"Build ready"}'
```

## Group advanced POST notifications in a conversation

For the advanced JSON POST, the optional session_id and session_name fields group notifications into a Session in the same Topic. Use a stable ID for one task. An optional random idempotency_key lets an identical retry return the original accepted event; changing the content while reusing that key fails. HTTPS push sends notifications; an explicit JSON Call request can ask for a supported call-style reminder. It does not provide questions, replies, message reads or execution claims; use the CLI or agent integration when your workflow needs a verified answer.

## Accepted is different from received

An accepted response means the service accepted the message. It is not proof that the phone received it or displayed a system alert. The app test waits for its matching Inbox message. If system notifications are disabled, the Inbox can still receive the message while no banner is shown. Check notification permissions and connectivity separately.

## Your push key has one job

It can submit messages only to the configured Topic. It is separate from the phone management capability, receiver decryption keys and CLI source identity. Manage, disable or rotate HTTPS push from the phone; rotation invalidates the old key. The server cannot show a lost raw key back to you. If you lose it, rotate and replace it in your own scripts.

## Where encryption begins

Protected Topic CLI and agent message titles, bodies, options and replies are end-to-end encrypted on your devices. Public Topic names and messages are readable by the service and anyone with the Topic ID or link. The explicit fixed monitor-access and webhook-management questions and their signed phone answers are disclosed to the service for verification. HTTPS push and webhook requests are readable by the service before encrypted delivery. Optional provider verification secrets are encrypted and stored by the service, then used in plaintext to verify the raw webhook body; they are hosted secrets, not hidden from the service. My Monitor reads the monitored address, rule and response; a public publisher knows the content it publishes. The relay routes ciphertext and processes operational metadata such as identifiers, time, size and push tokens. Do not put secrets in monitored URLs or request examples. Independent security review is not complete.

- [Encryption and hosted sender boundaries](https://ntfyx.me/security/)
- [Data processing and retention](https://ntfyx.me/privacy/)
- [CLI and agent questions](https://ntfyx.me/docs/agent-plugins/)

## Try the first test from the home screen

Follow the hello walkthrough and distinguish an accepted request from a received message.

- [Walkthrough: send hello from your phone](https://ntfyx.me/docs/https-push-walkthrough/)

## Start with a use case

From agent questions to weekly subscriptions and website alerts, start with a use case. See what reaches your phone, then follow the steps to connect.

- [Explore all use cases](https://ntfyx.me/use-cases/)

## Can a webhook ring, or wait for an agent reply?

A JSON webhook can request a call-style message alert with ntfyx.alert_mode="call" after the phone owner enables it. This changes the requested reminder, not the sending key’s permissions. A webhook cannot read messages or receive signed answers. Use ntfyx ask or local MCP when the task needs confirmation, a choice or text.

- [Call setup and platform limits](https://ntfyx.me/docs/call-alerts/)
- [Phone replies for AI agents](https://ntfyx.me/docs/phone-approval/)

## Plain and rich messages

CLI 0.6.0 independently sends ordinary text, Markdown and native metric/table/chart messages, with local validation before sending. See the guide for receiver version requirements and store availability.

- [Rich-message formats and complete example](https://ntfyx.me/docs/rich-messages/)

## Complete your own automation task

Start with a complete, copyable example and check the job result, send receipt and phone message separately.

- [GitHub Actions failure notifications](https://ntfyx.me/docs/github-actions-notifications/)
- [n8n workflow error notifications](https://ntfyx.me/docs/n8n-error-notifications/)
- [Script and PowerShell notifications](https://ntfyx.me/docs/notifications/)

---

# HTTP 推送通知：一个 HTTPS 链接或 Webhook 发到手机

Source: https://ntfyx.me/zh/docs/http-push/

Updated: 2026-10-28

用私有 HTTPS 链接或 POST Webhook，把 HTTP 通知发到 iPhone 或 Android；支持文本、JSON 和表单，无需安装 CLI。

## 如何用 HTTP 请求把通知发到手机？

在手机 Ntfyx 复制私有 HTTPS 推送链接，访问即可发通知，也可保留 URL 不变，从自己的服务 POST 文本、JSON 或表单。无需 CLI，key 只有发送权限；服务读取输入后再为手机加密投递。

1. 打开 Ntfyx。新收件箱会准备好 MyNotify 自定义 Topic；已有收件箱保留原来的 Topic 名称。
2. 点击“发送”。App 通过真实远端 HTTPS 请求发送，再等待对应消息进入收件箱。
3. 从 App 复制专属发送链接，访问即可发送，也可接入脚本或服务。

> 需要包含 HTTPS 推送功能的手机版本，请核对已安装 App 与当前下载状态。网页里的静态示例不会发送通知。

- [下载与版本可用状态](https://ntfyx.me/zh/download/)

## 同一个私有 URL，GET 或 POST 都能发

在 Ntfyx 复制完整 HTTPS 推送 URL。GET 访问时发送最后路径段的消息；接入服务时保留复制地址不变，POST 文本或 JSON 的 text 字段。HTTP 通知描述的是接入方式，真实发送链接使用 HTTPS 加密传输；服务读取请求后再为手机加密投递。

```
curl --request POST "$NTFYX_WEBHOOK_URL" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: example-build-123" \
  --data '{"title":"Build","text":"Build complete"}'
```

> 先在本机私有环境变量 NTFYX_WEBHOOK_URL 中设置从手机复制的完整链接。只有精确重试同一输入时才复用幂等标识。此例报告结果，不创建等待回复的问题。

## 专属发送链接

App 自动准备 https://api.ntfyx.me/v1/send/{key}/{topic}/{message}，包含简短的 sk_ key 和自己的 Topic，默认测试正文为 hello。简短 key 需要 App 1.5.2，已有版本化链接继续可用。复制完整链接或点击“发送”，访问链接即可发通知；只需将最后一段替换为编码后的消息。key 绑定原 Topic，修改 Topic 段不能向其他 Topic 发消息。下方只有占位示例，不具备发送权限。

```
https://api.ntfyx.me/v1/send/sk_EXAMPLE_KEY_123456789A/MyNotify/hello
```

## 复制原链接，直接用作固定 POST Webhook

从手机 HTTPS 推送复制完整链接，粘贴到第三方的 Webhook URL 一栏，选择 POST，在请求正文中发送动态消息。原来的 /hello 结尾可以保留：POST 使用 body 中的新正文；直接 GET 访问时仍按原 URL 中的消息发送。这条接入路径沿用现有 App 链接，无需为它更新商店版。

1. 在 Ntfyx 的 HTTPS 推送中复制私有发送链接。
2. 在第三方粘贴固定 URL，选择 POST、application/json，并提供 text 等文本字段；也可使用 text/plain。
3. 发送测试，并在手机确认匹配消息。HTTP 已受理不能单独证明手机已收到。

```
POST YOUR_PRIVATE_APP_URL
Content-Type: application/json
Idempotency-Key: build-123

{"text":"Build complete"}
```

> 示例只有占位 URL。真实完整链接包含仅发送 secret，请保存在第三方的私有配置中，不放进公开日志或截图。

## 正文格式与重试

支持 JSON 字符串、JSON 中的 body / message / text / content、UTF-8 纯文本及 URL 编码表单（包含 payload JSON）。出现的文本别名必须为字符串且彼此同值；其他事件 JSON 转为文本展示，超过 12,000 字符返回 413，不截断。可选 title 与 Session 字段用于标题和会话。上传 body 的读取有绝对 5 秒期限，超时 408 可重试；这不是整体请求或手机投递 5 秒完成承诺。原始请求最多 64 KiB，正文 12,000 字符，标题 120 字符；最终 JSON 消息另受含 JSON 开销的 16 KiB 加密 payload 限制，多字节正文可能先触及此限；非法 UTF-8、重复 JSON/form key、冲突别名或不支持的格式会被拒绝。不抓取附件或 URL；文本字段支持不表示完整支持 Slack blocks 或 Discord embeds/files。

| 正文类型 | 示例 |
| --- | --- |
| application/json | {"text":"构建完成"} |
| application/json | {"title":"部署","body":"新版已准备"} |
| text/plain | 构建完成 |
| application/x-www-form-urlencoded | message=Build%20complete |

> 结果不确定时，复用同一 Idempotency-Key 与精确输入；同 ID 不同内容会拒绝，无 ID 每次都是新通知。429/503 按 Retry-After 重试。2xx 只表示已受理；供应商重试策略不同，GitHub 不会自动重投失败 webhook。

- [GitHub 失败投递说明](https://docs.github.com/en/webhooks/using-webhooks/handling-failed-webhook-deliveries)

## 用 CLI 或 MCP 管理独立 Webhook key

CLI 0.3.0 与本地 MCP 可以管理独立 wh_ 发送 key。先在主手机准备 HTTPS 推送、配对 Source，再申请单独的 webhook 管理授权。手机须明确批准固定 Topic 与范围；监控授权不能用于管理 webhook。管理 grant 最长 24 小时，已创建 key 则可持续至 owner Source 到期，可能长于 grant。

```
ntfyx webhook authorize --async --no-input --expires 24h --json
ntfyx webhook auth-status AUTHORIZATION_ID --json
ntfyx webhook create --name "Deploy alerts" --url-file ./private-webhook-url.txt --json
ntfyx webhook list --json
ntfyx webhook show WEBHOOK_ID --json
ntfyx webhook update WEBHOOK_ID --name "Production deploys" --dry-run --json
ntfyx webhook rotate WEBHOOK_ID --url-file ./next-private-webhook-url.txt --json
ntfyx webhook disable WEBHOOK_ID --json
ntfyx webhook enable WEBHOOK_ID --json
ntfyx webhook delete WEBHOOK_ID --json
ntfyx webhook revoke --json
```

> --url-file 必须指向尚不存在的新文件，CLI 以私有权限创建（macOS/Linux 为 0600，Windows 为当前用户 DACL），只返回文件路径和 metadata；原始 URL/key 不进入普通 stdout、MCP 或 ledger。更新保留未提供字段，支持 --dry-run、--operation-id=ID 与 --generation N。

## 停止发送与撤销管理是不同操作

webhook revoke 仅撤销当前 Source 的管理 grant，不停用已创建的发送 key。停止某个 URL 请用 disable 或 delete。owner Source 撤销/过期、主手机 key/身份或 Root 版本变化会使其 key 失效。父 HTTPS 发送端暂停时子 key 同样暂停，同一父 token 恢复后可继续；父 token 轮换使旧子 key 失效。每 Inbox 最多 100 个未删除 key；容量满时可回收永久失效 key，管理 grant 撤销或可恢复的父暂停不会被当作回收理由。子 key 共用现有 HTTPS 发送端的 60 次/分钟入口限额；普通消息另受每 Source 30 条/分钟、10 条/2 秒约束。

## 可选 GitHub / Standard Webhooks 签名

generic 模式使用私有 URL bearer。对子 key 可显式选择 github 或 standard，并提供独立的私有验证 secret 文件。GitHub 按原始请求 body 验证 X-Hub-Signature-256，不签 delivery ID 或 timestamp；Standard Webhooks 绑定 delivery ID、timestamp 与原始 body，核对前后 300 秒时间窗。已配置模式必须拒绝缺失或错误签名；携带 header 不会自动启用模式，也不能触发降级。Standard Webhooks 是社区约定，不是统一 payload 格式。

```
ntfyx webhook create --name "GitHub events" --signature-mode github \
  --verification-secret-file ./github-webhook-secret.txt \
  --url-file ./private-github-url.txt --json
```

> 服务端加密保存验证 secret，并在验签时使用明文；它是托管 secret，不能称作对服务端不可见。切换到 none 会移除。Webhook 正文由服务处理后再加密投递，普通 Agent 消息保留原加密方式。

- [GitHub 签名核验](https://docs.github.com/en/webhooks/using-webhooks/validating-webhook-deliveries)
- [Standard Webhooks 社区规范](https://github.com/standard-webhooks/standard-webhooks/blob/main/spec/standard-webhooks.md)

## 消息编码与重试

Topic 别名用作通知标题，最后一段用作消息正文。每一段按 UTF-8 百分号编码一次，包括空格、斜杠、#、? 和表情。消息支持 1–2,000 个字符，完整编码 URL 最多 8,192 个 UTF-8 字节。普通访问每次发送一条新通知；App 测试保留 Idempotency-Key 请求头，收到匹配消息前复用同一标识，避免响应不确定时重试重复发送。HEAD 和预取不会发送通知。

## 请保管好完整链接

链接包含仅发送 key，持有链接的人可以向绑定的 Topic 发通知。不要公开链接，也不要放进公开截图、共享日志或会抓取链接预览的服务。可在 App 管理或重新生成 key，使旧链接失效；该 key 不能读消息或管理收件箱。

## 进阶：继续支持 POST

已有 JSON POST 接入继续可用，原始 push token 仍通过 Authorization 请求头发送，并支持较长正文及可选 Session 字段。POST 的 push token 与简短 sk_ 发送 key 是独立凭据，请同时保管好。

```
curl -X POST 'https://api.ntfyx.me/v1/push/YOUR_INBOX_ID/YOUR_PUSH_ID' -H 'Authorization: Bearer YOUR_PUSH_KEY' -H 'Content-Type: application/json' -d '{"title":"Deployment","body":"Build ready"}'
```

## 进阶 POST 的会话分组

JSON POST 中可选的 session_id 与 session_name 可把同一任务的通知放进同一 Topic 下的 Session。一次任务使用稳定 ID。可选的随机 idempotency_key 可让相同内容重试返回原先已受理的事件；复用该 key 却改变内容会失败。HTTPS 发送通知；显式 JSON Call 请求可申请受支持的来电式提醒，但不提供提问、回复、读取消息或执行领取；需要验签回答时，使用 CLI 或 Agent 接入。

## 请求已受理，不等于手机已收到

accepted 只表示服务已受理，不证明手机已经收到或弹出系统提醒。App 测试会等待匹配消息进入收件箱。系统通知关闭时，消息仍可进入收件箱，但不会显示横幅。请分别检查通知权限、消息同步与网络状态。

## 推送 key 只有发送权限

它只能向配置的 Topic 发通知，与手机管理权限、接收解密密钥和 CLI Source 身份独立。可以在手机管理、停用或轮换 HTTPS 推送；轮换后旧 key 失效。服务不会把丢失的原始 key 返回给你，丢失时请轮换并更新自己的脚本。

## 从哪里开始加密

受保护 Topic 中 CLI 与 Agent 消息的标题、正文、选项和回复在设备上端到端加密；公开 Topic 的名称和消息对服务端及持有标识或链接的人可见。明确的监控 / Webhook 管理固定授权问题及手机签名答案会披露给服务端核验。HTTPS 推送与 Webhook 请求在加密投递前对服务可见；可选供应商验证 secret 由服务加密存储，并在验签时以明文验证原始 body，是托管 secret，并非服务端不可见；My Monitor 会读取监控地址、规则和响应，公开发布者知道自己发送的内容。中继转发密文，仍处理标识符、时间、大小和推送令牌等运行元数据。不要在监控 URL 或请求示例中放密钥。尚未完成独立安全审计。

- [安全模型与托管发送端边界](https://ntfyx.me/security/)
- [数据处理与保留期限](https://ntfyx.me/privacy/)
- [Agent 提问与回复](https://ntfyx.me/zh/docs/agent-plugins/)

## 从首页完成第一次测试

按照 hello 案例完成测试，对照已受理与真正收到的状态。

- [实际案例：手机点击发送 hello](https://ntfyx.me/zh/docs/https-push-walkthrough/)

## 按使用场景开始

从 Agent 等你回答，到每周订阅和网站异常，选一个场景开始。看手机会收到什么，再按步骤接好。

- [查看全部案例](https://ntfyx.me/zh/use-cases/)

## Webhook 可以来电式提醒或等待 Agent 回复吗？

手机主动开启后，JSON Webhook 可用 ntfyx.alert_mode="call" 请求来电式消息提醒。它只改变提醒请求，不扩大发送 key 的权限。Webhook 不能读消息或接收签名回答；需要确认、选项或文字时，使用 ntfyx ask 或本地 MCP。

- [Call 开启方式与平台限制](https://ntfyx.me/zh/docs/call-alerts/)
- [AI Agent 手机回复](https://ntfyx.me/zh/docs/phone-approval/)

## 普通消息与富消息

CLI 0.6.0 可独立发送普通文字、Markdown 和带指标／表格／图表的原生富消息，并在发送前本地校验。显示端版本与商店审核状态详见指南。

- [富消息格式与完整示例](https://ntfyx.me/zh/docs/rich-messages/)

## 完成自己的自动化任务

从可复制的完整示例开始，核对任务结果、发送回执和手机消息。通知成功与原任务成功分别判断。

- [GitHub Actions 构建失败通知](https://ntfyx.me/zh/docs/github-actions-notifications/)
- [n8n 工作流错误提醒](https://ntfyx.me/zh/docs/n8n-error-notifications/)
- [脚本与 PowerShell 通知](https://ntfyx.me/zh/docs/notifications/)

---

# HTTP service monitoring: status, text and JSON phone alerts

Source: https://ntfyx.me/docs/service-monitoring/

Updated: 2026-10-28

Use My Monitor to check a public HTTP endpoint every hour. Match status, text or a JSON field, keep service history, and receive phone alerts for failures.

## How can I monitor an HTTP endpoint from my phone?

My Monitor checks a public HTTP or HTTPS endpoint every hour and reports results to your phone. Require a successful status, specified text within the response or a JSON field value. Each service keeps its own conversation. With default failure-only notifications, failures alert you and healthy or recovered results stay silent.

1. Open Discover → My Monitor → Add monitor.
2. Enter a public HTTP or HTTPS URL and a name. For text or JSON, fetch the response preview before entering your expectation.
3. Test the rule, then enable the monitor. The first observation runs after setup; subsequent checks run every hour.

> Response preview and failure-only notification controls require app 1.5.3. Check current availability below. The website walkthrough is an example; it never creates a monitor or probes a URL.

- [Downloads and app availability](https://ntfyx.me/download/)

## Manage My Monitor from CLI or MCP

CLI 0.2.0 can manage the same My Monitor items as your phone. Open My Monitor in the app once, then authorize your paired Source. Your primary phone must approve the exact monitor read/write scope. The default grant lasts 24 hours; --expires accepts 5 minutes to 24 hours. It ends when it expires, you revoke it, the Source is disconnected, or phone/root authority changes. Phone and root private keys stay on the phone. Only this authorization question and answer are explicitly disclosed to the service for verification; ordinary agent exchanges keep their existing encryption.

```
ntfyx monitor authorize
ntfyx monitor add --name "My service" --url https://example.com/health --dry-run
ntfyx monitor add --name "My service" --url https://example.com/health
ntfyx monitor list
ntfyx monitor show MONITOR_ID
ntfyx monitor update MONITOR_ID --json-field ok --equals true
ntfyx monitor test MONITOR_ID
ntfyx monitor pause MONITOR_ID
ntfyx monitor resume MONITOR_ID
ntfyx monitor revoke
```

> Agents can start with monitor authorize --async --no-input, then poll monitor auth-status AUTHORIZATION_ID. Pending, Deny and expiry never grant access. The same commands operate on the existing hourly service; they do not install a local scheduler. Revoke stops this Source's management access while saved monitors keep running.

## Three practical monitoring rules

Use a status check for a public website or health endpoint, an exact text check when a response must contain a readiness marker, or a JSON-field check when a successful HTTP response can still report an unhealthy application. Preview the response in the app before choosing the expected value.

| Need | Rule | Example |
| --- | --- | --- |
| The website responds | HTTP 2xx | https://example.com/ |
| A service is ready | Response contains text | ready |
| An API reports healthy | JSON field equals a primitive | status = "ok" |

> Checks run hourly, with a confirmation of a first failure. Default failure-only mode records recovery silently. Check success rate in the weekly report is not continuous uptime. This is personal service monitoring; it is not a real-time pager or an on-call escalation service.

## Choose what a healthy response means

A reachable server is not always a healthy service. Every rule requires a final HTTP status from 200 to 299. Content rules add a second expectation.

| Rule | Healthy when | Example |
| --- | --- | --- |
| Reachable | The final HTTP status is 2xx. | A website responds successfully. |
| Response contains text | The bounded response contains the exact, case-sensitive text. | The response contains ok. |
| JSON field equals | A simple dot-separated object field equals your chosen primitive value. | status equals the string ok. |

## Keep every result; choose which ones alert you

Each finalized check creates a result in the monitor’s fixed Session in the system My Monitor Topic. Only notify on failure is on by default: healthy and recovered results are recorded silently, while confirmed failures send an alert. Turn it off to receive an alert for every check. A first hourly failure gets one confirmation after 60 seconds; that confirmation completes the same round, not a second message. Continuing failures are recorded and alert again at the next hourly check. Monitoring infrastructure errors are not proof that your service is down.

## Seven-day records and a weekly summary

Monitor messages use English with 🎉 for successful checks and recovery, and ❌ for failures. The text distinguishes a successful check from recovery. Individual scheduled check outcomes stay on the service for at most seven days; the existing app detail view continues to show up to twenty recent results. Each week with check activity produces one 📊 weekly summary in its own Session, due Monday at 00:00 UTC (08:00 in China), covering the previous UTC Monday–Sunday. It lists monitors checked, check attempts, successes, failures, completed-check success rate and average response time. Unfinished executor checks are listed separately and excluded from the success-rate denominator; confirmation requests count as checks. This rate is not uptime. The first report states when collection began. The summary sends a notification even with Only notify on failure enabled, while respecting Topic mute, quiet hours, system notification permission and delivery limits. No app update or language detection is required. User names, rules and message content are not translated.

## Monitor allowance and pausing

Free includes one monitor, Plus five and Pro fifty. Checks run hourly; paused items keep their slot until deleted. Accepted result messages and weekly summaries share the total daily message allowance with other messages. When the allowance is exhausted, checks continue and pending delivery is bounded; newer results may be coalesced. Message content expires after 24 hours, while numeric observations retain their separate seven-day window.

| Plan | Monitors | Shared messages per UTC day |
| --- | --- | --- |
| Free | 1 | 100 |
| Plus | 5 | 1,000 |
| Pro | 50 | 20,000 |

> Silent successful result messages also count. A notification is not a delivery-time guarantee.

## Public addresses and bounded checks

Use a public Internet HTTP or HTTPS URL on port 80 or 443. Private networks, local hosts, metadata addresses and embedded credentials are blocked. Redirects, DNS destinations, request time and response size are bounded. The first version does not send your cookies, custom authorization headers or login credentials. Put secrets in neither the URL nor the expected text. This is not a browser session, private-network agent or full uptime SLA.

## What the monitoring service processes

The service reads the URL, rule and response to decide whether the expectation is met. It stores configuration, scheduling and bounded result history; response bodies are not included in result history. An explicit setup preview shows at most 4,096 UTF-8 bytes as plain text and marks truncation; that sample stays in the editor temporarily and is not stored in history. Alert messages are encrypted for authorized receivers after the hosted service creates them. Protected Topic CLI and agent messages use device-side end-to-end encryption; public Topic content is visible to the service and anyone with the identifier.

- [Privacy and encryption boundaries](https://ntfyx.me/security/)
- [Data processing and retention](https://ntfyx.me/privacy/)

## Start with a use case

From agent questions to weekly subscriptions and website alerts, start with a use case. See what reaches your phone, then follow the steps to connect.

- [Explore all use cases](https://ntfyx.me/use-cases/)

## Can my AI agent manage the same monitors?

Yes. A paired CLI or local MCP client can add, update, test and pause the same My Monitor items after explicit phone approval. That revocable grant lasts up to 24 hours and is separate from webhook management. The phone remains the place to review what was authorized.

- [CLI and MCP monitor commands](https://ntfyx.me/docs/agent-plugins/)
- [Receive HTTP events instead of polling](https://ntfyx.me/docs/http-push/)

---

# HTTP 服务监控：状态码、响应文本与 JSON 字段手机提醒

Source: https://ntfyx.me/zh/docs/service-monitoring/

Updated: 2026-10-28

用 My Monitor 每小时检查公开 HTTP 接口，核对状态码、响应文本或 JSON 字段；异常时通知手机，每项服务保留同一会话的检测记录。

## 如何在手机监控 HTTP 接口是否正常？

My Monitor 每小时检查公开 HTTP 或 HTTPS 接口，把结果发到手机。可以核对成功状态、指定响应文本或 JSON 字段值，每项服务保留独立会话。默认仅失败推送时，异常会提醒，正常和恢复结果静默记录。

1. 打开“发现 → 我的监控 → 添加监控”。
2. 填写公开 HTTP 或 HTTPS 地址和名称；文本或 JSON 规则先获取响应预览，再填写预期。
3. 测试规则，再启用监控。设置后进行首次观察，之后每小时检查。

> 响应预览与仅失败时推送选项需要 App 1.5.3，请核对下载状态。网页演示使用示例内容，不创建监控，也不会访问示例地址。

- [下载与版本可用状态](https://ntfyx.me/zh/download/)

## 通过 CLI 或 MCP 管理我的监控

CLI 0.2.0 可以管理手机里同一份 My Monitor。先在 App 打开一次我的监控，再为已配对的 Source 发起授权。主手机必须明确批准本次监控读写范围，默认有效 24 小时，--expires 支持 5 分钟至 24 小时。到期、主动撤销、断开 Source 或更换手机与根身份后权限失效。手机及根私钥始终留在手机；仅本次授权问题与答案明确披露给服务核验，普通 Agent 问答保留现有加密方式。

```
ntfyx monitor authorize
ntfyx monitor add --name "我的服务" --url https://example.com/health --dry-run
ntfyx monitor add --name "我的服务" --url https://example.com/health
ntfyx monitor list
ntfyx monitor show MONITOR_ID
ntfyx monitor update MONITOR_ID --json-field ok --equals true
ntfyx monitor test MONITOR_ID
ntfyx monitor pause MONITOR_ID
ntfyx monitor resume MONITOR_ID
ntfyx monitor revoke
```

> Agent 可用 monitor authorize --async --no-input 发起，再用 monitor auth-status AUTHORIZATION_ID 检查。待回复、拒绝或过期都不授予权限。命令操作现有每小时监控，不安装本地定时器。revoke 只撤销当前 Source 的管理权限，已保存的监控继续运行。

## 三类实际可用的监控规则

公开网站或健康检查接口可以核对状态码；需要明确就绪标记时核对指定文本；HTTP 返回成功但应用可能异常时，可以核对 JSON 字段。先在 App 预览响应，再选择预期值。

| 需求 | 规则 | 示例 |
| --- | --- | --- |
| 网站正常响应 | HTTP 2xx | https://example.com/ |
| 服务已就绪 | 响应包含指定文本 | ready |
| API 报告健康 | JSON 字段等于指定基础值 | status = "ok" |

> 每小时检测一次，首次失败另做确认。默认仅失败推送时，恢复静默留档；周报的检测成功率不等于连续在线率。这是个人服务监控，不提供实时寻呼或团队值班升级。

## 什么才算符合预期

服务器能连上，不一定代表服务正常。所有规则都要求最终 HTTP 状态为 200–299；内容规则在此基础上再检查响应。

| 规则 | 正常条件 | 例子 |
| --- | --- | --- |
| 正常访问 | 最终 HTTP 状态为 2xx。 | 网站正常返回。 |
| 响应包含文本 | 有界响应中包含大小写完全一致的文本。 | 返回值包含 ok。 |
| JSON 字段等于 | 简单点分隔对象路径的值等于指定基础值。 | status 字段等于字符串 ok。 |

## 每轮留记录，选择何时提醒

每次最终检查结果都进入系统 My Monitor Topic 中该监控的固定 Session。默认勾选“仅检查失败时推送”：正常与恢复结果静默留在会话，已确认失败才推送；关闭后每次检查都推送。首次每小时检查失败后，60 秒后复查确认，两个请求属于同一轮，不发两条消息。持续失败在下一小时继续记录并提醒。监控基础设施错误不构成你的服务已宕机的证明。

## 七天记录与每周总结

监控消息统一使用英文：正常与恢复均使用 🎉，失败使用 ❌，并由文字区分检查成功和恢复。服务端逐次检测记录最多保留七天，现有 App 详情继续显示最近二十条。有检测活动的每周生成一条 📊 周报，在独立 Session 汇总上一个 UTC 周一至周日，计划每周一 00:00 UTC（北京时间 08:00）发送。指标包括监控项数、检测请求次数、成功与失败次数、已完成检查的成功率和平均响应时间；探测器未完成的检查单列，不计成功率分母，确认复查也计作检测请求。成功率不等于在线率。首份报告注明实际统计起点。即使开启仅失败时推送，周报也会正常提醒，仍遵守 Topic 静音、免打扰、系统通知权限及投递额度。无需更新 App，不做语言识别或翻译，用户名称、规则和消息保持原样。

## 监控额度与暂停

免费版、Plus、Pro 分别包含 1、5、50 个监控，均每小时检查。暂停仍占名额，删除才释放。受理的结果消息与周报共用每日消息总额，静默正常消息也计数。额度耗尽后检查继续，消息延后投递；待发队列有界，新结果可能合并。消息内容云端保留 24 小时，检测数值记录单独保留七天。

| 套餐 | 监控项 | 共享每日消息总额 |
| --- | --- | --- |
| 免费 | 1 | 100 |
| Plus | 5 | 1,000 |
| Pro | 50 | 20,000 |

> 已收到的设备历史按本地设置保留；推送不承诺即时送达。

## 公开地址与有界检查

使用端口 80 或 443 的公开 HTTP 或 HTTPS URL。私网、本机、元数据地址和嵌入凭据会被阻止；重定向、DNS 目的地址、请求耗时与响应大小均受限制。首版不带入你的 Cookie、自定义鉴权请求头或登录凭据。不要在 URL 或预期文本中放密钥。它不是浏览器登录会话、私网探针或完整可用性 SLA。

## 监控服务会处理什么

服务会读取 URL、规则和响应以判断是否符合预期，保存配置、调度信息和有界结果历史；结果历史不包含响应正文。配置时主动获取的预览最多显示 4,096 UTF-8 字节的纯文本并标记截断，仅临时留在编辑表单，不保存到历史。托管服务生成提醒后，再为已授权接收端加密投递。受保护 Topic 的 CLI 与 Agent 消息在发送设备端到端加密；公开 Topic 内容对服务端及持有标识的人可见。

- [隐私与加密边界](https://ntfyx.me/security/)
- [数据处理与保留期限](https://ntfyx.me/privacy/)

## 按使用场景开始

从 Agent 等你回答，到每周订阅和网站异常，选一个场景开始。看手机会收到什么，再按步骤接好。

- [查看全部案例](https://ntfyx.me/zh/use-cases/)

## AI Agent 可以管理同一组监控吗？

可以。已配对 CLI 或本地 MCP 在手机明确批准后，可以添加、修改、测试和暂停 App 中的同一组 My Monitor。授权最长 24 小时、可撤销，与 Webhook 管理权限独立；可以在手机查看已授予的范围。

- [CLI 与 MCP 监控命令](https://ntfyx.me/zh/docs/agent-plugins/)
- [使用 HTTP 事件推送，减少等待轮询](https://ntfyx.me/zh/docs/http-push/)

---

# Your first Ntfyx HTTPS notification: from hello to a service check

Source: https://ntfyx.me/docs/https-push-walkthrough/

Updated: 2026-10-18

Send hello with your app’s HTTPS link, verify delivery, then choose a service-health rule. A dated Android emulator check and practical troubleshooting.

## What we checked on 17 October 2026

Start with one message you can identify: hello in MyNotify. Once that works, define what a healthy service response should look like. The HTTP and monitoring references cover the complete options; this example follows the first test and the decisions to make when its result is unexpected.

| Check | Observed result | Test environment |
| --- | --- | --- |
| First HTTPS message | The app displayed and copied the same short-key URL, sent it from Send test, and verified the matching MyNotify / hello message. A matching FCM callback, successful decryption and system notification record were observed. | Ntfyx 1.5.2, Android 10 / API29 GMS emulator, real staging service. |
| Uncertain response and retry | A persisted test made four GET requests during deliberate response loss, restart and pause/resume. They resolved to one accepted message, confirmed by signature verification, receiver decryption and synchronization. | iOS NtfyxCore 1.5.2 PhoneClient running on macOS, real staging service. |
| Monitor setup | Android checked preview, creation, its separate system Topic, pause and deletion. The iOS core check also exercised text/JSON previews, private-address rejection and monitor management. | Real staging requests; this was not a natural hourly failure-and-recovery run. |

> These development checks establish the stated emulator and core-client behavior. They do not establish physical-phone notification presentation or installation of a store-distributed binary. The images below show actual native UI with synthetic Example content, separately from the live checks.

- [Dated test record and screenshot scope](https://ntfyx.me/guides/https-walkthrough/receipt-summary.json)
- [Current app versions and availability](https://ntfyx.me/download/)
- [HTTPS reference](https://ntfyx.me/docs/http-push/)
- [Monitoring reference](https://ntfyx.me/docs/service-monitoring/)

## 1. Send the first hello from the app

Use a release with short HTTPS sending links: app 1.5.2 or later. This example starts with a new Inbox and its MyNotify Topic. For an existing Inbox, use the Topic alias in your own link. If an earlier test is still waiting, check that original delivery before starting a new test.

1. Open HTTPS push for your Topic. Check that a sending link is ready.
2. Tap Send (Send test in the pictured 1.5.2 release). Keep the app connected while it waits for the matching notification.
3. In this new Inbox, open MyNotify and check the title and body: MyNotify and hello. Then check whether a system alert was also shown.

![Ntfyx Android HTTPS push screen with an Example sending link for MyNotify and hello, plus Send test and Copy link controls.](https://ntfyx.me/guides/https-walkthrough/my-notify-example.png)

Android 1.5.2 Example screen. The visible key is a placeholder; this image illustrates the controls and does not record the live staging delivery.

## 2. Read the result before sending again

Request acceptance, a verified Inbox message and a system alert answer three different questions. A response from the API alone is not the end of this test.

| What you see | What it establishes | What to do next |
| --- | --- | --- |
| Accepted / waiting | The service accepted the request; the app has not yet confirmed its matching message. | Let the app synchronize. Use Check delivery if offered before deciding to send a new test. |
| The matching hello in MyNotify | The app received and verified that message. | Your Inbox path works. If no alert appeared, check notification permission, Topic quiet hours and connectivity. Android push requires Google Play services. |
| A system notification | The operating system posted an alert for that message. | Opening the notification can take you to the conversation. Delivery does not mean you personally saw or acted on it. |

> An ordinary visit to the copied URL sends a new notification each time. The app’s test preserves its original request and receipt while waiting; reopening the same URL manually is a new send, not a delivery check.

## 3. Copy the link for your own next message

Copy the complete link from your app. For a different message, replace only the final message segment with UTF-8 percent-encoded text, such as backup%20finished. Keep the key and Topic segment unchanged. The URL below is an Example placeholder and cannot send.

```
https://api.ntfyx.me/v1/send/sk_EXAMPLE_KEY_123456789A/MyNotify/hello
```

> The complete URL contains a send-only key. Keep it out of shared logs and link-preview services. HTTPS protects transit; Ntfyx reads this request before encrypting it for your receivers. Use a paired protected Topic with the CLI or agent for device-side end-to-end encryption.

- [Encoding, key rotation and advanced POST options](https://ntfyx.me/docs/http-push/)
- [Encryption boundaries](https://ntfyx.me/security/)

## 4. Add a health check for a service you operate

After the first message works, open Discover → My Monitor. Use a public HTTP or HTTPS health endpoint whose expected response you know. The example.com address in the image is illustrative; substitute your own public endpoint.

1. Choose Add monitor, enter the address and give it a recognizable name.
2. Start with HTTP 2xx if a successful status is sufficient. For plain text, select Text. In app 1.5.3, preview the response before entering the exact expected text, such as ok.
3. Tap Check and inspect the returned status and rule result. Fix an unexpected result before enabling it.
4. Tap Enable monitoring when the result matches. Future checks run every hour; this is not a continuous uptime probe.

> If the preview rejects a private or local address, use a public endpoint on HTTP/HTTPS port 80 or 443. The monitor does not use your browser’s login cookies or custom authorization headers; do not put credentials in its URL.

![Ntfyx Android Add monitor screen using an Example health address, a Text rule containing ok and an hourly schedule.](https://ntfyx.me/guides/https-walkthrough/monitor-setup-example.png)

Android 1.5.2 Example monitor form. This screenshot does not create a monitor or demonstrate an observed hourly incident.

## Choose a rule that distinguishes healthy from unhealthy

A text rule checks a case-sensitive substring. If a JSON service can return status: not ok, searching for ok still matches. For that service, choose JSON field, use status as the field and the string ok as the expected value. Every rule also requires a final HTTP 2xx status. These are rule examples, not a recorded incident log.

| Response example | Text contains ok | JSON status equals string ok |
| --- | --- | --- |
| HTTP 200 · {"status":"ok"} | Matches | Matches |
| HTTP 200 · {"status":"degraded"} | Does not match | Does not match |
| HTTP 200 · {"status":"not ok"} | Matches: the substring is present | Does not match |
| HTTP 503 · {"status":"ok"} | Fails the HTTP status requirement | Fails the HTTP status requirement |

## How failure confirmation and recovery work

A first failed check, while no incident is open, is confirmed 60 seconds later. If that check also fails, one failure alert is queued; continuing failures are recorded and alert again at each subsequent hourly check. The current service records every finalized hourly result, including continuing failures and later recovery. App 1.5.3 defaults to failure-only alerts: healthy and recovered results stay in the conversation silently. Turn that option off to receive an alert for every result. Each monitor keeps these messages in its own Session inside the system My Monitor Topic.

> This describes the monitoring mechanism. The 17 October native runs checked previews and management operations; they did not measure a natural hourly failure-to-recovery interval or its phone-alert timing.

- [Monitor schedule, pauses and limits](https://ntfyx.me/docs/service-monitoring/)

---

# 第一条 Ntfyx HTTPS 通知：从 hello 到服务检查

Source: https://ntfyx.me/zh/docs/https-push-walkthrough/

Updated: 2026-10-18

按步骤发送 hello，区分请求受理、收件验证与系统提醒，再设置合适的服务健康规则。附有日期和平台范围的 Android 模拟器实测及排查方法。

## 2026 年 10 月 17 日实际检查了什么

先验证一条容易辨认的消息：MyNotify 中的 hello。收发成功后，再定义服务怎样才算正常。HTTPS 与监控参考页介绍完整选项；本例围绕首次测试，以及结果不符时该如何判断。

| 检查 | 实际观察 | 测试环境 |
| --- | --- | --- |
| 第一条 HTTPS 消息 | App 显示和复制同一条短 key 链接，通过发送测试按钮提交，并验证对应 MyNotify / hello 消息；观察到匹配的 FCM 回调、成功解密和系统通知记录。 | Ntfyx 1.5.2，Android 10 / API29 GMS 模拟器，连接真实 staging 服务。 |
| 响应丢失后的重试 | 同一个持久化测试在故意丢失响应、重启及暂停/恢复期间进行了 4 次 GET，最终仍只有 1 条消息，经过验签、接收端解密和同步确认。 | iOS NtfyxCore 1.5.2 的 PhoneClient 在 macOS 运行，连接真实 staging 服务。 |
| 监控设置 | Android 验证了预览、新建、独立系统 Topic、暂停和删除；iOS 核心检查还覆盖文本/JSON 预览、私网地址拒绝及监控管理。 | 真实 staging 请求；没有自然等待每小时异常与恢复。 |

> 这些开发检查对应上述模拟器和核心客户端范围，不证明实体手机通知展示或商店分发包安装。下方图片为真实原生界面的合成 Example 内容，与实网测试分别记录。

- [测试记录与截图范围](https://ntfyx.me/guides/https-walkthrough/receipt-summary.json)
- [当前 App 版本与可用状态](https://ntfyx.me/zh/download/)
- [HTTPS 参考说明](https://ntfyx.me/zh/docs/http-push/)
- [服务监控参考说明](https://ntfyx.me/zh/docs/service-monitoring/)

## 1. 先在 App 发送 hello

简短 HTTPS 发送链接需要 App 1.5.2 或更高版本。本例从新收件箱和默认 MyNotify 开始；已有收件箱应使用自己链接中的 Topic 别名。如果之前的测试仍在等待，先检查原消息，再决定是否发送新测试。

1. 打开该 Topic 的 HTTPS 推送页，确认发送链接已准备好。
2. 点击“发送”（图示 1.5.2 为“发送测试通知”），保持 App 联网，等待对应通知。
3. 在本例的新收件箱打开 MyNotify，核对标题和正文分别为 MyNotify、hello；再单独确认是否出现系统提醒。

![Ntfyx Android HTTPS 推送页，显示 MyNotify、hello 的 Example 占位链接，以及发送测试和复制链接按钮。](https://ntfyx.me/guides/https-walkthrough/my-notify-example.png)

Android 1.5.2 英文 Example 界面。图中 key 是占位内容，用于说明操作位置，并非实网 staging 送达过程截图。

## 2. 看清结果，再决定是否重发

请求被受理、收件箱验证了消息、系统显示提醒，是三个不同的判断。只收到 API 响应，还没有完成整条测试。

| 看到的状态 | 说明了什么 | 下一步 |
| --- | --- | --- |
| 已受理／等待中 | 服务已接受请求，App 尚未确认收到匹配消息。 | 先让 App 同步；如果出现“检查投递”，先检查原消息，再决定是否发送新测试。 |
| MyNotify 中对应的 hello | App 已收到并验证这条消息。 | 收件链路已工作。没有横幅时，检查通知权限、Topic 静音时段和网络；Android 推送需要 Google Play 服务。 |
| 系统通知 | 操作系统为这条消息发布了提醒。 | 点击可进入会话；提醒送达不代表你本人已经看过或采取行动。 |

> 普通访问复制出的 URL，每次都会新发一条通知。App 测试在等待时保留原请求和回执；手动再次访问链接是在新发消息，不是在检查原消息。

## 3. 复制链接，发送下一条自己的消息

从 App 复制完整链接。更换正文时，只替换最后的消息段，并按 UTF-8 百分号编码，例如 backup%20finished。保留 key 和 Topic 段。下面是 Example 占位链接，不能发送。

```
https://api.ntfyx.me/v1/send/sk_EXAMPLE_KEY_123456789A/MyNotify/hello
```

> 完整 URL 包含仅发送 key，不要放进共享日志或链接预览服务。HTTPS 保护传输；Ntfyx 会读取请求正文，再为接收端加密。需要设备端到端加密时，请通过受保护 Topic 配对 CLI 或 Agent。

- [编码、轮换密钥与进阶 POST](https://ntfyx.me/zh/docs/http-push/)
- [加密边界](https://ntfyx.me/security/)

## 4. 为自己的服务添加健康检查

第一条消息成功后，打开“发现 → 我的监控”。选择你了解预期响应的公开 HTTP 或 HTTPS 健康地址。图中的 example.com 地址仅作示意，操作时应填写自己的公开服务。

1. 选择添加监控，填写地址，并取一个容易辨认的名称。
2. 只关心成功状态时选择 HTTP 2xx；纯文本响应可选择“包含文本”。App 1.5.3 先获取响应预览，再填入大小写准确的预期内容，例如 ok。
3. 点击“检查地址”，阅读返回状态和规则结果。结果不符时，先修正规则或服务。
4. 结果符合预期后点击“启用监控”。后续每小时检查，不是连续可用性探测。

> 预览拒绝私网或本机地址时，应使用端口 80/443 的公开 HTTP/HTTPS 地址。监控不会带入浏览器登录 Cookie 或自定义鉴权请求头，不要把凭据放进 URL。

![Ntfyx Android 添加监控页，使用 Example 健康地址、包含 ok 的文本规则和每小时检查频率。](https://ntfyx.me/guides/https-walkthrough/monitor-setup-example.png)

Android 1.5.2 英文 Example 监控表单。该图不会创建监控，也不证明已观察到一次自然小时故障。

## 让规则真正区分正常与异常

文本规则按大小写匹配子串。如果 JSON 服务可能返回 status: not ok，搜索 ok 仍会匹配。这种服务应选择“JSON 字段”，字段填 status，预期值为字符串 ok。所有规则还要求最终 HTTP 状态为 2xx。下表是规则示例，不是实际故障日志。

| 响应示例 | 文本包含 ok | JSON status 等于字符串 ok |
| --- | --- | --- |
| HTTP 200 · {"status":"ok"} | 匹配 | 匹配 |
| HTTP 200 · {"status":"degraded"} | 不匹配 | 不匹配 |
| HTTP 200 · {"status":"not ok"} | 仍匹配，因为包含该子串 | 不匹配 |
| HTTP 503 · {"status":"ok"} | HTTP 状态不符合要求 | HTTP 状态不符合要求 |

## 异常确认与恢复怎样工作

尚未进入故障事件时，首次检查失败会在 60 秒后复查；复查仍失败才发送一条异常提醒。持续失败会在后续每小时检查时继续记录并提醒。当前服务会记录每轮最终结果，包括持续失败和后续恢复。App 1.5.3 默认仅失败时推送，正常和恢复静默留在会话；关闭此选项则每轮都推送。每项监控在系统 My Monitor Topic 中保留独立 Session，让原因与恢复留在一起。

> 这里说明监控机制。10 月 17 日原生运行验证了预览和管理操作，没有测量自然等待每小时检查后的异常到恢复间隔，也没有测量该过程的手机提醒时间。

- [监控频率、暂停与额度](https://ntfyx.me/zh/docs/service-monitoring/)

---

# An agent reply walkthrough: one task, three original questions

Source: https://ntfyx.me/docs/agent-reply-walkthrough/

Updated: 2026-10-24

Run a harmless Ntfyx workflow: receive a notification, choose, type a reply and confirm in one Session. Verify the original answer and one-time claim before continuing.

## The task: review a note, then print a local summary

A script has a synthetic note ready and needs your input. It sends an ordinary notification, asks whether to continue, asks for a short text note, then requests a final Allow or Deny. Only the allowed branch prints a JSON summary in the original terminal and sends a completion notification. The script never deploys, changes a service, invokes an AI model or executes the reply text.

> This is an explicit CLI question workflow. An agent can call the same commands, but this demonstration does not intercept an arbitrary agent prompt or grant new tool permissions.

- [Agent setup and supported question paths](https://ntfyx.me/docs/agent-plugins/)
- [How Sessions group one task](https://ntfyx.me/docs/sessions/)

## Prerequisites and the exact script

Use the published Ntfyx CLI 0.4.1, Python 3, and an existing CLI connection approved by your primary phone. Work below is a CLI Topic alias: replace it with an alias shown by ntfyx topics. On the receiving phone, or an optional browser authorized for that Topic, keep the Inbox available. The script requires no Python packages and opens no local listening port. Read its source before running it.

```
ntfyx version --json
ntfyx topics

curl -fsSLo agent-reply-walkthrough.py https://ntfyx.me/examples/scripts/agent-reply-walkthrough.py
cat agent-reply-walkthrough.py
python3 agent-reply-walkthrough.py Work
```

> The script sends only synthetic demonstration messages to your paired Topic. Do not enter credentials, private logs or sensitive text as the example note. Installing an agent plugin is not required for this standalone workflow.

- [Read agent-reply-walkthrough.py](https://ntfyx.me/examples/scripts/agent-reply-walkthrough.py)
- [Download the signed CLI and phone app](https://ntfyx.me/download/)
- [Pairing and delivery troubleshooting](https://ntfyx.me/docs/troubleshooting/)

## Answer each original question

At startup the terminal prints a new Session identifier. The script uses that same identifier and the name A harmless reply walkthrough for every message and question in this run. Open that conversation in the selected Topic. Each answer belongs to the request that asked it; typing a note is not an answer to the final confirmation.

| Step | What to do | What may continue |
| --- | --- | --- |
| Ordinary notification | Read Reply walkthrough: start. | Nothing has been approved or executed. |
| Choice | Select Prepare the demo summary, or Stop this demo. | Only the continue option reaches the text question. |
| Text | Use Reply on that question and enter Review README only. | A verified, claimed text answer supplies data, not a command. |
| Confirmation | Review the final question and choose Allow or Deny. | Only a verified, claimed Allow reaches the local print. |
| Completion | Look for Reply walkthrough: completed in the same conversation. | It reports this script’s local demo result; it is not a deployment receipt. |

- [Original-message replies and conversation scope](https://ntfyx.me/docs/sessions/)

## Why checking a successful exit is not enough

Synchronous ntfyx ask verifies the signed answer against the saved original request, checks its request binding and deadline, and acquires a one-time claim. The example additionally checks answered status, the claim flag, the response type and the selected choice. A valid Stop choice is still a successfully answered choice; its meaning must be read. A read-only ntfyx result can also exit 0 without granting any execution claim. The example returns normally after Stop, but does not print a summary or run another step.

> Do not replace this flow with ask --async or a read-only result query and treat their exit status as approval. This script is only a demonstration, not an authorization wrapper for an external command. A one-time claim cannot make an external deployment or transaction exactly once.

- [CLI result and claim semantics](https://ntfyx.me/docs/cli/)
- [A smaller Allow/Deny gate](https://ntfyx.me/docs/phone-approval/)

## Deliberately try the stopping paths

Start a fresh run for each deliberate case. First choose Stop this demo: no text or confirmation should follow. On another run, continue and supply the note, then choose Deny: no summary should print. To observe a short unanswered wait, run the command below and leave its choice unanswered. It stops with exit14 and attempts to cancel the pending request; a late answer cannot restart the exited process.

```
python3 agent-reply-walkthrough.py Work --wait 1s --expires 90s
```

| Outcome | Observed exit | Local summary printed? |
| --- | --- | --- |
| Continue, text and final Allow | 0 | Yes, one local summary. |
| Stop at the choice | 0 | No; the valid choice ended the demo normally. |
| Final Deny | 10 | No. |
| Unanswered one-second wait | 14 | No. |
| Try to claim an already consumed answer again | 15 | No new claim. |

> A network or verification failure before the final Allow stops the workflow. If the final completion notification fails, the local summary may already have printed. Inspect the terminal and original request state; do not rerun an uncertain operation merely to obtain a success message.

## Recorded verification: 24 October 2026

This exact public example was exercised against the real staging API using the published Linux x64 CLI 0.4.1 release binary. Its SHA-256 was fb28aace205be64f82d440ef3dec5da6d0e7074c8144063e6dbd4ca75698a89a, matched to the publicly served signed release manifest. Continue, Stop, Deny and unanswered timeout all passed. A locally generated programmatic Phone receiver decrypted the notifications and signed the answers; no physical phone, APNs/FCM alert, browser UI or live Claude/Codex host was used.

| Check | Recorded observation |
| --- | --- |
| Context | Each fixture kept its ordinary messages and questions in one Topic and Session. |
| Continue | Choice, text and confirmation were verified and claimed; only this case printed the summary and sent completion. |
| Stop and Deny | Neither printed a summary; Stop did not ask the later questions. |
| Timeout | The CLI cancelled the request; the receiver SDK refused to submit a late answer after reading that terminal state. |
| Seven answered requests | Each had a bound signed answer and a server-side claim; repeated CLI claim exited15 and a fresh server claim was refused. |
| Read-only results | They exited0 but did not grant a claim, including for the denied answer. |
| Cleanup | All four synthetic Inboxes were root-deleted and their temporary CLI credentials removed. |

> These observations establish the stated CLI/protocol workflow with synthetic inputs. They do not establish a person saw an alert, an AI agent chose an action, macOS was tested in this run, or an external task completed.

- [Public verification summary (JSON)](https://ntfyx.me/guides/agent-reply-walkthrough/receipt-summary.json)

## Ordinary questions are separate from native permission hooks

The same explicit send and ask workflow is supported by the macOS and Linux companion CLI. This recorded run used Linux x64 only. Native host permission hooks are a separate integration with narrower tested versions and modes: the published guides describe Linux x64 checks and Apple silicon Mac validation with Claude Code 2.1.303 and Codex 0.163.0 (CLI 0.1.5+), with Intel Mac terminal fallback. A local MCP tool, a completion hook and a native PermissionRequest are not interchangeable. Keep the host’s own sandbox, deny rules and trust decisions.

- [Claude Code modes and verified limits](https://ntfyx.me/docs/claude-code-notifications/)
- [Codex hooks, trust and terminal fallback](https://ntfyx.me/docs/codex-phone-approval/)
- [Encryption and execution boundaries](https://ntfyx.me/security/)

---

# Agent 原问题回复实录：一件事，三个明确问题

Source: https://ntfyx.me/zh/docs/agent-reply-walkthrough/

Updated: 2026-10-24

运行一个无害的 Ntfyx 案例：收到通知、选择、填写备注并在同一 Session 确认。核对原问题签名回答与一次性 claim 后，脚本才继续。

## 这件事：核对一条示例备注，再打印本地摘要

脚本准备好一条合成备注，需要你补充信息。它先发普通通知，再问是否继续、需要什么文字备注，最后要求明确允许或拒绝。只有允许分支才在原终端打印一份 JSON 摘要，并发送完成通知。脚本不会部署、修改服务、调用 AI 模型，也不会把回复文字当作命令执行。

> 这是显式 CLI 问答。Agent 可以调用同样的命令，但本例不会截获任意 Agent 提示，也不增加工具执行权限。

- [Agent 安装与支持的提问入口](https://ntfyx.me/zh/docs/agent-plugins/)
- [Session 怎样聚合同一件事](https://ntfyx.me/zh/docs/sessions/)

## 准备条件与完整脚本

使用已公开的 Ntfyx CLI 0.4.1、Python 3，以及由主手机批准的现有 CLI 连接。下方 Work 是 CLI Topic 别名，请替换为 ntfyx topics 实际列出的别名。在接收手机或已为该 Topic 授权的浏览器中打开收件箱。脚本不需要额外 Python 包，也不会开启本地监听端口；先读源码再运行。

```
ntfyx version --json
ntfyx topics

curl -fsSLo agent-reply-walkthrough.py https://ntfyx.me/examples/scripts/agent-reply-walkthrough.py
cat agent-reply-walkthrough.py
python3 agent-reply-walkthrough.py Work
```

> 脚本只向你已连接的 Topic 发送示例消息。备注里不要填写凭据、私人日志或敏感内容。独立运行此流程不需要安装 Agent 插件。

- [阅读 agent-reply-walkthrough.py](https://ntfyx.me/examples/scripts/agent-reply-walkthrough.py)
- [下载签名 CLI 与手机 App](https://ntfyx.me/zh/download/)
- [配对与投递排查（英文）](https://ntfyx.me/docs/troubleshooting/)

## 在提出问题的那条消息上回答

启动时，终端会打印本轮新生成的 Session 标识。脚本为本轮所有消息和问题复用该标识，会话名称为 A harmless reply walkthrough。进入所选 Topic 下的这条会话。每次回答都对应提出它的原请求；填写备注不等于回答最后一道确认题。

| 步骤 | 你要做什么 | 什么可以继续 |
| --- | --- | --- |
| 普通通知 | 阅读 Reply walkthrough: start。 | 尚未批准或执行任何步骤。 |
| 选择题 | 选择 Prepare the demo summary 或 Stop this demo。 | 只有继续选项才会进入文字题。 |
| 文字题 | 点击该问题的“回复”，填写 Review README only. | 验签并领取后的文字只是数据，不是命令。 |
| 确认题 | 核对最后一个问题，选择 Allow 或 Deny。 | 只有验签并领取的 Allow 才进入本地打印。 |
| 完成消息 | 在同一会话查看 Reply walkthrough: completed。 | 它报告脚本的本地示例结果，不是部署回执。 |

- [原消息回复与会话范围](https://ntfyx.me/zh/docs/sessions/)

## 为什么不能只检查退出码成功

同步 ntfyx ask 会把签名回答与本地保存的原请求核对，检查请求绑定与截止时间，再领取一次性 claim。本例继续核对 answered 状态、已领取标志、回复类型和具体选项。有效的 Stop 也是成功回答的选择题，必须读取其含义；只读 ntfyx result 也能退出0，却不授予执行领取。本例选择 Stop 后正常结束，但不会打印摘要或执行下一步。

> 不要用 ask --async 或只读 result 的退出码替代批准。本脚本只是演示，不是外部命令的授权包装器；一次性 claim 也不能保证外部部署、交易或其他操作恰好执行一次。

- [CLI result 与 claim 语义（英文）](https://ntfyx.me/docs/cli/)
- [更小的 Allow/Deny 示例（英文）](https://ntfyx.me/docs/phone-approval/)

## 主动试一次停止分支

每个分支都从新一轮示例开始。先选择 Stop this demo，后续文字题和确认题不应出现。另一轮中选择继续并填写备注，再选择 Deny，不应打印摘要。要观察短等待超时，可运行下方命令，先不回答其选择题：脚本退出14，并尝试取消待处理请求；迟到回答不会重启已经退出的进程。

```
python3 agent-reply-walkthrough.py Work --wait 1s --expires 90s
```

| 结果 | 观察到的退出码 | 打印本地摘要？ |
| --- | --- | --- |
| 继续、填写备注、最后 Allow | 0 | 是，一份本地摘要。 |
| 选择题直接 Stop | 0 | 否，有效选项让示例正常结束。 |
| 最后 Deny | 10 | 否。 |
| 一秒内无人回答 | 14 | 否。 |
| 再次领取已消费的回答 | 15 | 不会取得新 claim。 |

> 最后 Allow 前的网络或验签失败会停止流程。如果最后的完成通知失败，本地摘要可能已经打印；应核对终端与原请求状态，不要为拿到成功提示而盲目重跑结果不确定的操作。

## 2026 年 10 月 24 日的实际验证

本例脚本使用已公开的 Linux x64 CLI 0.4.1 release 二进制，在真实 staging API 完成验证。二进制 SHA-256 为 fb28aace205be64f82d440ef3dec5da6d0e7074c8144063e6dbd4ca75698a89a，与公开服务的签名发行清单一致。继续、Stop、Deny、无人回答超时四种情况均通过。接收端是本地新生成、自动解密与签名回答的程序化 Phone 角色；没有使用实体手机、APNs/FCM 横幅、浏览器 UI，也没有运行真实 Claude/Codex 宿主。

| 检查 | 实际观察 |
| --- | --- |
| 上下文 | 每个隔离样本的普通消息与问题均在同一 Topic、同一 Session。 |
| 继续 | 选择、文字、确认均验签并领取；只有本分支打印摘要并发送完成。 |
| Stop 与 Deny | 均未打印摘要；Stop 后也没有继续提问。 |
| 超时 | CLI 已取消请求；接收端 SDK 读取终态后拒绝再提交迟到回答。 |
| 七个已回答请求 | 逐个核对原请求签名绑定及服务端 claim；重复 CLI 领取退出15，全新服务端 claim 同样被拒绝。 |
| 只读结果 | 均可退出0，但不授予 claim，包括被拒绝的回答。 |
| 清理 | 四个合成收件箱均由各自 root 删除，临时 CLI 凭据目录已清除。 |

> 这些观察只证明所述合成输入的 CLI／协议流程，不证明有人看见横幅、AI 自主选择了操作、本轮验证过 macOS，或某项外部任务已经完成。

- [公开验证摘要（JSON）](https://ntfyx.me/guides/agent-reply-walkthrough/receipt-summary.json)

## 普通问答与原生权限 Hook 分开看

macOS 与 Linux 配套 CLI 均支持这类显式 send、ask 流程，本轮实际运行只使用 Linux x64。宿主原生权限 Hook 是另一条适配链，已测版本和模式更窄；指南分别列出 Linux x64 与 Apple 芯片 Mac（Claude Code 2.1.303、Codex 0.163.0，需 CLI 0.1.5+）的验证范围；Intel Mac 原生审批仍回到终端。本地 MCP 工具、完成 Hook 和原生 PermissionRequest 不能相互替代，宿主沙盒、拒绝规则与本人信任选择继续有效。

- [Claude Code 的模式与验证边界](https://ntfyx.me/zh/docs/claude-code-notifications/)
- [Codex Hook、信任与终端回退](https://ntfyx.me/zh/docs/codex-phone-approval/)
- [加密和执行边界（英文）](https://ntfyx.me/security/)

---

# 官方插件投稿：手机确定后发布

Source: https://ntfyx.me/zh/docs/plugin-development/

Updated: 2026-10-19

任何人或 AI 都可用 Python 3 提交插件介绍与内容。每次投稿均由管理员在 Ntfyx App 点确定或拒绝，通过后才公开发布，无需注册或凭据。

## 自行采集，每次内容单独审核

流程只有自行开发采集器 → submit 插件介绍与示例 → 管理员在 App 点“确定”或“拒绝” → 审核通过后收录。此后每条新通知用 publish 投稿，仍需本次审核通过才能进入公开预览与订阅分发。任何人、AI 或 Agent 都可按指南投稿，不需要账号或申请凭据。平台不上传执行采集器代码，也不授予读取私人 Inbox 的权限。通过审核的插件沿用既有官方身份与订阅功能。

> pending_review 只表示待审，不能当作已经发布。只有该项 status 显示 approved 才表示已审并进入公开内容；这仍不证明每位用户已收到系统通知。

- [浏览通知市场](https://ntfyx.me/zh/plugins/)
- [本地 Agent 插件是另一条接入方式](https://ntfyx.me/zh/docs/agent-plugins/)

## 1. 下载脚本，提交插件介绍与示例

Python 3 标准库即可运行。先阅读脚本，修改 manifest 中的名称、介绍、版本、实际来源、隐私说明和支持地址；sample 使用可公开的普通文本。首次 submit 不指定 plugin_id。脚本在请求前持久保存 operation_id 和精确输入；丢失响应时重试原操作，不生成第二份申请。示例只用于审核及目录预览，不会作为一条真实通知分发。

```
curl -fsSLO https://ntfyx.me/developers/ntfyx-plugin.py
curl -fsSLO https://ntfyx.me/developers/plugin.example.json
curl -fsSLO https://ntfyx.me/developers/sample.example.json
# Read the script; replace example descriptions and URLs first.
python3 ntfyx-plugin.py submit --slug my-public-updates --manifest plugin.example.json --sample sample.example.json
python3 ntfyx-plugin.py status
```

> 修改已审核的插件介绍或来源时，用 submit --plugin 原已审插件ID 明确提交更新，仍需重新审核；批准前保持旧版本。该接口不能覆盖内置官方源。

- [Python 3 CLI · ntfyx-plugin.py](https://ntfyx.me/developers/ntfyx-plugin.py)
- [plugin.example.json](https://ntfyx.me/developers/plugin.example.json)
- [sample.example.json](https://ntfyx.me/developers/sample.example.json)
- [JSON Schema](https://ntfyx.me/developers/plugin.schema.json)
- [example-collector.py](https://ntfyx.me/developers/example-collector.py)

## 2. 在 App 原消息点“确定”或“拒绝”

管理员在手机的插件审核专用 Topic 打开该次请求，直接核对正文里的插件介绍、版本、来源与示例内容。点“确定”表示批准这一项，点“拒绝”表示不发布；按钮文字保持中文。无需跳网页。打开通知、阅读、超时或脚本查询状态都不会批准。若手机显示回复已保存或等待连接，应等待原回复验签与确认，不再提交一份同内容；最终结果以 status 为准。

## 3. 每条新通知也用 publish 等待审核

插件介绍获批后，把采集结果保存为稳定 event_id、title、body，再调用 publish。每个事件都会返回自己的 submission_id，独立等待 App“确定／拒绝”；介绍通过不等于后续内容自动放行。相同事件重试保留同 ID 与完全相同内容，改内容复用 ID 会冲突。模板只生成明确合成数据，不请求真实服务、不自行投稿。

```
curl -fsSLO https://ntfyx.me/developers/example-collector.py
python3 example-collector.py --event-id example-2026-10-19-001 > event.json
# Synthetic example only. Each publication waits for phone review.
python3 ntfyx-plugin.py publish --file event.json
python3 ntfyx-plugin.py status
```

> 普通用户仍主动选择订阅、暂停、退订或静音；投稿者不能指定他人的 Inbox。每次批准仅覆盖原事件和冻结内容。

## 未知结果继续原操作

请求结果未知时运行 retry，恢复原路径、原 ID 与原正文；脚本不会自动重发写请求。status 只读取安全状态，不发新审核，不回显未公开正文或内部审核信息。被拒绝或过期的同 ID 重试仍返回原终态，不会自动重新申请；若明确重新投稿，需要新的 operation_id 或新的事件 ID。生产与 staging 使用不同私有状态文件；--server https://api.staging.ntfyx.me 必须放在命令前。旧版状态不会自动转成匿名请求重发。

```
python3 ntfyx-plugin.py retry
python3 ntfyx-plugin.py status
```

| 情况 | 继续方式 |
| --- | --- |
| 结果未知 | 保留状态文件，运行 retry；不要先改事件ID或正文。 |
| HTTP 409 | 核对同ID内容或插件状态，不盲目换ID绕过原结果。 |
| HTTP 429／503 | 等待服务恢复或限额允许后重试原操作；待审队列满不是审批成功。 |
| 修改未确认输入 | 先确认原结果。另选 --state 文件可保留原意图，新操作不会取消原审核。 |

## 投稿通道的简短限制

匿名投稿按 IP 每10分钟最多6次，全局同时最多50个未过期待审项。动态插件容量29项，metadata待审也占位；每插件每UTC日最多10个新通知投稿，待审与拒绝也计入，同ID同内容重试不重复计数。规范manifest含服务端补齐字段最多1600个UTF-8字节；标题120、正文8000个UTF-16码元，完整消息仍受16KiB UTF-8限制。Schema不能单独证明服务端规范化后的总字节数。

> 逐项审核只适用于本投稿通道。基金等既有内置官方源继续按已批准的采集计划运行；没有因此暂停原自动通知。

- [消息与服务限制](https://ntfyx.me/limits/)
- [公开内容与私密消息的边界](https://ntfyx.me/security/)

---

# Submit an official plugin: review every publication in the app

Source: https://ntfyx.me/docs/plugin-development/

Updated: 2026-10-19

Anyone or any AI can submit plugin metadata and content using Python 3. Every item needs an administrator’s in-app approval before publication; no account or credential is required.

## Run your collector; review every submitted item

Build your collector, submit its description and sample, then wait for an administrator to choose 确定 (approve) or 拒绝 (reject) in Ntfyx. Every later notification submitted with publish needs its own decision before public preview or subscriber delivery. Anyone or any agent can submit without an account or credential. Ntfyx does not upload or run collector code, and this interface cannot read private Inboxes. Approved plugins use the existing official catalog and subscription workflow.

> pending_review is not published. approved means this item was reviewed and entered the public content flow; it does not prove that every subscriber saw a system notification.

- [中文完整投稿指南](https://ntfyx.me/zh/docs/plugin-development/)
- [Notification marketplace](https://ntfyx.me/plugins/)

## 1. Submit the description and a review sample

Use Python 3 and its standard library. Inspect the script and replace the example manifest’s name, scope, version, real sources, privacy URL and support URL. The sample must be public plain text. Omit plugin_id for a new plugin. The client persists its operation ID and exact input before sending, so an uncertain request can retain its original identity. The sample is review/catalog-preview material, not a subscriber publication.

```
curl -fsSLO https://ntfyx.me/developers/ntfyx-plugin.py
curl -fsSLO https://ntfyx.me/developers/plugin.example.json
curl -fsSLO https://ntfyx.me/developers/sample.example.json
# Read the script; replace example descriptions and URLs first.
python3 ntfyx-plugin.py submit --slug my-public-updates --manifest plugin.example.json --sample sample.example.json
python3 ntfyx-plugin.py status
```

> For a metadata update, explicitly use submit --plugin EXISTING_APPROVED_PLUGIN_ID. The update needs another review; the previous version remains until approval. Built-in sources cannot be overwritten through this interface.

- [Python 3 CLI · ntfyx-plugin.py](https://ntfyx.me/developers/ntfyx-plugin.py)
- [plugin.example.json](https://ntfyx.me/developers/plugin.example.json)
- [sample.example.json](https://ntfyx.me/developers/sample.example.json)
- [JSON Schema](https://ntfyx.me/developers/plugin.schema.json)
- [example-collector.py](https://ntfyx.me/developers/example-collector.py)

## 2. Choose 确定 or 拒绝 in the original app request

The administrator opens the request in a dedicated plugin review Topic and reads its description, version, sources and submitted content. 确定 approves this item; 拒绝 keeps it unpublished. These supplied button labels stay Chinese. No browser approval page is needed. Opening, reading, timeout and status queries approve nothing. A queued phone reply must finish verification and confirmation; do not create another submission simply because its result is still pending.

## 3. Submit every new event for another review

After metadata approval, save a stable event_id, title and body, then run publish. Each event returns a separate submission_id and waits for its own in-app decision. Metadata approval never grants automatic approval for later content. Retry the same ID and exact content after an uncertain response; changed content with the same ID conflicts. The collector template creates synthetic example data, performs no network request and submits nothing by itself.

```
curl -fsSLO https://ntfyx.me/developers/example-collector.py
python3 example-collector.py --event-id example-2026-10-19-001 > event.json
# Synthetic example only. Each publication waits for phone review.
python3 ntfyx-plugin.py publish --file event.json
python3 ntfyx-plugin.py status
```

> Subscribers still opt in and can pause, unsubscribe or mute. A submission cannot select another person’s Inbox. Each approval binds the original item and its frozen content.

## Recover the original operation

retry preserves the saved path, ID and body; there are no automatic write retries. status reads only safe status fields and never requests or simulates approval. Replaying a rejected or expired ID returns that terminal result, without a new request. A deliberate resubmission needs a new operation ID or source event ID. Production and staging state are separate; put --server https://api.staging.ntfyx.me before the command. Earlier client state is never automatically replayed through the anonymous interface.

```
python3 ntfyx-plugin.py retry
python3 ntfyx-plugin.py status
```

| Result | Next step |
| --- | --- |
| Uncertain outcome | Keep the private state file and retry the original operation. |
| HTTP 409 | Inspect the original ID/content and plugin state; do not blindly change IDs. |
| HTTP 429 / 503 | Wait, then retry the same operation. A full review queue is not an approval. |
| Changing uncertain input | Check the original result first. An explicitly different --state file preserves the earlier intent; a new operation does not cancel the original review. |

## Small submission limits

Anonymous submissions: 6 per IP per 10 minutes, with at most 50 unexpired pending items globally. The catalog has 29 dynamic-plugin slots including pending metadata. Each plugin accepts 10 new notification submissions per UTC day, including pending and rejected items; identical ID/content retries do not count again. The server-canonical manifest is limited to 1,600 UTF-8 bytes. Titles use at most 120 and bodies 8,000 UTF-16 code units; the complete message must also fit 16 KiB UTF-8. JSON Schema alone cannot calculate the completed canonical manifest budget.

> Per-item review applies to this submission channel. Existing built-in sources, including the fund collector, continue their approved automatic schedules.

- [Service limits](https://ntfyx.me/limits/)
- [Public content and private message boundaries](https://ntfyx.me/security/)

---

# AI agent notification tools: phone alerts, replies and remote control

Source: https://ntfyx.me/docs/coding-agents-on-your-phone/

Updated: 2026-10-29

Compare Ntfyx, BotBell, AgentPager, anotifier, Remote Control and other tools for Claude Code and Codex. Official sources, reply paths, platforms, privacy and limits.

## Choose by what you need on your phone

For a whole Claude Code session, start with official Remote Control if your account is eligible. For Claude Code and Codex session access, evaluate Happy. For a completion alert, a terminal notification or ntfy completion hook may be enough. For permission decisions or questions, compare the supported workflow in Ntfyx, BotBell, AgentPager, Pushary and claude-remote-approver.

| Your goal | Start here |
| --- | --- |
| Full conversation and continued instructions | Remote Control / Happy |
| Completion alert only | Terminal alert at the desk; ntfy hook for a phone |
| Approve a permission or answer a question | Ntfyx / BotBell / AgentPager / Pushary / claude-remote-approver |
| Claude Code, Codex and ordinary scripts together | Ntfyx CLI/MCP; HTTP hooks for alerts |

> Written by Ntfyx. BotBell, AgentPager and anotifier sources checked 2026-10-24; other third-party rows retain their 2026-10-19 check date. Ntfyx availability updated 2026-10-24. This is a documentation comparison, not a hands-on benchmark of third-party products. “Unverified” means the reviewed official sources did not establish that cell. Agent/model subscriptions and hosting can add costs.

- [Anthropic: Remote Control](https://code.claude.com/docs/en/remote-control)
- [Happy: mobile features and encryption](https://happy.engineering/mobile-app/)
- [ntfy: publishing, clients and free use](https://ntfy.sh/)
- [Pushary: supported agents, questions and pricing](https://pushary.com/download)
- [claude-remote-approver: official README](https://github.com/yuuichieguchi/claude-remote-approver)
- [BotBell: agent notifications, options and text replies](https://botbell.app/docs/skill/)
- [AgentPager: publisher description on Google Play](https://play.google.com/store/apps/details?id=com.cosmovex.agentpager)
- [anotifier: phone push through ntfy](https://anotifier.io/phone/)

## Capabilities, requirements and starting prices

Permission approval authorizes a specific tool action. Answering a question supplies input to a waiting task. A completion notification reports an event. Check all three separately; a button, MCP support or encryption label does not establish the whole workflow. Sources and the verification date are attached to each row.

| Tool | Best for | Agents | Permission approval | Answer questions | End-to-end encryption | Account required | Platforms | Starting price | Sources · checked |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Claude Code Remote Control | Continue the whole Claude session | Claude Code | Yes, within the remote session | Yes, including AskUserQuestion | Unverified; TLS and server-stored transcript documented | Claude account + eligible paid plan | Claude iOS/Android app or browser; agent on your computer | Included with Pro/Max/Team/Enterprise; entry price unverified | 2026-10-19 [Anthropic: Remote Control](https://code.claude.com/docs/en/remote-control) |
| Happy (slopus/happy) | Continue sessions across desktop and phone | Claude Code, Codex | Phone permission requests documented | Messages and questions | Yes, device-to-device session sync; voice has a separate data flow | Paired Happy identity + agent provider login | iOS, Android, Web; desktop macOS/Windows/Linux | Free app; model access separate; optional voice paid beyond allowance | 2026-10-19 [Happy: slopus/happy](https://github.com/slopus/happy) · [Happy: mobile features and encryption](https://happy.engineering/mobile-app/) · [Happy: original CLI](https://happy.engineering/guides/terminal/) · [Happy: optional voice pricing and privacy](https://happy.engineering/voice/) |
| Terminal notifications | Local attention alerts; no phone channel by themselves | Claude Code | No remote decision channel | No remote answer channel | Not applicable to a local alert | No extra notification account | Compatible terminal / OS notification center | No separate notification service fee; agent costs separate | 2026-10-19 [Anthropic: terminal notifications](https://code.claude.com/docs/en/terminal-config) |
| ntfy + your own completion hook | Phone alerts from a hook, command or script | Any HTTP-capable script; Claude hooks documented | Custom integration needed; actions alone are not an agent adapter | Custom reply contract needed | Unverified | No sign-up needed for public ntfy.sh topics; server policy varies | iOS, Android, Web; hosted or self-hosted | Free tier; paid plans and hosting costs separate | 2026-10-19 [ntfy: publishing, clients and free use](https://ntfy.sh/) · [ntfy: notification actions](https://docs.ntfy.sh/publish/#action-buttons) · [Anthropic: hooks guide](https://code.claude.com/docs/en/hooks-guide) |
| Ntfyx | Commands, scripts and agent questions in one Inbox | Claude Code, Codex; explicit CLI/local MCP for other clients | Supported hooks only; Linux x64 or Apple silicon Mac limits below | Confirm, choice, text; Claude AskUserQuestion bridge; Codex explicit MCP | CLI/agent content and replies: yes; HTTPS ingress is service-readable | No Ntfyx account; phone pairing for agent/CLI | iOS, Android, authorized Web/Chrome; CLI: Windows, macOS and Linux | Free allowance; limits apply | 2026-10-29 [Ntfyx: agent compatibility and setup](https://ntfyx.me/docs/agent-plugins/) · [Ntfyx: encryption scope](https://ntfyx.me/security/) · [Ntfyx: free allowance and limits](https://ntfyx.me/limits/) |
| Pushary | Agent permission policy, phone decisions and audit history | Claude Code, Codex, Cursor, Gemini CLI, Hermes; MCP | Enforced on supported hooked agents; plain MCP is cooperative | Confirm, choice and text questions | Decision text processed by service; transcript encryption is a separate path | Pushary account and paid agent plan | iPhone, Android, Web; macOS app | US$9.99/month after 3-day trial | 2026-10-19 [Pushary: supported agents, questions and pricing](https://pushary.com/download) · [Pushary: enforced hooks and cooperative MCP](https://pushary.com/ai-agent-permission-policy) · [Pushary: decision-path privacy](https://pushary.com/privacy) |
| claude-remote-approver | Claude-only permissions through ntfy | Claude Code | PermissionRequest hook; timeout returns to terminal | AskUserQuestion options documented; free text unverified | Unverified; public ntfy server processes request details | No account for default public topics; provider login separate | Node.js 18+ and ntfy iOS/Android app; host OS matrix unverified | Free MIT software; ntfy service/hosting costs separate | 2026-10-19 [claude-remote-approver: official README](https://github.com/yuuichieguchi/claude-remote-approver) |
| BotBell | Agent notifications and explicit phone questions | Claude Code, Codex and other Agent Skills / MCP clients | Skill can ask for confirmation; native hook enforcement unverified | Options and text replies, with a waiting agent | Unverified | Create a Bot and configure its token; account policy unverified | App Store app; skill requires curl and jq | Unverified | 2026-10-24 [BotBell: agent notifications, options and text replies](https://botbell.app/docs/skill/) |
| AgentPager | Remote agent sessions plus script notifications | Claude Code, Codex; additional agents through ACP | Publisher documents approve / deny and script ask | Publisher documents phone replies and voice | Publisher states computer-to-phone E2EE; not independently audited here | No account; scan to pair | Android; bridge on macOS/Linux/Windows with Node 20+ | Free with ads: one computer/session, 30 live minutes per day; paid Pro | 2026-10-24 [AgentPager: publisher description on Google Play](https://play.google.com/store/apps/details?id=com.cosmovex.agentpager) |
| anotifier + ntfy | Phone alerts when an agent finishes or needs input | Claude Code, Codex, Cursor, Gemini CLI | Phone approval channel not established by this source | Phone reply channel not established by this source | Generic alert text by default; rich content reserved for a private ntfy server | No account for default public ntfy topics | iPhone/Android through ntfy; agent-host support varies | Free public ntfy path; private hosting costs separate | 2026-10-24 [anotifier: phone push through ntfy](https://anotifier.io/phone/) |

## Ntfyx: one Inbox for scripts and agent replies

Ntfyx fits a workflow that sends command or script results and occasionally waits for a confirmation, choice or text answer. It keeps answers with the original question and can group task updates in a Session. It does not mirror an entire agent transcript or provide a remote shell.

```
npm run build && ntfyx send "Build passed"
ntfyx ask "What should I check next?" --text
```

> Protected Topic CLI and agent message titles, bodies, options and replies are end-to-end encrypted on your devices. Public Topic names and messages are readable by the service and anyone with the Topic ID or link. The explicit fixed monitor-access and webhook-management questions and their signed phone answers are disclosed to the service for verification. HTTPS push and webhook requests are readable by the service before encrypted delivery. Optional provider verification secrets are encrypted and stored by the service, then used in plaintext to verify the raw webhook body; they are hosted secrets, not hidden from the service. My Monitor reads the monitored address, rule and response; a public publisher knows the content it publishes. The relay routes ciphertext and processes operational metadata such as identifiers, time, size and push tokens. Do not put secrets in monitored URLs or request examples. Independent security review is not complete.

- [Script notifications](https://ntfyx.me/docs/notifications/)
- [Phone questions and verified replies](https://ntfyx.me/docs/agent-reply-walkthrough/)

## Ntfyx native approvals: the verified boundary

Native permission hooks were verified on Linux x64 with Claude Code 2.1.283 / 2.1.284 and Codex 0.158.0, and on Apple silicon Mac with Claude Code 2.1.303 and Codex 0.163.0 (CLI 0.1.5+). Intel Mac native approvals remain unverified and return to the terminal. Codex requires interactive TUI and /hooks trust; codex exec does not trigger that approval flow. Claude permission hooks are opt-in with --permissions on. Claude interactive terminal-choice precedence and terminal UI takeover have not been verified.

> Claude AskUserQuestion bridging is separate from tool permission approval. Codex native request_user_input is not intercepted; use explicit Ntfyx MCP questions. Unsupported payloads, denial, timeout and invalid or already-consumed answers never become permission to run.

- [Compatibility matrix and setup](https://ntfyx.me/docs/agent-plugins/)
- [Claude Code notification guide](https://ntfyx.me/docs/claude-code-notifications/)
- [Codex phone approval guide](https://ntfyx.me/docs/codex-phone-approval/)

## When another approach fits better

If you only use Claude Code and want its entire conversation on your phone, official Remote Control is a more direct fit than Ntfyx. Choose a full-session tool such as Happy when reading and steering sessions is the goal. For a simple one-way alert, a small ntfy hook can be sufficient. Ntfyx supports Windows CLI and local MCP. If supported self-hosting, full-session control or arbitrary terminal input is required, choose a tool designed for that workflow. Native permission hooks have the separate platform limits above.

- [Anthropic: Remote Control](https://code.claude.com/docs/en/remote-control)
- [Happy: original CLI](https://happy.engineering/guides/terminal/)
- [ntfy: publishing, clients and free use](https://ntfy.sh/)
- [Compare general notification tools](https://ntfyx.me/docs/notification-tools/)

## Continue with a setup guide

Choose the workflow first, then verify a harmless notification or question on your own devices before relying on it. The computer and waiting process must remain available for a phone answer to continue that task.

- [Ntfyx home](https://ntfyx.me/)
- [Claude Code notifications](https://ntfyx.me/docs/claude-code-notifications/)
- [Codex phone approvals](https://ntfyx.me/docs/codex-phone-approval/)
- [Phone approval gates](https://ntfyx.me/docs/phone-approval/)
- [Notification tools](https://ntfyx.me/docs/notification-tools/)

---

# AI Agent 通知工具对比：手机提醒、回复与远程会话

Source: https://ntfyx.me/zh/docs/coding-agents-on-your-phone/

Updated: 2026-10-29

比较 Ntfyx、BotBell、AgentPager、anotifier、Remote Control 等工具如何支持 Claude Code、Codex 的手机通知与回复；附官方来源、平台要求与限制。

## 先按手机上要做的事选

只用 Claude Code、需要查看并继续整个会话，且账号符合条件时，优先看官方 Remote Control。需要 Claude Code 与 Codex 会话访问，可看 Happy。只要完成提醒，终端通知或 ntfy 完成 Hook 可能已够用。要在手机审批权限或回答问题，再比较 Ntfyx、BotBell、AgentPager、Pushary 与 claude-remote-approver 的具体接入。

| 需求 | 优先看 |
| --- | --- |
| 完整会话与继续下指令 | Remote Control / Happy |
| 只要完成提醒 | 电脑旁用终端提醒；手机提醒看 ntfy Hook |
| 审批权限或回答问题 | Ntfyx / BotBell / AgentPager / Pushary / claude-remote-approver |
| Claude Code、Codex 与普通脚本混用 | Ntfyx CLI/MCP；只需提醒可用 HTTP Hook |

> 本页由 Ntfyx 编写。BotBell、AgentPager 与 anotifier 来源于 2026-10-24 核对，其他第三方行保留 2026-10-19 核对日期；Ntfyx 可用状态更新于 2026-10-24。这是官方文档比较，不是第三方产品的实机横测。“未核实”表示所查官方来源无法确认该格。Agent/模型订阅与托管可能另有费用。

- [Anthropic: Remote Control](https://code.claude.com/docs/en/remote-control)
- [Happy: mobile features and encryption](https://happy.engineering/mobile-app/)
- [ntfy: publishing, clients and free use](https://ntfy.sh/)
- [Pushary: supported agents, questions and pricing](https://pushary.com/download)
- [claude-remote-approver: official README](https://github.com/yuuichieguchi/claude-remote-approver)
- [BotBell: agent notifications, options and text replies](https://botbell.app/docs/skill/)
- [AgentPager: publisher description on Google Play](https://play.google.com/store/apps/details?id=com.cosmovex.agentpager)
- [anotifier: phone push through ntfy](https://anotifier.io/phone/)

## 能力、要求与价格起点

权限审批决定一项工具操作是否可以执行；问题回答向等待中的任务补充输入；完成通知报告一个事件。三者分别核对，不能只凭按钮、MCP 或加密标签判断完整流程。每行附官方来源与核对日期。

| 工具 | 适合谁 | 支持的 Agent | 权限审批 | 回答问题 | 端到端加密 | 需要账号 | 平台 | 价格起点 | 来源 · 核对日期 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Claude Code Remote Control | 继续完整 Claude 会话 | Claude Code | 支持，限远程会话 | 支持，含 AskUserQuestion | 未核实；官方说明 TLS 传输并在服务端保存会话 | Claude 账号与符合条件的付费套餐 | Claude iOS/Android App 或浏览器；Agent 在电脑运行 | 包含于 Pro/Max/Team/Enterprise；起价未核实 | 2026-10-19 [Anthropic: Remote Control](https://code.claude.com/docs/en/remote-control) |
| Happy (slopus/happy) | 在电脑与手机间继续会话 | Claude Code, Codex | 官方说明可在手机回答权限请求 | 消息与问题 | 会话设备同步支持；语音有独立数据流程 | 配对 Happy 身份与 Agent 服务登录 | iOS、Android、Web；桌面 macOS/Windows/Linux | App 免费；模型服务另计；可选语音超额度付费 | 2026-10-19 [Happy: slopus/happy](https://github.com/slopus/happy) · [Happy: mobile features and encryption](https://happy.engineering/mobile-app/) · [Happy: original CLI](https://happy.engineering/guides/terminal/) · [Happy: optional voice pricing and privacy](https://happy.engineering/voice/) |
| 终端通知 | 在电脑旁收到提醒；本身不是手机通道 | Claude Code | 没有远程决定通道 | 没有远程回答通道 | 本机提醒不适用 | 不增加通知账号 | 兼容终端／操作系统通知中心 | 无额外通知服务费；Agent 费用另计 | 2026-10-19 [Anthropic: terminal notifications](https://code.claude.com/docs/en/terminal-config) |
| ntfy + 自配完成 Hook | Hook、命令或脚本的手机提醒 | 可发 HTTP 的脚本；Claude Hook 有官方文档 | 需自行接入；操作按钮本身不是 Agent 适配器 | 需自行实现回复约定 | 未核实 | 公开 ntfy.sh Topic 无需注册；自托管依配置 | iOS、Android、Web；托管或自托管 | 可免费开始；付费套餐与自托管成本另计 | 2026-10-19 [ntfy: publishing, clients and free use](https://ntfy.sh/) · [ntfy: notification actions](https://docs.ntfy.sh/publish/#action-buttons) · [Anthropic: hooks guide](https://code.claude.com/docs/en/hooks-guide) |
| Ntfyx | 命令、脚本通知与 Agent 问答共用收件箱 | Claude Code、Codex；其他客户端显式调用 CLI/本地 MCP | 限支持的 Hook；Linux x64 或 Apple 芯片 Mac 范围见下 | 确认、选择、文字；Claude AskUserQuestion 桥接；Codex 显式 MCP | CLI/Agent 内容与回复支持；HTTPS 接入对服务端可见 | 无需 Ntfyx 账号；Agent/CLI 需手机配对 | iOS、Android、授权 Web/Chrome；CLI：Windows、macOS 和 Linux | 可免费开始；有服务额度 | 2026-10-29 [Ntfyx: agent compatibility and setup](https://ntfyx.me/zh/docs/agent-plugins/) · [Ntfyx: encryption scope](https://ntfyx.me/security/) · [Ntfyx: free allowance and limits](https://ntfyx.me/limits/) |
| Pushary | Agent 权限策略、手机决定与审计记录 | Claude Code, Codex, Cursor, Gemini CLI, Hermes; MCP | 支持 Hook 的 Agent 可强制等待；普通 MCP 由 Agent 主动调用 | 确认、选择与文字问题 | 服务处理决定正文；会话记录加密属于独立流程 | Pushary 账号与付费 Agent 套餐 | iPhone、Android、Web；macOS App | 3 天试用后 US$9.99/月 | 2026-10-19 [Pushary: supported agents, questions and pricing](https://pushary.com/download) · [Pushary: enforced hooks and cooperative MCP](https://pushary.com/ai-agent-permission-policy) · [Pushary: decision-path privacy](https://pushary.com/privacy) |
| claude-remote-approver | 只需通过 ntfy 审批 Claude 权限 | Claude Code | PermissionRequest Hook；超时回到终端 | 官方说明 AskUserQuestion 选项；自由文字未核实 | 未核实；公开 ntfy 服务处理请求详情 | 默认公开 Topic 无需账号；Agent 服务登录另计 | Node.js 18+ 与 ntfy iOS/Android App；宿主系统矩阵未核实 | 免费的 MIT 软件；ntfy 服务／托管费用另计 | 2026-10-19 [claude-remote-approver: official README](https://github.com/yuuichieguchi/claude-remote-approver) |
| BotBell | Agent 通知与主动手机问答 | Claude Code、Codex 及其他 Agent Skills / MCP 客户端 | Skill 可主动请求确认；原生 Hook 强制等待未核实 | 选项与文字回复；Agent 等待回答 | 未核实 | 创建 Bot 并配置 token；账号策略未核实 | App Store App；Skill 需要 curl 与 jq | 未核实 | 2026-10-24 [BotBell: agent notifications, options and text replies](https://botbell.app/docs/skill/) |
| AgentPager | 远程 Agent 会话与脚本通知 | Claude Code、Codex；其他 Agent 通过 ACP | 发布者说明支持批准／拒绝与脚本 ask | 发布者说明支持手机回复与语音 | 发布者称电脑到手机端到端加密；本页未独立审计 | 无需账号；扫码配对 | Android；桥接程序需要 macOS/Linux/Windows 与 Node 20+ | 免费含广告：一台电脑、一个会话、每天 30 分钟；另有付费 Pro | 2026-10-24 [AgentPager: publisher description on Google Play](https://play.google.com/store/apps/details?id=com.cosmovex.agentpager) |
| anotifier + ntfy | Agent 完成或等待输入时提醒手机 | Claude Code, Codex, Cursor, Gemini CLI | 本来源未证实手机审批通道 | 本来源未证实手机回复通道 | 默认发送通用提醒；丰富内容建议使用私有 ntfy 服务 | 默认公开 ntfy Topic 无需账号 | 通过 ntfy 到 iPhone/Android；Agent 宿主支持另核对 | 公开 ntfy 通道可免费使用；私有托管费用另计 | 2026-10-24 [anotifier: phone push through ntfy](https://anotifier.io/phone/) |

## Ntfyx：脚本与 Agent 回复共用一个收件箱

命令或脚本报告结果，并偶尔等待确认、选择或文字答案时，Ntfyx 可以把这些消息放进同一个收件箱。回答保留在原问题下，任务进展可按 Session 归组。Ntfyx 不镜像完整 Agent 会话，也不提供远程 Shell。

```
npm run build && ntfyx send "Build passed"
ntfyx ask "What should I check next?" --text
```

> 受保护 Topic 中 CLI 与 Agent 消息的标题、正文、选项和回复在设备上端到端加密；公开 Topic 的名称和消息对服务端及持有标识或链接的人可见。明确的监控 / Webhook 管理固定授权问题及手机签名答案会披露给服务端核验。HTTPS 推送与 Webhook 请求在加密投递前对服务可见；可选供应商验证 secret 由服务加密存储，并在验签时以明文验证原始 body，是托管 secret，并非服务端不可见；My Monitor 会读取监控地址、规则和响应，公开发布者知道自己发送的内容。中继转发密文，仍处理标识符、时间、大小和推送令牌等运行元数据。不要在监控 URL 或请求示例中放密钥。尚未完成独立安全审计。

- [脚本通知](https://ntfyx.me/docs/notifications/)
- [手机提问与已核验回复](https://ntfyx.me/zh/docs/agent-reply-walkthrough/)

## Ntfyx 原生审批：已验证的边界

原生权限 Hook 已验证 Linux x64 上的 Claude Code 2.1.283 / 2.1.284 与 Codex 0.158.0；Apple 芯片 Mac 已验证 Claude Code 2.1.303 与 Codex 0.163.0，需 CLI 0.1.5+。Intel Mac 原生审批仍未验证，回到终端。Codex 需交互 TUI 与 /hooks 信任，codex exec 不触发该审批流程。Claude 权限 Hook 需显式 --permissions on。Claude 交互式终端选项的优先关系与终端 UI 接管尚未验证。

> Claude AskUserQuestion 桥接与工具权限审批是不同接入。Codex 原生 request_user_input 不会被拦截，应显式调用 Ntfyx MCP 提问。不支持的请求、拒绝、超时、无效或已领取的回答，都不会变成执行许可。

- [兼容表与安装](https://ntfyx.me/zh/docs/agent-plugins/)
- [Claude Code 通知指南](https://ntfyx.me/zh/docs/claude-code-notifications/)
- [Codex 手机审批指南](https://ntfyx.me/zh/docs/codex-phone-approval/)

## 什么时候其他方案更合适

只用 Claude Code、想在手机查看整个会话时，官方 Remote Control 比 Ntfyx 更直接。目标是阅读并继续操控会话时，可看 Happy 这类完整会话工具。简单单向提醒可能用一个 ntfy Hook 就够。Ntfyx 已支持 Windows CLI 与本地 MCP。需要受支持的自托管、完整会话控制或任意终端输入转发时，应选择针对这些流程的工具；原生权限 Hook 另有上面的平台限制。

- [Anthropic: Remote Control](https://code.claude.com/docs/en/remote-control)
- [Happy: original CLI](https://happy.engineering/guides/terminal/)
- [ntfy: publishing, clients and free use](https://ntfy.sh/)
- [比较通用通知工具](https://ntfyx.me/zh/docs/notification-tools/)

## 继续查看接入指南

先选流程，再在自己的设备上验证一条无害通知或问题。手机回答要继续原任务，电脑与等待中的进程必须仍可用。

- [Ntfyx 首页](https://ntfyx.me/zh/)
- [Claude Code 通知](https://ntfyx.me/zh/docs/claude-code-notifications/)
- [Codex 手机审批](https://ntfyx.me/zh/docs/codex-phone-approval/)
- [手机审批与问答](https://ntfyx.me/docs/phone-approval/)
- [通知工具](https://ntfyx.me/zh/docs/notification-tools/)

---

# What can you do with Ntfyx?

Source: https://ntfyx.me/use-cases/

Updated: 2026-10-25

From agent questions to weekly subscriptions and website alerts, start with a use case. See what reaches your phone, then follow the steps to connect.

## Claude Code needs your decision

Step away from your computer. Read the question and send your answer from your phone.

- [See how it works](https://ntfyx.me/use-cases/claude-code-decisions/)

## Get weekly GitHub trends

Subscribe on your phone. Read trending repositories and their original links in a weekly digest.

- [See how it works](https://ntfyx.me/use-cases/github-weekly/)

## Know when your website needs attention

Check a public website or health endpoint every hour, and get an alert when a check fails.

- [See how it works](https://ntfyx.me/use-cases/website-monitoring/)

## Send a notification over HTTPS

Connect a script or webhook with your private sending URL. No CLI required.

- [See how it works](https://ntfyx.me/use-cases/https-notifications/)

## Get told when a long task finishes

Leave a build, test or SSH job running. Receive its result on your phone when it finishes.

- [See how it works](https://ntfyx.me/use-cases/long-running-tasks/)

## Catch backup and scheduled-job failures

Send the failure of an unattended job to your phone, with enough context to investigate.

- [See how it works](https://ntfyx.me/use-cases/backup-alerts/)

---

# Claude Code needs your decision

Source: https://ntfyx.me/use-cases/claude-code-decisions/

Updated: 2026-10-25

Step away from your computer. Read the question and send your answer from your phone. A question arrives. Your answer goes back.

## When to use it

You leave a coding task running and go for a walk. Claude Code reaches a choice that needs you. With Ntfyx connected, it can send the question to your phone. Answer under that question; the waiting task receives your verified answer and follows the selected path. Later updates can stay in the same conversation.

## Example message

Claude Code · Homepage update · Which should I update first: navigation or page content? · Navigation · Page content

## Connect in three steps

Questions & replies

1. Get the phone app — Open Ntfyx and allow notifications if you want system alerts.
2. Connect Claude Code — Follow the agent setup guide on your computer, scan to authorize the connection, then restart Claude Code.
3. Answer a test question — Ask Claude Code to send a harmless choice through Ntfyx. Answer on the phone and check the returned choice in the original task.

## Start here

First, get Ntfyx on your phone

- [Connect Claude Code](https://ntfyx.me/docs/agent-plugins/)
- [Follow the complete reply walkthrough](https://ntfyx.me/docs/agent-reply-walkthrough/)
- [Downloads and requirements](https://ntfyx.me/download/)

## Check that it works

Copy this prompt into your connected agent. The test succeeds when the original task reports the answer you actually chose. Opening a notification alone does not answer the question.

```
Use Ntfyx to send a test choice to my phone. Ask whether to review the navigation or page content first. After I answer, tell me what I chose. Do not change any files.
```

## What to know

Use explicit Ntfyx MCP/CLI questions or the supported Claude Code AskUserQuestion bridge. Tool permission approvals have separate host and platform requirements. Codex can use Ntfyx MCP questions, but its native request_user_input prompts are not automatically forwarded. Denial, expiry or an unverified answer does not let work continue, and a late answer cannot restart an ended task. Agent messages and replies are encrypted on the devices.

## More ways to use Ntfyx



- [Get told when a long task finishes](https://ntfyx.me/use-cases/long-running-tasks/)
- [Send a notification over HTTPS](https://ntfyx.me/use-cases/https-notifications/)

---

# Get weekly GitHub trends

Source: https://ntfyx.me/use-cases/github-weekly/

Updated: 2026-10-25

Subscribe on your phone. Read trending repositories and their original links in a weekly digest. A weekly reading habit, delivered.

## When to use it

You want to keep up with interesting open-source projects without checking a leaderboard every day. Subscribe to GitHub Trending weekly in Ntfyx. On Mondays, the digest is scheduled for your selected local time and time zone, ready to read on your phone.

## Example message

GitHub Trending · Your weekly repository digest · Up to 5 repositories · original links · stars gained this week

## Connect in three steps

Every Monday

1. Open Discover — Install Ntfyx and open Discover on your primary phone. You do not need a computer or CLI.
2. Choose GitHub weekly — Review the GitHub Trending weekly source, its sample and schedule.
3. Set your reading time — Choose a time and time zone, then confirm the subscription. Future editions arrive in its Topic.

## Start here

First, get Ntfyx on your phone

- [View the weekly source & subscription steps](https://ntfyx.me/plugins/github-trending-weekly/)
- [Browse other notification sources](https://ntfyx.me/plugins/)
- [Downloads and requirements](https://ntfyx.me/download/)

## Check that it works

First check that the subscription is active with the intended time zone and time. Then look for the next published edition in its Topic. A public sample is a preview; subscribing does not immediately send that sample or import earlier editions.

## What to know

The source reads GitHub’s official weekly Trending window at collection time, keeping up to five repositories in source order with period star gains. It is a rolling snapshot, not a reconstructed calendar-week ranking. Descriptions retain their original language. Source changes and delivery conditions can delay an edition. Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription.

## More ways to use Ntfyx



- [Know when your website needs attention](https://ntfyx.me/use-cases/website-monitoring/)
- [Send a notification over HTTPS](https://ntfyx.me/use-cases/https-notifications/)

---

# Know when your website needs attention

Source: https://ntfyx.me/use-cases/website-monitoring/

Updated: 2026-10-25

Check a public website or health endpoint every hour, and get an alert when a check fails. Your public service, checked regularly.

## When to use it

Your personal website or public API should respond even when you are busy elsewhere. My Monitor checks the public address every hour. It can check a successful HTTP status, expected text, or a simple JSON field value, and put results for the same service in one conversation.

## Example message

My Monitor · ❌ Example API · Check failed · Expected a successful HTTP response.

## Connect in three steps

Hourly checks

1. Add a public address — In Ntfyx, open Discover → My Monitor and enter the public HTTP or HTTPS address and a name.
2. Choose and test a rule — Check HTTP success, a text fragment or a simple JSON field. Test the rule against the actual response.
3. Enable the monitor — Keep Only notify on failure enabled for quiet healthy checks, then review the scheduled results in My Monitor.

## Start here

First, get Ntfyx on your phone

- [Set up service monitoring](https://ntfyx.me/docs/service-monitoring/)
- [Send results from your own checks](https://ntfyx.me/use-cases/https-notifications/)
- [Downloads and requirements](https://ntfyx.me/download/)

## Check that it works

Check the rule-test result, then confirm a scheduled check appears. With failure-only notifications, normal and recovery results are recorded silently. Turning that option off requests a notification for every check. Monitor messages currently use English; this message is illustrative.

## What to know

This is hourly monitoring of public endpoints, not a real-time incident service. Private-network hosts, CPU and memory metrics need your own collector. The service processes the address, rule and response before encrypting its result. Free includes one monitor. Active weeks also produce a weekly summary; check success rate is not continuous uptime. Notification settings, network and delivery limits still apply.

## More ways to use Ntfyx



- [Send a notification over HTTPS](https://ntfyx.me/use-cases/https-notifications/)
- [Catch backup and scheduled-job failures](https://ntfyx.me/use-cases/backup-alerts/)

---

# Send a notification over HTTPS

Source: https://ntfyx.me/use-cases/https-notifications/

Updated: 2026-10-28

Connect a script or webhook with your private sending URL. No CLI required. One request, a message to your phone.

## When to use it

A tool you use already supports a webhook, or your script can make an HTTPS request. Copy the sending link from Ntfyx and use it in that tool. GET sends the message in the link; POST sends fresh text or JSON to the same fixed URL.

## Example message

MyNotify · Build complete · The new version is ready to review.

## Connect in three steps

HTTPS · Webhook

1. Prepare HTTPS Push — Open HTTPS Push on your phone and use the in-app Send test to check the connection.
2. Copy your private URL — Keep the full URL in your script’s private configuration or the service’s webhook settings.
3. Send and check your Inbox — Open the link to send its message, or POST text/JSON to it. Confirm the matching message on the phone.

## Start here

First, get Ntfyx on your phone

- [Follow the HTTPS setup guide](https://ntfyx.me/docs/http-push/)
- [Try the phone hello walkthrough](https://ntfyx.me/docs/https-push-walkthrough/)
- [Downloads and requirements](https://ntfyx.me/download/)

## Check that it works

Set NTFYX_SEND_URL locally to the private link copied from your app, then run either example. These examples are for macOS/Linux shells. An accepted response means the service accepted the request; confirm the matching Inbox message and, separately, any system alert.

```
# GET: send the message already in your copied URL
curl --fail-with-body "$NTFYX_SEND_URL"

# POST: keep the URL fixed and send new text
curl --fail-with-body "$NTFYX_SEND_URL" \
  -H 'Content-Type: application/json' \
  --data '{"text":"Build complete"}'
```

## What to know

The full URL contains a send-only secret: keep it out of public logs and screenshots. HTTPS/Webhook content is processed by the service before encrypted delivery. This path sends notifications only; use the agent case for questions and replies. Each request without an idempotency key can create a new message. For uncertain retries, follow the guide’s Idempotency-Key instructions.

## More ways to use Ntfyx



- [Claude Code needs your decision](https://ntfyx.me/use-cases/claude-code-decisions/)
- [Know when your website needs attention](https://ntfyx.me/use-cases/website-monitoring/)

## Complete your own automation task

Start with a complete, copyable example and check the job result, send receipt and phone message separately.

- [GitHub Actions failure notifications](https://ntfyx.me/docs/github-actions-notifications/)
- [n8n workflow error notifications](https://ntfyx.me/docs/n8n-error-notifications/)
- [Script and PowerShell notifications](https://ntfyx.me/docs/notifications/)

---

# Get told when a long task finishes

Source: https://ntfyx.me/use-cases/long-running-tasks/

Updated: 2026-10-25

Leave a build, test or SSH job running. Receive its result on your phone when it finishes. Start the task. Step away.

## When to use it

Tests take twenty minutes, a build runs on another machine, or an SSH job needs time. Add a notification after the job so its result reaches you. Pair the machine that actually runs the command, and keep its normal job logs for details.

## Example message

Build server · Tests complete · The test run passed. Open the job log for details.

## Connect in three steps

CLI · send

1. Pair the task machine — Install the CLI, authorize it with your phone and check its Topic with ntfyx topics.
2. Capture the task result — Record the exit status before sending a success or failure message. Choose an explicit Topic if more than one is available.
3. Receive the summary — Check both success and failure paths with harmless tasks before attaching the notification to your real job.

## Start here

First, get Ntfyx on your phone

- [Connect your scripts](https://ntfyx.me/docs/ssh-job-notifications/)
- [Read the shell and cron guide](https://ntfyx.me/docs/notifications/)
- [Downloads and requirements](https://ntfyx.me/download/)

## Check that it works

Run this POSIX shell example with sh after pairing. It preserves the task status even when notification delivery fails. The sample task succeeds; replace true with false for a harmless failure test. Use your actual task only after both paths work.

```
# Run as a script with sh; replace true with your task later.
task_status=0
true || task_status=$?
if [ "$task_status" -eq 0 ]; then
  message="Task finished successfully"
else
  message="Task failed (exit $task_status)"
fi
ntfyx send "$message" || printf '%s\n' 'Notification failed; inspect the job log.' >&2
exit "$task_status"
```

## What to know

A notification reports the status your script observes; it is not a remote terminal. Use your existing job runner if work must survive an SSH disconnect. Keep private log contents out of the message. Windows has CLI and local MCP support; this shell example targets macOS/Linux.

## More ways to use Ntfyx



- [Catch backup and scheduled-job failures](https://ntfyx.me/use-cases/backup-alerts/)
- [Claude Code needs your decision](https://ntfyx.me/use-cases/claude-code-decisions/)

---

# Catch backup and scheduled-job failures

Source: https://ntfyx.me/use-cases/backup-alerts/

Updated: 2026-10-28

Send the failure of an unattended job to your phone, with enough context to investigate. An overnight job needs your attention.

## When to use it

A backup runs while you sleep. If the command starts and returns an error, the script can notify you and retain the failure status for its scheduler. Keep the message short, name the job, and point yourself to its existing log.

## Example message

nightly-backup · Backup failed · The backup returned an error. Check available storage and the job log.

## Connect in three steps

cron · CLI

1. Use the scheduler’s account — Install and pair the CLI as the user that runs the scheduled job. Check the absolute CLI path.
2. Notify on the failure path — Save the job exit status, send a failure summary and return the original status to the scheduler.
3. Test in the scheduled environment — Run a harmless failure with the scheduler’s PATH and configuration. Then attach the pattern to the existing backup script.

## Start here

First, get Ntfyx on your phone

- [Prepare server notifications](https://ntfyx.me/docs/ssh-job-notifications/)
- [Read the backup and cron guide](https://ntfyx.me/docs/notifications/)
- [Downloads and requirements](https://ntfyx.me/download/)

## Check that it works

This POSIX shell rehearsal uses false, so it does not touch backup files. Run it with sh and confirm the phone gets a failure message and the script exits 1. Replace false with true to check that a successful run remains quiet. In cron, use verified absolute paths or set PATH explicitly.

```
# Harmless failure rehearsal; no backup files are touched.
task_status=0
false || task_status=$?
if [ "$task_status" -ne 0 ]; then
  ntfyx send "Backup test failed (exit $task_status)" || \
    printf '%s\n' 'Notification failed; inspect the job log.' >&2
fi
exit "$task_status"
```

## What to know

This detects errors returned by a job that actually ran. A powered-off host or a job that never starts cannot execute its notification; detecting missed runs needs a separate heartbeat mechanism. Notification delivery also depends on connectivity and limits. Keep your scheduler’s logs so a notification failure remains visible.

## More ways to use Ntfyx



- [Get told when a long task finishes](https://ntfyx.me/use-cases/long-running-tasks/)
- [Know when your website needs attention](https://ntfyx.me/use-cases/website-monitoring/)

## Complete your own automation task

Start with a complete, copyable example and check the job result, send receipt and phone message separately.

- [GitHub Actions failure notifications](https://ntfyx.me/docs/github-actions-notifications/)
- [n8n workflow error notifications](https://ntfyx.me/docs/n8n-error-notifications/)
- [Script and PowerShell notifications](https://ntfyx.me/docs/notifications/)

---

# 用 Ntfyx 可以做什么？

Source: https://ntfyx.me/zh/use-cases/

Updated: 2026-10-25

从 Agent 等你回答，到每周订阅和网站异常，选一个场景开始。看手机会收到什么，再按步骤接好。

## Claude Code 等你做决定

离开电脑后，手机收到问题，选一个答案或回一句话。

- [查看做法](https://ntfyx.me/zh/use-cases/claude-code-decisions/)

## 每周收到 GitHub 热门项目

在手机订阅一次，后续每周阅读热门仓库、项目简介与原始链接。

- [查看做法](https://ntfyx.me/zh/use-cases/github-weekly/)

## 网站或接口异常时提醒你

每小时检查公开网站或健康接口，检查失败时收到提醒。

- [查看做法](https://ntfyx.me/zh/use-cases/website-monitoring/)

## 用 HTTPS 把通知发到手机

用专属发送地址接入脚本和 Webhook，无需安装 CLI。

- [查看做法](https://ntfyx.me/zh/use-cases/https-notifications/)

## 长任务结束后通知我

构建、测试或 SSH 任务继续跑，结束后在手机查看结果。

- [查看做法](https://ntfyx.me/zh/use-cases/long-running-tasks/)

## 备份和定时任务失败时提醒我

无人值守的任务执行失败时，把错误摘要送到手机。

- [查看做法](https://ntfyx.me/zh/use-cases/backup-alerts/)

---

# Claude Code 等你做决定

Source: https://ntfyx.me/zh/use-cases/claude-code-decisions/

Updated: 2026-10-25

离开电脑后，手机收到问题，选一个答案或回一句话。 问题到手机，回答回电脑

## 什么时候用

你让代码任务继续运行，离开电脑去散步。Claude Code 做到需要选择方案的地方，通过已接入的 Ntfyx 把问题发到手机。你在原问题下回答，等待中的任务收到核验后的答案，按所选方案继续。后续进展可以留在同一个会话里。

## 消息示例

Claude Code · 首页改版 · 首页先改导航，还是正文？ · 导航 · 正文

## 三步接好

提问与回复

1. 手机安装 App — 打开 Ntfyx；需要系统提醒时，允许通知权限。
2. 接入 Claude Code — 在电脑按 Agent 指南安装，用手机扫码授权连接，再重开 Claude Code。
3. 回答一道测试题 — 让 Claude Code 通过 Ntfyx 发一道无副作用的选择题，在手机回答，再核对原任务收到的选择。

## 从这里开始

先在手机上准备好 Ntfyx

- [接入 Claude Code](https://ntfyx.me/zh/docs/agent-plugins/)
- [完整提问与回复演练](https://ntfyx.me/zh/docs/agent-reply-walkthrough/)
- [下载 App 与版本要求](https://ntfyx.me/zh/download/)

## 怎样确认接通了

将下面这段话交给已接入的 Agent。原任务复述出你实际选择的答案，才说明问答接通。打开通知本身不会回答问题。

```
用 Ntfyx 向我的手机发送一道测试选择题：先检查导航，还是正文？收到答案后告诉我选了什么，先不要修改文件。
```

## 使用时要知道

使用 Ntfyx MCP/CLI 主动提问，或已支持的 Claude Code AskUserQuestion 桥接。工具权限审批另有宿主与平台要求。Codex 可以通过 Ntfyx MCP 提问，但其原生 request_user_input 不会自动转发。拒绝、过期或未通过核验的回答不能让任务继续，迟到回复也不能重新启动已结束的任务。Agent 消息与回复在设备上加密。

## 你还可以这样用



- [长任务结束后通知我](https://ntfyx.me/zh/use-cases/long-running-tasks/)
- [用 HTTPS 把通知发到手机](https://ntfyx.me/zh/use-cases/https-notifications/)

---

# 每周收到 GitHub 热门项目

Source: https://ntfyx.me/zh/use-cases/github-weekly/

Updated: 2026-10-25

在手机订阅一次，后续每周阅读热门仓库、项目简介与原始链接。 订阅一次，后续周报到手机

## 什么时候用

想了解最近值得关注的开源项目，又不想每天打开榜单。在 Ntfyx 订阅 GitHub 趋势周报，按你设置的时区与当地时间，计划每周一把一期摘要送到手机。

## 消息示例

GitHub Trending · GitHub 趋势周报 · 最多 5 个仓库 · 原始链接 · 周窗口新增 star

## 三步接好

每周一

1. 打开 App 的发现 — 在主手机安装 Ntfyx，打开“发现”，无需电脑或 CLI。
2. 选择 GitHub 趋势周报 — 找到“GitHub 趋势周报”，查看来源、样例和投递安排。
3. 设置阅读时间 — 选择时间和时区，确认订阅。后续发布进入对应 Topic。

## 从这里开始

先在手机上准备好 Ntfyx

- [查看周报与订阅方法](https://ntfyx.me/zh/plugins/github-trending-weekly/)
- [浏览其他通知源](https://ntfyx.me/zh/plugins/)
- [下载 App 与版本要求](https://ntfyx.me/zh/download/)

## 怎样确认接通了

先确认订阅已启用，时间与时区正确。之后在对应 Topic 查看下一期发布。公开样例只是预览，订阅不会立即发送这份样例，也不会补发历史周报。

## 使用时要知道

内容来自采集时 GitHub 官方周趋势窗口，最多五个仓库，保留原站顺序和期间新增 star。这是滚动快照，不是重新统计的自然周排名。简介保留原始语言；来源变化或投递条件可能造成延迟。免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。

## 你还可以这样用



- [网站或接口异常时提醒你](https://ntfyx.me/zh/use-cases/website-monitoring/)
- [用 HTTPS 把通知发到手机](https://ntfyx.me/zh/use-cases/https-notifications/)

---

# 网站或接口异常时提醒你

Source: https://ntfyx.me/zh/use-cases/website-monitoring/

Updated: 2026-10-25

每小时检查公开网站或健康接口，检查失败时收到提醒。 定时检查公开服务状态

## 什么时候用

个人网站或公开 API 应当在你忙其他事情时继续响应。My Monitor 每小时检查公开地址，可核对成功 HTTP 状态、指定文本或简单 JSON 字段值。同一服务的结果放在同一个会话里。

## 消息示例

My Monitor · ❌ Example API · Check failed · Expected a successful HTTP response.

## 三步接好

每小时检查

1. 添加公开地址 — 在 Ntfyx 打开“发现 → 我的监控”，填写公开 HTTP 或 HTTPS 地址和名称。
2. 选择并测试规则 — 选择 HTTP 成功状态、文本包含或简单 JSON 字段匹配，先用实际响应测试规则。
3. 启用监控 — 保留“仅失败时推送”可静默记录正常检查，再到 My Monitor 查看计划检查结果。

## 从这里开始

先在手机上准备好 Ntfyx

- [设置服务监控](https://ntfyx.me/zh/docs/service-monitoring/)
- [发送自己脚本的检测结果](https://ntfyx.me/zh/use-cases/https-notifications/)
- [下载 App 与版本要求](https://ntfyx.me/zh/download/)

## 怎样确认接通了

核对规则测试结果，再确认计划检查产生记录。默认仅失败时推送时，正常和恢复结果静默留档；关闭该选项后，每次检查都提醒。监控消息目前使用英文，上方为示意内容。

## 使用时要知道

这是公开接口的每小时监控，不是实时事故响应。内网主机、CPU 与内存指标需要自行采集。监控服务会处理地址、规则和响应，再加密投递结果。免费版包含一项监控；有检查活动的周还有周报，检测成功率不等于连续在线率。提醒仍受通知设置、网络与投递额度影响。

## 你还可以这样用



- [用 HTTPS 把通知发到手机](https://ntfyx.me/zh/use-cases/https-notifications/)
- [备份和定时任务失败时提醒我](https://ntfyx.me/zh/use-cases/backup-alerts/)

---

# 用 HTTPS 把通知发到手机

Source: https://ntfyx.me/zh/use-cases/https-notifications/

Updated: 2026-10-28

用专属发送地址接入脚本和 Webhook，无需安装 CLI。 一条请求，把结果送到手机

## 什么时候用

你使用的工具已经支持 Webhook，或者脚本能发送 HTTPS 请求。从 Ntfyx 复制发送链接，即可接入这些工具。GET 使用链接里的消息，POST 则向同一个固定地址发送新的文本或 JSON。

## 消息示例

MyNotify · 构建完成 · 新版本已准备，可以查看了。

## 三步接好

HTTPS · Webhook

1. 准备 HTTPS 推送 — 在手机打开 HTTPS 推送，先使用 App 内“发送”测试连接。
2. 复制专属发送地址 — 将完整 URL 保存到脚本的私有配置或服务的 Webhook 设置中。
3. 发送并检查收件箱 — 访问链接发送其中的消息，或向它 POST 文本、JSON，再在手机核对对应消息。

## 从这里开始

先在手机上准备好 Ntfyx

- [查看 HTTPS 接入方法](https://ntfyx.me/zh/docs/http-push/)
- [按 hello 案例完成测试](https://ntfyx.me/zh/docs/https-push-walkthrough/)
- [下载 App 与版本要求](https://ntfyx.me/zh/download/)

## 怎样确认接通了

先在本机将 NTFYX_SEND_URL 设为 App 复制的私有链接，再运行其中一个示例。下方用于 macOS/Linux shell。接口受理只表示服务接收了请求；还应核对手机中的对应消息，系统横幅另受通知权限影响。

```
# GET：发送已复制链接中的消息
curl --fail-with-body "$NTFYX_SEND_URL"

# POST：URL 固定，正文按需修改
curl --fail-with-body "$NTFYX_SEND_URL" \
  -H 'Content-Type: application/json' \
  --data '{"text":"构建完成"}'
```

## 使用时要知道

完整 URL 含仅发送密钥，请放在私有配置中，不进入公开日志或截图。HTTPS/Webhook 内容由服务处理后再加密投递。此方式只发送通知；需要提问与回复时，使用 Agent 案例。未带幂等标识的请求每次都可能产生新消息；结果不确定时，按指南复用 Idempotency-Key 重试。

## 你还可以这样用



- [Claude Code 等你做决定](https://ntfyx.me/zh/use-cases/claude-code-decisions/)
- [网站或接口异常时提醒你](https://ntfyx.me/zh/use-cases/website-monitoring/)

## 完成自己的自动化任务

从可复制的完整示例开始，核对任务结果、发送回执和手机消息。通知成功与原任务成功分别判断。

- [GitHub Actions 构建失败通知](https://ntfyx.me/zh/docs/github-actions-notifications/)
- [n8n 工作流错误提醒](https://ntfyx.me/zh/docs/n8n-error-notifications/)
- [脚本与 PowerShell 通知](https://ntfyx.me/zh/docs/notifications/)

---

# 长任务结束后通知我

Source: https://ntfyx.me/zh/use-cases/long-running-tasks/

Updated: 2026-10-25

构建、测试或 SSH 任务继续跑，结束后在手机查看结果。 任务继续跑，你可以先离开

## 什么时候用

测试需要二十分钟，构建在另一台机器上执行，或者 SSH 任务还要跑一会儿。在任务结束后添加通知，结果就能送到手机。应当配对实际执行命令的那台机器，详细输出继续留在原任务日志中。

## 消息示例

构建服务器 · 测试完成 · 本轮测试通过，详细结果可查看任务日志。

## 三步接好

CLI · send

1. 配对任务所在机器 — 安装 CLI，用手机授权连接，通过 ntfyx topics 核对目标 Topic。
2. 保留任务结果 — 先记录任务退出码，再发送成功或失败消息；有多个 Topic 时显式选择目标。
3. 在手机接收摘要 — 先用无副作用任务检查成功和失败两条路径，再接入真实任务。

## 从这里开始

先在手机上准备好 Ntfyx

- [接入脚本与任务](https://ntfyx.me/zh/docs/ssh-job-notifications/)
- [Shell 与 cron 完整说明（英文）](https://ntfyx.me/docs/notifications/)
- [下载 App 与版本要求](https://ntfyx.me/zh/download/)

## 怎样确认接通了

配对后使用 sh 运行下方 POSIX shell 示例。它保留任务退出码，即使通知失败也不覆盖任务结果。示例任务 true 会成功；将它换成 false 可无副作用地测试失败路径，两条路径通过后再替换为真实任务。

```
# 用 sh 运行脚本，验收后再把 true 换成实际任务。
task_status=0
true || task_status=$?
if [ "$task_status" -eq 0 ]; then
  message="任务已成功完成"
else
  message="任务失败（退出码 $task_status）"
fi
ntfyx send "$message" || printf '%s\n' '通知失败，请查看任务日志。' >&2
exit "$task_status"
```

## 使用时要知道

通知报告脚本实际观察到的状态，不提供远程终端。需要任务在 SSH 断开后继续时，使用既有任务运行方式。摘要中不要包含私有日志内容。Windows 可使用 CLI 与本地 MCP；此处 shell 示例适用于 macOS/Linux。

## 你还可以这样用



- [备份和定时任务失败时提醒我](https://ntfyx.me/zh/use-cases/backup-alerts/)
- [Claude Code 等你做决定](https://ntfyx.me/zh/use-cases/claude-code-decisions/)

---

# 备份和定时任务失败时提醒我

Source: https://ntfyx.me/zh/use-cases/backup-alerts/

Updated: 2026-10-28

无人值守的任务执行失败时，把错误摘要送到手机。 让夜间任务把异常告诉你

## 什么时候用

备份在你睡觉时执行。如果命令已经启动并返回错误，脚本就可以通知你，同时保留失败状态供调度器记录。消息应简短，包含任务名称和查看原日志的线索。

## 消息示例

nightly-backup · 备份失败 · 备份返回错误，请检查可用存储与任务日志。

## 三步接好

cron · CLI

1. 使用调度任务的账号 — 使用实际运行定时任务的用户安装并配对 CLI，核对它的绝对路径。
2. 在失败分支添加通知 — 保存任务退出码，失败时发送摘要，最后向调度器返回原退出码。
3. 验证调度环境 — 按调度器实际 PATH 与配置运行一次无副作用的失败测试，再接入既有备份脚本。

## 从这里开始

先在手机上准备好 Ntfyx

- [准备服务器任务通知](https://ntfyx.me/zh/docs/ssh-job-notifications/)
- [备份与 cron 完整说明（英文）](https://ntfyx.me/docs/notifications/)
- [下载 App 与版本要求](https://ntfyx.me/zh/download/)

## 怎样确认接通了

下方 POSIX shell 演练使用 false，不操作备份文件。用 sh 运行后，确认手机收到失败消息且脚本退出码为 1；换成 true 时应正常退出且不发消息。接入 cron 时，使用已核实的绝对路径或显式设置 PATH。

```
# 无副作用的失败演练，不操作备份文件。
task_status=0
false || task_status=$?
if [ "$task_status" -ne 0 ]; then
  ntfyx send "备份演练失败（退出码 $task_status）" || \
    printf '%s\n' '通知失败，请查看任务日志。' >&2
fi
exit "$task_status"
```

## 使用时要知道

这种方式只能报告已运行任务返回的错误。主机关机或任务从未启动时，通知代码也无法执行；检测漏跑需要额外心跳机制。通知投递仍依赖网络和额度，应保留调度器日志，让通知失败本身也有记录。

## 你还可以这样用



- [长任务结束后通知我](https://ntfyx.me/zh/use-cases/long-running-tasks/)
- [网站或接口异常时提醒你](https://ntfyx.me/zh/use-cases/website-monitoring/)

## 完成自己的自动化任务

从可复制的完整示例开始，核对任务结果、发送回执和手机消息。通知成功与原任务成功分别判断。

- [GitHub Actions 构建失败通知](https://ntfyx.me/zh/docs/github-actions-notifications/)
- [n8n 工作流错误提醒](https://ntfyx.me/zh/docs/n8n-error-notifications/)
- [脚本与 PowerShell 通知](https://ntfyx.me/zh/docs/notifications/)

---

# Call-style alerts for agent messages and HTTP notifications

Source: https://ntfyx.me/docs/call-alerts/

Updated: 2026-10-23

Request an optional call-style reminder for a Ntfyx message from CLI, MCP or a JSON webhook. Learn phone setup, quiet settings and iPhone/Android limits.

## What is a call-style message alert?

Ntfyx can request optional call-style reminders for messages from CLI, MCP or JSON webhooks. Enable them on the receiving phone first. Viewing or dismissing the reminder does not answer the original question or approve an action.

> This is an optional reminder for a message in your Inbox. It does not make a voice call, dial a telephone number or provide an emergency alarm. Opening or dismissing it never approves the underlying request.

## Enable it on the receiving phone

Call alerts are off by default. A sender can request this alert mode, but cannot turn on your phone setting or grant system permissions. Enable the option in Ntfyx settings and check the availability shown for your device.

1. Enable Call alerts in Ntfyx on the receiving phone.
2. Respond to the system permission request, then return to check readiness. Android full-screen access is a separate system setting where applicable.
3. Check the Topic mute and quiet-hours settings before sending your own test message.

- [Downloads and current app versions](https://ntfyx.me/download/)

## Request a Call alert from the CLI

The current public CLI is 0.6.1. After pairing, add --alert-mode call to send or ask. The same message remains in its Topic and Session. Without this explicit option, ordinary notifications keep their existing behavior.

```
ntfyx send "The result needs your attention" --alert-mode call --session-id review-demo
ntfyx ask "Review this harmless example?" --allow-deny --alert-mode call --session-id review-demo --wait 60s --expires 90s --json
```

> A successful submission is not proof of a displayed or audible alert. Read alert_delivery for the chosen capability or fallback, and verify the matching message on the phone. The example does not perform an external action.

- [Reply and one-time claim rules](https://ntfyx.me/docs/phone-approval/)

## Use the same option with local MCP

The local ntfyx_send and ntfyx_ask tools accept alert_mode: "call". This example is the argument object for ntfyx_send, after the Source has been paired. The option requests a reminder; it does not grant execution permission.

```
{
  "body": "The result needs your attention",
  "session_id": "review-demo",
  "alert_mode": "call"
}
```

- [Local MCP and agent setup](https://ntfyx.me/docs/agent-plugins/)

## Request it in a copied-link JSON webhook

POST this JSON body to the private sending link copied from the app. For this fixed-URL webhook format, the control belongs under ntfyx.alert_mode. An unrelated top-level alert_mode field from a third-party payload does not request a Call alert. GET links and ordinary monitor messages keep their normal notification behavior.

```
{
  "body": "The result needs your attention",
  "ntfyx": {
    "alert_mode": "call"
  }
}
```

> The complete link contains a send-only key. Keep it private. HTTP/webhook input is visible to the service before encrypted delivery; this path does not provide questions, replies or execution claims.

- [HTTPS links and fixed POST webhooks](https://ntfyx.me/docs/http-push/)

## Quiet settings and platform limits

Ntfyx checks Topic mute, quiet hours, message expiry and device capability. Sound and presentation also depend on the phone’s system policy. Call mode does not promise to bypass Focus, Do Not Disturb or silent settings.

| Platform or condition | What to expect |
| --- | --- |
| iPhone | Background registration lasts up to 24 hours. Open Ntfyx each day to renew it; expired registration falls back to ordinary encrypted push. |
| An iOS push already in transit | If iOS requires an in-flight push to be reported after the reminder becomes invalid or muted, a brief generic system reminder may appear and then end immediately. Turning the setting off cannot retract a push already accepted by the provider. |
| Android | Google Play services and applicable notification permissions are required. Full-screen access is separate and may be unavailable. A silent Call channel is not replaced with an audible ordinary channel to bypass your choice. |
| Unavailable or expired capability | The message can still use the ordinary notification path where allowed. Network, expiry and delivery limits can prevent or delay an alert; there is no guaranteed wake-up or emergency response. |

## Viewing a message is separate from answering it

Open the reminder to reach the original verified message. Dismissing it leaves any question unanswered. For a confirmation, choice or text question, answer in the original request; the sending computer must verify and claim that answer. A system call button never replaces this step.

- [Phone replies and approval boundaries](https://ntfyx.me/docs/phone-approval/)

## Public availability and verification scope

Public iPhone 1.8.3 and Android 1.8.2 include this opt-in feature. The separately submitted 1.6.1 update is awaiting review as of 23 October 2026. Recorded checks include an iPhone staging lock-screen reminder with user-confirmed sound, vibration and original-message navigation, and Android emulator notification/permission checks. They do not establish every device, Focus mode, forced-quit state or Play-installed full-screen grant.

- [Current releases and downloads](https://ntfyx.me/download/)
- [Privacy and security boundaries](https://ntfyx.me/security/)

---

# 从手机回复 AI Agent：确认、选择与文字回答

Source: https://ntfyx.me/zh/docs/phone-approval/

Updated: 2026-10-23

在 iPhone 或 Android 回答 AI Agent 的确认、选项或文字问题。答案绑定原问题，由已配对的电脑验签并单次领取，再按工作流继续。

## 怎样在手机上回复 AI Agent？

先把 Ntfyx 与运行任务的电脑配对。Agent 或脚本明确发出问题后，在 iPhone 或 Android 打开原问题，确认、选择选项或输入答案。回复留在原问题下；等待中的电脑验签并领取一次，再由工作流判断下一步。电脑和等待进程需要继续运行。

- [安装与配对](https://ntfyx.me/zh/download/)
- [接收 Agent 通知](https://ntfyx.me/zh/docs/agent-notifications/)

## 先试通知，再试确认、选项和文字回复

配对后逐条运行命令。示例使用默认已授权 Topic；需要选择其他 Topic 时加上 --topic 和已有别名。每次 ask 分别等待自己的答案。同一个 Topic 中使用相同 session ID，让这四条消息留在一个 Session。示例只输出结果，不执行答案或授权外部操作。

```
ntfyx send "结果已准备好，请查看" --session-id review-demo --session-name "示例检查"
ntfyx ask "继续这个无害示例吗？" --allow-deny --session-id review-demo --wait 60s --expires 90s --json
ntfyx ask "先检查哪一项？" --choice summary=摘要 --choice logs=日志 --session-id review-demo --wait 60s --expires 90s --json
ntfyx ask "请补充检查备注" --text --session-id review-demo --wait 60s --expires 90s --json
```

> 有效的选项或文字回答可以返回成功，但不一定表示“允许”。请读取答案类型和内容，例如有效的 Stop 选项必须让流程停止。

## 按等待场景或完整案例继续

“等待输入”指南帮助定位正在等人决定的 Agent；完整回复案例展示选项 → 文字 → 确认流程，并附有日期的验证记录。本页说明这些流程共同使用的手机回复与审批规则。

- [Agent 等待输入](https://ntfyx.me/zh/docs/agent-waiting-for-input/)
- [可运行的完整回复案例与证据](https://ntfyx.me/zh/docs/agent-reply-walkthrough/)

## 查看并运行独立确认示例

已有的 approval-demo.sh 会等待一次确认，只在 CLI 返回有效 Allow 且领取成功后打印无害的示例文字。先阅读脚本；下方 Work 是已授权的本地 Topic 别名，请替换成 ntfyx topics 列出的实际别名。脚本不部署软件、不付款，也不执行外部业务操作。

```
curl -fsSLo approval-demo.sh https://ntfyx.me/examples/scripts/approval-demo.sh
cat approval-demo.sh
bash approval-demo.sh Work
```

- [阅读 approval-demo.sh](https://ntfyx.me/examples/scripts/approval-demo.sh)

## 在原问题下回答

在手机打开待回答的问题，核对上下文后选择 Allow 或 Deny。手机为该 Topic 授权的浏览器也可以回答它收到的新问题。接收端为原发送来源签名并加密答案；点开通知或查看详情本身不会批准请求。

![Ntfyx Web 收件箱中的示例问题，包含 Allow 与 Deny 按钮。](https://ntfyx.me/guides/approval-request.png)

真实本地 Web 测试中的合成问题。浏览器签名答案验证同一问答协议，这张截图不证明实体手机推送送达。

## 确认结果和退出状态

独立示例默认等待 60 秒，请求 90 秒过期。同步 ask 超时或被中断时默认尝试取消；取消未确认或使用 --keep-pending 时，远端请求可能暂时仍可回答。迟到回复不会重启已经退出的脚本。

| 结果 | CLI 退出码 | 确认示例继续吗？ |
| --- | --- | --- |
| 已核验 Allow，且单次领取成功 | 0 | 继续，只打印示例文字。 |
| Deny | 10 | 不继续。 |
| 本地等待超时 | 14 | 不继续。 |
| 答案已被领取 | 15 | 不继续。 |
| 传输失败 | 非零 | 不继续。 |

> 表格只描述 Allow/Deny 确认示例。选择题和文字题必须继续检查答案内容，不能只看退出码。ask --async 与只读 result 返回成功也不代表批准或领取成功。

## 接入真实操作时保留执行边界

同步 CLI 会核对签名、原请求和截止时间，并取得一次性 claim；只有工作流认可的有效答案才能继续。拒绝、取消、过期或验证失败均不授权。外部部署、交易等操作仍需自己的幂等与结果记录：一次 claim 不保证外部副作用恰好执行一次。领取或操作结果未知时先核对原记录，不自动重跑操作或另发审批。

- [CLI result 与 claim 语义](https://ntfyx.me/docs/cli/)
- [加密与信任边界](https://ntfyx.me/security/)

## 已有示例的验证范围

独立确认示例曾用编译后的 CLI、真实本地加密中继和 Web 收件箱签名回答验证。自动化接收端使用程序化身份，截图中的消息为合成内容；这不是本轮新的实体手机或 APNs/FCM 投递验收。更完整的选项、文字、确认流程保留单独的日期和公开验证摘要。

- [公开示例源码与验证范围](https://github.com/KaylaONeal/ntfyx-examples)
- [完整回复案例及原始验证范围](https://ntfyx.me/zh/docs/agent-reply-walkthrough/)

## 普通提问与宿主原生权限分别接入

两者都提供本地 MCP 提问工具和手机回复指引；macOS / Linux 提供完成通知 Hook。Claude Code 还可桥接 AskUserQuestion；Codex 原生 request_user_input 不会被拦截。原生执行审批已验证 Linux x64 上的 Claude Code 2.1.283 / 2.1.284 与 Codex 0.158.0，Apple 芯片 Mac 已验证 Claude Code 2.1.303 与 Codex 0.163.0 的原生审批，需 CLI 0.1.5+；Intel Mac 原生审批仍未验证，回到终端处理。Codex 仍需交互 TUI 与 /hooks 信任；codex exec 不触发权限 Hook。Claude setup 原生权限 Hook 需显式 --permissions on。其他 MCP 客户端需按宿主配置接入。这不是托管的 ChatGPT 或 Claude App 目录连接器。 Windows 使用 CLI 的直接 setup 或本地 MCP。Claude Code Hook 需要 2.1.139+；旧版或无法确认版本时只配置 MCP。Codex 在 Windows 提供 MCP 提问，不配置自动 Hook。市场插件的 Hook 使用 POSIX shell，Windows 请使用直接 setup。原生工具权限审批仍按单独的平台与宿主允许范围处理。

> 完成通知不会自动变成问题；手机答案不会改变宿主沙盒、拒绝规则或信任选择。Ntfyx 传递选定消息与问题，不提供远程终端，也不镜像 Agent 的完整对话。

- [Claude Code 接入](https://ntfyx.me/zh/docs/claude-code-notifications/)
- [Codex 接入](https://ntfyx.me/zh/docs/codex-phone-approval/)

## 哪些内容端到端加密？

受保护 Topic 中 CLI 与 Agent 消息的标题、正文、选项和回复在设备上端到端加密；公开 Topic 的名称和消息对服务端及持有标识或链接的人可见。明确的监控 / Webhook 管理固定授权问题及手机签名答案会披露给服务端核验。HTTPS 推送与 Webhook 请求在加密投递前对服务可见；可选供应商验证 secret 由服务加密存储，并在验签时以明文验证原始 body，是托管 secret，并非服务端不可见；My Monitor 会读取监控地址、规则和响应，公开发布者知道自己发送的内容。中继转发密文，仍处理标识符、时间、大小和推送令牌等运行元数据。不要在监控 URL 或请求示例中放密钥。尚未完成独立安全审计。

- [加密与验证](https://ntfyx.me/security/)

---

# Agent 与 HTTP 通知的来电式提醒

Source: https://ntfyx.me/zh/docs/call-alerts/

Updated: 2026-10-23

用 CLI、MCP 或 JSON Webhook 为 Ntfyx 消息请求可选来电式提醒，了解手机开启方式、静音规则及 iPhone / Android 的实际边界。

## 什么是来电式消息提醒？

Ntfyx 可为 CLI、MCP 或 JSON Webhook 的消息请求可选来电式提醒，需要先在接收手机主动开启。查看或忽略提醒不会回答原问题，也不会批准操作。

> 它是收件箱消息的可选提醒，不进行语音通话、不拨打电话号码，也不是紧急报警服务。打开或忽略提醒都不会批准原请求。

## 在接收手机上主动开启

来电式提醒默认关闭。发送方可以请求这种提醒方式，但不能替你打开手机开关或授予系统权限。请在 Ntfyx 设置中主动开启，并查看当前设备显示的可用状态。

1. 在接收手机的 Ntfyx 设置中开启来电式提醒。
2. 处理系统权限请求，再返回检查状态；Android 全屏访问在适用系统上属于单独设置。
3. 检查 Topic 静音和安静时段，再发送自己的测试消息。

- [下载与当前手机版本](https://ntfyx.me/zh/download/)

## 用 CLI 请求来电式提醒

当前公开 CLI 为 0.6.1。配对后，在 send 或 ask 上加 --alert-mode call；同一条消息仍保存在原 Topic 和 Session 中。不加这个明确选项，普通通知保持原有行为。

```
ntfyx send "结果需要你查看" --alert-mode call --session-id review-demo
ntfyx ask "查看这个无害示例吗？" --allow-deny --alert-mode call --session-id review-demo --wait 60s --expires 90s --json
```

> 提交成功不证明手机已显示提醒或发出声音。通过 alert_delivery 核对采用的能力或降级路径，并在手机查看对应消息。示例不执行外部操作。

- [回复与单次领取规则](https://ntfyx.me/zh/docs/phone-approval/)

## 本地 MCP 使用相同提醒选项

本地 ntfyx_send 与 ntfyx_ask 工具接受 alert_mode: "call"。下面是 Source 已配对后传给 ntfyx_send 的参数对象；该选项请求提醒，不授予执行权限。

```
{
  "body": "结果需要你查看",
  "session_id": "review-demo",
  "alert_mode": "call"
}
```

- [本地 MCP 与 Agent 接入](https://ntfyx.me/zh/docs/agent-plugins/)

## 在复制链接的 JSON Webhook 中请求

向 App 复制的私有发送链接 POST 下方 JSON。这个固定 URL Webhook 格式要求把控制字段放在 ntfyx.alert_mode 下；第三方数据中无关的顶层 alert_mode 不会请求来电式提醒。GET 链接和普通监控消息保持原通知行为。

```
{
  "body": "结果需要你查看",
  "ntfyx": {
    "alert_mode": "call"
  }
}
```

> 完整链接含仅发送 key，请保密。HTTP / Webhook 输入在加密投递前对服务可见；这条路径不提供提问、回复或执行领取。

- [HTTPS 链接与固定 POST Webhook](https://ntfyx.me/zh/docs/http-push/)

## 静音设置与平台边界

Ntfyx 会检查 Topic 静音、安静时段、消息期限与设备能力。声音和展示还取决于手机系统策略；Call 模式不承诺绕过专注、勿扰或静音设置。

| 平台或条件 | 实际行为 |
| --- | --- |
| iPhone | 后台登记最长 24 小时，需每天打开 Ntfyx 续期；登记过期后回退普通加密推送。 |
| 已在途的 iOS 推送 | 若提醒失效或已静音，但 iOS 要求报告已在途推送，可能短暂出现通用系统提醒后立即结束。关闭设置不能撤回推送服务已经接受的推送。 |
| Android | 需要 Google Play 服务及适用的通知权限。全屏访问属于单独权限，可能不可用；Call 渠道被设为静音时，不会切到有声普通渠道绕过你的选择。 |
| 能力不可用或过期 | 在规则允许时，消息仍可走普通通知路径。网络、期限与投递限制可能阻止或延迟提醒；不保证唤醒，也不提供紧急响应。 |

## 查看消息与回答问题分别操作

打开提醒可进入原来已验证的消息。忽略提醒不会回答问题；确认、选项或文字题仍要在原请求下作答，由发送电脑验签并领取。系统来电按钮不会替代这一步。

- [手机回复与审批边界](https://ntfyx.me/zh/docs/phone-approval/)

## 公开版本与验证范围

公开的 iPhone 1.8.3 与 Android 1.8.2 已包含这个需主动开启的功能。另行提交的 1.6.1 更新截至 2026 年 10 月 23 日仍在审核。已有记录包括 iPhone 测试环境锁屏提醒、用户确认的铃声震动与原消息导航，以及 Android 模拟器通知和权限检查；这些记录不涵盖所有设备、专注模式、强制退出状态或 Play 安装后的全屏权限。

- [当前版本与下载](https://ntfyx.me/zh/download/)
- [隐私与安全边界](https://ntfyx.me/security/)

---

# AI agent notifications: phone alerts and replies

Source: https://ntfyx.me/docs/agent-notifications/

Updated: 2026-10-24

Get Claude Code, Codex and script notifications on iPhone or Android. Reply to questions from your phone, with Topics and Sessions to organize tasks.

## How do I get AI agent notifications on my phone?

Ntfyx is an AI agent notification and reply tool for iPhone and Android. It delivers task updates from Claude Code, Codex and scripts. Pair the CLI on Windows, macOS and Linux with your phone, then send a notification or configure a supported agent integration. When the task explicitly asks a question, answer under that question on your phone; the waiting computer verifies the reply. The computer and waiting process must remain running.

- [Install and pair Ntfyx](https://ntfyx.me/download/)
- [Claude Code notifications](https://ntfyx.me/docs/claude-code-notifications/)
- [Codex notifications and replies](https://ntfyx.me/docs/codex-phone-approval/)

## Completion, questions and approvals are different events

Choose the event you need before installing hooks. A notification reports a result; a question waits for input; a native permission request is controlled by the agent host.

| Need | Ntfyx path | Scope |
| --- | --- | --- |
| Notify when an agent finishes | Completion hook or ntfyx send | Claude Code setup supports compatible Windows, macOS and Linux hosts. Codex automatic hooks are macOS/Linux only; on Windows use explicit MCP or CLI calls. |
| Answer a question remotely | ntfyx ask / ntfyx_ask | Confirmation, a choice or text. Claude has an AskUserQuestion bridge; Codex native request_user_input is not intercepted. |
| Approve a tool permission | Opt-in native adapter | Verified host combinations on Linux x64 or Apple silicon Mac; check exact versions and modes. Other combinations return to the terminal. |

- [Host versions and setup](https://ntfyx.me/docs/agent-plugins/)
- [An agent is waiting for input](https://ntfyx.me/docs/agent-waiting-for-input/)

## Try one notification, then one question

After pairing, use the default authorized Topic or select an existing alias with --topic. These examples send a test message and ask what to check next; they do not execute your answer. Keep the CLI waiting while you reply on the phone.

```
ntfyx send "The task is ready to review" --title "Agent update"
ntfyx ask "What should I check next?" --text --wait 60s --expires 90s --json
```

- [Complete question and reply walkthrough](https://ntfyx.me/docs/agent-reply-walkthrough/)

## What is different from a notification script or a remote session?

Ntfyx combines task messages, answers attached to the original question, and Topic/Session history with an opt-in notification marketplace. A workflow can wait for a verified confirmation, choice or text answer. Push services and bots have different reply, encryption and integration features; compare their current official documentation and the setup your workflow needs.

| Your workflow | What to compare |
| --- | --- |
| Only tell me the job finished | A desktop notifier or HTTP push hook may already be sufficient. Check phone delivery, platform requirements and maintenance. |
| Ask me, then continue the waiting task | Ntfyx ties confirmation, choice and text answers to the original question. The sender verifies and claims an answer before continuing. |
| Read and control the entire conversation | Compare full-session tools such as Claude Remote Control and Happy. Ntfyx carries selected messages and questions, rather than mirroring the entire terminal. |

- [Sourced comparison and requirements](https://ntfyx.me/docs/coding-agents-on-your-phone/)

## Can several agents share one Inbox?

A Topic groups messages from sources you authorize. Use the same session ID inside the same Topic to keep one task’s updates and replies in a Session conversation. Without a session ID, each new message starts a separate conversation. Grouping does not grant access to other Topics or export the agent’s whole transcript.

- [Multiple agents and projects](https://ntfyx.me/docs/multiple-agent-notifications/)

## What is free, and what is encrypted?

Free includes 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests, one monitor and one subscription. Notification-source subscriptions and public follows share the subscription allowance. Topic count is not a paid entitlement. Public Topics support ordinary and rich messages; protected Topics also support verified answers and Call reminders.

> Protected Topic CLI and agent message titles, bodies, options and replies are end-to-end encrypted on your devices. Public Topic names and messages are readable by the service and anyone with the Topic ID or link. The explicit fixed monitor-access and webhook-management questions and their signed phone answers are disclosed to the service for verification. HTTPS push and webhook requests are readable by the service before encrypted delivery. Optional provider verification secrets are encrypted and stored by the service, then used in plaintext to verify the raw webhook body; they are hosted secrets, not hidden from the service. My Monitor reads the monitored address, rule and response; a public publisher knows the content it publishes. The relay routes ciphertext and processes operational metadata such as identifiers, time, size and push tokens. Do not put secrets in monitored URLs or request examples. Independent security review is not complete.

- [Plans and prices](https://ntfyx.me/pricing/)
- [Security and trust boundaries](https://ntfyx.me/security/)

## What if the phone does not alert me?

Check pairing and the selected Topic, then phone notification permissions, Focus, mute and quiet hours. Android push requires Google Play services. Server acceptance alone does not prove the phone displayed an alert. A denied, expired or unverified answer does not permit a task to continue.

- [Notification troubleshooting](https://ntfyx.me/docs/troubleshooting/)

## Need a stronger reminder or a service check?

Use an optional Call request for a message that needs attention. Use an HTTP webhook when your service can send an event, or My Monitor when it exposes a public endpoint that should be checked every hour. A stronger reminder does not authorize an action.

- [Reply to an AI agent from your phone](https://ntfyx.me/docs/phone-approval/)
- [HTTP notifications and POST webhooks](https://ntfyx.me/docs/http-push/)
- [Call-style message alerts](https://ntfyx.me/docs/call-alerts/)
- [Hourly HTTP, text and JSON monitoring](https://ntfyx.me/docs/service-monitoring/)

---

# AI Agent 手机通知：完成提醒、提问与回复

Source: https://ntfyx.me/zh/docs/agent-notifications/

Updated: 2026-10-24

接收 Claude Code、Codex 和脚本的任务完成通知，在 iPhone 或 Android 上确认、选择或回复文字，用 Topic 与 Session 整理任务。

## 如何让 AI Agent 通知手机？

Ntfyx 是 AI Agent 通知与手机回复工具，把 Claude Code、Codex 和脚本的任务进展送到 iPhone 或 Android。在 Windows、macOS 和 Linux 上安装 CLI 并与手机配对，即可发通知或配置支持的 Agent 接入。任务明确提问时，可以在手机的原问题下回答，由等待中的电脑核验回复；电脑和等待进程需要继续运行。

- [安装并配对 Ntfyx](https://ntfyx.me/zh/download/)
- [Claude Code 手机通知](https://ntfyx.me/zh/docs/claude-code-notifications/)
- [Codex 手机通知与回复](https://ntfyx.me/zh/docs/codex-phone-approval/)

## 完成通知、问题回答与权限审批分别接入

先选择需要接入的事件，再配置 Hook。通知报告结果，问题等待输入，原生权限请求由 Agent 宿主控制。

| 需求 | Ntfyx 接入 | 范围 |
| --- | --- | --- |
| Agent 完成时通知 | 完成 Hook 或 ntfyx send | Claude Code setup 支持兼容的 Windows、macOS 和 Linux 宿主。Codex 自动 Hook 仅 macOS/Linux；Windows 使用显式 MCP 或 CLI 调用。 |
| 远程回答问题 | ntfyx ask / ntfyx_ask | 确认、选项或文字。Claude 有 AskUserQuestion 桥接；Codex 原生 request_user_input 不会被拦截。 |
| 审批工具权限 | 显式启用原生适配 | 限 Linux x64 或 Apple 芯片 Mac 的已验证宿主组合，需核对版本和运行模式；其他组合回到终端。 |

- [宿主版本与安装](https://ntfyx.me/zh/docs/agent-plugins/)
- [Agent 等待输入](https://ntfyx.me/zh/docs/agent-waiting-for-input/)

## 先收到一条通知，再回答一个问题

配对后使用默认已授权 Topic，或用 --topic 选择已有别名。下面发送测试消息，再询问接下来检查什么，不会执行你的答案。回复时保持 CLI 等待。

```
ntfyx send "任务已完成，可以查看结果" --title "Agent 进展"
ntfyx ask "接下来检查什么？" --text --wait 60s --expires 90s --json
```

- [完整提问与回复案例](https://ntfyx.me/zh/docs/agent-reply-walkthrough/)

## 与通知脚本和远程会话工具有什么区别？

Ntfyx 将任务消息、绑定原问题的回答、Topic/Session 记录与可选的通知商城放在一起，工作流可以等待已核验的确认、选择或文字答案。推送服务和机器人的回复、加密及集成能力各有不同，应结合其当前官方文档和自己的接入需求选择。

| 你的流程 | 选择时核对 |
| --- | --- |
| 只需告知任务结束 | 桌面通知器或 HTTP 推送 Hook 可能已经够用；核对手机投递、平台要求和维护成本。 |
| 询问后继续等待中的任务 | Ntfyx 将确认、选项和文字回复绑定原问题；发送端核验并领取答案后继续。 |
| 阅读并控制整个会话 | 可比较 Claude Remote Control、Happy 等完整会话工具。Ntfyx 传递选定消息和问题，不镜像整个终端。 |

- [附来源的选型比较与要求](https://ntfyx.me/zh/docs/coding-agents-on-your-phone/)

## 多个 Agent 可以共用一个收件箱吗？

Topic 汇集已授权来源的消息。同一次任务在同一个 Topic 内使用相同 session ID，进展和回复就会留在一个 Session 会话中。不传 session ID 时，每条新消息独立成会话。分组不会授权其他 Topic，也不会导出 Agent 的完整对话。

- [多个 Agent 与项目](https://ntfyx.me/zh/docs/multiple-agent-notifications/)

## 免费范围与加密范围是什么？

免费版每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。通知源订阅与公开 Topic 关注共享名额，Topic 数量不作为付费权益。公开 Topic 支持普通与富消息，受保护 Topic 还支持已核验的应答与 Call。

> 受保护 Topic 中 CLI 与 Agent 消息的标题、正文、选项和回复在设备上端到端加密；公开 Topic 的名称和消息对服务端及持有标识或链接的人可见。明确的监控 / Webhook 管理固定授权问题及手机签名答案会披露给服务端核验。HTTPS 推送与 Webhook 请求在加密投递前对服务可见；可选供应商验证 secret 由服务加密存储，并在验签时以明文验证原始 body，是托管 secret，并非服务端不可见；My Monitor 会读取监控地址、规则和响应，公开发布者知道自己发送的内容。中继转发密文，仍处理标识符、时间、大小和推送令牌等运行元数据。不要在监控 URL 或请求示例中放密钥。尚未完成独立安全审计。

- [方案与价格](https://ntfyx.me/pricing/)
- [安全与信任边界](https://ntfyx.me/security/)

## 手机没有提醒怎么办？

先核对配对和所选 Topic，再检查手机通知权限、专注模式、静音和安静时段。Android 推送需要 Google Play 服务。服务已受理不等于手机已展示提醒；拒绝、过期或未通过核验的答案不允许任务继续。

- [通知排查](https://ntfyx.me/docs/troubleshooting/)

## 需要更强的提醒，或检查服务是否正常？

需要关注的消息可以显式请求可选 Call 提醒。服务能够主动发事件时使用 HTTP Webhook；服务提供公开接口、需要每小时检查时使用 My Monitor。更强的提醒不会批准任务执行。

- [在手机回复 AI Agent](https://ntfyx.me/zh/docs/phone-approval/)
- [HTTP 通知与 POST Webhook](https://ntfyx.me/zh/docs/http-push/)
- [来电式消息强提醒](https://ntfyx.me/zh/docs/call-alerts/)
- [每小时 HTTP、文本与 JSON 监控](https://ntfyx.me/zh/docs/service-monitoring/)

---

# Send rich messages: CLI, Markdown, tables and charts

Source: https://ntfyx.me/docs/rich-messages/

Updated: 2026-10-26

Use Ntfyx CLI 0.6.0 independently for plain messages, Markdown and native blocks, with local validation, summaries, bounded formats, MCP and HTTPS.

## Choose a message format

Keep ntfyx send for short notices. Use lightweight Markdown for reports, or combine callouts, metrics, tables, progress and line/bar charts when numeric comparison helps. CLI 0.6.0 works without MCP. Rendering requires iOS/Android 1.8.0, Chrome 0.4.0 or the updated Web Inbox; feature versions and public store availability are separate. Check the download page first.

- [Downloads and public versions](https://ntfyx.me/download/)
- [Web Inbox](https://app.ntfyx.me/)

## Plain notices, Markdown and literal logs

The ordinary send command remains valid. --format markdown explicitly selects formatting; --format text preserves literal stars, angle brackets and logs. --stdin reads text. HTML remains text, with no script execution or automatic remote webpage loading.

```
ntfyx send "Build complete" --topic Work
ntfyx send --stdin --format markdown --title "Report" --topic Work < report.md
ntfyx send --stdin --format text --title "Log" --topic Work < output.txt
```

## Save a rich-message JSON document

Save the following as report.json. The document contains only title, summary and content; title and summary are optional. If omitted, the CLI derives a summary of at most 240 Unicode code points locally, without a model call. Supply Topic, Session, priority and deduplication through command arguments.

```
{
  "title": "Deployment report",
  "summary": "Deployment complete. All checks passed.",
  "content": {
    "version": 1,
    "format": "blocks",
    "blocks": [
      {
        "type": "callout",
        "tone": "success",
        "text": "Service is healthy."
      },
      {
        "type": "metrics",
        "items": [
          {
            "label": "Checks passed",
            "value": 24,
            "unit": "checks"
          }
        ]
      },
      {
        "type": "table",
        "columns": [
          "Service",
          "Latency ms"
        ],
        "rows": [
          [
            "API",
            182
          ],
          [
            "Worker",
            95
          ]
        ]
      },
      {
        "type": "progress",
        "label": "Checks",
        "value": 24,
        "max": 24
      },
      {
        "type": "chart",
        "kind": "line",
        "title": "Latency",
        "unit": "ms",
        "labels": [
          "09:00",
          "10:00",
          "11:00"
        ],
        "series": [
          {
            "name": "API",
            "values": [
              210,
              null,
              182
            ]
          }
        ]
      }
    ]
  }
}
```

- [Download a complete JSON example with all six block types](https://ntfyx.me/examples/rich-message.json)

## Validate locally, then send

validate-message makes no network request, needs no pairing and creates no delivery attempt. Replace Work with your paired Topic. File and stdin inputs are equivalent. Retry with the same Session, deduplication key and complete content; use a new key for changed content. --json controls command output, not message format.

```
ntfyx validate-message --message-file report.json --json
ntfyx send --message-file report.json --topic Work --session-id deploy-42 --session-name "Deployment" --dedupe-key deploy-42-report-1

# Equivalent stdin retry
ntfyx send --message-stdin --topic Work --session-id deploy-42 --session-name "Deployment" --dedupe-key deploy-42-report-1 < report.json
```

## Let an agent discover the contract

An agent can inspect command schemas, limits and examples, then validate its generated file locally. With MCP, ntfyx_send accepts either body or content with optional summary; these inputs are mutually exclusive. ntfyx_validate_message applies the same local validation. No additional chart framework is needed.

```
ntfyx capabilities --json
ntfyx help send --json
ntfyx help validate-message --json
```

- [CLI reference](https://ntfyx.me/docs/cli/)
- [Agent plugins and integration scope](https://ntfyx.me/docs/agent-plugins/)

## Use the same document with HTTPS / Webhook

POST JSON to an existing phone-authorized send address and put the document in ntfyx.message. Do not mix it with top-level title, body, message, text or content text aliases. Ordinary provider JSON remains data. Hosted HTTPS processes plaintext before encrypting. On protected Topics, ntfyx send / ntfyx_send encrypt on the sender; public CLI/MCP messages are visible to the service and anyone with the link.

```
{
  "ntfyx": {
    "message": {
      "title": "Report",
      "summary": "Checks passed.",
      "content": {
        "version": 1,
        "format": "markdown",
        "text": "## Result\n- API healthy"
      }
    }
  },
  "idempotency_key": "checks-report-1"
}
```

- [HTTPS POST setup and credentials](https://ntfyx.me/docs/http-push/)

## Lightweight rendering and bounded formats

Local components draw the content without downloading webpages, chart scripts or remote images. Notifications and conversation lists use the summary; details, search and copy retain the full content. Tables initially show six rows and can expand. Chart data can expand too; null means missing, not zero. Oversized input is rejected, never silently truncated.

| Item | Limit |
| --- | --- |
| Whole message, including summary and Session | 16,384 UTF-8 bytes |
| Blocks | 20 |
| Metrics per block | 8 |
| Table | 30 rows × 6 columns |
| Charts | 2 charts, 3 series each, 300 values total including null |

## Questions, receipts and recovery

Rich messages present information; they do not authorize execution. Confirmation, choice and text questions continue through ntfyx ask and signed replies. Keep decision text in the question, not only in a notification summary. Accepted, received, read and answered remain different states. Retries preserve original signed content, and local restart retains the full message; uninstalling without keys does not guarantee history recovery.

## Public Topics: send your first notification without pairing

Anyone with an existing public Topic ID or link can read and send without an account, pairing or key. The name and messages are readable by the service and anyone with the link; keep passwords, private logs and approval requests out of it. Public messages support text, Markdown and lightweight rich content, without answers, approvals or Call reminders. Use a protected Topic for private messages, authenticated senders or signed answers.

- [Public Topics: send your first notification without pairing](https://ntfyx.me/docs/public-topics/)

---

# 发送富消息：CLI、Markdown、表格与图表

Source: https://ntfyx.me/zh/docs/rich-messages/

Updated: 2026-10-26

用 Ntfyx CLI 0.6.0 独立发送普通消息、Markdown 和原生内容块；了解本地校验、摘要、格式边界及 MCP / HTTPS 接入。

## 选择合适的消息格式

短通知继续使用 ntfyx send。报告可选轻量 Markdown；需要数值比较时，用提示、指标、表格、进度和折线／柱状图组成原生内容块。CLI 0.6.0 无需安装 MCP 即可发送。显示需要 iOS／Android 1.8.0、Chrome 0.4.0 或更新后的 Web Inbox；版本能力与商店公开状态分别记录，请先查看下载页。

- [下载与公开版本](https://ntfyx.me/zh/download/)
- [Web Inbox](https://app.ntfyx.me/)

## 普通文字、Markdown 和原样日志

普通发送命令继续有效。--format markdown 明确选择排版；--format text 按原样显示星号、尖括号和日志。--stdin 读取文本。HTML 按文字处理，不执行脚本或在详情里自动加载远程网页。

```
ntfyx send "Build complete" --topic Work
ntfyx send --stdin --format markdown --title "Report" --topic Work < report.md
ntfyx send --stdin --format text --title "Log" --topic Work < output.txt
```

## 保存富消息 JSON

将下列内容保存为 report.json。文件只包含 title、summary 和 content；title 和 summary 可省略。省略摘要时由 CLI 根据内容生成最多 240 个 Unicode 码点的文字摘要，不调用模型。Topic、Session、优先级和去重标识通过命令参数提供。

```
{
  "title": "Deployment report",
  "summary": "Deployment complete. All checks passed.",
  "content": {
    "version": 1,
    "format": "blocks",
    "blocks": [
      {
        "type": "callout",
        "tone": "success",
        "text": "Service is healthy."
      },
      {
        "type": "metrics",
        "items": [
          {
            "label": "Checks passed",
            "value": 24,
            "unit": "checks"
          }
        ]
      },
      {
        "type": "table",
        "columns": [
          "Service",
          "Latency ms"
        ],
        "rows": [
          [
            "API",
            182
          ],
          [
            "Worker",
            95
          ]
        ]
      },
      {
        "type": "progress",
        "label": "Checks",
        "value": 24,
        "max": 24
      },
      {
        "type": "chart",
        "kind": "line",
        "title": "Latency",
        "unit": "ms",
        "labels": [
          "09:00",
          "10:00",
          "11:00"
        ],
        "series": [
          {
            "name": "API",
            "values": [
              210,
              null,
              182
            ]
          }
        ]
      }
    ]
  }
}
```

- [下载包含六类内容块的完整 JSON](https://ntfyx.me/examples/rich-message.json)

## 先校验，再发送

validate-message 不联网、不需要配对，也不会记一次投递。发送前把 Work 替换为已配对的 Topic。文件和标准输入入口等价；同一重试保留相同 Session、去重标识和完整内容，内容改变须使用新的去重标识。--json 只控制命令输出，不表示消息格式。

```
ntfyx validate-message --message-file report.json --json
ntfyx send --message-file report.json --topic Work --session-id deploy-42 --session-name "Deployment" --dedupe-key deploy-42-report-1

# Equivalent stdin retry
ntfyx send --message-stdin --topic Work --session-id deploy-42 --session-name "Deployment" --dedupe-key deploy-42-report-1 < report.json
```

## 让 Agent 发现能力

Agent 可读取命令 schema、限制与示例，再对生成的文件做本地校验。使用 MCP 时，ntfyx_send 接受 body，或者 content 加可选 summary，两种方式互斥；ntfyx_validate_message 执行同一套本地校验。无需为富消息额外安装图表框架。

```
ntfyx capabilities --json
ntfyx help send --json
ntfyx help validate-message --json
```

- [CLI 命令](https://ntfyx.me/docs/cli/)
- [Agent 插件与能力边界](https://ntfyx.me/zh/docs/agent-plugins/)

## HTTPS / Webhook 使用同一文档

向现有手机授权的 POST 地址发送 JSON，在 ntfyx.message 中放入同一份文档。不要同时提交顶层 title、body、message、text 或 content 文本别名。普通第三方 JSON 仍作为数据处理。HTTPS 服务先处理提交的明文再加密。受保护 Topic 的 ntfyx send／ntfyx_send 在发送端加密；公开 CLI／MCP 消息对服务端和持有链接的人可见。

```
{
  "ntfyx": {
    "message": {
      "title": "Report",
      "summary": "Checks passed.",
      "content": {
        "version": 1,
        "format": "markdown",
        "text": "## Result\n- API healthy"
      }
    }
  },
  "idempotency_key": "checks-report-1"
}
```

- [HTTPS POST 接入与凭据](https://ntfyx.me/zh/docs/http-push/)

## 轻量展示和格式限制

内容由本地组件绘制，不下载网页、图表脚本或远程图片。通知与会话列表显示摘要；详情、搜索和复制保留全文。表格默认显示前 6 行，可展开全部；图表可展开数据，null 表示缺测而不是零。超限会返回错误，不静默截断。

| 项目 | 上限 |
| --- | --- |
| 完整消息，含摘要和 Session | 16,384 UTF-8 bytes |
| 内容块 | 20 |
| 指标／块 | 8 |
| 表格 | 30 行 × 6 列 |
| 图表 | 2 张，每张 3 组，合计 300 个值（含 null） |

## 确认、回执与恢复

富消息用于展示信息，不代表用户允许执行。确认、选择和文字问题继续使用 ntfyx ask 及原签名回复流程，不把需要决策的文字藏进通知摘要。已受理、已收到、已读和已回答仍是不同状态。重试保留原签名内容，本地重启保留完整富消息；卸载后没有密钥不能保证恢复历史。

## 公开 Topic：不配对，发送第一条手机通知

已有公开 Topic 的标识或链接允许任何人阅读和发送，无需账号、配对或密钥。名称和消息对服务端及持有链接者可见；不要发送密码、私有日志或审批内容。公开消息支持文本、Markdown 和轻量富内容，不支持应答、审批或 Call。需要私密消息、验证发送者或签名回答时，使用受保护 Topic。

- [公开 Topic：不配对，发送第一条手机通知](https://ntfyx.me/zh/docs/public-topics/)

---

# Public Topics: send your first notification without pairing

Source: https://ntfyx.me/docs/public-topics/

Updated: 2026-10-29

Send and read a first notification with an existing public Topic link. Check phone receipt, creation versus subscription, privacy, quotas and app availability.

## Send in a browser: no CLI or pairing

Obtain an existing complete https://app.ntfyx.me/t/... link from its owner, open it in a browser and check the Topic name. The page has a message composer and send button; it does not create a Topic. Read and accept the public-content terms before your first send.

1. Enter Hello from my script as the title and My first notification as the body, choose plain text and send.
2. After acceptance, check the webpage’s message list. If the network result is unknown, preserve its saved send and retry the original content; do not clear browser storage or replace the request.
3. Open the same Topic you own or have confirmed following on your phone and match the title and body. Reading the webpage does not subscribe the phone; background alerts also depend on system and Topic settings.

> Anyone with an existing public Topic ID or link can read and send without an account, pairing or key. The name and messages are readable by the service and anyone with the link; keep passwords, private logs and approval requests out of it. Public messages support text, Markdown and lightweight rich content, without answers, approvals or Call reminders. Use a protected Topic for private messages, authenticated senders or signed answers.

- [Public-content terms](https://ntfyx.me/terms/)
- [Troubleshoot missing phone alerts](https://ntfyx.me/docs/troubleshooting/)

## Send from a script: your first CLI message

Use an existing public Topic that you are allowed to post to and CLI 0.6.0 or later. Replace TOPIC_ID below with the actual ID from the end of its link; --topic also accepts the complete https://app.ntfyx.me/t/... link. Run info first and check the name and mode: public. Read the public-content terms before accepting them with --accept-public-terms and sending. You do not need ntfyx connect, and sending does not create a Topic.

```
ntfyx public info --topic TOPIC_ID --json
ntfyx public send "My first notification" --topic TOPIC_ID \
  --title "Hello from my script" \
  --accept-public-terms --json
ntfyx public read --topic TOPIC_ID --limit 20 --json
```

> Anyone with an existing public Topic ID or link can read and send without an account, pairing or key. The name and messages are readable by the service and anyone with the link; keep passwords, private logs and approval requests out of it. Public messages support text, Markdown and lightweight rich content, without answers, approvals or Call reminders. Use a protected Topic for private messages, authenticated senders or signed answers.

- [Install the CLI](https://ntfyx.me/download/)
- [Public-content terms](https://ntfyx.me/terms/)

## Expected result: acceptance, reading and phone alerts

A successful send returns JSON with status: "accepted", id, source_id, sequence, created_at, expires_at and operation_id. The id identifies the message; timestamps are milliseconds. The subsequent read should contain the same id in messages, with message.title equal to Hello from my script and message.body equal to My first notification. Acceptance proves service acceptance, not phone receipt or a displayed alert. The CLI generates a unique operation_id for this first send and includes it in a success or uncertain-result response. After an uncertain result, do not rerun the command without that ID: retain the original operation_id and retry identical content with --operation-id ORIGINAL_OPERATION_ID. Only a new logical message gets a new ID.

1. Open the public Topic you own or have confirmed following on your phone and find that title and body. Reading its webpage does not subscribe the phone to alerts.
2. Confirm the message actually appears on the phone, then check background or lock-screen alerts separately. Allow system notifications and check Topic mute settings for the first test.
3. If the send is accepted but the phone has no message, or the Inbox has it without an alert, follow the troubleshooting steps instead of repeatedly creating or resending.

- [Troubleshoot missing messages and alerts](https://ntfyx.me/docs/troubleshooting/)

## iOS 1.8.3: create or join in one place

Starting with iOS 1.8.3, enter a public identifier such as my-server in Add Topic. A missing Topic is created; an existing Topic is joined. Identifiers are case-sensitive and allow 1–80 letters, numbers, dots, hyphens or underscores. Existing public links and IDs still work. The creator becomes the owner; joining another owner uses a subscription slot. After success, copy the keyless send URL or curl example. Renaming the display name does not change the original public identifier. Earlier versions and Android retain their creation/subscription entries. Anonymous sending or reading alone does not create a Topic. Anyone who knows the public identifier can access it; it is not a private credential.

## Installed version and actual receipt

On 29 October 2026, iOS 1.8.3 and Android 1.8.2 were confirmed public. The unified public entry and automatic iCloud recovery apply to iOS 1.8.3; Android 1.8.2 uses separate create, subscribe and private scanning entries. Verify service acceptance, the message inside the phone app and background alerts separately. Automated tests do not prove delivery on your device.

- [Downloads and public versions](https://ntfyx.me/download/)
- [Private HTTPS push link](https://ntfyx.me/docs/http-push/)

## Choose public, HTTPS push or protected messages

Anyone with an existing public Topic ID or link can read and send without an account, pairing or key. The name and messages are readable by the service and anyone with the link; keep passwords, private logs and approval requests out of it. Public messages support text, Markdown and lightweight rich content, without answers, approvals or Call reminders. Use a protected Topic for private messages, authenticated senders or signed answers.

| Mode | Who can read the input | Who can send / purpose |
| --- | --- | --- |
| Public Topic | The service and anyone with the link | Anyone with its ID; non-sensitive notifications, no answers or Call |
| Private HTTPS push | The service processes plaintext before encrypted delivery | Holders of a send-only key; service webhooks, no reads or answer claims |
| Protected CLI / agent messages | Authorized receivers; encrypted at the sender | Phone-authorized Sources; encrypted messages and signed answers |

- [Protected Topic pairing and answers](https://ntfyx.me/docs/quickstart/)
- [Privacy and encryption boundaries](https://ntfyx.me/security/)

## Unknown send outcomes and retries

A timeout does not prove rejection. Persist a unique --operation-id for each logical message and retry the same ID with identical input within six days. Do not generate a new ID after a timeout. Exact retries consume quota once; changed content under the same ID is rejected. Cloud content lasts 24 hours and minimal retry receipts seven days. Check uncertain outcomes before retrying beyond the safe window. Reads return the latest 50 messages by default; --cursor 0 starts from the oldest unexpired cloud record.

## Follows, history, quotas and abuse limits

Confirm a follow on the phone for ordinary background push; follows share subscription slots with notification sources. Owners receive their own Topic’s alerts without a self-follow slot. Each public message consumes one owner message regardless of receiver count; receiving it does not use a follower’s message allowance. Free includes 100 messages per UTC day; rate, storage and content rules still apply. A shared link can attract unwanted messages and use the owner’s allowance. Public sending allows up to 30 messages per minute and 10 per two seconds per Topic, with additional shared Inbox limits. Reduce frequency when rate-limited. Cloud content lasts 24 hours; downloaded native history follows device retention. The public webpage shows bounded recent history.

- [Limits and retention](https://ntfyx.me/limits/)
- [Quota and subscription troubleshooting](https://ntfyx.me/docs/troubleshooting/)

## Reports and local blocks

Report a public message, source or Topic from its detail screen. CLI public report, public block and public unblock have matching MCP tools. A source label is specific to a Topic and network address; it is not a verified identity. Local blocks hide matching messages; reports go to the operator. After a report timeout, retry the same report-id and body.

```
ntfyx public report --topic TOPIC_ID --report-id REPORT_OPERATION_00000001 --message-id MESSAGE_ID --reason spam --json
ntfyx public block --topic TOPIC_ID --json
```

## Agents, MCP and rich messages

Agents without MCP can run the CLI above; public send --message-file message.json also sends rich messages. Local MCP exposes ntfyx_public_send and ntfyx_public_read. Obtain explicit user agreement before a first MCP public send with accept_public_terms: true; saved acceptance of the current terms avoids repeated prompts. Public content is never an approval and cannot restore or claim an answer. Use ntfyx ask on a protected Topic for decisions, with signature verification and one-time claim.

- [Rich-message formats](https://ntfyx.me/docs/rich-messages/)
- [Script and backup notifications](https://ntfyx.me/docs/notifications/)

## Plans

Free: 100 messages per UTC day, including up to 10 Call reminders and 10 answer requests; one monitor and one subscription. Plus: $1.99/month, 1,000 messages per UTC day, including up to 100 Call reminders and 100 answer requests; five monitors and five subscriptions. Pro: $9.90/month, 20,000 messages per UTC day, including up to 200 Call reminders and 500 answer requests; fifty monitors and fifty subscriptions. Call reminders and answer requests are included in the total message allowance. Public follows and notification-source subscriptions share subscription slots. Paused subscriptions and monitors retain slots until removed. Topic count is not a paid entitlement. Daily usage resets at 00:00 UTC; upgrading does not reset usage. Already accepted questions can still be answered after quota exhaustion or a downgrade. As of 2026-10-29, confirmed public releases are iOS 1.8.3 and Android 1.8.2. Update from your store, then use the public Topic or private connection entry on your phone. Android background push requires Google Play services. Message plans require iOS/Android 1.8.0 or later. These are US-dollar reference prices. Purchase availability, localized prices and taxes are shown by your store before purchase; availability does not establish that every regional purchase flow has been tested.

- [Plans and prices](https://ntfyx.me/pricing/)

---

# 公开 Topic：不配对，发送第一条手机通知

Source: https://ntfyx.me/zh/docs/public-topics/

Updated: 2026-10-29

用已有公开 Topic 链接发送和读取第一条通知，核对手机实际接收；区分创建与订阅、公开隐私、消息额度和版本要求。

## 浏览器发送：不安装 CLI，也不用配对

从拥有者取得已存在的完整 https://app.ntfyx.me/t/... 链接，在浏览器打开并核对 Topic 名称。页面提供消息输入与发送；它不是创建入口。首次发送先阅读并勾选接受公开内容条款。

1. 在标题中输入 Hello from my script，正文输入 My first notification，选择普通文本格式并发送。
2. 网页受理后检查消息列表。网络结果未知时保留当前页面保存的发送记录，用原内容重试，不清空浏览器数据或换一份请求。
3. 在手机打开你拥有或已确认订阅的同一 Topic，核对标题和正文。只打开网页不能建立手机订阅；后台提醒还取决于系统通知与 Topic 设置。

> 已有公开 Topic 的标识或链接允许任何人阅读和发送，无需账号、配对或密钥。名称和消息对服务端及持有链接者可见；不要发送密码、私有日志或审批内容。公开消息支持文本、Markdown 和轻量富内容，不支持应答、审批或 Call。需要私密消息、验证发送者或签名回答时，使用受保护 Topic。

- [公开内容条款](https://ntfyx.me/zh/terms/)
- [手机未提醒的排查](https://ntfyx.me/zh/docs/troubleshooting/)

## 脚本发送：CLI 第一条消息

准备一个你有权发送的现有公开 Topic 链接，以及 CLI 0.6.0 或以上。把下面 TOPIC_ID 替换为链接末尾的真实标识；--topic 也接受完整的 https://app.ntfyx.me/t/... 链接。先运行 info 核对名称和 mode: public。阅读公开内容条款后，再用 --accept-public-terms 接受当前条款并发送。首次发送不需要 ntfyx connect，也不会创建 Topic。

```
ntfyx public info --topic TOPIC_ID --json
ntfyx public send "My first notification" --topic TOPIC_ID \
  --title "Hello from my script" \
  --accept-public-terms --json
ntfyx public read --topic TOPIC_ID --limit 20 --json
```

> 已有公开 Topic 的标识或链接允许任何人阅读和发送，无需账号、配对或密钥。名称和消息对服务端及持有链接者可见；不要发送密码、私有日志或审批内容。公开消息支持文本、Markdown 和轻量富内容，不支持应答、审批或 Call。需要私密消息、验证发送者或签名回答时，使用受保护 Topic。

- [CLI 安装与下载](https://ntfyx.me/zh/download/)
- [公开内容条款](https://ntfyx.me/zh/terms/)

## 预期结果：受理、读到、手机提醒分别核对

发送成功的 JSON 包含 status: "accepted"、id、source_id、sequence、created_at、expires_at 和 operation_id。id 是消息标识，时间为毫秒时间戳。随后 read 的 messages 数组中应能找到相同 id，且 message.title 为 Hello from my script、message.body 为 My first notification。status: accepted 只证明服务端受理，不能证明手机收到或弹出提醒。CLI 为首次发送生成唯一 operation_id，并在成功或未知结果中返回它。未知结果时不要直接重跑不带标识的命令：保留原 operation_id，用完全相同内容和 --operation-id 原标识重试；新的逻辑消息才使用新标识。

1. 在手机打开你拥有或已确认订阅的公开 Topic，查找相同标题和正文；只在网页看到消息，不等于订阅了手机提醒。
2. 记录手机确实看到消息，再单独检查锁屏或后台提醒。首次测试先允许系统通知，并检查 Topic 静音设置。
3. 命令受理但手机没有消息，或收件箱有消息却不提醒时，按排障页检查，不要反复创建或重发。

- [消息未到与不提醒的排查](https://ntfyx.me/zh/docs/troubleshooting/)

## iOS 1.8.3：一个入口创建或加入

从 iOS 1.8.3 起，在「添加 Topic」输入公开标识（例如 my-server），不存在时创建，已存在时加入。标识区分大小写，支持 1–80 个字母、数字、点、连字符或下划线；也可粘贴原有公开链接或标识。创建者成为拥有者，加入别人的 Topic 会使用订阅名额。成功后可复制无需密钥的发送 URL 和 curl 示例。显示名称修改不会改变原公开标识。旧版本和 Android 保留各自的创建／订阅入口；匿名发送与读取本身不会创建 Topic。公开标识对知道它的人开放，不能作为私密凭据。

## 安装版本与实际收取

2026-10-29 核查确认 iOS 1.8.3 与 Android 1.8.2 已公开。统一公开入口和 iCloud 自动恢复适用于 iOS 1.8.3；Android 1.8.2 使用独立的新建、订阅和私密扫码入口。首次使用应分别核对服务端受理、手机内消息和后台提醒，自动测试不代表你的设备已收到通知。

- [下载与公开版本](https://ntfyx.me/zh/download/)
- [私有 HTTPS 推送链接](https://ntfyx.me/zh/docs/http-push/)

## 选择公开、HTTPS 推送或受保护消息

已有公开 Topic 的标识或链接允许任何人阅读和发送，无需账号、配对或密钥。名称和消息对服务端及持有链接者可见；不要发送密码、私有日志或审批内容。公开消息支持文本、Markdown 和轻量富内容，不支持应答、审批或 Call。需要私密消息、验证发送者或签名回答时，使用受保护 Topic。

| 模式 | 谁能阅读输入 | 谁能发送／用途 |
| --- | --- | --- |
| 公开 Topic | 服务端及持有链接的人 | 任何持有标识的人；非敏感通知，不支持回答或 Call |
| 私有 HTTPS 推送 | 服务端处理明文后加密投递给授权接收端 | 持有仅发送密钥的人；普通服务 Webhook，不能读取或领取回答 |
| 受保护 CLI／Agent 消息 | 授权接收端；在发送端加密 | 手机授权的 Source；加密消息和签名应答 |

- [受保护 Topic 配对与应答](https://ntfyx.me/zh/docs/quickstart/)
- [隐私和加密边界](https://ntfyx.me/security/)

## 未知发送结果与重试

超时不代表未发送。自动化应为每条逻辑消息持久保存唯一 --operation-id，并在六天内用同一标识、完全相同的输入重试。不要因超时生成新标识。重复受理只扣一次额度；同一标识搭配不同内容会被拒绝。云端正文保留 24 小时，最小去重回执保留七天；超过安全重试期限须先人工核对。读取默认返回最近 50 条；--cursor 0 从云端尚未过期的最早记录开始。

## 关注、历史、额度与滥用限制

在手机确认关注公开 Topic 后，可接收后台普通推送，与通知源订阅共享名额。拥有者自动接收自己 Topic 的提醒，无需占自关注名额。每条公开消息扣拥有者一次消息额度，多个接收者不重复扣；关注者接收不扣自己的消息数。免费版每天 100 条，按 UTC 日重置；速率、存储和内容规则仍适用。链接流出可能带来不想收到的消息，也会消耗拥有者额度。公开发送每 Topic 最多每分钟 30 条、每 2 秒 10 条，并受 Inbox 共享限制；遇到限流应降低频率，不循环重发。服务端保留正文 24 小时，已下载的原生历史按设备本地规则保留。公开网页仅显示有限的近期记录。

- [额度及保留规则](https://ntfyx.me/limits/)
- [额度与订阅排障](https://ntfyx.me/zh/docs/troubleshooting/)

## 举报与本机屏蔽

可在消息详情举报公开消息、来源或整个 Topic。CLI 提供 public report、public block 和 public unblock，MCP 提供对应工具。来源标签按 Topic 与网络地址生成，不代表已验证的个人；本机屏蔽隐藏相应消息，运营举报由服务方处理。举报超时保留同一 report-id 和原内容重试。

```
ntfyx public report --topic TOPIC_ID --report-id REPORT_OPERATION_00000001 --message-id MESSAGE_ID --reason spam --json
ntfyx public block --topic TOPIC_ID --json
```

## Agent、MCP 与富消息

无 MCP 时直接调用上面的 CLI；也可用 public send --message-file message.json 发送富消息。本地 MCP 提供 ntfyx_public_send 与 ntfyx_public_read；首次 MCP 公开发送必须取得用户明确同意，再传 accept_public_terms: true，已保存的同版本接受无需重复确认。公开内容不能作为操作批准，不能用于恢复或领取应答。需要人确认时使用受保护 Topic 的 ntfyx ask，并验证签名和单次领取。

- [富消息格式](https://ntfyx.me/zh/docs/rich-messages/)
- [脚本与备份通知](https://ntfyx.me/zh/docs/notifications/)

## 套餐

免费版：每天 100 条消息，其中 Call 最多 10 条、应答请求最多 10 条；1 个监控、1 个订阅。 Plus：$1.99/月，每天 1,000 条消息，其中 Call 最多 100 条、应答请求最多 100 条；5 个监控、5 个订阅。 Pro：$9.90/月，每天 20,000 条消息，其中 Call 最多 200 条、应答请求最多 500 条；50 个监控、50 个订阅。 Call 与应答请求包含在消息总额内。公开 Topic 关注与通知源订阅共享订阅名额；暂停订阅或监控仍占名额，删除或退订才释放。Topic 数量不作为付费权益。每日 UTC 00:00 重置消息额度，升级不重置已用数量。额度用完或降级后，已受理的问题仍可回答。 截至 2026-10-29 已确认公开版为 iOS 1.8.3、Android 1.8.2。在商店更新后，按手机上的公开 Topic 或私密连接入口继续；Android 后台推送需要 Google Play 服务。 消息套餐需要 iOS／Android 1.8.0 或以上。所列为美元参考价；所在地区的可购买状态、本地价格与税费以购买前的商店页面为准，上架不代表各地区真实购买流程均已验收。

- [套餐与价格](https://ntfyx.me/pricing/)

---

# 快速开始：收到第一条通知，或回答第一个问题

Source: https://ntfyx.me/zh/docs/quickstart/

Updated: 2026-10-29

按任务选择已有公开 Topic、私有 HTTPS 推送或受保护 Topic。核对第一条手机消息，再试一次签名回答。

## 先选择要完成的任务

只想收到通知时，不必先做 Agent 配对。选择一条路径，完成一次自己的消息接收；需要手机回答 Agent 时，再使用受保护 Topic。下方连接动画演示的是受保护 Topic 配对。

| 目标 | 准备什么 | 内容边界 |
| --- | --- | --- |
| 已有公开 Topic，发送普通通知 | 已有真实链接或标识；浏览器或 CLI 0.6.0+ | 无需配对，服务端和持有链接者能读写；不支持回答或 Call |
| 服务或脚本通过 HTTPS 通知 | 手机生成的私有 HTTPS 推送链接 | 链接包含仅发送密钥；服务端读取输入后加密投递 |
| 让 Agent 等待手机回答 | 手机 App、CLI、受保护 Topic 配对 | 授权 Source 在本机加密；回答须验证并单次领取 |

- [公开 Topic：第一条消息](https://ntfyx.me/zh/docs/public-topics/)
- [HTTPS 推送教程](https://ntfyx.me/zh/docs/http-push/)

## 通知路径：选择已有公开 Topic 或私有 HTTPS 链接

有现成公开 Topic 时，先按公开指南核对名称、发送无敏感信息的消息，并在手机确认收到。手机必须拥有这个 Topic 或已确认订阅；只打开网页不是订阅。不想公开内容时，用手机 HTTPS Push 生成的完整私有链接，按对应教程发送 hello。HTTPS 输入对服务端可见，严格要求发送端加密的内容请走下方受保护 CLI 路径。

> 截至 2026-10-29 已确认公开版为 iOS 1.8.3、Android 1.8.2。在商店更新后，按手机上的公开 Topic 或私密连接入口继续；Android 后台推送需要 Google Play 服务。

- [核对当前下载版本](https://ntfyx.me/zh/download/)
- [手机发送 hello 的完整步骤](https://ntfyx.me/zh/docs/https-push-walkthrough/)

## 应答路径：准备手机与 CLI

在 iPhone 或 Android 安装 Ntfyx，在 Windows、macOS 或 Linux 安装 CLI。Android 后台推送需要 Google Play 服务。先按安装页选择自己的系统，再检查 ntfyx version。以下终端步骤适用于已安装 CLI 的三个桌面平台；Windows 安装使用 PowerShell 说明。无需 Ntfyx 账号，但必须由手机授权这个发送端。

```
ntfyx version --json
ntfyx connect
```

- [按系统安装 CLI](https://ntfyx.me/install/)
- [手机 App 与版本要求](https://ntfyx.me/zh/download/)

## 1. 连接受保护 Topic

保持 ntfyx connect 运行，在手机选择连接私密 Topic，扫描可信电脑上刚显示的二维码。确认发送端并选择受保护 Topic；新建时按安装版本提供的连接流程命名。不要把公开链接粘贴到配对流程。连接完成后运行 topics，记下 CLI 本地别名。下面以 Work 为例；如果列表中别名不同，请替换。

```
ntfyx topics
```

> 二维码仅用于授权你信任的发送端，不能公开分享。创建入口缺失时，查看排障页的版本说明，保留当前身份和数据。

- [创建和配对排障](https://ntfyx.me/zh/docs/troubleshooting/)

## 2. 接收一条加密通知

发送这条无敏感信息的测试消息。在手机收件箱打开对应 Topic，确认看到 Build 42 passed。CLI 成功只表示服务端受理；手机前台同步、后台推送和系统显示横幅要分别核对。拒绝系统通知权限时，前台收件箱仍可收到消息。

```
ntfyx send "Build 42 passed" --topic Work --json
```

- [消息到了但没有提醒](https://ntfyx.me/zh/docs/troubleshooting/)

## 3. 回答一个无副作用的问题

保持此终端等待，在手机打开原问题，选择 Allow 或 Deny。此命令只是演示问答，没有连接部署、支付或其他外部操作。同步 ask 在原发送端验证答案，成功领取后才返回允许结果。Deny 是完整答案；超时不是同意，迟到答案不会启动已经结束的任务。

```
ntfyx ask "Continue this harmless demo?" --topic Work --allow-deny --wait 60s --expires 90s --json
```

> 验收应答路径要看到原 CLI 的验证结果，不能仅看手机“已提交”。Allow 的成功退出码为 0，Deny 为 10，等待超时为 14。读取 result 的退出成功也不等于取得执行授权。

- [接入自己的 Agent](https://ntfyx.me/zh/docs/agent-plugins/)
- [签名答案与执行边界](https://ntfyx.me/docs/phone-approval/)

## 可选：在浏览器接收新消息

打开 Web 收件箱，用主手机扫描并确认它的新二维码。浏览器获得独立接收密钥，只能读取授权后发送给它的消息，不能自动获得手机旧历史。网页保持打开时可查看更新。公开 Topic 网页不需要这个配对步骤，但其内容是公开的。

- [打开 Web 收件箱](https://app.ntfyx.me/)
- [未收到消息时逐步排查](https://ntfyx.me/zh/docs/troubleshooting/)

---

# 排障：手机没有通知、Topic 创建失败与 Agent 未继续

Source: https://ntfyx.me/zh/docs/troubleshooting/

Updated: 2026-10-29

按发送受理、手机收件箱和系统提醒分层排查。核对安装版本、创建入口、订阅、日消息额度和已回答但 Agent 未继续的状态。

## 先确定断在哪一步

使用一条无敏感信息的测试消息，记下时间、App／CLI 版本和可见错误码。不要批量重发。下面三种状态分别排查：服务端受理不等于设备收到，设备收到不等于系统提醒。

| 可观察状态 | 先检查 | 预期结果 |
| --- | --- | --- |
| 发送命令报错或没有确认结果 | 原错误码、网络、额度；保留原操作标识 | 明确被拒绝，或用原标识安全恢复未知结果 |
| 命令已受理，手机内找不到消息 | 正确 Topic、订阅是否确认、前台刷新 | 在手机对应 Topic 看到测试消息 |
| 手机内有消息，锁屏／横幅没出现 | 系统权限、Topic 静音、勿扰与后台推送条件 | 一次新的测试能显示提醒；或明确为当前静音策略 |

## 消息到了，但手机没有提醒

如果收件箱已经有消息，先检查提醒设置，不要新建 Topic 或更换身份。每改一项后只发一次新的测试，并记录消息时间与是否在后台。前台同步成功并不能证明 APNs／FCM 推送已经成功。

1. 核对系统设置中 Ntfyx 的通知权限，以及需要的横幅、声音和锁屏显示。
2. 在这个 Topic 内检查静音与每日安静时段；再看系统专注模式／勿扰。安静时段只暂停提醒，不阻止消息与回答。
3. 打开 Ntfyx 联网并同步，再回到后台测试；重启后先解锁手机。iPhone 尚未首次解锁或通知扩展超时时，可能只显示通用加密消息提示。
4. Android 检查 Google Play 服务、到 Google 的网络与 Ntfyx 通知渠道。强行停止后须重新打开 App；通知监听／转发 App 可能自动移除提醒，不必为测试一律关闭所有电池限制。
5. 仍无提醒时，保留“手机已收到、系统未提醒”的观察及时间交给支持；不要将推送 token、消息正文或发送链接贴出。

## 命令已受理，手机没有这条消息

先打开正确 Topic 并刷新。公开 Topic 的拥有者直接接收；其他人要完成预览后的订阅确认，网页阅读不建立手机订阅。检查关注是否暂停或取消，及本机屏蔽是否隐藏该来源。受保护消息要核对发送端的本地别名与手机所授权 Topic 是否对应。新授权浏览器没有旧消息是正常边界。

1. 公开发送可用 public read 核对受理的消息 id；read 只证明云端可读。公开云端正文只保留 24 小时，过期后的空列表不能证明当时未受理。
2. 受保护 CLI 在原用户环境运行 ntfyx topics 和 ntfyx doctor；不要复制别人的凭据来修复连接。
3. 确认网络与原服务环境一致；一次前台刷新后仍缺失时，保留受理时间与脱敏错误，联系支持。不要通过改名、猜标识或反复新建来“找回”消息。

```
ntfyx public read --topic TOPIC_ID --limit 20 --json
```

- [公开 Topic 创建与订阅区别](https://ntfyx.me/zh/docs/public-topics/)

## 创建不了 Topic，或输入名字后按钮不可点

截至 2026-10-29 已确认公开版为 iOS 1.8.3、Android 1.8.2。在商店更新后，按手机上的公开 Topic 或私密连接入口继续；Android 后台推送需要 Google Play 服务。

1. 先核对 App 内版本；1.8.1 的创建入口问题需要从商店更新，后台更新不能补出旧版按钮。
2. iPhone 1.8.3 起，在公开 Topic 入口输入名称或链接，预览已有或新建状态后确认。Android 1.8.2 分别提供创建公开 Topic、订阅已有公开链接和私密扫码入口；订阅框需要真实链接或标识。
3. 连接 Agent 应答时选择私密扫码入口和受保护 Topic。公开 Topic 不支持签名回答。
4. 已经提交但结果未知时，先刷新原 Inbox，恢复原操作；保留原身份，不开新请求、不清除数据。仍卡住时记录版本和错误码并联系支持。

> 保留 App 数据、密钥、原发送链接与 Inbox。重装和清空数据不是入口排障步骤。

- [当前下载版本](https://ntfyx.me/zh/download/)
- [手机连接 Agent 的逐步教程](https://ntfyx.me/zh/docs/agent-plugins/)

## 额度切换、日限额与暂停状态

看实际错误码和手机套餐用量，不把所有错误归为“免费 Topic 用完”。Topic 数量不是付费分档。Free／Plus／Pro 的消息日额分别为 100／1,000／20,000，按 UTC 日重置；Call 与应答还有各自子限额。已接受的回答可继续完成。已配对 CLI 可以用 usage 查看用量；匿名公开发送者需让拥有者核对。

```
ntfyx usage --json
```

| 状态／错误 | 下一步 |
| --- | --- |
| quota_switch_in_progress | 10 月 28 日已部署免费额度恢复修复；网络恢复后沿用原 URL 和操作标识重试原操作。仍持续时报告时间和版本，保留原 Inbox，不重新购买或新建身份。 |
| daily_message_limit | 查看拥有者当日额度，等下一 UTC 日或由拥有者决定是否改套餐；避免重试风暴。 |
| daily_call_limit / daily_request_limit | 对应子额度已用尽；等待重置。不能擅自把提问改成普通通知或把超时视为允许。 |
| rate_limit / storage_limit | 按 Retry-After 等待（如有）并降低频率；存储额度与日额分开，持续失败时保留证据。 |
| Topic 或关注被暂停 | 查看是否由用户主动暂停；确认意图后恢复原项，不绕过暂停另建一个。 |

- [套餐和计数说明](https://ntfyx.me/pricing/)

## 手机已回答，Agent 没继续

手机提交成功只证明答案已提交，不是执行回执。先核对原终端／Agent 是否仍在运行，再检查原 request ID 的状态。原发送端可能离线、已被撤销、等待已结束，或外部操作的结果未知。

1. 在原配对用户与原 CLI 环境，使用 result 查询原请求；这是只读观察，不要附加 --claim 来“试一下”。
2. pending：等待尚未完成；answered：查看验证后的具体决定。Deny 保持拒绝，不能改发新题求 Allow。
3. expired／cancelled／replaced：原请求已终止。手机草稿或迟到回答不能让它恢复。
4. 已领取或执行结果未知：检查原任务日志与目标系统状态；单次领取不能保证外部操作恰好执行一次，不自动重跑副作用。

```
ntfyx result REQUEST_ID --json
```

- [签名应答与单次领取](https://ntfyx.me/docs/phone-approval/)

## 配对过期、离线与浏览器旧历史

配对二维码五分钟过期，仅在确认原配对已过期或取消后，才从可信发送端生成新码；核对手机和发送端的服务环境。离线可以读本地缓存与编辑草稿，但提交前必须联网并重新核对请求状态。新浏览器取得独立密钥，不能读取授权前的消息；“Earlier request updated”不意味着它有权回答旧题。不要修改配对 URL 或向支持发送其中的 fragment。

## 何时联系支持，提供什么

完成上述顺序检查后仍失败，提供 App／CLI 版本、系统、发生时间与时区、脱敏错误码，以及最后确认成功的步骤（服务端受理／手机收到／系统未提醒／答案提交）。公开版本创建入口仍缺失时注明安装版本；不要把待审版本的测试结果写成已在自己手机完成。预览诊断报告后再自行发送，不包含消息正文、答案、Topic 链接、完整发送 URL、token、配对码、恢复包或私钥。

- [支持渠道](https://ntfyx.me/support/)

---

# Shell、PowerShell 与备份完成后，通知手机

Source: https://ntfyx.me/zh/docs/notifications/

Updated: 2026-10-28

为 Shell、PowerShell、备份与定时任务发送手机通知。保留任务退出码，单独检查通知受理、实际接收与失败。

## 先选公开通知、HTTPS，还是加密脚本通知

已有公开 Topic 可以免配对发送无敏感信息的通知；私有 HTTPS 链接适合服务 Webhook，服务端读取输入后加密投递。下方脚本使用受保护 Topic：先用运行任务的同一用户配对 CLI，发送端本地加密消息。不要把私有日志原文发送到公开 Topic。

- [公开 Topic：无需配对](https://ntfyx.me/zh/docs/public-topics/)
- [私有 HTTPS 推送](https://ntfyx.me/zh/docs/http-push/)
- [受保护 Topic 配对](https://ntfyx.me/zh/docs/quickstart/)

## 准备受保护脚本通知

在 Windows、macOS 或 Linux 安装当前 CLI，并用运行任务的同一用户与手机配对。Android 推送需要 Google Play 服务。运行 ntfyx topics 找到本地别名；示例中的 Work 要替换成自己的别名。已有公开 Topic 或私有 HTTPS 链接也能发普通通知，区别见模式选择。

```
ntfyx version --json
ntfyx topics
ntfyx send "Build finished. Ready to review." --title "Build complete" --topic Work
```

- [配对与第一次接收](https://ntfyx.me/zh/docs/quickstart/)

## Shell：下载并阅读完整包装脚本

这个小脚本原样运行传入命令一次，然后发送通用退出状态。它不发送命令参数或终端输出。先阅读下载文件，再用无害任务试一次；不能把 CLI 受理结果当作手机已经显示。

```
curl -fsSLo notify-after.sh https://ntfyx.me/examples/scripts/notify-after.sh
cat notify-after.sh
bash notify-after.sh Work bash -c 'printf "Example job finished\n"'
```

- [notify-after.sh 源码](https://ntfyx.me/examples/scripts/notify-after.sh)

## 验证失败退出码仍然保留

下面任务故意退出 7。包装脚本应仍退出 7；即便通知发送失败，也只追加警告，不覆盖任务结果。每次测试后在手机对应 Topic 核对消息。

```
bash notify-after.sh Work bash -c 'exit 7'
printf "Original command exit: %s\n" "$?"
```

| 任务结果 | 通知结果 | 包装脚本退出码 |
| --- | --- | --- |
| 成功 0 | 已受理 | 0 |
| 失败 7 | 已受理 | 7 |
| 失败 7 | 未确认 | 7，并显示警告 |
| 成功 0 | 未确认 | 0，并显示警告 |

## Linux cron：与手动运行保持同一身份

cron 的环境较少。使用已配对用户的 crontab，明确 PATH 与所有绝对路径，把结果留在本机日志。先手动运行完全相同的命令。下方每天 09:00 运行一次无害任务，时区由原调度器决定；替换 YOUR_USER 与文件路径后再自行加入。macOS 沿用现有 launchd 调度。

```
PATH=/home/YOUR_USER/.local/bin:/usr/bin:/bin
0 9 * * * /bin/bash /home/YOUR_USER/notify-after.sh Work /bin/true >> /home/YOUR_USER/ntfyx-job.log 2>&1
```

> 不要为配对改用 root。机器关闭、计划任务根本没启动、进程在发送前被杀死，均无法由退出包装脚本报告。

## 缺失通知与验证范围

原有 shell 示例已在本地加密中继与 Web 接收端验证；这不是实体 iPhone、Android 或推送服务的送达证明。脚本退出、服务端受理和手机显示要分别观察。先完成一次自己的成功与失败演练，再接入日常任务。

- [按可观察状态排障](https://ntfyx.me/zh/docs/troubleshooting/)
- [公开示例与验证范围](https://github.com/KaylaONeal/ntfyx-examples)

## Windows PowerShell：完整的退出通知脚本

将下方保存为 notify-after.ps1，以已配对的 Windows 用户运行。它只包装原生可执行文件，运行一次任务后保存 $LASTEXITCODE，再单独发送通知。PowerShell 业务脚本要通过 powershell.exe 或 pwsh.exe -File 启动，并自己明确返回退出码。通知失败不能把任务失败改成成功；未能启动任务返回 127。命令参数和输出留在本机，不发送到手机。

```
# Save as notify-after.ps1. Runs a native executable once.
param(
  [Parameter(Mandatory=$true)][string]$Topic,
  [Parameter(Mandatory=$true)][string]$TaskExecutable,
  [string[]]$TaskArguments = @(),
  [string]$Ntfyx = 'ntfyx'
)
# Nonzero native exits are job results, not PowerShell exceptions.
$PSNativeCommandUseErrorActionPreference = $false
$ntfyxJobStatus = 127
try {
  $ntfyxTask = Get-Command $TaskExecutable -CommandType Application -ErrorAction Stop
  & $ntfyxTask.Source @TaskArguments
  $ntfyxJobStatus = $LASTEXITCODE
} catch {
  [Console]::Error.WriteLine('Task could not start; status 127.')
}
$ntfyxTitle = if ($ntfyxJobStatus -eq 0) { 'Task finished' } else { 'Task failed' }
try {
  $ntfyxCommand = Get-Command $Ntfyx -CommandType Application -ErrorAction Stop
  & $ntfyxCommand.Source send "Task exited with status $ntfyxJobStatus. Check the local log." --title $ntfyxTitle --topic $Topic | Out-Null
  if ($LASTEXITCODE -ne 0) {
    [Console]::Error.WriteLine('Notification not confirmed; job exit status is preserved.')
  }
} catch {
  [Console]::Error.WriteLine('Notification could not start; job exit status is preserved.')
}
exit $ntfyxJobStatus
```

- [PowerShell 退出状态说明](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_automatic_variables#lastexitcode)

## 先测试成功、失败和通知失败

在 PowerShell 运行这些无害子进程。前两次应分别返回 0 和 7；第三次故意使用不存在的通知命令，仍应返回 7 并显示通知警告。每次任务只执行一次。替换成自己的命令前，先确认手机收到相应状态。不要用 robocopy 等有特殊成功码的工具套用“非零全部失败”规则；这类工具应先按自己的语义转换结果。

```
.\notify-after.ps1 -Topic Work -TaskExecutable "$env:ComSpec" -TaskArguments @('/d', '/c', 'exit 0')
"Job exit: $LASTEXITCODE"
.\notify-after.ps1 -Topic Work -TaskExecutable "$env:ComSpec" -TaskArguments @('/d', '/c', 'exit 7')
"Job exit: $LASTEXITCODE"
.\notify-after.ps1 -Topic Work -TaskExecutable "$env:ComSpec" -TaskArguments @('/d', '/c', 'exit 7') -Ntfyx 'missing-ntfyx-test.exe'
"Job exit: $LASTEXITCODE"
```

## Windows 任务计划程序：固定身份与路径

调度器不会继承交互终端的完整环境。在同一已配对账户下运行，使用 CLI、包装脚本和业务脚本的绝对路径，并在任务操作中设置工作目录。下面是 runner.ps1 示例，把 YOUR_USER 与业务路径替换成自己的真实路径。计划程序的“程序”填 powershell.exe 的完整路径，“参数”填 -NoProfile -File "C:\Jobs\runner.ps1"，“起始于”填 C:\Jobs。按原系统策略允许脚本执行，不使用绕过策略参数；先手动执行同一操作，再查看任务历史和上次运行结果。

```
# C:\Jobs\runner.ps1; task.ps1 must exit with its own result.
$ntfyxRun = @{
  Topic = 'Work'
  Ntfyx = 'C:\Users\YOUR_USER\AppData\Local\Ntfyx\bin\ntfyx.exe'
  TaskExecutable = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'
  TaskArguments = @('-NoProfile', '-File', 'C:\Jobs\task.ps1')
}
& 'C:\Jobs\notify-after.ps1' @ntfyxRun
exit $LASTEXITCODE
```

> 不要改成 SYSTEM 或复制另一账户的配对密钥来修复权限。计划任务没启动、机器关机或进程在通知前终止时，这个包装脚本无法发出缺席提醒。Windows 调度与实体手机接收仍需在你的环境单独验收。

- [Microsoft 计划任务路径与用户说明](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/schtasks-create)

## 备份：报告退出码，再单独验证可恢复

把已经检查过的 notify-after.sh 放在任务目录。下面 runner 接受源目录与新的归档文件路径，只运行一次 tar，并原样返回备份退出码。目标文件必须不存在；独占创建输出，避免并行任务覆盖既有备份。失败可能留下部分归档，不能当作可用备份。先用临时样本目录演练；成功通知只表示 tar 返回 0，不证明备份内容完整或能够恢复。用自己的备份工具时保留它的退出语义，恢复演练放在单独临时目录。

```
#!/usr/bin/env bash
# Save beside notify-after.sh as backup-run.sh.
set -u
if [ "$#" -ne 3 ]; then
  printf 'Usage: bash backup-run.sh TOPIC SOURCE_DIR NEW_ARCHIVE\n' >&2
  exit 2
fi
ntfyx_topic="$1"
ntfyx_source="$2"
ntfyx_archive="$3"
if [ ! -d "$ntfyx_source" ] || [ -e "$ntfyx_archive" ] || [ -L "$ntfyx_archive" ]; then
  printf 'Use an existing source directory and a new archive path.\n' >&2
  exit 2
fi
ntfyx_script_dir="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" || exit 2
set -C # Refuse an existing output during redirection, including a racing writer.
bash "$ntfyx_script_dir/notify-after.sh" "$ntfyx_topic" \
  tar -czf - -C "$ntfyx_source" . > "$ntfyx_archive"
ntfyx_backup_status=$?
exit "$ntfyx_backup_status"
```

- [备份失败提醒案例](https://ntfyx.me/zh/use-cases/backup-alerts/)
- [远程备份与 SSH 状态](https://ntfyx.me/zh/docs/ssh-job-notifications/)

## 完成自己的自动化任务

从可复制的完整示例开始，核对任务结果、发送回执和手机消息。通知成功与原任务成功分别判断。

- [GitHub Actions 构建失败通知](https://ntfyx.me/zh/docs/github-actions-notifications/)
- [n8n 工作流错误提醒](https://ntfyx.me/zh/docs/n8n-error-notifications/)
- [脚本与 PowerShell 通知](https://ntfyx.me/zh/docs/notifications/)

---

# GitHub Actions failure notifications on your phone

Source: https://ntfyx.me/docs/github-actions-notifications/

Updated: 2026-10-29

Copy a complete GitHub Actions workflow: keep failed builds failed, send a private HTTPS notification with the run link, and verify receipt on your phone.

## Choose a useful report

GitHub Mobile already offers workflow completion notifications, including failures only, and access to runs. Use that when it meets your needs. Ntfyx is useful when you want to write a specific summary or collect CI, backup and n8n results in the same phone Inbox. This walkthrough sends a short status and the GitHub run link. GitHub still controls access to private logs; a notification does not grant repository access.

- [GitHub: Actions in GitHub Mobile](https://github.blog/news-insights/product-news/bringing-github-actions-to-github-mobile/)

## Start with one working HTTPS notification

As of 2026-10-29, confirmed public releases are iOS 1.8.3 and Android 1.8.2. Update from your store, then use the public Topic or private connection entry on your phone. Android background push requires Google Play services. Open HTTPS Push in Ntfyx, send its hello test and confirm the matching message in your Inbox. Copy the complete private sending URL. These tutorials POST JSON to that fixed URL and need no CLI pairing. First verify your own phone receipt before configuring an automation. If setup is blocked, follow troubleshooting and check the installed version.

> The URL contains a send-only secret. HTTPS content is readable by Ntfyx before encrypted delivery; it is not device-side end-to-end encryption. Public Topics need no sender pairing but allow anyone with the identifier to read and send. Keep private CI or workflow reports off public Topics. These notification examples cannot approve an action or return a verified answer.

- [HTTPS first-message walkthrough](https://ntfyx.me/docs/https-push-walkthrough/)
- [Existing public Topics and mode choice](https://ntfyx.me/docs/public-topics/)
- [Current app availability](https://ntfyx.me/download/)
- [Setup troubleshooting](https://ntfyx.me/docs/troubleshooting/)

## 1. Save the sending URL as a repository secret

In your repository, open Settings → Secrets and variables → Actions → New repository secret. Name it NTFYX_WEBHOOK_URL and paste the complete URL from the phone. Keep it out of the YAML and job output. The example receives this secret through an environment variable and JSON-encodes all message fields; it does not interpolate event text into shell code.

> Use a trusted repository and runner. Secrets are unavailable to ordinary fork pull requests and Dependabot runs. This example uses workflow_dispatch; do not switch to pull_request_target to expose secrets to untrusted pull-request code.

- [GitHub: storing and using secrets](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)

## 2. Add this complete workflow

Save this as .github/workflows/phone-notification.yml on the default branch of a test repository. It needs no dependency installation. Run it from the Actions tab with fail_demo enabled: the harmless task exits 1 and the failure-only notification step runs. Replace the demo step with your own checkout, setup and build steps after the first test.

```
name: CI phone notification demo

on:
  workflow_dispatch:
    inputs:
      fail_demo:
        description: Fail the harmless demo task
        type: boolean
        default: true

permissions: {}

jobs:
  task:
    runs-on: ubuntu-latest
    steps:
      - name: Demo task (replace with your build or test steps)
        env:
          FAIL_DEMO: ${{ inputs.fail_demo }}
        shell: bash
        run: |
          if [[ "$FAIL_DEMO" == "true" ]]; then
            echo "Intentional demo failure"
            exit 1
          fi
          echo "Demo succeeded"

      - name: Notify phone on failure
        if: ${{ failure() }}
        continue-on-error: true
        timeout-minutes: 3
        env:
          NTFYX_WEBHOOK_URL: ${{ secrets.NTFYX_WEBHOOK_URL }}
          TASK_RESULT: ${{ job.status }}
        shell: bash
        run: |
          python3 - <<'PY'
          import datetime, email.utils, hashlib, json, os, sys, time
          import urllib.error, urllib.parse, urllib.request

          def stop(message):
              print("::warning::Ntfyx: " + message)
              sys.exit(1)

          url = os.environ.get("NTFYX_WEBHOOK_URL", "")
          parsed = urllib.parse.urlsplit(url)
          if parsed.scheme != "https" or parsed.hostname != "api.ntfyx.me":
              stop("Set NTFYX_WEBHOOK_URL to the complete production HTTPS URL copied from the app.")
          run_id = os.environ["GITHUB_RUN_ID"]
          attempt = os.environ["GITHUB_RUN_ATTEMPT"]
          repository = os.environ["GITHUB_REPOSITORY"]
          run_url = f"{os.environ['GITHUB_SERVER_URL']}/{repository}/actions/runs/{run_id}"
          payload = json.dumps({
              "title": "CI " + os.environ["TASK_RESULT"],
              "text": f"{repository}\nRun {run_id}, attempt {attempt}\n{run_url}",
              "session_id": hashlib.sha256(f"github-{repository}-{run_id}".encode()).hexdigest(),
              "session_name": "GitHub Actions",
          }).encode("utf-8")
          key = hashlib.sha256(f"github-{repository}-{run_id}-{attempt}-task-result".encode()).hexdigest()
          class NoRedirect(urllib.request.HTTPRedirectHandler):
              def redirect_request(self, *args, **kwargs):
                  return None
          opener = urllib.request.build_opener(NoRedirect)
          for index in range(3):
              delay = 5 * (index + 1)
              request = urllib.request.Request(url, data=payload, method="POST", headers={
                  "Content-Type": "application/json", "Idempotency-Key": key,
              })
              try:
                  with opener.open(request, timeout=15) as response:
                      if not 200 <= response.status < 300:
                          stop("Unexpected response; inspect the sender execution.")
                  print("Ntfyx accepted the message; verify receipt separately on your phone.")
                  break
              except urllib.error.HTTPError as error:
                  if error.code not in (408, 429, 500, 502, 503, 504):
                      stop(f"HTTP {error.code}; check configuration before retrying.")
                  retry_after = error.headers.get("Retry-After")
                  if retry_after:
                      try:
                          delay = max(delay, float(retry_after))
                      except ValueError:
                          try:
                              retry_at = email.utils.parsedate_to_datetime(retry_after)
                              delay = max(delay, (retry_at - datetime.datetime.now(datetime.timezone.utc)).total_seconds())
                          except (TypeError, ValueError):
                              stop("Invalid Retry-After; inspect the response before retrying.")
              except (urllib.error.URLError, TimeoutError, OSError):
                  pass  # Outcome unknown: preserve this payload and key.
              if index == 2 or delay > 60:
                  stop("Send unconfirmed. Inspect the phone and sender before a retry; retain the original key and body.")
              time.sleep(delay)
          PY

```

- [Download the same YAML](https://ntfyx.me/examples/automation/github-actions.yml)

## 3. Verify the failure, the receipt and the alert separately

The expected phone message is titled “CI failure” and contains the repository, run ID, attempt number and run URL. Open that URL and confirm it points to the intentionally failed run. The workflow must remain failed even if sending succeeds. A sender log saying “accepted” proves service acceptance only; confirm the matching Inbox message before treating setup as complete. Check banner or sound separately with the app in the background.

1. Run once with fail_demo=true: one failed task and one matching Inbox message are expected.
2. Run again with fail_demo=false: the task should pass and the failure-only step should be skipped.
3. Compare run ID and attempt, not just the message title. Remove the demo when finished.

- [Message arrived but no phone alert?](https://ntfyx.me/docs/troubleshooting/)

## Keep notification failures separate from build failures

Only the notification step has continue-on-error. A failed build stays failed; a failed sender produces a warning without replacing the original outcome. Keep the build step strict. To also report success, change the notification condition to the expression below; TASK_RESULT then supplies the task status before sending. This covers completed steps, not a guarantee of notification after cancellation, runner loss or a job timeout.

```
if: ${{ !cancelled() }}
```

- [GitHub workflow conditions and continue-on-error](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax)

## Retries reuse the same logical message

The sender freezes the body and derives its request key from repository, run ID, attempt and task. It makes at most three attempts for transient errors, keeps the key unchanged, and honors Retry-After within its wait budget. A long requested wait stops the sender instead of retrying early. Authentication and validation errors stop immediately. Re-running the GitHub job increments the attempt and creates a new report; it is not a retry of an uncertain send. For multiple jobs, give each sender its own stable task suffix. Do not change a body while reusing its key.

> Timeout means unknown delivery. Inspect the original run and phone before resending. Avoid raw logs and tokens in reports; use a short summary and an access-controlled run link. Accepted messages share your daily allowance.

- [HTTPS limits and retries](https://ntfyx.me/docs/http-push/)
- [Daily message allowances](https://ntfyx.me/pricing/)

## Validation scope and the next task

The downloadable example is checked locally for YAML/Python syntax, failure and success branches, JSON construction, stable retry inputs and sender-error handling with simulated HTTP responses. This is not a record of a GitHub-hosted execution or receipt on a physical phone. Complete the steps above in your own repository before relying on it. The next tutorial applies the same HTTPS receiver to n8n errors.

- [n8n workflow error notifications](https://ntfyx.me/docs/n8n-error-notifications/)
- [Other notification examples](https://ntfyx.me/use-cases/)

---

# n8n workflow error notifications on your phone

Source: https://ntfyx.me/docs/n8n-error-notifications/

Updated: 2026-10-29

Import an n8n Error Trigger workflow, send a bounded error report to Ntfyx, and verify a real automatic failure with an authenticated test webhook.

## One handler for workflow failures

This uses n8n’s built-in Error Trigger, Code and HTTP Request nodes; it does not require a dedicated Ntfyx node. The report identifies the workflow, failed node and execution link when available. It deliberately omits the raw error message, stack and input records, which may contain credentials or personal data. n8n remains the place to inspect the full failure.

- [n8n: error workflows](https://docs.n8n.io/flow-logic/error-handling/)

## Start with one working HTTPS notification

As of 2026-10-29, confirmed public releases are iOS 1.8.3 and Android 1.8.2. Update from your store, then use the public Topic or private connection entry on your phone. Android background push requires Google Play services. Open HTTPS Push in Ntfyx, send its hello test and confirm the matching message in your Inbox. Copy the complete private sending URL. These tutorials POST JSON to that fixed URL and need no CLI pairing. First verify your own phone receipt before configuring an automation. If setup is blocked, follow troubleshooting and check the installed version.

> The URL contains a send-only secret. HTTPS content is readable by Ntfyx before encrypted delivery; it is not device-side end-to-end encryption. Public Topics need no sender pairing but allow anyone with the identifier to read and send. Keep private CI or workflow reports off public Topics. These notification examples cannot approve an action or return a verified answer.

- [HTTPS first-message walkthrough](https://ntfyx.me/docs/https-push-walkthrough/)
- [Existing public Topics and mode choice](https://ntfyx.me/docs/public-topics/)
- [Current app availability](https://ntfyx.me/download/)
- [Setup troubleshooting](https://ntfyx.me/docs/troubleshooting/)

## 1. Import and configure the error handler

Download the error-handler JSON and use n8n’s Import from File menu. Open Send to Ntfyx and replace its .invalid placeholder with your complete HTTPS Push URL. Leave the method as POST and the JSON/header expressions unchanged. Save the workflow as Ntfyx error notifications. In each source workflow’s Settings, select it as Error workflow and save. The error handler itself does not need to be published to receive errors.

> The complete sending URL is a secret even though the node’s Authentication field is None. Limit access to this workflow and its execution data. Remove the URL from exported JSON, screenshots and support reports before sharing. The download contains no working key or credential. Use a separate sending URL if multiple n8n instances could reuse the same workflow/execution IDs.

- [Download error-handler workflow JSON](https://ntfyx.me/examples/automation/n8n-error-workflow.json)
- [n8n: importing workflow JSON](https://docs.n8n.io/workflows/export-import/)

## The complete importable handler

The Code node prepares the same body and key from the original error event. HTTP Request sends that prepared input, records the response status, stops on failure and does not follow redirects. Missing stable event IDs stop before sending instead of inventing an ID for an uncertain event.

```
{
  "name": "Ntfyx error notifications",
  "nodes": [
    {
      "parameters": {},
      "id": "010f3ff8-b200-46c3-9bac-a617f43e8c51",
      "name": "Error Trigger",
      "type": "n8n-nodes-base.errorTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "const source = $input.first().json;\nconst execution = source.execution || {};\nconst workflow = source.workflow || {};\nconst triggerError = source.trigger?.error || {};\nconst event = execution.id ? `execution-${execution.id}` : (triggerError.timestamp ? `trigger-${triggerError.timestamp}` : null);\nif (!/^[A-Za-z0-9_-]{1,64}$/.test(String(workflow.id || '')) || !event) throw new Error('No stable source event ID. Inspect and retain the original error before sending.');\nconst name = String(workflow.name || workflow.id).replace(/[\\u0000-\\u001f\\u007f]/g, ' ').trim().slice(0, 80) || String(workflow.id);\nconst lines = [`Workflow: ${name}`, `Event: ${event}`];\nif (execution.lastNodeExecuted) lines.push(`Node: ${String(execution.lastNodeExecuted).slice(0, 120)}`);\nif (execution.retryOf) lines.push(`Retry of execution: ${execution.retryOf}`);\nif (typeof execution.url === 'string' && /^https?:\\/\\//.test(execution.url)) lines.push(execution.url.slice(0, 1000));\nelse lines.push('No execution URL; inspect the workflow in n8n.');\nreturn [{json: {idempotency_key: `n8n-${workflow.id}-${event}`, payload: {title: 'n8n workflow failed', text: lines.join('\\n'), session_id: `ntfyx-n8n-${workflow.id}`.padEnd(22, '_'), session_name: name}}}];"
      },
      "id": "bb55223f-21c0-43d0-a641-2081b4fac836",
      "name": "Prepare bounded report",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        240,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://replace-with-your-private-ntfyx-url.invalid/",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Idempotency-Key",
              "value": "={{ $json.idempotency_key }}"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify($json.payload) }}",
        "options": {
          "redirect": {
            "redirect": {
              "followRedirects": false
            }
          },
          "response": {
            "response": {
              "fullResponse": true,
              "neverError": false,
              "responseFormat": "json"
            }
          },
          "timeout": 15000
        }
      },
      "id": "f6af45c3-e92b-4775-9053-7226964ce3d8",
      "name": "Send to Ntfyx",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        480,
        0
      ],
      "retryOnFail": false,
      "onError": "stopWorkflow",
      "notes": "Replace the URL privately with the complete HTTPS Push URL copied from Ntfyx. The full URL is a send-only secret; scrub it before sharing any workflow export. Automatic retries are disabled: after an uncertain send, retain this node's exact input and Idempotency-Key; inspect Retry-After before retrying."
    }
  ],
  "connections": {
    "Error Trigger": {
      "main": [
        [
          {
            "node": "Prepare bounded report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare bounded report": {
      "main": [
        [
          {
            "node": "Send to Ntfyx",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "tags": []
}

```

- [n8n: HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/)

## 2. Trigger an automatic, harmless failure

Manual Execute Workflow runs do not trigger an error workflow. Import the separate test JSON below. It contains an authenticated POST Webhook connected to Stop And Error. In its Webhook node, create a Header Auth credential with Name X-Ntfyx-Demo-Key and a new private random Value; choose your own path. Select Ntfyx error notifications as this test workflow’s Error workflow. Publish or activate only this test workflow, then copy its Production URL.

```
# Set N8N_TEST_URL and N8N_TEST_KEY privately first.
curl --fail --silent --show-error --request POST "$N8N_TEST_URL" \
  --header "X-Ntfyx-Demo-Key: $N8N_TEST_KEY" \
  --header "Content-Type: application/json" \
  --data '{"tutorial":"ntfyx-error-test"}'
```

> Send once, inspect the executions, then unpublish or deactivate the test. A successful webhook response only confirms the trigger was received; the following Stop And Error node must still fail. A test URL or a manual editor run is not the automatic execution test.

- [Download harmless test workflow JSON](https://ntfyx.me/examples/automation/n8n-error-test.json)
- [n8n: automatic errors and Error Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/)
- [n8n: production and test Webhook URLs](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/)

## 3. Match all three results

Look for a failed source execution, an error-handler execution whose Send to Ntfyx node returns 2xx, and a phone Inbox message titled “n8n workflow failed”. The message should identify the source workflow and Intentional failure node, with the same execution ID and its link. Check phone banners separately. An error in the source trigger may have no saved execution URL; the report says so and uses its trigger timestamp when present.

| Observed state | Next check |
| --- | --- |
| Source failed, handler absent | Confirm automatic execution and the source’s Error workflow setting. |
| HTTP node failed | Check the private URL, Topic state, quota and HTTP error; retain the original input. |
| 2xx, no Inbox message | Check the intended Topic, sync and phone connectivity. |
| Inbox message, no alert | Check notification permission, mute and quiet hours. |

- [Notification troubleshooting](https://ntfyx.me/docs/troubleshooting/)

## Retry the notification without rerunning the business task

Automatic Retry On Fail is off in the template. For 429 or 503, wait for Retry-After; for a timeout, the send outcome is unknown. Inspect the phone and the failed handler, then retry Send to Ntfyx with its saved, unchanged input and Idempotency-Key. Do not rerun the source merely to resend an alert. Fix 401/403 authentication or permission errors before trying again. Keep failures visible in n8n Executions; this handler is not a substitute for monitoring n8n itself.

> Messages from the same workflow share a Session. Replays of the same source execution reuse the key; a newly failed retry has its own execution ID and can produce another alert, with retryOf linking it to the earlier failure. This is grouping and duplicate protection, not automatic incident merging or rate suppression. High-frequency failures still consume message allowance.

- [HTTPS retry contract](https://ntfyx.me/docs/http-push/)
- [Message allowances](https://ntfyx.me/pricing/)

## Validation scope and next steps

Both files are checked locally for JSON structure and node connections. The report code is exercised with saved-execution, retry, trigger-error and missing-ID fixtures, then checked against Ntfyx’s webhook parser. Import into a running n8n instance and physical-phone receipt have not been verified for this template. Follow the automatic test above before using it for real workflows. An HTTPS notification reports an error; use a protected Topic and the agent reply flow if a task must wait for a verified human answer.

- [GitHub Actions notification tutorial](https://ntfyx.me/docs/github-actions-notifications/)
- [Verified phone answers](https://ntfyx.me/docs/phone-approval/)
- [Automation and monitoring cases](https://ntfyx.me/use-cases/)

---

# GitHub Actions 构建失败，如何通知手机

Source: https://ntfyx.me/zh/docs/github-actions-notifications/

Updated: 2026-10-29

复制完整 GitHub Actions YAML：构建失败仍保留失败状态，通过私有 HTTPS 发送运行链接，并在手机核对对应消息。

## 先确定需要什么报告

GitHub Mobile 已提供工作流完成通知、仅失败提醒和运行查看，能满足需求时可直接使用。需要自定义摘要，或把 CI、备份与 n8n 结果归集到同一个手机收件箱时，可以使用 Ntfyx。本例发送简短状态及 GitHub 运行链接；私有日志仍由 GitHub 控制访问，通知不会授予仓库权限。

- [GitHub 官方：Mobile 中的 Actions](https://github.blog/news-insights/product-news/bringing-github-actions-to-github-mobile/)

## 先确认一条 HTTPS 通知能收到

截至 2026-10-29 已确认公开版为 iOS 1.8.3、Android 1.8.2。在商店更新后，按手机上的公开 Topic 或私密连接入口继续；Android 后台推送需要 Google Play 服务。 在 Ntfyx 打开 HTTPS 推送，发送 hello 测试，确认对应消息进入收件箱，再复制完整私有发送 URL。本文向固定 URL POST JSON，不需要 CLI 配对。先确认自己的手机实际收到，再配置自动化。首次设置受阻时，核对安装版本并按排障页继续。

> URL 含仅发送密钥。HTTPS 内容由 Ntfyx 读取后加密投递，不是发送设备端到端加密。公开 Topic 无需发送端配对，但持有标识的人都能读取和发送；私有 CI 或工作流报告不宜放入公开 Topic。这些通知示例不能批准操作，也不会返回验签答案。

- [HTTPS 首条消息教程](https://ntfyx.me/zh/docs/https-push-walkthrough/)
- [已有公开 Topic 与模式选择](https://ntfyx.me/zh/docs/public-topics/)
- [当前 App 可用状态](https://ntfyx.me/zh/download/)
- [设置排障](https://ntfyx.me/zh/docs/troubleshooting/)

## 1. 将发送 URL 存为仓库 Secret

在仓库进入 Settings → Secrets and variables → Actions → New repository secret，名称填写 NTFYX_WEBHOOK_URL，值为手机复制的完整 URL。不要写入 YAML 或任务日志。本例通过环境变量读取密钥，消息字段由 JSON 编码器构造，不把事件文本拼入 Shell 代码。

> 使用可信仓库和执行器。普通 Fork PR 和 Dependabot 运行拿不到此类 Secret。本例使用 workflow_dispatch；不要为了让不可信 PR 代码取得密钥而改用 pull_request_target。

- [GitHub 官方：保存与使用 Secret](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)

## 2. 添加完整工作流

在测试仓库默认分支保存为 .github/workflows/phone-notification.yml，无需安装依赖。在 Actions 中手动运行并勾选 fail_demo：无副作用的演示任务以 1 退出，随后运行仅失败时通知的步骤。首次测试完成后，再将演示步骤换成项目自己的检出、环境准备与构建步骤。

```
name: CI phone notification demo

on:
  workflow_dispatch:
    inputs:
      fail_demo:
        description: Fail the harmless demo task
        type: boolean
        default: true

permissions: {}

jobs:
  task:
    runs-on: ubuntu-latest
    steps:
      - name: Demo task (replace with your build or test steps)
        env:
          FAIL_DEMO: ${{ inputs.fail_demo }}
        shell: bash
        run: |
          if [[ "$FAIL_DEMO" == "true" ]]; then
            echo "Intentional demo failure"
            exit 1
          fi
          echo "Demo succeeded"

      - name: Notify phone on failure
        if: ${{ failure() }}
        continue-on-error: true
        timeout-minutes: 3
        env:
          NTFYX_WEBHOOK_URL: ${{ secrets.NTFYX_WEBHOOK_URL }}
          TASK_RESULT: ${{ job.status }}
        shell: bash
        run: |
          python3 - <<'PY'
          import datetime, email.utils, hashlib, json, os, sys, time
          import urllib.error, urllib.parse, urllib.request

          def stop(message):
              print("::warning::Ntfyx: " + message)
              sys.exit(1)

          url = os.environ.get("NTFYX_WEBHOOK_URL", "")
          parsed = urllib.parse.urlsplit(url)
          if parsed.scheme != "https" or parsed.hostname != "api.ntfyx.me":
              stop("Set NTFYX_WEBHOOK_URL to the complete production HTTPS URL copied from the app.")
          run_id = os.environ["GITHUB_RUN_ID"]
          attempt = os.environ["GITHUB_RUN_ATTEMPT"]
          repository = os.environ["GITHUB_REPOSITORY"]
          run_url = f"{os.environ['GITHUB_SERVER_URL']}/{repository}/actions/runs/{run_id}"
          payload = json.dumps({
              "title": "CI " + os.environ["TASK_RESULT"],
              "text": f"{repository}\nRun {run_id}, attempt {attempt}\n{run_url}",
              "session_id": hashlib.sha256(f"github-{repository}-{run_id}".encode()).hexdigest(),
              "session_name": "GitHub Actions",
          }).encode("utf-8")
          key = hashlib.sha256(f"github-{repository}-{run_id}-{attempt}-task-result".encode()).hexdigest()
          class NoRedirect(urllib.request.HTTPRedirectHandler):
              def redirect_request(self, *args, **kwargs):
                  return None
          opener = urllib.request.build_opener(NoRedirect)
          for index in range(3):
              delay = 5 * (index + 1)
              request = urllib.request.Request(url, data=payload, method="POST", headers={
                  "Content-Type": "application/json", "Idempotency-Key": key,
              })
              try:
                  with opener.open(request, timeout=15) as response:
                      if not 200 <= response.status < 300:
                          stop("Unexpected response; inspect the sender execution.")
                  print("Ntfyx accepted the message; verify receipt separately on your phone.")
                  break
              except urllib.error.HTTPError as error:
                  if error.code not in (408, 429, 500, 502, 503, 504):
                      stop(f"HTTP {error.code}; check configuration before retrying.")
                  retry_after = error.headers.get("Retry-After")
                  if retry_after:
                      try:
                          delay = max(delay, float(retry_after))
                      except ValueError:
                          try:
                              retry_at = email.utils.parsedate_to_datetime(retry_after)
                              delay = max(delay, (retry_at - datetime.datetime.now(datetime.timezone.utc)).total_seconds())
                          except (TypeError, ValueError):
                              stop("Invalid Retry-After; inspect the response before retrying.")
              except (urllib.error.URLError, TimeoutError, OSError):
                  pass  # Outcome unknown: preserve this payload and key.
              if index == 2 or delay > 60:
                  stop("Send unconfirmed. Inspect the phone and sender before a retry; retain the original key and body.")
              time.sleep(delay)
          PY

```

- [下载同一份 YAML](https://ntfyx.me/examples/automation/github-actions.yml)

## 3. 分别核对任务失败、消息收到与系统提醒

手机预期显示标题“CI failure”，正文包含仓库、运行 ID、尝试次数和运行 URL。打开链接，确认对应刚才故意失败的运行。发送成功后，工作流仍应保持失败。发送日志的“accepted”只证明服务受理；必须在收件箱找到匹配消息才算完成接入，再单独检查 App 在后台时是否有横幅或声音。

1. 运行一次 fail_demo=true：预期任务失败，并收到一条匹配的收件箱消息。
2. 再次运行 fail_demo=false：预期任务通过，跳过仅失败时发送的步骤。
3. 对照运行 ID 与尝试次数，不只看标题；完成后移除演示任务。

- [消息到了，但手机没有提醒？](https://ntfyx.me/zh/docs/troubleshooting/)

## 区分通知失败与构建失败

只有通知步骤设置 continue-on-error。构建失败仍是失败；发送失败会留下警告，不覆盖原始结果。构建步骤应保持严格失败。若也要通知成功，将通知步骤条件改为下方表达式，TASK_RESULT 会提供发送前的任务状态。它覆盖已执行步骤，不保证取消、执行器失联或任务超时后一定通知。

```
if: ${{ !cancelled() }}
```

- [GitHub 工作流条件与 continue-on-error](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax)

## 重试继续同一条逻辑消息

发送器固定正文，并按仓库、运行 ID、尝试次数和任务生成请求标识。临时错误最多尝试三次，复用原标识，并在等待预算内遵守 Retry-After；要求等待过久时停止发送，不提前重试。鉴权或输入错误立即停止。重新运行 GitHub 任务会增加尝试次数、生成新报告，不是对未知发送结果的原样重试。多个任务各自发送时，应设置不同且稳定的任务后缀。复用标识时不能修改正文。

> 超时表示投递结果未知。重发前先核对原运行和手机。报告避免原始日志与令牌，使用简短摘要和受访问控制的运行链接。受理消息计入每日总额度。

- [HTTPS 限制与重试](https://ntfyx.me/zh/docs/http-push/)
- [每日消息额度](https://ntfyx.me/pricing/)

## 验证范围与下一步

下载示例在本地检查 YAML/Python 语法、成功与失败分支、JSON 构造、重试输入稳定性，并以模拟 HTTP 响应检查发送失败处理。这不是 GitHub 托管执行或实体手机收件记录；使用前请在自己的仓库完成上述步骤。下一篇将同一个 HTTPS 接收入口用于 n8n 错误。

- [n8n 工作流错误通知](https://ntfyx.me/zh/docs/n8n-error-notifications/)
- [其他通知案例](https://ntfyx.me/zh/use-cases/)

---

# n8n 工作流出错，如何通知手机

Source: https://ntfyx.me/zh/docs/n8n-error-notifications/

Updated: 2026-10-29

导入 n8n Error Trigger 工作流，通过 HTTPS 将错误摘要发到 Ntfyx，并用带鉴权的测试 Webhook 核对自动触发失败。

## 用一个处理器接收工作流失败

本例使用 n8n 自带的 Error Trigger、Code 与 HTTP Request 节点，无需专用 Ntfyx 节点。报告包含工作流、失败节点及可用的执行链接。默认不发送原始错误消息、堆栈或输入记录，避免其中的凭据和个人数据进入通知；完整故障仍在 n8n 查看。

- [n8n 官方：错误工作流](https://docs.n8n.io/flow-logic/error-handling/)

## 先确认一条 HTTPS 通知能收到

截至 2026-10-29 已确认公开版为 iOS 1.8.3、Android 1.8.2。在商店更新后，按手机上的公开 Topic 或私密连接入口继续；Android 后台推送需要 Google Play 服务。 在 Ntfyx 打开 HTTPS 推送，发送 hello 测试，确认对应消息进入收件箱，再复制完整私有发送 URL。本文向固定 URL POST JSON，不需要 CLI 配对。先确认自己的手机实际收到，再配置自动化。首次设置受阻时，核对安装版本并按排障页继续。

> URL 含仅发送密钥。HTTPS 内容由 Ntfyx 读取后加密投递，不是发送设备端到端加密。公开 Topic 无需发送端配对，但持有标识的人都能读取和发送；私有 CI 或工作流报告不宜放入公开 Topic。这些通知示例不能批准操作，也不会返回验签答案。

- [HTTPS 首条消息教程](https://ntfyx.me/zh/docs/https-push-walkthrough/)
- [已有公开 Topic 与模式选择](https://ntfyx.me/zh/docs/public-topics/)
- [当前 App 可用状态](https://ntfyx.me/zh/download/)
- [设置排障](https://ntfyx.me/zh/docs/troubleshooting/)

## 1. 导入并设置错误处理器

下载错误处理器 JSON，在 n8n 使用 Import from File 导入。打开 Send to Ntfyx，将 .invalid 占位地址替换为完整 HTTPS 推送 URL；保持 POST 方法、JSON 与请求头表达式不变。保存为 Ntfyx error notifications，再到每个来源工作流的 Settings 选择它作为 Error workflow 并保存。错误处理器本身无需发布即可接收错误。

> 即使节点 Authentication 为 None，完整发送 URL 仍是密钥。限制工作流及其执行数据的访问权限；分享导出 JSON、截图或支持报告前移除真实 URL。下载文件没有可用密钥或凭据。多个 n8n 实例可能复用相同工作流和执行 ID 时，应分别使用发送 URL。

- [下载错误处理器工作流 JSON](https://ntfyx.me/examples/automation/n8n-error-workflow.json)
- [n8n 官方：导入工作流 JSON](https://docs.n8n.io/workflows/export-import/)

## 完整可导入处理器

Code 节点根据原始错误事件准备固定正文和标识，HTTP Request 发送该输入并记录响应状态，失败时停止且不跟随重定向。缺少稳定事件 ID 时先停止，不为不确定事件临时生成新 ID。

```
{
  "name": "Ntfyx error notifications",
  "nodes": [
    {
      "parameters": {},
      "id": "010f3ff8-b200-46c3-9bac-a617f43e8c51",
      "name": "Error Trigger",
      "type": "n8n-nodes-base.errorTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "const source = $input.first().json;\nconst execution = source.execution || {};\nconst workflow = source.workflow || {};\nconst triggerError = source.trigger?.error || {};\nconst event = execution.id ? `execution-${execution.id}` : (triggerError.timestamp ? `trigger-${triggerError.timestamp}` : null);\nif (!/^[A-Za-z0-9_-]{1,64}$/.test(String(workflow.id || '')) || !event) throw new Error('No stable source event ID. Inspect and retain the original error before sending.');\nconst name = String(workflow.name || workflow.id).replace(/[\\u0000-\\u001f\\u007f]/g, ' ').trim().slice(0, 80) || String(workflow.id);\nconst lines = [`Workflow: ${name}`, `Event: ${event}`];\nif (execution.lastNodeExecuted) lines.push(`Node: ${String(execution.lastNodeExecuted).slice(0, 120)}`);\nif (execution.retryOf) lines.push(`Retry of execution: ${execution.retryOf}`);\nif (typeof execution.url === 'string' && /^https?:\\/\\//.test(execution.url)) lines.push(execution.url.slice(0, 1000));\nelse lines.push('No execution URL; inspect the workflow in n8n.');\nreturn [{json: {idempotency_key: `n8n-${workflow.id}-${event}`, payload: {title: 'n8n workflow failed', text: lines.join('\\n'), session_id: `ntfyx-n8n-${workflow.id}`.padEnd(22, '_'), session_name: name}}}];"
      },
      "id": "bb55223f-21c0-43d0-a641-2081b4fac836",
      "name": "Prepare bounded report",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        240,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://replace-with-your-private-ntfyx-url.invalid/",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Idempotency-Key",
              "value": "={{ $json.idempotency_key }}"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify($json.payload) }}",
        "options": {
          "redirect": {
            "redirect": {
              "followRedirects": false
            }
          },
          "response": {
            "response": {
              "fullResponse": true,
              "neverError": false,
              "responseFormat": "json"
            }
          },
          "timeout": 15000
        }
      },
      "id": "f6af45c3-e92b-4775-9053-7226964ce3d8",
      "name": "Send to Ntfyx",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        480,
        0
      ],
      "retryOnFail": false,
      "onError": "stopWorkflow",
      "notes": "Replace the URL privately with the complete HTTPS Push URL copied from Ntfyx. The full URL is a send-only secret; scrub it before sharing any workflow export. Automatic retries are disabled: after an uncertain send, retain this node's exact input and Idempotency-Key; inspect Retry-After before retrying."
    }
  ],
  "connections": {
    "Error Trigger": {
      "main": [
        [
          {
            "node": "Prepare bounded report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare bounded report": {
      "main": [
        [
          {
            "node": "Send to Ntfyx",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "tags": []
}

```

- [n8n 官方：HTTP Request 节点](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/)

## 2. 触发一次自动执行的无副作用失败

手动点击 Execute Workflow 不会触发错误工作流。导入下方独立测试 JSON：带鉴权的 POST Webhook 连接 Stop And Error。为 Webhook 创建 Header Auth 凭据，Name 为 X-Ntfyx-Demo-Key，Value 使用新生成的私有随机值，并设置自己的路径。将测试工作流的 Error workflow 指向 Ntfyx error notifications。仅发布或启用此测试工作流，再复制其 Production URL。

```
# Set N8N_TEST_URL and N8N_TEST_KEY privately first.
curl --fail --silent --show-error --request POST "$N8N_TEST_URL" \
  --header "X-Ntfyx-Demo-Key: $N8N_TEST_KEY" \
  --header "Content-Type: application/json" \
  --data '{"tutorial":"ntfyx-error-test"}'
```

> 只发送一次，查看执行记录，然后取消发布或停用测试。Webhook 成功响应只表示触发器收到请求，后续 Stop And Error 仍须失败。Test URL 或编辑器手动运行不能代替自动执行测试。

- [下载无副作用测试工作流 JSON](https://ntfyx.me/examples/automation/n8n-error-test.json)
- [n8n 官方：自动错误与 Error Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/)
- [n8n 官方：生产与测试 Webhook URL](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/)

## 3. 对照三个结果

先找到失败的来源执行，再找到 Send to Ntfyx 返回 2xx 的错误处理执行，最后在手机收件箱找到“n8n workflow failed”。消息应指向测试工作流和 Intentional failure 节点，执行 ID 与链接一致。手机横幅另外检查。来源触发器本身出错时可能没有保存的执行 URL；报告会说明，并在可用时使用触发错误的时间戳标识。

| 观察到的状态 | 下一步检查 |
| --- | --- |
| 来源失败，但没有处理器执行 | 确认是自动执行，并核对来源的 Error workflow 设置。 |
| HTTP 节点失败 | 检查私有 URL、Topic 状态、额度与 HTTP 错误；保留原始输入。 |
| 2xx，但收件箱没有消息 | 检查目标 Topic、同步与手机网络。 |
| 收件箱有消息，但没有提醒 | 检查通知权限、静音与免打扰时段。 |

- [通知排障](https://ntfyx.me/zh/docs/troubleshooting/)

## 重试通知，不重新执行业务任务

模板关闭自动 Retry On Fail。429 或 503 按 Retry-After 等待；超时表示发送结果未知。先核对手机和失败的处理器，再用保存的原样输入与 Idempotency-Key 重试 Send to Ntfyx。不要为了补发提醒而重新运行来源业务。401/403 鉴权或权限错误需先修正。保留 n8n Executions 中的失败记录；此处理器不能代替对 n8n 自身的监控。

> 同一工作流消息进入同一个 Session。重复处理同一来源执行复用标识；重新执行后再次失败，会有新的执行 ID，可能再发一条，并通过 retryOf 关联前次失败。这是分组和防重复，不是自动合并事故或抑制频率；高频失败仍会消耗消息额度。

- [HTTPS 重试规则](https://ntfyx.me/zh/docs/http-push/)
- [消息额度](https://ntfyx.me/pricing/)

## 验证范围与下一步

两个文件已在本地检查 JSON 结构和节点连接；报告代码覆盖已保存执行、重试、触发器错误及缺失 ID 夹具，并用 Ntfyx Webhook 解析器核对。此模板尚未在运行中的 n8n 实例完成导入和实体手机收件验收；用于真实工作流前请完成上述自动测试。HTTPS 通知只报告错误；任务必须等待验签的人类回答时，使用受保护 Topic 的 Agent 应答流程。

- [GitHub Actions 通知教程](https://ntfyx.me/zh/docs/github-actions-notifications/)
- [手机验签回答](https://ntfyx.me/zh/docs/phone-approval/)
- [自动化与监控案例](https://ntfyx.me/zh/use-cases/)
