前言¶
DeepSeek Harness(DSH)自带 Schedule 会在每次触发时向 Agent 会话投递 prompt,因此每个 tick 都会启动一轮模型推理。对只需执行脚本、或多数时候「无事可做」的巡检类任务,这种方式成本偏高。
soffits/dsh-cron-jobs 把定时任务放在 DSH Host 进程内调度:与 DSH 同启同停。命令类任务不触碰模型;带门控的任务先跑 Shell,仅在输出表明「有事要做」时才唤起 Agent;纯 Agent 任务则与内置 Schedule 类似,按计划在会话里发 prompt。
下面介绍插件定位、能力与配置方式,安装命令与字段含义均来自其 GitHub README。
这是什么¶
- 名称:
dsh-cron-jobs(npm 包名同名,当前版本0.5.0) - 维护者:soffits(
package.json中作者为 Sakina) - 分类:工作流(SkillHub 目录归类)
- 许可证:MIT
- 兼容:在 DSH
0.2.2-rc.1上构建与测试;engines.dsh为>=0.2.2-rc.1 <0.3.0-0,Node>=22 - 目录页:skillhub.cn/plugins/soffits/dsh-cron-jobs
- 源码:github.com/soffits/dsh-cron-jobs
插件本身不绑定任何聊天渠道;任务结果可通过实现了 send 方法的其他插件投递(例如 Telegram 等),由配置里的 deliver 指定目标。
核心功能¶
三类任务¶
- command job:执行 Shell 命令,不调用模型。
- gated job:先执行
command;仅当输出表示需要处理时,才按agent.prompt唤起 Agent。 - agent job:无
command,每次触发直接向 Agent 发送 prompt(类似定时 Agent 任务)。
命令通过 bash -c 执行;若无 bash 则用 sh -c。Host 需具备 POSIX Shell。
调度方式¶
每个 job 在 cron、rrule、at 三者中恰好设置一种:
cron:5 或 6 段表达式,由 croner 解析(含夏令时相关行为,见 README)。rrule:RFC 5545,含DTSTART与RRULE行。at:单次执行,ISO 8601 带偏移,或未带偏移时在timeZone下解析。
可选 timeZone(IANA);为空时使用 Host 时区。
结果投递(delivery)¶
任务结束后,可将 Agent 最终回复或命令输出/失败信息交给配置中的投递目标(deliver: { via, to })。行级默认 deliver 可覆盖未单独配置的 job;deliver: false 表示不对外投递。带 agent.sessionId 的 job 默认不投递。
对话中管理任务¶
Bundle 会注册两行:cron-jobs(调度器)与 cron-jobs-tools(向各 Agent 暴露管理工具)。Agent 可通过工具在对话中创建任务(例如「明天 9 点提醒」「每周一检查直到某月」)。
Web GUI:Cron tasks¶
Web 端提供 Cron tasks 页面:列出全部 job 与近期运行记录,支持立即运行、暂停、删除由 Agent 创建的任务。
运行与存储¶
- 同一 job 同时只跑一次;上一轮未结束时到来的 tick 会跳过并记入日志。
- 依赖 DSH 标准组合中的
@deepseek-ai/dsh-storage-domain,用于运行历史与暂停状态。
安装与启用¶
面向 web profile,从 GitHub 安装(README 原文):
dsh plugin --profile web add github:soffits/dsh-cron-jobs
然后重启 dsh web,或在 Plugins 页面启用。
安装后 bundle 增加 cron-jobs 与 cron-jobs-tools。若只希望某一 Agent preset 使用工具,可禁用 cron-jobs-tools 行,并在该 preset 中挂载 dsh-cron-jobs/tools。
配置说明¶
任务写在 cron-jobs 行的 config 里。可在 profile 的 cordis.patch.yml 中 override,或在插件设置页编辑。Override 会替换整块 config,因此需列出全部 job。
全局可选默认投递:
- id: cron-jobs
config:
deliver:
via: telegramTopics
to: notify
jobs:
- name: Nightly backup
cron: '30 2 * * *'
timeZone: Europe/Berlin
command: ./backup.sh >> backup.log 2>&1
cwd: /srv/backups
timeoutSeconds: 1800
门控任务示例(先跑脚本,再按需唤起 Agent):
- name: New issues
cron: '*/15 * * * *'
command: ./scripts/new-issues.sh
cwd: /home/me/project
agent:
prompt: Triage the new issues listed below and label them.
preset: standard
cwd: /home/me/project
reuseWithinHours: 6
model:
provider: deepseek
model: deepseek-chat
reasoningEffort: high
纯 Agent 任务可用 RRULE,并可关闭投递:
- name: Weekly review
deliver: false
rrule: |
DTSTART;TZID=Europe/Berlin:20260907T090000
RRULE:FREQ=WEEKLY;BYDAY=MO;UNTIL=20270101T000000Z
agent:
prompt: Review last week's notes and plan this week.
sessionId: session-0123
常用字段摘要(完整表格见 README):
| 字段 | 含义 |
|---|---|
name |
唯一任务名,用于日志与会话标题 |
command / cwd |
Shell 命令与工作目录;无 command 即为 agent job |
timeoutSeconds |
超时,默认 3600;0 表示不限 |
enabled |
false 保留配置但不调度,默认 true |
agent.* |
prompt、preset、sessionId、reuseWithinHours、model 等 |
行级还可设置 defaultAgentCwd、autoArchive、reuseWithinHours、historyRecords(默认 50,上限 1000)、可选 runLog(JSON Lines)。
典型用法与场景¶
- 定时备份、清理、同步:仅用 command job,不消耗模型额度。
- 周期性巡检 + 有条件处理:gated job,脚本无输出时静默,有输出再让 Agent 分拣或跟进。
- 固定节律的回顾与计划:agent job 或 RRULE,配合
sessionId或reuseWithinHours控制会话生命周期。 - 运维通知:在行或 job 上配置
deliver,把结果交给已有消息插件。
适用对象与注意事项¶
适合已在 DSH Web profile 上运行工作流、需要把「纯脚本调度」与「按需唤起 Agent」分开的开发者与运维。
使用前请注意:
- 任务在 当前 DSH Host 进程权限下执行 Shell;安装与配置前应阅读源码与 MIT 许可证,确认命令与路径可信。
- SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系;版本与星标以各站点与仓库页面为准(README 抓取时 GitHub 星标为 0)。
结尾¶
dsh-cron-jobs 用 cron、RRULE 或单次 at 在 Host 内调度任务,区分命令、门控与纯 Agent 三种模式,并经由 Web 的 Cron tasks 页与对话工具统一管理。需要试用或查阅更新时,可访问 SkillHub 目录页 与 GitHub 仓库。