{"record":{"id":"463994d7fda6bb41","repo":"zeroclaw-labs/zeroclaw","slug":"openai-codex-credentials-are-signed-in-but-no-mode","errorCode":null,"errorMessage":"OpenAI Codex credentials are signed in but no model provider slot uses them. Set `requires_openai_auth = true` on an OpenAI provider slot and point an agent's `model_provider` at it, or run `zeroclaw quickstart`.","messagePattern":"OpenAI Codex credentials are signed in but no model provider slot uses them\\. Set `requires_openai_auth = true` on an OpenAI provider slot and point an agent's `model_provider` at it, or run `zeroclaw quickstart`\\.","errorType":"console","errorClass":"DiagItem","httpStatus":null,"severity":"warning","filePath":"crates/zeroclaw-runtime/src/doctor/mod.rs","lineNumber":191,"sourceCode":"}\n\nfn codex_auth_wiring_items(codex_profile_present: bool, config: &Config) -> Vec<DiagItem> {\n    const CAT: &str = \"providers.auth\";\n\n    let auth_slots: Vec<String> = config\n        .providers\n        .models\n        .openai\n        .iter()\n        .filter(|(_, cfg)| cfg.base.requires_openai_auth)\n        .map(|(alias, _)| format!(\"openai.{alias}\"))\n        .collect();\n\n    let mut items = Vec::new();\n    match (codex_profile_present, auth_slots.is_empty()) {\n        // Credential imported, but nothing references it — silent until the\n        // operator wires a slot and points an agent at it.\n        (true, true) => items.push(DiagItem::warn(\n            CAT,\n            crate::i18n::get_required_cli_string(\"cli-doctor-codex-auth-profile-no-slot\"),\n        )),\n        // Slot opts into Codex auth, but no credential is signed in — fails at\n        // the first model call.\n        (false, false) => items.push(DiagItem::warn(\n            CAT,\n            crate::i18n::get_required_cli_string_with_args(\n                \"cli-doctor-codex-auth-slot-no-profile\",\n                &[(\"slots\", &auth_slots.join(\", \"))],\n            ),\n        )),\n        // Both present — wiring is consistent.\n        (true, false) => items.push(DiagItem::ok(\n            CAT,\n            crate::i18n::get_required_cli_string(\"cli-doctor-codex-auth-ok\"),\n        )),\n        // Codex unused on both sides — stay silent (no noise for users who","sourceCodeStart":173,"sourceCodeEnd":209,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-runtime/src/doctor/mod.rs#L173-L209","documentation":"Doctor's Codex wiring check pairs two facts: an OpenAI Codex credential profile is signed in, and at least one provider slot sets `requires_openai_auth = true`. This warning is the first mismatch case — credentials exist but no slot references them, so they will never be used. It is advisory: auth will silently not apply to any provider.","triggerScenarios":"You signed in OpenAI Codex credentials (e.g. `zeroclaw auth login --provider openai-codex`) but no OpenAI provider slot has `requires_openai_auth = true`, or no agent's `model_provider` points at such a slot; check_codex_auth_wiring reports the warning.","commonSituations":"Quickstart credentials imported first, provider config wired later (or never); provider slots created from templates that omit the flag.","solutions":["Set `requires_openai_auth = true` on an OpenAI provider slot and point an agent's `model_provider` at it","Or run `zeroclaw quickstart` to generate the wiring automatically","Or ignore/sign out if you no longer intend to use Codex auth"],"exampleFix":"# before: credentials signed in, slot does not opt in\n[providers.openai]\nfamily = \"openai\"\n\n# after\n[providers.openai]\nfamily = \"openai\"\nrequires_openai_auth = true\n\n[agents.main]\nmodel_provider = \"openai\"","handlingStrategy":"validation","validationCode":"if zeroclaw doctor | grep -q 'Codex credentials are signed in'; then\n  echo 'wire an OpenAI slot with requires_openai_auth = true before deploy'\n  exit 1\nfi","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Import Codex credentials and the provider slot wiring in the same change","Run `zeroclaw quickstart` to generate matching auth and provider config together"],"tags":["zeroclaw","doctor","openai-codex","auth","wiring"],"backgroundTag":"unused-credentials","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}