Claude Code和OpenAI Codex中的資料丟失:當AI刪除使用者檔案時
分析了多起AI程式設計代理因對系統狀態、環境變數或工具行為理解錯誤而意外刪除使用者檔案的事件。文章列舉了五個真實案例,識別出常見模式(狀態混淆),並提出了包括備份、工作流隔離和更好防護措施的緩解方案。
本文探討了AI代理在操作過程中如何意外刪除使用者資料的問題。作者借用了《蒙提·派森》中關於一個乾淨但無乳酪的乳酪店故事,比喻AI代理可能過於“清潔”使用者資料。
OpenAI的Codex團隊成員Thibault Sottiaux報告稱,他們調查了多起GPT-5.6意外刪除檔案的案例。最常見的情況是:啟用了完全訪問模式且沒有沙箱保護,模型嘗試覆蓋$HOME環境變數以定義臨時目錄,但錯誤地刪除了$HOME本身。
儘管安全討論多集中在透過提示注入竊取資料上,但實際中因笨拙導致的資料丟失事件更為頻繁。以下是一些典型例子:
例1:因$HOME錯誤導致檔案刪除。使用者報告GPT-5.6-Sol意外刪除了Mac上的幾乎所有檔案。截圖顯示,一個清理子代理的指令碼錯誤地展開了$HOME變數,執行了rm -rf /Users/mattsdevbox。另一使用者則因PowerShell的-Include引數處理不當導致編譯檔案被誤刪。
例2:針對生產環境的測試導致資料庫刪除。使用者報告GPT-5.6 Sol刪除了整個生產資料庫。原因是倉庫中的.env檔案包含了Neon生產資料庫URL,而測試要求TEST_DATABASE_URL與之匹配,導致測試指令碼對生產資料庫執行了破壞性操作(如TRUNCATE TABLE users CASCADE)。
例3:Git Checkout導致暫存工作丟失。Claude Code在嘗試將修改移到新分支時,先執行了git stash,然後git checkout,再git stash pop,但彈出的更改被立即覆蓋,導致一小時的工作丟失。
例4:刪除‘Photos’資料夾同時刪除了小寫‘photos’資料夾。使用者請求Claude Cowork整理桌面,代理在合併資料夾時未考慮macOS不區分大小寫的檔案系統,誤刪了包含15年照片的資料夾。幸好iCloud的30天恢復功能救了回來。
例5:不精確的正規表示式吞噬程式碼。作者本人遭遇代理使用Python指令碼進行正則替換時,因匹配邊界不正確,導致數百行程式碼被誤刪。
這些案例的共同模式是對狀態的混淆:環境變數指向錯誤目錄、資料庫URL指向錯誤例項、Git操作未按預期執行、檔案系統特性未被考慮、正規表示式邊界不準確。代理傾向於使用高階方法(如鏈式命令、直接操作$HOME、正則替換),但這些方法需要精確跟蹤隱含狀態。
緩解措施包括:
- 防護工具:如
destructive_command_guard,可在破壞性命令執行前攔截並給出安全替代方案。 - 工作流隔離:使用Git工作樹將不同任務隔離到獨立目錄。
- 備份:最簡單有效的萬能藥,建議按時間組織文件(如Documents/work/2026-01/)。
- 改進工作流:為代理提供更安全的操作原語,如鍵值儲存管理臨時檔案、資料庫分支用於測試、以及基於字元範圍的剪下貼上工具。
AI代理在計算機使用領域仍處於早期階段,標準命令列工具可能不完全適合代理工作流。透過提供更安全、範圍更明確的操作,可以減少使用者意圖與破壞性操作之間的差距,從而降低資料丟失風險。