前言¶
用 DeepSeek Harness(DSH)跑智能体时,一轮对话可能跑几分钟,也可能在工具审批处停住等你点同意。人不在电脑前时,很难知道任务是已经跑完、报错退出,还是卡在审批上。自己写脚本轮询日志成本高,也不如「事件到了就推一条」来得直接。
下面介绍社区插件 dsh-gateway-notify(维护者 YanYunCY,分类:联网工具)。它在 DSH 上报的会话事件上监听,在合适时机向 ntfy、Bark、Gotify、Server酱、飞书、钉钉、企业微信、Telegram 或自定义 webhook 发一条通知。默认不把提示词和回复正文发出去,只带项目目录名、耗时、模型等摘要信息。
该插件由 @magpie-community/gateway-notify(MIT)移植而来,通道实现基本沿用原项目;与 magpie 网关版相比,它直接订阅 DSH 的 session/event 流,并增加了审批等待推送与 env:NAME 引用密钥的方式。
这是什么¶
dsh-gateway-notify 是 DeepSeek Harness 的 Cordis 插件(npm 包名 dsh-gateway-notify,当前资料中版本为 0.1.0)。源码与说明见 GitHub,社区目录页:SkillHub 插件页。
它解决的是:在 agent 一轮 turn 跑够久后正常结束、任意时长内失败、或审批超时未处理时,主动推送到你配置的通道,便于离开键盘后仍能跟进任务状态。
什么时候会推送¶
插件按 DSH 事件决定是否发送;同一 session 在 cooldownSeconds 窗口内最多推一次。子 agent 会话(有 parentSession)默认静默,除非打开 subagents: true。
| dsh 事件 | 是否推送 |
|---|---|
turn/end,原因 completed 或 max-tokens,且本轮运行时间 ≥ minMinutes |
推送完成(含耗时与模型) |
turn/end,原因 error |
推送失败(含错误信息;任意时长,需 errors 为 true) |
approval/asked 在 approvalDelaySeconds 内未决定 |
推送待审批(含工具名) |
turn/end,原因 aborted |
不推送(用户主动停止) |
blocked、interrupted、forked |
不推送 |
安装与依赖¶
安装前需满足 Node ≥ 24.9(与 dsh 要求一致)。资料中在 dsh 0.2.1-rc.5 下测试过。
在 web profile 下添加插件:
dsh plugin --profile web add dsh-gateway-notify
插件以当前 dsh 进程权限运行;安装前建议自行查看仓库源码与 MIT 许可证(README 中注明含 magpie 与原作者版权行)。
配置¶
在 $DSH_HOME/profiles/web/cordis.patch.yml 中为 gateway-notify 写入 config。密钥、webhook 等应放在环境变量里,字段写成 env:变量名,避免明文进 profile。
示例(节选多种通道):
# $DSH_HOME/profiles/web/cordis.patch.yml
- id: gateway-notify
config:
minMinutes: 3
channels:
- type: ntfy
topic: env:NTFY_TOPIC # 任意字符串字段都可用 env:NAME
token: env:NTFY_TOKEN # 可选,受保护 topic 时使用
- type: bark
key: env:BARK_KEY
- type: feishu
webhook: env:FEISHU_WEBHOOK
secret: env:FEISHU_SECRET
常用选项(默认值以 README 为准):
| 选项 | 默认 | 含义 |
|---|---|---|
channels |
[] |
推送目标列表 |
minMinutes |
3 |
仅当 turn 至少运行这么久才推送「正常结束」 |
cooldownSeconds |
30 |
同一 session 在此秒数内最多一条 |
errors |
true |
失败 turn 是否推送(可很短) |
approvals |
true |
是否推送长时间未处理的审批 |
approvalDelaySeconds |
60 |
审批等待多久后推送 |
subagents |
false |
是否为子 agent 会话推送 |
includeText |
false |
是否在通知中带最终回复开头 |
maxTextLength |
200 |
includeText 时截取长度 |
lang |
en |
通知文案语言:en 或 zh |
某条通道暂时不用时,可在该 channel 上设 off: true,保留配置但不发送。
支持的通道¶
type |
必填 | 可选 |
|---|---|---|
ntfy |
topic |
server(默认 ntfy.sh)、token、priority、tags |
bark |
key |
server(默认 api.day.app)、group、sound |
gotify |
server、token |
priority |
serverchan |
key(SCT… 或 sctp…) |
|
feishu |
webhook |
secret |
dingtalk |
webhook |
secret |
wecom |
webhook |
|
telegram |
token、chatId |
server |
webhook |
url |
headers;请求体为 { title, body, event } |
每条通道对应一次到你配置的 HTTPS 服务的 POST;README 说明默认不会把数据发到其它地方。
隐私与适用注意¶
默认推送内容仅包含项目文件夹名、耗时、模型,失败时加上错误信息;除非开启 includeText,否则不包含提示词与完整回复。
适合:本地或远程长时间跑 DSH agent、需要手机或 IM 提醒完成/失败/待审批的开发者。不适合指望「所有 session 变化都通知」的场景——主动停止、blocked 等事件 deliberately 不推。
DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。本文事实均来自上述仓库 README 与 package 信息;使用前请以仓库最新文档为准。