Deep Security Scan workers do not inherit Azure OpenAI API key on Windows

Open 💬 0 comments Opened Jul 28, 2026 by bcorralesa

What version of Codex CLI is running?

codex-cli 0.145.0

What subscription do you have?

PLUS and Azure Foundry

Which model were you using?

gpt-5.6-terra,gpt-5.4 via Azure OpenAI

What platform is your computer?

Microsoft Windows NT 10.0.26220.0 x64

What terminal emulator and version are you using (if applicable)?

Windows Terminal with PowerShell Core 7.6.3. No terminal multiplexer was in use.

Codex doctor report

{
  "schemaVersion": 1,
  "generatedAt": "1785248908s since unix epoch",
  "overallStatus": "warning",
  "codexVersion": "0.145.0",
  "checks": {
    "app_server.status": {
      "id": "app_server.status",
      "category": "app-server",
      "status": "ok",
      "summary": "background server is not running",
      "details": {
        "control socket": "C:\\Users\\bcorr\\.codex\\app-server-control\\app-server-control.sock",
        "daemon state dir": "C:\\Users\\bcorr\\.codex\\app-server-daemon",
        "mode": "ephemeral",
        "pid file": "C:\\Users\\bcorr\\.codex\\app-server-daemon\\app-server.pid (missing)",
        "settings": "C:\\Users\\bcorr\\.codex\\app-server-daemon\\settings.json (missing)",
        "status": "not running",
        "update-loop pid file": "C:\\Users\\bcorr\\.codex\\app-server-daemon\\app-server-updater.pid (missing)"
      },
      "remediation": null,
      "durationMs": 0
    },
    "auth.credentials": {
      "id": "auth.credentials",
      "category": "auth",
      "status": "ok",
      "summary": "auth is provided by the active model provider",
      "details": {
        "auth file": "C:\\Users\\bcorr\\.codex\\auth.json",
        "auth storage mode": "File",
        "model provider requires OpenAI auth": "false",
        "provider auth env var": "AZURE_OPENAI_API_KEY (present)"
      },
      "remediation": null,
      "durationMs": 0
    },
    "config.load": {
      "id": "config.load",
      "category": "config",
      "status": "ok",
      "summary": "config loaded",
      "details": {
        "CODEX_HOME": "C:\\Users\\bcorr\\.codex",
        "config.toml": "C:\\Users\\bcorr\\.codex\\config.toml",
        "config.toml parse": "ok",
        "cwd": "C:\\Users\\bcorr",
        "enabled feature flags": "<redacted>",
        "feature flag overrides": "multi_agent_v2=true",
        "feature flags enabled": "37",
        "log dir": "C:\\Users\\bcorr\\.codex\\log",
        "mcp servers": "8",
        "model": "gpt-5.6-terra",
        "model provider": "azure",
        "sqlite home": "C:\\Users\\bcorr\\.codex"
      },
      "remediation": null,
      "durationMs": 0
    },
    "git.environment": {
      "id": "git.environment",
      "category": "git",
      "status": "ok",
      "summary": "git version 2.55.0.windows.3",
      "details": {
        "PATH git #1": "C:\\Program Files\\Git\\cmd\\git.exe",
        "PATH git entries": "1",
        "git build options": "git version 2.55.0.windows.3; cpu: x86_64; built from commit: 52ca1113d651127f89477a8763f86ab20f645e1d; sizeof-long: 4; sizeof-size_t: 8; shell-path: D:/git-sdk-64/usr/bin/sh; rust: disabled; feature: fsmonitor--daemon; gettext: enabled; libcurl: 8.21.0; OpenSSL: OpenSSL 3.5.7 9 Jun 2026; zlib: 1.3.2; SHA-1: SHA1_DC; SHA-256: SHA256_BLK; default-ref-format: files; default-hash: sha1",
        "git exec path": "C:/Program Files/Git/mingw64/libexec/git-core",
        "git version": "git version 2.55.0.windows.3",
        "repo detected": "false",
        "selected git": "C:\\Program Files\\Git\\cmd\\git.exe"
      },
      "remediation": null,
      "durationMs": 97
    },
    "installation": {
      "id": "installation",
      "category": "install",
      "status": "ok",
      "summary": "installation looks consistent",
      "details": {
        "PATH codex #1": "C:\\Users\\bcorr\\AppData\\Roaming\\npm\\codex",
        "PATH codex #2": "C:\\Users\\bcorr\\AppData\\Roaming\\npm\\codex.cmd",
        "PATH codex entries": "2",
        "current executable": "C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\bin\\codex.exe",
        "install context": "npm (package C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc, bin C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\bin, resources C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\codex-resources, path C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\codex-path)",
        "managed by bun": "false",
        "managed by npm": "true",
        "managed by pnpm": "false",
        "managed package root": "C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex",
        "npm update target": "C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex"
      },
      "remediation": null,
      "durationMs": 500
    },
    "mcp.config": {
      "id": "mcp.config",
      "category": "mcp",
      "status": "ok",
      "summary": "MCP configuration is locally consistent",
      "details": {
        "configured servers": "8",
        "disabled servers": "2",
        "stdio servers": "7",
        "streamable_http servers": "1"
      },
      "remediation": null,
      "durationMs": 25
    },
    "network.env": {
      "id": "network.env",
      "category": "network",
      "status": "ok",
      "summary": "network-related environment looks readable",
      "details": {
        "proxy env vars": "none"
      },
      "remediation": null,
      "durationMs": 0
    },
    "network.provider_reachability": {
      "id": "network.provider_reachability",
      "category": "reachability",
      "status": "ok",
      "summary": "active provider endpoints are reachable over HTTP",
      "details": {
        "azure API base URL": "https://berna-mlf7vaef-eastus2.services.ai.azure.com/openai/<redacted> reachable (HTTP 404)",
        "azure API route probe": "https://berna-mlf7vaef-eastus2.services.ai.azure.com/openai/<redacted> route exists (HTTP 401)",
        "reachability mode": "provider auth"
      },
      "remediation": null,
      "durationMs": 841
    },
    "network.websocket_reachability": {
      "id": "network.websocket_reachability",
      "category": "websocket",
      "status": "ok",
      "summary": "Responses WebSocket is not enabled for the active provider",
      "details": {
        "model provider": "azure",
        "provider name": "Azure OpenAI",
        "proxy env vars": "none",
        "supports websockets": "false",
        "wire API": "responses"
      },
      "remediation": null,
      "durationMs": 0
    },
    "runtime.provenance": {
      "id": "runtime.provenance",
      "category": "runtime",
      "status": "ok",
      "summary": "running npm on windows-x86_64",
      "details": {
        "commit": "unknown",
        "current executable": "C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\bin\\codex.exe",
        "install method": "npm (package C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc, bin C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\bin, resources C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\codex-resources, path C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\codex-path)",
        "platform": "windows-x86_64",
        "version": "0.145.0"
      },
      "remediation": null,
      "durationMs": 0
    },
    "runtime.search": {
      "id": "runtime.search",
      "category": "search",
      "status": "ok",
      "summary": "search is OK (bundled)",
      "details": {
        "search command": "C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\codex-path\\rg.exe",
        "search command readiness": "file exists",
        "search provider": "bundled"
      },
      "remediation": null,
      "durationMs": 0
    },
    "sandbox.helpers": {
      "id": "sandbox.helpers",
      "category": "sandbox",
      "status": "ok",
      "summary": "sandbox configuration is readable",
      "details": {
        "approval policy": "OnRequest",
        "codex-linux-sandbox helper": "none",
        "execve wrapper helper": "none",
        "filesystem sandbox": "restricted",
        "network sandbox": "enabled"
      },
      "remediation": null,
      "durationMs": 0
    },
    "state.paths": {
      "id": "state.paths",
      "category": "state",
      "status": "ok",
      "summary": "state paths and databases are inspectable",
      "details": {
        "CODEX_HOME": "C:\\Users\\bcorr\\.codex (dir)",
        "active rollout files": "3030 files, 4345649305 total bytes, 1434207 average bytes",
        "archived rollout files": "171 files, 88152145 total bytes, 515509 average bytes",
        "goals DB": "C:\\Users\\bcorr\\.codex\\goals_1.sqlite (file)",
        "goals DB integrity": "ok",
        "log DB": "C:\\Users\\bcorr\\.codex\\logs_2.sqlite (file)",
        "log DB integrity": "ok",
        "log dir": "C:\\Users\\bcorr\\.codex\\log (dir)",
        "memories DB": "C:\\Users\\bcorr\\.codex\\memories_1.sqlite (file)",
        "memories DB integrity": "ok",
        "sqlite home": "C:\\Users\\bcorr\\.codex (dir)",
        "state DB": "C:\\Users\\bcorr\\.codex\\state_5.sqlite (file)",
        "state DB integrity": "ok",
        "thread history DB": "C:\\Users\\bcorr\\.codex\\thread_history_1.sqlite (missing)",
        "thread history DB integrity": "skipped (missing)"
      },
      "remediation": null,
      "durationMs": 38399
    },
    "state.rollout_db_parity": {
      "id": "state.rollout_db_parity",
      "category": "threads",
      "status": "warning",
      "summary": "rollout files and state DB thread inventory differ",
      "details": {
        "default model provider": "azure",
        "rollout DB active files": "3027",
        "rollout DB active rows": "2976",
        "rollout DB archive mismatches": "0",
        "rollout DB archived files": "171",
        "rollout DB archived rows": "171",
        "rollout DB duplicate DB paths": "0",
        "rollout DB duplicate rollout thread ids": "0",
        "rollout DB malformed file names": "0",
        "rollout DB missing active rows": "51",
        "rollout DB missing active sample": [
          "C:\\Users\\bcorr\\.codex\\sessions\\2026\\04\\28\\rollout-2026-04-28T15-34-09-019dd44c-1840-7b50-b2ac-0e7781af6a81.jsonl",
          "C:\\Users\\bcorr\\.codex\\sessions\\2026\\04\\27\\rollout-2026-04-27T20-29-31-019dd034-2464-7c32-893f-ac117718fff7.jsonl",
          "C:\\Users\\bcorr\\.codex\\sessions\\2026\\04\\25\\rollout-2026-04-25T00-11-18-019dc18c-1e68-7222-9473-001465024c54.jsonl",
          "C:\\Users\\bcorr\\.codex\\sessions\\2026\\04\\25\\rollout-2026-04-25T00-19-30-019dc193-9ee1-70b1-bfa1-ee1e4135d969.jsonl",
          "C:\\Users\\bcorr\\.codex\\sessions\\2026\\04\\24\\rollout-2026-04-24T21-32-58-019dc0fb-2983-76b0-b584-06325fa6089d.jsonl"
        ],
        "rollout DB missing archived rows": "0",
        "rollout DB model providers": "openai=2080, azure=1067",
        "rollout DB rows": "3147",
        "rollout DB scan cap reached": "false",
        "rollout DB scan error sample": [
          "C:\\Users\\bcorr\\.codex\\sessions\\2026\\05\\05\\rollout-2026-05-05T19-30-04-019df930-96da-70d1-a4ae-249ef50cc504.jsonl (rollout at C:\\Users\\bcorr\\.codex\\sessions\\2026\\05\\05\\rollout-2026-05-05T19-30-04-019df930-96da-70d1-a4ae-249ef50cc504.jsonl has no usable header record)",
          "C:\\Users\\bcorr\\.codex\\sessions\\2026\\05\\05\\rollout-2026-05-05T19-42-36-019df93c-115f-7613-83c9-fdf32d42c500.jsonl (rollout at C:\\Users\\bcorr\\.codex\\sessions\\2026\\05\\05\\rollout-2026-05-05T19-42-36-019df93c-115f-7613-83c9-fdf32d42c500.jsonl has no usable header record)",
          "C:\\Users\\bcorr\\.codex\\sessions\\2025\\09\\04\\rollout-2025-09-04T22-00-38-27325ee9-6ad3-4155-93e3-627270f10772.jsonl (rollout at C:\\Users\\bcorr\\.codex\\sessions\\2025\\09\\04\\rollout-2025-09-04T22-00-38-27325ee9-6ad3-4155-93e3-627270f10772.jsonl has no usable header record)"
        ],
        "rollout DB scan errors": "3",
        "rollout DB sources": "vscode=2531, subagent:thread_spawn=339, exec=159, cli=117, subagent:other=1",
        "rollout DB stale rows": "0"
      },
      "issues": [
        {
          "severity": "warning",
          "cause": "rollout files are missing from the state DB",
          "measured": "51 active, 0 archived",
          "expected": "every rollout file has a matching threads row",
          "remedy": null,
          "fields": []
        },
        {
          "severity": "warning",
          "cause": "rollout scan was incomplete or found bad files",
          "measured": "3 scan errors, 0 malformed names, scan cap reached: false",
          "expected": "rollout directories are fully scannable",
          "remedy": "Check file permissions and unexpected files under CODEX_HOME sessions.",
          "fields": []
        }
      ],
      "remediation": null,
      "durationMs": 5482
    },
    "system.environment": {
      "id": "system.environment",
      "category": "system",
      "status": "ok",
      "summary": "OS language en-US",
      "details": {
        "EDITOR": "not set",
        "VISUAL": "not set",
        "os": "Windows 10.0.26220 (Windows 11 Professional) [64-bit]",
        "os language": "en-US",
        "os type": "Windows",
        "os version": "10.0.26220"
      },
      "remediation": null,
      "durationMs": 0
    },
    "terminal.env": {
      "id": "terminal.env",
      "category": "terminal",
      "status": "ok",
      "summary": "terminal metadata was detected",
      "details": {
        "WT_SESSION": "present",
        "color output": "enabled",
        "console input code page": "437",
        "console output code page": "437",
        "stderr console mode": "0x00000007 (VT processing: true)",
        "stderr is terminal": "true",
        "stdin is terminal": "true",
        "stdout console mode": "0x00000007 (VT processing: true)",
        "stdout is terminal": "true",
        "terminal": "Windows Terminal",
        "terminal size": "120x30"
      },
      "remediation": null,
      "durationMs": 0
    },
    "terminal.title": {
      "id": "terminal.title",
      "category": "title",
      "status": "ok",
      "summary": "terminal title default",
      "details": {
        "terminal title activity": "true",
        "terminal title items": "activity, project-name",
        "terminal title project source": "cwd",
        "terminal title project value": "bcorr",
        "terminal title source": "default"
      },
      "remediation": null,
      "durationMs": 0
    },
    "updates.status": {
      "id": "updates.status",
      "category": "updates",
      "status": "ok",
      "summary": "update configuration is locally consistent",
      "details": {
        "cached latest version": "0.145.0",
        "check for update on startup": "true",
        "dismissed version": "0.139.0",
        "last checked at": "2026-07-28T11:28:37.853444700Z",
        "latest version": "0.145.0",
        "latest version status": "current version is not older",
        "npm update target": "C:\\Users\\bcorr\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex",
        "update action": "npm install -g @openai/codex",
        "version cache": "C:\\Users\\bcorr\\.codex\\version.json"
      },
      "remediation": null,
      "durationMs": 834
    }
  }
}

