[Windows Desktop 26.820.60940] codex_app thread tools prompt on every call and ignore approval_mode override
What version of the Codex App are you using?
- Codex Desktop:
26.820.60940 - Bundled CLI:
codex-cli 0.150.0-alpha.8 - Bundled plugin:
codex-app-tools 0.1.3
What platform is your computer?
Windows x64, NT 10.0.26200.9168 (25H2).
What issue are you seeing?
After updating to Codex Desktop 26.820.60940, first-party codex_app thread-management tools unexpectedly require a separate modal approval on routine calls.
Observed prompts include:
Allow the codex_app MCP server to run tool "create_thread"?
Allow the codex_app MCP server to run tool "fork_thread"?
Allow the codex_app MCP server to run tool "send_message_to_thread"?
The same behavior affects handoff_thread.
This is a regression from previous Desktop behavior and blocks long-running multi-task coordination until the user manually clicks Allow once for each operation.
The bundled codex-app-tools 0.1.3 manifest as shipped contains a server default of approve, but overrides these thread tools to prompt:
{
"default_tools_approval_mode": "approve",
"tools": {
"automation_update": { "approval_mode": "prompt" },
"create_thread": { "approval_mode": "prompt" },
"send_message_to_thread": { "approval_mode": "prompt" },
"fork_thread": { "approval_mode": "prompt" },
"handoff_thread": { "approval_mode": "prompt" }
}
}
More importantly, the documented user override for plugin-provided MCP tools is accepted by the TOML parser but has no effect:
[plugins."codex-app-tools@openai-bundled".mcp_servers.codex_app.tools.create_thread]
approval_mode = "approve"
[plugins."codex-app-tools@openai-bundled".mcp_servers.codex_app.tools.send_message_to_thread]
approval_mode = "approve"
[plugins."codex-app-tools@openai-bundled".mcp_servers.codex_app.tools.fork_thread]
approval_mode = "approve"
[plugins."codex-app-tools@openai-bundled".mcp_servers.codex_app.tools.handoff_thread]
approval_mode = "approve"
A PermissionRequest hook matching the canonical tool name (for example mcp__codex_app__send_message_to_thread) and returning an allow decision also does not intercept or suppress this Desktop MCP approval modal.
What steps can reproduce the bug?
- Run Codex Desktop
26.820.60940on Windows with the bundledcodex-app-tools 0.1.3plugin enabled. - Open or resume a task that coordinates another Codex task.
- Let the agent call
send_message_to_thread,create_thread,fork_thread, orhandoff_thread. - Observe the modal approval request for the first-party
codex_appMCP server. - Add the per-tool
approval_mode = "approve"overrides shown above to~/.codex/config.toml. - Fully exit Codex, including the tray/background process, and start it again.
- Repeat the tool call.
What is the expected behavior?
The documented per-tool plugin MCP approval override should be honored after a full application restart.
For first-party routine thread coordination, Codex should either:
- restore the previous no-prompt behavior; or
- provide and honor a persistent user setting that allows these specific tools without repeated confirmation.
It is reasonable for unrelated sensitive operations such as automation_update to remain independently configurable as prompt.
What actually happens?
The modal still appears and offers only Deny or Allow once. Every affected call pauses the active task and requires manual intervention.
Additional information
- The application was fully restarted after the documented config override. A new
codex.exeprocess started at 12:30:39; the approval modal reproduced at 12:31. - As a stronger isolation test, both active copies of the bundled manifest were directly changed to
approval_mode: "approve"for all four thread tools at 12:35:18. - Codex was restarted again; the current
codex.exestarted later at 12:48:08. - At 12:53, the existing task still prompted for
create_thread. - A completely fresh task (
01a03c6a-6eff-7453-86bc-6684fb2e722c) then prompted on its firstsend_message_to_threadcall. - Therefore this is not limited to cached policy in tasks created before the configuration change.
- The task/model itself cannot reliably report whether a Desktop-side approval modal appeared. After the user clicks Allow once, the model sees only a successful tool result. The Desktop UI is the approval oracle.
- No repository-specific code, external MCP server, or custom transport is involved. These are first-party Desktop task-management tools.
- A direct local edit of the bundled manifest is not a durable workaround because app/plugin updates can replace the cached manifest—and in this reproduction it was not effective even after restart.
Related but not duplicate: #15437, #20289, #25810, and #40715.
3 Comments
Additional reproduction after applying the direct bundled-manifest fallback:
codex-app-tools/desktop-mcp.jsonwere last written at 12:35:18 and containedapproval_mode: "approve"for:create_threadsend_message_to_threadfork_threadhandoff_threadcodex.exeprocess started later, at 12:48:08.So this reproduction is not explained by the process simply predating the manifest edit. The current build is either obtaining the approval policy from another source, ignoring these manifest values, or preserving the policy in existing task state.
This was still reproduced in an existing task, so per-task policy caching remains a plausible narrower cause. A fresh-task A/B test would be useful to distinguish that from a globally ignored manifest/config override.
Correction: fresh task also prompts
The conclusion in the previous version of this comment was incorrect. UI screenshots provide the authoritative result:
``
text
``Allow the codex_app MCP server to run tool "create_thread"?
while creating the clean test task.
01a03c6a-6eff-7453-86bc-6684fb2e722cthen displayed:``
text
``Allow the codex_app MCP server to run tool "send_message_to_thread"?
for its first and only diagnostic tool call.
Therefore the bug does reproduce in a completely fresh task. It is not limited to an existing-task policy cache.
The new task later reported that no manual approval was requested, but that statement is not a valid oracle: the task/model cannot observe the Desktop-side modal. After the user approves once, the tool result simply appears to the task as a normal successful completion. The Desktop UI screenshot is the reliable evidence for whether approval was requested.
Combined evidence:
approval_mode: "approve"for the four thread-management tools at 12:35:18.codex.exeprocess started later at 12:48:08.create_threadprompted in the existing task at 12:53.send_message_to_threadprompted on its first call in the newly created task at 12:53.Conclusion: Desktop
26.820.60940is ignoring or overriding both the documented plugin configuration and the effective bundled-manifestapprovevalues for these first-partycodex_appapproval modals.Additional Windows reproduction, with user authorization to report. Desktop 26.820.60940, bundled CLI 0.150.0-alpha.8, bundled codex-app-tools 0.1.3.
Observed locally:
codex mcp list --jsonusing the actual CODEX_HOME lists node_repl but not codex_app. This suggests a desktop-injected registration/policy path distinct from the plugin override, but we have not verified the effective policy source or precedence.No bundled manifest edits, private IPC calls, approval auto-clicking, or global sandbox/approval relaxation were used in this reproduction. No private task text, personal paths, credentials, or raw logs are attached.
Could maintainers confirm the supported persistent per-tool approval setting for the desktop-injected codex_app server, whether the documented plugin override should apply, and how to inspect/reload its effective policy? If this is a regression, a fix or supported workaround limited to the affected internal tools would unblock unattended task coordination. Successful tool completion after Allow once must not be treated as proof that no prompt appeared.