Codex app-server reaches 27 GB footprint and 36 GB swap after compacted records grow one rollout JSONL to 10.2 GB with repeated inline PNG data URLs

Open 💬 10 comments Opened Jul 23, 2026 by cclank
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

Summary

A long-running, image-heavy Codex thread produced a 10.2 GB rollout JSONL under ~/.codex/sessions. The file is dominated by very large compacted records that retain PNG screenshots inline as data:image/png;base64,... strings.

While the thread was active in Codex Desktop, the codex app-server process reached a 27 GB physical footprint, with approximately 26.2 GB swapped out. System swap later reached 36.1 GB on an 18 GiB Mac. macOS generated a JetsamEvent that identified codex as the largest process.

One inspected compacted record was 50,382,022 bytes and contained 24 inline PNG data URLs totaling 50,276,604 bytes. More than 99.7% of that record consisted of image data. Other sampled compacted records were approximately 62 MB, 77 MB, and 79 MB.

This appears to combine two related problems:

  1. Compaction replacement history retains full inline image payloads and appends another large snapshot to the rollout.
  2. Resuming or continuing an oversized rollout causes app-server to allocate multiple times the file size in heap memory.

The affected rollout contains private project screenshots, so I cannot attach the original 10.2 GB file publicly. All evidence below was collected with streaming or fixed-size sampling, without loading the full file into an analysis process.

Environment

  • Product: Codex Desktop inside ChatGPT for macOS
  • ChatGPT app version: 26.715.72359
  • Current bundled Codex version: codex-cli 0.145.0-alpha.30
  • Affected session metadata version: 0.142.4
  • Affected session source: vscode
  • macOS: 26.5.2 (25F84)
  • Architecture: Apple Silicon, arm64
  • Physical memory: 18 GiB
  • Affected thread age: created June 30, 2026 and still active on July 23, 2026
  • Affected thread type: long-running local UI development task with repeated browser screenshots and automatic continuation/compaction

Timeline

  1. A UI development thread was created on June 30 and continued running across many turns.
  2. The thread repeatedly used browser and image tooling while developing and validating a local web application.
  3. On July 23, the Mac became extremely slow, disk usage was unexpectedly high, and memory usage appeared abnormal.
  4. The rollout file was found at 10.2 GB and was still being appended to by codex app-server.
  5. footprint and vmmap showed approximately 27 GB allocated to the Codex process.
  6. macOS generated a JetsamEvent at 09:42 local time with largestProcess: codex.
  7. Fixed-size sampling of the rollout showed that most sampled regions fell inside giant single-line compacted events containing inline base64 PNGs.

Observed system impact

At the time of diagnosis:

Physical RAM:                 18 GiB
Codex footprint:              27 GB
Codex peak footprint:         28 GB
Codex MALLOC_LARGE:           17 GB
Codex MALLOC_SMALL:           10 GB
Codex writable regions:       28.4 GB
Codex resident memory:        about 944 MB
Codex swapped memory:         about 26.2 GB
System compressed memory:     about 7.4 GB
System swap used:             26.2 GB, later rising to 36.1 GB
Memory pressure level:        2
System free memory estimate:  26% to 28%
Load average peak observed:   78.53
Jetsam largest process:       codex

The low RSS shown by ps was misleading because most of the Codex allocation had already been compressed or swapped. footprint and vmmap both reported the much larger allocation.

Relevant vmmap summary:

Physical footprint:         26.9G
Physical footprint (peak):  27.6G

Writable regions: Total=28.4G written=19.4M resident=742.4M swapped_out=26.2G

MALLOC_LARGE: 17.1G total, 16.3G swapped
MALLOC_SMALL: 10.2G total, 9.5G swapped
DefaultMallocZone: 26.8G allocated

The app-server had the rollout open through both read and write descriptors while the problem was occurring.

Rollout evidence

File size and session state

Logical size:   10,213,146,014 bytes
Allocated size: 10,218,827,776 bytes
Session tokens_used field: 1,953,300,167

The token value appears to be cumulative and includes repeatedly replayed context. It should not be interpreted as 1.95 billion unique generated text tokens.