What issue are you seeing?

Codex Security Deep Scan fails before reviewing any repository source because
its SDK-managed discovery worker cannot access AZURE_OPENAI_API_KEY.
The variable is present in the Codex process and persisted in the Windows
Machine environment, but is reported as missing inside the worker.

What steps can reproduce the bug?

  1. Configure an Azure OpenAI model provider with

env_key = "AZURE_OPENAI_API_KEY".

  1. Set AZURE_OPENAI_API_KEY as a non-empty Windows Machine environment

variable.

  1. Start Codex and verify, without printing the secret, that the current

Codex shell process sees the variable.

  1. Run a Codex Security Deep Scan against a local repository.
  2. Observe that discovery fails before reviewing source with the missing

environment-variable error.

What is the expected behavior?

Deep Scan discovery workers should inherit the credential configured for the
Azure OpenAI model provider and start discovery successfully.

Additional information

Actual behavior

Each Deep Scan attempt terminates during worker startup with:

Missing environment variable: `AZURE_OPENAI_API_KEY`.

The failure occurs before any repository review. The coordinator manifest
records discoveryCount: 0 and no worker threat model or finding artifacts.

Environment

  • OS: Windows
  • Shell used by Codex shell commands: PowerShell Core 7.6.3
  • Initial sandbox mode: workspace-write
  • Model provider: Azure OpenAI
  • Codex Security plugin version: 0.1.14
  • Codex model-provider configuration uses:

