前言¶
在 DeepSeek Harness(DSH)里,智能体通过 bash 工具执行 shell 命令。权限预设可以控制沙箱与审批策略,但很难按「命令形态」或「当前工作目录」做细粒度拦截。若你希望在默认放行的前提下,对特定危险命令弹审批或直接拒绝,dsh-command-guard 就是面向这一需求的插件。
下面介绍插件定位、规则模型、安装步骤与典型配置。事实以 GitHub 仓库 README 为准;社区目录页见 SkillHub。
这是什么¶
dsh-command-guard 由维护者 john-walks-slow 发布,分类为 admin-security。一句话:DSH 的命令级守卫——默认一切放行,命中你配置的规则时 ask(弹审批等你点)或 deny(直接拒绝)。
插件走 DSH 保留的 tools/pre-execute 扩展点,只拦 bash 工具调用,读取其 command 与 workdir 字段;其它工具不经过守卫。文档说明其不联网、不读写你的文件、不执行任何命令;ask / deny 只是把决定交回 DSH 的审批与工具流水线。许可证为 MIT,当前 package 版本为 0.1.0。
规则怎么匹配¶
规则有两个维度:
command:整条命令行的正则workdir:工作目录正则
两者都填时是「且」关系;只填一个则另一维不限制。第一条命中的规则生效,其余命令一律放行。
正则匹配的是整条命令行的文本。命令里只要出现匹配形态就算命中——脚本示例、注释、乃至 grep 的目标都算。因此不要把危险命令的原文直接写进命令行。
每条规则需指定 action:
ask:依赖会话的 approval 策略;能弹窗则等你确认deny:直接拒绝,不依赖审批策略
ask 需要应答者(Web 客户端自带审批 UI)。应答者缺失或策略为 never 时按 fail-closed 拒绝——绝不放行。若会话落在 danger-full-access 等 approval: never 预设,ask 会退化成硬拒:命令直接失败并说明命中哪条规则,不会弹窗。
安装与启用¶
装插件和「让 ask 能弹出来」是两步——DSH 里这是两个独立的旋钮,本插件只管前者。
第一步:装插件¶
dsh plugin --profile web add github:john-walks-slow/dsh-command-guard
使用 pnpm ≥10 时,按提示把包名加进 profile 的 pnpm-workspace.yaml → allowBuilds,再重跑一次(插件从源码构建,prepare 是自包含的)。建议 pin 到 commit:github:john-walks-slow/dsh-command-guard#<sha>。
第二步:加「全权 + 审批」权限预设(可选但常用)¶
出厂预设里没有「danger-full-access 沙箱 + approval: ask」这一组合(danger-full-access 绑死 approval: never;workspace-write 会限制文件写入)。若需要弹审批,可在 profile 的 cordis.patch.yml 里增加一档:
- id: permission
name: "@deepseek-ai/dsh-permission-presets"
config:
presets:
guarded:
sandbox: danger-full-access
approval: ask
name: Guarded
defaultPreset: guarded
注意:上面片段是整块替换 permission 的 config。若你原本还配着别的预设(read-only / workspace-write 等),要一并写全,否则会被清掉。
不加预设也能用,只要会话的 approval 策略本来就是 ask(DSH 未显式设置时的默认值)。
典型规则配置¶
在 profile 补丁中,id 行需保持 command-guard(设置页按这个 id 找命名空间)。示例来自官方 README:
- id: command-guard
name: dsh-command-guard
config:
rules:
- name: git-destructive
command: "(^|[;&|]\\s*)git\\s+((reset|clean|rebase|filter-branch|restore)\\b|checkout\\s+(-f\\b|--\\s+\\.|\\.\\s*($|[;&|]))|push\\s+(-f\\b|--force)|worktree\\s+remove|stash\\s+(drop|pop))"
action: ask
- name: disk-destructive
command: "(^|[;&|]\\s*)(sudo\\s+)?(rm\\s+(-[a-zA-Z]+\\s+)*(/(\\s|$|\\*)|~(\\s|$))|mkfs\\.|dd\\s+[^|;&]*of=/dev/|shutdown|reboot)"
action: deny
- name: system-dirs
workdir: "^/(etc|opt)(/|$)"
action: ask
含义简述:
git-destructive:易丢工作区改动或改写历史的 git 子命令 → 弹审批disk-destructive:灾难性磁盘/系统操作 → 直接拒绝system-dirs:在/etc、/opt下执行任何 bash 命令 → 弹审批
设置页¶
插件带 web 端面板:设置页里会多出一节 Command Guard,可增删改规则、逐字段编辑。改动写回 profile 补丁,profile 热加载后 apply 带着新规则重跑,不用重启 DSH。用文本编辑器直接改 profile 同样有效。
适用场景与注意¶
适合在 DSH Web profile 下跑智能体、又希望保留较大沙箱权限(例如 danger-full-access),同时对 git 破坏性操作、删根路径、系统目录等加一道命令级闸门的团队或个人。
安装前建议自行查看 GitHub 源码 与 MIT 许可证。插件以当前 DSH 进程权限运行;规则只覆盖 bash,不能替代完整的权限与沙箱策略设计。
社区插件目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,属于 DSH「一切皆插件」生态中的第三方条目。
结尾¶
dsh-command-guard 用默认放行 + 可配置正则规则,在 DSH 执行 bash 之前插入 ask 或 deny,与权限预设里的 approval 策略配合使用。需要细粒度命令守卫时,可按 README 安装并调整 cordis.patch.yml 中的 rules。
- 目录页:https://www.skillhub.cn/plugins/john-walks-slow/dsh-command-guard
- GitHub:https://github.com/john-walks-slow/dsh-command-guard