codex mcp-server on Windows rejects in-workspace apply_patch under :workspace as outside the project

Resolved 💬 3 comments Opened Jul 28, 2026 by soramame0256 Closed Jul 31, 2026
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of Codex CLI is running?

`codex-cli 0.145.0`

What subscription do you have?

Plus

Which model were you using?

gpt-5.6-luna, gpt-5.6-terra, gpt-5.6-sol

What platform is your computer?

Microsoft Windows NT 10.0.26200.0 x64

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

Windows Terminal

Codex doctor report

<details>
<summary>Codex doctor report json</summary>

{
  "schemaVersion": 1,
  "generatedAt": "1785223431s since unix epoch",
  "overallStatus": "ok",
  "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\\soramame0256\\.codex\\app-server-control\\app-server-control.sock",
        "daemon state dir": "C:\\Users\\soramame0256\\.codex\\app-server-daemon",
        "mode": "ephemeral",
        "pid file": "C:\\Users\\soramame0256\\.codex\\app-server-daemon\\app-server.pid (missing)",
        "settings": "C:\\Users\\soramame0256\\.codex\\app-server-daemon\\settings.json (missing)",
        "status": "not running",
        "update-loop pid file": "C:\\Users\\soramame0256\\.codex\\app-server-daemon\\app-server-updater.pid (missing)"
      },
      "remediation": null,
      "durationMs": 2
    },
    "auth.credentials": {
      "id": "auth.credentials",
      "category": "auth",
      "status": "ok",
      "summary": "auth is configured",
      "details": {
        "auth file": "C:\\Users\\soramame0256\\.codex\\auth.json",
        "auth storage mode": "File",
        "stored API key": "false",
        "stored ChatGPT tokens": "true",
        "stored agent identity": "false",
        "stored auth mode": "chatgpt"
      },
      "remediation": null,
      "durationMs": 0
    },
    "config.load": {
      "id": "config.load",
      "category": "config",
      "status": "ok",
      "summary": "config loaded",
      "details": {
        "CODEX_HOME": "C:\\Users\\soramame0256\\.codex",
        "config.toml": "C:\\Users\\soramame0256\\.codex\\config.toml",
        "config.toml parse": "ok",
        "cwd": "D:\\codex-test",
        "enabled feature flags": "<redacted>",
        "feature flag overrides": "none",
        "feature flags enabled": "36",
        "log dir": "C:\\Users\\soramame0256\\.codex\\log",
        "mcp servers": "8",
        "model": "gpt-5.6-sol",
        "model provider": "openai",
        "sqlite home": "C:\\Users\\soramame0256\\.codex"
      },
      "remediation": null,
      "durationMs": 0
    },
    "git.environment": {
      "id": "git.environment",
      "category": "git",
      "status": "ok",
      "summary": "git version 2.45.2.windows.1",
      "details": {
        ".git entry": "directory",
        "PATH git #1": "C:\\mingw64\\bin\\git.exe",
        "PATH git #2": "C:\\Program Files\\Git\\cmd\\git.exe",
        "PATH git entries": "2",
        "git build options": "git version 2.45.2.windows.1; cpu: x86_64; built from commit: 91d03cb2e4fbf6ad961ace739b8a646868cb154d; sizeof-long: 4; sizeof-size_t: 8; shell-path: /bin/sh; feature: fsmonitor--daemon",
        "git exec path": "C:/mingw64/libexec/git-core",
        "git version": "git version 2.45.2.windows.1",
        "repo detected": "true",
        "repo root": "D:\\codex-test",
        "selected git": "C:\\mingw64\\bin\\git.exe"
      },
      "remediation": null,
      "durationMs": 205
    },
    "installation": {
      "id": "installation",
      "category": "install",
      "status": "ok",
      "summary": "installation looks consistent",
      "details": {
        "PATH codex #1": "C:\\Users\\soramame0256\\AppData\\Roaming\\npm\\codex",
        "PATH codex #2": "C:\\Users\\soramame0256\\AppData\\Roaming\\npm\\codex.cmd",
        "PATH codex #3": "C:\\Users\\soramame0256\\AppData\\Local\\Microsoft\\WinGet\\Links\\codex.exe",
        "PATH codex entries": "3",
        "current executable": "C:\\Users\\soramame0256\\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\\soramame0256\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc, bin C:\\Users\\soramame0256\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\bin, resources C:\\Users\\soramame0256\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\codex-resources, path C:\\Users\\soramame0256\\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\\soramame0256\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex",
        "npm update target": "C:\\Users\\soramame0256\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex"
      },
      "remediation": null,
      "durationMs": 848
    },
    "mcp.config": {
      "id": "mcp.config",
      "category": "mcp",
      "status": "ok",
      "summary": "MCP configuration is locally consistent",
      "details": {
        "configured servers": "8",
        "disabled servers": "0",
        "stdio servers": "3",
        "streamable_http servers": "5"
      },
      "remediation": null,
      "durationMs": 522
    },
    "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": {
        "ChatGPT base URL": "https://chatgpt.com/backend-api/ reachable (HTTP 403)",
        "reachability mode": "ChatGPT auth"
      },
      "remediation": null,
      "durationMs": 126
    },
    "network.websocket_reachability": {
      "id": "network.websocket_reachability",
      "category": "websocket",
      "status": "ok",
      "summary": "Responses WebSocket handshake succeeded",
      "details": {
        "DNS": "2 IPv4, 0 IPv6, first IPv4",
        "auth mode": "chatgpt",
        "connect timeout": "15000 ms",
        "endpoint": "wss://chatgpt.com/backend-api/<redacted>",
        "handshake result": "HTTP 101 Switching Protocols",
        "model provider": "openai",
        "models etag present": "true",
        "provider name": "OpenAI",
        "proxy env vars": "none",
        "reasoning header": "false",
        "server model present": "false",
        "supports websockets": "true",
        "wire API": "responses"
      },
      "remediation": null,
      "durationMs": 1314
    },
    "runtime.provenance": {
      "id": "runtime.provenance",
      "category": "runtime",
      "status": "ok",
      "summary": "running npm on windows-x86_64",
      "details": {
        "commit": "unknown",
        "current executable": "C:\\Users\\soramame0256\\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\\soramame0256\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc, bin C:\\Users\\soramame0256\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\bin, resources C:\\Users\\soramame0256\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex\\node_modules\\@openai\\codex-win32-x64\\vendor\\x86_64-pc-windows-msvc\\codex-resources, path C:\\Users\\soramame0256\\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\\soramame0256\\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": "restricted"
      },
      "remediation": null,
      "durationMs": 2
    },
    "state.paths": {
      "id": "state.paths",
      "category": "state",
      "status": "ok",
      "summary": "state paths and databases are inspectable",
      "details": {
        "CODEX_HOME": "C:\\Users\\soramame0256\\.codex (dir)",
        "active rollout files": "82 files, 38199771 total bytes, 465850 average bytes",
        "archived rollout files": "0 files, 0 total bytes, 0 average bytes",
        "goals DB": "C:\\Users\\soramame0256\\.codex\\goals_1.sqlite (file)",
        "goals DB integrity": "ok",
        "log DB": "C:\\Users\\soramame0256\\.codex\\logs_2.sqlite (file)",
        "log DB integrity": "ok",
        "log dir": "C:\\Users\\soramame0256\\.codex\\log (dir)",
        "memories DB": "C:\\Users\\soramame0256\\.codex\\memories_1.sqlite (file)",
        "memories DB integrity": "ok",
        "sqlite home": "C:\\Users\\soramame0256\\.codex (dir)",
        "state DB": "C:\\Users\\soramame0256\\.codex\\state_5.sqlite (file)",
        "state DB integrity": "ok",
        "thread history DB": "C:\\Users\\soramame0256\\.codex\\thread_history_1.sqlite (missing)",
        "thread history DB integrity": "skipped (missing)"
      },
      "remediation": null,
      "durationMs": 1336
    },
    "state.rollout_db_parity": {
      "id": "state.rollout_db_parity",
      "category": "threads",
      "status": "ok",
      "summary": "rollout files and state DB thread inventory agree",
      "details": {
        "default model provider": "openai",
        "rollout DB active files": "82",
        "rollout DB active rows": "82",
        "rollout DB archive mismatches": "0",
        "rollout DB archived files": "0",
        "rollout DB archived rows": "0",
        "rollout DB duplicate DB paths": "0",
        "rollout DB duplicate rollout thread ids": "0",
        "rollout DB malformed file names": "0",
        "rollout DB missing active rows": "0",
        "rollout DB missing archived rows": "0",
        "rollout DB model providers": "openai=82",
        "rollout DB rows": "82",
        "rollout DB scan cap reached": "false",
        "rollout DB scan errors": "0",
        "rollout DB sources": "mcp=43, subagent:other=14, cli=12, vscode=9, exec=4",
        "rollout DB stale rows": "0"
      },
      "remediation": null,
      "durationMs": 391
    },
    "system.environment": {
      "id": "system.environment",
      "category": "system",
      "status": "ok",
      "summary": "OS language ja-JP",
      "details": {
        "EDITOR": "not set",
        "VISUAL": "not set",
        "os": "Windows 10.0.26200 (Windows 11 Core) [64-bit]",
        "os language": "ja-JP",
        "os type": "Windows",
        "os version": "10.0.26200"
      },
      "remediation": null,
      "durationMs": 3
    },
    "terminal.env": {
      "id": "terminal.env",
      "category": "terminal",
      "status": "ok",
      "summary": "terminal metadata was detected",
      "details": {
        "color output": "enabled",
        "console input code page": "932",
        "console output code page": "932",
        "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": "unknown",
        "terminal size": "133x33"
      },
      "remediation": null,
      "durationMs": 4
    },
    "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": "git repo root",
        "terminal title project value": "codex-test",
        "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",
        "last checked at": "2026-07-28T02:29:44.866085900Z",
        "latest version": "0.145.0",
        "latest version status": "current version is not older",
        "npm update target": "C:\\Users\\soramame0256\\AppData\\Roaming\\npm\\node_modules\\@openai\\codex",
        "update action": "npm install -g @openai/codex",
        "version cache": "C:\\Users\\soramame0256\\.codex\\version.json"
      },
      "remediation": null,
      "durationMs": 877
    }
  }

