dsh-tool-policy:在 DeepSeek Harness 工具執行前做 allow / ask / deny

前言

在 DeepSeek Harness(DSH)裏,工具調用不只有“能不能執行”的問題。內置工具、第三方工具和 MCP 工具進入同一個運行路徑後,部署方常常需要按工具名和參數做統一約束:某些只讀工具放行,某些 shell 或外部工具要求審批,某些刪除類工具直接拒絕。

dsh-tool-policy 是一個針對 DSH 的社區插件,用來在工具調用執行前插入一層聲明式策略。它不是 DeepSeek AI 維護的官方組件,也不等同於 DSH 官方的能力沙箱。下面介紹它的能力、安裝方式和典型配置。

這是什麼

一句話定位:dsh-tool-policy 允許、詢問或拒絕 DeepSeek Harness 的工具調用,且發生在工具執行之前。

它面向的是單次工具調用,不是一次會話級的授權,也不是一組能力的運行時隔離。它提供 deny-by-default 的策略層:默認拒絕,只有命中顯式規則才進入對應處理。它覆蓋內置工具、第三方工具和 MCP 工具,並在工具體運行前匹配可觀察的工具名和可選參數模式。

已覈實的基礎信息如下:

  • 倉庫:Drifter-yh/dsh-tool-policy
  • 許可:MIT
  • 運行環境:Node >=22.19
  • peer dependencies:
  • @deepseek-ai/cordis >=4.0.1 <5
  • @deepseek-ai/dsh-tools >=0.1.0-rc.5 <0.2.0

核心功能

dsh-tool-policy 的功能比較集中:

  1. 在工具調用執行前應用 allow、ask 或 deny 規則。
  2. 爲內置工具、第三方工具和 MCP 工具提供 deny-by-default 的策略層。
  3. 匹配可觀察的工具名,並可選擇匹配參數模式。
  4. 使用第一條命中規則生效的規則模型。
  5. 支持錨定的工具名模式,並允許一個通配符 *。
  6. 使用 JSON Pointer 描述參數條件。
  7. 支持 trace: true,通過 Cordis logger 輸出不含參數值的決策 trace。

這裏的“策略”主要面向工具調用本身:它判斷某個具體調用是否允許、是否要求審批、是否直接拒絕。它不負責能力沙箱、參數改寫或工具體執行。

安裝與啓用

資料中給出的安裝命令如下:

pnpm add dsh-tool-policy @deepseek-ai/cordis @deepseek-ai/dsh-tools

安裝後,可以在 DSH 配置中啓用該插件。建議先保持默認拒絕,再按工具名逐步添加 allow、ask 或 deny 規則。

一個最小配置片段如下:

defaultDecision: deny
rules:
  - tool: 'read_*'
    decision: allow
  - tool: 'bash'
    decision: ask
    reason: 'Shell execution requires approval.'

這個配置片段表達了兩條意圖:

  • 未命中規則的工具調用默認拒絕。
  • 命中 read_* 的工具調用允許繼續。
  • 命中 bash 的工具調用進入需要審批的路徑。

如果操作者需要排查某個調用爲什麼被允許、詢問或拒絕,可以打開決策 trace:

trace: true

開啓後,插件通過 Cordis logger 輸出決策 trace。該 trace 不包含參數值,適合作爲“爲什麼不命中某條規則”的排查線索。

典型用法

下面是一個更完整的策略配置片段。它同時覆蓋只讀工具、shell、MCP 工具和刪除類工具:

defaultDecision: deny
rules:
  - tool: 'read_*'
    decision: allow
  - tool: 'bash'
    decision: ask
    reason: 'Shell execution requires approval.'
  - tool: 'mcp__*'
    decision: ask
    reason: 'External tool calls require approval.'
  - tool: 'delete_*'
    decision: deny
    reason: 'Delete operations are disabled in this deployment.'

這個配置片段表達了四條常見意圖:

  1. read_*:允許匹配到的只讀工具調用。
  2. bash:shell 執行需要審批。
  3. mcp__*:外部工具調用需要審批。
  4. delete_*:在當前部署中禁用刪除操作。

規則順序會影響結果。插件使用第一條命中規則生效的規則模型,因此如果同一調用可能命中多條規則,應把更具體的規則放在前面。

適用場景與注意

dsh-tool-policy 適合這些場景:

  • 在無人值守任務中運行 deny-by-default 的工具調用白名單。
  • 對 mcp__* 等外部工具調用要求審批。
  • 對已知的刪除類工具調用在執行前拒絕。
  • 在同一個 DSH 部署中對內置工具、第三方工具和 MCP 工具使用統一規則。

使用上需要保留幾個邊界:

  1. 它是 per-call policy 層,不是 sandbox。能力執行仍依賴 DSH 的運行時隔離和沙箱配置。
  2. 它不實現沙箱、能力強制、shell 語義分析或等價操作檢測。
  3. 一條 deny 規則讓命中的工具調用不可用,不等於在系統中徹底禁止破壞性行爲。
  4. 它不改寫參數,也不執行工具體。
  5. 它會隨當前 dsh 進程權限運行。安裝前應檢查源碼、許可證和依賴版本,確認它符合部署方的安全要求。
  6. 生產環境中,策略路由應與更嚴格的 DSH 沙箱組合使用,而不是替代沙箱。

鏈接

倉庫地址:

https://github.com/Drifter-yh/dsh-tool-policy

如果要繼續評估,可以從 defaultDecision: deny 的默認姿態開始,先把高風險工具設爲 ask 或 deny,再逐步放開只讀和低風險工具。

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

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

小夜