Repository navigation
Description
What variant of Codex are you using?
Codex Desktop macOS.
- GUI app version:
26.623.81905, build4598 - App-bundled CLI:
codex-cli 0.142.5 - Global CLI:
codex-cli 0.142.1 - Plugin:
openai-developers@openai-curated-remoteversion1.2.3 - MCP server:
openai-api-key-local-confirmation - Tool:
confirm_openai_api_key_local_destination
What issue are you seeing?
The OpenAI Developers plugin's local API key destination confirmation cannot be accepted in Codex Desktop. The MCP server requests a form-mode elicitation/create with a required targetPath, but the live Desktop client immediately returns action: "decline" instead of rendering an accept/edit confirmation form.
That blocks the secure API-key setup flow because the plugin correctly refuses to create or write a key unless this local destination confirmation returns approved.
Steps to reproduce
- In Codex Desktop, use the OpenAI Developers plugin API-key setup flow.
- Select an OpenAI Platform key target successfully.
- Call the local destination confirmation tool with arguments like:
{
"workspacePath": "/path/to/workspace",
"targetPath": ".env.local",
"envName": "OPENAI_API_KEY"
}- The MCP server sends an elicitation request equivalent to:
{
"method": "elicitation/create",
"params": {
"mode": "form",
"message": "Choose where OpenAI Developers should save the new API key as OPENAI_API_KEY.",
"requestedSchema": {
"type": "object",
"properties": {
"targetPath": {
"type": "string",
"title": "Save location",
"default": "/path/to/workspace/.env.local",
"minLength": 1
}
},
"required": ["targetPath"]
}
}
}- Codex Desktop immediately returns a declined result. The observed tool output is:
{
"status": "not_approved",
"action": "decline"
}Observed timing was ~16ms, and no usable accept/edit prompt appeared in the thread UI. The behavior repeated across multiple attempts, including after explicitly invoking the OpenAI Developers plugin in the thread.
Expected behavior
Codex Desktop should render the form-mode elicitation and allow the user to accept or edit the target path. For the default path above, the MCP server expects a response like:
{
"action": "accept",
"content": {
"targetPath": "/path/to/workspace/.env.local"
}
}If Desktop cannot render the elicitation, it should surface a clear client/UI error instead of returning decline, because decline is treated as an intentional user refusal and safely blocks key creation.
Diagnostics already checked
- The OpenAI Platform connector is authenticated and can list the exact org/project target.
- The local destination is repo-safe:
.env.localexists, is git-ignored, and is not tracked. - The plugin's local tests pass:
node --test .../openai-developers/1.2.3/tests/openai-platform-api-key.test.mjs
# pass 28, fail 0, skipped 2
Those tests include:
- local destination confirmation accepts an override
- local destination confirmation stops when developer cancels
- decrypt writes/updates the API key without printing it
- decrypt rejects symlink/hardlink/out-of-workspace targets
So the plugin server/helper paths appear functional; the live failure is in the Desktop client's handling/rendering of the form elicitation.
Related issue
Possibly related to, but not identical with, #23383. That issue covers auto-approve returning accept with {} for required schemas. This report is the opposite user-visible failure mode: the required form elicitation is immediately returned as decline and the user never gets a working approval path.
Activity
maxanatsko commentedon Aug 12, 2026
Additional exact reproduction from an independent third-party MCP server on Windows:
26.803.10989.0(Windows ARM64), embedded MCP clientcodex-mcp-client 0.147.0-alpha.6.6elicitation/createcontaining one required boolean confirmation fieldDeclineafter 37 msThis confirms the failure is not specific to the OpenAI Developers plugin or a string-input schema: Codex Desktop also immediately declines a required boolean form elicitation from another MCP server.
alex123321-maker commentedon Oct 30, 2026
Confirmed a related reproduction on Windows on 2026-10-30, with a successful permissions-policy workaround. Posted by Codex at the user's explicit request.
Environment:
26.1027.3384.0(package version, not independently checked against the About dialog).openai-developers@openai-curated-remoteversion1.3.13.openai-api-key-local-confirmation.Reproduction and observed results:
setupskill in a desktop chat withapproval_policy=neverandsandbox_mode=danger-full-access.choose_openai_api_key_setup({}).{"status":"not_selected"}withNo API key setup choice was confirmed.The user explicitly confirmed that no form appeared; they did not cancel it.mcp_elicitations=true(sandbox changed toworkspace-write).{"status":"selected","choice":"create"}after the user's selection. The subsequentconfirm_openai_api_key_local_destinationform also displayed and returnedapproved; secure key creation and local saving completed.The local MCP startup logs show the server reaching
ready, so this was not a missing executable or non-default installation-path failure.Read-only static inspection suggests a capability/policy mismatch: the installed desktop initialization code advertises OpenAI form elicitation, but no literal
openai/standard-form-inputdeclaration was found in the inspected application JavaScript. Current upstreamcodex-mcp/src/elicitation.rsdeclines underAskForApproval::Neverunless the Full Access form-input exception applies, andcore/src/thread_manager.rsenables that exception for the standard-form-input extension. This is supporting evidence, not a captured wire-level trace or proof that current main exactly matches the installed binary. Also, the UI profile change affected both approval policy and sandbox mode, so it was not a strictly single-variable experiment.Expected: show required user-input forms through the supported desktop flow, or clearly explain that the permission policy blocked the form. Returning a result indistinguishable from user cancellation makes onboarding repeatedly ask the user to retry a dialog they never saw.
No API keys, account/org/project identifiers, local user paths, or raw session logs are included.
curranmichael commentedon Nov 3, 2026
Additional reproduction on 2026-11-03 in the ChatGPT desktop app / Work with a local project. Posted by the assistant at the user's explicit request.
Environment
com.openai.codex, version26.1027.61615, build24141(read from the installed Info.plist).codex-cli 0.166.0-alpha.5.1.27.2, build26B123.1.3.13.workspace-write, granular approval policy, withmcp_elicitationsenabled.Reproduction
open_codex_api_key_setup, but that tool is absent from the tools exposed to this session. The encrypted-key creation tool and local-destination tool are available.confirm_openai_api_key_local_destinationwith a valid absolute workspace path,targetPath: "gateway/.env.local", andenvName: "OPENAI_API_KEY". The target is inside the workspace and covered by its env-file ignore pattern.{ "status": "not_approved", "action": "decline" }The accompanying text is: “The local API key destination was not approved. Do not create or write a key.”
No affirmative destination selection was made in the conversation. The assistant initially characterized this as a declined confirmation, which was misleading: the response does not distinguish a user decision from an automatically generated decline. The user continued to request that the official setup flow work.
Diagnostics
mcp/server.mjsshows that the destination handler requests a form with a requiredtargetPath. It reportsnot_approvedwhen the elicitation response's action is notaccept, forwarding that action. It does not independently classify a valid destination as declined.local destination confirmation|shared calls bind: 5 passed, 0 failed. These cover accepting an edited destination, rejecting an out-of-workspace destination, cancellation, binding shared approval to its original call, and instruction coverage. They validate the server logic, not the desktop UI.approval_policy=neverexplanation is insufficient for this reproduction.Requested behavior
The supported OpenAI Developers flow should expose its project picker and display the save-location form, waiting for the user's answer. If the client cannot deliver the form, it should return an explicit unavailable/policy/transport error rather than an indistinguishable user decline. Please also test the Work/local-project tool bridge, in addition to native Codex chats.
No API key was created or written. This comment omits account identifiers, personal filesystem paths, secrets, and raw session logs.