# 策展 · X (Twitter) 🔥

> 📖 本站完整內容索引（documentation index）：[llms.txt](/llms.txt)

> 作者：Drunk (@Liu_zhongxisn) · 平台：X (Twitter) · 日期：2026-05-28

> 原始來源：https://x.com/Liu_zhongxisn/status/2059664137748410850

## 中文摘要

# Codex 每次新會話都 Reconnecting？先查代理，再看協定

安裝完 Codex Desktop 之後，每次開啟新會話，第一句話發送出去，介面就開始轉圈。

左下角彈出 reconnecting，一次、兩次，有時候五次。等它自己連回來，又能正常回答了。你換過模型，重啟過 App，甚至懷疑是不是帳號被風控了——其實都不是。

能用，但新會話的第一句話總要抖幾下。你剛想讓 Codex 改個檔案，它先給你表演一段 reconnecting，節奏全亂。

我排查下來就兩種情況。一種是 Codex 根本沒走到代理。另一種是代理走了，但 WebSocket 那條鏈路在本地代理上扛不住。

這兩個長得很像，修法不一樣。很多人一上來就去改 config.toml，其實可能只是 Codex 沒吃到代理環境變數。也有人只配了 .env，新會話第一次還是重連——因為代理對 WebSocket upgrade 或長連線保持的處理就是不太行。

## 先判斷是不是這類問題

下面這些如果全中，那大概率是這篇要說的：

- Codex Desktop 能正常登入。

- 模型能用，不是所有請求都失敗。

- 每次新會話第一條訊息容易 reconnecting。

- 重連幾次之後又能正常回覆。

- 你電腦上跑了 Clash、Shadowrocket、sing-box、Surge、V2RayN 之類的本地代理。

- 代理埠號是 7890、10808、7897，或者你自己改過的。

這種情況先別懷疑模型。模型真不可用的時候表現很直接：請求直接報錯、鑑權失敗、模型列表拉不出來、所有對話都走不下去。你現在看到的是「新會話第一下抽風，後面又好了」，這更像是連線建立階段的穩定性問題。

如果日誌裡出現了類似這樣的東西，那基本坐實：

```
proxy(http://127.0.0.1:10808/) intercepts 'https://chatgpt.com/'
tunneling HTTPS over proxy
```

請求確實過了本地代理。問題就在這條鏈路上。

![](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/1779938388259-iaHJVkzofasAAifeOjpg.jpg)

## 第一步：讓 Codex 明確吃到代理

最輕量的方案，在 .codex 目錄下放一個 .env 檔案。

路徑：

```
macOS: /Users/你的使用者名稱/.codex
Windows: C:\Users\你的使用者名稱\.codex
```

Windows 上直接在檔案總管網址列敲 %USERPROFILE%\.codex 也能到。

進去以後新建檔案，名字就叫 .env。不是 .env.txt——Windows 預設隱藏檔案副檔名，這個坑踩過的人不少。不確定的話就開啟「檢視檔案副檔名」，或者用 PowerShell 看一眼。

裡面寫兩行：

```
HTTP_PROXY=http://127.0.0.1:7890
HTTPS_PROXY=http://127.0.0.1:7890
```

埠號換成你自己的。比如有些 Windows 代理工具本地埠號是 10808：

```
HTTP_PROXY=http://127.0.0.1:10808
HTTPS_PROXY=http://127.0.0.1:10808
```

儲存，然後完全退出 Codex Desktop 再重開。不是關視窗就完了——確認背景處理程序也沒掛著。這類環境變數是啟動時讀取的，App 已經開著的時候你補 .env，它不一定立刻認。

開一個新會話，發一句短的話試一下。如果 reconnecting 消失或者明顯變少，就別繼續折騰了。問題就是 Codex 沒拿到代理設定。

## 配了代理還是抖？

Codex 已經在走代理了，但新會話第一次建立串流連線還是連續 reconnecting。這時候就不是「沒代理」的問題，而是「代理鏈路對某種連線方式不穩」。

尤其是 WebSocket。

WebSocket 本身沒問題。但你的請求要先過本地代理、再過系統代理、走 HTTPS 隧道、做協定升級、最後才能建立成長連線——中間這麼多環節，隨便哪一個晃一下，你介面上看到的就會是 reconnecting。

而且它還不是每次都掛。第一次連線最容易出事，後面穩定後又跟沒事一樣。有點像車打火——冷車的時候轉鑰匙要吭哧好幾下，熱了之後一下就著。這種最迷惑人。

這時候可以考慮第二個方案：給 Codex 新建一個只走 HTTP/SSE 的 provider，讓它在這個 provider 上不嘗試 WebSocket。

## 第二步：新建 HTTP/SSE provider，繞過 WebSocket

Codex 的主設定檔在：

```
Windows: C:\Users\你的使用者名稱\.codex\config.toml
macOS: /Users/你的使用者名稱/.codex\config.toml
```

Windows 用 PowerShell 開啟：

```
notepad "$env:USERPROFILE\.codex\config.toml"
```

改之前先備份：

```
Copy-Item "$env:USERPROFILE\.codex\config.toml" "$env:USERPROFILE\.codex\config.toml.bak"
```

在 config.toml 頂部附近加一行：

```
model_provider = "openai_http"
```

