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