前言¶
在 DeepSeek Harness(DSH)里做定时任务,常见做法是调度类插件在 cron 触发时向会话投递消息或拉起新会话——每一次 tick 都会唤醒模型,产生 Token 消耗。若你只是想按表执行 shell、备份、探测接口状态,并不需要模型参与,这种路径成本偏高。
dsh-noagent-schedule(维护者 monkey-sking,社区分类:工作流)走另一条路:由 Host 自行执行命令,类似 systemd 或 launchd 的定时行为;插件不调用 LLM 服务。只有在配置了「输出变化再唤醒」(wake on change)时,才把变化交给指定会话处理。
这是什么¶
插件全名 dsh-noagent-schedule,当前包版本为 0.4.4(MIT 许可证)。定位是:在 DSH Host 内按 cron 或固定间隔运行 shell,默认零 Token;附带青龙风格的任务页、侧边栏面板,以及供 Agent 调用的 Host 工具。
- 目录页:https://www.skillhub.cn/plugins/monkey-sking/dsh-noagent-schedule
- 源码与文档:https://github.com/monkey-sking/dsh-noagent-schedule
核心能力¶
下面按 README 与 package.json 中已写明的能力归纳。
零 Token 调度
定时 tick 只跑脚本,不触碰 LLM;与「每次 cron 都发会话消息」的调度插件形成对比。
时间与计划
支持五字段 Vixie cron(如 */15 9-17 * * 1-5,以及 sun..sat、jan..dec),或用 everySeconds 固定间隔(最小 30 秒)。每个任务可设 IANA 时区 timeZone,避免 Host 所在机器时区与业务时区不一致。
运行与可观测性
单次运行有独立日志(argv、退出码、stdout/stderr),并在 runs.jsonl 中记账。上一轮仍在执行时跳过新 tick(重叠保护);超过 timeoutSeconds 会终止任务(默认 300 秒)。
任务管理界面
Settings → No-Agent Schedule 与侧边栏时钟图标打开同一套列表:概览卡片、搜索与状态筛选、人类可读的计划描述、上次/下次运行、最近 8 次结果条、日志抽屉;可在页面上启用/禁用、改 cron/间隔/超时/名称/命令或删除,写入会校验、备份并重新解析,避免 jobs.json 无法加载。
Agent 工具
noagent_status、noagent_run、noagent_log、noagent_update 与 UI 共用同一 Host 实现。
Wake on change
轮询脚本定时执行仍不耗 Token;仅在输出指纹变化时,向指定 sessionId 投递一次性 scheduled message,可用 ignoreLines、notifyOnFirstRun、keyPattern 等细化行为。
文件位置与热加载¶
| 用途 | 默认路径 | 配置项 |
|---|---|---|
| 任务列表 | ~/.dsh/noagent/jobs.json |
jobsFile |
| 状态与日志 | ~/.dsh/noagent/state/ |
stateDir |
任务文件约每 10 秒重读,增删改任务无需重启 Host。state/ 下含 state.json、runs.jsonl,以及 runs/<job-id>/<ts>.log。
安装与启用¶
社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;安装方式以仓库 README 为准。
从插件市场(Discover)安装
需启用实验性的 plugin-market bundle。在 Plugins > Discover > Manage index sources 中添加索引源:
https://raw.githubusercontent.com/monkey-sking/dsh-noagent-schedule/main/index.json
索引加入后,在 Discover 列表中按常规模块安装。写好任务文件之前不会有任何计划任务执行。
从本地 checkout 安装(README 原文路径,非 dsh plugin add 拼接):
git clone https://github.com/monkey-sking/dsh-noagent-schedule.git
plugin_manager({ action: "install_bundle", target: "<cloned directory>" })
运行环境要求:node >= 20,dsh >= 0.2.0-rc.2(见 package.json 的 engines)。
典型用法:编写 jobs.json¶
在默认路径创建或编辑 ~/.dsh/noagent/jobs.json。下面是一个按 cron 在指定时区执行备份的示例(字段含义见 README 表格)。
{
"jobs": [
{
"id": "nightly-backup",
"name": "Nightly backup",
"enabled": true,
"cron": "0 3 * * *",
"timeZone": "Asia/Shanghai",
"cwd": "/srv/app",
"command": "bash scripts/backup.sh",
"timeoutSeconds": 600
}
]
}
command 经 /bin/bash -lc 执行,便于 GUI 启动的 Host 继承登录 shell 的 PATH;若不想依赖 shell 启动文件,可用 argv 数组并写绝对路径。enabled: false 保留任务但不调度。
Wake on change 示例¶
适合「定时探测、有变化再让模型处理」的场景:探测本身不唤醒模型。
{
"id": "inbox-watch",
"everySeconds": 120,
"command": "bash scripts/probe-inbox.sh",
"wakeOnChange": {
"sessionId": "session-…",
"title": "New mail",
"prompt": "The probe found something new:\n\n{{output}}\n\nHandle it per the usual routine; reply [SILENT] if nothing needs doing.",
"ignoreLines": ["^ts=", "progress: \\d+%"]
}
}
行为要点(据 README):无输出变化则不调用模型;首次运行只记基线(可用 notifyOnFirstRun: true 改为首次也通知);非零退出码不算「有变化」;prompt/title 支持 {{job}}、{{id}}、{{output}}(输出截断至 4000 字符)。
适用场景与限制¶
适合
需要在 DSH 会话环境里周期性跑脚本、看日志、偶尔「有变化再 @ 模型」的开发者;希望任务表可读、可搜、可即时「Run now」的工作流场景。
务必注意
-
仅在 DSH 运行期间调度
Host 关闭期间错过的 tick 不会在重启后补跑;必须脱离应用存活的 watchdog,应使用系统级cron、systemd或launchd。 -
非沙箱
任务以 Host 进程权限执行;jobs.json应视为可执行配置。安装前请阅读源码与 MIT 许可证,确认命令与路径可信。 -
macOS 权限
任务继承应用的 TCC 授权,访问受保护路径可能失败,应以日志为准。 -
生态边界
DSH 强调「一切皆插件」;本插件解决的是 Host 内零 Token 定时执行与条件唤醒,不替代操作系统级调度器。
结尾¶
dsh-noagent-schedule 把「定时跑 shell」与「唤醒模型」拆开:默认只有 Host 执行与日志,需要时再经 wake on change 把变化送进会话。若你在 DSH 里被 cron 带来的 Token 成本困扰,可以从写好 jobs.json 和添加上述 Discover 索引源开始试用。
- SkillHub 目录:https://www.skillhub.cn/plugins/monkey-sking/dsh-noagent-schedule
- GitHub:https://github.com/monkey-sking/dsh-noagent-schedule