Codex Desktop crashes when ambient suggestions prefetches an inactive image-heavy subagent rollout
Summary
Codex Desktop on Windows repeatedly terminated while I was viewing a different task. The affected task was never opened by the user.
Desktop logs show ambient_suggestions / background task loading issuing thread/read for an inactive subagent history. That history had a 646.668 MB rollout containing inline Base64 PNG data. Each of three independent app runs produced the same 36.086 MB Sending server response log record for that inactive task, followed by an abrupt log cutoff 9.571–10.785 seconds later.
This means an inactive image-heavy task can destabilize the whole Desktop app through background prefetch, without user navigation to that task.
Environment
- Codex Desktop:
26.721.4979.0x64 - OS: Windows 11 Home, version
10.0.26200, build26200 - Install source: Microsoft Store package
OpenAI.Codex
Observed behavior
- The user stays in an unrelated active task.
- The Codex window is unfocused.
- Desktop background activity reads several unrelated tasks.
thread/readis issued for an inactive image-heavy task classified instate_5.sqliteasthread_source='subagent'.- The log records
feature=ambient_suggestionsimmediately around this background read. - Loading the inactive task emits one 36.086 MB
Sending server responserecord containing an inline Base64 PNG. - The app disappears/restarts shortly afterward.
The user did not click, open, or switch to the affected task. In the clearest run, the route remained the unrelated active task throughout the sequence.
Repeated timing
| Run | Large response logged | Final app log entry | Delay |
|---|---:|---:|---:|
| 1 | 00:22:09.893 | 00:22:20.310 | 10.417 s |
| 2 | 00:30:45.795 | 00:30:56.580 | 10.785 s |
| 3 | 00:37:43.396 | 00:37:52.967 | 9.571 s |
All three runs loaded the same inactive subagent history and produced the same 36.086 MB response record before termination.
Local data characteristics
- Affected rollout size: 646.668 MB
- Large response log record: 36.086 MB
- Payload characteristic: inline
data:image/png;base64,... - Thread classification:
subagent - Spawn-edge rows for this thread: 0, suggesting an orphaned or migrated subagent record
- The separately generated PNG file was already absent; the Base64 copy remained embedded in history
The raw rollout cannot be attached because it contains private conversation content and image data. Usernames, paths, task titles, and thread IDs are intentionally omitted here.
Crash diagnostics
- No matching Windows Error Reporting event was recorded.
- The Crashpad reports directory was empty.
- No
render-process-goneevent appeared in the Desktop log. - The exact native termination point therefore remains unconfirmed.
- The repeated same-payload/same-timing sequence makes the background read of this rollout the high-confidence trigger.
Expected behavior
- Background suggestions and sidebar prefetch should avoid materializing full image-heavy histories.
- An oversized or malformed inactive task should fail in isolation and leave the active task usable.
- History previews should omit, cap, externalize, or lazily load Base64 image payloads.
thread/readresponses should have size limits and graceful error handling before crossing the Electron renderer/main-process boundary.- Orphaned subagent records should not be automatically prefetched as normal sidebar tasks.
Reproduction outline
- Create or retain an inactive subagent rollout containing large inline Base64 PNG history.
- Keep a different task active in Codex Desktop.
- Leave the app idle or unfocused long enough for ambient suggestions/background task loading to run.
- Observe
thread/readfor the inactive subagent without any navigation to it. - Observe the oversized
Sending server responserecord and subsequent app termination.
Related issues
- #22004 — oversized rollout / V8 string-length crash
- #24676 — image-heavy rollout hangs on opening
- #34863 — inline PNG history growth and system-wide memory pressure
The additional failure mode here is automatic background loading: the user never opens the problematic task, yet ambient_suggestions fetches it while another task is active and repeatedly takes down the app.
7 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Additional repro variant on a newer Windows Desktop build (live tool output, not background prefetch)
I observed a closely related silent Desktop termination on a newer build. This variant happened while returning a live
view_imagetool result from the active turn, rather than while prefetching an inactive historical rollout.Environment
26.727.6591.0x64OpenAI.Codex19045.7548Timeline (UTC)
00:01:54.318: an active thread issuedfunctions.execcontaining aview_imagecall.00:01:54.418: its matchingcustom_tool_call_outputwas persisted with aninput_imagewhoseimage_urlwas an inlinedata:image/png;base64,...value.item/commandExecution/outputDeltaevents.00:01:55.466: the app-server log stopped abruptly while output deltas were still being emitted.00:01:56local AppModel Runtime time: Windows recorded destruction of theOpenAI.Codex_26.727.6591.0_x64desktop AppX container.00:02:57: the app was launched again with the same package version.The Desktop log had no normal quit/shutdown tail. One thread had also reported
failed to start turn: internal error; agent loop died unexpectedlyearlier in the same run, but the app remained alive after those errors, so I am treating that as a possible precursor rather than the demonstrated trigger.Checks that did not find an alternative cause
Stop-Process,taskkill, orTerminateProcesscommand targeting Codex/ChatGPT in the surrounding tool callsWhy this may extend this issue
This suggests the failure family may not require a multi-hundred-MB stored rollout or background
thread/read. A roughly 1 MB inline image result crossing the live code-mode/app-server/Desktop path, under concurrent activity, was immediately followed by the same silent termination pattern:This is one observed incident and I do not yet have a deterministic minimal reproducer, so the payload/concurrency link is a high-confidence correlation rather than a dump-proven fault location.
The
functions.exec+outputDeltasignature also overlaps #35341, while the inline image storage/IPC design overlaps #28531. A useful guard would be to cap or externalizeinput_imagedata URLs before they are serialized into command-execution deltas or forwarded across the Desktop renderer/main-process boundary.I can provide additional redacted log/database excerpts if useful; raw rollout data is not attached because it contains private conversation and image content.
Follow-up: deterministic 2/2 crash via
read_threadon a 970 MB image-heavy rolloutI now have a much stronger reproduction than the single live-image incident in my previous comment. The same oversized historical thread terminated Codex Desktop twice in succession, including once after restart with output retrieval disabled.
Affected local history
1,017,135,795bytes (970.016 MB)data:imageoccurrences:37926.727.6591.0x6419045.7548Thread names, IDs, paths, and raw history are omitted because they contain private content.
Reproduction 1 — concurrent reads
At
2026-08-02T11:06:14.556Z, another active Codex task invokedcodex_app__read_threadfor nine existing threads concurrently throughPromise.all. The oversized thread was one of them. Per-thread options included:turnLimit: 3includeOutputs: truemaxOutputCharsPerItem: 5000For the oversized thread, Desktop routed the
thread/readresponse after about5988 ms. The tool call never received or persisted a matchingcustom_tool_call_output. The Desktop log cut off at2026-08-02T11:06:21.252Z, and Windows destroyed the Codex AppX container at2026-08-02T11:06:25.303Z.Reproduction 2 — sequential read after restart
Codex relaunched at
2026-08-02T11:06:30.079Z. At2026-08-02T11:08:06.233Z, the orchestration task retried with sequential reads. The oversized thread was first, now using:turnLimit: 2includeOutputs: falseDesktop again routed the same
thread/read, this time after about6023 ms. Again there was no matching tool result. The Desktop log ended at2026-08-02T11:08:12.346Z, Windows destroyed the container at2026-08-02T11:08:15.795Z, and the app relaunched at2026-08-02T11:08:25.071Z.Diagnostics
For both exits:
Implication
This is now a 2/2 repro across restart. The second run shows that
includeOutputs: falseand a smallturnLimitdo not protect the process; the first also had a per-item output cap. The likely failure boundary is before those response filters:read_threadappears to hydrate or serialize the complete ~970 MB rollout before producing the bounded response.This extends the issue beyond ambient suggestions. Any agent or Desktop workflow that calls
read_threadon an image-heavy historical thread can terminate the entire app, even when the caller explicitly requests no outputs.A regression test should call
read_thread(includeOutputs=false)on a very large rollout containing inline image data and require either:without materializing the whole history across app-server/Desktop IPC.
This also reinforces #22004 and #28531. I can provide additional redacted timestamped extracts if useful.
macOS reproduction: deterministic 2/2
read_threadmain-process SIGTRAP on a 1.81 GiB image-heavy rolloutI can confirm the
read_threadcrash path on macOS with native crash evidence. This appears to bridge this issue's deterministic oversized-history trigger with the macOSCrBrowserMainsignature tracked in #32676.Environment
26.803.41515(build6321)151.0.7922.7626.5(25F71)com.openai.codexAffected local history
1,948,041,962bytes (about1.81 GiB)9,023data:imageoccurrences:1,129input_imageoccurrences:1,042;base64,markers:1,127The task ID, task title, prompts, local paths, and raw rollout are omitted because they contain private project material.
Deterministic reproduction
An agent in a different task called the built-in desktop thread reader twice with the same target:
Run 1
2026-08-07T22:33:41.152Z2026-08-07 16:33:47.6755 -06000AC1CCAA-A877-4D88-8C49-1BF696E7E07Df5227e5ed2cad95f31c97967e4f3e274f4da6fa5ffc64cfb19e6ace92ec9a5fcRun 2, after automatic relaunch
2026-08-07T22:35:39.161Z2026-08-07 16:35:46.1084 -0600981E98A6-DC42-40A9-B846-6EF962F29CDF04fb1a7391399117606dea7db0e0f2845c700ffc24321a3ee1c6b02b35524389In both caller transcripts, the tool result was persisted as
aborted by user after 6.5s/6.9s, immediately followed byturn_aborted. No human cancellation occurred; those are downstream abort records created when the desktop host died.Native crash signature, identical in both runs
Both reports have the same leading framework offsets. The partially symbolicated leading sequence includes:
Crashpad independently created two sidecars at the exact incident times, both:
Alternative causes checked
SIGNAL, by the process exception handler, rather than an OS resource kill.2DC432GLL2./Applications/Codex.appis a symlink to/Applications/ChatGPT.app, not a competing second install.codexapp-server.Why this adds new evidence
The prior deterministic reproduction in this issue established the oversized
read_threadtrigger on Windows without a Crashpad or WER record. This reproduction establishes the corresponding macOS native failure boundary:Requested fix / regression test
Please make
read_threadoperate on bounded, lazy history rather than hydrating or serializing the complete rollout before applyingturnLimit,includeOutputs, and per-item output caps. A regression test should runread_threadagainst a multi-gigabyte image-heavy rollout and require either:thread too largeerror,without transferring the complete history across the app-server/Desktop IPC boundary and without terminating the browser/main process.
I can provide the two full
.ipsreports through a maintainer-designated private upload route. I am not attaching the raw rollout publicly because it contains private project content and inline image data.Hi @allvegetable, your report looks related to a local session discovery/inventory gap rather than necessarily a lost rollout. I've released Codex Rescue Alpha5, a local read-only diagnostic tool that performs filesystem-first discovery across active and archived rollouts and cross-references SQLite/index metadata without modifying any state.
If you still have the affected local Codex directory, you can inspect it via:
No raw files or databases are needed. If you choose to share output, please review and sanitize any private repository paths or names first.
New macOS reproduction on 26.814.41407: four main-process V8 OOM crashes after background
read_threadI can confirm that this bug is still happening on a newer macOS build. It crashed the full ChatGPT/Codex app four times on August 19 while I was working in other tasks. I did not click or open the oversized task. Background agents called the built-in
codex_app__read_threadtool to review its history.Environment
26.814.41407(build6720)151.0.7922.13726.5.2(25F84)019fef84-365a-79d3-80b4-6904ee87a749Affected local history
862,072,404bytes (about822 MiB)18,089data:image/;base64,occurrences:1,071input_imageoccurrences:935The task title, task ID, local path, prompts, and raw history are omitted because they contain private work.
What happened
The first background task called
read_threadfive times. Early tool results reported original response sizes of approximately581,900and671,708tokens. The final read completed about 2.25 seconds before the app crashed.A second background task reproduced the failure three more times:
read_threadsequence completed about 0.91 seconds before the crash.turnLimitvalues of 1, 2, 3, and 5, usedincludeOutputs: false, and reducedmaxOutputCharsPerItemto 400, 300, 250, and finally 200. The app still crashed about 1.33 seconds after the last read completed.This is important because it shows that small output limits do not protect the app. The desktop logs still show the full thread/turn response being handled before the small tool result is produced. It appears that the full history is hydrated or serialized before
turnLimit,includeOutputs, andmaxOutputCharsPerItemare applied.Native crash evidence
All four macOS
.ipsreports show the same main-process failure:Disassembly of the exact installed framework at the crash offset reaches
../../owl/common/node_bindings.ccand the fatal stringsOOM detail:andOOM error in V8:. There was no macOS jetsam or system memory-pressure kill. This is an internal V8/Node memory failure in the desktop main process, not the Mac running out of its 64 GB of RAM.Expected fix
Please make
read_threadapply its limits before materializing or sending the complete historical thread. For a history this large, it should return a bounded recent page or a recoverablethread too largeerror. A background agent reading history in an unopened task should never be able to terminate the entire desktop app.I have all four full
.ipsreports and can provide them through a private maintainer upload route if needed.Same failure on the current macOS build; adding a new feedback ID and exact-build evidence.
In this instance, app logs ended while several concurrent local/remote task streams and reasoning summaries were being rehydrated or multiplexed. I did not isolate an image-heavy rollout or a deterministic read_thread call, so I am reporting that trigger as correlated rather than proven. The identical current-build native signature suggests the same main-process V8 OOM failure family.
The full .ips reports are available through a private maintainer upload route if needed; they are not attached publicly because they may contain local paths.