前言¶
跑 DeepSeek Harness(DSH)时,agent 可能在后台长时间执行,或在 ask_user_question、工具授权处挂起等你操作。若人不在终端前,很容易错过回合结束或待办。常见做法是另开监控脚本或第三方推送,SMTP 邮件则往往还要单独装库、把授权码写进配置文件。下面介绍社区插件 dsh-notify-email(维护者 HeIIoAgain):在任务结束、等待回答或授权时自动发信,并提供 send_email 工具与附件能力;实现上只用 Node 内置模块,无额外运行时依赖。
这是什么¶
dsh-notify-email 是面向 DeepSeek Harness 的 Cordis 插件,分类为联网工具。它通过 SMTP 把提醒和摘要发到你的邮箱,并注册 send_email 供 agent 主动发信。SMTP 密码不进 YAML,而是独立文件或环境变量,每次发送实时读取。
核心功能¶
| 触发方式 | 说明 |
|---|---|
send_email 工具 |
你对 agent 说「把结果发我邮箱」,或定时任务到点后由 agent 调用;可带附件 |
| 等待回答时 | 出现需要你选择或补充信息时自动发提醒(notifyOnQuestion,默认开启) |
| 等待授权时 | 工具权限确认挂起时自动发提醒(notifyOnApproval,默认开启) |
| 回合结束摘要(可选) | notifyOnTurnEnd: true 时,每轮结束把最终回复摘要发到邮箱 |
自动通知为 fire-and-forget,不阻塞 DSH 流程;发送失败只写 Host 日志,不影响任务。
附件方面:支持 multipart/mixed、中文文件名(RFC 2231),按扩展名推断 Content-Type;默认单文件 ≤ 20MB、每封 ≤ 10 个,可通过 maxAttachmentBytes、maxAttachments 调整。自动提醒(提问 / 授权 / 回合结束)不带附件。
安装与启用¶
需要 Node.js ≥ 22 和可用的 DSH(插件开发时基于 @deepseek-ai/dsh 0.2.1)。安装命令以仓库 README 为准:
# 从 npm(发布后)
dsh plugin --profile web add dsh-notify-email
# 从 GitHub(commit 固定,推荐)
dsh plugin --profile web add github:HeIIoAgain/dsh-notify-email#<commit-sha>
# 本地目录(开发调试)
dsh plugin --profile web add link:/path/to/dsh-notify-email
安装后插件会加入该 profile 的 dsh.profile.bundles。把 web 换成你实际使用的 profile 名即可。
配置¶
配置写在 profile 的 patch 层($DSH_HOME/profiles/<profile>/cordis.patch.yml)。config 按 id 覆盖时需写全所需字段:
- id: notify-email
name: 'dsh-notify-email'
config:
smtpHost: smtp.qq.com
smtpPort: 465
secure: true
user: you@qq.com # 发件邮箱(= SMTP 登录账号)
from: you@qq.com # 发件人地址,一般与 user 相同
to: you@qq.com # 收件邮箱,多个用逗号分隔
subjectPrefix: '' # 标题前缀,留空则不加
notifyOnQuestion: true
notifyOnApproval: true
notifyOnTurnEnd: false
发件地址必须与 SMTP 登录账号一致,否则 QQ / 163 等常见邮箱会拒信;收件地址可以是任意邮箱。
授权码¶
SMTP 密码不要写进 YAML。推荐独立文件(改完无需重启 DSH):
mkdir -p ~/.dsh/notify-email
printf '%s' '你的SMTP授权码' > ~/.dsh/notify-email/password
chmod 600 ~/.dsh/notify-email/password
也可用 passwordFile 指定路径,或在启动 dsh 前 export DSH_SMTP_PASSWORD(对应配置项 passwordEnv)。
常见邮箱参数(节选)¶
| 邮箱 | smtpHost | 端口 / secure | 密码 |
|---|---|---|---|
smtp.qq.com |
465 / true |
开启 SMTP 后的授权码 | |
| 163 | smtp.163.com |
465 / true |
客户端授权码 |
| Gmail | smtp.gmail.com |
465 / true(或 587 / false) |
应用专用密码 |
| Outlook / Microsoft 365 | smtp.office365.com |
587 / false |
账户或应用密码 |
587 端口需 secure: false,插件会 STARTTLS;云环境一般不宜使用 25 端口。
典型用法¶
- 直接对 agent 说:「把刚才的结果发到我邮箱」 → 调用
send_email。 - 带附件:「把 report.pdf 和 run.log 作为附件发我邮箱」 → agent 传
attachments(绝对路径,或相对会话工作目录)。 - 定时:用 DSH 自带
schedule_create建提醒,prompt 写明「把结果发到邮箱」,到点触发的回合里 agent 会调send_email。 - 每轮结束都要摘要:将
notifyOnTurnEnd设为true。 - 自动通知未触发时诊断:将
debugLog设为true,日志写入$DSH_HOME/notify-email/debug.log。
适用场景与注意¶
适合需要「手机邮箱收 DSH 待办」、又不想为 SMTP 再拉一堆 npm 依赖的开发者。插件以当前 dsh 进程权限 运行,附件路径由调用方给出;安装前请阅读 GitHub 源码 与 MIT 许可证,自行评估敏感内容经邮箱服务商转发的风险。插件未声明 Config schema,DSH 设置面板不渲染表单,配置走 patch + 授权码文件是预期行为。
若出现 535 authentication failed,优先核对:客户端授权码、SMTP 已开启、from/user 一致、授权码未过期。user 或 to 为空时自动通知不会注册;手动 send_email 能发而自动提醒不能发时,可对照 README 中的 waterfall 事件说明排查。
结尾¶
dsh-notify-email 把 DSH 的等待态与可选回合摘要接到任意 SMTP 邮箱,并用零依赖 SMTP 客户端支持 send_email 与附件。社区目录页:SkillHub - dsh-notify-email;源码与完整配置表:GitHub - HeIIoAgain/dsh-notify-email。