前言¶
在 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