Codex Desktop crashes on resume: sends unsupported `thread_tools` feature to bundled CLI
Summary
Codex Desktop became effectively unusable on macOS because opening/resuming a thread repeatedly crashes the app-server/worker with SIGKILL. The most consistent root error is that the Desktop app sends a feature override named thread_tools, but the bundled CLI does not recognize that feature key.
Environment
- Codex Desktop:
26.616.51431(CFBundleVersion4212) - Bundled CLI:
codex-cli 0.142.0-alpha.6 - Platform: macOS, Apple Silicon MacBook Air
- Active workflow: Codex Desktop app, local project, Figma MCP integration enabled
- Date observed: 2026-06-21
Main crash
The app repeatedly shows the generic crash screen:
An error has occurred
Codex crashed with the following error:
(code=null, signal=SIGKILL).
The relevant app log line:
target=codex_features
app_server.request ... otel.name="thread/resume" client_name="Codex Desktop" client_version="26.616.51431":
load_with_cli_overrides: unknown feature key in config: thread_tools
Local checks
thread_toolswas not present in~/.codex/config.toml.- Resetting
~/Library/Application Support/Codexdid not fix the issue. codex features listdid not includethread_tools.- The crash reproduced immediately after restarting the app and resuming the thread.
Likely cause
The Desktop app appears to send an unsupported feature override during thread/resume.
In /Applications/Codex.app/Contents/Resources/app.asar, I found a feature mapping containing:
Lu=`thread_tools`
...
{gateName:`2395575782`,featureKey:Lu}
I also found base instruction construction with:
threadToolsEnabled:!0
This looks like a Desktop build / bundled CLI mismatch: Desktop enables or forwards thread_tools, while the bundled CLI feature parser rejects it.
Workaround tested locally
I backed up the app bundle file:
/Applications/Codex.app/Contents/Resources/app.asar.bak-20260621-thread-tools
Then patched the current app.asar byte-for-byte:
- replaced `
thread_toolswith a valid same-length feature keytool_suggest` - replaced
threadToolsEnabled:!0withthreadToolsEnabled:!1
After that patch, the thread_tools crash stopped.
Secondary issue after reset
After resetting app state, a different crash appeared from the Figma MCP auth path:
worker quit with fatal: Transport channel closed,
when AuthRequired(AuthRequiredError {
www_authenticate_header: "Bearer resource_metadata=\"https://mcp.figma.com/.well-known/oauth-protected-resource\", scope=\"mcp:connect\", authorization_uri=\"https://api.figma.com/.well-known/oauth-authorization-server\""
})
target="rmcp::transport::worker"
That may be a separate auth recovery issue, but the original thread_tools crash made the Desktop app unusable before the Figma auth problem was visible.
Impact
- Existing Codex Desktop thread cannot be used reliably.
- Repeated
SIGKILLcrash screens occur during normal work. - Resetting local app state does not fix the
thread_toolsmismatch. - The only effective workaround I found was patching the app bundle manually, which is not a reasonable user workaround.
Expected behavior
Codex Desktop should not send unknown feature keys to the bundled CLI, or the bundled CLI should tolerate/ignore unknown Desktop feature gates instead of crashing the worker/app-server flow.
Log locations checked
Per Codex troubleshooting docs:
~/Library/Logs/com.openai.codex/YYYY/MM/DD
~/.codex/sessions
~/.codex/archived_sessions
I can provide more log excerpts if needed, after reviewing them for sensitive data.
6 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Additional crash observed after creating this issue via the GitHub connector.
The app crashed again with a different error:
This looks like another Desktop/runtime bug: a plugin skill name containing
:(github:github) is being used as a telemetry tag value, but the metrics/tag validator rejects it. The rejection then surfaces as another crash screen instead of being swallowed as non-fatal telemetry failure.This happened in the same Desktop session while using the GitHub plugin to submit the bug report above.
Another crash observed in the same session, this time from the skill loader while processing skill interface icons:
Local inspection found many temporary plugin candidates under
~/.codex/.tmp/plugins/plugins/...withagents/openai.yamlvalues such as:Examples included temporary candidates such as
coderabbit,brighthire,twilio-developer-kit,morningstar,teams, etc. The paths are invalid under the current loader rule, but this should remain a non-fatal warning. Instead, it surfaced as yet another crash screen.Temporary local mitigation: moved
~/.codex/.tmp/pluginsaside to a timestamped backup so the loader stops scanning those temporary candidates.The skill-loader icon-path crash persisted after moving the temporary plugin cache out of the way.
Latest crash screen:
This is still a warning-level loader event (
level":"WARN", message starts withignoring ...) but the Desktop app presents it as a fatal crash. From the user's perspective, the app is unusable: repeated unrelated warning/error paths keep surfacing asSIGKILLcrash screens.At this point the observed sequence in one session is:
thread_toolsfeature mismatch on thread resume.AuthRequiredafter app-state reset.github:github.interface.icon_small/interface.icon_large) surfacing as fatal crash screens.This looks like a broader Codex Desktop/runtime regression where recoverable warnings or integration/config problems are not isolated and instead crash the session.
Another independent crash screen in the same Desktop session:
This appears to be an app-server outgoing message / callback routing issue. Again, the event is logged as
WARN, but the Desktop UI shows it as a fatal crash.This further supports that the current Desktop build is not isolating recoverable app-server/plugin/MCP/telemetry warnings from the main session. The user keeps hitting unrelated
SIGKILLcrash screens during normal use.Latest state from app logs after the UI started rendering mostly
?characters in the crash window.The screenshot itself is no longer readable: the crash dialog renders repeated red
?/ punctuation instead of a usable error message. Pulling from the latest macOS app log shows the actual new failure cause.Log file:
Relevant lines:
Additional UI bug observed in the same log:
So the current failure set now includes:
documents,pdf,presentations,spreadsheets) no longer exist in discovered marketplaces.WARNentries close the app-server withSIGKILLand are broadcast as a fatal crash.?characters instead of a useful message.Open Config.tomlaction is wired toopen-config-toml, but that action is not implemented in Electron.At this point the Desktop app is effectively unusable even after the earlier local
thread_toolsmitigation and Figma MCP re-login.