如果檔案裡已經有 model_provider = ...，別重複寫，直接把原本的值改成 openai_http。

然後在檔案末尾加上：

```
[model_providers.openai_http]
name = "OpenAI HTTP only"
wire_api = "responses"
supports_websockets = false
requires_openai_auth = true
```

解釋一下：

- model_provider = "openai_http" — 讓 Codex 預設用這個新 provider。

- [model_providers.openai_http] — 定義一個叫 openai_http 的 provider，不動內建的 openai。

- wire_api = "responses" — 繼續走 OpenAI Responses API。

- supports_websockets = false — 這是關鍵。告訴 Codex 這個 provider 不支援 WebSocket。

- requires_openai_auth = true — 繼續用 Codex / OpenAI 登入認證，不是讓你填 API Key。

它不是換模型，也不是換帳號。只是把傳輸方式從容易在某些代理鏈路裡抖的 WebSocket，切到更像普通 HTTPS 串流請求的 HTTP/SSE。本地代理對 HTTP/SSE 的處理一般更穩。

## 給個完整範例

你的 config.toml 裡可能已經有模型、沙盒、MCP、plugin 這些設定。別為了修 reconnecting 把原設定全刪了。

保證頂部有：

```
model_provider = "openai_http"
```

末尾有：

```
[model_providers.openai_http]
name = "OpenAI HTTP only"
wire_api = "responses"
supports_websockets = false
requires_openai_auth = true
```

大概這個樣子：

```
model_provider = "openai_http"
model = "你的模型名稱"
model_reasoning_effort = "high"

[windows]
sandbox = "workspace-write"

# 其他原有設定保持不變

[model_providers.openai_http]
name = "OpenAI HTTP only"
wire_api = "responses"
supports_websockets = false
requires_openai_auth = true
```

儲存，重啟 Codex Desktop。開新會話，直接發第一條訊息。別用開很久的舊視窗測——舊視窗可能已經處在另一個連線狀態裡了。

## 排障順序

不想看原理，只想修好的話：

1. 找到你的代理埠號。

1. 在 .codex/.env 裡寫 HTTP_PROXY 和 HTTPS_PROXY。

1. 重啟 Codex，新會話測試。

1. 如果還有明顯 reconnecting，再改 config.toml，加 openai_http provider。

1. 重啟 Codex，新會話測試。

不要反過來。.env 解決的是「Codex 走沒走代理」，HTTP/SSE provider 解決的是「走了代理之後連線穩不穩」。兩個方案不是互斥的——.env 是把路指清楚，supports_websockets = false 是換一條不容易被本地代理折騰的車道。

## 怎麼確認設定沒寫壞

裝了 Codex CLI 的話：

codex debug models

至少能確認 TOML 格式沒寫錯，設定檔能被正常讀取。

也可以用 Python 看一眼：

```
@'
import os, tomllib

p = os.path.expandvars(r'%USERPROFILE%\.codex\config.toml')
with open(p, 'rb') as f:
    cfg = tomllib.load(f)

print(cfg.get('model_provider'))
print(cfg.get('model_providers', {}).get('openai_http', {}))
'@ | python -
```

正常輸出類似：

```
openai_http
{'name': 'OpenAI HTTP only', 'wire_api': 'responses', 'supports_websockets': False, 'requires_openai_auth': True}
```

當然，設定能讀和代理鏈路穩是兩碼事。最終還是得開個新會話發一條試一下。

## 歷史記錄看起來變少了？

先說一句：別慌。

model_provider 從預設的 openai 切到 openai_http 之後，Codex Desktop 右側歷史列表可能只顯示新 provider 下的對話。舊的看起來像丟了。

一般不是真被刪了，是 provider 維度變了，介面展示範圍不一樣。在意舊歷史的話，改之前備份設定。修完 reconnecting 再單獨處理歷史顯示的問題——別一邊修連線、一邊懷疑歷史丟了、一邊又改回去，越修越亂。

## 怎麼回退

改完更糟了，先別繼續堆設定。關掉 Codex Desktop。

只想撤回 HTTP/SSE provider 的話，開啟 config.toml：

```
notepad "$env:USERPROFILE\.codex\config.toml"
```

刪掉或改回 model_provider = "openai_http" 這一行，再把末尾的 [model_providers.openai_http] 段刪掉。

前面做過備份的話直接恢復：

```
Copy-Item "$env:USERPROFILE\.codex\config.toml.bak" "$env:USERPROFILE\.codex\config.toml" -Force
```

.env 寫錯了就去 .codex 目錄把埠號改對，或者臨時移走 .env 再重啟 Codex。

## 哪些情況別按這篇修

- 完全登入不了的——不是這篇。

- 所有請求都失敗的——不是這篇。

- 代理工具自己都存取不了 chatgpt.com 的——先修代理，別動 Codex。

- 公司網路、防火牆、安全軟體直接攔截 Codex 的——.env 和 HTTP/SSE provider 也未必救得回來。

這篇只解決一個很具體的場景：Codex 能用，但新會話第一次請求總要 reconnecting 幾次。

這種情況，先配 .codex/.env，確認它真的走了代理。還抖，再上 openai_http provider 把 WebSocket 繞開。

別一口氣改五個地方。先讓它少重連一次再說。

## 標籤

Codex, 教學資源, Codex
