dsh-noagent-schedule:在 DSH 里零 Token 跑定时脚本

前言

在 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」的工作流场景。

务必注意

  1. 仅在 DSH 运行期间调度
    Host 关闭期间错过的 tick 不会在重启后补跑;必须脱离应用存活的 watchdog,应使用系统级 cron、systemd 或 launchd。

  2. 非沙箱
    任务以 Host 进程权限执行;jobs.json 应视为可执行配置。安装前请阅读源码与 MIT 许可证,确认命令与路径可信。

  3. macOS 权限
    任务继承应用的 TCC 授权,访问受保护路径可能失败,应以日志为准。

  4. 生态边界
    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
羽毛球分组比赛记分
小程序二维码

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

小夜