使用 Codex Desktop 时经常遇到 WebSocket 握手超时,每次 5 次重试连接才能响应,纯属浪费时间。
原因
Codex Desktop 新版升级后默认连接方式改成了 WebSocket 协议。桌面应用不像浏览器会自动吃系统代理,需要显式读取环境变量 HTTP_PROXY、HTTPS_PROXY 才会走代理。如果没设,就以为能直达,等半天没响应进入重连循环。
解决方案
1. 查看系统代理(macOS)
scutil --proxy2. 创建/编辑 ~/.codex/.env,写入代理变量
HTTP_PROXY=http://127.0.0.1:<端口>
HTTPS_PROXY=http://127.0.0.1:<端口>
保存后退出并重新打开 Codex Desktop。
3. 也可以发给 Codex 让它自己修
Prompt:
帮我修复 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。
4. 一键自动化脚本(仅 macOS)
#!/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}')
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
if [[ -z "$http_proxy" && -z "$https_proxy" ]]; then
echo "❌ 未检测到系统代理,当前无代理设置。"
exit 0
fi
[[ -n "$http_proxy" && -z "$https_proxy" ]] && https_proxy="$http_proxy"
echo "✅ 检测到系统代理:"
[[ -n "$http_proxy" ]] && echo " HTTP_PROXY=$http_proxy"
[[ -n "$https_proxy" ]] && echo " HTTPS_PROXY=$https_proxy"
mkdir -p "$ENV_DIR"
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 已更新完成。"