前言¶
DeepSeek Harness(DSH)在 workspace-write 下,Agent 可以直接改工作區裏的文件。系統提權確認框裏往往是英文路徑和 $ % # 混在一起,掃一眼很難判斷點「同意」後會刪什麼、改什麼。全開全權時,誤點一次就可能造成大面積刪庫或動到系統目錄。
下面介紹社區插件 dsh-fileguard(維護者 Wldpm,分類 admin-security)。它在模型動手刪、改文件之前多攔一道:要求用自然語言說明影響,再由你通過一次性 token 決定是否放行;同時用四檔策略和硬限制保護盤根、系統目錄等。這是軟約束,不是操作系統級安全邊界,但能把你從「看不懂就點同意」里拉出來。
這是什麼¶
dsh-fileguard 是給 DeepSeek Harness 用的文件守衛插件。在全權模式下,對大部分危險刪除與寫入先攔截,逼模型講清楚「動的是什麼、有什麼用、刪改後會怎樣」,再由你用 token(相當於鑰匙)放行。模型自己產生的臨時文件可走旁路臺賬,在窗口期內免審。
倉庫:https://github.com/Wldpm/dsh-fileguard
社區目錄頁:https://www.skillhub.cn/plugins/Wldpm/dsh-fileguard
當前 package 版本爲 0.2.1,許可證 MIT。
硬限制:四類永遠不放行¶
無論檔位、是否開發者模式,下面四類在規則範圍內一律不放行(部分僅針對刪除或寫入):
| 類別 | 說明 |
|---|---|
| 盤根刪除 | 如 C:\、D:\、U 盤盤根等;僅刪除時生效,往盤根複製或列舉不攔 |
| 系統目錄刪除 | C:\Windows、Program Files、ProgramData、$Recycle.Bin、Recovery 等 |
| 通配符刪除/寫入 | 如 Remove-Item *.log;只讀如 Get-ChildItem *.txt 不受限 |
| 改插件自身配置 | 配置項值只能通過設置頁或斜槓命令改;cordis.patch.yml、本插件 package.json 的模型寫入會被攔,讀不限 |
原生 shell 命令與 dsh-ops 的 ops_* 工具走同一套規則,例如 ops_remove 與 Remove-Item 判定一致。
四檔策略¶
用斜槓命令或設置頁切換檔位:
| 檔位 | 命令 | 刪除 | 寫入/改盤 | 盤根 | 系統目錄·刪 | 系統目錄·改 |
|---|---|---|---|---|---|---|
| 純白名單 | /guard-readonly |
攔死 | 攔死 | 攔死 | 攔死 | 攔死 |
| 高攔截 | /guard-high |
攔一次 | 攔一次 | 攔死 | 攔死 | 攔死 |
| 默認 | /guard-default |
攔一次 | 放行 | 攔死 | 攔死 | 攔一次 |
| 低守衛 | /guard-low |
放行 | 放行 | 攔死 | 攔死 | 攔一次 |
- 攔死:重試也不放行,提示中會說明不要再試。
- 攔一次:生成一次性 token;模型需從你處拿到 token 後重發才放行,且只覆蓋該批目標。
- 放行:直接執行,模型無額外提示。
攔一次之後的流程¶
被攔後,模型會收到提示,大致需要:
- 說明要動的路徑、用途及刪改後果。
- 你在聊天框執行
/guard-gettoken取得 16 位 token(輸出只進日誌,模型上下文看不到)。 - 模型帶 token 重發,例如在命令末尾加註釋:
Remove-Item 'D:\work\old.log' # fg:<token>;ops_*無命令行時原樣重發調用即可。
AI 臨時文件免審¶
插件維護旁路臺賬(state/ai-created.json),記錄模型通過 write/edit 或 Set-Content、Out-File 等寫入過的路徑。在 低守衛 / 默認 檔下,刪除臺賬上的路徑可直接放行。
限制包括:目錄路徑不放行、通配符不放行、高攔截/純白名單檔不生效;默認窗口 8 小時,臺賬最多 5000 條。用 /guard-temp 循環切換 1→4→8→24→72→關,或 /guard-temp 12 設小時數,/guard-temp 0 關閉。
狀態目錄與配置¶
敏感狀態在插件目錄下 state/(tokens.json、ai-created.json)。對該目錄的讀寫一律攔死,避免模型窺視 token 與臺賬。檔位、窗口等寫在 profile 配置層,設置頁可改;直接改 cordis.patch.yml 或插件 package.json 的寫入會被攔。
主要配置項(設置頁「文件守衛」或 cordis.patch.yml):
| 字段 | 默認 | 說明 |
|---|---|---|
enabled |
true |
總開關 |
policy |
"default" |
low / default / high / readonly |
tempHours |
8 |
臨時文件免審窗口(小時),0 關閉 |
devMode |
false |
開發者模式:普通刪改與 state/、配置文件可放行並記日誌,盤根與系統目錄仍硬攔 |
protectedDirs |
見 README | 額外保護目錄列表 |
斜槓命令彙總:/guard-low、/guard-default、/guard-high、/guard-readonly、/guard-temp [小時]、/guard-gettoken、/guard-dev [on|off]。
安裝與啓用¶
前提:插件目錄需能解析 @deepseek-ai/schemastery;用 link: 安裝時若不在 profile 的 node_modules 搜索路徑下,可能要手動建 junction(見 README「依賴坑」)。
方式一,從本地目錄安裝:
dsh plugin --profile <profile名> add <本倉庫絕對路徑>
方式二,手動掛載:
- 將倉庫放到例如
~/.dsh/plugins/dsh-fileguard。 - 在目標 profile 的
package.json增加dependencies裏的"dsh-fileguard": "link:<倉庫絕對路徑>",並把"dsh-fileguard"寫入dsh.profile.bundles。 - 在 profile 目錄執行
pnpm install。 - 重啓 DSH。
不要用 cordis.patch.yml 的 - insert: 硬塞插件,否則設置頁與斜槓命令可能報配置被 home patch 覆蓋。正確做法是用 bundles 登記;cordis.patch.yml 裏最多保留開關,例如:
- id: dsh-fileguard
disabled: false
若加載報 Cannot find package '@deepseek-ai/schemastery',可在插件目錄建 junction 指向 profile 的 node_modules\@deepseek-ai(PowerShell 示例見倉庫 README)。
驗證:重啓後查看日誌(默認 %TEMP%\dsh-fileguard.log),應出現 apply; tools=... 與 commands: /guard-low ... 兩行;設置頁左側應有「文件守衛」。
已知邊界(務必閱讀)¶
插件以當前 DSH 進程權限運行,安裝前應自行查看源碼與 MIT 許可證。README 明確這是軟約束:擋不住執意刪文件的模型,例如 [System.IO.File]::Delete()、fs.rmSync、run_code 裏拼 JS、write/edit 寫非 state/非配置路徑等繞過方式。它能做的是抬高門檻,讓你有時間踩剎車;物理隔離需依賴 OS ACL 或更嚴格的 workspace-write 策略。
調試時可 /guard-dev on 臨時放寬(盤根與系統目錄仍攔),用完 /guard-dev off。
結尾¶
在全權模式下仍希望「先看懂再點頭」,dsh-fileguard 用攔截、自然語言說明和 user-only 的 /guard-gettoken 把決定權還給你,並用檔位與硬限制兜住盤根和系統目錄。社區目錄與 GitHub 倉庫相互獨立,與 DeepSeek / 幻方無官方從屬關係;需要細節時以 README 爲準。