前言¶
在 DeepSeek Harness(DSH)里跑长任务或 goal 多轮续跑时,人往往不在窗口前。任务何时结束、在哪个目录、助手最后说了什么,只能事后打开客户端翻日志。常见做法是定时切回 DSH 看状态,或把关键步骤写进脚本自己打点——前者费注意力,后者和 DSH 会话模型脱节。
下面介绍社区插件 dsh-mobile-notify(维护者 zjhaaa042-cloud):在智能体彻底停下来时,通过 HTTPS 把一条结构化通知推到手机,支持 ntfy、Bark、钉钉、企业微信、飞书、Server酱、PushPlus、Telegram、Qmsg酱和通用 webhook,无需自建推送服务器。插件归类为 DSH 生态目录中的「联网工具」;仓库在 GitHub 上星标为 0,版本 1.0.0,许可证 MIT。
这是什么¶
dsh-mobile-notify 是纯 Host 侧 DSH 插件:订阅宿主持久事件(turn/end 或 agent/status 变为 idle),过滤后渲染文案,再向所选渠道发一次 POST。不注入客户端代码、不往会话日志写事件、不轮询;发送失败只写日志,不影响会话本身。
典型通知内容包含:结束原因(完成 / 出错 / 中止等)、会话标题、工作目录、本回合耗时、回合序号、可选的助手回复摘要和时间戳。
核心功能¶
十个推送渠道¶
各渠道只需配置对应密钥或 webhook,由插件构建请求并判定 HTTP 与业务码是否成功。渠道与 channel 取值如下(细节见仓库 docs/channels.md):
| 渠道 | channel |
主要必填项 |
|---|---|---|
| ntfy | ntfy |
ntfyTopic |
| Bark | bark |
barkKey |
| 钉钉 | dingtalk |
webhookUrl(可选 dingtalkSecret 加签) |
| 企业微信 | wecom |
webhookUrl |
| 飞书 | feishu |
webhookUrl(可选 feishuSecret) |
| Server酱 | serverchan |
serverchanSendKey |
| PushPlus | pushplus |
pushplusToken |
| Telegram | telegram |
telegramBotToken、telegramChatId |
| Qmsg酱 | qmsg |
qmsgKey |
| 通用 webhook | webhook |
webhookUrl(可选 webhookHeaders) |
README 以 ntfy 为推荐入门:手机安装 ntfy App,订阅一个随机主题名即可,免注册。
默认少打扰¶
trigger默认idle:仅在agent/status落到idle(没有 driver 仍在调度)时推送;同一 goal 连续多轮通常只收到一条。- 子代理默认不推:
includeSubagents默认为false。 - 去重:按每个会话最后已通知的
turn/end去重;idle还会跳过超过 120 秒的陈旧结束,避免插件刚加载时误报历史任务。 - 若需要每回合都知悉,可将
trigger设为turn-end。
配置与界面¶
共 26 项配置,均有默认值,可在 cordis.patch.yml 的 config: 段覆盖;从 GitHub 或 npm 安装时,建议在 profile 的补丁层按插件 id mobile-notify 覆盖,而不是改 node_modules 内文件(见 docs/configuration.md)。常用项包括:
| 配置 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关 |
channel |
ntfy |
推送渠道 |
notifyOn |
all |
all / completed / error |
minTurnDurationMs |
0 |
仅通知耗时不低于该毫秒数的回合 |
includePreview |
true |
是否附带助手最后回复摘要 |
previewMaxChars |
200 |
摘要长度上限 |
dryRun |
false |
只构建请求不发送 |
插件依赖 Node ≥ 18(DSH 桌面端需满足;自带 fetch)。
安装与启用¶
前置条件¶
DSH 桌面端在运行。安装 spec 需能访问 github.com(或使用本地路径 / 压缩包等其它 spec,见仓库 README)。
从 GitHub 安装(推荐)¶
在 DSH 中让智能体执行,或在插件管理页填写等价操作:
plugin_manager action=install_bundle target=github:zjhaaa042-cloud/dsh-mobile-notify
返回 application: "applied" 表示安装成功。target 也可写为 git+https://github.com/zjhaaa042-cloud/dsh-mobile-notify.git、仓库浏览器地址,或 github:zjhaaa042-cloud/dsh-mobile-notify#v1.0.0 等形式。从 git 安装时无需在插件目录手动 npm install;pnpm 会把依赖 @deepseek-ai/schemastery 装进 profile 的虚拟 store。
装好后到 设置 → 插件 填写 channel 及各渠道密钥。
更新与卸载¶
改配置或代码后更新需两步,否则可能报 ambiguous-install:
plugin_manager action=remove_bundle target=dsh-mobile-notify
plugin_manager action=install_bundle target=github:zjhaaa042-cloud/dsh-mobile-notify
卸载:
plugin_manager action=remove_bundle target=dsh-mobile-notify
若采用本地路径安装(link:),须先在插件目录执行 npm install,再用 target=<本地绝对路径> 安装;否则可能出现 did not activate / failed to import。用户任务要求不以 git clone 作为读者必做步骤;需要改源码时请参阅仓库 README「方式二」。
典型用法:ntfy 约两分钟¶
第 1 步:在手机安装 ntfy App,订阅主题(例如 dsh-7f3a91c2,勿用过于好猜的名字;公共 ntfy.sh 主题可被猜到即订阅)。
第 2 步:完成上一节安装。
第 3 步:在 profile 的 cordis.patch.yml 中覆盖配置(示例来自 README):
- insert:
- id: mobile-notify
name: 'dsh-mobile-notify'
config:
channel: ntfy
ntfyTopic: 'dsh-7f3a91c2' # 改成你订阅的主题名
改完后按「更新插件」两步重装,再让 DSH 跑一个任务验证手机是否收到通知。
团队协作若只需主线结束才响,保持 includeSubagents: false;只关心长跑结束可设 minTurnDurationMs: 60000 等。
适用场景与注意¶
适合:本地或远程挂着 DSH 跑重构、测试、多轮 goal,希望在手机(或钉钉 / 飞书群)上被动收到「任务已停」摘要,而不改 DSH 客户端本身。
运行边界:
- 通知由当前 DSH 进程发出;关闭 DSH 后不会推送(窗口最小化可以)。
- 插件装在哪个 profile,对该 profile 下所有工作区生效;其它 profile 需单独安装。
- 插件以 DSH 进程权限访问网络并持有你配置的 webhook / token;安装前请阅读 源码 与 MIT 许可证,仅配置你信任的渠道与密钥。
- Telegram 等渠道需本机网络能访问对应服务;Qmsg 等走第三方,需自行评估合规与稳定性。
排错:收不到通知时,仓库提供 npm run send -- https://ntfy.sh <主题> 做单发验证;更多见 docs/troubleshooting.md。
DSH 社区插件目录托管在独立站点 SkillHub,与 DeepSeek / 幻方无官方从属关系;生态理念是「一切皆插件」,本插件是其中一条「任务结束 → 手机通知」的联网能力补充。