</details>

What issue are you seeing?

On native Windows, codex mcp-server rejects file writes inside the active workspace even when the built-in :workspace permission profile explicitly grants write access to that directory.

The issue reproduces with the npm-installed codex.cmd mcp-server directly. No wrapper script, sandbox-helper override, or environment-variable modification is used.

The MCP call uses:

{
  "cwd": "D:\\codex-test",
  "approval-policy": "never",
  "config": {
    "default_permissions": ":workspace",
    "model_reasoning_effort": "low"
  }
}

The effective permission configuration reports:

  • managed, restricted filesystem;
  • write access to D:\codex-test and temporary directories;
  • read-only access to .git, .agents, and .codex;
  • approval policy never.

Despite this, creating D:\codex-test\a.txt with apply_patch is rejected with:

patch rejected: writing outside of the project; rejected by user approval settings

The workspace permission layer therefore recognizes the directory as writable, while the apply_patch/approval layer incorrectly treats a direct child of the same directory as outside the project.

Reproduction thread ID:

019fa882-b73f-7a32-a7aa-fc5b9edb6719

What steps can reproduce the bug?

  1. Install Codex CLI 0.145.0 through npm on native Windows.
  1. Create or use a Git repository at:
D:\codex-test
  1. Start the npm-installed MCP server directly, without a wrapper:
