從寫程式碼,到創作下一幕

探索 字節跳動 - 火山方舟 的 AI 程式設計與影片創作活動。

Agent Plan & Coding Plan

一站體驗多款熱門模型,為 AI 程式設計與智能體開發提供更多選擇。新使用者可聯絡(微信: goo_lvyouyou)免費體驗 9.9 agent plan。

Seedance 2.5

讓創意,躍然成片。探索 30 秒影片、多模態參考與局部編輯,把腦海中的畫面變成下一支作品。

繁體中文

Windows 沙箱

Windows 沙箱

設定 Windows 上的原生 Codex 沙箱並排查其問題

通過原生 ChatGPT 桌面應用、 CLI 或 IDE 擴充套件,在 Windows 上使用 Codex。

Windows 版 ChatGPT 桌面應用支援並行聊天、 工作樹、計劃任務、Git 功能、內建瀏覽器、檔案預覽、 外掛和技能等核心工作流程。

該應用可以使用 Windows 沙箱在 PowerShell 中原生執行, 無需 WSL 或虛擬機器。這樣既能讓 Codex 融入 Windows 原生 工作流程,又能對檔案系統和網路存取實施權限限制。

有關企業安裝,請參閱 Windows 部署指南。

在 Windows 上使用 ChatGPT 桌面應用使用原生 Windows 應用,在同一處跨專案工作、並行開展對話並檢視結果。

Codex 支援三種 Windows 沙箱實現:

  • mxc:相容的 Windows 裝置上推薦使用的沙箱。採用原生程序隔離,無需管理員核准的設定、額外的 Windows 帳戶或本機防火牆規則。
  • elevated:MXC 不可用或已停用時首選的舊版回退方案。設定需要管理員核准。沙箱中的命令以非管理員權限執行。
  • unelevated:無法執行提權設定且組織策略允許時使用的舊版回退方案。其網路隔離弱於 elevated,且不支援禁止讀取指定路徑。

設定 Windows 沙箱

Windows 沙箱會對命令及其子程序強制執行當前生效的檔案系統和網路權限。權限設定決定哪些路徑可讀或可寫,以及是否允許網路存取。審批策略則單獨控制 Codex 何時請求以更高權限執行命令。請參閱沙箱和審批。

啟用 MXC

對於個人帳戶,只要裝置支援,桌面應用就會自動優先使用 MXC。對於企業部署或獨立使用 CLI 的場景,可以通過以下設定啟用相同行為。

在 config.toml 中:

[features]
prefer_mxc = true

設定 prefer_mxc = true 後,只要裝置和策略支援,Codex 就會使用 MXC 執行 Windows 命令。 否則,它會沿用現有的舊版沙箱選擇和設定流程。

對於裝置支援情況或策略各不相同的企業,請將 windows.sandbox 保持為組織允許的舊版實現,即 elevated 或 unelevated,作為回退方案。

管理員可以將此設定作為預設值分發,也可以通過 requirements.toml 強制設定 features.prefer_mxc = true。兩種方式都允許回退到舊版實現。有關預設值與強制要求的區別,請參閱受管理的設定。

保持 MXC 停用

要阻止組織內使用 MXC,請將以下內容新增到託管的 requirements.toml:

[windows]
allow_mxc = false

這會阻止自動選擇 MXC,也會阻止顯式設定 windows.sandbox = "mxc"。現有的舊版沙箱設定和要求仍然適用。

MXC 相容性

主機必須已具備所需的 Microsoft Execution Containers (MXC) 功能,Microsoft 正在向 Windows 11 裝置逐步推出這些功能。Microsoft 在 Windows 11 24H2 (build 26100.9278) 和 25H2 (build 26200.9278) 中引入了 MXC 程序隔離。請使用以下命令驗證你的裝置是否支援 MXC。

在 Codex CLI 0.162.0 及更高版本中,你可以針對單條命令測試 MXC,而不更改已儲存的沙箱選擇。在專案目錄中執行:

codex -c windows.sandbox=mxc sandbox --include-managed-config --permission-profile :workspace -- cmd.exe /d /c echo MXC_OK
$LASTEXITCODE

預期輸出為 MXC_OK,退出碼為 0。這會檢查命令能否在工作區權限設定和受管理的要求下啟動。

如果所需的原生功能不可用,或策略禁止使用 MXC,顯式選擇 windows.sandbox = "mxc" 會失敗。

