Barricade:编码 agent 破坏性命令拦截闸门

前言

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 契约以及 gate shell 包装器。
  • 审计日志:拦截和确认记录以 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 等高风险操作意外执行。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