前言¶
在 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