name: investigation-codex-vscode-extension description: This skill should be used when investigating why the Codex VS Code extension fails to spawn or connect to a local Codex agent, especially after updates or CLI changes.
Investigation: Codex VS Code Extension
[Created by Codex: 019be564-39d9-7b12-a4cf-fb7a7f1af223 2026-01-22]
Purpose
Provide a fast, repeatable workflow to diagnose why the Codex VS Code extension cannot spawn or connect to the local codex app-server.
When to Use
Use when a user reports that Codex in VS Code will not start, errors on spawn, or fails after an extension or CLI update.
Warning Flags (Check First)
- Non-default CLI override is set: If
"chatgpt.cliExecutable"is configured, the extension will run that binary instead of the bundled 45MBcodex. - Assume “custom build” risk: An override often points at a locally built or modified Codex repo; the user must know exactly what it is and why it differs.
- Always surface it explicitly: State the resolved
codexpath andcodex --versionin the RCA, and ask the user to confirm the repo/build they intended to run.
Incident Example (2026-01-22)
- Symptom: “Cannot spawn a Codex agent in VS Code” after updating the extension to
openai.chatgpt0.4.62. - Root cause: The extension started
codex app-server --analytics-default-enabled, but the user had"chatgpt.cliExecutable"pinned to acodex-cli 0.77.0binary that did not recognize that flag, so the process exited with code2. - Evidence:
~/Library/Application Support/Code/logs/.../window*/exthost/openai.chatgpt/Codex.logcontainederror: unexpected argument '--analytics-default-enabled' found. - Fix: Remove or update
"chatgpt.cliExecutable"to a compatiblecodexbinary (or let the extension use its bundled one), then reload VS Code.
Workflow (Non-Invasive)
- Identify the actual
codexbinary VS Code is running (this is frequently the root cause):- Check for
"chatgpt.cliExecutable"in:~/Library/Application Support/Code/User/settings.json<repo>/.vscode/settings.json
- If set, treat it as a high-priority hypothesis: VS Code is running a non-default
codex(often a custom build). - If set, tell the user the resolved path and ask them to confirm which repo/build that binary came from.
- Check for
- Identify extension version and entrypoint:
ls ~/.vscode/extensions | rg -i 'openai.chatgpt'cat ~/.vscode/extensions/<ext>/package.json(readmain)rg -n -- 'spawn|CLI_EXECUTABLE|codex|app-server' ~/.vscode/extensions/<ext>/out/extension.js
- Determine which
codexbinary the extension uses:- If
"chatgpt.cliExecutable"is set, it wins. - Otherwise, the fallback is typically:
~/.vscode/extensions/<ext>/bin/<platform>/codex.
- If
- Pull extension logs (most authoritative):
~/Library/Application Support/Code/logs/<latest>/window*/exthost/openai.chatgpt/Codex.log.../exthost/exthost.logfor activation and stack traces.- Prioritize explicit CLI errors (unknown flags,
ENOENT,EACCES, exit code).
- Correlate failure with CLI arguments:
- Compare args in
extension.jswithcodex app-server --helpfor the selected binary. - If flags mismatch, conclude the extension is running an older CLI (often via
chatgpt.cliExecutable).
- Compare args in
- Run sanity checks:
- Compare
codex --versionfor (a) terminal PATH (b) configuredchatgpt.cliExecutabletarget (c) extension-bundled binary. - Verify executable permissions or quarantine status on macOS when
EACCESappears.
- Compare
- Draft RCA and minimal fix:
- Cite the exact log line and file path.
- Provide the smallest fix: remove/update
chatgpt.cliExecutable, point to newer binary, reload window.
Common Root Causes
chatgpt.cliExecutablepinned to an older CLI missing new flags.- Extension update changed CLI arguments but local binary stayed old.
- Missing or non-executable bundled binary after update.
- macOS quarantine or code signing issues (
EACCES).
Output Expectations
- Provide a short RCA (1–3 bullets) and minimal fix steps.
- Avoid invasive code changes unless explicitly requested.