dsh-ping-me:通过 ntfy 把 DSH 结果推到手机(仅推送)

前言

在 DeepSeek Harness(dsh)里跑长对话或定时任务时,人往往不能一直盯着浏览器:回合结束、需要点批准、模型抛错,或者自动化脚本发现异常,这些时刻才需要回到 dsh。常见做法是反复刷新页面或另开监控,既打断手头事,也容易漏掉「等你输入」的窗口。下面介绍社区插件 dsh-ping-me(维护者 JoblessJoe):用 ntfy 把通知推到手机,且设计为 只发不收,外部无法通过通知通道向智能体回写指令。

这是什么

dsh-ping-me 是 dsh 的联网类插件(npm 包名 dsh-ping-me,当前资料中版本 0.1.3,MIT 许可证)。它在 dsh 侧监听回合与自动化相关事件,经 ntfy 向已订阅 topic 的设备推送标题、摘要和「Open dsh」入口;审批与提问仍在 dsh Web 里完成,手机只负责提醒。

与可双向注入会话的 ntfy 类方案(README 中对比的 dsh-ntfy-remote)不同,本插件 只发布、不订阅,topic 上收到的内容不会进入 agent。

核心功能

资料中列出的通知类型如下。

类型 触发时机 声音
回合完成(含回复摘要) 你发起的回合结束 普通
需要批准 / 有问题 等待 approval 或 ask_user_question;问题与选项会出现在通知里 响亮
失败 错误、输出上限、策略拦截;用户主动 Stop 不推送 高
自动化告警 自动化任务调用 ping_me 报告问题 高
可选:进行中状态 回合运行中就地更新(如 thinking、running bash),结束后变为完成通知 静默

其他行为(README 原文):

  • 每条通知带 Open dsh,在浏览器打开 dsh(仍需你的 dsh 登录);地址从使用 dsh 的浏览器检测。
  • 通知带 会话标题,便于区分多个 agent;子 agent 不单独推送,由父会话汇总。
  • 过长回复会截断以适配 ntfy 约 4 KB 限制,末尾注明完整内容在 dsh 中查看。

自动化专用工具 ping_me:

  • 签名:ping_me({ title, message, urgent? }),message 可为 markdown,urgent 设为最高优先级。
  • 仅在 自动化任务发起的回合 中可用;普通聊天里调用会被拒绝并记入日志,避免滥用。
  • 默认 每小时最多 10 次 ping;自动化回合的「一切正常」回复默认不推送,失败与提问仍会通知。可在设置中开启「Automation runs finished」以推送每次自动化结束。
  • 每次 ping_me(含拒绝)写入 ~/.dsh/ping-me/log.jsonl。

安装与启用

插件面向 dsh 的 web profile(下面示例 profile 名为 web,请换成你实际承载 Web GUI 的 profile 名)。官方安装命令为:

npx @deepseek-ai/dsh plugin --profile web add dsh-ping-me

若从源码开发环境调用 dsh,README 说明可将 npx @deepseek-ai/dsh 换成 pnpm dsh。

安装后 重启 dsh 一次,在界面打开 Plugins → dsh-ping-me。要求 dsh 0.2.0 及以上(package.json 兼容声明为 >=0.2.0-rc.2)和 Node 20+;无额外构建步骤,运行时依赖含 qrcode(用于设置页二维码)。

也可在任意 dsh 会话里让 agent「help me set up dsh-ping-me」;插件内的 ping_me 工具会指向随包提供的 SETUP-GUIDE.md 做逐步检查。

连接手机

无需 ntfy 账号:插件生成随机 topic(96 位随机,视为密钥,勿分享;设置页 New topic 可轮换)。

  1. 安装 ntfy 客户端(Android、iPhone、F-Droid)。
  2. 订阅 topic:Android 在插件卡片选 Android 并用相机扫二维码后在 ntfy 中 Subscribe;iPhone 无法在 QR 中直接打开 app,需在 app 内点 + 手动输入卡片上的 topic 名,Use another server 保持关闭后 Subscribe。
  3. 在插件卡片点 Send test notification 验证。

Android 若收不到通知:允许 ntfy 通知权限,并将电池策略设为 Unrestricted。

高级: 可填自托管 ntfy 服务器或 ntfy.sh 保留 topic;访问 token 存入 dsh 凭证库且不再显示。

典型用法:Schedule + ping_me

dsh 的 Schedule 在指定时间向会话投递 prompt。README 示例意图如下:每天固定时间检查日志,仅在有备份失败时调用 ping_me 并附上证据,一切正常则不 ping。

Every day at 8:00 Europe/Berlin: check ~/app/logs/backup.log for the last 24 h. If a backup failed, call ping_me with the evidence. If everything is fine, don't ping.

这样「每日巡检正常」保持安静,只有异常才响铃。

安全、限制与适用注意

安全(README 摘要):

  • Push only:无订阅、无回帖按钮向 agent 写回。
  • topic 泄露则他人可读你的通知(可能含 agent 回复);设置 API 经 dsh 登录态的 /api 层,仅已登录浏览器可改配置。

限制:

  • ntfy.sh 免费档约 250 条/天;开启「进行中状态」每条更新计一条,在 ntfy.sh 上建议关闭或改用自建服务器。
  • 无「dsh 进程死亡」专用告警(ntfy.sh 无法可靠取消延迟消息);进行中状态上的「Updated HH:MM」若不再变化,可人工判断 dsh 是否已停。
  • 无法区分「模型长时间思考」与「挂死」(流式输出不在插件可见事件内)。
  • 批准与问答必须在 dsh 回答,不能从手机回复——这是 push-only 的取舍。

使用前请知悉: 插件以当前 dsh 进程权限运行,会向配置的 ntfy 服务器发网请求;安装前建议查看 GitHub 源码 与 MIT 许可证,确认 topic 与通知内容是否符合你的隐私要求。

维护者在 README「Tested」一节记录:在 Linux、dsh 0.2.1、本地 27B 模型与 ntfy.sh 上逐项验证过聊天完成、提问、批准、Schedule + ping_me、普通聊天拒绝 ping_me、进行中状态与用户 Stop 等行为;npm test 覆盖通知规则、ping_me 拒绝与上限、push-only 保证等。

结尾

dsh-ping-me 把 dsh 里「该你回来」的时刻推到手机,自动化里用 ping_me 做「有问题才响」,并坚持单向推送,降低 topic 被滥写回 agent 的风险。社区目录页:skillhub.cn/plugins/JoblessJoe/dsh-ping-me;源码与完整说明:github.com/JoblessJoe/dsh-ping-me。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