Remote SSH threads show only the initial response while completed turns remain in rollout JSONL
What version of the Codex App are you using (From “About Codex” dialog)?
26.818.21641 (build 6849)
What subscription do you have?
ChatGPT Pro
What platform is your computer?
Darwin 25.5.0 arm64 arm
What issue are you seeing?
Summary
Several recent Codex Desktop threads connected to an SSH remote project display only the user prompt and the first short assistant commentary message. The Desktop thread index reports the turn as interrupted, with no visible final answer.
However, the remote rollout-*.jsonl files contain later tool calls, assistant messages, final_answer, token_count, and task_complete. The underlying tasks completed, but Desktop did not hydrate or index the later events.
This appears to be a Desktop / SSH app-server lifecycle or thread-state synchronization issue rather than missing model output.
Observed evidence
- Reproduced across multiple unrelated SSH remote threads.
- Desktop/list API reports
interruptedand nocompletedAt. - Desktop shows only the initial commentary and sometimes the first command.
- The first command completed successfully with exit code 0.
- Corresponding rollout JSONL files continued growing to approximately 7–20 MB.
- Some affected files contain an assistant
final_answerfollowed bytask_complete. - The SSH proxy/app-server had remained alive across multiple Desktop sessions.
- Local bundled CLI/app-server and the remote CLI were on different nearby versions.
The persisted transcript and Desktop thread index therefore disagree about turn status and contents.
What steps can reproduce the bug?
- Use Codex Desktop on macOS and connect to a Linux project through the built-in SSH connection.
- Start several normal tasks that read project files and execute shell commands.
- Allow each task to continue running.
- Reopen the affected threads in Desktop.
- Observe that the UI shows only the prompt, initial assistant commentary, and sometimes the first command; the turn is marked
interrupted. - On the remote host, inspect
~/.codex/sessions/.../rollout-*.jsonl. - Observe that the same rollout contains subsequent tool activity and, in some cases,
final_answerandtask_complete.
The issue has occurred repeatedly but I do not yet have a deterministic single-thread trigger. Full rollout files are not attached because they contain private prompts, project paths, and tool output.
What is the expected behavior?
When the remote rollout contains a completed turn, reconnecting or reopening the thread should hydrate all persisted messages, show the final assistant response, and report the turn as completed.
If hydration fails, Desktop should show a recoverable synchronization error rather than silently presenting the transcript as interrupted at the first command.
Additional information
Environment:
- Local platform: Darwin 25.5.0 arm64 arm
- Codex/ChatGPT Desktop: 26.818.21641, build 6849
- Bundled local Codex CLI: 0.148.0-alpha.21
- Remote OS: Linux over built-in SSH
- Remote Codex CLI: 0.149.0
Possible areas:
- stale SSH app-server/proxy ownership;
- dropped lifecycle events;
- resume/hydration stopping at an earlier interrupted ordinal;
- local/remote app-server protocol version skew;
- thread index not reconciled with terminal rollout events.
Related reports:
- https://github.com/openai/codex/issues/38341
- https://github.com/openai/codex/issues/24287
- https://github.com/openai/codex/issues/19608
- https://github.com/openai/codex/issues/24467
- https://github.com/openai/codex/issues/37969
I can provide sanitized event timelines and affected thread IDs privately.
5 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
same here
I can independently reproduce this on macOS + Codex Desktop Remote SSH.
My affected remote rollout is intact (5.5 MB, 1239 JSONL records) and contains the later completed work, final assistant response, and an explicit final task_complete. However both Desktop and codex resume <exact-session-id> reconstruct only the beginning of the conversation and mark it interrupted.
Keyword checks on the raw rollout include Phase 2B2 ×15, final commit prefix d478481 ×7, and task_complete ×3.
Clearing Desktop renderer caches and Session Storage did not help. This strongly appears to be history reconstruction/app-server state rather than lost rollout data.
Happy to provide additional sanitized diagnostics if useful; I cannot share the full rollout because it contains private project content.
I can reproduce this issue on Windows Desktop with a built-in SSH Remote connection to an OpenWrt ARM64 host.
Environment:
26.820.9563.00.150.10.146.0after the CLI update. I restarted the OpenWrt service and verified that the CLI, app-server, and code-mode-host were all using the0.150.1release. The history truncation still persists.Concrete evidence from one affected thread:
rollout-*.jsonlcontains 332 records.event_msgwithpayload.type = "task_complete"and a completelast_agent_message.status = "interrupted",completedAt = null, and four visible items: the user prompt, an initial reasoning summary, the first commentary message, and the first completed command.hasMore = false, even though hundreds of later rollout records exist.This rules out missing model output, disk exhaustion, and merely having a stale remote daemon version. It looks like paginated history projection/hydration stops at an earlier interrupted boundary and does not reconcile against the terminal rollout events.
I am not attaching the raw rollout because it contains private prompts, paths, and tool output, but I can provide a sanitized event timeline if useful.
Additional reproduction data from another user:
rollout-*.jsonlfiles contain the completed work, including final assistant responses andtask_complete.This further suggests persisted thread-state/index hydration is failing independently of the complete rollout, and that a normal app-server restart does not rebuild or reconcile it.
No private rollout contents are attached, but sanitized event timelines or thread IDs can be provided if useful.
_This comment was created and posted by OpenAI Codex at the user's request._