2026 DeepSeek Harness Hooks 配置:先拦截再放行

工具呼叫沒有被攔下,或 Hook 腳本一出錯,Agent 仍然繼續執行。

最快解法:DeepSeek Harness Hooks 配置先只做一個可觀察的 PreToolUse 拦截點,預設失敗時拒絕放行;完成允許、拒絕、異常與恢復四類測試後,再增加其他工具與自動化動作。

這篇適合三類讀者:

  • Agent 開發者:需要在工具呼叫前後加入校驗或回饋。
  • 平台工程師:需要統一專案級與環境級 Hook 的交付方式。
  • 遠端環境維護人員:需要確認 Hook 在斷線、重啟及無人值守場景下仍可觀察、可回退。

截至 2026 年 8 月 18 日,官方儲存庫仍把 DeepSeek Harness 標示為 Developer Preview,並明確提醒可能出現相容性破壞變更。因此,本文不把其他 Agent 工具的欄位名稱、設定檔位置或失敗行為直接套用到 DeepSeek Harness。所有可執行鍵名,都應以當日原始碼、最新 Release 及實際事件記錄為準。(github.com)

Hook 常被誤用成「所有安全功能的總開關」。這會讓排錯變得困難,也容易在錯誤時錯誤放行。

第一版應從以下四種目標中只選一種:

  1. 權限拦截:工具執行前檢查工具名稱、工作區或參數。
  2. 結果記錄:工具完成後保存成功、失敗、輸出摘要及工作階段識別。
  3. 停止門禁:Agent 準備結束時,確認必要檔案或驗證流程已完成。
  4. 上下文補充:在工作階段開始或特定事件後,向 Agent 注入必要背景。

若目標是阻止危險命令,第一版就只做權限拦截,不要同時加入結果改寫、通知、重試及自動修復。

還要劃清邊界:Hook 能控制 Agent 的事件鏈路,但不能取代作業系統沙箱、檔案權限、憑據隔離或網路出口控制。官方架構將 DeepSeek Harness 定義為以插件組成的 Agent Harness;這代表 Hook 是執行流程中的控制點,不等於完整的系統級隔離層。(github.com)

DeepSeek Harness Hooks 配置檔案放在哪裡?

目前官方使用指南公開說明了工作區選擇、模型設定及執行方式,但沒有在穩定使用者指南中固定宣告一個可長期依賴的 Hook 設定檔路徑。官方指南指出,dsh 會以啟動它的目錄作為預設檔案系統位置,而工作區仍需在 Web UI 中選取。(github.com)

因此,配置前應先做三項核對:

  • 在目前版本原始碼中搜尋 Hook 事件型別與註冊入口。
  • 搜尋 PreToolUsetool_callhook 等字串,確認事件是否已由實際執行管線觸發。
  • 檢查最新 Release 或變更記錄,確認配置目錄、輸入欄位及輸出契約沒有改名。

若原始碼沒有明確提供穩定設定鍵,就不要先建立一個看似合理的 JSON 或 TOML。格式能被解析,不代表事件真的會觸發。

最小接入點應選擇低風險工具。例如先觀察讀取類工具,或在不會修改檔案的測試工作區中記錄一次工具呼叫。

第一輪只需要取得三種證據:

  • 命中輸入:Hook 實際收到的事件名稱、工具名稱、工作目錄及參數摘要。
  • 處理結果:腳本是否完成,輸出是否能被 Harness 解析。
  • 未命中結果:其他工具或不符合條件的呼叫是否維持原本流程。

不要把其他 Agent 的 PreToolUse 設定格式複製過來。不同工具可能在事件名稱大小寫、匹配方式、輸入欄位及錯誤處理上完全不同。即使外部工具常見 PreToolUse 這個名稱,也不能據此推斷 DeepSeek Harness 的 Hook Protocol 已採用相同語意。

可採用以下驗收門檻:

  • 同一工作區連續觸發相同測試任務,命中結果一致。
  • 不符合匹配條件的工具不被攔截。
  • Hook 不會把敏感參數原文寫入終端或長期日誌。
  • 關閉 Hook 後,基準任務仍可正常完成。

