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 等高風險操作意外執行。

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

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

小夜