The current unrelated diagnostic thread had a rollout of only about 2 MB, which isolated the problem to the older active thread.

Fixed-size sampling

I sampled sixteen evenly spaced 4 MiB regions across the rollout.

  • Twelve of the sixteen samples contained zero newline characters, meaning each sample fell inside a single JSONL record larger than 4 MiB.
  • Those zero-newline samples repeatedly contained data:image, image_url, and base64 markers.
  • Normal event-dense regions contained hundreds of newlines within the same 4 MiB sample size.

Sampled compacted record sizes

Boundary scans around several random offsets found the following complete JSONL record sizes:

50,382,022 bytes   type=compacted
61,676,555 bytes   type=compacted
76,688,051 bytes   type=compacted
79,544,935 bytes   type=compacted
79,532,979 bytes   type=compacted

Each sampled record contained inline PNG data URLs.

Detailed breakdown of one record

One 50,382,022 byte compacted record contained:

Inline PNG data URLs: 24
Combined data URL bytes: 50,276,604
Share of record occupied by image data: approximately 99.79%

The 24 individual data URLs ranged from approximately 382 KB to 3.18 MB. The decoded PNG bytes would be smaller, but base64 adds approximately 33% encoding overhead.

Reproduction outline

The original thread is too large and private to share. A smaller reproduction should be possible with the following pattern:

  1. Start a Codex Desktop or VS Code thread for a local UI project.
  2. Use browser or image tools repeatedly so the conversation contains multiple full-resolution PNG screenshots as inline image inputs or tool results.
  3. Continue the thread until automatic context compaction occurs.
  4. Continue adding screenshots and allow compaction to run repeatedly.
  5. Inspect ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl.
  6. Search for records with "type":"compacted" and inspect their byte lengths.
  7. Verify whether each compacted replacement retains previous data:image/png;base64,... payloads.
  8. Resume or continue the oversized thread in Codex Desktop.
  9. Inspect the app-server with footprint -p <pid> and vmmap -summary <pid>.

Actual behavior

  • Each compaction appends another snapshot containing large inline image payloads.
  • Historical image bytes remain in earlier append-only records.
  • New compacted records continue carrying image payloads forward.
  • The rollout grows without an effective per-thread or per-record limit.
  • An active oversized rollout can consume multiple times its on-disk size in app-server heap memory.
  • The whole machine experiences heavy compression, swap growth, high load, and Jetsam pressure.
  • An inactive or background thread can degrade the entire Codex Desktop process without clear UI attribution.

Expected behavior

  • Compaction should remove, summarize, externalize, or deduplicate historical image bytes.
  • A compacted replacement should not retain full base64 screenshots indefinitely.
  • Rollout persistence should store large binary assets separately and reference them by content hash or stable asset ID.
  • Opening or continuing one oversized thread should not require parsing all inline image bytes into heap memory.
  • Codex should enforce limits for record size, thread size, image count, and retained historical image bytes.
  • The app should warn when a thread is large enough to threaten disk space or memory stability.
  • One problematic thread should not place all other Desktop threads and the operating system at risk.

Root-cause hypothesis

The rollout format appears to reuse the in-memory multimodal message representation for persistence. Image inputs are serialized as self-contained data URLs. During compaction, replacement history retains those image-bearing messages. The result is repeated persistence of the same class of heavyweight payloads in an append-only log.

When app-server resumes or continues the thread, JSON decoding, base64 strings, replacement-history structures, request construction, and intermediate buffers can coexist. This likely explains why a 10.2 GB file resulted in approximately 27 GB of malloc footprint.

The exact allocation call stack was not collected, so the final in-memory multiplication mechanism remains a hypothesis. The on-disk image amplification and the 27 GB process footprint are directly measured.

