Codex desktop freezes on tasks continued from ChatGPT conversations
Description
Codex desktop becomes unresponsive when a task is created by continuing a ChatGPT conversation into Codex. Normal tasks in the same folder work.
Steps to Reproduce
- Open an existing ChatGPT conversation.
- Continue the conversation in Codex.
- Choose the local folder named md-resume.
- Open or run the generated Codex task.
- The task hangs and does not produce a response.
Expected Behavior
The imported task should run normally. If the imported conversation is too large or unsupported, Codex should show a clear error instead of freezing.
Actual Behavior
The imported task freezes. In contrast:
- A newly created normal Codex task in the same folder works.
- Codex CLI in the same folder works.
- The problem is isolated to tasks continued from ChatGPT conversations.
Environment
- OS: macOS
- Host: Local
- Affected Codex desktop version: 0.144.2
- Current Codex CLI version used for diagnostics: 0.144.4
Logs
Feedback and diagnostics were uploaded through /feedback.
Uploaded feedback thread ID: 019f64b1-9aa1-7fb0-a98b-5d4a69592454
Affected desktop task IDs:
019f647f-92d4-7b22-af3b-705fa2624e81019f6484-7d0c-79f0-be4b-9a8e87e1a394019f649f-2560-7760-8e20-fc5cccb788df
Additional Context
This does not appear to be a hard context-window overflow:
- The approximately 131k displayed tokens were cumulative.
- The last actual request was approximately 51,011 tokens against a 258,400 token context window.
- Another failed task stalled with
tokens_used=0, before model execution.
The suspected failure area is the ChatGPT conversation to Codex task conversion, serialization, or task initialization path. The uploaded diagnostics come from a separate CLI session used only to submit this report; the affected desktop task IDs are listed above.
4 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I investigated the affected local sessions and found a more specific failure boundary. This case is most consistent with a Desktop renderer route/stream handoff regression, not a model context-window overflow.
Environment
26.707.72221(build 5307)0.144.2md-resumefolder from the original reportDecisive A/B evidence
For the first two affected tasks, app-server accepted
thread/startandturn/start, and the rollouts continued through reasoning and local tool calls. However, the Desktop primary renderer never bound the newly created canonical thread:thread_stream_view_activity_changed active=trueownerRoutePath=/local/<canonical-thread-id>conversationId=client-new-thread:...withownerRoutePath=/rendererWebContentsId=2 rendererWindowAppearance=avatarOverlay, while the primary task view did not become the active ownerA normal task created in the same folder and same Desktop build followed the expected sequence:
The imported failures stop after create/owner/turn-start without the canonical route activation and stream rebound. This explains why the backend can keep working while the main task UI appears frozen.
Task-specific observations:
019f647f-92d4-7b22-af3b-705fa2624e81: backend reasoning/tool activity continued; no canonical route activation019f6484-7d0c-79f0-be4b-9a8e87e1a394: owner sync still referencedclient-new-thread:...and route/019f649f-2560-7760-8e20-fc5cccb788df:turn/startsucceeded, but the rollout stopped atsession_meta + task_started, before context materialization/model executionA ChatGPT-imported task on the previous Desktop build
26.707.71524completed normally and had the full route lifecycle above. Both builds used bundled app-server0.144.2, which further points to a Desktop renderer/shell regression introduced between those app builds.Context-size finding
The referenced ChatGPT conversation is serialized into one user input:
sandbox:,sediment://, generated-file attachment, or citation referencesThe packaged renderer builds this context by JSON-serializing the full referenced conversation without an apparent size/complexity budget. That is a separate hardening gap and may amplify renderer work, but it is not a hard context limit in this reproduction: the affected requests were approximately 51K tokens against a 258.4K context window. One failed task stalled with zero model tokens.
Suggested internal fix/test
When ChatGPT handoff returns the canonical thread ID, atomically:
client-new-thread:*route with/local/<canonical-id>;Please add a regression test for
Continue from ChatGPTusing a multi-message, code-heavy referenced conversation, asserting the canonical route, active view, stream owner, visible progress, and recoverable bootstrap failure.This overlaps the visible symptoms in #31966, #32342, #32996, and #33008, but this local reproduction does not require legacy attachment hydration; the canonical route/stream handoff is the clearest differentiator.
Additional reproduction with stronger evidence that the failure is in the ChatGPT → Work/Codex handoff and desktop rendering path.
Environment
26.715.31925(build5551)Affected task IDs
019f7623-377b-78d0-93a0-3600ad0607b8019f71ba-f829-75e3-b210-ee7944d3d742The user explicitly approved including these IDs for internal investigation. Raw conversation contents are intentionally not attached because they contain private data.
Sanitized thread measurements
Inspection without opening the affected tasks in the desktop renderer shows that the automatic handoff embeds the full source conversation under "Referenced ChatGPT conversation" inside the first Work/Codex user message.
| Task | Serialized thread size | Largest single user message | Preview/title length |
| --- | ---: | ---: | ---: |
|
019f7623…| 652,709 chars | 604,300 chars | 2,833 chars ||
019f71ba…| 640,674 chars | 575,062 chars | 4,162 chars |Two smaller converted samples also contained the full referenced conversation:
A normal non-converted control task was only 16,436 serialized chars, with a largest user message of 200 chars and no embedded referenced conversation.
Observed behavior
On macOS, the freeze correlated with a burst of 1,338 renderer communication warnings in roughly 60 ms, including:
Failed to publish app update state to rendererMessagePort message errorThe window/renderer was reported as no longer live. This log correlation may be secondary to the oversized handoff payload, but it is consistent with a renderer-side failure rather than a backend model failure.
Suspected cause
The ChatGPT → Work conversion appears to copy the entire source conversation into one user message rather than producing a bounded handoff summary. Long source chats therefore create 0.5–0.6 million-character message payloads, oversized previews/titles, and synchronous renderer work that can make the whole desktop window unresponsive.
Expected behavior
Current workaround
Create a clean Work task and manually provide a concise summary; avoid opening the affected generated task in the desktop app.
Potentially related: #32342, #32666, #33016, #25430.
Independent macOS reproduction on a newer build, with a concrete failure response from the ChatGPT conversation fetch path.
Environment
26.715.72359(bundle build5718)uname -mprs):Darwin 25.3.0 arm64 arm26.3.1 (25D771280a)Steps to reproduce
Actual behavior
On the first Mac, task creation fails and the app displays raw HTML under “Error while creating task” instead of creating the task. The response is a Cloudflare managed challenge page returned for a redacted ChatGPT conversation endpoint:
Because no Codex thread is created, the uploaded feedback is associated with:
no-active-thread-019f8a65-e4f9-7933-ba2d-6ab5e4a111c7On the second Mac, the same ChatGPT → Codex flow makes the desktop app hang instead of showing the HTML error.
Expected behavior
The referenced ChatGPT conversation should be fetched and converted into a Codex task successfully. If the request is challenged or returns non-JSON HTML, the app should recover by re-authenticating/retrying or show a concise actionable error. It should not render the raw challenge page or become unresponsive.
Additional observation
The captured response strongly suggests that at least one failure occurs before normal task/thread initialization: the request to
/backend-api/conversation/<id>receives a Cloudflare JavaScript/cookie challenge instead of conversation JSON. This may be a separate trigger that reaches the same user-visible handoff failure described in this issue.