openai / openai/codex

request_user_input_async question card is auto-dismissed when the turn's final message renders, leaving the question unanswerable

Open
#43,803 5 comments 4 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app bug tool-calls
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
  1. 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."
  2. Codex calls request_user_input_async; the question card appears in the conversation.
  3. 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.
  4. When the final message starts rendering, the question card is dismissed and removed from view. The turn completes (task_complete, ~18s total).
  5. 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.7 function_call request_user_input_async (2 questions)
  • 11:29:59.2 function_call_output {"accepted":true}
  • item_completed AgentMessage: delivery="async", full fallback text in content[], questions[] metadata present
  • 11:30:06 final 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_async was 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 async AgentMessage — the question data reaches the client correctly, but the UI unloads the card when the final message renders.
  • Workaround: forcing the synchronous request_user_input tool (via config flag default_mode_request_user_input=true plus 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

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.

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.