繁體中文

Windows 沙箱

設定和排查 Windows 上的原生 Codex 沙箱

在 Windows 上,可以通過原生 ChatGPT 桌面應用CLIIDE 擴充套件使用 Codex。

Windows 版 ChatGPT 桌面應用支援並行聊天、工作樹、定時任務、Git、內建瀏覽器、檔案預覽、plugins 和 skills 等核心工作流程。

應用可以在 PowerShell 中原生執行,並使用 Windows 沙箱,無需依賴 WSL 或虛擬機器。這樣既能保留 Windows 原生工作流程,也能限制檔案系統和網路權限。

ChatGPT 桌面應用中的 Windows 沙箱設定提示

在 Windows 上使用 ChatGPT 桌面應用:通過原生 Windows 應用跨專案工作、並行執行聊天,並在一個介面中審查結果。

原生 Windows 沙箱有兩種模式:

  • 使用更強的 elevated 沙箱在 Windows 上原生執行。
  • 使用回退的 unelevated 沙箱在 Windows 上原生執行。

設定 Windows 沙箱

在 Windows 原生執行 Codex 時,智能體模式會使用 Windows 沙箱,阻止對工作資料夾之外的檔案進行寫入,並避免在未經明確核准時存取網路。

可以在 config.toml 中設定兩種原生沙箱模式:

[windows]
sandbox = "elevated" # or "unelevated"

elevated 是首選原生 Windows 沙箱。它使用專門的低權限沙箱使用者、檔案系統權限邊界、防火牆規則,以及執行沙箱命令所需的本機策略改動。

unelevated 是回退方案。它根據當前使用者建立受限 Windows token,使用基於 ACL 的檔案系統邊界,並通過環境級離線控制替代專用離線使用者的防火牆規則。它比 elevated 弱,但當本機或企業策略阻止管理員核准的設定時,仍可繼續使用。

如果兩種模式都可用,請選擇 elevated。如果預設原生沙箱在當前環境中不可用,可以暫時使用 unelevated,同時排查設定問題。

企業管理員可以通過 requirements.toml 限制允許使用的原生沙箱實現:

[windows]
allowed_sandbox_implementations = ["elevated"]

這個範例要求使用 elevated,並禁止回退到 unelevated。如果允許兩種實現,請同時列出兩個值;未選擇具體模式時,Codex 會優先使用 elevated。支援的值見 requirements.toml 參考

預設情況下,兩種沙箱還會使用 private desktop(專用桌面)來加強 UI 隔離。只有確實需要相容舊版 Winsta0\Default 行為時,才設定 windows.sandbox_private_desktop = false

沙箱權限

Windows 版本矩陣

Windows 版本 支援級別 說明
Windows 11 推薦 Windows 上使用 Codex 的最佳基線。企業統一部署時應優先選擇。
最近且已完全更新的 Windows 10 盡力支援 可靠性低於 Windows 11,並依賴 ConPTY 等現代控制台支援;實際需要 Windows 10 1809 或更高版本。
較舊的 Windows 10 build 不推薦 更可能缺少 ConPTY 等控制台元件,也更容易在企業環境中失敗。

其他環境前提:

  • 系統應提供 winget。如果缺失,請更新 Windows 或先安裝 Windows Package Manager。
  • 推薦的原生沙箱需要管理員核准設定。
  • 部分企業受管裝置即使作業系統版本符合要求,也會阻止必要的設定步驟。

授予沙箱讀取權限

當命令因為 Windows 沙箱無法讀取某個目錄而失敗時,使用:

/sandbox-add-read-dir C:\absolute\directory\path

路徑必須是已經存在的絕對目錄。命令成功後,當前會話中後續執行在沙箱裡的命令可以讀取該目錄。

預設優先使用原生 Windows 沙箱。當工作流程依賴 Linux 原生工具、已經位於 WSL2 中,或兩種原生沙箱都無法滿足需求時,再選擇 WSL

故障排查與 FAQ

排查受管理 Windows 裝置時,先確認原生沙箱模式、Windows 版本,以及 Codex 顯示的策略錯誤。大多數原生 Windows 支援問題來自沙箱設定、登入權限或檔案系統權限,而不是編輯器本身。