Suggested fixes

  1. Replace historical inline image items with a compact placeholder after compaction, for example [Image omitted during compaction] plus lightweight metadata.
  2. Store screenshots in a content-addressed blob store and keep only a SHA-256 reference, MIME type, dimensions, and asset ID in JSONL.
  3. Deduplicate identical image payloads across turns and compactions.
  4. Keep full-resolution bytes only for a small recent window. Use thumbnails or textual summaries for older images.
  5. Stream and lazily decode rollout records. Avoid materializing an entire large thread or all image strings at once.
  6. Add hard limits and graceful degradation for:
  • Maximum JSONL record size
  • Maximum retained image bytes per compacted record
  • Maximum rollout size
  • Maximum history bytes loaded during resume
  1. Add a repair or migration path that can externalize or replace historical inline images in existing oversized rollouts.
  2. Surface thread size and the identity of a background thread that is consuming significant CPU, memory, or disk.
  3. Add regression tests that run repeated compaction with multiple image inputs and assert bounded rollout growth.

Workaround

The current safe workaround is:

  1. Stop the affected background thread.
  2. Fully quit Codex Desktop so app-server releases the rollout and its heap allocation.
  3. Back up the rollout before changing it.
  4. Move the oversized rollout out of the active sessions directory, or stream-rewrite a copy that replaces historical inline image data with placeholders.
  5. Restart Codex and verify memory pressure and swap usage.

Deleting or rewriting a rollout while app-server still has it open for writing is unsafe.

Related issues

  • #24388: Remote compaction deadlock when input_image payloads remain in compacted replacement history
  • #24550: Responses WebSocket fallback when compacted replacement_history contains large inline images
  • #24676: Codex Desktop hangs when opening an image-heavy rollout with inline image records
  • #24948: Session logs grow to hundreds of MB or multiple GB from repeated compaction history and raw tool output
  • #21948: Large active session causes global freezes without UI attribution
  • #22004: Desktop crash when rollout JSONL exceeds V8 maximum string length

This report adds an extreme macOS case with a 10.2 GB rollout, measured 27 GB app-server footprint, 36 GB swap usage, a JetsamEvent naming Codex as the largest process, and a byte-level breakdown showing that 99.79% of one 50 MB compacted record consists of 24 inline PNG data URLs.

Privacy and diagnostic availability

The original rollout contains private screenshots, prompts, tool outputs, and local project paths. It should not be uploaded publicly. I can provide:

  • Redacted command output from footprint, vmmap, and the JetsamEvent
  • A streaming analysis script that reports record sizes and image byte counts without exposing image contents
  • Sanitized synthetic reproduction data
  • Additional diagnostics through a private support channel if requested

View original on GitHub ↗

10 Comments

github-actions[bot] contributor · 1 month ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #33735
  • #34268

Powered by Codex Action

MattPears1 · 1 month ago

Corroborating data point from Windows, with no images involved — which may help isolate problem (2) in your summary from problem (1).

Environment

  • Codex Desktop on Windows 11, package version 26.721.4979.0
  • Bundled codex-cli 0.146.0-alpha.3.1
  • 64 GB RAM (so never memory-constrained — the failure was purely pause-related)

What I saw

A thread created 2026-07-18 and continued for nine days accumulated a compaction chain 119 windows deep. Each compacted record contains replacement_history plus window_number / first_window_id / previous_window_id, forming a linked list back to the original window.

The records grow monotonically along the chain:

window   1    83 KB
window   2    86 KB
...
window 119  1025 KB

Every session that continues that thread rewrites the entire 119-window chain into its new rollout file. Measured on one session: 67.8 MB written in 1.358 seconds (timestamps 11:28:56.992 → 11:28:58.350). Total session file 102.8 MB, of which 66% was compacted records — 119 records for 67.8 MB, against 25.9 MB for 32,298 event_msg records.

This reproduced identically across separate sessions started the same day:

| session started | compacted records | bytes | largest record |
|---|---|---|---|
| 10:40 | 118 | 66.8 MB | 1038 KB |
| 11:45 | 119 | 67.8 MB | 1038 KB |
| 12:19 | 119 | 67.8 MB | 1038 KB |

The controlled comparison

Sessions started clean on the same machine, same day, under the same load:

| inherited chain depth | session size |
|---|---|
| 119 windows | 100–103 MB |
| 31–33 windows | 13–21 MB |
| 0 (fresh thread) | 0.3–1.0 MB |

Size tracks chain depth linearly. No images were involved in any of these — the bulk is replacement_history text, so the replay/growth problem is not specific to inline data URLs.