請注意以下相容性限制:

  • 受管網路要求 allow_local_binding = true 實際生效。MXC 允許與主機迴環地址上的服務進行雙向連線。代理域名規則仍適用於經代理轉發的流量,但代理對專用網路目標的額外檢查會被移除。
  • 前臺命令退出時,剩餘子程序會停止。請測試依賴脫離前臺執行的開發伺服器的工作流程。
  • 與 Linux 和 WSL 一樣,禁止讀取的 glob 模式會使用每個沙箱程序啟動時匹配的檔案。之後建立的匹配檔案,如果該執行中程序的其他權限允許存取,仍可被它讀取。長時間執行的 shell、指令碼、監視程式和開發伺服器會在各自的整個生命週期內保留這份快照,而非在整個 Codex 會話期間保留。請參閱禁止讀取的 glob 模式的匹配時機。

設定舊版回退方案

在 config.toml 中選擇回退實現:

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

elevated 是首選的舊版回退方案。它使用專用的低權限沙箱使用者、檔案系統權限邊界、防火牆規則,以及沙箱內命令執行所需的本機策略更改。

與 MXC 一樣,elevated 會在每個沙箱程序啟動時列舉禁止讀取的 glob 模式所匹配的檔案。之後建立的匹配檔案,如果該執行中程序的其他權限允許存取,仍可被它讀取。有關這對長時間執行的程序的影響,請參閱禁止讀取的 glob 模式的匹配時機。

unelevated 是一種舊版回退方案。它使用從當前使用者派生的受限 Windows 令牌執行命令,應用基於 ACL 的檔案系統邊界,並使用環境級離線控制來代替專用的離線使用者防火牆規則。其網路隔離弱於 elevated,且不支援禁止讀取指定路徑,但當本機或企業策略阻止需要管理員核准的設定時,它仍然有用。

裝置和策略支援時,請使用 MXC。否則,請優先使用 elevated,並將 unelevated 作為次選回退方案。

企業管理員可以限制 Codex 能使用的舊版沙箱實現, 具體可通過 requirements.toml 設定:

[windows]
allowed_sandbox_implementations = ["elevated"]

此範例允許 elevated,並阻止回退到 unelevated。當 MXC 可用時,它不會限制 mxc。其他受管理的權限和網路要求仍然適用。要允許使用任一舊版實現,請同時包含這兩個值;未選擇模式時,Codex 會優先使用 elevated。

有關支援的值,請參閱 requirements.toml 參考。要同時禁止 MXC,請使用單獨的 windows.allow_mxc 要求。

預設情況下,兩種舊版沙箱模式還會使用私有桌面,以提供更強的 UI 隔離。

由 IT 設定舊版 elevated 沙箱

對於沒有本機管理員權限的員工,IT 可以在員工啟動 Codex 前安裝 CLI 並設定 elevated 沙箱。在具有管理員權限的 部署程序中執行:

codex sandbox setup --elevated --user 'DOMAIN\alice' --codex-home 'C:\Users\alice\.codex'

將身份和路徑替換為員工的 Windows 身份和 CODEX_HOME。該命令會讀取該使用者的設定,設定沙箱,並儲存 windows.sandbox = "elevated"。隨後,員工即可從普通終端執行 Codex。

沙箱權限

Windows 版本矩陣

Windows 版本 支援級別 說明
Windows 11 推薦 Windows 上執行 Codex 的最佳基準。如果要標準化企業部署,請使用此版本。
近期且已完全更新的 Windows 10 盡力支援 可以執行,但可靠性低於 Windows 11。在 Windows 10 上,Codex 依賴包括 ConPTY 在內的現代控制台支援。實際需要 Windows 10 版本 1809 或更高版本。
較舊的 Windows 10 版本 不推薦 更可能缺少 ConPTY 等必需的控制台元件,也更可能在企業環境中失敗。

其他環境前提:

  • winget 應當可用。如果缺失,請更新 Windows 或安裝 Windows 程式包管理器,然後再設定 Codex。
  • 舊版 elevated 沙箱依賴經管理員核准的設定流程。
  • 即使作業系統版本本身符合要求,某些由企業管理的裝置仍會阻止 必需的設定步驟。
  • MXC 還需要 MXC 相容性中所述的原生功能;此矩陣不能確定 MXC 在特定裝置上是否可用。

檢查沙箱讀取權限

當命令無法讀取目錄時,請檢查當前生效的權限設定檔、 託管要求和 Windows 檔案權限。在 CLI 中,使用 /status 和 /debug-config 檢查當前會話和設定。請讓 管理員審查託管限制,而不是停用沙箱。

