Codex 一直 reconnecting?回复慢得离谱?一条命令解决。
自动探测你本机可用的 HTTP 代理端口,写入 ~/.codex/.env,强制 Codex 的所有流量(包括 WebSocket)都走 HTTP/HTTPS 代理端口。
Codex 现在的数据传输不再走普通的 HTTP/HTTPS,全部升级到了 WebSocket。
而大部分人的代理节点只代理 HTTP/HTTPS 流量,WebSocket 连不通。于是:
Codex 尝试 WebSocket → 失败
→ 重试 → 失败 → 重试 → 失败 → 重试 → 失败 → 重试 → 失败
→ 5 次之后才降级回 HTTPS
这一轮试探就是你看到的 「正在重新连接 / reconnecting」,以及一个简单问题要等好几分钟的根本原因。切节点没用,因为问题不在节点,在于流量根本没被送进代理。
Codex 启动时会读取 $CODEX_HOME/.env(默认 ~/.codex/.env)里的环境变量。往里面写死代理配置,让 Codex 的每一条连接——包括 WebSocket——都通过你本机的 HTTP 代理端口出去:
HTTP_PROXY=http://127.0.0.1:7897
HTTPS_PROXY=http://127.0.0.1:7897
ALL_PROXY=http://127.0.0.1:7897
NO_PROXY=localhost,127.0.0.1,::1麻烦的地方在于:你得知道自己代理软件的 HTTP 端口到底是几。Clash Verge 默认 7897,老版 Clash 是 7890,v2rayN 是 10809,各家都不一样;而且很多人误填了 SOCKS5 端口,填完照样不通。
这个脚本就是来干这件事的:自动扫、自动测、自动写。
iwr -useb https://raw.githubusercontent.com/SAGIRIxr/codex-proxy-fix/main/fix-codex.ps1 -OutFile "$env:TEMP\fix-codex.ps1"; powershell -ExecutionPolicy Bypass -File "$env:TEMP\fix-codex.ps1"curl -fsSL https://raw.githubusercontent.com/SAGIRIxr/codex-proxy-fix/main/fix-codex.sh | bash跑完之后 完全退出 Codex 再重新启动(关窗口不算,要彻底结束进程),然后随便问一句试试。
习惯先看代码再执行的话,
git clone下来直接跑本地文件就行,脚本只有一个文件、无依赖。
-
找代理端口,按这个顺序:命令行参数 → 当前环境变量 → 系统代理设置(Windows 注册表 / macOS
scutil/ GNOMEgsettings)→ 扫描 17 个常见端口。 -
逐个实测:向每个候选端口发一个真实的
HTTP CONNECT chatgpt.com:443,只有能成功打通隧道的才算数。 这一步会自动把 SOCKS5 端口筛掉——它们过不了 HTTP CONNECT,而这正是很多人「明明配了代理还是 reconnecting」的原因。 -
写入
~/.codex/.env,配置放在一个带标记的块里:# >>> codex-proxy-fix >>> ... # <<< codex-proxy-fix <<<
只碰这一个文件,而且:
- 改动前自动备份成
.env.bak.20260812-174300 - 你原有的其它变量原样保留
- 块外冲突的旧代理变量会被注释掉(不是删掉),卸载时自动还原
- 重复运行是幂等的,不会越写越多
- 不动
config.toml,不碰你的模型、插件、项目信任设置
| PowerShell | Bash | 说明 |
|---|---|---|
-Check |
--check |
只体检,不改任何文件 |
-Port 7890 |
--port 7890 |
手动指定端口,跳过自动探测 |
-ProxyUrl http://127.0.0.1:7897 |
--proxy http://127.0.0.1:7897 |
指定完整代理地址(可含账号密码) |
-Uninstall |
--uninstall |
移除配置,还原被注释的行 |
-Yes |
--yes / -y |
不询问直接写入 |
-CodexHome <path> |
--codex-home <path> |
自定义 Codex 配置目录 |
先体检看看情况:
.\fix-codex.ps1 -Check./fix-codex.sh --check「没有发现任何本地代理端口」
代理软件没开,或者用的是 TUN/透明代理模式没暴露本地端口。打开代理软件,在设置里找到 HTTP 端口(Clash 系叫「混合端口 / Mixed Port」),然后 --port 手动指定。
「发现了监听中的端口,但没有一个能完成 HTTP CONNECT」 八成是扫到的都是 SOCKS5 端口。去代理软件里确认 HTTP / 混合端口的数字,手动指定。也可能是节点本身就不通——先用浏览器验证一下代理能不能正常上网。
改完还是 reconnecting?
先确认 Codex 是彻底重启了的:.env 只在进程启动时读一次,关个窗口不生效。再跑一次 --check 确认配置写进去了。如果代理是 HTTP/1.1 的老实现、不支持 WebSocket 升级,就得换个支持的客户端。
想还原?
-Uninstall / --uninstall。或者直接删掉 ~/.codex/.env 里那对 # >>> codex-proxy-fix >>> 标记之间的内容,也可以从 .env.bak.* 备份恢复。
会泄露我的密钥吗?
脚本只往 .env 写代理地址,不读 auth.json,不联网上传任何东西。唯一的网络行为是向你本机的候选端口发 CONNECT chatgpt.com:443 探测连通性。
- Windows — Windows PowerShell 5.1 及以上,无需管理员权限
- macOS / Linux / WSL — Bash 4+,有
curl更好(没有会退回裸 socket 探测) - 对 Clash / Clash Verge / Mihomo / v2rayN / Shadowsocks / sing-box / Surge / Quantumult 等都适用,只要它提供 HTTP 或混合端口
Codex stuck on reconnecting? Painfully slow replies? One command fixes it.
Codex moved its transport to WebSocket. Most proxy nodes only tunnel plain HTTP/HTTPS, so Codex retries the WebSocket handshake five times before falling back to HTTPS — that retry loop is the "reconnecting" spinner and the multi-minute wait for a trivial question.
The fix is to write proxy environment variables into $CODEX_HOME/.env so every Codex connection, WebSocket included, goes through your local HTTP proxy port. The hard part is knowing which port that is — this script finds it for you.
It probes candidate ports with a real HTTP CONNECT chatgpt.com:443, so SOCKS5-only ports get ruled out automatically (a very common cause of "I set a proxy and it still doesn't work"). Then it writes a marked block into ~/.codex/.env, backing up the file first and leaving everything else untouched. -Uninstall / --uninstall reverts it.
# Windows
iwr -useb https://raw.githubusercontent.com/SAGIRIxr/codex-proxy-fix/main/fix-codex.ps1 -OutFile "$env:TEMP\fix-codex.ps1"; powershell -ExecutionPolicy Bypass -File "$env:TEMP\fix-codex.ps1"# macOS / Linux / WSL
curl -fsSL https://raw.githubusercontent.com/SAGIRIxr/codex-proxy-fix/main/fix-codex.sh | bashFully quit and restart Codex afterwards — .env is read once at process start.
Flags: --check (diagnose only), --port N, --proxy URL, --uninstall, --yes, --codex-home PATH.
MIT