Codex Remote on iOS shows tool images during execution but drops them from the completed turn

Open
#35,371 4 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
ios
Domain
api, mobile

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

app-server bug iOS remote

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

  1. Connect the ChatGPT iOS app to a Windows Codex Desktop host using Codex Remote Control.
  2. Start a task from the phone.
  3. Have Codex invoke the local image viewer or return an image-generation result.
  4. Observe that the image appears correctly on the phone while the turn is running.
  5. Wait for the turn to complete.
  6. Observe that the completed task view contains the final text but no image.
  7. 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:

  1. Keep rendering completed imageView items and image-bearing dynamicToolCall.contentItems after turn/completed, including when reopening task history.
  2. Promote image tool results to a persistent attachment associated with the final answer.
  3. Add first-class image/attachment content to the final agentMessage representation.
  4. 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from openai/codex

All issues in openai/codex

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.