dsh-automode:給 DeepSeek Harness 加一個帶確定性護欄的 auto mode

前言

讓 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 的,可以從這兩處開始:

羽毛球分组比赛记分
小程序二维码

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

小夜