Task Notify
任务完成后向用户发送邮件通知,让用户可以离开电脑、用手机收邮件掌握结果。
何时使用
- 用户明确要求任务完成后通知/提醒(任意措辞:"通知我"、"提醒我"、"发邮件"、"发到手机")
- 用户表示要外出,任务(构建/测试/部署/批量生成等)还在跑,结束时需要告知
不使用:用户没提通知就不要发。每个任务最多发一封,禁止刷屏。
发送方法
两个等价脚本,按运行时可用性选择(都零依赖):
标题/正文含中文时,必须用 -f 文件方式(Windows PowerShell 命令行传中文参数会乱码):
- 先把内容写成 UTF-8 JSON 文件(如
%TEMP%\notify-content.json)。prefix提示语由你(AI)根据任务语境现场写一句——简短、自然、点明这是 AI 播报,不要重复使用同一句。提示语、标题、正文的语言跟随用户当前对话语言(用户用英文交流就写英文,用中文就写中文):
json {"title": "✅ 构建完成", "body": "产物: dist/app.zip,耗时 3 分钟", "prefix": "代码构建跑完啦,结果如下:"} - 再调用脚本发消息:
bash python "<本skill目录>/scripts/notify.py" -f "%TEMP%\notify-content.json" # 或 node "<本skill目录>/scripts/notify.js" -f "%TEMP%\notify-content.json"
纯英文内容可直接传参:
python "<本skill目录>/scripts/notify.py" "build done" -b "optional body"
- 关键信息放标题;细节放正文
- 退出码 0 = 已发送;非 0 = 失败(会打印原因与建议)。发送失败只需在最终回复中带一句失败原因,不得重试刷屏,不得影响任务本身
通知内容模板
- 标题:
任务类型 + 结果,如 "✅ 构建完成" / "❌ 测试失败(3/120)" - 正文:一两句关键信息,如失败原因摘要、产物路径、耗时
兼容性说明
- 端口 465(隐式 TLS,默认)与 587(STARTTLS)均支持;连接失败时脚本会提示改用 587
- host 可填预设短名
qq/163/126/gmail/outlook,自动展开为对应服务器 - 脚本对认证失败、连接断开等场景输出具体修复建议(如重新生成授权码)
首次配置(配置文件不存在时)
脚本会读 ~/.codebuddy/notify-config.json。若文件不存在或缺少 smtp 配置:
- 按
references/setup.md中的引导,让用户提供 SMTP 授权码(QQ 邮箱或 Gmail 等) - 用户确认后生成配置文件
- 发送测试通知
python .../notify.py "test"让用户确认手机已收到
安全规则(必须遵守)
- 禁止将授权码打印到对话、写日志或写入配置文件之外的任何文件
- 配置文件只在用户提供凭据并确认后生成;不要主动猜测或伪造凭据
- 测试发送时不要在命令行回显凭据(凭据只存在于配置文件中,脚本自动读取)
Resources
scripts/
notify.py— Python 3.7+ 零依赖版(标准库 smtplib)notify.js— Node.js 14+ 零依赖版(内置 tls/net 手写 SMTP,无需 npm install)
references/
setup.md— 各邮箱授权码获取步骤与配置文件格式