dsh-cron-jobs:在 DSH Host 内按计划跑 Shell,仅在需要时唤起 Agent

前言

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 指定目标。

核心功能

三类任务

  1. command job:执行 Shell 命令,不调用模型。
  2. gated job:先执行 command;仅当输出表示需要处理时,才按 agent.prompt 唤起 Agent。
  3. 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)。

典型用法与场景

  1. 定时备份、清理、同步:仅用 command job,不消耗模型额度。
  2. 周期性巡检 + 有条件处理:gated job,脚本无输出时静默,有输出再让 Agent 分拣或跟进。
  3. 固定节律的回顾与计划:agent job 或 RRULE,配合 sessionId 或 reuseWithinHours 控制会话生命周期。
  4. 运维通知:在行或 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 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