Different symptom to yours, same cause

On Windows this surfaced in the renderer, not app-server. Parsing ~68 MB of JSON into JS objects at session start put the renderer heap near 1 GB before any work began; ordinary use then pushed it to 1.7–1.8 GB, where a full GC pause runs for minutes. Measured during one: the V8 main thread pinned in Running at 90.7% of one core with 5,260 s accumulated CPU, then freed 721 MB and recovered.

The UI stops repainting for the duration, so it presents as a crash — but Crashpad recorded zero dumps across nine days. It never crashes; it hangs and recovers. That distinction cost me a lot of diagnostic time and may be worth noting for others searching.

Workaround

Retiring long threads and starting fresh ones drops new sessions from ~100 MB to under 1 MB, which keeps renderer heap in the low hundreds of MB and eliminates the pauses entirely.

Suggestion

I notice history_mode already supports legacy / compact / full internally, and every thread on my install is legacy. If compact bounds the replayed chain, exposing it as a user setting would resolve this without users needing to know any of the above. Related: #34963.

ooowill · 29 days ago

Additional confirmed Windows case, substantially larger than the original report.

Environment

  • Product: Codex Desktop / ChatGPT desktop app for Windows
  • App package: OpenAI.Codex 26.721.11231.0
  • OS: Windows 10 Pro, build 19045
  • Affected session ID (for internal correlation): 019f9b07-ee1e-7260-9e8d-b999f154c2fb
  • Incident date: 2026-07-29

Measured impact

  • Archived rollout size: 50,624,333,395 bytes (47.15 GiB)
  • A single type: "compacted" JSONL record occupied 50,342,723,847 bytes (46.89 GiB)
  • That one record represented 99.44% of the entire rollout
  • Record field: payload.replacement_history
  • Final checkpoint: window_number: 158
  • Recorded cumulative token usage: 648,175,342
  • The task became impossible to reopen or compact reliably

The original screenshots were only approximately 2.70 MB, 2.70 MB, and 3.11 MB. They were persisted inline as data:image/png;base64,... and repeatedly retained across later compactions.

A fixed-size analysis of the final 256 MiB of the compacted record found:

  • 84 inline PNG data URLs
  • 264,527,704 of 268,435,456 sampled bytes were Base64 image payloads (98.55%)
  • Median encoded image size: approximately 3,652,864 bytes
  • Exact repeated screenshots were observed at multiple distant offsets in the same record

The final remote compaction attempt failed after approximately 564,671 ms (9m25s):

Error running remote compact task: stream disconnected before completion

A later attempt was also aborted after approximately 6m18s. Deleting the affected archived rollout, after preserving only privacy-safe structural metrics, immediately recovered 47.15 GiB of disk space. The raw rollout was not uploaded because it contained private project screenshots and conversation data.

This Windows case confirms that the issue is cross-platform and that repeated inline image retention can grow beyond 10 GiB into a single ~47 GiB compacted checkpoint.

Requested safeguards:

  1. Store image attachments once by stable asset ID/path or content-addressed hash; do not copy Base64 payloads into each compacted replacement history.
  2. Deduplicate identical images across turns and compactions.
  3. Prevent recursive retention of earlier replacement_history image bytes.
  4. Enforce hard per-record and per-rollout size limits with graceful fallback.
  5. Stream/lazily decode oversized history rather than materializing it in memory.
  6. Warn users before local Codex storage threatens available disk space.
  7. Provide an in-app storage inspector and a safe repair/prune action for oversized tasks.

I can provide the privacy-safe diagnostic summary or additional structural measurements if useful, but the original 47 GiB rollout has been removed to restore the machine.

harryshawk · 26 days ago

Additional macOS Desktop corroboration from a privacy-preserving structural audit across the full local session store.

Environment and scope

  • Product: Codex Desktop inside ChatGPT for macOS
  • Platform: Apple Silicon macOS
  • Session store examined read-only with streaming JSONL analysis
  • Total retained rollout files: 355
  • Combined logical size of the session store: approximately 26.6 GiB
  • Rollouts larger than 100 MiB: 27
  • Combined size of those 27 rollouts: 23.539 GiB

No raw rollout, screenshot, prompt, response, task title, thread ID, tool content, username, or local path is included here.

Aggregate byte attribution for the 27 oversized rollouts

| Stored record category | Size | Share of oversized set |
|---|---:|---:|
| compacted records | 19.339 GiB | 82.16% |
| function-call outputs | 0.929 GiB | 3.95% |
| message records | 0.843 GiB | 3.58% |
| MCP completion records | 0.780 GiB | 3.31% |
| image-generation completion records | 0.532 GiB | 2.26% |
| custom-tool outputs | 0.421 GiB | 1.79% |

All 27 oversized rollouts were dominated by compacted records. Together they retained 1,918 compaction records.

Distribution

  • Smallest oversized rollout: approximately 119 MiB
  • Median oversized rollout: approximately 909 MiB
  • Largest oversized rollout: approximately 2.20 GiB
  • Rollouts at or above 400 MiB: 19
  • Maximum compaction count observed in one rollout: 400
  • Largest complete JSONL record observed: approximately 29.6 MiB
  • Records matching privacy-safe inline-image/image-event markers: 6,900

The 27 largest files account for roughly 88% of the total session-store bytes, so this is highly concentrated rather than ordinary uniform transcript growth.

Interpretation

This broader sample supports the issue's on-disk root-cause hypothesis: repeated append-only persistence of large replacement-history snapshots is the primary storage amplifier. Original image and tool-result records contribute measurable bytes, but the compacted snapshots are much larger in aggregate, consistent with heavyweight payloads being carried forward through repeated compactions.

The analysis did not measure app-server heap multiplication, so I cannot independently corroborate the issue's memory-footprint figures. It directly corroborates the disk amplification across many independent rollouts rather than one extreme thread.

Operational mitigation used locally

Pending an upstream fix, I am treating rollout size as a low-cost warning signal:

  • 100–199 MiB: watch and prepare a successor-task handoff
  • 200–399 MiB: retire at the next safe milestone
  • 400+ MiB: stop extending the thread and create a successor promptly

Here “retire” means preserve the existing task as history and stop appending new work; it does not mean manually rewrite or delete the JSONL.

I can provide the privacy-safe streaming analyzer and additional aggregate histograms if useful.

y-chegirinskiy · 25 days ago

Confirming the same failure mode on Linux with stable codex-cli 0.146.0, including a kernel OOM cascade.

Environment

  • Linux x86_64
  • 22.91 GiB physical RAM, 12.00 GiB swap
  • codex-cli 0.146.0 installed via the global npm package
  • app-server launch mode: codex -c features.code_mode_host=true app-server --listen unix://

Measured impact

At the kernel OOM snapshot, the Codex process had:

  • 17.846 GiB RSS
  • 4.823 GiB swap entries
  • oom_score_adj=-900

The strong inherited OOM protection caused Linux to kill unrelated application processes repeatedly instead of the largest consumer. After reboot, a fresh app-server went from 750 MiB to 2.03 GiB RSS in 119 seconds and later showed a 6.13 GiB RSS high-water mark.

Privacy-safe rollout metrics

The affected rollout contains private project data, so I cannot attach it. Structural measurements:

  • rollout size: 5.464 GiB
  • session store total: approximately 13 GiB
  • JSONL lines: 148,570
  • type=compacted lines: 360
  • lines containing replacement_history: 360
  • lines containing data:image: 461
  • maximum JSONL line length: 43,131,557 bytes
  • Codex RSS / rollout-size ratio at OOM: approximately 3.27x

The rollout was created on July 10 and was still being modified by the restarted 0.146.0 app-server during the incident.

Additional observation

The same app-server tree also retained duplicate MCP/helper sets (Playwright, Serena/TypeScript LS, Graphify, Context7, Vibe Kanban MCP, and dev-manager MCP), consistent with #25015. One affected session scope had roughly 250 tasks and no memory limit. However, the single Codex process RSS and the 5.464 GiB compacted rollout make this incident a close match for this issue.

I can provide exact kernel task-table rows, timestamped RSS/cgroup samples, and privacy-safe structural analysis output. I will not publish the raw rollout because it contains prompts, tool results, screenshots, local paths, and session identifiers.

abunch · 25 days ago

Additional macOS reproduction: the oversized-rollout failure is occurring in the Computer Use cua_node worker, not only in app-server. This also appears related to #26738.

Environment

  • macOS 26.0.1 (25A362), arm64
  • 36 GiB RAM
  • ChatGPT app 26.721.41059 (bundle 5848)
  • Bundled Codex: codex-cli 0.146.0-alpha.3.1
  • Standalone Codex CLI: codex-cli 0.145.0

Directly measured behavior

  • The first cua_node/bin/node worker sustained approximately 107-160% CPU. Its RSS reached roughly 9.7 GB, and sample reported a 14.7 GB physical footprint.
  • A later check found a replacement worker with the same Computer Use session and working directory. It sustained approximately 110-172% CPU, used roughly 6.5-10.5 GB RSS, and had a 16.6 GB peak physical footprint.
  • The affected rollout was 3,568,314,812 bytes and was still being modified. It grew from 3,299,505,889 bytes to 3,568,314,812 bytes in about 3 hours 23 minutes.
  • lsof -o showed the worker holding that same rollout through two read descriptors (12 and 13), both positioned at byte 3,568,314,812, which was EOF at measurement time.
  • Stack sampling repeatedly showed Node filesystem reads, TypedArray buffer allocation/copying, and V8 garbage collection.
  • The process tree was:

codex resume -> node_repl -> codex sandbox -> cua_node/bin/node

  • Terminating the first runaway worker was not durable. A new worker later appeared under a different PID and resumed the same behavior.
  • The affected rollout was created in July and remained active and growing in August.

This looks like the Computer Use runtime eagerly or repeatedly reading an oversized active rollout, amplifying it in memory, and spending sustained CPU on buffer copying and garbage collection. It produces severe laptop heat even when overall system CPU is not saturated.

Useful safeguards would include streaming/lazy rollout processing, avoiding duplicate full-file readers, bounding retained history, and enforcing a CPU/memory watchdog for Computer Use workers.

No raw rollout, session ID, prompts, screenshots, or private project paths are included here.

lens-review · 25 days ago

Confirming a more severe reproduction of this exact failure mode in Codex Desktop on macOS.

Environment

  • Codex App: 26.727.51351 (build 6119)
  • Platform: macOS / Darwin 24.6.0, arm64
  • Physical RAM: 48 GB

Measured impact

  • One affected rollout JSONL reached 75,284,181,256 bytes (~70.1 GiB).
  • Merely opening the corresponding task in the sidebar caused the main codex process to reach 20.22 GB and continue rising until the machine became unresponsive. An earlier run failed with mach_vm_allocate_kernel failed.
  • lsof confirmed that Codex opened this exact 75 GB rollout when the task was selected.
  • A process sample showed the hot path in filesystem reads and JSON deserialization/allocation: tokio::fs -> serde_json -> realloc / memmove.
  • Structural inspection of the tail/samples showed very large serialized tool/image payloads (including repeated inline image/base64-like data). The cumulative tokens_used metadata had reached roughly 6.6 billion.
  • The project's large SQLite market-data database was not opened by Codex, and running the project's web application and factor workloads independently stayed low-memory. This isolates the trigger to loading task history, not workspace indexing or application runtime.

Recovery confirmation

After archiving the task, deleting only the oversized rollout, and restarting the Codex backend:

  • Codex memory returned to about 2.6 GB
  • about 70 GiB of disk space was reclaimed
  • the runaway allocation no longer reproduced

No raw rollout, session ID, prompts, screenshots, usernames, or private project paths are included here.

Requested safeguards

Please consider:

  1. stat() the rollout before opening it and reject/quarantine implausibly large files.
  2. Enforce hard limits for total rollout size and individual JSONL record size.
  3. Stream/lazily decode history rather than materializing the full rollout.
  4. Externalize and deduplicate image/binary payloads instead of carrying them through repeated compactions.
  5. Provide a repair/quarantine UI so a corrupt task cannot freeze the whole app before the user can recover it.

