前言¶
讓 agent 連續跑任務,權限上通常只有兩種選擇:要麼用保守預設,每一步寫操作都停下來等人確認;要麼直接切到 danger-full-access,速度快了,但 agent 想做什麼就做什麼,出了事沒有閘門。DeepSeek Harness(DSH)的權限預設——read-only、workspace-write、danger-full-access——都在這兩端,中間缺一檔「放得開、但危險動作有人攔」。
下面介紹的 dsh-automode 補的就是這一檔:它是一個 DSH 插件,提供 Claude Code 風格的 auto mode,讓 agent 免手動運行,由確定性護欄和一個成本感知的審查器攔截危險操作。
這是什麼¶
dsh-automode(npm 包 @log.li/dsh-automode)是 GitHub 用戶 log-li 維護的 DSH 插件,MIT 許可證。一句話定位:Claude Code–style auto mode for DeepSeek Harness——agent 免手動運行,由確定性護欄和成本感知審查器攔截危險操作。
它插在 agent 和 harness 之間:每個工具調用在執行前先被攔下來。硬性 deny 規則和人工維護的 allowPaths 確定性放行或拒絕,這部分零 LLM 開銷;剩下的交給兩段式分類器。安全動作自己跑完,有風險的被攔下或轉給人工。
安裝與啓用¶
先安裝插件:
dsh plugin add @log.li/dsh-automode
本地 checkout 調試時,可以指向本地路徑:
dsh plugin add ./path/to/dsh-automode
安裝後需要重啓 dsh web。重啓後打開權限選擇器(聊天框左下角),會看到 Auto mode 與 read-only、workspace-write、danger-full-access 並列。
會話內有兩個命令:
/auto # 將當前會話切到 auto mode
/auto-status # 顯示診斷信息:預設、審批策略、熔斷器狀態
工作原理¶
整體分兩層:預執行門攔下所有工具調用做第一輪分揀,需要沙箱升級的調用再走審批瀑布,由分類器裁決。下面按順序拆開。
預執行門:所有調用的第一道閘¶
預執行門(pre-execute gate)攔截所有工具調用,按固定順序處理:
1、只讀工具默認放行(命中 deny 的除外);
2、deny 規則(regex)命中即硬拒;
3、allow 規則(prefix-glob)免 LLM 放行;
4、工作目錄內的文件操作放行;
5、其餘調用按是否需要沙箱升級分流。
注意兩點:預執行門只作用於 auto-mode 會話,在 read-only、workspace-write、danger-full-access 等其他預設下是 no-op,不會和你選定的沙箱衝突;審批瀑布只對真正需要沙箱升級的調用運行,其餘調用不產生這部分開銷。
零確認 allowlist¶
config.allowPaths 是完全信任區:其中的文件操作和 bash 寫命令完全跳過分類器。v0.10.0 起,需要沙箱升級的調用也會經 approval-bridge 自動授予——不彈確認,不往返。適合把常用的外部工作目錄加進去,省掉高頻確認。
兩段式分類器¶
進入瀑布的動作先過單 token 預篩,只有被標記的纔會進入結構化審查;相同動作的判定進緩存,5 分鐘內複用,不重複調 LLM。從 0.8.0 起分類器是兩態的,只輸出 allow 或 reject。
分類器失敗時默認 fail-closed(failClosed 默認 true):寧可拒絕,不放行。
熔斷器與人工兜底¶
分類器連續 3 次或累計 20 次輸出 DENY,auto mode 暫停,決定權轉給人工;人工做出一次決定即恢復,計數重置。這個機制保證出問題時能停下來交還給人,而不是靜默跑偏。
審計日誌¶
每一次 allow / deny / bridge 決定都追加寫入 ~/.dsh/auto-mode/decisions.jsonl。經過上面的步驟,一個工具調用要麼被確定性規則放行或硬拒,要麼由分類器裁決,全部留痕,事後可以完整回溯。
規則系統:硬邊界與軟指引¶
規則分兩層。
第一層是硬邊界,確定性執行,不進分類器:
deny:regex 模式,命中即硬拒,適合絕不允許發生的操作;allow:prefix-glob 模式,免 LLM 放行,適合完全信任的常規命令。
第二層是分類器指引,以 prose 形式餵給分類器的 LLM:
rules.deny:軟拒絕描述,分類器將其視爲常規拒絕;rules.allow:軟放行例外;rules.environment:環境事實,供分類器結合上下文裁決。
三個 rules.* 數組都支持 $defaults:在列表裏帶上 "$defaults" 這一項,就保留內置規則並追加你的自定義項。
配置¶
配置寫在 profile 的 cordis.patch.yml。所有配置項都有默認值,空 {} 配置也有效。常用項:
allowPaths:零確認 allowlist 的目錄列表;readOnlyTools:默認放行的只讀工具集合;allowInsideWorkingDirectory:工作目錄內文件操作是否免分類器放行;preExecuteGate:預執行門開關(僅作用於 auto-mode 會話);classifier.provider/classifier.model:覆蓋分類器的 LLM 路由;classifier.reasoningLevel:分類器推理檔位,默認 off;rules.deny/rules.allow/rules.environment:分類器的軟拒絕、軟放行、環境事實指引;failClosed:默認 true,分類器失敗時拒絕;timeoutMs:調用超時上限,默認 45000 毫秒。
適用場景與注意¶
適合誰:想讓 agent 長時間免確認跑任務、又不放心直接開 danger-full-access 的 DSH 用戶。硬規則擋住明確危險的操作,allowPaths 免掉高頻信任操作的確認,分類器兜住剩餘的不確定動作,熔斷器保證出問題時停下來交還人工。
用之前有幾點必須清楚:
1、這不是沙箱。插件運行在 DSH 進程內,以當前 dsh 進程的權限工作,一個刻意作惡的插件能做你的用戶賬戶能做的一切。dsh-automode 減少的是不安全的自主工具調用,它不是 OS 安全邊界。
2、安裝任何第三方插件前,建議先讀一遍源碼、確認許可證。dsh-automode 採用 MIT,倉庫地址在文末。
3、DSH 的理念是「一切皆插件」,本文提到的插件目錄是社區維護的獨立站點,與 DeepSeek、幻方沒有官方從屬關係。
小結¶
dsh-automode 把「要不要放手讓 agent 跑」從二選一變成了可調的梯度:確定性規則處理確定性的事,成本感知的分類器處理不確定的事,熔斷器和審計日誌兜底。想在 DSH 上跑 auto mode 的,可以從這兩處開始: