[Windows][26.803.10989.0][SSH Remote] Send stalls with a 5–6 GB memory spike and delayed queued/Steer delivery; ~100 KB attachments can crash
What version of the Codex App are you using (From “About Codex” dialog)?
26.803.10989.0
What subscription do you have?
ChatGPT Pro
What platform is your computer?
Microsoft Windows NT 10.0.26200.0 x64
What issue are you seeing?
Summary
Codex Desktop 26.803.10989.0 on Windows becomes unreliable when sending messages to an SSH remote.
There are two related failure modes:
- A plain-text message enters an ambiguous delayed-delivery state. Memory rises to approximately 5–6 GB and later falls to approximately 4 GB. The Send button becomes available again, and a subsequent Send interaction displays the message as queued with a
Steeraction. The message is temporarily absent from the same conversation on Android, but after restarting the Windows app it is eventually delivered and begins processing.
- Sending two small local text attachments, approximately 100 KB combined, can make memory reach approximately 10 GB and cause the entire application to exit silently.
Both behaviors reproduce after a complete reset of the local Windows Codex profile and Microsoft Store/MSIX application data.
Environment
- Codex Desktop / Microsoft Store package:
OpenAI.Codex 26.803.10989.0 - Architecture: x64
- Platform:
Microsoft Windows NT 10.0.26200.0 x64 - Subscription: ChatGPT Pro
- Target environment: SSH remote
- The same SSH remote and conversations are accessible and usable through ChatGPT on Android
Failure mode 1: plain-text message, memory spike, and delayed queued delivery
I opened a conversation associated with an SSH remote and sent a simple plain-text message with no attachments.
Observed sequence:
- I clicked Send.
- The Send button became disabled.
- The turn did not visibly enter Thinking or Reasoning.
- The ChatGPT/Codex process group increased to approximately 5–6 GB of memory.
- Memory later fell to approximately 4 GB.
- At approximately the same time, the Send button became available again.
- I clicked Send again.
- The message then appeared in Windows Desktop with a
Steeraction, as if it had been queued behind an active turn rather than submitted normally. - I opened the exact same conversation through ChatGPT on Android.
- At that moment, the message displayed by Windows was absent from the Android conversation.
- I later closed and reopened ChatGPT/Codex on Windows.
- After reopening the app, the previously queued message appeared in the conversation and began processing.
- I clicked Stop, and the Stop action was accepted.
The message was therefore not permanently lost. Instead, the Windows client temporarily provided no reliable indication of whether the message had been:
- accepted by the remote;
- locally queued;
- committed to the shared conversation;
- waiting to steer an existing turn;
- or still pending submission.
The plain-text case does not produce continuously unbounded memory growth. Memory rises to approximately 5–6 GB and then decreases to approximately 4 GB. However, the submission, queue, and active-turn state remain ambiguous until the application is restarted.
This behavior creates a duplicate-execution risk. While Windows makes the original message look unsent or merely queued, the user may resend the same instruction from Windows or Android. The original message may then be delivered later.
Failure mode 2: small text attachments cause high memory use and silent exit
I also reproduced a more severe failure with two small local text files, approximately 100 KB combined.
Reproduction where both attachments completed uploading
- I opened a conversation on the same SSH remote.
- I attached the two text files.
- Both files appeared to complete uploading.
- I clicked Send.
- The turn did not visibly enter Thinking or Reasoning.
- Application memory increased to approximately 10 GB.
- The entire Windows application then exited silently.
Reproduction with Troubleshooting performance recording enabled
After a full Windows restart:
- I enabled the built-in Troubleshooting performance recording.
- I attempted to attach the same files.
- The first attachment completed.
- The second attachment remained stuck during attachment/upload processing.
- Application memory reached approximately 5–6 GB.
- I stopped the performance recording before allowing the application to reach another 10 GB failure.
- I attempted to submit or preserve the trace, but I could not confirm whether it was successfully uploaded because the application exits before displaying a reliable confirmation.
No feedback/session ID was displayed, so the trace submission status is unknown.
Clean-profile isolation
Before the final reproduction, I performed a complete local Windows profile reset:
- Backed up and disabled the previous Windows
%USERPROFILE%\.codexdirectory. - Backed up the Microsoft Store application profile.
- Reset the
OpenAI.CodexMSIX application data. - Restarted Windows.
- Signed into the application again.
- Did not restore the old
config.toml. - Did not restore the previous plugins, MCP configuration, or cached local state.
- Added the SSH connection again.
- Added the remote projects again.
- Reproduced the attachment failure in the previous conversation.
- Reproduced the plain-text submission problem in another conversation.
The issue therefore does not appear to be caused by:
- the previous local
.codexprofile; - the old
config.toml; - old plugin or MCP settings;
- cached MSIX application data;
- one specific conversation;
- or the attachment files alone.
The same SSH remote continues to work through ChatGPT on Android, which suggests that the remote host and remote project are functional and that the failure is specific to the Windows Desktop client or its SSH remote message/turn synchronization path.
Diagnostics
- Troubleshooting performance recording was enabled during one attachment reproduction.
- The recording was stopped before another high-memory crash.
- Trace submission status is unknown.
- No feedback/session ID was shown before the application exited.
- No relevant Codex Windows Error Reporting event was found for the latest silent exits on
26.803.10989.0. - A
RADAR_PRE_LEAK_64event found forfirefox.exewas unrelated and is not part of this report.
A performance trace may exist in the backed-up local application data. I can provide it through a secure/private channel if requested by a maintainer and if it can be located and reviewed for private content.
Possibly related issues
These appear related but are not exact duplicates:
- #37829 — Windows renderer memory growth and hang on package
26.803.5235.0 - #24287 — Desktop accepts a prompt but loses reliable turn/stream state; resent prompts may later appear as steered continuations
- #35207 — cross-device queue and active-turn state desynchronization
What steps can reproduce the bug?
Plain-text delayed-delivery reproduction
- Install or update Codex Desktop for Windows to
26.803.10989.0. - Add a working SSH remote.
- Open a conversation associated with a project on that SSH remote.
- Enter a simple plain-text message with no attachments.
- Click Send.
- Observe that:
- Send becomes disabled;
- the turn does not visibly enter Thinking or Reasoning;
- application memory rises to approximately 5–6 GB.
- Wait until memory falls to approximately 4 GB and Send becomes available again.
- Click Send again.
- Observe that the message appears with a
Steeraction, as if queued behind an active turn. - Open the exact same conversation through ChatGPT on Android.
- Observe that the message is not yet visible there.
- Close and reopen ChatGPT/Codex on Windows.
- Observe that the previously queued message is eventually delivered and begins processing.
- Click Stop.
- Observe that Stop is accepted.
Attachment crash reproduction
- Open a conversation associated with the SSH remote.
- Attach two local text files with a combined size of approximately 100 KB.
- Wait for the attachments to complete uploading.
- Click Send.
- Observe that the turn does not visibly enter Thinking or Reasoning.
- Observe memory increasing into multiple gigabytes, in one reproduction reaching approximately 10 GB.
- The Windows application exits silently.
What is the expected behavior?
A single click on Send should immediately produce an authoritative and visible state:
- submitted and running;
- explicitly queued behind a real active turn;
- or failed with an actionable error.
The Send button must not become available again while the original submission may still be pending or capable of being delivered later.
Windows Desktop and Android should converge promptly on the same message, queue, and active-turn state.
Restarting the Windows app should not be required to make a previously submitted message appear and begin processing.
Memory usage should remain bounded during submission and synchronization.
Additional information
This issue currently makes Windows Desktop unsafe and unreliable for SSH remote work.
The ambiguous delivery state can cause users to resend prompts that were already accepted or recoverable. If those prompts modify files, create commits, deploy software, delete data, or perform other external actions, delayed duplicate delivery may cause conflicting or repeated operations.
Windows Desktop is specifically needed in this workflow to attach local files to remote conversations. The immediate workaround is to:
- upload files separately through SCP or SFTP; and
- control the same remote conversation through ChatGPT on Android.
However, this workaround is not operationally equivalent in all workflows.
For example, I have developed a complex safety-sensitive procedure whose reviewed execution plan explicitly requires files to be attached through the Windows Desktop client at defined stages. Replacing that attachment path with SCP/SFTP and mobile control changes the procedure itself. I therefore cannot safely assume that the modified workflow preserves the same guarantees without revising the plan and repeating its independent reviews.
That would require substantial additional time and paid model usage, even though neither the underlying task nor the files have changed. More generally, users with reviewed, audited, or tightly specified agent workflows may not be able to substitute a different transport path without revalidating the entire procedure.
5 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Related, but I do not believe this is an exact duplicate.
#37584 reports a broader renderer memory leak / UI-backend desynchronization on Desktop build
26.803.41515/ MSIX package26.803.5235.0, including stuck Thinking states, project threads that never load, and silent exits.My report reproduces on the newer MSIX package
26.803.10989.0, after a complete reset of the local Windows Codex profile and application data, and includes a more specific SSH-remote message lifecycle failure:Steeraction;The two reports may share the same underlying renderer/app-server synchronization defect, but the delayed queued/Steer delivery, cross-client state disagreement, SSH-remote context, attachment trigger, and reproduction on the newer build are not described in #37584.
I am happy for maintainers to link or consolidate the reports if they confirm that the root cause is the same.
I can reproduce a very similar issue on Windows 11 Pro with ChatGPT/Codex Desktop build
26.803.10989.0, specifically when using an SSH Remote project.The behavior is highly reproducible for me:
I also measured the total working set of all
ChatGPT.exe/codex.exeprocesses during a clean reproduction:So the memory usage is not strictly monotonic, but entering the stuck Remote state is consistently associated with a large increase in memory and significant CPU activity in multiple
ChatGPT.exeprocesses.I also checked whether the delay was caused by work still running on the remote server. During one long “Working” state, there was no matching
Rscript/ analysis process running on the server, while the Desktop app continued spinning.Network troubleshooting already performed
I tried to rule out a simple proxy/node/connectivity problem:
HTTP_PROXY/HTTPS_PROXYenvironment variables did not solve it.supports_websockets = false; the first request worked, but the second request again became stuck.The local Codex logs also contain entries involving:
and I have seen the UI error:
Additional observation
The issue started immediately after recent updates on my machine. The ChatGPT Store app was updated on 2026-08-11, and Windows also installed updates the night before I first noticed this behavior. I cannot determine whether either update is causal, but the timing may be relevant.
Overall, my reproduction looks very similar to the reported SSH Remote message lifecycle / renderer-app-server synchronization issue:
first request works → later Remote request stalls → memory rises to ~4–5+ GB → request may eventually appear/complete after a long delay or restart.
I am happy to provide additional logs or run specific diagnostics if that would help isolate the issue.
I did a more detailed follow-up investigation and found a workaround that has, so far, restored normal SSH Remote behavior.
Environment
26.803.10989.00.144.10.147.0Original behavior
The issue was reproducible specifically in SSH Remote projects.
Normal Chat and projects using a local Windows directory continued to work normally.
In an SSH Remote project, the first one or two messages could succeed, but after approximately 2–3 turns the next message would often remain pending/spinning indefinitely.
At the same time, several local
ChatGPT.exeprocesses showed substantial CPU and memory growth.For example, during one stalled period:
A few samples later, while the UI was still stalled:
Process inspection showed that the high-load processes included the Electron/Chromium renderer processes:
Importantly, the remote server was not overloaded at the same time:
Running Codex CLI directly on the same remote server was also usable, so this did not look like a basic SSH, network, or remote compute-capacity problem.
Port-forwarding/authentication checks
I also found an old Bitvise C2S forwarding rule:
Bitvise was reporting repeated connection-refused errors for this forwarding rule.
I disabled the rule. The Bitvise errors disappeared, but the SSH Remote pending/high-CPU problem later reproduced, so this forwarding rule was a real configuration issue but does not appear to be the main cause of the performance problem.
There was also a separate remote authentication issue (
refresh token was revoked) during troubleshooting. However, fixing/re-establishing the remote authentication path did not by itself permanently eliminate the Remote UI stalls.Important finding: the remote app-server was very old and long-lived
The remote host had this process:
with a child:
The remote Codex/app-server version was
0.144.1.After upgrading the remote Codex installation:
I initially got:
So the CLI had updated, but the already-running SSH Remote app-server was still the old
0.144.1process.codex remote-control stopcould not stop it:Workaround performed
I then:
codex app-server proxyprocess exited.0.144.1app-server.0.147.0.The newly created processes had fresh PIDs/uptime, and the new proxy binary was confirmed to come from the
0.147.0installation.Result after rebuilding the Remote backend
The behavior changed substantially.
I first sent approximately 9–10 consecutive lightweight requests. All completed normally.
Total local
ChatGPT.exeworking set was approximately:instead of the roughly
3.0–3.5 GBseen during the previous stalled state.I then left the SSH Remote project open and idle for about 10 minutes.
Total ChatGPT working set remained approximately:
One renderer-like process changed as follows:
so memory was clearly being reclaimed rather than increasing monotonically.
CPU accumulation also slowed substantially during idle periods.
Real-workload test
I then resumed actual work in the same SSH Remote project, including:
So far, responsiveness has remained close to normal.
During real use, total ChatGPT working set increased from roughly
1.6 GBto a temporary peak around2.0 GB, then decreased again and stabilized around1.8–1.9 GB.I have not reproduced the previous pattern of:
after rebuilding the Remote backend.
Current interpretation
I do not think the evidence is sufficient to say that
0.147.0alone fixes the issue.Two related variables changed together:
and
Therefore I cannot distinguish between:
0.144.1,The Windows Desktop SSH Remote renderer/app-server/message lifecycle path may still be involved, because during the failure the heavy CPU/RAM activity was primarily on the Windows renderer side while the remote app-server remained lightly loaded.
However, the strongest practical correlation so far is that upgrading the remote Codex installation and fully rebuilding the long-lived SSH Remote app-server restored stable behavior.
Current workaround
For anyone seeing similar Windows SSH Remote stalls, a potentially useful diagnostic/workaround is:
app-server proxydisappears.codex ... app-server --listen unix://process is still running.current/codexpoints to the updated release.I will continue using the same SSH Remote project under normal scientific workloads and report back if the pending/high-CPU behavior returns.
I tested the workaround suggested above, and it restored normal SSH Remote behavior.
State before the workaround
The current Codex installation on the remote host was already up to date:
However, the active SSH Remote backend had been running for approximately 32 days:
Its child codex-code-mode-host was explicitly running from the older standalone release:
This explains why resetting the local Windows Codex profile and MSIX application data did not help: after reconnecting, Windows Desktop could still reuse the same long-lived remote backend.
Workaround performed
After confirming that no remote task was active, I:
The new processes were started from the current 0.147.0 release:
After rebuilding the remote backend, the original workflow passed:
This strongly associates the failure with the stale, long-lived SSH Remote backend.
However, two variables changed together:
Therefore, this test does not distinguish between:
The issue is still relevant because Desktop did not detect or clearly report that the running remote backend was stale relative to the currently installed CLI. Ideally, Desktop should detect this version/lifecycle mismatch and offer or perform a safe backend restart instead of entering a multi-gigabyte memory spike, ambiguous message state, and silent exit.
I will continue using the same workflow and report back if the problem returns.