GPT-6 Astra: WebSocket reconnect loop continuously consumes usage until HTTPS fallback
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
What version of Codex CLI is running?
0.154.0
What subscription do you have?
Plus
Which model were you using?
gpt-6-astra
What platform is your computer?
Linux 6.6.87.2-microsoft-standard-WSL2 x86_64 unknown
What terminal emulator and version are you using (if applicable)?
Windows Terminal
Codex doctor report
{
"schemaVersion": 1,
"generatedAt": "1789020834s since unix epoch",
"overallStatus": "ok",
"codexVersion": "0.154.0",
"checks": {
"app_server.status": {
"id": "app_server.status",
"category": "app-server",
"status": "ok",
"summary": "background server is not running",
"details": {
"control socket": "/home/nick/.codex/app-server-control/app-server-control.sock",
"daemon state dir": "/home/nick/.codex/app-server-daemon",
"mode": "ephemeral",
"pid file": "/home/nick/.codex/app-server-daemon/app-server.pid (missing)",
"settings": "/home/nick/.codex/app-server-daemon/settings.json (missing)",
"status": "not running",
"update-loop pid file": "/home/nick/.codex/app-server-daemon/app-server-updater.pid (missing)"
},
"remediation": null,
"durationMs": 0
},
"auth.credentials": {
"id": "auth.credentials",
"category": "auth",
"status": "ok",
"summary": "auth is configured",
"details": {
"auth file": "/home/nick/.codex/auth.json",
"auth storage mode": "File",
"stored API key": "false",
"stored ChatGPT tokens": "true",
"stored agent identity": "false",
"stored auth mode": "chatgpt"
},
"remediation": null,
"durationMs": 0
},
"config.load": {
"id": "config.load",
"category": "config",
"status": "ok",
"summary": "config loaded",
"details": {
"CODEX_HOME": "/home/nick/.codex",
"active thread overrides": "not inspected",
"config.toml": "/home/nick/.codex/config.toml",
"config.toml parse": "ok",
"configuration load ms": "139",
"configuration scope": "invocation config, including cloud-managed policy",
"cwd": "/home/nick",
"enabled feature flags": "shell_tool, view_image, sleep_tool, unified_exec, unified_exec_tty, unified_exec_zsh_fork, shell_snapshot, content_item_kinds, code_mode_host, terminal_resize_reflow, sqlite, hooks, enable_request_compression, unbounded_connection_retries, multi_agent, apps, tool_search_always_defer_mcp_tools, tool_suggest, plugins, in_app_browser, in_app_chat, in_app_dictation, in_app_local_automation, in_app_updates, browser_use, browser_use_full_cdp_access, browser_use_external, computer_use, remote_plugin, plugin_sharing, image_generation, resize_all_images, item_ids, skill_mcp_dependency_install, skill_search, mentions_v2, steer, guardian_approval, goals, collaboration_modes, tool_call_mcp_elicitation, auth_elicitation, personality, fast_mode, tui_app_server, remote_compaction_v2, compaction_image_budget, workspace_dependencies",
"feature flag overrides": "none",
"feature flags enabled": "48",
"log dir": "/home/nick/.codex/log",
"mcp servers": "0",
"model": "gpt-6-astra",
"model provider": "openai",
"sqlite home": "/home/nick/.codex"
},
"remediation": null,
"durationMs": 0
},
"git.environment": {
"id": "git.environment",
"category": "git",
"status": "ok",
"summary": "git executable found; execution not verified",
"details": {
"PATH git #1": "/usr/sbin/git",
"PATH git #2": "/usr/bin/git",
"PATH git #3": "/sbin/git",
"PATH git #4": "/bin/git",
"PATH git entries": "4",
"git execution": "not inspected (PATH helpers are not executed)",
"repo detected": "false",
"selected git": "/usr/sbin/git"
},
"remediation": null,
"durationMs": 84
},
"installation": {
"id": "installation",
"category": "install",
"status": "ok",
"summary": "installation looks consistent",
"details": {
"PATH codex #1": "/usr/sbin/codex",
"PATH codex #2": "/usr/bin/codex",
"PATH codex #3": "/sbin/codex",
"PATH codex #4": "/bin/codex",
"PATH codex entries": "4",
"current executable": "/usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin/codex",
"install context": "npm (package /usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl, bin /usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin, resources /usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-resources, path /usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-path)",
"managed by Vite+": "false",
"managed by bun": "false",
"managed by npm": "true",
"managed by pnpm": "false",
"managed package root": "/usr/lib/node_modules/@openai/codex",
"npm update target": "not inspected (PATH helpers are not executed)"
},
"remediation": null,
"durationMs": 132
},
"mcp.config": {
"id": "mcp.config",
"category": "mcp",
"status": "ok",
"summary": "no MCP servers configured",
"details": {},
"remediation": null,
"durationMs": 0
},
"network.env": {
"id": "network.env",
"category": "network",
"status": "ok",
"summary": "network-related environment looks readable",
"details": {
"managed proxy": "not configured",
"proxy env vars": "none",
"respect system proxy": "disabled"
},
"remediation": null,
"durationMs": 0
},
"network.provider_reachability": {
"id": "network.provider_reachability",
"category": "reachability",
"status": "ok",
"summary": "active provider endpoints are reachable over HTTP",
"details": {
"ChatGPT inference URL": "https://chatgpt.com/backend-api/<redacted> reachable (HTTP 405)",
"reachability mode": "ChatGPT auth"
},
"remediation": null,
"durationMs": 649
},
"network.websocket_reachability": {
"id": "network.websocket_reachability",
"category": "websocket",
"status": "ok",
"summary": "Responses WebSocket handshake succeeded",
"details": {
"DNS": "2 IPv4, 1 IPv6, first IPv4",
"auth mode": "chatgpt",
"connect timeout": "15000 ms",
"endpoint": "wss://chatgpt.com/backend-api/<redacted>",
"handshake result": "HTTP 101 Switching Protocols",
"model provider": "openai",
"provider name": "OpenAI",
"proxy env vars": "none",
"reasoning header": "false",
"server model present": "false",
"supports websockets": "true",
"wire API": "responses"
},
"remediation": null,
"durationMs": 1970
},
"runtime.provenance": {
"id": "runtime.provenance",
"category": "runtime",
"status": "ok",
"summary": "running npm on linux-x86_64",
"details": {
"commit": "unknown",
"current executable": "/usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin/codex",
"install method": "npm (package /usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl, bin /usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin, resources /usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-resources, path /usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-path)",
"platform": "linux-x86_64",
"version": "0.154.0"
},
"remediation": null,
"durationMs": 0
},
"runtime.search": {
"id": "runtime.search",
"category": "search",
"status": "ok",
"summary": "search command found (bundled); execution not verified",
"details": {
"search command": "/usr/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-path/rg",
"search command readiness": "file exists",
"search provider": "bundled"
},
"remediation": null,
"durationMs": 0
},
"sandbox.helpers": {
"id": "sandbox.helpers",
"category": "sandbox",
"status": "ok",
"summary": "sandbox configuration is readable",
"details": {
"approval policy": "OnRequest",
"codex-linux-sandbox helper": "/home/nick/.codex/tmp/arg0/codex-arg0AnHc6Q/codex-linux-sandbox",
"denied-read glob rules": "0",
"denied-read rules": "0",
"execve wrapper helper": "/home/nick/.codex/tmp/arg0/codex-arg0AnHc6Q/codex-execve-wrapper",
"filesystem sandbox": "unrestricted",
"glob scan max depth": "unbounded",
"managed filesystem source": "none",
"network sandbox": "enabled"
},
"remediation": null,
"durationMs": 0
},
"security.endpoint": {
"id": "security.endpoint",
"category": "security",
"status": "ok",
"summary": "endpoint protection is not inspected on this platform",
"details": {
"endpoint products": "not inspected on this platform"
},
"remediation": null,
"durationMs": 0
},
"state.paths": {
"id": "state.paths",
"category": "state",
"status": "ok",
"summary": "state paths and databases are inspectable",
"details": {
"CODEX_HOME": "/home/nick/.codex (dir)",
"active rollout files": "91 files, 644481109 total bytes, 7082209 average bytes",
"archived rollout files": "0 files, 0 total bytes, 0 average bytes",
"goals DB": "/home/nick/.codex/goals_1.sqlite (file)",
"goals DB integrity": "ok",
"log DB": "/home/nick/.codex/logs_2.sqlite (file)",
"log DB integrity": "ok",
"log dir": "/home/nick/.codex/log (missing)",
"memories DB": "/home/nick/.codex/memories_1.sqlite (file)",
"memories DB integrity": "ok",
"queue DB": "/home/nick/.codex/queue_1.sqlite (file)",
"queue DB integrity": "ok",
"sqlite home": "/home/nick/.codex (dir)",
"state DB": "/home/nick/.codex/state_5.sqlite (file)",
"state DB integrity": "ok",
"thread history DB": "/home/nick/.codex/thread_history_1.sqlite (file)",
"thread history DB integrity": "ok"
},
"remediation": null,
"durationMs": 2936
},
"state.rollout_db_parity": {
"id": "state.rollout_db_parity",
"category": "threads",
"status": "ok",
"summary": "rollout files and state DB thread inventory agree",
"details": {
"default model provider": "openai",
"rollout DB active files": "91",
"rollout DB active rows": "91",
"rollout DB archive mismatches": "0",
"rollout DB archived files": "0",
"rollout DB archived rows": "0",
"rollout DB duplicate DB paths": "0",
"rollout DB duplicate rollout thread ids": "0",
"rollout DB malformed file names": "0",
"rollout DB missing active rows": "0",
"rollout DB missing archived rows": "0",
"rollout DB model providers": "openai=91",
"rollout DB rows": "91",
"rollout DB scan cap reached": "false",
"rollout DB scan errors": "0",
"rollout DB sources": "cli=87, subagent:thread_spawn=4",
"rollout DB stale rows": "0"
},
"remediation": null,
"durationMs": 311
},
"system.disk": {
"id": "system.disk",
"category": "disk",
"status": "ok",
"summary": "sufficient free disk space (843.1 GiB)",
"details": {
"CODEX_HOME available": "843.1 GiB",
"failure threshold": "1.0 GiB",
"warning threshold": "5.0 GiB",
"worktree available": "843.1 GiB"
},
"remediation": null,
"durationMs": 0
},
"system.environment": {
"id": "system.environment",
"category": "system",
"status": "ok",
"summary": "OS language en-US",
"details": {
"EDITOR": "not set",
"LANG": "en_US.UTF-8",
"VISUAL": "not set",
"os": "Arch Linux [64-bit]",
"os language": "en-US",
"os type": "Arch Linux",
"os version": "Unknown"
},
"remediation": null,
"durationMs": 129
},
"terminal.env": {
"id": "terminal.env",
"category": "terminal",
"status": "ok",
"summary": "terminal metadata was detected",
"details": {
"DISPLAY": "present",
"WAYLAND_DISPLAY": "present",
"WSL_DISTRO_NAME": "present",
"WSL_INTEROP": "present",
"WT_SESSION": "present",
"color output": "enabled",
"effective locale": "en_US.UTF-8",
"stderr is terminal": "true",
"stdin is terminal": "true",
"stdout is terminal": "true",
"terminal": "Windows Terminal",
"terminal size": "120x30"
},
"remediation": null,
"durationMs": 0
},
"terminal.title": {
"id": "terminal.title",
"category": "title",
"status": "ok",
"summary": "terminal title default",
"details": {
"terminal title activity": "true",
"terminal title items": "activity, project-name",
"terminal title project source": "cwd",
"terminal title project value": "nick",
"terminal title source": "default"
},
"remediation": null,
"durationMs": 0
},
"updates.status": {
"id": "updates.status",
"category": "updates",
"status": "ok",
"summary": "update configuration is locally consistent",
"details": {
"cached latest version": "0.154.0",
"check for update on startup": "true",
"dismissed version": "0.149.1",
"last checked at": "2026-09-10T05:19:13.873330105Z",
"latest version": "0.154.0",
"latest version status": "current version is not older",
"npm update target": "not inspected (PATH helpers are not executed)",
"update action": "npm install -g @openai/codex",
"version cache": "/home/nick/.codex/version.json"
},
"remediation": null,
"durationMs": 1041
}
}
}
What issue are you seeing?
Bug:
I am seeing a failure in a long-running GPT-6 Astra xhigh Codex CLI session around automatic context compaction.
After the session became large enough for automatic compaction, the conversation stopped making useful progress. Subsequent attempts to continue the same thread repeatedly ended in Conversation interrupted, followed by very long WebSocket reconnect attempts and ultimately:
Stream disconnected before completion: idle timeout waiting for websocket
One observed reconnect attempt remained at:
Reconnecting... 2/2
for more than 15 minutes before terminating with the idle-timeout error.
The affected thread then became effectively unusable: asking Codex to continue from where it left off resulted in another interruption/reconnect rather than a useful response.
The visible sequence included:
Reconnecting... 2/2
└ Stream disconnected before completion: idle timeout waiting for websocket`
Usage impact
There also appears to be a potentially serious usage-accounting consequence.
During this failed/retrying session, the CLI first warned:
Heads up, you have less than 50% of your 5h limit left.
Later, after further failed attempts/reconnect time, I had like 13% left.
No useful model response was delivered for the attempted continuation during this period; the operation ultimately ended in the WebSocket idle timeout.
I cannot determine from the client alone exactly how much of that usage decrease was caused by retries or how the requests were metered server-side, so I am not claiming that the entire 25%+ difference was necessarily consumed by the reconnect loop.
However, the timing is concerning, particularly given the similar behavior reported in #43045, where GPT-6 Astra WebSocket reconnects were reported to consume credits while no useful work was produced.
Screenshots showing the model, reconnect duration, exact timeout, and usage warnings are attached.
I do not currently have a small synthetic reproducer. This occurred in a real long-running coding session.
The sequence was:
- Start Codex CLI 0.154.0.
- Use gpt-6-astra.
- Continue working in the same thread for a substantial amount of time.
- Reach the point where Codex automatically performs context compaction (i think anyway, i dont know if this happens earlier but it definitely happens here).
- Allow the automatic compaction/turn to continue.
- The conversation becomes interrupted rather than resuming normally.
- Send an ordinary continuation request in the same thread, the reconnect error now happens.
- Terminates with
Stream disconnected before completion: idle timeout waiting for websocket - A switch to HTTPS is mentioned, but the usage is already gone :(
What steps can reproduce the bug?
Uploaded thread: 01a089c7-c824-7ed0-b25c-42c33bf8f02c
What is the expected behavior?
Automatic context compaction should complete and allow the existing thread to continue normally.
If a model or compaction operation legitimately requires several minutes without emitting an application-level event, a healthy underlying WebSocket connection should not be incorrectly classified as dead solely because of application-event silence.
If the request really has failed, Codex should fail promptly and provide a recoverable state rather than:
- remaining in reconnect for 10–15+ minutes,
- repeatedly interrupting the same thread,
- potentially retrying expensive Astra inference without producing a useful response, and
- apparently consuming substantial usage during those failed attempts.
Transport retries should also ideally not create multiple separately metered inference attempts when no usable completion is delivered, or the CLI should at minimum make such behavior explicit before retrying.
The user should be able to recover and continue the existing thread after a failed compaction instead of effectively losing a long-running coding session.
Additional information
This looks related to several existing reports, but this issue adds a current Codex CLI 0.154.0 + GPT-6 Astra xhigh + automatic-compaction + usage-impact reproduction. #43062, #43022, #43045 seem related. Making a new thread still as #43045 is for codex 0.153.4, this is 0.154.0.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the report with Codex CLI 0.154.0 on Linux/WSL2 using gpt-6-astra, then trace the CLI's WebSocket reconnect and HTTPS fallback path. No source file or test is named in the issue; done means repeated WebSocket failures stop consuming usage and fallback occurs without an endless reconnect loop.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- cli, networking
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100