×−+
Windows 专题专题 B · Codex 教程
专题 B · WINDOWS

Windows 专题:
原生沙箱与 WSL2

在 Windows 上,Codex 默认直接用 PowerShell 干活,外面套着一层 Codex 用 Windows 自己的机制搭的原生沙箱,不用非得装 WSL。这一篇讲清楚两种原生沙箱怎么选、什么时候换 WSL2、项目该放哪,最后给你一个按症状查的排查向导。

约 25 分钟 10 节 · 1 个演练 · 排查向导 章末测验 形式参考 luongnv89/claude-howto · 事实依据 OpenAI 官方文档
切换看看,哪几层换了
入门先用起来 原理弄懂为什么 实战动手练 深入进阶与避坑

这是一篇专题,按需读。正在被报错卡住的,直接跳到第 8 节"排查向导";刚在 Windows 上起步的,从头看。

01入门

Windows 上的三条路

同一个 Codex,在 Windows 上有几种跑法。大多数人用第一种就够了。

原生:师傅在你家客厅干活用的是你家现成的工具(PowerShell),四周拉着一圈用 Windows 现成材料搭的施工围挡(Codex 的原生沙箱):只在项目文件夹里动手,要出围挡先问你。它不是 Windows 里那个叫"Windows 沙盒"的可选功能,不用去开。
WSL2:在家里隔出一间 Linux 工作间WSL2 是 Windows 里跑的一个 Linux 环境。师傅进工作间,用 Linux 的工具干活,围挡也换成 Linux 那一套。
桌面 App · 原生
Codex 在 PowerShell 里跑命令,由 Windows 原生沙箱把关。Worktree、定时任务、Git、内置浏览器、文件预览、插件、技能都支持。默认,推荐
桌面 App · agent 在 WSL2
在 Settings(设置)里把 agent(替你跑命令的那个 Codex)从 Windows native(原生)切到 WSL,重启 App。命令改在 Linux 里跑,用 Linux 沙箱。需要 Linux 工具时 · 第 6 节
命令行 CLI
原生 Windows 用官方的 PowerShell 安装脚本装;也可以装进 WSL2 里用。第 7 节 · 第 14 课
VS Code 扩展
直接支持 WSL2:打开一个设置,有 WSL 时就让 agent 在 WSL2 里跑。第 6 节
官方的选法

默认用原生沙箱。下面三种情况再换 WSL2:你需要 Linux 才有的工具;你的仓库和工作流本来就在 WSL2 里;两种原生沙箱模式在你的电脑上都跑不起来。

你的 Windows 版本够不够

Windows 版本支持程度说明
Windows 11推荐最稳的基线。公司统一部署也选它。
较新、打满补丁的 Windows 10尽力支持能用,但不如 Windows 11 稳。Codex 依赖新式控制台组件 ConPTY,实际上至少要 1809 版。
更老的 Windows 10不推荐更可能缺 ConPTY 这类组件,在公司环境里也更容易失败。

另外两个前提:Windows 自带的包管理器 winget 要能用,没有就先更新 Windows 或装 Windows Package Manager;推荐的沙箱需要管理员批准一次设置,有些公司管理的电脑即使系统版本够,也会拦住这一步(第 3 节讲)。手机 Remote 也能遥控 Windows 电脑(第 13 课);Computer Use 在 Windows 上的限制见专题 E。

02入门

装好 App 和常用工具

装 App、第一次设置沙箱、再用 winget 装几样开发工具。几分钟的事。界面文字以你电脑上的 App 为准。

