前言¶
用 DeepSeek Harness(DSH)跑长任务时,人往往离开屏幕等 agent 跑完。若只在终端里看输出,很难区分「还在跑」「在等审批」和「已经停下来了」。邮件或第三方 IM 也能提醒,但需要额外集成,且容易在短回合、子会话里刷屏。dsh-ntfy 把通知接到自托管 ntfy 上:在回合实际结束时推一条纯文本摘要,并在需要审批或提问时单独提高优先级推送。
这是什么¶
dsh-ntfy 是社区维护的 DSH Host-only bundle(维护者 Sillykjs,许可证 MIT,当前 package 版本 0.1.0)。它在 DSH 侧监听回合生命周期,向你可控的 ntfy 服务器发 HTTP 推送,不依赖 ntfy 官方 SaaS;开启鉴权时通过本地 0600 权限文件保存 token,配置界面只保留文件路径。
生态上 DSH 采用「一切皆插件」;SkillHub 目录页 是社区站点,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
下面能力均来自插件 README,可按需对照 Settings → ntfy Notify 中的选项(共 22 项,支持 live 应用与测试推送)。
只在真实停顿时推送。 收到 turn/end 后会等待 settleMs(默认 2 秒);若期间有新回合(目标续跑、排队消息、steering 等),则取消待发通知,避免「还没停就响铃」。
默认偏安静。 仅根会话、结束原因白名单、最小时长、10 分钟去重、有界队列;过短的回合不会推送。
卡住时立刻说。 审批请求与 agent 提问会立即推送,并使用独立优先级。
图形化配置。 Web 设置页覆盖全部选项;密钥写入文件后会在日志侧做脱敏,正文为纯文本、无 emoji。
推送正文示例形态如下(字段随会话变化):
【dsh】完成 · 帮我把构建修好
用时 2分05秒 · 12 步 · 4 次工具
目录:~/projects/demo
会话:9f2c1a4e
────────
计划已写入 PLAN.md,下一步……
环境与依赖¶
- DSH ≥ 0.2.1-rc.2,且使用
webprofile(设置页依赖 client 注入)。 - Node.js ≥ 20。
- 网络可达的 ntfy 服务;若服务端启用鉴权(例如
auth-default-access: deny-all),需要 access token。
安装与启用¶
方式一:DSH GUI
进入 Settings → Plugins → add a third-party plugin,安装 spec 为:
github:Sillykjs/dsh-ntfy
也可让 agent 调用 plugin_manager 的 install_bundle,使用相同 spec;管理器会安装包并启用 bundle。
方式二:命令行(web profile)
dsh plugin --profile web add github:Sillykjs/dsh-ntfy
# 然后将 "dsh-ntfy" 加入 $DSH_HOME/profiles/web/package.json 中的 dsh.profile.bundles
安装后重启一次 dsh web,以便加载 host 模块;之后的配置变更可 live 生效。
若 ntfy 需要鉴权:打开 Settings → ntfy Notify 粘贴 token,会写入 0600 文件,profile 中仅保留路径。
卸载: 在插件管理器中移除 bundle,或在 profile patch 中禁用 ntfy 行。token 文件会故意保留,不用时请自行删除。
典型用法¶
- 在本机或内网部署 ntfy(或使用已有实例),确认 DSH 所在环境能访问该 URL。
- 按上一节安装并重启
dsh web。 - 在 Settings → ntfy Notify 填写服务器地址、主题(topic)等项;需要鉴权时配置 token,并用页面上的测试推送验证。
- 正常发起 DSH 任务;回合真正结束且未被新回合打断时,手机或桌面 ntfy 客户端会收到摘要。出现审批或提问时,应收到即时通知。
适用场景与注意¶
适合: 自托管 ntfy、希望离开工位仍能感知 DSH 停下来的开发者;不想为每次短回合收推送、又希望在「等审批 / 被提问」时立刻知道的场景。
注意:
- 插件以当前 dsh 进程权限运行,安装前请阅读 GitHub 源码 与 MIT 许可证,确认推送内容与 token 存储方式可接受。
- 必须使用 web profile;纯 CLI profile 无图形设置页,与 README 要求不一致。
- 分类上属于联网工具:会向你的 ntfy 端点发起出站 HTTP,请在内网策略与防火墙中放行。
结尾¶
dsh-ntfy 把「回合真正结束」和「需要你介入」两类事件,收敛到一条可控的自托管 ntfy 通道里,并用过 settle、去重与会话过滤减少误报。目录与说明见 SkillHub:Sillykjs/dsh-ntfy,源码与 issue 见 GitHub:Sillykjs/dsh-ntfy。