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 倉庫。

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

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

小夜