前言¶
DeepSeek Harness(簡稱 DSH)是 DeepSeek 開源的編碼智能體運行時,官方倉庫的定位是「Everything is a Plugin」——權限預設、沙箱、審批、工具鏈路都可以由插件組合。官方默認提供的權限檔比較尖銳:workspace-write 會把工作區外的寫入攔下來,但很多日常操作仍要反覆點批准;danger-full-access 則直接取消審批。兩者之間缺一層「日常工作能跑下去、危險動作仍被攔住」的中間態。
dsh-auto-mode 補的就是這一層。它在 Workspace Write 和 Full access 之間插入一個名爲 Auto 的權限預設:普通項目操作繼續走官方 workspace-write 文件沙箱;沙箱覆蓋不到的語義風險,再交給當前 Session 的 DSH 模型做分類;真正說不清的動作只問一次;針對根目錄、Home、DSH_HOME 等關鍵路徑的破壞則在執行前直接拒絕。
本文按社區插件目錄頁、GitHub 倉庫 README / DESIGN.md、npm 包說明交叉覈實後整理。社區目錄 deepseek-harness-plugin.com 是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係,不要把它當成官方應用商店。
這是什麼¶
dsh-auto-mode 是一款工作流與自動化類 DSH 插件,GitHub 倉庫由 NanmiCoder 維護,npm 包名爲 @nanmicoder/dsh-auto-mode,當前版本爲 0.1.4,許可證爲 MIT。package.json 裏的作者字段寫的是程序員阿江(Relakkes)。倉庫主要語言是 TypeScript。本文寫作時(2026-08-17)查詢 GitHub API,star 數爲 74;社區目錄頁當時顯示 36,星標以倉庫一手數據爲準。
它解決的問題可以概括成一句話:給 DSH 增加一個常駐在官方 workspace-write 沙箱上的 Auto 權限檔,用確定性規則加語義分類器,減少審批打斷,同時避免直接打開 Full access。
DESIGN.md 寫得很明確:這個插件不自行實現沙箱,也不提供自己的執行器。它只做三件事:
- 往官方權限預設表裏插入 Auto;
- 在官方
ctx.tools管線上掛一層 Host 策略; - 給已測試的 DSH Web UI 補上 Auto 圖標和風險確認彈窗。
實現針對的是官方 DeepSeek Harness 檢出 47f943859bef60e4160492346772ded9b24f765a,構建和測試對齊公開的 0.1.0-rc.6 包。相關上游接口包括 @deepseek-ai/dsh-permission-presets、@deepseek-ai/dsh-sandbox-policy、ctx.tools.guard()、ctx.approval 的 allowed-once,以及 ctx.llm.stream() 作爲獨立語義審查器。
權限模式怎麼排¶
安裝後,權限選擇器裏會出現四檔。Auto 和 Workspace Write 共用同一道文件邊界,但行爲不同:
| 模式 | 文件沙箱 | 審批 | Auto 策略 |
|---|---|---|---|
| Read Only | read-only |
ask | 不啓用 |
| Workspace Write | workspace-write |
ask | 不啓用 |
| Auto | workspace-write |
ask | 啓用 |
| Full access | danger-full-access |
never | 不啓用 |
普通 Auto 工作仍停在 Workspace Write 邊界內。只有明確的一次性越權請求,纔可能被自動批准。官方文件沙箱限制的是「寫到哪裏」,不限制讀取、網絡和外部服務;Linux 上是 bwrap/Landlock,macOS 上是 Seatbelt,Windows 受限令牌 / ACL 後端報告的是 partial 執行。
核心決策¶
README 把 Auto 的決策分成四類,和 DESIGN.md 裏的決策順序一致。
自動放行。 沙箱內的陌生 Bash / PowerShell、常規依賴安裝(npm、pnpm、yarn、bun、pip、本地 Cargo)、本地 Git commit、項目讀寫、構建、測試、類型檢查,以及已經審計過的 DSH 協作工具,默認直接跑。插件不再試圖用白名單證明每一種 Shell 語法都安全:字面量未知命令、參數變量、管道、重定向、內聯代碼和 PowerShell 組合,默認進入官方 workspace-write 沙箱。工作區外寫入由操作系統拒絕,不會因爲靜態分析器「不認識」就彈窗。只有可執行文件名被變量或 glob 藏起來時,纔會後臺拒絕,要求 Agent 改寫成可見命令。
後臺分類。 下列動作會交給分類器:Session 開始前已有數據的刪除、臨時下載包執行(npx、bunx、pnpm dlx、yarn dlx、npm exec)、危險的遠程 Git / 數據庫 / 服務變更、敏感讀取、網絡傳輸、外部系統寫入,以及精確的 sandbox 越權。分類器不是授權來源。它只接收經過脫敏和長度限制的待執行調用描述,並且只能識別直接用戶 Session 消息裏的授權。倉庫文本、工具輸出、Assistant、Skill、插件和子 Agent 都不能授權限。
詢問一次。 效果或授權確實說不清時,走官方審批。分類器連續失敗三次後也會轉人工確認。越權時複用官方那一次精確審批,不產生雙彈窗。
直接拒絕。 根目錄、Home、DSH_HOME、系統破壞、權限繞過、憑據外傳、隱藏動態刪除,以及風險操作前兩次連續分類器故障,都會在執行前拒絕。這些硬拒絕是單調的:後面的監聽器或分類器都不能把它改成允許。
刪除比普通寫入更窄。當前 Session 創建、且文件身份(設備號、inode、出生時間、類型)未變化的單個精確產物可以自動清理;單個已有文件或目錄,只有直接用戶消息精確要求刪除該目標後才分類;工作區外單個已有目標,精確授權後只給該次調用一次越權;多目標、glob、變量、管道輸入、嵌套解釋器刪除會後臺拒絕,要求 Agent 拆成每次一個可見字面目標。路徑被重命名、替換、換成符號鏈接,或新目錄裏混入舊文件後,不再享有自動清理資格。用戶沒有明確要求永久刪除時,Agent 指引會優先建議移動、備份或走版本控制刪除。
當任務明確需要寫到工作區外時,Agent 可以用官方 sandbox_permissions: danger-full-access 加上 justification 重試。對於新建、範圍很小且可恢復的精確目標,直接任務意圖本身就可以支持一次後臺授權,用戶不必再說一遍「我授權」。覆蓋或刪除已有數據,仍要求直接用戶消息精確指出該效果和目標。審查器會看到執行前的 existedBefore 文件事實,而且只可爲同一個 Agent、同一個 tool call、同一個模式和同一句理由返回一次 allowed-once;這不會改變 Session 的常駐權限。
子 Agent 怎麼繼承¶
官方進程內 Subagent、Workflow 的 agent()、Ralph spawn worker 和 AgentTeams 成員,都通過活動的 parentSession 鏈繼承 Auto 與 workspace 邊界,但每一次文件和 Shell 調用仍會單獨檢查。Goal 在當前 Agent 上續跑,權限不變。
子 Agent 使用 approval: never,不能自行申請 danger-full-access;需要越權時必須報告父 Agent。Codex、ACP、dsh-sdk 這類進程外 Provider 的內部工具由各自權限策略負責,不在本插件的工具註冊表邊界內。
安裝與啓用¶
使用前需要已經安裝 DeepSeek Harness。插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前請檢查源代碼倉庫和許可證。
社區目錄頁給出的安裝命令是:
dsh plugin add github:NanmiCoder/dsh-auto-mode
如需可復現安裝,目錄頁要求固定 commit 哈希。本文寫作時 main 分支最新提交爲 007c316840717fa4e30cd6fb7fdcbfba026aba2d,可以寫成:
dsh plugin add github:NanmiCoder/dsh-auto-mode#007c316840717fa4e30cd6fb7fdcbfba026aba2d
GitHub README 推薦的是按 Profile 安裝 npm 包,當前包版本爲 0.1.4:
dsh plugin --profile web add @nanmicoder/dsh-auto-mode
如果實際運行的不是 web 這個 Profile,把命令裏的 web 換成對應名稱即可。
也可以從源碼構建後本地鏈接:
git clone https://github.com/NanmiCoder/dsh-auto-mode.git
cd dsh-auto-mode
pnpm install
pnpm build
dsh plugin --profile web add .
修改源碼後需要重新執行 pnpm build。本地安裝會繼續鏈接到當前源碼目錄。package.json 要求 Node.js 爲 ^22.19.0 或 >=24.0.0,包管理器鎖定爲 pnpm 10.33.0。
啓用 Auto¶
安裝完成後,先檢查組合配置,再啓動 Web UI:
dsh --profile web --dump-config
dsh web
刷新 Web UI,在 Workspace Write 與 Full access 之間選擇 Auto,並確認風險提示。README 特別說明:Auto 圖標和風險確認彈窗只是針對已測試 DSH Web UI 的兼容增強,不是安全邊界。
配置分類器¶
默認不需要額外 Endpoint 或 API Key。Auto 使用當前 Session 的 DSH Provider 和模型。如果要在受信任的 Profile 裏固定專用路由,可以按倉庫文檔寫成:
- id: auto-permission-mode
config:
classifierProvider: deepseek-official
classifierModel: deepseek-v4-flash
classifierTimeoutMs: 30000
classifierMaxOutputTokens: 1024
插件在 cordis.patch.yml 裏插入的 id 就是 auto-permission-mode,並同時給官方 permission 預設表補上 auto 這一檔。完整決策順序、威脅模型、Windows 路徑處理、分類器載荷限制和官方源碼依據,見倉庫裏的 DESIGN.md。
分類器不可用、超時、輸出畸形或缺少模型路由時,前兩次連續失敗會拒絕該風險動作,讓 Agent 重試或改計劃;同一 Auto Session 第三次連續失敗纔回退到一次普通人工審批,避免任務卡在無限拒絕裏。成功的分類器響應會重置計數;調用方取消不計次。
適用場景與注意事項¶
這個插件適合已經在用 DSH 做日常編碼、希望少點批准、但又不願意把 Session 常駐到 Full access 的人。典型場景包括:在工作區裏構建和測試、安裝常規依賴、本地 Git commit、讓子 Agent / Workflow / AgentTeams 繼承同一套 workspace 邊界。
下面幾條邊界需要先看清楚,都來自 README 和 DESIGN.md,不是額外發揮。
- 本插件不能把 Full access 變安全。Full access 明確選擇
danger-full-access加never,已經站在無沙箱、免審批的權限上。Auto 的設計目標不是「在完全權限下猜哪些命令安全」,而是讓絕大多數任務保留常駐沙箱,只在業務確實需要時借出一次最小權限。 - 官方文件沙箱不限制讀取、網絡和外部服務。敏感讀取、網絡傳輸和外部副作用仍然走語義審查,但審查覆蓋的是識別得出來的語義,不是操作系統級隔離。
- Windows ACL 後端存在已公開的
Everyone/ hard-linkpartial邊界,不能按 Linux / macOS 的完整強制來理解。 - 插件無法攔截加載前執行的包生命週期腳本、繞開
ctx.tools的 Node 文件系統 / 進程調用、被攻破的 Harness Runtime,或在 Harness 外部啓動的命令。已經安裝的 Host 插件會以當前進程權限執行,屬於可信計算基的一部分。 - 沙箱不是事務性的。一條命令如果先在工作區內寫了文件,隨後撞上被拒絕的外部寫入,前面那些工作區改動會留下來。
- 分類器連續失敗、模型選錯、或者用戶原話含糊,都會改變實際體驗。倉庫文本和 Agent 自己寫的 justification 不能當授權用。
安裝前請閱讀源碼和 MIT 許可證。插件以當前 dsh 進程權限運行,安裝時可能執行代碼。需要可復現環境時,固定 commit 哈希,而不是一直追 main。
小結¶
dsh-auto-mode 給 DeepSeek Harness 補的是官方權限檔之間缺的那一層:Auto 常駐 workspace-write,用操作系統沙箱擋住工作區外寫入,再用確定性規則和語義分類器處理刪除、臨時包執行、網絡外傳和一次性越權。它不替代官方沙箱,也不能給 Full access 提供安全保證。
目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-auto-mode/
GitHub:https://github.com/NanmiCoder/dsh-auto-mode
npm:https://www.npmjs.com/package/@nanmicoder/dsh-auto-mode