原生沙箱設定失敗

Codex 無法完成 elevated 沙箱設定時,常見原因包括:

  • 拒絕了 Windows UAC 或管理員提示。
  • 機器不允許建立本機使用者或群組。
  • 機器不允許修改防火牆規則。
  • 機器阻止沙箱使用者所需的登入權限。
  • 其他企業策略阻止了設定流程。

建議按以下順序處理:

  1. 再次執行 elevated 沙箱設定,並在環境允許時核准管理員提示。
  2. 如果公司裝置阻止設定,請讓 IT 團隊確認是否允許管理員核准本機使用者或群組建立、防火牆設定,以及沙箱使用者所需的登入權限。
  3. 預設設定仍失敗時,先使用 unelevated 繼續工作,同時調查問題。

Codex 切換到了 unelevated 沙箱

這表示 Codex 無法完成更強的 elevated 設定:

  • Codex 仍可以在沙箱模式下執行。
  • 它仍會應用基於 ACL 的檔案系統邊界,但不再使用獨立沙箱使用者邊界,網路隔離也更弱。
  • 該模式適合作為回退,但不應作為長期企業設定的首選。

在受管理企業裝置上,長期方案通常是讓 IT 團隊協助修復 elevated 沙箱設定。

出現 Windows error 1385

如果沙箱命令以錯誤 1385 失敗,說明 Windows 拒絕了沙箱使用者啟動命令所需的登入類型。通常 Codex 已成功建立沙箱使用者,但 Windows 策略仍阻止它們啟動沙箱命令。

處理方式:

  1. 讓 IT 團隊確認裝置策略是否向 Codex 建立的沙箱使用者授予所需登入權限。
  2. 如果問題隻影響部分機器或團隊,比較組策略或 OU 差異。
  3. 如需立即繼續工作,在調查期間使用 unelevated
  4. 提交 CODEX_HOME/.sandbox/sandbox.log,並附上 Windows 版本和簡短故障說明。

Codex 警告部分資料夾可由 Everyone 寫入

如果出現該警告,說明對應資料夾的 Windows 權限過寬,沙箱無法完整保護它們:

  1. 檢查 Codex 在警告中列出的資料夾。
  2. 如果適合當前環境,移除這些資料夾對 Everyone 的寫入權限。
  3. 修正權限後重啟 Codex,或重新執行沙箱設定。

不確定如何修改權限時,請聯絡 IT 團隊。

沙箱命令無法存取網路

根據當前權限模式,部分 Codex 聊天會有意禁止出站網路存取。如果任務因此失敗:

  1. 確認任務是否原本就應在停用網路的條件下執行。
  2. 如果預期可以聯網,請重啟 Codex 後重試。
  3. 問題持續時收集沙箱日誌,以確認機器是否處於部分設定或損壞狀態。

沙箱之前可用,後來停止工作

移動儲存庫或工作區、修改機器權限、變更 Windows 策略或其他系統設定後,都可能出現這種情況。請依次嘗試:

  1. 重啟 Codex。
  2. 再次執行 elevated 沙箱設定。
  3. 如果仍未修復,臨時使用 unelevated
  4. 收集沙箱日誌供進一步檢查。

需要向 OpenAI 提交診斷資訊

如果問題仍然存在,請提交:

  • CODEX_HOME/.sandbox/sandbox.log

同時附上:

  • 你當時嘗試執行的操作。
  • elevated 設定是否失敗,或是否使用了 unelevated
  • 應用顯示的錯誤訊息。
  • 是否出現 1385 或其他 Windows、PowerShell 錯誤。
  • 系統是 Windows 11 還是 Windows 10。

不要提交:

  • CODEX_HOME/.sandbox-secrets/ 中的內容。

IDE 擴充套件已安裝但沒有響應

系統可能缺少部分原生依賴所需的 C++ 開發工具:

  • Visual Studio Build Tools(C++ workload)
  • Microsoft Visual C++ Redistributable(x64)
  • 使用 winget 安裝:winget install --id Microsoft.VisualStudio.2022.BuildTools -e

安裝後請完全重啟 VS Code。