官方 Web UI 指南目前把「選取工作區」列為可以開始工作的重要前置條件;這也說明工作目錄不是裝飾欄位,而是 Hook 判斷範圍時必須記錄的上下文。(github.com)

設定檔文字本身不能證明失敗時 Agent 會不會繼續。這必須從會話事件、執行記錄或實際測試取得。

Hook 腳本失敗後 Agent 會繼續嗎?

不能預先假設會繼續,也不能預先假設一定停止。DeepSeek Harness 目前仍處於快速變更階段,Hook 的失敗預設值應以當前原始碼和事件執行結果為準。若輸出契約不清晰,安全做法是暫停放行,不擴大工具權限。(github.com)

第一輪放行測試應分成四組:

  • 明確放行:符合低風險條件,Hook 回傳可解析的允許結果,工具正常執行。
  • 明確拒絕:使用測試用危險條件,Hook 回傳拒絕結果,工具沒有真正執行。
  • 腳本異常:讓測試 Hook 回傳錯誤或非預期輸出,記錄 Agent 是否停止、重試或繼續。
  • 超時處理:使用短時間、可控的測試腳本,觀察超時後的實際事件及後續工具狀態。

測試時不要使用真實密鑰、破壞性命令或客戶資料路徑。拒絕測試只需要讓 Hook 判斷一個無害的測試標記,確認拦截鏈路存在即可。

若四類結果中有任何一類無法判讀,版本應停留在試點。此時最合理的分數不是「功能完整度」,而是可觀察性:

  • 觸發可重現:2 分
  • 放行與拒絕可區分:2 分
  • 異常後有清晰回退:2 分
  • 日誌不洩漏敏感資料:2 分
  • 可在不刪除工作區的情況下停用:2 分

低於 8 分,不應進入 Bash 或檔案修改場景。

方案 主要事件 可控制範圍 初次部署風險 適合時機
結果記錄 工具完成後 執行結果、耗時、輸出摘要 最早建立觀測基線
PreToolUse 拦截 工具執行前 工具名稱、參數、工作區 需要阻止危險命令時
停止門禁 Agent 結束前 驗證是否完成、是否允許停止 中至高 已有穩定事件記錄後
上下文補充 工作階段或訊息事件 注入提示及工作狀態 需要跨回合維持規則時
完整腳本集合 多個事件混合 權限、記錄、通知、重試 試點通過且有版本管理後

這個次序的重點不是功能多少,而是每增加一個事件,就增加一條可能失敗的執行鏈路。先記錄,再拦截;先單點,再擴展。

當低風險匹配已經可以重複觸發,才進入 Bash、檔案修改或外部工具。

此時至少收緊三個邊界:

  1. 工作區邊界:只允許專案目錄及明確的暫存目錄。
  2. 憑據邊界:Hook 不讀取密鑰檔,不把環境變數完整寫入日誌。
  3. 參數邊界:命令、檔案路徑及外部工具參數必須逐項檢查,不以整段字串的模糊關鍵字判斷。

匹配器過寬,會把正常測試、讀取及版本控制操作一併攔截。匹配器過窄,則可能漏過工具別名、參數變體或同一功能的另一個執行入口。

因此,每次只增加一類操作:

  • 先加入 Bash 觀察。
  • 再加入 Bash 拒絕條件。
  • 接著加入檔案寫入拦截。
  • 最後才接入外部工具或自動修復。

每一輪都保留上一個可用版本。若新規則造成正常任務無法完成,先回退,而不是在同一個腳本中疊加例外。

本機成功不代表遠端 Mac 一定成功。遠端環境常見的差異包括:

  • Node.js 或其他執行時版本不同。
  • Hook 腳本沒有執行權限。
  • 工作目錄由啟動目錄變成另一個專案路徑。
  • 非互動工作階段沒有載入互動式 Shell 的環境變數。
  • 斷線或重啟後,暫存路徑、日誌路徑或工作區狀態改變。

官方開發文件列出目前儲存庫的 Node.js 前置條件為 22.19 以上或 24 以上,CI 也涵蓋 22.19、24 及 26;文件同時指定 Corepack 管理的 pnpm 版本為 11.7.0,Git 需求為 2.26 或更新版本。這些是官方儲存庫開發環境的核對資料,不應直接當成所有遠端執行環境的最低需求。(github.com)

