沙箱與審批
兩個設定,幹的是不同的事。 沙箱決定 agent 能做什麼;審批決定它做之前必須先問什麼。
沙箱
sandbox_mode = "workspace-write"
| agent 可以 | |
|---|---|
read-only | 看文件,不能改 |
workspace-write | 在它的工作目錄裡寫 |
danger-full-access | 你的帳號能做的一切 |
讀取在任何模式下都不受限制。 只有寫入和網路訪問受限,所以 read-only 意味著
agent 能看你整塊硬碟,但一個字都改不了。
可寫根就是工作目錄
在 workspace-write 下,「工作區」指的是對話或執行所在的那個目錄。不是專案,不是
儲存庫 —— 就是那個目錄。
這是這一頁最重要的一句話。 一次在你家目錄裡打開的執行,可以寫 .ssh、Documents
和 Library。
這不是假設。 一個在部門出現之前建的定時任務帶著家目錄,已經那樣跑了四十二次, 每一次都能夠到這些地方,沒人被問過,也沒人說過什麼。給新對話改預設值動不了它, 因為預設值不是追溯性的。
所以有了第二道檢查,在執行開始的那一刻。
一次後臺執行可以從哪裡開始
一次執行只有在目錄是產品已知的那幾種時,才允許開始:
- 在工作區裡
- 在某個部門的目錄裡
- 在你按名字授權過的地方
其他一律扣住,出現在派發面板的等你授權下,帶一個「允許這個目錄」按鈕。授權一個 地方會放行所有在等它的執行。
問這一下就是重點:跑在一個不尋常的地方往往正是本意,而正確的回應是問,不是拒絕。
審批
approval_policy = "on-failure"
untrusted | 所有不是已知安全的命令都先給你看 |
on-failure | 命令自己跑,需要更大權限時才問你 |
never | 執行前什麼都不顯示 |
never 同時意味著什麼都不會被扣住。把審批關掉的人已經把話說明白了 ——
認定他們的意思其實更窄一點,是產品在推翻自己提供的設定。
用在你願意讓指令碼撒野的目錄上。
會坑到人的那個組合
sandbox_mode = "danger-full-access" 配 approval_policy = "never",是一個
在你機器上任意執行命令、什麼都不顯示、什麼都不問的 agent。
有些目錄裡這是對的答案。你的家目錄不是其中之一。
沙箱不做的兩件事
- 它不阻止模型讀你的文件。 任何模式下讀取都不受限。
- 它不管它啟動的命令之後幹了什麼。 agent 啟動的指令碼繼承沙箱;它啟動的、活得比這次 執行還久的服務,不繼承。