现象
环境:Windows 11 + Codex 桌面版 26.1023 + SakuraCat 代理。
- Codex 启动后长时间卡在 logo 界面
- 偶尔能进主界面,但左下角用户信息一直是骨架屏,加载不出来
- 右侧输入框上方提示:Couldn’t load workspace settings / Retry to continue chatting
- 对话功能完全不可用,点 Retry 也没用
背景
之前让 Codex 里的 AI 帮忙“让 Codex 走系统代理”,它改了 Windows 的系统代理设置:
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings
ProxyEnable = 1
ProxyServer = 127.0.0.1:7897
改完就开始出问题。
原因
问题有三层,刚好叠在一起。
1. 7897 不是 SakuraCat 当前可用的代理端口。
当时 7897 确实在监听,TCP 能连上,甚至 CONNECT 也能返回 200,所以看起来很“正常”。但它其实不是 SakuraCat 真正在用的代理:真正可用的是 core 进程监听的 127.0.0.1:12450。7897 是很久以前版本留下的组件端口,握手能做到一半,TLS 一建立就被重置,所有 HTTPS 请求都会失败。用 curl 打一个 https 地址就能看出来。
2. Codex 的内核不读 Windows 系统代理。
Codex 的请求分两套:内核(codex.exe,Rust 写的)只认 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY 环境变量;界面层(Electron/Chromium)才会读系统代理。所以只改注册表,模型请求这一层根本没生效。
3. 那次写入进了 Codex 自己的“虚拟注册表”,真实注册表当时其实没变。
Codex 桌面版是 MSIX 打包应用,它的进程读写 HKCU 时,会被重定向到应用容器里的虚拟注册表(SystemAppData\Helium)。那次 Set-ItemProperty 成功写进去的是这份副本,只有 Codex 自己看得到。
结果就是:真实系统代理不管改成 12450 还是关掉,Codex 都按 127.0.0.1:7897 走,然后报 net::ERR_PROXY_CONNECTION_FAILED。这也解释了为什么重装 SakuraCat 完全没用。
怎么定位
先分清楚是“代理本身死了”还是“应用用错了代理”。
第一步,测端口能不能真的走 HTTPS。
只看 CONNECT 200 会骗人,要完整跑一次 HTTPS:
curl.exe -s -o NUL -w "%{http_code}" -x http://127.0.0.1:12450 --max-time 15 https://api.openai.com/v1/models
返回 401 说明网络通了(没带 key 被拒绝,属于正常);返回 000 就是没通。两个端口都测一遍,很快就知道哪个能用。
第二步,看真实的系统代理。
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' |
Select-Object ProxyEnable, ProxyServer, AutoConfigURL
netsh winhttp show proxy
第三步,看 Codex 自己的日志。
- 内核日志:
C:\Users\<用户名>\.codex\logs_2.sqlite,看logs表的feedback_log_body字段,搜error sending request、timed out - 界面日志:
C:\Users\<用户名>\AppData\Local\Packages\OpenAI.Codex_*\LocalCache\Local\Codex\Logs\年\月\日\*.log,搜ERR_和sa_server_request_failed
我当时看到的关键信息是 sa_server_request_failed errorCode=ERR_PROXY_CONNECTION_FAILED。
第四步,看两个进程各自连的是哪个端口。
Get-NetTCPConnection -State Established |
Where-Object { $_.RemotePort -in 12450, 7897 } |
Select-Object RemotePort, OwningProcess
结论很直接:codex.exe 连 12450(正常),ChatGPT.exe 连 7897(失败);而真实注册表里明明是 12450。两边对不上,说明 Codex 读代理的来源另有出处,也就是上面说的虚拟注册表。
修复
1. 把系统代理恢复成 SakuraCat 的正确端口
最省事的办法是在 SakuraCat 里把“系统代理”关掉再打开,它自己会写对端口。要手动写的话:
$p = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings'
$bypass = 'localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*'
Set-ItemProperty $p -Name ProxyEnable -Value 1 -Type DWord
New-ItemProperty $p -Name ProxyServer -Value 'http://127.0.0.1:12450' -PropertyType String -Force | Out-Null
New-ItemProperty $p -Name ProxyOverride -Value $bypass -PropertyType String -Force | Out-Null
Remove-ItemProperty $p -Name AutoConfigURL -ErrorAction SilentlyContinue
netsh winhttp reset proxy
2. 给 Codex 内核写代理环境变量
$proxy = 'http://127.0.0.1:12450'
[Environment]::SetEnvironmentVariable('HTTP_PROXY', $proxy, 'User')
[Environment]::SetEnvironmentVariable('HTTPS_PROXY', $proxy, 'User')
[Environment]::SetEnvironmentVariable('ALL_PROXY', $proxy, 'User')
[Environment]::SetEnvironmentVariable('NO_PROXY', 'localhost,127.0.0.1,::1', 'User')
改完不会立刻对已经开着的程序生效。重启一下资源管理器(任务管理器里找到“Windows 资源管理器”,右键重新启动),或者重新登录一次,之后新开的程序才会继承。
3. 清掉 Codex 容器里的错误代理(关键一步)
先把 Codex 完全退出,然后开 管理员 PowerShell:
Get-Process ChatGPT, codex -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Sleep 3
$h = "$env:LOCALAPPDATA\Packages\OpenAI.Codex_2p2nqsd0c76g0\SystemAppData\Helium"
Rename-Item $h ($h + '.bak-' + (Get-Date -Format 'yyyyMMdd-HHmmss'))
再正常打开 Codex。
这一步会重置 Codex 的应用数据(窗口布局、缓存这类),但登录信息和会话记录在 C:\Users\<用户名>\.codex,不会丢。
不想敲命令的话,图形界面里也能做:设置 → 应用 → 已安装的应用 → 搜 Codex(开始菜单里可能显示为 ChatGPT)→ 高级选项 → 重置。效果类似,只是会多清一些缓存。
4. 验证
- 界面上左下角头像和邮箱能正常显示,右侧不再提示 workspace settings
- 连接检查:ChatGPT.exe 和 codex.exe 都连
127.0.0.1:12450 - 界面日志里
ERR_PROXY_CONNECTION_FAILED归零,内核日志里能看到status=200 OK
几点提醒
- 不要手动改 HKCU 的系统代理。交给 SakuraCat 自己的开关,它知道自己当前用哪个端口。
- 代理软件的端口会变。这次 7897 是旧组件留下的,真正可用的是 12450。判断端口别只看“能不能连”,要实际跑一次 HTTPS。
- 改完代理要重启 Codex。界面层是在启动时读代理配置的,不重启不生效。
- MSIX / Microsoft Store 版应用可能有一份自己的注册表副本。如果改真实注册表后应用行为不变,先怀疑它读的是虚拟注册表,可以试着重置应用数据。
回滚
如果之后想撤掉这些改动:
foreach ($n in 'HTTP_PROXY','HTTPS_PROXY','ALL_PROXY','NO_PROXY') {
[Environment]::SetEnvironmentVariable($n, $null, 'User')
}
虚拟注册表备份在 %LOCALAPPDATA%\Packages\OpenAI.Codex_2p2nqsd0c76g0\SystemAppData\Helium.bak-<时间戳>,确认 Codex 一切正常后可以直接删掉。```


private note
交流
文章暂不开放公开评论。如果你有想法、问题或建议,欢迎私下联系站长。
联系站长