前言¶
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 倉庫。