monitor-inbox 是一个用于在 Claude Code 会话中监控 Pushover 账户「收到」的通知的技能,即到达账户的消息,例如 noip-ddns 自愈告警。pushover-commander 的其余部分只负责发送,其审计日志 po-audit.jsonl 永远无法显示收到了什么;本技能封装 Pushover Open Client API(桌面/移动应用用于接收消息的 REST 接口),使会话能够读取传入通知。核心实现为 _lib/pushover_inbox.ts。
工作模式为按需拉取:被要求时运行 pull,没有后台守护进程。
命令
CORE="$(cc-plugin-root pushover-commander)/skills/_lib/pushover_inbox.ts"
一次性、交互式——铸造一个接收设备。提示输入 Pushover 账户邮箱与密码(密码掩码,仅在内存中使用一次,绝不存储)。仅将派生的 client secret 与 device_id 持久化到 SCS vault 的 pushover 作用域。
env -u HTTPS_PROXY -u HTTP_PROXY bun "$CORE" register [--name claude-mac] [--force]
按需——获取新消息 → 追加到 po-inbox.jsonl → ack(update_highest)。
env -u HTTPS_PROXY -u HTTP_PROXY bun "$CORE" pull [--json] [--limit N]
读回本地收件箱(无网络)。
bun "$CORE" list [--limit N] [--json]
健康检查:凭据是否存在?设备是否已注册?API 是否可达/有多少条等待?
env -u HTTPS_PROXY -u HTTP_PROXY bun "$CORE" doctor
一次性设置(操作者必须自行运行 register)
只有操作者本人能输入账户密码,因此应引导他们自行运行 register(或运行它并让他们在掩码提示中输入)。此后,pull/list/doctor 均可无头运行——无需密码、无需 Touch ID——因为 client secret 与 device_id 存放在 vault 的自动化层级(智能体可读)。
密钥处理(SCS 准则——cc-skills/docs/self-custody-secrets.md)
| 密钥 | 类别 | 存放位置 |
|---|---|---|
| 账户邮箱 + 密码 | 皇冠明珠 | 掩码提示,仅内存——绝不存储/绝不发送/绝不出现在 argv 或记录中 |
| client secret + device_id | 自动化令牌 | SCS vault 作用域 pushover(智能体可读,因此无头 pull 无需提示) |
绝不将上述任何内容推送到 Pushover、邮件、提交或传输到本机之外。
注意事项(2026-07-05 验证)
- 无历史回填。新注册的 Open-Client 设备只能接收注册之后发送的消息,不会拉取已存在于原生 Pushover.app 中的告警。先注册,之后的告警才会到达。
- IMAP 式队列。messages.json 返回待处理队列;pull 调用 update_highest 进行 ack,否则同样的消息每次都会重新下载。
- 桌面/Open-Client 许可证。注册接收设备可能需要账户拥有 Pushover Desktop 许可证。若如此,/1/devices.json 会报错——register 会原样呈现该消息。
- 2FA。若账户启用了双因素认证,register 会重新提示输入验证码并重试登录。
- 代理。网络命令始终使用 env -u HTTPS_PROXY -u HTTP_PROXY,使 Pushover HTTPS 绕过沙箱 MITM 代理(否则出现 502)。
文件
- 核心:_lib/pushover_inbox.ts
- 收件箱日志:~/.local/state/pushover/po-inbox.jsonl(以 UUID 为键,与发送侧的 po-audit.jsonl 并列);可用 PUSHOVER_INBOX_PATH 覆盖。
- 凭据:SCS vault 作用域 pushover → client.secret、client.device_id、client.device_name。
执行后反思
本技能完成后,关闭前检查:
- pull 是否真正 ack 了?若同样的消息在下次 pull 时再次出现,说明 update_highest 未生效——修复 ack 路径,而非读取器。
- 操作者是否预期某条告警但未到达?在假定为 bug 之前,先确认它是在 register 之后发送的(无回填)。
- 是否存在凭据泄露面?账户密码绝不能出现在日志、argv、收件箱 JSONL 或记录中。若出现,即为真实缺陷——立即修复。
仅当问题真实且可复现时才更新——不要基于猜测。