Linux/WSL2: codex-code-mode-host 0.147.0 crashes with SIGTRAP (int3 at fixed offset 0x982442) on every shell exec — 0.146.1 works
What version of Codex CLI is running?
codex-cli 0.147.0 (standalone installer, 0.147.0-x86_64-unknown-linux-musl)
What subscription do you have?
Pro
Which model were you using?
gpt-5.6-sol
What platform is your computer?
Linux 6.18.33.2-microsoft-standard-WSL2 x86_64 x86_64 (WSL2 on Windows 11)
What terminal emulator and version are you using (if applicable)?
Windows Terminal (WSL2), zsh, no multiplexer
What issue are you seeing?
On 0.147.0, every shell/exec tool call crashes codex-code-mode-host with SIGTRAP. The trap is an int3 at the same binary offset on every crash (ip - base = 0x982442, ASLR varies, offset does not), which looks like an internal fatal check/assert in the host, not memory corruption. Codex retries a few times and then gives up with:
The command could not be executed: the shell host crashed repeatedly with SIGTRAP, also outside the sandbox.
dmesg shows a burst of these for every attempted exec:
traps: codex-code-mode[4005] trap int3 ip:7c0f7d382442 sp:7ffd752bd180 error:0 in codex-code-mode-host[982442,7c0f7cb80000+1bde000]
codex-code-mode-host: codex-code-mode: potentially unexpected fatal signal 5.
CPU: 13 UID: 1000 PID: 4005 Comm: codex-code-mode Tainted: G W 6.18.33.2-microsoft-standard-WSL2 #1 PREEMPT(none)
WSL (4053 - CaptureCrash): Capturing crash for pid: 1489425, executable: !home!sander!.codex!packages!standalone!releases!0.147.0-x86_64-unknown-linux-musl!bin!codex-code-mode-host, signal: 5, port: 50005
The host binary itself starts fine (--help works, --listen stdio with empty stdin exits 0); the crash happens once it has to run an exec. Node/V8 on the same machine is healthy (node -e 'console.log(1)' works), so this is not a general V8/WSL problem.
What steps can reproduce the bug?
codex exec --skip-git-repo-check 'Run the shell command: echo repro-test-147'
Deterministic: fails every time on 0.147.0 with the SIGTRAP burst in dmesg.
The same command on 0.146.1 (same machine, same kernel, same config) works fine — the command executes and prints repro-test-147. So this is a 0.147.0 regression, not an environment issue.
Also tried --disable code_mode_host on 0.147.0 as a workaround: exec then fails outright with ERROR codex_core::tools::router: error=code-mode host is disabled — there is no fallback to the in-process runtime, so the only workaround is downgrading (repointing ~/.codex/packages/standalone/current to the 0.146.1 release).
What is the expected behavior?
The shell command executes and prints repro-test-147.
Additional information
- The host binary is a static-pie musl build, stripped, so I can't symbolize offset
0x982442locally; WSL CaptureCrash dumps are available if useful. - Possibly related: #38203 reports the Windows Desktop
codex-code-mode-hostof the same era crashing with0xc0000409(fast-fail, i.e. also a fatal check) on exec; #31475 is a SIGTRAP-on-exec in code mode on macOS. This report adds Linux/WSL2 with a clean 0.146.1-vs-0.147.0 bisect.
Codex doctor report
<details><summary>codex doctor --json (0.147.0)</summary>
{
"schemaVersion": 1,
"generatedAt": "1786641759s since unix epoch",
"overallStatus": "ok",
"codexVersion": "0.147.0",
"checks": {
"app_server.status": {
"id": "app_server.status",
"category": "app-server",
"status": "ok",
"summary": "background server is not running",
"details": {
"control socket": "/home/sander/.codex/app-server-control/app-server-control.sock",
"daemon state dir": "/home/sander/.codex/app-server-daemon",
"mode": "ephemeral",
"pid file": "/home/sander/.codex/app-server-daemon/app-server.pid (missing)",
"settings": "/home/sander/.codex/app-server-daemon/settings.json (missing)",
"status": "not running",
"update-loop pid file": "/home/sander/.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 configured",
"details": {
"auth file": "/home/sander/.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": "/home/sander/.codex",
"config.toml": "/home/sander/.codex/config.toml",
"config.toml parse": "ok",
"cwd": "/home/sander/code/MGT/mgtboek4",
"enabled feature flags": "shell_tool, view_image, unified_exec, shell_snapshot, code_mode_host, terminal_resize_reflow, sqlite, memories, hooks, enable_request_compression, network_proxy, multi_agent, apps, tool_search_always_defer_mcp_tools, tool_suggest, plugins, in_app_browser, in_app_updates, browser_use, browser_use_full_cdp_access, browser_use_external, computer_use, remote_plugin, plugin_sharing, external_migration, image_generation, resize_all_images, item_ids, skill_mcp_dependency_install, skill_search, mentions_v2, steer, guardian_approval, goals, collaboration_modes, tool_call_mcp_elicitation, auth_elicitation, personality, fast_mode, tui_app_server, remote_compaction_v2, workspace_dependencies",
"feature flag overrides": "memories=true, network_proxy=true, external_migration=true",
"feature flags enabled": "42",
"log dir": "/home/sander/.codex/log",
"mcp servers": "12",
"model": "gpt-5.6-sol",
"model provider": "openai",
"sqlite home": "/home/sander/.codex"
},
"remediation": null,
"durationMs": 0
},
"git.environment": {
"id": "git.environment",
"category": "git",
"status": "ok",
"summary": "git version 2.43.0",
"details": {
".git entry": "directory",
"PATH git #1": "/usr/bin/git",
"PATH git #2": "/bin/git",
"PATH git entries": "2",
"git branch": "develop",
"git build options": "git version 2.43.0; cpu: x86_64; no commit associated with this build; sizeof-long: 8; sizeof-size_t: 8; shell-path: /bin/sh",
"git exec path": "/usr/lib/git-core",
"git version": "git version 2.43.0",
"repo detected": "true",
"repo root": "/home/sander/code/MGT/mgtboek4",
"selected git": "/usr/bin/git"
},
"remediation": null,
"durationMs": 108
},
"installation": {
"id": "installation",
"category": "install",
"status": "ok",
"summary": "installation looks consistent",
"details": {
"PATH codex #1": "/home/sander/.local/bin/codex",
"current executable": "/home/sander/.codex/packages/standalone/releases/0.147.0-x86_64-unknown-linux-musl/bin/codex",
"install context": "standalone (unix, package /home/sander/.codex/packages/standalone/releases/0.147.0-x86_64-unknown-linux-musl, bin /home/sander/.codex/packages/standalone/releases/0.147.0-x86_64-unknown-linux-musl/bin, resources /home/sander/.codex/packages/standalone/releases/0.147.0-x86_64-unknown-linux-musl/codex-resources, path /home/sander/.codex/packages/standalone/releases/0.147.0-x86_64-unknown-linux-musl/codex-path)",
"managed by bun": "false",
"managed by npm": "false",
"managed by pnpm": "false",
"managed package root": "not set"
},
"remediation": null,
"durationMs": 26
},
"mcp.config": {
"id": "mcp.config",
"category": "mcp",
"status": "ok",
"summary": "MCP configuration is locally consistent",
"details": {
"configured servers": "12",
"disabled servers": "2",
"stdio servers": "7",
"streamable_http servers": "5"
},
"remediation": null,
"durationMs": 684
},
"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": 48
},
"network.websocket_reachability": {
"id": "network.websocket_reachability",
"category": "websocket",
"status": "ok",
"summary": "Responses WebSocket handshake succeeded",
"details": {
"DNS": "2 IPv4, 2 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": 632
},
"runtime.provenance": {
"id": "runtime.provenance",
"category": "runtime",
"status": "ok",
"summary": "running standalone on linux-x86_64",
"details": {
"commit": "unknown",
"current executable": "/home/sander/.codex/packages/standalone/releases/0.147.0-x86_64-unknown-linux-musl/bin/codex",
"install method": "standalone (unix, package /home/sander/.codex/packages/standalone/releases/0.147.0-x86_64-unknown-linux-musl, bin /home/sander/.codex/packages/standalone/releases/0.147.0-x86_64-unknown-linux-musl/bin, resources /home/sander/.codex/packages/standalone/releases/0.147.0-x86_64-unknown-linux-musl/codex-resources, path /home/sander/.codex/packages/standalone/releases/0.147.0-x86_64-unknown-linux-musl/codex-path)",
"platform": "linux-x86_64",
"version": "0.147.0"
},
"remediation": null,
"durationMs": 0
},
"runtime.search": {
"id": "runtime.search",
"category": "search",
"status": "ok",
"summary": "search is OK (bundled)",
"details": {
"search command": "/home/sander/.codex/packages/standalone/releases/0.147.0-x86_64-unknown-linux-musl/codex-path/rg",
"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": "/home/sander/.codex/tmp/arg0/codex-arg0o7jXsu/codex-linux-sandbox",
"execve wrapper helper": "/home/sander/.codex/tmp/arg0/codex-arg0o7jXsu/codex-execve-wrapper",
"filesystem sandbox": "restricted",
"network sandbox": "restricted"
},
"remediation": null,
"durationMs": 0
},
"state.paths": {
"id": "state.paths",
"category": "state",
"status": "ok",
"summary": "state paths and databases are inspectable",
"details": {
"CODEX_HOME": "/home/sander/.codex (dir)",
"active rollout files": "1053 files, 1272744406 total bytes, 1208684 average bytes",
"archived rollout files": "0 files, 0 total bytes, 0 average bytes",
"goals DB": "/home/sander/.codex/goals_1.sqlite (file)",
"goals DB integrity": "ok",
"log DB": "/home/sander/.codex/logs_2.sqlite (file)",
"log DB integrity": "ok",
"log dir": "/home/sander/.codex/log (dir)",
"memories DB": "/home/sander/.codex/memories_1.sqlite (file)",
"memories DB integrity": "ok",
"queue DB": "/home/sander/.codex/queue_1.sqlite (file)",
"queue DB integrity": "ok",
"sqlite home": "/home/sander/.codex (dir)",
"standalone release cache": "13 entries in /home/sander/.codex/packages/standalone/releases",
"state DB": "/home/sander/.codex/state_5.sqlite (file)",
"state DB integrity": "ok",
"thread history DB": "/home/sander/.codex/thread_history_1.sqlite (file)",
"thread history DB integrity": "ok"
},
"remediation": null,
"durationMs": 316
},
"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": "1053",
"rollout DB active rows": "1053",
"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=1053",
"rollout DB rows": "1053",
"rollout DB scan cap reached": "false",
"rollout DB scan errors": "0",
"rollout DB sources": "cli=414, subagent:other=352, subagent:thread_spawn=154, exec=98, subagent:review=35",
"rollout DB stale rows": "0"
},
"remediation": null,
"durationMs": 311
},
"system.environment": {
"id": "system.environment",
"category": "system",
"status": "ok",
"summary": "OS language C",
"details": {
"EDITOR": "not set",
"LANG": "C.UTF-8",
"LESS": "set",
"PAGER": "set",
"VISUAL": "not set",
"os": "Ubuntu 24.4.0 (noble) [64-bit]",
"os language": "C",
"os type": "Ubuntu",
"os version": "24.4.0"
},
"remediation": null,
"durationMs": 4
},
"terminal.env": {
"id": "terminal.env",
"category": "terminal",
"status": "ok",
"summary": "terminal metadata was detected",
"details": {
"COLORTERM": "truecolor",
"DISPLAY": "present",
"WAYLAND_DISPLAY": "present",
"WSL_DISTRO_NAME": "present",
"WSL_INTEROP": "present",
"WT_SESSION": "present",
"color output": "disabled (stdout is not a terminal)",
"effective locale": "C.UTF-8",
"stderr is terminal": "false",
"stdin is terminal": "false",
"stdout is terminal": "false",
"terminal": "Windows Terminal",
"terminal size": "80x24"
},
"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": "git repo root",
"terminal title project value": "mgtboek4",
"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.147.0",
"check for update on startup": "true",
"last checked at": "2026-08-13T17:03:13.754800998Z",
"latest version": "0.147.0",
"latest version status": "current version is not older",
"update action": "standalone installer",
"version cache": "/home/sander/.codex/version.json"
},
"remediation": null,
"durationMs": 103
}
}
}
</details>
7 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Version-delta data point that fits your evidence exactly: between the versions you bisected, the embedded V8 was bumped a major version —
rust-v0.146.1pinsv8 = "=149.2.0",rust-v0.147.0pinsv8 = "=150.4.0"(codex-rs/Cargo.toml).That aligns with all three of your observations:
int3at a fixed binary offset is a deliberate V8CHECK/fatal-abort, not corruption;--helpworks but the first exec crashes because the first exec is what creates a V8 isolate; and system Node being healthy proves nothing about this binary since it embeds its own V8 build. The classic failure in this class is V8's isolate-init hardware/kernel feature probing (e.g. memory-protection-key / sandbox support detection) misfiring under WSL2 kernels — new V8 majors regularly tighten those probes into CHECKs.Two cheap next steps: (1)
addr2line -e codex-code-mode-host 0x982442against the release binary (or its symbols archive from the GitHub release) names the exact CHECK; (2) if it lands in pkey/sandbox init, gating those V8 features off (build flag or runtime flag) for the musl/WSL target is the likely fix, and trying the 0.148 alpha tells you whether a newer v8 crate already resolved it.If every shell/exec on WSL2 0.147.0 dies with SIGTRAP at the same
codex-code-mode-hostoffset, pin back to 0.146.1. That build works; the 0.147.0 host does not.Method:
CODEX_NON_INTERACTIVE=1 CODEX_RELEASE=0.146.1 shagainsthttps://chatgpt.com/codex/install.shcodex --versionreports 0.146.1.Evidence: reporter bisect is 0.147.0 crash / 0.146.1 success, with a stable
int3offset. The 0.147.0 V8 pin moved from 149.2.0 to a newer major, which matches a host CHECK abort rather than memory corruption.Independent community workaround; not an official OpenAI fix.
0.148 still crashes.
Thanks for confirming. That means upgrading to 0.148.0 is not a recovery for this WSL2/code-mode-host crash.
For now, the narrow workaround remains:
codex --versionreports 0.146.1.If possible, please also confirm whether 0.148.0 fails with the same
SIGTRAP/ fixedint3offset and whether the identical command still succeeds after returning to 0.146.1. That will distinguish the same V8 host regression from a different 0.148 crash.Limitation: this is version avoidance, not a fix; 0.148.0 should remain considered affected unless an upstream release note explicitly identifies this host crash as resolved.
1.149.1 still crashes.
Thanks for the 1.149.1 confirmation. That means the crash is not limited to 0.147/0.148.
The temporary method remains:
codex --version.If possible, please also confirm whether 1.149.1 still fails with the same SIGTRAP / fixed
int3offset, and whether the identical command succeeds after returning to 0.146.1. That distinguishes the same host regression from a new failure.Limitation: version avoidance only; the affected release should still be considered broken until an upstream note explicitly resolves this host crash.