Allow request_user_input in Default mode to wait indefinitely
What variant of Codex are you using?
CLI
What feature would you like to see?
I'd like it to be possible to use request_user_input in Default mode without the question automatically resolving after a timeout.
I have request_user_input explicitly enabled in Default mode using the default_mode_request_user_input feature. After updating to 0.147.0: request_user_input requests made outside Plan mode automatically resolve if I don't respond within a minute or two.
It would be useful for Codex to support Default-mode request_user_input workflows where an unanswered question can remain pending until the user responds.
Additional information
This appears related to the recent change in #36410, which made blocking behavior of request_user_input explicit and currently classifies Plan-mode requests as blocking while requests from other enabled modes are non-blocking.
There are related existing issues:
- #34455 requests configurable
request_user_inputtimeout duration and timeout behavior. - #28969 requests a way to disable automatic resolution of questions.
- #29702 similarly requests a setting to disable timed auto-resolution.
#34455 has a proposed solution that could resolve this too. I'm opening this issue separately because the behavior I'm seeing is specifically tied to Default mode: users can explicitly opt into request_user_input there via default_mode_request_user_input, but those requests are currently always non-blocking, with no way to opt into the blocking behavior used in Plan mode.
4 Comments
Independent reproduction on
codex-cli 0.147.0in Default mode.Reproduction
request_user_inputin Default mode.A controlled timing sample was 64 seconds from the tool invocation to auto-resolution. The behavior reproduced multiple times in one session.
Impact
This is not equivalent to an explicit user response. An agent can interpret the synthetic empty map as a completed interaction and advance to the next decision, so one-question-at-a-time planning and specification workflows become unreliable and frustrating.
The
request_user_inputtool schema exposed to the model in this mode accepts only the questions payload; it exposes noisBlocking, timeout, or opt-out field. Therefore neither the model nor project instructions can keep the card pending.Expected behavior
request_user_input, or expose a host/user setting that disables auto-resolution.{"answers":{}}.This report intentionally omits thread IDs, workspace paths, account details, and other user-specific data.
We are still iterating on request user input tool outside of plan mode and
default_mode_request_user_inputis currently marked asUnderDevelopment. Thanks for your patience and we will incoporate those feedback.I traced this on current
main(9ded177) and put together a small local prototype for the Default-mode case described here.Proposed config:
default_mode_request_user_inputcontinues to control whether the tool is available in Default mode. The newdefault_mode_is_blockingsetting would default tofalse, preserving current behavior unless explicitly enabled. Plan mode remains blocking.Implementation outline:
ExperimentalRequestUserInputconfig withdefault_mode_is_blocking: bool(falseby default);RequestUserInputArgs.is_blockingfor Plan mode, or for Default mode only when the new option istrue;config.schema.json;Local verification:
just test -p codex-config: 259 passedjust test -p codex-core request_user_input: 22 passedjust test -p codex-app-server request_user_input: 4 passedjust write-config-schema,just fmt, and scopedjust fixpassedThis keeps timeout policy out of core and uses the existing
isBlockingcontract introduced by #36410. It also preserves Default-mode question capability rather than disablingdefault_mode_request_user_input. This intentionally addresses indefinite blocking in Default mode; the broader timeout-duration and timeout-outcome policy remains covered by #34455.I also checked the current open PRs for
request_user_input,default_mode_request_user_input,default_mode_is_blocking, andautoResolutionMs. The only match was #12293, which concerns interrupted/partial answers rather than blocking configuration.Since external code contributions are invitation-only, would this config shape and placement align with the intended direction? I have the focused patch ready and would be happy to submit it if invited.
Desktop multitasking use case
I’m experiencing this in Codex App 26.814.41407 on macOS, with the bundled
codex-cli 0.148.0-alpha.15.I routinely have several Codex tasks and other desktop applications open at the same time. While one task works, I switch to something else and return when the task needs attention.
If
request_user_inputappears while that task is not focused, the Default-mode prompt automatically resolves before I return. The intended interaction is then lost, and the task can continue or stop without the decision I wanted to give.The structured
request_user_inputinterface is valuable because it presents clear options and trade-offs. Replacing it with an ordinary chat question loses that interface. Switching the entire task to Plan mode is not an equivalent workaround because Plan mode changes what Codex can do.I would like blocking behaviour to be a user-controlled setting that is independent of whether the tool is enabled in Default mode. The proposed configuration from the comment above would address the immediate problem:
The app could expose this setting as:
The important requirements are:
This is fundamentally a multitasking issue. A short response window assumes that the user continuously watches one task. That assumption conflicts with the Codex desktop workflow of running and monitoring several tasks at once.