前言¶
在 DeepSeek Harness(DSH)里跑长任务时,常见风险并不只在「这一次工具调用」——空转重复、长时间无进展、禁区命令、读不可信来源后立刻调特权工具、预算烧穿或主动要提权,往往跨多步才看得出来。宿主侧若有单次调用的风险复核,和「整段任务是否在推进」仍是两条线。下面介绍的 dsh-task-steward(任务管家)由维护者 MrXiongBear 发布,分类为 admin-security,用规则与状态机盯运行中的任务,默认只记账不拦人,适合先观察再逐步放权。
这是什么¶
dsh-task-steward 是挂在 DSH profile 上的 Cordis 插件:任务跑起来之后持续问一句——这个任务还在正常推进吗? 命中卡死、空转、思考链复读、无进展、禁区命令、污点后的特权调用、预算超限、提权/换沙箱请求等信号时,按配置在「记录 → 提醒 → 拦截 → 停机」的阶梯上动作。默认 policy: report(影子模式):信号都算进账本,但不拦工具、不停任务;全部判断确定性完成,默认配置下一次模型调用都不发。仓库标注为实验性、紧贴特定 DSH 版本验证,未发布到 npm;当前 package 版本为 0.1.3,许可证 MIT,要求 Node >= 22。
核心功能¶
监督信号(节选)¶
| 信号 | 含义 | 默认阈值(资料原文) |
|---|---|---|
repeat.exact |
同一工具 + 规范化参数在窗口内重复 | 3 次 / 回看 12 次调用 |
repeat.no-effect |
同一调用且结果摘要不变 | 2 次 |
stall.silent |
运行中无事件且无在飞操作 | 120s |
stall.thinking |
只有思考、无工具、距上次进展过久 | 180s |
progress.none |
连续多步无进展证据 | 8 步 |
forbidden.command |
禁区命令规则 | 11 条规则 |
taint.sink |
读不可信来源后调特权工具 | first-taint-wins |
budget.exceeded |
步数/时长/(可选)token 超预算 | 0 = 不设限 |
escalation.request |
提权、换沙箱、sandbox 拒绝 | 立即 tier 2 |
进展证据仅四类:写/改文件、关掉一条 todo、验证类命令通过(如 test|build|lint|tsc|vitest 且 exitCode 0)、用户新消息。有工具调用未返回时不判卡死,避免长构建、长下载误杀。
四档干预(仅 policy: auto)¶
| 档 | 动作 | 落地方式 |
|---|---|---|
| tier 0 | record |
只写账本 |
| tier 1 | nudge |
插入 user/message 提醒,不唤醒模型 |
| tier 2 | block |
tools/pre-execute 返回 {kind:'deny'} |
| tier 3 | stop |
agent.cancel({kind:'hook', reason}) |
同一信号连续出现 tierUpAfter 次(默认 2)升一档;有进展则重新计数。allowStop: false(默认)时 tier 3 降级为 nudge,M0/M1 阶段不自行杀任务。
与 auto-review 的分工¶
内置的 dsh-experimental-auto-review(profile 里常见、默认关)管单次调用风险复核;任务管家管跨步进程监督,两者不重复。
安装与启用¶
DSH 的 profile 加载是全有或全无——任一插件 import 失败可能拖垮整个 profile。安装前先备份 profile 里的 package.json 与 cordis.patch.yml。资料未给出 dsh plugin add github:… 一类命令;官方说明是本地装入 profile:
- 将插件目录放入 profile 的
node_modules,或在package.json中用"dsh-task-steward": "link:<本目录绝对路径>"链接。 - 在
package.json的dsh.profile.bundles里登记该包。 - 重启 DSH。装之前建议过
dsh-capability-ledger的 preflight 闸门。
在 cordis.patch.yml 中可插入如下配置片段(与 README 一致):
- insert:
- id: task-steward
name: 'dsh-task-steward'
config:
policy: report # report | auto
stall: { silentMs: 120000 }
escalation: { allowStop: false }
可调项包括 policy、stewardName、repeat.*、thinking.*、stall.*、progress.*、budget.*、escalation.*、ledger.* 等;完整默认值见仓库内 lib/policy.mjs 的 DEFAULT_CONFIG。
卸载/回滚:从 dsh.profile.bundles 移除 → pnpm remove dsh-task-steward 或删掉 link → 重启;异常时用备份的 package.json 与 cordis.patch.yml 还原。
典型用法¶
确认插件已挂上¶
插件在 apply 第一行写心跳文件。重启后日志应出现类似:[task-steward] 管家已启用(policy=report,账本=…,心跳=…)。
心跳与账本路径(相对 $DSH_HOME):
task-steward/boot.json— 装载自证(at/pid/version/policy/ledger)task-steward/events.jsonl— 事件账本task-steward/stats.json— 观察覆盖统计
在插件仓库目录执行账单脚本,先看「管家存活」再调阈值:
node scripts/bill.mjs --days 7
判读要点(资料原文):
- 没有
boot.json→ 插件未被 loader 起来; - 有
boot.json但sessionEvents=0→ 挂上但影子期未跑任务; - 有事件且零命中 → 判据对这段活动是干净的。
三步放权¶
- 用账单逐条标真问题/误报。
- 误报多先调阈值(如
stall.*、progress.*)。 - 连续几天干净再把
policy改为auto;allowStop最后再开。
M0 建议保持 policy: report,用 node scripts/bill.mjs 跑几天账单,误报低了再切 auto。
本地验证(开发者)¶
cd <repo>
node --test test/*.test.mjs
node scripts/bill.mjs --help
适用场景与注意¶
适合:需要跨步监督 DSH Agent 任务、希望先影子观察再确定性干预的团队或个人;与 admin-security 相关的禁区命令与污点链路防护。
务必注意:
- 插件以当前 DSH 进程权限运行;安装前应阅读源码与 MIT 许可证,自行评估信任边界。
- 仓库声明 100% AI 生成、实验性自用,仅在编写时的 DSH 版本上验证,宿主升级可能失效。
- 审计账本不携带匹配原文,凭据就地脱敏;拦截理由放在顶层
reason,供模型与审批链阅读。 - 社区目录页 skillhub.cn 与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方从属;DSH 生态理念是「一切皆插件」。
结尾¶
dsh-task-steward 用零模型调用的规则链,把卡死、空转、禁区、污点、预算与提权请求收成可审计信号,默认影子记账,再按阶梯提醒、拦截或停机。若要查看分类与简介,可打开目录页;细节与配置以仓库 README 为准。
- 目录页:https://www.skillhub.cn/plugins/MrXiongBear/dsh-task-steward
- GitHub:https://github.com/MrXiongBear/dsh-task-steward