部落格
人機協同:Tactic Remote 的審批系統如何讓開發者始終掌控全局
Tactic Remote 的審批系統透過 hook 攔截 Claude Code 的工具呼叫,以推播通知的形式發送到你的 iPhone,並在你明確批准或拒絕每個操作之前阻止執行。
繼續查看該欄目下的產品與工程更新。
瀏覽此分類AI 程式設計代理非常強大,但缺乏監督的能力是一種隱患。Tactic Remote 圍繞一個核心理念建構:開發者應該審批 AI 代理在其開發環境中執行的每一個關鍵操作。今天,我們將詳細介紹審批系統的運作原理、延遲成本,以及未來的發展方向。
為什麼審批如此重要
Claude Code 可以讀取檔案、寫入檔案、執行 shell 命令以及與外部服務互動。每一個操作都會產生實際影響。一個被誤解的提示可能導致檔案被刪除、git 操作出錯或意外的 API 呼叫。
Anthropic 為 Claude Code 設計了一套權限系統,會在終端機中提示使用者進行審批。但如果你不在 Mac 旁邊——通勤中、會議中或者只是在另一個房間——這些提示會無限期地阻塞執行。你的代理只能閒置等待。
Tactic Remote 透過將每個審批提示即時推送到你的 iPhone 來解決這個問題。你可以查看提議的操作,了解完整上下文,然後點擊批准或拒絕。代理會立即恢復工作,無需切換到 Mac 操作。
架構:Hook 與攔截
審批系統建立在 Claude Code 的 hook 機制之上。當 Claude Code 即將執行一個工具呼叫——檔案寫入、shell 命令或任何其他需要權限的操作時——Tactic Remote Mac 用戶端會在執行前攔截該事件。
以下是完整流程:
- Claude Code 發起工具呼叫。 例如,它想在你的專案目錄中執行
rm -rf node_modules && npm install。 - Hook 被觸發。 Tactic Remote 的 hook 指令碼擷取工具名稱、參數以及提議操作的完整上下文。這是同步發生的——Claude Code 處於暫停狀態,等待 hook 回傳結果。
- Mac 用戶端評估操作。 它會將操作與已設定的自動審批規則進行比對。如果操作符合某條規則(例如唯讀檔案操作),則立即回傳批准結果,無需通知 iPhone。
- 如果需要手動審批,則發送推播通知。 通知中包含操作類型、Claude 打算執行的操作摘要以及足夠做出決策的上下文資訊。
- iPhone 應用顯示審批請求。 你可以看到完整的命令或檔案差異、工作目錄以及導致此操作的對話上下文。
- 你批准或拒絕。 你的回應透過 WebSocket 傳回 Mac 用戶端,Mac 用戶端將結果回傳給 hook,hook 解除對 Claude Code 的阻塞。
從 Claude Code 的角度來看,整個鏈路是同步的。它呼叫了一個 hook 並收到了回應。它並不知道審批請求被路由到了另一個網路上的手機。
iPhone 上的審批介面
審批介面設計用於快速、明智的決策。每個請求顯示以下資訊:
- 操作類型 —— 檔案寫入、shell 命令、API 呼叫或其他工具呼叫。
- 完整承載 —— 要執行的確切命令或要寫入的確切內容。shell 命令不會被摘要或截斷。檔案差異會顯示被修改的具體行。
- 工作目錄 —— 操作將在哪裡執行,便於你評估影響範圍。
- 對話摘錄 —— 導致 Claude 提出此操作的最近幾輪對話,讓你了解請求背後的原因。
- 工作階段中繼資料 —— 屬於哪個 tmux 工作階段、已執行多長時間,以及本次工作階段中已批准了多少操作。
你可以批准、拒絕,或拒絕並附帶一條回饋訊息發送給 Claude Code。
效能:審批有多快?
我們追蹤了所有連線模式下的審批往返時間。這些資料代表從 Claude Code 的 hook 觸發到收到審批回應並恢復執行之間的時間。
| 情境 | 中位數 | P95 |
|---|---|---|
| 區域網路,應用在前景 | 85ms + 人工時間 | 140ms + 人工時間 |
| 區域網路,應用在背景(推播通知) | 1.2s + 人工時間 | 2.8s + 人工時間 |
| Cloudflare Tunnel,應用在前景 | 280ms + 人工時間 | 450ms + 人工時間 |
| Cloudflare Tunnel,應用在背景 | 1.8s + 人工時間 | 3.5s + 人工時間 |
「人工時間」是主要因素。實際上,大多數開發者在主動監控工作階段時會在 3-8 秒內回應審批請求。系統開銷與決策時間相比可以忽略不計。
關鍵的是,審批系統對符合自動審批規則的操作不會增加任何開銷。這些操作完全繞過 iPhone,在 Mac 上 5ms 以內完成。
自動審批策略
並非每個操作都需要手動審查。讀取檔案通常是安全的,執行 linter 風險也很低。Tactic Remote 支援可設定的自動審批策略,讓你定義哪些操作可以跳過 iPhone 並自動執行。
目前支援的策略選項包括:
- 唯讀檔案操作 ——
cat、read、檔案清單等非修改性操作。 - 特定命令前綴 —— 例如,自動審批所有以
npm test或cargo check開頭的命令。 - 目錄範圍限定 —— 自動審批特定目錄內的所有操作(適用於暫存或測試目錄)。
- 工具類型白名單 —— 審批特定工具類別的所有操作。
策略在 Mac 用戶端設定,並同步到 iPhone 應用以供檢視。你可以在工作階段檢視中查看目前生效的策略,並臨時覆寫它們(例如,在進行正式環境部署時切換到「所有操作均需手動審批」模式)。
拒絕並附帶回饋
當你拒絕一個操作時,可以選擇附帶一條訊息。該訊息會被回傳給 Claude Code,效果如同使用者在終端機中輸入。Claude Code 會將其視為指導並調整方案。
例如,如果 Claude 提議刪除一個設定檔,而你拒絕並留言「不要刪除該檔案,它包含不在 git 中的本地覆寫設定」,Claude 會接受回饋並尋找替代方案。這在開發者和代理之間建立了一個真正的回饋迴圈,即使他們不在同一台機器旁。
可靠性保障
審批系統的設計原則是安全失敗:
- 如果 WebSocket 連線在審批過程中斷開,hook 會逾時並回傳拒絕結果。Claude Code 收到「權限被拒絕」的結果並停止操作。
- 如果 iPhone 不可達(無網路、手機關機),待處理的審批會在 Mac 用戶端排隊最多 10 分鐘。如果手機在該時間視窗內重新連線,排隊的審批會被送達。逾時後,它們會被自動拒絕。
- 如果 Mac 用戶端當掉,hook 指令碼偵測到程序缺失並回傳拒絕結果。沒有明確的批准,Claude Code 無法繼續執行。
預設行為始終是拒絕。系統需要一個明確的批准才能繼續。不存在任何因連線中斷或程序當掉而導致未經審查的操作被執行的情況。
未來規劃
我們正在對審批系統進行多項改進:
細粒度策略建構器。 在 iPhone 應用上提供視覺化介面,無需編輯設定檔即可建構自動審批策略。支援拖放操作和布林邏輯規則:「自動審批符合 git status 或 git diff 但不符合 git push 的 shell 命令。」
工作階段級信任提升。 支援為特定工作階段臨時提升信任級別。例如,「在接下來的 15 分鐘內自動審批此工作階段中的所有檔案寫入操作」——當你正在主動監督大規模重構任務且不想逐個審批每個檔案時非常有用。
審批分析。 一個展示審批模式的儀表板——你最常批准哪些操作、最常拒絕哪些操作,以及基於歷史紀錄的自動審批策略建議。
批次審批。 當 Claude Code 提出一系列相關操作時(例如,作為單一功能的一部分寫入 5 個檔案),可以選擇作為一個批次進行審查並一次性批准或拒絕整組操作。
審批系統是 Tactic Remote 能夠用於實際開發工作的核心。自主運行的 AI 代理很有用,但具備人工監督的自主 AI 代理才值得信賴。這個區別至關重要,我們將持續在這方面投入。