1
下载安装 ChatGPT 桌面 App从 微软的安装程序装;喜欢命令行的,用下面那条 winget 命令。自己安装时需要管理员批准一次,官方说这是正常的;没有管理员权限就找 IT。
2
登录、切到 Codex、选一个项目和 Mac 上一样,见第 1 课。Windows 上打开文件夹的快捷键是 Ctrl+O。
3
按提示设置沙箱输入框上方会出现设置 Windows 沙箱的提示。推荐的 elevated 模式要你批准一次管理员提示(UAC,也就是 Windows 弹出来的管理员确认窗口)。
4
发消息前选好 Ask for approval官方特别提醒:想让沙箱保护生效,发消息之前在输入框下方的权限菜单里选 Ask for approval(每次越界都先问你)。三档权限第 3 课讲。
5
装几样常用开发工具用下面第二段命令。可以粘到集成终端里跑,也可以直接让 Codex 帮你装。装完 GitHub CLI 还要运行一次 gh auth login 登录,这一步要你自己在集成终端里做。
PowerShell · 用 winget 安装 App
winget install --id 9PLM9XGG6VKS -s msstore
PowerShell · 常用开发工具
winget install --id Git.Git
winget install --id OpenJS.NodeJS.LTS
winget install --id Python.Python.3.14
winget install --id Microsoft.DotNet.SDK.10
winget install --id GitHub.cli
工具用来做什么
Git审阅面板靠它工作,查看、回退改动也靠它。没装的话 App 的一部分功能用不了。
Node.js、PythonCodex 干活时常用的工具,有它们做事更快。
.NET SDK要做原生 Windows 应用时用。
GitHub CLIApp 里 GitHub 相关的功能靠它。装完运行 gh auth login 登录一次。

要别的 Python 或 .NET 版本,把包名里的版本号换掉就行。

Windows 上最常用的快捷键

