前言¶
DSH(DeepSeek Harness)里的智能体完成长时间任务后,结果往往还留在会话或日志里;若你不在终端前,告警、报告和作业结论很难及时落到手机或桌面通知。常见做法是另写脚本调 Webhook、邮件或第三方推送 API,再在工具链里单独挂一层。下面介绍的 dsh-ntfy 把这条路径收成一次工具调用:向 ntfy 主题(topic)发消息,订阅该主题的客户端或应用即可收到推送。插件无状态、不落地文件、无额外运行时依赖,适合在已有 DSH profile 上按需挂载。
这是什么¶
dsh-ntfy 是 DSH 的 out-of-tree 插件,维护者为 xuan25,在 SkillHub 插件目录 中归类为「联网工具」。它向智能体暴露 ntfy 工具:一次调用把标题、正文等发布到配置好的 ntfy 频道(channel),对应 ntfy 服务器上的 topic;作业结果、告警和报告可到达用户设备,或任何订阅该 topic 的应用与 feed。可与 ntfy.sh 或自建 ntfy 服务配合使用。
核心功能¶
根据仓库 README,当前版本(package.json 为 0.1.0)能力如下:
- 单工具推送:插件注册
ntfy工具,动词包括send与channels;另提供dsh-ntfyskill,说明完整参数、限制与排错。 - 多频道、单次单目标:通过环境变量或 cordis 配置声明多个 channel;每次
send只指向一个 channel。 - 服务器灵活:默认使用
https://ntfy.sh,也可为每个 channel 指定自建 ntfy 的 base URL。 - 认证可选:支持 Basic(USER + PASS 成对)或 Bearer TOKEN,二者不可与 USER/PASS 混用。
- 长正文分片:正文超过 4096 UTF-8 字节时按序分块发送;某块失败则中止后续块,并在结果中说明已送达块数,剩余需显式重发。
- 零本地状态:不创建文件,配置来自进程环境变量与可选 cordis patch 层。
安装与启用¶
在目标 dsh profile 下用官方命令安装(勿用未在文档出现的 github:owner/repo 形式):
dsh plugin --profile <name> add dsh-ntfy
配置分三层叠加:内置默认值、NTFY_* 环境变量、以及可选的 cordis config patch。环境变量在进程启动时生效;修改 env 后需重启 host 才会生效。插件本身不写配置文件。
环境变量¶
每个 channel 由 NTFY_<NAME>_TOPIC 声明(必填);<NAME> 仅含大写字母与数字,channel 名为其小写形式,须匹配 ^[a-z][a-z0-9-]{0,31}$(无下划线、不能以数字开头)。topic 字符串为寻址凭证,字符集 [-_A-Za-z0-9]{1,64}。
| 变量 | 必填 | 含义 |
|---|---|---|
NTFY_<NAME>_TOPIC |
是 | 声明 channel <name> |
NTFY_<NAME>_SERVER |
否 | 服务 base URL,默认 https://ntfy.sh |
NTFY_<NAME>_USER + NTFY_<NAME>_PASS |
否(成对) | Basic 认证 |
NTFY_<NAME>_TOKEN |
否 | Bearer token,不可与 USER/PASS 同用 |
NTFY_DEFAULT_CHANNEL |
否 | send 未指定 channel 时使用的频道名(大小写不敏感) |
示例:
NTFY_DEFAULT_CHANNEL=dash
NTFY_DASH_TOPIC=dsh-alerts-Kx7pQm
命名不规范的 channel 会在启动时被丢弃并告警,不影响整体启动。无效 topic、半套 Basic 认证、或 token 与 Basic 并存等情况同样只告警。
cordis patch(可选)¶
可在 profile 的 cordis.patch.yml、用户全局 ~/.dsh/cordis.patch.yml 或 --patch 覆盖层中,以插件 id dsh-ntfy 写入 camelCase 的 config(如 defaultChannel、channels 映射)。优先级为:patch 交付值 > 环境变量 > 内置默认;patch 按 id 整段替换 config,不做深合并,覆盖某一字段时需写全要保留的字段。若环境支持 live patch reload,改 patch 可触插件重载;否则下次重启生效。
- id: dsh-ntfy
config:
defaultChannel: dash
channels:
dash:
server: https://ntfy.example.com
典型用法¶
智能体或你在 harness 中的典型调用如下(参数以 skill 文档为准):
ntfy { verb: "send", body: "deploy finished", title: "CI", priority: "high" }
ntfy { verb: "send", body: "nightly backup done", channel: "backups" }
ntfy { verb: "channels" }
先用 channels 查看当前可用频道,再在 send 里指定 body、可选 title、priority、channel 等字段。
适用场景与注意¶
适合谁:需要在 DSH 任务结束或异常时,把短消息推到手机 ntfy 客户端、自建监控或任何订阅 topic 的消费者的开发者;多 channel 可区分 CI、备份、告警等业务线。
限制(来自 README):
- ntfy.sh 对访客约 250 条/天;自建服务器限额自定;插件不做客户端限速。
- 单条 body 上限 4096 字节(分块大小)、title 1 KB、tags 512 字节。
- 消息发出后无法撤回(无 update/clear/delete 接口)。
安全与权限:插件在 当前 dsh 进程权限 下运行,会向配置的 ntfy 服务器发起 HTTP 请求;topic 相当于凭证,应使用足够随机、不易猜测的 topic 名,并妥善保管 TOKEN 或密码。安装前请自行查阅 GitHub 源码 与 MIT 许可证,确认符合你的合规要求。
DSH 生态强调「一切皆插件」;SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-ntfy 把 ntfy 推送收成 DSH 内的一次 ntfy 工具调用,配置靠 NTFY_* 与可选 cordis patch,无本地状态文件。若你的智能体需要「任务完成即触达设备」,可按 profile 安装并配好 topic 后,在流程里直接 send。