The preflight size check is especially important here: a 75 GB JSONL should never enter the normal eager-load path.

a-k-kord · 25 days ago

Confirmed on Codex CLI 0.146.0-alpha.9.2 / Desktop 26.727.51351. One rollout reached 29.609 GiB; 99.276% was repeated compacted history containing 24,656 embedded images. Archiving the thread caused Codex to open and parse the archived 31.8 GB rollout, making macOS unresponsive and requiring a reboot. Replacing embedded images with text placeholders reduced the same valid JSONL to 0.154 GiB.

shleder · 14 days ago

The 50–79 MB compacted records carrying inline PNG data make this a direct oversized-persisted-payload case. Codex Rescue’s reader is bounded: it can identify oversized JSONL records without decoding or retaining the image bytes, and it never rewrites the source rollout.

It does not externalize images, shrink the 10.2 GB file, or repair the app-server memory amplification. I’m looking for real cases that confirm whether the local diagnostic and fail-closed handoff remain useful at this scale.

If the affected rollout or a backup still exists, would you try:

pipx install codex-rescue==0.1.0a3
codex-rescue sessions
codex-rescue doctor --latest

Sanitized counts/classification are sufficient. Please don’t share the raw rollout, image data, prompts, project files, databases, credentials, or private paths.

https://github.com/shleder/codex-rescue

unique1986 · 12 days ago

Additional confirmed Windows reproduction on the current Codex Desktop build. This repeatedly interrupted active paid work.

Environment

  • Product: Codex Desktop / ChatGPT desktop app for Windows
  • App package: OpenAI.Codex 26.810.4967.0
  • Chromium/ChatGPT executable: 151.0.7922.137
  • The same failure occurred before the update on package 26.803.10989.0 / executable 151.0.7922.76
  • System had approximately 42.5 GiB free physical RAM and 179 GiB free disk space, so this was not general machine resource exhaustion.

Oversized active rollouts

Two still-needed working threads had grown to approximately:

  • 5.38 GiB
  • 9.40 GiB

Fixed-size 64 MiB tail samples were inspected without loading or publishing the raw sessions:

  • 5.38 GiB rollout: 52.4% of sampled bytes were inline image data
  • 9.40 GiB rollout: 81.2% of sampled bytes were inline image data

Recent screenshot results appeared in paired records such as mcp_tool_call_end and custom_tool_call_output, with nearly identical 0.8–0.94 MiB payload sizes, suggesting the same image-bearing result is persisted in more than one protocol representation.

Measured runtime impact

  • codex.exe was observed at about 9.1 GiB working set/private bytes.
  • In a short sample it climbed from about 4.67 GiB to 6.39 GiB in six seconds.
  • One renderer reached about 1.28 GiB private bytes.
  • Repeated thread/turns/list calls for the 5.38 GiB thread took 31–33 seconds. The previous day they took 16–22 seconds.
  • State synchronization then logged: host did not respond to sync request.

Failure mode

Windows recorded three Application Hang events (Event ID 1002) on August 14–15. The most recent report classified the hang as:

HangType=Top level window is idle

The visible symptom is that the entire UI disappears and only the Codex logo remains. At the same timestamp, Desktop logs report:

  • browser/sidebar renderer process gone, reason killed
  • Chromium GPU process gone, reason killed
  • Codex CLI/app-server exited with code 1
  • fatal error broadcast

This reproduces after the latest Store update, so the current build has not resolved it.

Privacy

The raw rollouts contain private screenshots, prompts, tool results, local paths, and credentials/configuration context. I am not uploading them publicly. Sanitized structural counts, timing data, and Windows event metadata can be provided through a private OpenAI support channel if needed.

Requested safeguards

  • Externalize/deduplicate binary image payloads instead of retaining inline Base64 across protocol records and compactions.
  • Avoid eagerly materializing an entire multi-GiB rollout for thread/turns/list.
  • Add preflight size limits and graceful/lazy history loading.
  • Allow a fresh continuation/handoff that preserves working state without copying the full historical transcript.
  • Warn users before an active thread becomes large enough to destabilize the entire desktop app.