Codex Desktop: declared owner-auth and secret-manager capabilities are absent at runtime
Product / environment
- Codex Desktop on Windows
- External browser automation routed to a separately managed Linux browser host
- A custom runtime plugin declares owner-authentication assistance and host-local secret-manager policies
Issue
A task explicitly authorized use of host-local credential stores (Google Secret Manager / Google Password Manager) for a logged-in external website. The active Codex session exposed neither a scoped credential-consumption tool nor the declared owner_assistance_* tools. The live tool inventory also had no session-bound SMS authentication tool.
Because capability availability is discovered only after work begins, Codex repeatedly falls back to short owner-login windows. The windows expire, and the external task cannot progress even though the user selected approved host-local credential stores.
Reproduction
- Start Codex Desktop with a plugin whose skill/policy declares owner-authentication assistance.
- Ask Codex to complete a logged-in external web workflow using a host-local secret/password manager.
- Inspect the active tool inventory.
- Observe that
owner_assistance_status/open/pause/resolveand any scoped password-manager credential consumer are absent. - Codex can launch a bounded login window but cannot consume the user-selected credential store or deliver the declared owner-assistance incident, causing repeated expiration loops.
Actual behavior
- Declared authentication-assistance tools are absent from the live session.
- No safe API exists for selecting a credential by opaque reference and consuming it directly into the approved browser session.
- The limitation is surfaced late, after browser work and repeated owner handoffs.
- The user cannot distinguish an intentional security boundary from missing runtime capabilities.
Expected behavior
At least one of the following should be guaranteed:
- A scoped, auditable credential-consumption interface that accepts only an opaque secret reference, keeps the value host-local/in-memory, and binds use to one approved browser field/session without exposing the secret to the model, logs, chat, or tool arguments; or
- A deterministic preflight that reports before browser launch that credential-store consumption is unavailable; and
- Runtime enforcement that a skill cannot advertise
owner_assistance_*tools unless those exact tools are live and callable in the current session.
The product should continue to prohibit raw passwords in chat and should not weaken CAPTCHA or account-security boundaries.
Privacy
No credentials, account identifiers, external case details, screenshots, cookies, or session data are included in this report.
10 Comments
Reporter clarification / blocking user impact:
The user specifically asks that the credential refusal itself be treated as part of the report.
This is not a request to expose passwords to the model or weaken account security. The blocking product problem is that Codex refuses a password supplied in chat (which may be an intentional security boundary) while the same session provides no supported alternative way for the owner to supply or authorize that credential:
owner_assistance_*tools despite the skill declaring them;As a result, the user is told to provide credentials securely but is given no usable channel to do so, and the external workflow deadlocks after repeated login-window expirations.
Please document and implement the exact supported mechanism by which an owner can provide a website credential to Codex without placing it in chat. A suitable design could be an owner-only UI or an opaque secret reference consumed host-locally and session-bound, with no secret value exposed to the model, logs, or tool arguments. The capability must be preflighted before the browser window opens.
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Additional investigation and scope clarification:
I reviewed the automatically suggested duplicate, #36932. There is overlap around tools being declared/installed but absent from the live Codex surface. However, #37695 is not only a tool-mounting issue. Even if all declared MCP tools were mounted correctly, Codex still has no documented, supported owner-only credential handoff for a third-party website.
I also evaluated whether changing the model/provider would avoid this deadlock:
So this is a provider-agnostic integration gap, not something solved by switching from Codex to another model. A safe architecture still needs:
The Help Center assistant accepted the account contact and stated that there is currently no built-in third-party website secret-handoff mechanism, but no human ticket/reference was issued. A follow-up email has now been sent to OpenAI Support requesting human review and a ticket reference.
No credentials, account identifiers, external case details, screenshots, cookies, or session data are included in this update.
Support status update: OpenAI Support has now issued a case reference and confirmed that the report was escalated to a support specialist, with a response expected in the coming days. The private support reference is intentionally not posted here. The public technical tracking remains this issue (#37695).
Correction to the reporter record and a narrower product request:
The observed prohibition on using a password pasted into the conversation was enforced by our local Multi Server Sync
owner-operations-policy. It was not established as an OpenAI Codex product policy. Please disregard any reading of my earlier clarification that Codex itself categorically rejects credentials supplied in chat.The Codex product gap is narrower and independently reproducible: Codex 0.147.0 documents keyring storage for Codex/MCP OAuth credentials, environment-variable forwarding, and command-backed authentication for model providers, but I could not find a supported generic, one-time secret-ingress surface for an arbitrary authenticated local tool or third-party website. There is no documented way for an owner to choose an OS password-manager item or enter a value into a protected prompt and give the agent only an opaque, expiring handle bound to one origin/executable/tool call.
Without that primitive, a security-conscious deployment has to build and maintain an external broker, such as a custom MCP/GSM integration. That adds cloud-secret-manager cost, IAM/network setup, plugin/runtime maintenance, and availability dependencies. If the broker is unavailable or not mounted in the active session, the only remaining safe path is repeated human login handoff, which interrupts long-running automation and causes short login windows to expire.
Minimal secret-free reproduction:
TEST_LOGIN_PASSWORD; do not place any value in the prompt or repository.Requested product primitive:
This complements the broader local secret-store request in #22029 and browser password-manager request in #32081. It does not request autonomous MFA, CAPTCHA bypass, plaintext retrieval by the model, or weaker account-security controls.
Current recurrence: sealed secret ingress and verified owner handoff remain separate hard blockers
This is an additional generic reproduction, not a claim that our custom Multi Server Sync owner-operations policy is a built-in Codex feature.
Environment
Generic reproduction
Actual behavior
The blank-surface symptom may have several causes in a custom multi-host deployment, so I am not attributing a specific root cause to Codex core from this observation alone. The product gap is the absence of a first-class, verifiable fallback when the custom broker is unavailable.
Expected behavior
owner_action_requiredstate tied to the exact live session, with an authenticatedTake controlaction.This does not request autonomous MFA, CAPTCHA solving, password disclosure to the model, or weaker third-party security controls.
Related scope:
No customer, domain, account, credential, secret alias, OTP, screenshot, or private session detail is included.
Fresh reproduction: authorized secret store, but no callable credential binding
A fresh reproduction on 2026-08-21 confirms that this remains unresolved in an active Codex Desktop workflow.
Redacted scenario
secretValuesRead: false), the password field remained blank, and the workflow could not proceed.User impact
This presents as “Codex is refusing an explicitly authorized instruction,” although the observable cause is missing runtime capability and credential-to-session binding. Repeated owner handoffs are costly, often fail on remote hosts, and can delay time-sensitive public-service or legal workflows.
The gap also creates a perverse security incentive: users may add an unrestricted external agent or CLI solely to retrieve or copy passwords. A first-party opaque injection path would be safer because the model would never receive the plaintext.
Requested product behavior
useCredential({ secretRef, targetOrigin, browserSessionId, fieldSelector, purpose, ttl }).The model should receive only a success/failure receipt, never the secret value.
No credentials, account identifiers, portal details, case identifiers, screenshots, cookies, or session data are included here.
Cross-product observation: project-scoped external-agent fallback
This update records a user observation and product expectation, not a verified claim that another agent securely consumes Google Secret Manager or password-manager values.
Observed comparison boundary
User impact
From the user's perspective, the product gap is practical: a project-scoped agent is expected to finish an authorized login task while keeping plaintext outside the caller, but Codex currently has neither a built-in sealed path nor a deterministic contract for delegating that one operation to a reviewed external agent.
The consequences include:
Requested safe fallback
In addition to the first-party opaque-handle design already requested above, please consider a supported project-scoped external-agent adapter:
This is not a request to bypass MFA, CAPTCHA, biometrics, consent, third-party account controls, or final-action confirmation. It is a request for a documented and auditable way to use a reviewed project-scoped agent or opaque broker when Codex cannot natively perform the authorized credential injection.
No credential, account, customer, domain, workspace path, screenshot, session identifier, or private project detail is included.
Implementation follow-up: the project-scoped fail-closed AGY opaque-login contract discussed above has now been merged in https://github.com/jyongchul/multi-server-sync/pull/876 (merge f32bed56c799f924be09ea1d30260c6d9ab460c0).
What this changes:
Important current boundary: this is not a claim that autonomous login is working today. The installed AGY 1.1.17 audit found no imported plugins, no MCP servers, and no verified GSM/GPM-to-browser-field sealed consumer. Therefore the live route remains disabled and the preflight correctly returns NOT_READY instead of silently falling back to a human.
This confirms the product gap: a user may have an external project agent capable of credential handling, but Codex lacks a first-party, reviewed, provider-neutral way to delegate one exact password-field fill without exposing the secret to model output or logs. The practical result is repeated human-login interruptions and workflow paralysis even when the user has explicitly authorized the operation. A first-party opaque secret-to-field broker or reviewed project-scoped external-agent adapter remains needed; MFA, CAPTCHA, biometric, signature, consent, and final-submit boundaries should remain separate.
2026-08-25 recurrence: authorized login still could not be executed after nearly four hours
This is a fresh operational recurrence of the product gap described above. It is not a claim that our custom local policy is an OpenAI product policy.
An owner explicitly authorized Codex to update two time-sensitive posts on a third-party publishing service and to use an approved credential source or delegate the exact login step to a project-scoped external agent. A previous external-agent run had successfully created an authenticated browser state, but that state had expired. Later forensics showed that the successful historical route was an unsafe one-off script containing a credential literal, not a reusable opaque secret-manager consumer, so replaying it would have risked credential exposure.
In the current Codex session:
This is the practical failure mode the issue is trying to describe: the user has explicitly authorized the operation and has an approved credential source, yet Codex cannot deterministically establish a protected path from that source to one exact login field. The user experiences this as Codex refusing or avoiding the login, while the runtime keeps producing policy/preflight work rather than completing the task.
Please provide a supported product primitive with both of these options:
The UI and tool result should clearly distinguish among model refusal, missing capability, unavailable credential provider, and owner action required. If a declared login skill depends on unavailable runtime machinery, that must be detected before the browser workflow starts—not after hours of custom contract work.
This request does not ask for CAPTCHA, MFA, biometric or third-party security bypass. It asks for a safe, auditable way to carry out an explicitly authorized ordinary password login without exposing the password to the model.
No customer, service, account, credential alias, secret value, browser state, workspace path, screenshot or private session identifier is included here.