``toml
env_key = "AZURE_OPENAI_API_KEY"
``

  • AZURE_OPENAI_API_KEY is present and non-empty:
  • in the current Codex process;
  • in the Windows Machine environment scope.
  • The Codex host was fully restarted before the second attempt.

The following shell-environment policy was also configured:

[shell_environment_policy]
inherit = "all"
ignore_default_excludes = true

The key is available to Codex shell commands, but not to Deep Scan's
SDK-managed worker processes.

The same failure was reproduced with full filesystem access and with sandboxing
disabled, so it does not appear to be caused by the selected sandbox mode.

A regular, non-Deep Security Scan succeeds in the same environment. The
credential failure is specific to the Deep Scan worker path.

Regression context

The same Deep Scan workflow worked in this environment during the previous
week. The prior working plugin version was not recorded, so this report does
not claim a specific first-bad version; however, the behavior in 0.1.14
appears to be a regression.

Additional information

Two fresh Deep Scan attempts failed identically. In each preserved coordinator
manifest:

  • setup completed successfully;
  • discoveryCount was 0;
  • one discovery execution failed with the missing-variable error;
  • remaining discovery executions were canceled;
  • no canonical discovery manifest was produced.

Root-cause hypothesis

The Deep Scan plugin launches SDK-managed discovery workers with an environment
that does not inherit (or does not resolve) the parent Codex process's Azure
provider credential. The shell environment policy appears to apply to shell
commands only, not to those worker processes.

Codex thread ID: 019fa8db-8e79-7523-a9a8-94b989167870.

View original on GitHub ↗