Codex 執行任務時,會讀取檔案、寫入程式、啟動測試並呼叫命令。沙箱(Sandbox)會替這些動作設定技術邊界,限制可寫入位置與網路存取。當代理人(Agent)產生超出範圍的命令時,執行環境會阻止動作或要求批准。
本機的 Codex CLI 與整合開發環境(Integrated Development Environment, IDE)多半透過作業系統機制限制命令。
workspace-write 允許在工作區內修改檔案,網路預設關閉。read-only 則適合探索與審查。Codex Cloud 在隔離容器中執行任務,不能直接接觸使用者的本機檔案和其他工作負載。
這些限制提供第一層保護,專案還需要安排自己的安全邊界。正式憑證、正式資料庫位址或部署工具一旦進入可存取環境,代理人就有機會使用它們。開始任務前,要先決定哪些資源可以進入沙箱,並讓未授權資源從工作環境中移除。
正式環境(Production Environment)承載真實使用者、交易與營運資料。一次錯誤寫入、刪除或部署都會形成外部影響,回復成本也高於一般程式修改。Codex 的一般開發工作區不應提供正式資料庫、正式主機、雲端控制台與部署管線的存取能力。
關閉網路可以降低代理人連向外部服務的機會,還要檢查本機可用的命令與設定。部署腳本、Kubernetes 設定、雲端命令列登入狀態、資料庫連線檔及 SSH 金鑰,都可能形成通往正式環境的路徑。任務不需要的資源,不應掛載、複製或注入沙箱。
開發與正式環境也要使用不同身分。測試帳號只能存取測試服務,權限限於任務所需操作,資料範圍也應獨立。這樣如果 Codex 誤用環境變數或執行錯誤命令時,影響就會停在測試資源內,不會透過同一組帳號延伸到正式系統。
Codex 需要資料才能重現錯誤與驗證結果。適合放入沙箱的是人工建立的測試資料、去識別化樣本與儲存庫內的固定測試資料(Fixture)。內容要涵蓋正常值、空值、錯誤格式與邊界案例,同時排除真實姓名、電話、付款資訊、權杖及其他可識別資料。
直接複製正式資料庫到本機,容易把敏感內容帶進工作紀錄、命令輸出、測試快照或錯誤日誌。資料表即使只有幾列,也要確認欄位與關聯資料是否含有個人資訊。需要保留資料形狀時,可以產生具有相同欄位與限制的假資料,並用明確標記區分測試身分。
測試資料還要具備可重建性。npm test 每次執行都應從固定狀態開始,測試完成後可以清除暫存結果。Codex 反覆修改及重跑測試時,前一輪資料不會污染下一輪判斷,也不需要依賴某位開發者電腦上才存在的手動資料。
環境變數(Environment Variable)常用來提供連線位址、功能開關與執行模式。沙箱內應使用測試值,例如 NODE_ENV=test、測試資料庫位址及本機服務連接埠。範例可放在 .env.example,實際的 .env 保持不追蹤,並由開發者或受控流程建立。
正式 API 金鑰、雲端管理憑證與資料庫密碼不應出現在 Codex 可讀取的環境中。只把規則寫成「不要輸出金鑰」,讀取與誤用空間還是存在。較穩定的做法是完全不注入正式金鑰,並透過檔案權限、工作區隔離與憑證管理阻止存取。
測試整合需要身分驗證時,可以使用專屬測試帳號或短期憑證(Short-lived Credential)。憑證要具備較短有效時間、限定服務與最低權限,任務結束後立即失效。測試記錄只保留憑證是否存在及呼叫結果,不顯示完整內容,也不把值寫入提示詞(Prompt)、差異(Diff)或提交(Commit)。
workspace-write 模式下,命令的網路存取預設關閉。安裝套件、呼叫外部 API 或下載檔案需要網路時,Codex 會受到沙箱與批准政策限制。開放網路前,要先確認目的網域、傳送內容、下載來源與命令衍生程序,因為套件腳本也可能發出連線。
網域允許清單可以把連線限制在指定目的地,例如套件登錄站或測試 API。允許某個網域只代表命令可以連線,無法證明該來源可信,也無法管理瀏覽器、連接器,以及其他工具的流量。每種工具都要套用各自的網路與權限控制。
今日的練習維持網路關閉。codex-hands-on 的規則只允許儲存庫內的程式、文件、測試與固定測試資料,不允許代理人自行下載資料、呼叫外部服務或連接內部網路。需要新增套件時,Codex 只能提出完整命令、版本、理由及預期檔案變更,等待人工批准。
部署命令會改變共享環境,資料庫遷移可能改變資料結構,雲端基礎設施命令也可能建立、刪除或公開資源。這些操作不適合因為一次一般開發任務就取得長期授權。AGENTS.md 應直接禁止 Codex 執行部署、發布、正式遷移與正式資料修改。
高風險操作若有合理需求,批准資訊至少要包含完整命令、目標環境、使用身分、預計變更、驗證方式與回復步驟。只看到 deploy.sh 或 terraform apply 的名稱,不足以判斷它會碰到哪個帳號與資源。目標不清楚時,開發者應拒絕執行,要求先提供唯讀計畫或差異預覽。
人工批准不會自動擴張其他邊界。允許一次測試環境的資料庫遷移,不代表後續可以改用正式連線,也不代表可以推送、發布或建立額外雲端資源。命令、環境、帳號與影響範圍只要改變,就要重新檢查並取得對應授權。
這次固定任務只修改 codex-hands-on 根目錄的 AGENTS.md。保留前一篇建立的權限章節,在後方新增 ## Codex Sandbox 規則。檔案已有同名章節時,就更新原內容,避免留下互相衝突的安全要求。
將以下中文版的規則加入檔案。範例把測試資料、環境變數、憑證、正式環境、部署命令與批准條件放在同一區,讓 Codex 讀取專案規則時取得完整限制。
## Codex Sandbox 規則
**執行環境:** 所有開發、測試與除錯只能在目前儲存庫及隔離的測試環境中進行。不得存取正式環境、公司內部網路或工作區外的個人檔案。
**測試資料:** 只能使用儲存庫內的 fixture、人工建立的假資料或完成去識別化的樣本。不得複製、查詢、輸出或修改正式資料。
**環境變數:** 只能使用測試環境所需的非敏感設定。不得讀取、顯示、建立或修改 `.env*`、正式連線字串、API 金鑰、權杖、私鑰與雲端憑證。
**短期憑證:** 整合測試需要驗證時,只能使用由使用者明確提供的短期測試憑證。不得將憑證寫入程式碼、文件、測試輸出、Git 差異或提交。
**網路存取:** 預設不得連線外部服務、內部主機或套件來源。任務需要網路時,先回報目的網域、傳送內容、完整命令與原因,取得人工批准後才能執行。
**禁止命令:** 不得執行部署、發布、正式資料庫遷移、正式資料修改、基礎設施變更、強制推送、共享歷史改寫或大量刪除命令。
**高風險批准:** 安裝相依套件、使用網路、執行測試環境遷移、修改持續整合與部署設定,或操作外部服務前,必須提供完整命令、目標環境、使用身分、影響範圍、驗證方式與回復步驟,並等待使用者明確批准。
**停止條件:** 無法確認目前環境、資料來源、帳號權限或命令目標時,立即停止並回報,不得自行猜測或改用其他憑證。
這份內容是專案操作規則,不能單獨取代沙箱、網路限制與帳號權限。正式憑證要從工作環境移除,正式網域要由網路政策封鎖,部署權限也要交給獨立身分與流程管理。文件與技術控制一致時,規則才具備可執行的安全邊界。
可以使用以下提示詞要求 Codex 更新 AGENTS.md。任務只需讀取既有規則與專案結構,不需要打開任何環境變數檔案,也不需要測試網路或正式服務。
請先讀取根目錄 AGENTS.md,確認現有的 Permissions 章節與專案規則。
只修改根目錄 AGENTS.md,新增或更新「Codex Sandbox 規則」章節。
內容必須涵蓋:測試資料、環境變數、短期測試憑證、禁止正式環境、禁止正式憑證、網路限制、禁止部署命令、高風險操作的批准資訊與停止條件。
不要讀取 .env、secrets、私鑰、權杖或任何憑證;不要連線網路、執行測試、安裝套件、部署、修改其他檔案或建立 Git commit。
完成後只執行 git diff -- AGENTS.md,確認差異只包含預定章節。
再逐項說明規則如何限制資料、身分、網路與正式環境。
遇到現有規則衝突時先停止並回報,不要自行刪除原規則。
Codex 完成後,先確認差異沒有改動前一篇的權限分類,也沒有把禁止項目改成可批准項目。正式資料、正式憑證與部署命令應維持禁止。套件安裝、測試環境遷移及受限網路則停在人工批准點。這兩類要寫得清楚,避免一次批准被延伸到正式系統。
驗證規則時,不需要刻意執行被禁止的命令。先開啟新的 Codex 工作階段,要求它讀取 AGENTS.md,並將幾個情境分類:讀取 fixture、開啟 .env.production、執行 npm install、連接測試 API、執行正式部署。這一輪只回答允許、需批准或禁止及理由。
接著要求 Codex 使用既有 fixture 說明測試方式,並執行 git status 與 git diff -- AGENTS.md。它應使用儲存庫內資料,不搜尋正式樣本,也不要求取得正式憑證。若現有測試需要網路或缺少測試帳號,Codex 應停止並回報缺少條件。
最後檢查 /permissions 與 /status 顯示的實際工作區、沙箱模式及可寫入位置。AGENTS.md 寫下的界線若比執行環境嚴格,任務要遵守專案規則。執行環境若更嚴格,Codex 也不能因文件授權而跨越技術限制。
兩層檢查完成後,這份沙箱規則就能成為後續開發任務可沿用的安全起點。