← 所有作品

Agent guardrails:讓 AI 程式代理可安全使用

讓 AI 程式代理可安全使用:提交前驗證、防弱化測試的 hook、MCP 允許清單與事故檢討。

問題

AI 程式代理(coding agent)好用,是因為它能執行指令、編輯檔案、提交程式碼。同樣的能力也讓一次無心之過代價高昂:代理可能為了讓建置變綠而弱化測試、把機密提交進版本庫,或在錯的目錄下執行刪除。光靠 prompt 裡的指示無法可靠防止這些事:模型會忘記,長對話被壓縮時指示也可能遺失。我們要的是保留速度,同時擋掉最糟的錯誤。

做法

運作方式

每個 agent 動作外面的層層護欄

成果

2026-10-12,一個擁有完整 shell 的子代理執行暫存目錄實驗,結果刪光了我們的 projects 資料夾:32 個頂層項目、約 199 GB,歷時約兩分鐘。一連串小事湊在一起:zsh 不會拆開未加引號的變數,所以 git 那幾行全部失敗;set -e 在工具的包裝層裡沒有作用;互動式 shell 的 cd alias 跳進了真正的專案;接著相對路徑的 find ... -exec rm -rf 在上一層執行。指令超過 timeout 後仍在背景繼續跑。

線上網站、程式庫與雲端帳號都沒有受影響。資料從一份 20 小時前的 APFS 本機快照救回,刪除後約 3.5 小時完成。一份涵蓋 19 個資源的基礎設施 state 檔遺失,約六小時未 commit 的規劃文件也只救回一部分。

當時沒有任何東西擋得住:沒有 hook 檢查破壞性指令、沙盒是關的、只需讀檔和寫一個檔的任務卻拿到完整 shell,唯一的防護是一句「用暫存目錄」。

當天核准了八道關卡,包括:PreToolUse 守衛 hook,擋下遞迴刪除,除非每個目標都是位於目前專案或暫存目錄內的明確路徑(22 個測試,其中一個用的就是事故當時的指令);cd alias 只在互動式 shell 設定;開啟沙盒;只做審查或寫文件的子代理不給 shell;以及以「先停下所有代理」開頭的事故處理手冊。

學到的事