前言¶
DeepSeek Harness(dsh)把智能體的工具執行權交給當前進程。權限開得松,開發會快很多;開得太鬆,一次誤判就會落到真實文件系統上。社區討論裏反覆出現的就是這個矛盾:有人問有沒有類似 Codex / Claude Code 的「替我審批」審查模式,覺得 Full Access 太讓人擔心(討論 #421);也有人在 Full Access 下測插件時,把整個家目錄刪掉了大半(討論 #461)。
一邊是每條命令都自己點批准,一邊是全部放行後祈禱模型別寫錯路徑。BlockRunAI 做的 dsh-clawrouter 走第三條路:日常讀寫、構建不打擾;命中風險規則的工具調用,先交給一個更強的模型看一眼,再由工具執行器強制放行、拒絕,或把決定交回給你。
本文按社區插件目錄頁、GitHub 倉庫 README / CHANGELOG、package.json 和許可證原文覈對後整理。DeepSeek Harness 官方倉庫的核心理念是「一切皆插件」;deepseek-harness-plugin.com 是獨立的社區目錄,與 DeepSeek / 幻方沒有官方從屬關係,不要把它當成官方應用商店。
這是什麼¶
dsh-clawrouter 是一個 DeepSeek Harness 插件,由 BlockRunAI 維護,許可證爲 MIT,主要語言是 TypeScript。npm 包名同樣是 dsh-clawrouter,當前倉庫 package.json 版本爲 0.10.1。社區目錄把它歸在「界面增強」,GitHub 星標爲 9(以目錄頁與倉庫頁面當前顯示爲準)。
它做兩件相關的事:
- 審查閘門(
blockrun-review):智能體提出危險工具調用時,先讓另一個更強的模型讀這次調用,給出 safe / dangerous / uncertain,由真實的工具執行器執行裁決,而不是靠提示詞勸阻。 - BlockRun 模型路由(
blockrun-llm):註冊名爲blockrun的 provider。認證方式是錢包簽名,不是 API Key;請求通過 x402 用 Base 鏈上的 USDC 按次結算。倉庫 README 寫明這條路由暴露 67 個模型(數量由npm run sync:models從即時 catalog 回寫,CHANGELOG 也記錄過「寫 70、實際 67」的更正)。
默認不會改你的主循環模型。dsh-base 仍然走 deepseek-official;這條路由只在你顯式指定、或審查閘門需要調用審查模型時使用。倉庫自己的說法是:DeepSeek 繼續跑主循環,插件補的是它覆蓋不到的能力——更強的審查模型,以及視覺等多廠商模型。
核心功能¶
1. 審查閘門:只收緊,不放寬¶
閘門默認是關的(enabled: false)。打開之後,命中風險規則的調用會先送給審查模型(默認 anthropic/claude-opus-5):
| 結論 | 接下來發生什麼 |
|---|---|
| safe | 原樣進入你已有的沙箱、權限和審批鏈 |
| dangerous | 拒絕,並給出智能體可以據此調整的理由 |
| uncertain | 交給你,彈出正常的審批提示 |
審查通過並不等於直接執行。README 寫得很清楚:它只會收緊策略,不會放寬;升級給人處理時也一樣——如果更嚴格的權限規則本來就會拒絕這次調用,你拿到的是那個拒絕,而不是一個審批彈窗。它站在權限系統前面,並不替代權限系統。
審查模型不可達時,默認 onReviewerFailure: ask(交給你),也可以改成 deny 給無人值守任務用。倉庫強調兩點:失效時絕不默默放行;也不會因爲一次網絡抖動就把整個會話卡死。
哪些調用會進閘門。 規則刻意做窄。讀取、編輯、構建默認不審。內置規則盯的是遞歸刪除、裸寫磁盤、fork 炸彈、curl … | sh、強制推送與 hard reset、chmod 777、sudo,以及碰 ~/.ssh、~/.aws、/etc/passwd 的操作;另外還包括不叫 rm 但同樣在刪東西的命令,例如 git clean -fdx、find … -delete、git checkout -- .、terraform destroy,以及 npm publish。
提到一條危險命令不等於執行它:grep -rn "rm -rf" docs/ 不會被攔。把危險命令寫進 Makefile、清理腳本或 README 也不算執行。文件正文類參數(content、new_string、diff 等)默認當數據看;真正去執行那份文件,是另一次工具調用,閘門仍會讀。CHANGELOG 0.10.0 補了一類更安靜的風險:寫入 .git/hooks/pre-commit、CI workflow、shell 啓動文件、npm postinstall 等「現在寫、以後跑」的文件。
規則可以自己加。例如禁止往生產環境部署:
extraRules:
- name: no-prod-deploy
pattern: "deploy\\s+--env[= ]prod"
一直開着要花多少。 下面這組數字來自倉庫 README 自己的測試語料,不是第三方評測:日常操作 0/59 觸發(含只是提到危險命令的情況);39 條危險命令未漏報;git hook / CI / postinstall 等「以後才執行」的文件 10/10;審查模型默認只看到被標記的那一次調用(約 356 token),不是整段會話。命中時,README 在 claude-opus-5、reviewerMaxTokens=512 下測得約 \(0.0057**、延遲約 3 秒。0.10.0 之前審查請求會繼承 Opus 自報的 128,000 輸出上限,單次曾到 **\)0.28–0.33;CHANGELOG 0.10.1 把這件事修掉了,並加了 reviewerMaxTokens。
這些數字有測試守着,但也只對當前規則和語料成立。匹配器沒標出來的命令,審查模型根本看不到——倉庫自己把「召回率」寫成了所有聲明的上限。
2. /gate:先確認網是開着的¶
閘門可以在「看起來一切正常」的情況下是關的:默認 enabled: false;profile 的 patch 會整塊替換某一行的 config 而不是合併鍵;/review 無論閘門開關都會註冊。所以 /review 能用,只說明插件加載了,完全不說明工具調用有沒有被審查。
/gate # 閘門是否 armed,以及當前配置
/gate drill # 把一條危險命令送進匹配器和真實審查模型,不會送給任何工具
/gate drill 使用的示例命令是 rm -rf / --no-preserve-root。它分兩段彙報:規則不再匹配是策略問題,審查模型連不上是錢包或模型問題。運行時這兩種都會塌成「交給你」,和「閘門正常工作」看起來一樣。drill 的代價是一次審查調用。
3. /review 與 /spend¶
/review <粘貼 diff、方案,或智能體給出的結論>
/spend
/review 用同一個強模型審你指定的內容。README 指向過 討論 #475:智能體讀到了關鍵證據,卻先下了錯誤結論。
/spend 列出本進程啓動以來這條路由的花費:總額、分模型,以及 token 成本與固定費用。需要記住的計費方式是:按請求報價結算——輸入規模加上請求裏的 max_tokens,不論模型實際吐出多少。小請求有約 **\(0.002** 的下限(\)0.001 最低支付額 + $0.001 手續費)。README 還寫明:插件本身不寫會話花費事件,也不寫 ~/.blockrun/cost_log.jsonl;錢包餘額纔是權威。讀 402 報價本身不花錢。
4. 一個錢包,67 個模型¶
blockrun-llm 註冊 blockrun 路由。沒有按廠商逐個申請 API Key 的流程:本地錢包簽名即認證,USDC 走 x402。這對審查模型尤其有用,因爲默認審查模型是 Anthropic 的 Opus,不在 DeepSeek 官方路由裏。
裝上這條路由不會把默認對話模型改成 BlockRun。需要時再顯式指定。倉庫也提供 auxiliaryModel,隻影響 Harness 自己標記的維護調用(compaction、會話標題),對話請求不會被改道。README 給的例子是把壓縮總結挪到便宜模型:
- id: blockrun-llm
config:
auxiliaryModel: deepseek/deepseek-chat
一次約 10 萬 token 的 compaction,README 按即時 402 報價寫的是:Claude Opus 5 大約 $0.90,DeepSeek V4 Flash 大約 $0.026。這是倉庫自己的測量,用來解釋爲什麼維護調用值得單獨指定模型。
智能路由 blockrun/auto 尚未接入。原因寫在 README:虛擬模型必須報告一個上下文窗口,Harness 用它決定何時壓縮;報太大或太小都會出問題。在此之前請直接指定模型 id。
5. 視覺:白名單,不盲信網關標籤¶
DeepSeek 官方路由沒有視覺模型。0.10.0 起,這條路由可以把消息裏的圖片序列化成 OpenAI content parts。配置項是 visionModels,默認是倉庫實測能看圖的四個模型;README 示例爲:
- id: blockrun-llm
config:
visionModels: [google/gemini-3.5-flash]
網關 catalog 裏帶 vision 標籤的條目有 35 個。倉庫對其中 10 個發了同一張內聯 PNG:Google 的三個 Gemini 以及 moonshot/kimi-k3 答對;OpenAI 若干模型是收了錢之後 HTTP 400;xai/grok-4.5 是收了錢之後 503;Anthropic 的 Sonnet / Opus 則返回 HTTP 200,把上游 400 當成助手文本流回來。所以插件要求兩個信號同時成立:網關打了 vision 標籤,並且模型出現在 visionModels 裏。
同一份 README 末尾的「已知限制」仍寫着「圖片會被明確拒絕……視覺能力在計劃中」。這與 0.10.0 的 CHANGELOG、以及同文檔「視覺」一節矛盾。本文以 CHANGELOG 與視覺專節爲準;如果你讀到舊條目,按更新的那兩處理解。
安裝與啓用¶
社區目錄頁給出的安裝命令是:
dsh plugin add github:BlockRunAI/dsh-clawrouter
需要可復現安裝時,按目錄頁說明固定 commit 哈希:
dsh plugin add github:BlockRunAI/dsh-clawrouter#<commit>
倉庫 README 的快速開始則寫的是按 profile 安裝 npm 包名(示例 profile 爲 web):
dsh plugin --profile web add dsh-clawrouter
export BASE_CHAIN_WALLET_KEY=0x... # 也可以存進 credentials 服務
兩條都能裝到當前配置裏。目錄頁這條是社區目錄的原文;README 這條帶了 --profile。按你實際使用的 profile 選擇即可。
安裝時打印六條 ✕ missing peer,倉庫說這是預期現象。 這些包由 harness 在運行時提供,第一方 bundle 也用同樣的 peer 聲明;如果改成直接依賴,profile 裏會出現第二份 cordis。倉庫在乾淨環境測過:profile 能組裝,dsh --profile web --dump-config 能列出 blockrun-llm 和 blockrun-review 兩行。
錢包不是 API Key:
- 已經用過 BlockRun 其他工具:SDK 常見路徑是
~/.blockrun/.session,ClawRouter 常見路徑是~/.openclaw/blockrun/wallet.key。存在哪個就導出哪個,例如export BASE_CHAIN_WALLET_KEY=$(cat ~/.blockrun/.session)。 - 還沒有錢包:
npx -y @blockrun/clawrouter會生成一個並打印地址。記下地址後停掉進程,往該地址轉入 Base 鏈上的 USDC,再導出私鑰。
插件不會自己去讀這兩個文件,只讀你在配置裏聲明的憑據引用(默認環境變量名 BASE_CHAIN_WALLET_KEY)。密鑰不要寫進 cordis.patch.yml。
README 的數量級是:Base 鏈上 5 美元 USDC,按 $0.002 下限大約夠 2500 次閘門審查,但只夠大約 5 次帶 10 萬 token 上下文的 Opus 調用。按你實際怎麼用這條路由來充值,而不是按下限估算。
閘門默認關閉。要啓用,在對應 profile 的 cordis.patch.yml 裏打開。patch 會整塊替換該行 config,覆蓋時把需要的鍵一起寫上:
- id: blockrun-review
config:
enabled: true
reviewerProvider: blockrun
reviewerModel: anthropic/claude-opus-5
package.json 聲明的 Node 引擎是 ^22.19 || >=24。CHANGELOG 還提到:在精簡 Node 鏡像裏安裝 dsh 時,node-pty 可能需要本機有 python3、make 和 g++,否則會在編譯階段失敗;這是 harness 依賴的問題,報錯文案不一定點名本插件。
典型用法¶
下面幾步都來自倉庫文檔,可以按原樣做。
1. 裝上之後先看閘門狀態,不要假設已經在攔命令。
/gate
若顯示未啓用,按上一節把 enabled: true 寫進 profile。然後再跑一次:
/gate drill
確認風險匹配器和審查模型都能工作。這一步會花一次審查調用,但不會執行那條刪除命令。
2. 主循環繼續用 DeepSeek,審查走更強模型。
不要把緩存命中的日常對話改道到這條路由上。README 的對比是:一次緩存命中的智能體輪次,直連 DeepSeek 大約 $0.000056;走 BlockRun、約 22K 輸入時大約 $0.007。審查模型保持和智能體不同且更強,這是閘門的設計前提。reviewerModel 寫錯時,被標記的命令會升級或被拒絕,失敗信息裏會帶「BlockRun does not serve model … Did you mean …?」,看起來會像閘門在謹慎工作,所以更要用 /gate 確認配置。
3. 需要時再讓強模型看一段 diff 或結論。
/review 請指出這段改動裏有沒有破壞性副作用
這和自動閘門是兩套入口:一個攔工具調用,一個審你貼進去的文本。
4. 看花費以錢包爲準。
/spend
/spend 看不見「已經付款但隨後失敗」的請求。大 max_tokens 即使回覆很短也會按報價計費。
適用場景與注意事項¶
比較適合這些情況:
- 希望 Full Access 少點手點批准,又不想完全裸奔
- 需要 Claude / GPT / Gemini / Grok 這類 DeepSeek 官方路由沒有的模型,尤其是當審查模型
- 需要給智能體看圖,並且接受白名單而不是網關標籤
- 能接受用 Base 鏈 USDC 按次付費,而不是再申請一套廠商 API Key
使用前先看這幾條邊界:
- 插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。目錄頁和本文都建議:安裝前檢查源代碼倉庫和許可證;需要可復現安裝時固定 commit。
- 這不是操作系統沙箱,也不能覆蓋所有工具形態。閘門只處理匹配到的調用;匹配器漏掉的,審查模型不會看到。
- 免費 NVIDIA 模型被倉庫明確寫成「冒煙測試,不是主力」。它們可能把提示詞用於服務改進,不要拿私有代碼去跑,更不要當審查模型。
- 審查模型只看到被標記的那一次工具調用,看不到整個倉庫。
- 中斷請求會立刻停止向會話投遞,但底層 HTTP 請求目前還取消不了,要等
@blockrun/llm支持AbortSignal。 - 上一輪的
reasoning_content不會回傳,以免某個廠商要求的字段被另一家拒絕;推理模型做多步工具調用時,效果可能略降。 - 不要把本插件和同組織的獨立產品 ClawRouter 混爲一談。ClawRouter 是另一套本地代理 / 路由,模型數量在不同文檔裏也不相同;本文只採用
dsh-clawrouter倉庫當前寫明的 67。
結尾¶
dsh-clawrouter 要解決的不是把 DeepSeek 換掉,而是給危險工具調用加一道由執行器強制的審查,並用同一條錢包路由補上審查模型和視覺等多廠商能力。閘門默認關閉、失效不放行、日常操作儘量不打擾——這些設計都寫在倉庫自己的測試和文檔裏,而不是宣傳口徑。
目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-clawrouter/
GitHub:https://github.com/BlockRunAI/dsh-clawrouter