部署到遠端 Mac 後,按以下順序操作:

  1. 記錄遠端主機的 Node.js、pnpm、Git 及腳本執行時版本。
  2. 確認 Hook 腳本以絕對或可驗證的工作區相對路徑存在。
  3. 以非互動方式啟動一次,檢查環境變數是否真的可見。
  4. 用低風險工具觸發一次,保存事件摘要及退出結果。
  5. 執行一次明確拒絕測試,確認工具沒有越過拦截點。
  6. 重啟遠端 Mac,再重複允許與拒絕測試。
  7. 檢查工作目錄變化、日誌連續性及回退版本是否仍可用。

遠端 Mac 重啟後 Hooks 是否仍生效?

只有在重啟後重新觸發事件並取得證據,才能回答「仍然生效」。不能只看腳本檔案還在不在。需要重新確認執行時、權限、工作目錄、環境變數及 Hook 註冊狀態。

敏感輸出只保留必要摘要。例如記錄工具類型、結果狀態、工作階段識別及回退版本,不記錄 API 金鑰、完整環境變數或客戶路徑。

若需要先準備一個可控的遠端工作區,可參考 NOVAKVM 的雲端 Mac 方案說明,但 Hook 的事件契約仍須由 DeepSeek Harness 當前版本自行核對。

正式開放持續任務前,應建立四類驗收證據:

  • 允許任務:符合規則的工具呼叫可以完成,並留下結果記錄。
  • 拒絕任務:不符合規則的工具呼叫被擋下,Agent 收到可理解的原因。
  • 異常 Hook:腳本錯誤、輸出不完整或執行時不可用時,系統採取已確認的安全策略。
  • 恢復任務:修復腳本或回退配置後,正常工具呼叫恢復,且沒有殘留錯誤狀態。

每一筆驗收記錄至少保留:

  • Hook 版本或提交識別。
  • 工作區名稱及執行環境。
  • 觸發事件與匹配工具。
  • 輸入摘要及處理結果。
  • 失敗原因與回退動作。
  • 重啟後的復測結果。

官方指南目前把 dsh 的安裝、建置、Web UI 啟動及工作區選擇分開說明;這種分層也適合用於 Hook 驗收:先確認執行環境,再確認工作區,最後確認事件鏈路,而不是一次把所有問題歸因到配置檔。(github.com)

可把上線判斷簡化成三個條件:

  • 四類測試全部有可保存證據:保留試點或擴大一個工具類別。
  • 只有允許與拒絕可確認,異常策略不清楚:維持拒絕放行。
  • 重啟後事件消失或日誌中斷:先修復遠端交付,不開放持續任務。

本機部署的優點是檔案距離近、權限容易理解,也方便快速改腳本。但長時間執行時,常見缺點是本機重啟會中斷工作、開發者環境差異會污染驗收結果,而且多人共用時很難維持相同的執行時與日誌規則。

一般雲端主機則可能遇到 macOS 工具鏈不完整、遠端桌面與檔案權限分散,以及重啟後工作區與憑據載入順序不一致等問題。對需要 Xcode、macOS 原生工具或遠端持續任務的團隊,這些不是單一腳本能補上的缺口。

較穩妥的做法是先在可控的遠端 Mac 工作區完成四類驗收,再決定是否擴大 Hook 覆蓋面。若需要臨時算力、短期測試環境或重現另一台 Mac 的執行條件,使用 NOVAKVM 的遠端 Mac 會比直接改動長期工作機更容易保留版本、重啟及回退邊界。相關交付前,也可先查看 遠端 Mac 交付條件雲端 Mac 選型說明,再把 Hook 腳本依賴、重啟恢復及日誌留存逐項對照。

為自動化流程準備可靠的遠端 Mac

使用 NOVAKVM 遠端 Mac,為測試、執行與驗收流程提供獨立且穩定的工作環境。

按需租用 NOVAKVM Mac 雲端資源,毋須自行建置硬體即可快速開始。

查看定價 →