codex.cmd mcp-server
  1. Connect an MCP client to the server and invoke the codex tool with:
{
  "prompt": "Please perform the following task. This is for verifying the Codex MCP-server functionality.\n\n1. Write \"a\" to a.txt\n2. Delete a.txt\n\nIf any file operation is rejected, report the exact rejection reason and current permission profile.",
  "cwd": "D:\\codex-test",
  "approval-policy": "never",
  "config": {
    "default_permissions": ":workspace",
    "model_reasoning_effort": "low"
  }
}
  1. Observe that the session reports D:\codex-test as writable.
  1. Observe that creation of a.txt is nevertheless rejected:
patch rejected: writing outside of the project; rejected by user approval settings
  1. Confirm that a.txt was not created. The deletion step is not reached because creation fails.

What is the expected behavior?

When default_permissions is set to :workspace, file writes and apply_patch operations targeting paths beneath the active workspace root should succeed without requesting escalation.

With approval-policy: "never", operations that remain within the declared writable workspace must not be treated as outside-project writes requiring approval.

codex mcp-server should apply the same workspace boundary consistently across:

  • the session permission profile;
  • sandboxed shell commands; and
  • the built-in apply_patch tool.

Additional information

<img width="1883" height="557" alt="Image" src="https://github.com/user-attachments/assets/f180e901-f82f-4d0e-971f-def3b1da0da9" />

Minimal reproduction using the raw npm-installed codex mcp-server, without the custom wrapper. The effective permission profile reports D:\codex-test as writable, but apply_patch rejects D:\codex-test\a.txt as outside the project.

View original on GitHub ↗

3 Comments

github-actions[bot] contributor · 1 month ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #34993

Powered by Codex Action

soramame0256 · 1 month ago

#34993 appears related, but the observed failure path is different. That issue fails while preparing the unelevated Windows sandbox because of unsupported split writable roots. This issue reproduces through codex mcp-server and rejects the target earlier/as a project-boundary or approval decision with writing outside of the project, even though the effective permission profile lists the workspace as writable.

soramame0256 · 27 days ago

fixed by 0.146.0 release.