Codex Desktop writes empty assistant messages when continuing an older resumed thread
What version of the Codex App are you using (From “About Codex” dialog)?
Codex Desktop on Windows. Observed in logs: - Codex package: OpenAI.Codex_26.611.8604.0_x64__2p2nqsd0c76g0 - Browser/Codex release field seen in logs: 26.611.62324 - Session metadata CLI version: 0.136.0-alpha.2
What subscription do you have?
Plus
What platform is your computer?
Windows 10 / Windows Desktop.
What issue are you seeing?
When continuing an older Codex Desktop thread, Codex appears to complete the turn, but the assistant response is saved as an empty message.
The user-facing behavior is:
- I send a message in an older thread.
- The response may briefly appear or the turn appears to complete.
- The final visible assistant message is empty / disappears.
- The thread remains usable enough to open and resume, but future assistant responses in that thread are also saved empty.
- Newer/fresh threads do not consistently show the same behavior.
The session file contains successful user messages followed by empty assistant messages:
{"timestamp":"2026-06-17T16:26:55.122Z","type":"response_item","payload":{"type":"message","role":"user","content":[{"type":"input_text","text":"<user prompt>"}]}}
{"timestamp":"2026-06-17T16:27:28.204Z","type":"event_msg","payload":{"type":"agent_message","message":"","phase":null,"memory_citation":null}}
{"timestamp":"2026-06-17T16:27:28.213Z","type":"response_item","payload":{"type":"message","role":"assistant","content":[]}}
{"timestamp":"2026-06-17T16:27:28.232Z","type":"event_msg","payload":{"type":"task_complete","turn_id":"019ed668-3880
The important part is:
agent_message message=""
assistant content=[]
task_complete last_agent_message=null
But the same turn has token usage recorded:
"last_token_usage":{"input_tokens":3326,"cached_input_tokens":0,"output_tokens":1572,"reasoning_output_tokens":0,"total_tokens":4898}
So this does not look like a normal "model returned no output" case. It looks like generated output was lost between the model/app-server pipeline and transcript persistence/rendering.
What steps can reproduce the bug?
I do not have a minimal deterministic reproduction yet, but the observed path is:
Open an older Codex Desktop thread created several days earlier.
Let Codex resume the thread.
Send a new user message.
Codex starts and completes the turn.
The session file records an empty assistant message with content: [].
The UI shows no usable assistant response / the response disappears.
Relevant logs around resume show that the old thread loads successfully:
2026-06-17T16:04:46.504Z info [AppServerConnection] response_routed ... conversationId=019ea5d4-bd16-7332-9cdf-ad2e9b0663dc ... errorCode=null ... method=thread/read
2026-06-17T16:04:52.820Z info [AppServerConnection] response_routed ... conversationId=019ea5d4-bd16-7332-9cdf-ad2e9b0663dc ... errorCode=null ... method=thread/resume
2026-06-17T16:04:52.865Z info [electron-message-handler] maybe_resume_success conversationId=019ea5d4-bd16-7332-9cdf-ad2e9b0663dc latestTurnStatus=completed markedStreaming=true turnCount=9
A later turn starts successfully:
2026-06-17T16:26:54.975Z info [AppServerConnection] response_routed ... conversationId=019ea5d4-bd16-7332-9cdf-ad2e9b0663dc ... errorCode=null ... method=turn/start
Then the persisted transcript contains an empty assistant message and task_complete with last_agent_message=null.
In one earlier retry on the same old thread, a rollback happened before another empty response was recorded:
2026-06-17T16:04:56.425Z info [AppServerConnection] response_routed ... conversationId=019ea5d4-bd16-7332-9cdf-ad2e9b0663dc ... method=thread/rollback
What is the expected behavior?
When a resumed old thread completes a turn, the assistant response should be persisted and rendered normally.
If the response cannot be generated or persisted, Codex should show a visible error instead of writing: {"role":"assistant","content":[]}
and marking the task complete with:
"last_agent_message": null
Codex marks the turn complete, records token usage, but persists an empty assistant message:
agent_message message=""
assistant content=[]
task_complete last_agent_message=null
This makes the thread appear broken: the user sees no answer, and subsequent attempts in the same old thread can repeat the same empty-output behavior.
Additional information
Additional diagnostics
I checked for the previously reported rollout is empty / thread/read failure pattern, but this does not appear to be the same bug.
For this affected thread:
thread/read returns errorCode=null
thread/resume returns errorCode=null
turn/start returns errorCode=null
no rollout is empty error was observed for this thread
the failure is visible in the session JSONL as empty persisted assistant content
There were unrelated warnings/errors in the same Codex Desktop logs, including Git dubious ownership and Windows workspace dependency warnings, but the old thread itself resumes successfully before the empty assistant message is written.
Impact:
This is data-loss-like behavior for long-running Codex Desktop threads. Older threads can become effectively unusable because new assistant responses are completed but stored as empty messages, making it impossible to continue work from that thread.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