前言¶
在 DeepSeek Harness(DSH)裏,agent 通過 bash、pwsh 等工具直接調用宿主 shell。模型一旦誤判路徑或意圖,一條 rm -rf 就可能落在 $HOME 或工作區根上,且難以撤銷。DSH 自帶的 workspace-write、approval 與 Auto review 各管一層,但不會在「工具體真正跑起來之前」專門攔刪除語法。Cmd Guard(倉庫名 DSHCmdGuard)是社區維護的 host 側命令安全護欄:在 tools/pre-execute 階段做確定性篩查,必要時走緊湊 LLM reviewer,並提供可恢復的 trash_move / trash_restore,避免 agent 用 shell 永久刪文件。維護者爲 Bismuth-209,分類爲 admin-security;公開版由原名 Delete Guard 更名爲 Cmd Guard,當前爲 v0.1.0 developer preview,MIT 協議開源。
這是什麼¶
Cmd Guard 是 DSH 的 bundle 插件(npm 包名 dsh-cmd-guard),不新增權限預設、不改 sandbox/approval 行爲。它在 host 側註冊 pre-execute 監聽器,對 in-process agent 的工具調用生效;除 auto 預設外,各權限級別下都會參與(auto 下僅運行確定性非 LLM 篩查,LLM 判定交給 DSH 自帶 Auto review)。設計背景包括:在 deepseek-flash 曾嘗試刪除維護者 $HOME 的事件之後,聚焦防止誤刪;並支持對 SSH 等遠端命令做解析與 fail closed 處理。
核心功能¶
pre-execute 與放行鏈¶
工作方式可概括爲:工具調用進入 tools/pre-execute → Cmd Guard 做確定性篩查(所有非 auto;auto 下也跑確定性部分)→ 按風險路由 LLM reviewer 或只讀 investigator → 最終仍調用下游 next(),進入既有 workspace-write / approval / Auto review。插件只讀權限預設與 sandbox 策略,不寫 permission/preset、sandbox/mode、approval/policy。
確定性攔截¶
拒絕或路由複覈的典型模式包括:rm、Remove-Item、del、rmdir、find -delete、xargs rm、嵌套字面 shell 刪除與動態調用;識別「腳本中含刪除模式」的命令;解析 docker 刪除以及 SSH/rsync/scp/sftp,對寬泛或不可判定的遠端刪除默認 fail closed。
回收站工具與 prompt¶
新增 trash_move、trash_restore 及一段 system prompt:被護欄拒絕時,要求 agent 不要換語法重試刪除,而應說明意圖並向用戶確認;清理工作區內容時用 trash_move,不要用 shell 永久刪除。回收站默認位於會話工作區內 tmp/.cmd-guard-trash(同卷 rename,非 DSH_HOME 全局目錄)。
複覈與遠端探針(可選)¶
對 review 類決策可啓用緊湊 LLM reviewer(reviewer.enabled,默認 true)。可選 in-process 只讀 investigator(默認關閉)與遠端 SSH 固定只讀探針(stat、list、read 等,默認關閉);無法收集遠端事實時默認拒絕。
安裝與啓用¶
前提:DSH >= 0.2.1-rc.3,Node.js >= 24。
從 GitHub 安裝(README 推薦方式):
dsh plugin add github:Bismuth-209/DSHCmdGuard
安裝後重啓一次 DSH。bundle patch 會插入 cmd-guard 主機插件與 cmd-review-investigator 只讀複覈 preset。
默認配置見倉庫內 cordis.patch.yml 的 cmd-guard 段;常用字段包括:commandTools(默認 bash、pwsh、terminal_send)、trash.relativeRoot、trash.maxPaths(默認 20)、reviewer.enabled / reviewer.timeoutMs(默認 20000)、investigator.enabled(默認 false)、remote.enabled(默認 false)、audit.root(默認 $DSH_HOME/cmd-guard,JSONL 脫敏審計)。
典型用法與行爲¶
- 安裝並重啓後,agent 提交 bash/pwsh 等命令時會先經 Cmd Guard 分類;明確刪除類命令被拒絕或進入複覈。
- 需要清理文件時,由 agent 調用
trash_move移入工作區回收站;誤移可用trash_restore恢復(目標須在當前工作區內)。 - 若啓用
remote.enabled並配置remote.allowedHosts等 SSH 參數,對需複覈的遠端命令會跑固定只讀探針,再把事實交給 reviewer。
本地跑插件自帶測試(不執行真實刪除):
node --test "tests/*.test.mjs"
適用場景與注意¶
適合在 DSH 日常開發、vibe coding 或自動化 agent 中,希望多一層「刪文件前攔一手、儘量可恢復」的場景。README 明確:這是策略層,不是沙箱;不替代 workspace-write、Docker 或遠端主機權限;靜態分類無法證明任意腳本絕對安全;LLM reviewer / investigator 可能誤判,超時與不確定一律按拒絕處理。代碼全程 AI vibe coding 生成,用於關鍵環境前請自行審查源碼與測試。插件以當前 DSH 進程權限運行;遠端探針會建立 SSH 並讀取遠端信息。live reviewer 測試需調用方臨時提供 DEEPSEEK_API_KEY 環境變量,倉庫不含真實 key。
結尾¶
Cmd Guard 在 agent 執行 shell 之前攔截刪除類操作,並用回收站工具與可選 LLM 複覈降低誤刪風險;與 DSH 既有審批鏈疊加而非替代。更多說明見社區目錄與倉庫:
- 目錄頁:https://www.skillhub.cn/plugins/Bismuth-209/DSHCmdGuard
- GitHub:https://github.com/Bismuth-209/DSHCmdGuard