request_user_input_async question card is auto-dismissed when the turn's final message renders, leaving the question unanswerable
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
Version / environment
- ChatGPT desktop app 26.901.51231 (Codex bundled runtime; model GPT-6-Astra), macOS
- Subscription: ChatGPT Pro
- Platform:
Darwin 25.5.0 arm64 arm(macOS, Apple Silicon)
What issue are you seeing?
When Codex (GPT-6-Astra) asks a clarification question via the request_user_input_async tool in Default mode, the question card renders correctly while the turn is running. But the moment the assistant's final answer message begins rendering, the card is automatically dismissed — it is not pinned to the thread and is not rendered as a persistent message bubble.
The final message then references the now-invisible question (e.g. "Please answer the platform-scope questions above and I'll continue"), leaving the user with no way to review the question content or answer it.
Reproduced 3/3 times on 2026-09-08. The card is only visible for ~7 seconds before the turn completes (turns end in 16–18s because no work can proceed without the answer).
The rollout JSONL shows the async AgentMessage is delivered with full fallback text (content[]) and questions[] metadata (delivery: "async"), but the desktop client does not persist that message after task_complete.
Steps to reproduce
- In the Codex desktop app (Default mode, not Plan mode), start a task with an up-front clarification need, e.g. send: "Before you start, ask me which platforms this feature should support."
- Codex calls
request_user_input_async; the question card appears in the conversation. - The tool immediately returns
{"accepted":true}(async, non-blocking). With no answer-independent work to do, the model emits its final message ~7 seconds later. - When the final message starts rendering, the question card is dismissed and removed from view. The turn completes (
task_complete, ~18s total). - The final message references "the questions above", but no question remains visible — the user cannot review or answer.
Rollout JSONL evidence (session 2026-09-08, UTC):
11:29:58.7function_callrequest_user_input_async(2 questions)11:29:59.2function_call_output{"accepted":true}- item_completed
AgentMessage:delivery="async", full fallback text incontent[],questions[]metadata present 11:30:06final message +task_complete(duration 18.4s)- No user reply exists after any of the 3 async questions in the session — the cards vanished before they could be answered.
thread_id: 01a080c7-e967-7921-8dcb-9054b86880ac
Expected behavior
An unanswered async question should remain available after the turn ends: either as a persistent, answerable card pinned to the thread, or at minimum rendered as a normal message bubble using the fallback text that is already present in the AgentMessage (content[] / questions[] exist in the rollout data).
The card's lifecycle should be tied to "question is unanswered" rather than "turn is still running". Final messages must not reference question content that is no longer visible.
Additional information
request_user_input_asyncwas introduced in Codex 0.153.0 (PR #42178); hotfixes #42809 and #42878 adjusted Astra's guidance around async questions. This report is specifically about the desktop client's rendering lifecycle of the asyncAgentMessage— the question data reaches the client correctly, but the UI unloads the card when the final message renders.- Workaround: forcing the synchronous
request_user_inputtool (via config flagdefault_mode_request_user_input=trueplus AGENTS.md instructions) blocks the turn until answered, which avoids the card being unloaded. - In-app feedback was also submitted from the app (no feedback ID was shown after submission).
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 desktop client's handling of request_user_input_async and the async AgentMessage from delivery through task_complete. Reproduce the Default-mode flow and inspect why the question card is removed when the final message renders. Done means unanswered questions remain visible and answerable, or are rendered using the available fallback content without disappearing.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100