預設使用原生 Windows 沙箱。選擇 WSL 的情況包括: 你需要 Linux 原生工具、工作流程已在 WSL2 中執行,或 現有的原生 Windows 實現無法滿足你的需求。

故障排除和常見問題

如果你正在排查受管 Windows 電腦的問題,請先檢查原生 沙箱模式、Windows 版本以及 Codex 顯示的策略錯誤。對於 MXC, 請檢查相容性和實際生效的網路策略。 舊版沙箱的問題可能源於設定過程、登入權限或檔案系統權限。

舊版沙箱設定失敗

如果 Codex 無法完成 elevated 沙箱設定,最常見的原因 包括:

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

可嘗試以下操作:

  1. 再次嘗試設定 elevated 沙箱,並在環境允許的情況下 核准管理員權限提示。
  2. 如果公司筆記型電腦阻止此操作,請向 IT 團隊確認這臺電腦 是否允許經管理員核准後建立本機使用者和使用者組、設定防火牆, 以及授予沙箱使用者所需的登入權限。
  3. 如果設定仍然失敗,且受管策略允許,請在 排查問題期間使用 unelevated。

Codex 將我切換到了非提升權限沙箱

unelevated 實現可能是在設定中選定的,也可能是在 無法完成 elevated 設定時使用的回退方案。

  • Codex 仍可在沙箱模式下執行。
  • 它仍會應用基於 ACL 的檔案系統邊界,但不會使用 elevated 的獨立沙箱使用者邊界,網路 隔離也較弱。
  • 這是一個實用的備用方案,但不是首選的長期企業 設定。

對於受管企業筆記型電腦,請先檢查 MXC 相容性。 如果 MXC 不可用或已停用,請讓 IT 團隊設定 elevated。

我看到了 Windows 錯誤 1385

如果沙箱命令因錯誤 1385 而失敗,說明 Windows 拒絕了沙箱使用者 啟動命令所需的登入類型。

實際上,這通常意味著 Codex 已成功建立沙箱使用者, 但 Windows 策略仍阻止這些使用者啟動沙箱 命令。

處理方法:

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

Codex 警告某些資料夾可由 Everyone 寫入

Codex 可能會警告某些資料夾可由 Everyone 寫入。

如果看到此警告,則這些資料夾的 Windows 權限過於寬泛, 沙箱無法對其提供完整保護。

處理方法:

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

如果不確定如何更改這些權限,請向 IT 團隊尋求幫助。

沙箱命令無法存取網路

根據所用權限模式,某些 Codex 聊天會被有意設定為 無法存取出站網路。

如果任務因無法存取網路而失敗:

  1. 檢查該任務是否本應在停用網路的情況下執行。
  2. 如果你原本需要網路存取,請重啟 Codex 並重試。
  3. 如果問題持續出現,請收集沙箱日誌,以便團隊檢查 電腦是否處於不完整或損壞的沙箱狀態。

沙箱之前可以正常工作,後來停止了

以下情況可能導致此問題:

  • 移動儲存庫或工作區,
  • 更改電腦權限,
  • 更改 Windows 策略,
  • 或更改其他系統設定。

可嘗試以下操作:

  1. 重啟 Codex。
  2. 對於 MXC,重新執行相容性探測並檢查 實際生效的網路策略。對於舊版 elevated 實現,請嘗試 重新設定沙箱。
  3. 如果需要舊版沙箱且受管策略允許,請使用 unelevated 作為臨時回退方案。
  4. 收集沙箱日誌以供審查。

我需要向 OpenAI 傳送診斷資訊

如果問題仍然存在,請傳送:

  • CODEX_HOME/.sandbox/sandbox.log

同時附上以下資訊也會有所幫助:

  • 簡要描述你當時嘗試執行的操作,
  • 所選實現:mxc、elevated 或 unelevated,
  • 應用中顯示的錯誤訊息,
  • 是否出現了 1385 或其他 Windows 或 PowerShell 錯誤,
  • Windows 內部版本號,
  • 以及你使用的是 Windows 11 還是 Windows 10。

請勿傳送:

  • CODEX_HOME/.sandbox-secrets/ 的內容

IDE 擴充套件已安裝但無響應

你的系統可能缺少某些原生依賴項所需的 C++ 開發工具:

  • Visual Studio Build Tools(C++ 工作負載)
  • Microsoft Visual C++ Redistributable (x64)
  • 使用 winget 時,執行 winget install --id Microsoft.VisualStudio.2022.BuildTools -e

安裝後,請完全重啟 VS Code。