最近看 coding agent 工具鏈的更新,我注意到一個看起來很小、但其實很關鍵的方向:審批畫面開始變得更認真了。
以前我們談 Agent 安全,很容易先想到權限、沙箱、API scope、稽核紀錄。這些都重要,但當 Agent 要真的執行某個動作時,最後常常還是會回到一個很人類的瞬間:它把準備做的事秀給你看,然後問你要不要同意。
這個「同意」看似只是 UI 流程的一小步,實際上卻是整套 Agent 系統裡最脆弱、也最容易被低估的安全邊界。
原因很簡單:人類不是在審核抽象的權限模型,而是在審核一段被呈現出來的文字。Agent 可能說它要修改某個設定、執行某個指令、讀取某個檔案、送出某個請求;我們看的不是底層 syscall,也不是完整 AST,而是一段預覽、一份 diff、一行 command、一個工具名稱加幾個參數。只要這個呈現不夠清楚,或被某些字元、格式、路徑技巧混淆,人類的同意就會變得很廉價。
這也是我最近對 approval preview、permission prompt、工具呼叫預覽這些功能特別敏感的原因。它們不是「讓使用者比較安心」的裝飾,而是 Agent 從建議者變成執行者時,人類仍然能介入判斷的最後介面。
很多團隊在設計 Agent 權限時,會把重點放在「能不能做」。例如能不能讀 repo、能不能寫檔、能不能跑 shell、能不能呼叫內部 API。這是必要的第一層,但還不夠。真正進入日常工作流之後,更常見的問題不是 Agent 完全不該做某件事,而是它現在要做的這件事,範圍是不是正確、目標是不是正確、風險是不是符合預期。
同樣是寫檔,寫 README 和寫部署設定不同;同樣是跑指令,跑測試和刪資料不同;同樣是呼叫 API,查詢庫存和變更訂單狀態不同。如果審批畫面只顯示「Agent wants to use tool」這種模糊訊息,其實等於把判斷責任丟回給使用者,卻沒有給足夠資訊。那不是審批,只是按鈕。
更麻煩的是,文字本身也不是完全可靠的載體。開發者都知道,有些字元看起來像空白但不是空白,有些引號長得像普通引號但語意不同,有些 Unicode 字元會影響文字方向,有些零寬字元肉眼根本看不到。這些東西平常只是排版或國際化的小坑;放到 Agent 審批裡,就可能變成安全問題。
舉例來說,一個 command preview 如果沒有把不可見字元標出來,人類可能以為自己看到的是單純路徑;一段 diff 如果沒有處理雙向文字控制字元,畫面呈現的順序可能和實際內容不一致;一個工具參數如果允許 look-alike quote 或混淆符號,reviewer 以為自己同意的是 A,實際上執行的可能接近 B。這不是科幻情節,而是任何把「人類閱讀」當作安全檢查的一層都必須面對的問題。
從 CTO 的角度,我會把 Agent 審批畫面視為一種產品化的安全介面,而不是工程工具的附屬功能。它至少要回答四件事。
第一,這個動作到底會改變什麼。不是只顯示工具名稱,而是要讓使用者看懂目標資源、作用範圍、是否可回復,以及可能影響到哪些狀態。Agent 要修改檔案,就應該有 diff;要送出請求,就應該有 payload 摘要;要執行指令,就應該清楚呈現工作目錄、環境、參數與危險操作。
第二,預覽必須忠於實際執行。這句話聽起來像廢話,但很多安全問題都出在「看起來」和「實際上」中間的縫。審批畫面不能只依賴模型自己生成的說明,因為模型會省略、誤解,也可能被 prompt injection 影響。比較可靠的做法,是由工具層或 runtime 根據實際參數產生 canonical preview,並把特殊字元、解析後路徑、跨專案存取、符號連結等風險標出來。
第三,審批要有分級。不是所有動作都需要一樣厚重的流程。低風險查詢可以快速放行;可回復的本地修改可以用一般確認;高風險、不可逆、會碰到正式資料或外部對象的動作,就應該有更明確的二次確認、理由、紀錄,甚至要求換人批准。若每個動作都跳一樣的彈窗,最後只會訓練使用者無腦按同意。
第四,審批結果要能被稽核。當某個 Agent 動作出問題時,我們需要知道它當時請求了什麼、畫面呈現了什麼、誰同意、同意的版本是哪一個、實際執行結果又是什麼。沒有這些紀錄,事後只能靠猜。對企業系統來說,這種「可能有人按過」的模糊狀態,是很難被接受的。
我覺得這裡有一個觀念需要改:審批不是為了拖慢 Agent,而是為了讓 Agent 可以安全地跑得更遠。
如果沒有好的審批邊界,團隊會自然變保守。大家會把 Agent 限制在聊天、摘要、查資料、產生草稿,因為一旦它要真的動手,就會讓人不放心。反過來說,當審批畫面能清楚呈現風險、忠於實際執行、留下紀錄,很多原本不能自動化的工作,才有機會被拆成「Agent 準備,人類確認,系統執行」的半自動流程。
這對企業導入 AI 很重要。真正有價值的流程通常不是完全無風險的流程,而是高頻、需要判斷、又牽涉責任的流程。採購、客服、維運、財務、製造、品質、開發,都有大量這種灰色地帶。Agent 可以幫忙整理資料、找差異、準備動作,但最後是否進入正式狀態,需要一個可信的交接點。審批畫面就是那個交接點。
所以我現在看 Agent 工具,不會只看它支援多少模型、多少 MCP server、多少自動化能力。我也會看它怎麼問使用者「你確定嗎」。這句話如果設計得很隨便,再強的工具都只能留在玩具階段;如果設計得足夠嚴謹,它就會變成把 AI 放進正式流程的一個重要基礎。
人類同意不是萬靈丹。它不能取代權限分層、沙箱、測試、回滾和稽核。但在 Agent 開始有手有腳之後,按下同意之前看到的那個畫面,會決定人類到底是在做判斷,還是在替一個黑盒背書。
我寧可讓審批畫面看起來稍微囉唆一點,也不要讓它漂亮到失去警覺。因為企業自動化最怕的不是多問一次,而是某天出事時才發現:我們其實從來沒有真正看懂自己同意了什麼。