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代理在計算機使用領域仍處於早期階段,標準命令行工具可能不完全適合代理工作流。通過提供更安全、範圍更明確的操作,可以減少用户意圖與破壞性操作之間的差距,從而降低數據丟失風險。