Jeff1573/dsh-plugin-scheduled-tasks ↗★ 0
dsh-plugin-scheduled-tasks
Scheduled tasks for DeepSeek Harness (dsh): at a daily / weekly / fixed-interval trigger, open a new session, send a prompt, and optionally push the result to a webhook.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Jeff1573/dsh-plugin-scheduled-tasks说明文档
阅读完整 README ↗使用
重启后侧边栏底部会出现「定时任务」入口,点开就是面板。
建第一个任务
面板右下角「新建任务」。必填只有三项:
| 字段 | 说明 |
|---|---|
| 触发时间 | 「每天」/「每周」/「间隔」三选一。前两者填时:分,按表单下方显示的时区计算;「间隔」填分钟数(≥5) |
| 任务名称 | 列表和通知里显示的名字 |
| 你希望 dsh 做什么? | 到点后新建一个会话,把这段内容作为第一条消息发出 |
点「创建」即生效,列表里每行会显示下一次触发时间。
高级选项
同一个表单里展开「高级选项」:
- 工作目录 —— 留空则用默认 cwd
- 权限预设 —— 无人值守建议选
scheduled;留空跟随全局默认,而全局默认通常是会发问的,定时运行会卡住直到超时 - Agent 预设 —— 留空跟随全局默认
- 运行超时 —— 默认 30 分钟,到点
agent.cancel()并记为「超时」 - 失败后 5 分钟自动重试一次 —— 只重试一次,不串联
- 进程重启后,若已错过触发则补跑一次 —— 默认关闭
- 完成后通知 / 附带模型回复摘要 —— 可覆盖全局设置
运行与查看
列表每行有「立即运行 / 编辑 / 暂停 / 删除」:
- 立即运行 会等到会话创建完成就跳进那个对话,可以看着它流式生成
- 定时触发 的会话会在生成过程中自己出现在侧边栏,但不会抢占你正在看的界面
- 历史 N 展开该任务的运行记录,每条都能点开对应会话;状态分 成功 / 失败 / 超时 / 已中断
- 入口上带红点表示最近有失败
编辑复用新建表单,只是标题变成「编辑自动化任务」。编辑正在运行中的任务不会打断那一次运行,它跑完后按新记录重排。
完成通知
面板里「通知设置」,勾选「启用完成通知」后选通道:
| 通道 | 怎么填 |
|---|---|
| Bark(iOS 推送) | 地址填 App 给的 https://api.day.app/,自架的 Bark 服务器同样可以 |
| 企业微信群机器人 | 群里添加「群机器人」,把它给的 Webhook 地址粘进来。官方接口、无需 OAuth,但个人用要先注册企业才能建群 |
| 自定义模板 | 地址填服务端点,下面粘贴它要的 JSON body,用 {{占位符}} 取值。界面里有 ntfy / Server酱 / Telegram / 飞书 / 钉钉的现成模板可一键套用 |
| 自定义 JSON webhook | 固定结构 {source, task, taskId, status, at, host, sessionId, detail?, reply?},发给你自己写的接收端 |
可用占位符:task taskId status statusText at atIso host sessionId detail reply。
其余几项:
- 默认时机 —— 「每次运行结束都通知」或「仅失败或超时时通知」,单个任务可在自己的高级选项里覆盖为
always/failure/never。 - Web 界面地址(可选) —— 填了之后推送会带上
/?dsst-session=,点通知直接跳到那次运行的会话。地址必须是收通知的设备能访问到的(内网 IP、内网穿透域名等),127.0.0.1只在本机有效。 - 默认附带模型回复摘要 —— 默认关闭,开启后只发前 200 字。通知本身必然要把任务名、时间、状态、主机名发出这台机器;回复内容属于额外外发,所以做成显式开关。
- 发送测试通知 —— 会立刻向已保存的地址真实发送一条消息。
几条约束:
- 地址即密钥。企业微信把 robot key 放在 query string 里,所以 URL 整体当凭据处理:存
ctx.credentials的SCHEDULED_TASKS_NOTIFY_URL(落在~/.dsh/.credentials.yaml,权限 600),不进任务表,也永不回传给浏览器——前端只拿到「是否已配置」和 origin。表单里留空表示「保持不变」。 - 公网必须
https;明文http只允许发往本机或内网(127/10/192.168/172.16-31、localhost、*.local),这样自架的 Bark/ntfy 在局域网里能直接用,而带 key 的地址永远不会明文走公网。 - 通知失败不会把成功的运行记成失败:投递错误写在该次运行记录的
notifyError上,仅此而已。 - 企业微信群机器人有频率限制(每分钟约 20 条),高频间隔任务请酌情用「仅失败时通知」。
- 个人微信没有官方发送接口。 网上看着能用的那些库走的是逆向出来的网页/桌面协议,违反服务条款且会导致封号,所以这里不提供这种渠道。想在微信里收,走企业微信(可转发到个人微信)或 Server酱 一类的服务号中转(用「自定义模板」通道)。纯个人用其实 Bark / ntfy 更顺手,而且可以自架。
在对话里排任务
scheduled_task_list / scheduled_task_create / scheduled_task_delete 注册在根 context 上,所以每个会话都能用。「每天九点帮我看一下 CI」可以在对话里直接说,不必打开面板。
scheduled_task_create 的参数:name、prompt、kind(daily / weekly / interval)、hour、minute、weekdays(0=周日)、minutes(≥5)、timeZone、cwd、权限预设。
注意定时任务跑起来的会话同样能看到这三个工具,也就是说一个定时任务可以再排新的定时任务。