前言¶
DeepSeek Harness (DSH) 的核心理念是“一切皆插件”。在使用编码 agent 进行开发时,agent 工具调用有时会执行破坏性操作,例如 rm -rf /、git reset --hard 或 git push --force。这些命令一旦落地,往往无法撤销。Barricade 是一个针对这一场景的拦截闸门,它通过语义级解析在命令执行前判定风险,并要求人工确认,从而防止意外数据丢失。
是什么¶
Barricade 是一个针对编码 agent 的破坏性命令拦截闸门。它由 JohnXu22786 维护,基于 MIT 许可证开源。其核心功能是在 rm -rf、git reset --hard 等命令真正落地前进行解析和判定,要求人工确认。它不沙箱化,也不限制 agent 的能力,仅专注于拦截那些即使沙箱也无法阻止的破坏性操作(如覆盖远程历史、删除未跟踪文件等)。
核心功能¶
Barricade 的核心能力集中在命令解析与风险判定上:
- 语义级命令解析:不依赖简单的字符串匹配。它内置了 POSIX 词法分析器,能够识别引号、转义符、命令替换
$(...)、子 shell 以及管道链。这意味着sudo rm -rf /、bash -c "rm -rf /"或eval "rm -rf /"等复杂写法都无法绕过检测。 - 41 条内置规则:覆盖了多种危险操作。包括 Git 的 13 种危险形式、按范围分级判定的 rm、dd/mkfs/shred/chmod/chown、find -delete 以及 curl|sh 等组合。
- 三种判定模式:提供
relaxed(宽松)、balanced(平衡,默认)、vigilant(警惕)三种模式。根据严重程度决定放行、询问或拒绝,在警惕模式下无法解析的输入会默认拒绝。 - 交互式确认:在 TTY 环境下,系统会显示命令和匹配的规则。支持会话内确认、永久放行(写入策略)、显示详情等操作。
- 跨 Harness 集成:判定核心与 Harness 解耦,提供三种集成形式:DSH 插件、通用 stdin-hook JSON 契约以及
gateshell 包装器。 - 审计日志:拦截和确认记录以 JSONL 格式持久化,敏感内容会自动脱敏。
安装与启用¶
Barricade 需要运行在 Node.js >= 18.13 环境下,且无其他运行时依赖。
1. 安装插件¶
在目标 DSH profile 中添加插件:
dsh plugin --profile demo add github:JohnXu22786/safety-net
2. 加载配置¶
安装后,需要加载该 bundle。可以通过本地目录或包名加载:
# 方式一:通过本地目录加载
dsh plugin --profile web add ../dsh-barricade
# 方式二:通过已发布包名加载
dsh plugin --profile web add dsh-barricade
# 启动 Harness
dsh --profile web
加载成功后,cordis.patch.yml 会在配置层插入插件定义。
DSH 插件集成¶
Barricade 作为 DSH 插件运行时,监听 tools/pre-execute 事件。如果判定结果为拦截,它会抛出 BarricadeBlocked 异常,导致工具调用失败,并将原因反馈给模型。
配置项¶
插件支持以下配置(可选):
| Key | Default | 描述 |
|---|---|---|
mode |
"deny" |
deny:匹配即拦截;ask:通过 ctx.approval 服务请求人工确认,拒绝或服务不可用时视为拦截 |
toolNames |
common shell name list | 仅拦截指定的工具名称,也可通过环境变量 BARRICADE_TOOLS 覆盖 |
commandPath |
"args.command" |
工具调用中命令文本的 dot-path 路径 |
level |
policy file | 指定判定等级,支持 relaxed / balanced / vigilant |
配置示例¶
在 cordis.patch.yml 或 --patch 覆盖层中添加:
- insert:
- id: barricade
name: dsh-barricade
config:
mode: ask
toolNames: [bash, run_code, run_command]
典型用法¶
命令行工具¶
Barricade 提供独立的 CLI 工具,可直接分析命令风险:
# 判定命令,放行返回 0,拦截返回 1
barricade check -c "rm -rf /"
# 分析命令并输出详细 JSON 信息(不执行)
barricade analyze -- -c "git push --force origin main"
stdin-hook 集成¶
对于支持 PreToolUse 风格钩子的 Harness,可以使用 gate 模式:
echo '{"command":"git push --force origin main"}' | node bin/barricade.js hook
输出格式符合约定的 JSON 契约,包含 action、severity 和 reason。
注意事项¶
- 运行机制:插件以 DSH 进程的权限运行,而非沙箱隔离。这要求安装前应检查源码与许可证。
- 失败安全:在非 TTY 环境下,默认行为为拒绝(fail-safe),即无法进行交互确认时直接拦截。
- 接口演进:DSH 目前处于开发者预览阶段,接口可能演变。插件内部通过防御性编程识别工具调用形状和
ctx.approval的多种形式以保持兼容。
总结¶
Barricade 为编码 agent 提供了一道针对破坏性命令的防线。通过语义级解析和灵活的判定模式,它能够在不限制 agent 能力的情况下,有效防止 rm -rf 或 git push --force 等高风险操作意外执行。