Android Remote cannot start turns in an idle large task: turn/start times out after 30s
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.5k
- PR merge metrics
- PR metrics pending
Description
Summary
Android Codex Remote can become permanently unusable for a large, long-running task while that task is idle. The task view remains unhydrated, and attempting to send a simple message can fail because the mobile client's turn/start request times out after 30 seconds.
The same task sometimes becomes visible if it is actively producing assistant events. Sending a small “test” message can occasionally wake it, but this workaround is inconsistent.
Mobile reproduction
- On a Windows Desktop host, open a long-running Codex task with a very large local history.
- Let the task become completely idle.
- Open that task through Codex Remote in the ChatGPT Android app.
- Observe that the task continues loading indefinitely and never exposes a usable hydrated conversation.
- Attempt to send a simple message such as
test.
Observed mobile state:
- the message remains marked Sending;
- the task shows Thinking;
- the client eventually displays:
Couldn't send reply: Timed out waiting for app-server response to turn/start for seq_id 13 after 30000ms.
If the same task is already working and emitting assistant messages, Remote sometimes populates and becomes usable. This is not reliable: a test message sometimes wakes the task and sometimes produces the timeout above.
Correlated Desktop evidence
For the affected task:
- rollout JSONL size: 979.35 MiB;
- Desktop shell, app-server, and fresh renderer processes remained alive;
- a renderer-only restart did not fix mobile hydration;
- Desktop eventually rendered the task, but mobile remained unhydrated;
- 20 logged
thread/turns/listcalls for the task took:- minimum: 34,774 ms
- average: 40,345 ms
- maximum: 50,163 ms
- the mobile
turn/starttimeout is 30,000 ms, shorter than every observed history-list call.
This points to more than a blank mobile renderer. A long history hydration/list operation may be blocking or serializing the app-server path needed for turn/start. Live assistant events appear to trigger a different incremental reconciliation path that can sometimes make the task visible.
Expected behavior
- Mobile should load metadata plus a bounded recent tail without waiting for the full task history.
- An idle task should hydrate just as reliably as an actively streaming task.
turn/startshould not be blocked behind full-history hydration.- If history loading is slow, the composer should remain usable and the message should be durably queued or return a recoverable error.
- The UI should distinguish “loading history” from “starting turn” and should not show generic Thinking while the request has already timed out.
Environment
- Android Codex app: 1.2026.209, installed from Google Play
- Android connection during one captured reproduction: Wi-Fi
- Host: Codex Desktop on Windows 10 x64
- Observed: 2026-08-10/11
A screenshot captures the exact timeout toast and the message stuck in Sending. It is not embedded here because the connector cannot upload local attachments.
Related issues
- #37126 — Android app no longer opens old inactive Codex chats
- #25779 — unbounded session/turn state and full-history hydration meta-bug
- #21211 — eager large-history hydration and thread navigation/loading
This report narrows the failure to Android Remote, an idle long-running task, and a concrete turn/start timeout correlated with slower thread/turns/list calls. No account identifiers, task IDs, task titles, local paths, or private task content are included.
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.
Research direction
Start by tracing the Android Remote app-server path for thread/turns/list and turn/start, using the reported idle task with a large history as the reproduction. Compare the 30-second turn/start timeout with the 34–50 second history-list calls and determine where the requests are serialized. Done means bounded idle-task hydration no longer blocks turn/start, with a usable composer or recoverable error when history is slow.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, rust
- Domain
- backend-api-design, mobile, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100