做什么按键
打开设置Ctrl+,
打开文件夹(添加项目)Ctrl+O
新对话Ctrl+N
打开 / 关闭集成终端Ctrl+`
打开 / 关闭审阅面板Ctrl+Alt+B
批准 / 拒绝(批准卡片打开时)Enter / Esc
在 Chat、Work、Codex 之间切换Alt+1 / 2 / 3
查看全部快捷键Ctrl+/

快捷键的完整用法第 2 课讲。

顺手设好编辑器和终端

在 Settings 里可以选 Open(用什么打开文件)的默认程序,比如 Visual Studio、VS Code;每个项目还能单独改,你在某个项目的 Open 菜单里选过别的程序,就以那个为准。

集成终端也能选默认的:PowerShell、Command Prompt、Git Bash 或 WSL,看你电脑上装了哪些。这个设置只对新开的终端生效;已经开着的终端,要重启 App 或开个新对话才会换。终端和 agent(替你跑命令的那个 Codex)是分开设置的,第 6 节细说。

03原理

原生沙箱:elevated 和 unelevated

Windows 原生沙箱有两种模式,目标一样:不让命令写项目文件夹以外的地方,没你点头不能联网。区别在"围挡"用什么材料搭。

elevated(首选):给师傅单独开一个临时工账号账号权限很低,只拿得到工作间的钥匙;对外的网线由门卫(防火墙规则)看着。开账号、安排门卫,要房东(管理员)签一次字。
unelevated(后备):让师傅用你的账号,但把通行证降级靠各个房间的门锁(文件权限)挡住别处;断网靠环境设置,没有专门的门卫。不用房东签字,但没那么牢。

换成术语:elevated 用的是 Codex 专门建的低权限沙箱用户,加上文件系统权限边界、防火墙规则和几项本机策略;unelevated 用的是从你当前用户派生出来的受限令牌(restricted token),靠 ACL(文件访问控制列表)划边界。点下面切换,对比三种围挡。

它管住的是所有命令

沙箱不只管 Codex 自己改文件。它启动的每条命令,比如 git、npm、跑测试,都继承同样的边界。所以在围挡里,常规的读文件、改文件、跑项目命令它自己就能做;要越界,才停下来问你。

在配置文件里指定模式

%USERPROFILE%\.codex\config.toml
[windows]
sandbox = "elevated"      # 推荐
# sandbox = "unelevated"  # 没有管理员权限、或 elevated 设置失败时的后备

两种都能用就选 elevated;默认的原生沙箱在你这儿跑不起来,先用 unelevated 顶上,同时排查。配置文件怎么写、放哪、优先级怎么算,第 7 课讲。

别拿 Full access 图省事

官方的警告:Full access 下 Codex 不再局限于你的项目文件夹,可能误做破坏性的操作,导致数据丢失。宁可留着沙箱,用规则(Rules,第 10 课)给个别命令开例外。

04实战

练一练:这台电脑该用哪种

6 个场景,每个选一种跑法。选完看解析。

05实战

演练:第一次在 Windows 上跑起来

一台新 Windows 电脑,order-admin 刚拷过来。点"开始"一步步回放:设置沙箱、碰到执行策略报错、发现没装 Git。批准卡片你可以自己点"允许"或"拒绝"。

画面为教学示意:沙箱设置提示的文字和按钮、Codex 说的话、测试数量都是虚构的;报错原文、修复命令、安装命令与官方文档一致。

06原理

WSL2:命令在哪跑,项目放哪

用 WSL2 之前先分清两件事:命令在哪跑(agent 是 Windows 原生还是 WSL),文件放哪(Windows 盘还是 Linux 家目录)。搭配对了,又快又稳。

还没装 WSL 的,用管理员身份打开 PowerShell,运行 wsl --install(常见的选择是 Ubuntu)。注意只支持 WSL2:Linux 沙箱换成 bubblewrap 之后,WSL1 就不再支持了。

选一种组合,看怎么放

agent(替你跑命令的 Codex)在
项目放在

让 agent 跑在 WSL2 里

  1. 打开 Settings,把 agent 从 Windows native 切到 WSL。
  2. 重启 App。不重启不生效。项目会留在原处,不用重新添加。
  3. WSL2 里用的是 Linux 沙箱,要先装 bubblewrap(Linux 上做沙箱隔离的工具):sudo apt install bubblewrap(Fedora 用 sudo dnf install bubblewrap)。缺了它,Codex 启动时会警告。

agent 和集成终端是分开设置的:可以 agent 在 WSL、终端用 PowerShell,也可以两边都用 WSL,看你习惯。

在 WSL 里用 CLI,想和 App 共用设置

Windows 上的 App 和原生 Codex 共用 %USERPROFILE%\.codex 这个目录。WSL 里的 CLI 默认用 Linux 的家目录,所以配置、登录缓存、会话记录都不自动共享。两个办法:把 WSL 的 ~/.codex 和 %USERPROFILE%\.codex 同步;或者在 WSL 里把 CODEX_HOME 指向 Windows 那个目录:

WSL · ~/.bashrc 或 ~/.zshrc
export CODEX_HOME=/mnt/c/Users/<windows-user>/.codex

把 <windows-user> 换成你的 Windows 用户名。CODEX_HOME 指向的目录必须已经存在。

VS Code 扩展

在 VS Code 的设置里打开下面这项,有 WSL 时 Codex 就在 WSL2 里跑,命令、审批、文件访问都按 Linux 沙箱的规矩来。改了会重新加载 VS Code。VS Code 本身也建议从 WSL 里打开:在 WSL 的终端里进到项目目录,运行 code .,连上以后状态栏会显示 WSL: 发行版名,终端里的路径也变成 /home/... 这样的 Linux 路径。

VS Code settings.json
{
  "chatgpt.runCodexInWindowsSubsystemForLinux": true
}
07实战

PowerShell 与命令行

原生模式下,Codex 跑的每条命令都是 PowerShell 命令。Windows 新手最常碰到的两个坑都在这里:脚本执行策略和管理员权限。

脚本被执行策略拦住

如果你以前没在 PowerShell 里用过 Node.js、npm 这类工具,Codex 或集成终端第一次跑它们时,可能看到这样的报错:

PowerShell(示意)
PS C:\code\order-admin> npm test npm.ps1 cannot be loaded because running scripts is disabled on this system.

意思是 PowerShell 的执行策略不让运行脚本。Codex 替你写的 PowerShell 脚本(.ps1)跑不起来,也是同一个原因。官方给的常见解法是把执行策略改成 RemoteSigned:

PowerShell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
改之前先看说明

这是 PowerShell 本身的设置,不只影响这个项目。官方建议改之前先读微软的 执行策略说明,那里还有别的选项。

需要管理员权限才能跑的命令

Codex 的 agent 继承 App 本身的权限。要让它用管理员权限跑命令,就得用管理员身份启动 App:在开始菜单里找到它,选 Run as administrator(以管理员身份运行)。Codex 的 agent 会继承这个权限级别。权限越大,出错时的代价越大,所以只在确实需要时这样打开,用完换回普通方式。

本地环境脚本

项目的本地环境(setup 脚本和 Actions,第 12 课讲)在 Windows 上照样能用。用的是 npm 脚本这类跨平台命令,所有系统共用一份就行;要 Windows 专用的行为,单独写 Windows 版的 setup 脚本或 Actions。注意两者跑的地方不一样:setup 脚本跑在 agent 的环境里(agent 在 WSL 就是 WSL,否则是 PowerShell),Actions 跑在集成终端的环境里。

装命令行版(CLI)

原生 Windows 上首选官方安装脚本,装和更新都是同一条命令:

PowerShell · 安装 / 更新 Codex CLI
powershell -ExecutionPolicy ByPass -c "irm https://chatgpt.com/codex/install.ps1 | iex"
  • 也可以用 npm 装:npm install -g @openai/codex。
  • 安装脚本默认把 codex 命令放在 %LOCALAPPDATA%\Programs\OpenAI\Codex\bin;想换位置,设 CODEX_INSTALL_DIR。
  • 原生 CLI 和 App 共用 %USERPROFILE%\.codex,配置、登录都是同一份。
  • 要装进 WSL2:在 WSL 的终端里运行 curl -fsSL https://chatgpt.com/codex/install.sh | sh,再运行 codex。

原生 Windows 的 CLI 里有一个 Windows 专用的斜杠命令:

命令(命令行)做什么
/setup-default-sandbox只在你正用着降级的受限令牌沙箱(也就是 unelevated)时出现。按提示走一遍管理员设置,换成 elevated。

文档里还写着 /sandbox-add-read-dir(给沙箱多开一个读目录),但本教程核对的版本里已经移除(见更新记录)。读不到目录的问题,按第 9 节收集 sandbox.log 发诊断。

CLI 的安装、参数和终端里的用法,第 14 课讲全;当前版本号见专题 A。

08实战

排查向导:按症状找办法

选一个症状,或者把报错原文粘进搜索框,然后按顺序试,试过的勾上。官方说,Windows 上的问题大多出在沙箱设置、登录权限和文件权限上,而不是编辑器本身。

排查公司管理的 Windows 电脑时,官方建议先弄清三样:用的是哪种原生沙箱模式、Windows 版本、Codex 显示的策略报错。Windows 以外的问题,看专题 C。

自测:看到这个,第一步做什么

不看向导,你能选对吗?

09深入

进阶:配置、诊断与公司电脑

给打算长期在 Windows 上用 Codex、或者要管一批公司电脑的人。

Windows 专用的配置项

config.toml
[windows]
sandbox = "elevated"             # 或 "unelevated"

Windows sandbox 页还说:两种模式默认都把沙箱里的命令放到一个私有桌面(private desktop)上运行,把界面也隔离开;只有为了兼容旧的 Winsta0\Default 行为,才设 sandbox_private_desktop = false。不过 9 月 29 日之后的配置参考里已经没有这个键了,而 sandbox 多了第三个值 mxc,官方还没写它是什么。这两处先别改,等文档说清楚。

管理员可以锁定沙箱模式

公司管理员能在 requirements.toml(管理员强制的配置,第 7 课提到)里规定允许哪几种原生沙箱。下面这样写,就只能用 elevated,用户没法退到 unelevated:

requirements.toml(管理员)
[windows]
allowed_sandbox_implementations = ["elevated"]

两种都允许就把两个值都写上;这时如果没选模式,Codex 优先用 elevated。列表不能是空的。

在沙箱里试跑一条命令(命令行)

想知道某条命令放进沙箱会怎样,可以用 CLI 的沙箱辅助命令,它用的是和 Codex 内部一样的策略:

PowerShell
codex sandbox windows [--permissions-profile <name>] [COMMAND]...

给 OpenAI 发诊断

沙箱问题实在解决不了,把 CODEX_HOME/.sandbox/sandbox.log 发过去,再附上:你想做什么;是 elevated 设置失败了,还是在用 unelevated;App 里显示的报错;有没有看到 1385 或别的 Windows、PowerShell 报错;Windows 11 还是 10。不要发 CODEX_HOME/.sandbox-secrets/ 里的任何东西。分享日志前自己先看一遍,确认里面没有敏感信息。

公司统一部署

IT 可以用 Intune、SCCM 或别的管理工具统一安装和更新 App,有 x64 和 Arm64 两种离线 MSIX 包。具体步骤看官方的 Deploy the Windows app。

旧教程对照
  1. "Windows 上只能在 WSL2 里用 Codex":2026 年 3 月起 App 原生支持 Windows,用 PowerShell 加原生沙箱,不用搬进 WSL 或虚拟机,也不用关掉沙箱。WSL2 还在,按需选。
  2. "CLI 只能用 npm i -g 装":Windows 上首选官方的 install.ps1 安装脚本,npm 也还能用。
  3. "WSL1 也能用":0.115 版起不支持了,要 WSL2。
  4. "Windows 上沙箱不好使,直接开 Full access":现在有 elevated、unelevated 两种原生沙箱,官方明确不建议 Full access。
  5. "单独下载 Windows 版 Codex App":现在装的是 ChatGPT 桌面 App,在里面切到 Codex。
  6. "读不了目录就用 /sandbox-add-read-dir":文档还在,但本教程核对的版本里已经移除(见更新记录)。
公司电脑上 elevated 一直装不上,怎么办?
先切到 unelevated 把活干了,它仍然有文件边界。再请 IT 确认三件事:允不允许经管理员批准的设置去创建本地用户和组、改防火墙规则、给沙箱用户所需的登录权限。长期来看,官方建议在公司电脑上把 elevated 弄好。如果管理员在 requirements.toml 里只允许 elevated,你就没法退到 unelevated,只能找 IT。
在 WSL2 里装了 bubblewrap,还是警告?
Ubuntu 25.04 直接从软件源装 bubblewrap 就行。Ubuntu 24.04 可能还会警告"没法创建需要的用户命名空间",官方的办法是加载 bwrap 的 AppArmor 配置:
sudo apt update
sudo apt install apparmor-profiles apparmor-utils
sudo install -m 0644 \
  /usr/share/apparmor/extra-profiles/bwrap-userns-restrict \
  /etc/apparmor.d/bwrap-userns-restrict
sudo apparmor_parser -r /etc/apparmor.d/bwrap-userns-restrict
完整说明看官方的 Sandbox 页。
App 的配置文件放在哪?
Windows 上是 %USERPROFILE%\.codex,和原生 CLI 共用。WSL 里的 CLI 默认不共用,办法见第 6 节。沙箱日志在这个目录下的 .sandbox\sandbox.log。
装了 Cmder,但"打开"列表里没有它
右键 Cmder,选 Add to Start 把它加进开始菜单,然后重启 Codex 或重启电脑。
我要让 Codex 帮我装 Git、Node.js,会怎样?
可以,官方就是这么建议的。用 winget 装软件要联网,在默认的 Ask for approval 下,它会先弹批准卡片问你。你也可以把第 2 节的命令粘到集成终端里自己跑。
能不能干脆关掉沙箱,省得设置?
不建议。App 在 Windows 上原生支持沙箱,本来就是为了让你不用关掉它。真有个别命令老被拦,用规则(Rules,第 10 课)给它开例外;或者按官方的说法,把审批方式设成"从不询问",让 Codex 在沙箱里自己想办法,这些配置第 3、7 课讲。
10检验

小测验

8 道题,每题选完会立刻看到解析。