- Codex CLI mắc kẹt ở màn hình Reconnecting 1/5 không phải do lỗi tài khoản - nguyên nhân thực là WebSocket không đi qua được proxy.
- Codex thử 5 lần x 15 giây = lãng phí 75 giây trước khi tự chuyển sang HTTP.
- Ba cách fix từ nhanh nhất đến toàn diện: tắt WebSocket qua config, khai báo proxy env vars, hoặc bật TUN mode trên phần mềm proxy.
TL;DR
Codex CLI bị kẹt ở màn hình Reconnecting...1/5 → 5/5 là do WebSocket không đi qua được proxy - không phải lỗi tài khoản hay mạng yếu. Codex thử kết nối WebSocket 5 lần, mỗi lần timeout 15 giây, tổng cộng mất 75 giây trước khi tự chuyển sang HTTP vốn chạy được bình thường. Bài này trình bày 3 cách fix theo thứ tự từ nhanh nhất đến toàn diện nhất.
Tại sao Codex cứ Reconnecting mỗi lần mở?
Khi khởi động một phiên làm việc mới, Codex mặc định ưu tiên dùng WebSocket (WSS protocol) để duy trì kết nối thời gian thực với server. Vấn đề nằm ở chỗ trong hầu hết môi trường dùng proxy hoặc VPN, WebSocket handshake không đi qua proxy đúng cách.
Kết quả là Codex liên tục thất bại rồi thử lại theo quy trình sau:
Thử kết nối WebSocket - thất bại (
TransportError::Timeout)Thử lại lần 2, 3, 4, 5 - đều thất bại
Sau 5 lần x 15 giây = 75 giây, mới bỏ WebSocket
Chuyển sang HTTP/SSE - kết nối thành công ngay lập tức
Đó là lý do bạn thấy màn hình loạn Reconnecting trước, rồi Codex đột nhiên hoạt động bình thường sau - không phải ma. Còn thông báo lỗi "Timeout waiting for child process to exit" mà nhiều người thấy trên Windows là misleading hoàn toàn, không liên quan gì đến subprocess.

WebSocket thất bại 5 lần liên tiếp (tổng 75s) trước khi Codex chuyển sang HTTP - vốn kết nối thành công ngay lần đầu
Lưu ý: OpenAI không có kế hoạch fix tự động trong tương lai gần. Khi được hỏi về việc fallback ngay sau lần thất bại đầu tiên, một kỹ sư của OpenAI phản hồi: "WebSocket mang lại nhiều lợi ích về hiệu suất so với HTTP, chúng tôi không muốn dùng fallback trừ khi thực sự cần thiết." Phiên bản v0.125.0 (tháng 4/2026) vẫn chưa giải quyết triệt để vấn đề này.
3 cách fix - chọn theo nhu cầu
Phương án 1: Tắt WebSocket, dùng HTTP (nhanh nhất - dùng ngay)
Cách trực tiếp nhất: nói thẳng với Codex là bỏ WebSocket, dùng HTTP từ đầu. Không cần chỉnh proxy, không cần hiểu sâu về mạng.
Mở file cấu hình Codex:
macOS / Linux:
~/.codex/config.tomlWindows:
C:\Users\<tên-user>\.codex\config.toml
Thêm dòng này vào đầu file:
model_provider = "openai_http"Thêm đoạn này vào cuối file:
[model_providers.openai_http]
name = "OpenAI HTTP only"
wire_api = "responses"
supports_websockets = falseLưu lại, khởi động Codex - màn hình Reconnecting biến mất, phản hồi trong vòng vài giây thay vì 75 giây.
Side effect duy nhất: Lịch sử chat được phân nhóm theo model_provider, nên các phiên cũ có thể tạm thời bị ẩn. Muốn lấy lại chỉ cần đổi model_provider về giá trị cũ (hoặc xóa dòng đó đi).
Phương án 2: Khai báo proxy rõ ràng cho Codex
Nếu bạn muốn giữ WebSocket và muốn Codex nhận diện đúng địa chỉ proxy, tạo file .env trong thư mục .codex:
macOS / Linux:
~/.codex/.envWindows:
C:\Users\<tên-user>\.codex\.env
Nội dung file (thay port theo phần mềm proxy bạn đang dùng):
HTTP_PROXY="http://127.0.0.1:7890"
HTTPS_PROXY="http://127.0.0.1:7890"
NO_PROXY="localhost,127.0.0.1,::1"Port phổ biến: Clash dùng 7890, v2rayN thường dùng 10808 - kiểm tra trong settings của phần mềm proxy để xác nhận đúng port.
Lưu ý trên Windows: khi tạo file, đặt tên đúng là .env (không phải .env.txt). Bật hiển thị đuôi file trong Explorer trước để tránh nhầm lẫn.
Phương án này ổn định thấp hơn Phương án 1 vì các subprocess, desktop component và plugin của Codex có thể không inherit đủ env vars tùy theo cách chúng được khởi chạy.
Phương án 3: Bật TUN mode trên phần mềm proxy (last resort)
TUN mode hoạt động ở tầng virtual network card - thay vì chỉ proxy cho một số app, nó tiếp nhận toàn bộ traffic của hệ thống. Với cách này, WebSocket handshake của Codex chắc chắn đi qua proxy đúng cách mà không cần cấu hình gì thêm.
Hầu hết phần mềm proxy hiện đại đều hỗ trợ TUN mode với tên gọi khác nhau: TUN mode, virtual network card mode, enhanced mode, hoặc transparent proxy. Mở settings của phần mềm đang dùng và tìm một trong các tên này.
Tại sao để dành làm last resort: TUN mode ảnh hưởng đến toàn bộ traffic của máy - local dev server, internal services, một số app khác có thể bị ảnh hưởng. Nếu bật thì cần thêm direct-connection rules cho các địa chỉ nội bộ.
Nên chọn phương án nào?
Tình huống | Phương án nên dùng |
|---|---|
Muốn fix ngay, không muốn phức tạp | Phương án 1 - config.toml |
Muốn giữ WebSocket, kiểm soát từng app | Phương án 2 - .env proxy |
Hai cách trên không ăn thua | Phương án 3 - TUN mode |
Nhiều phiên Codex chạy đồng thời bị treo cùng lúc | Tắt hết, chờ 60s, mở lại 1 phiên |
Lỗi xảy ra sau khi đổi qua lại OAuth / API key | Chạy |
Kết
Lỗi Reconnecting 1/5 của Codex là một quirk đã được nhiều người báo cáo trên GitHub (Issues #19821, #22634) nhưng OpenAI chưa fix phía họ. Trong khi chờ đợi, cách đơn giản nhất là thêm supports_websockets = false vào config - mất chưa đến 1 phút nhưng tiết kiệm được 75 giây mỗi lần mở Codex.
via @Suu766 · SmartScope
