Codex Remote on iOS shows tool images during execution but drops them from the completed turn
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 48/100
Research direction
Start with the App Server item model and the sanitized rollout JSONL described in the issue, focusing on imageView, image-bearing dynamicToolCall.contentItems, and the turn/completed replay path. Trace how the iOS Remote Control client loads completed task history; done means images shown during execution remain visible after completion and reopening.
Written by the indexing model from the issue text.
Description
Environment
- Codex desktop app:
26.721.4979.0 - Host OS: Windows 11 Pro, version
10.0.26200, 64-bit - Remote client: ChatGPT app on iPhone, Codex Remote Control
- Subscription: ChatGPT Pro
- Reproduced repeatedly on July 26, 2026 (Asia/Shanghai)
Issue
When Codex running on the Windows host produces or views an image, the image is successfully relayed to the ChatGPT iOS Remote Control client and is briefly visible while the turn is running. As soon as the turn completes and the mobile UI switches to the completed/final response view, the image disappears. Reopening or refreshing the completed task still shows only the final text.
This is not a basic transport failure: the same iPhone renders the actual image bytes during the live execution stream. The failure occurs at completion/replay, when the image-bearing tool item is no longer rendered or bound to the final response.
Steps to reproduce
- Connect the ChatGPT iOS app to a Windows Codex Desktop host using Codex Remote Control.
- Start a task from the phone.
- Have Codex invoke the local image viewer or return an image-generation result.
- Observe that the image appears correctly on the phone while the turn is running.
- Wait for the turn to complete.
- Observe that the completed task view contains the final text but no image.
- Reopen or refresh the task; the image remains absent.
The behavior was reproduced with:
- a local image returned through the image-view/tool-output path;
- a generated-image result;
- an image referenced from the final response;
- a publicly reachable HTTPS image reference.
Expected behavior
Any image successfully displayed during a turn should remain visible in the completed turn and after reopening the task. It should be retained as a persistent image/tool item or promoted to an attachment associated with the final response.
Actual behavior
The image is visible only during the live execution stream. After turn/completed, the mobile final view replays only the assistant text and drops the image.
Sanitized rollout evidence
Inspection of the local rollout JSONL for one reproduction showed:
| Record | Payload | Image present | Size |
|---|---|---|---|
| Image tool result | custom_tool_call_output containing input_image / image_url |
Yes | approximately 1,306,900 characters |
| Final assistant message | message with content type output_text only |
No | 468 characters |
The image bytes therefore reached and were persisted in the turn record, but were not associated with the final assistant message.
This also matches the current App Server item model documented at https://learn.chatgpt.com/docs/app-server#items: agentMessage contains text, while imageView and image-bearing dynamic tool results are separate items.
Impact
This blocks visual review from Codex Remote. A user can briefly see a generated screenshot, design candidate, chart, or other image while execution is active, but cannot inspect it after completion or return to it later. External storage links are not equivalent because they require leaving the task and do not provide the expected inline final result.
Suggested fix area
One of the following would address the issue:
- Keep rendering completed
imageViewitems and image-bearingdynamicToolCall.contentItemsafterturn/completed, including when reopening task history. - Promote image tool results to a persistent attachment associated with the final answer.
- Add first-class image/attachment content to the final
agentMessagerepresentation. - Ensure the mobile Remote client fetches and renders the full persisted item history rather than only the final text summary.
The reporter can provide redacted screenshots and additional rollout metadata if needed.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.5k
- Avg merge
- 1m
- Merged PRs (30d)
- 1k
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from openai/codex
-
enhancement remote
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
bug CLI windows-os
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
macOS sandbox blocks hw.optional.arm64 sysctl, causing Flutter to misdetect Apple Silicon as x64 Openbug CLI sandbox
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
bug CLI TUI
Difficulty 2/5 1-3 hours Newbie friendliness 90/100
-
CLI config enhancement skills
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
kwakseongjae/auto-hwp#319 ·
-
area:cli bug filter-quality good first issue priority:medium
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
Difficulty 1/5 Under an hour Newbie friendliness 72/100
bevyengine/bevy#25861 ·
-
comp-datalake
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
ClickHouse/ClickHouse#121222 ·
-
A-linter
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
oxc-project/oxc#26863 ·