使用 codex Desktop,估计大家经常会遇到下面的情况
而且几乎每次,都是 5 次重试连接之后,都能给出响应,这 5 次重新连接让大家等待了太多时间,纯属浪费。
原因是 codex Desktop 新版升级之后(具体从哪个版本开始,具体不详),默认连接方式改成了 **WebSocket 协议。**这种连不上,它在日志中直接体现的就是 WebSocket 握手超时。
为什么会这样?因为 Codex Desktop 是一个桌面应用,它不像浏览器那样会自动吃系统代理。它启动的时候,需要显式读取环境变量里的 HTTP_PROXY、HTTPS_PROXY 这些,才会走代理。如果这些变量没设,它就以为自己能直达,结果就是等半天没响应,只好进入重连循环。
以 macOS 为例
scutil --proxy
上面图片显示的 http,https 的代理端口都是 6152,可以手动创建,或者编辑已有的 ~/.codex/.env, 写入代理变量。
HTTP_PROXY=http://127.0.0.1:6152
HTTPS_PROXY=http://127.0.0.1:6152
编辑完 ~/.codex/.env,保存之后,退出 codex Desktop 后重新打开 codex Desktop,即可解决这个问题。
不想手搓的话,可以使用下面的 Prompt,发送给 Codex
帮我修复 Codex Desktop 一直 Reconnecting 的问题。
请定位我本机正在使用的代理端口和代理协议,然后创建或更新 ~/.codex/.env,写入以下代理配置。不要写死端口,请替换成实际端口;如果文件已经存在,保留其他配置。
HTTP_PROXY="http://127.0.0.1:<HTTP 或 mixed 端口>"
HTTPS_PROXY="http://127.0.0.1:<HTTP 或 mixed 端口>"
写入后检查配置是否正确,并告诉我需要如何重启 Codex Desktop。
当然,你也可以试一下,我的一键自动化脚本(只适用macOS)
bash
#!/bin/bash
# 检测 macOS 系统代理并更新 ~/.codex/.env
ENV_DIR="$HOME/.codex"
ENV_FILE="$ENV_DIR/.env"
# 读取系统代理配置
proxy_info=$(scutil --proxy)
http_enabled=$(echo "$proxy_info" | awk '/HTTPEnable/{print $3}')
http_host=$(echo "$proxy_info" | awk '/HTTPProxy/{print $3}')
http_port=$(echo "$proxy_info" | awk '/HTTPPort/{print $3}')
https_enabled=$(echo "$proxy_info" | awk '/HTTPSEnable/{print $3}')
https_host=$(echo "$proxy_info" | awk '/HTTPSProxy/{print $3}')
https_port=$(echo "$proxy_info" | awk '/HTTPSPort/{print $3}')
# 构建代理 URL
http_proxy=""
https_proxy=""
if [[ "$http_enabled" == "1" && -n "$http_host" && -n "$http_port" ]]; then
http_proxy="http://${http_host}:${http_port}"
fi
if [[ "$https_enabled" == "1" && -n "$https_host" && -n "$https_port" ]]; then
https_proxy="http://${https_host}:${https_port}"
fi
# 如果 HTTP 代理和 HTTPS 代理都没有
if [[ -z "$http_proxy" && -z "$https_proxy" ]]; then
echo "❌ 未检测到系统代理,当前无代理设置。"
exit 0
fi
# HTTPS 未单独设置时,复用 HTTP 代理
if [[ -n "$http_proxy" && -z "$https_proxy" ]]; then
https_proxy="$http_proxy"
fi
echo "✅ 检测到系统代理:"
[[ -n "$http_proxy" ]] && echo " HTTP_PROXY=$http_proxy"
[[ -n "$https_proxy" ]] && echo " HTTPS_PROXY=$https_proxy"
# 确保目录存在
mkdir -p "$ENV_DIR"
# 如果 .env 文件不存在,直接创建
if [[ ! -f "$ENV_FILE" ]]; then
{
[[ -n "$http_proxy" ]] && echo "HTTP_PROXY=$http_proxy"
[[ -n "$https_proxy" ]] && echo "HTTPS_PROXY=$https_proxy"
} > "$ENV_FILE"
echo "📄 已创建 $ENV_FILE 并写入代理配置。"
exit 0
fi
# 文件已存在,更新或追加
update_or_append() {
local key="$1" value="$2"
if grep -q "^${key}=" "$ENV_FILE"; then
sed -i '' "s|^${key}=.*|${key}=${value}|" "$ENV_FILE"
echo "🔄 已更新 ${key}"
else
echo "${key}=${value}" >> "$ENV_FILE"
echo "➕ 已追加 ${key}"
fi
}
[[ -n "$http_proxy" ]] && update_or_append "HTTP_PROXY" "$http_proxy"
[[ -n "$https_proxy" ]] && update_or_append "HTTPS_PROXY" "$https_proxy"
echo "✅ $ENV_FILE 已更新完成。"
2 个帖子 - 2 位参与者
