Desktop app 26.820.7780.0: resuming WSL-hosted threads fails with "invalid transport in mcp_servers.codex_app"
Open 💬 67 comments Opened Aug 26, 2026 by huangshiyu13
💡 Likely answer: A maintainer (github-actions[bot], contributor)
responded on this thread — see the highlighted reply below.
Environment
- ChatGPT/Codex desktop app (MS Store,
OpenAI.Codex), version 26.820.7780.0, auto-updated 2026-08-26 - Windows 11 + WSL2 Ubuntu 26.04,
[desktop] runCodexInWindowsSubsystemForLinux = true - Bundled codex: 0.150.0-alpha.8 (WSL agent at
~/.codex/bin/wsl/<hash>/codex) - Affected threads were created with cli 0.149.0-alpha.4.1
Problem
After the app auto-updated to 26.820.7780.0, resuming any WSL-hosted thread fails with:
ChatGPT can't load config.toml, so this thread can't resume. Fix config.toml: invalid transport in mcp_servers.codex_app
Root cause (verified via app-server JSON-RPC reproduction)
The app sends thread/resume with a request-level config containing:
"mcp_servers.codex_app": {"enabled": true}
with no command/url. Codex (both 0.149 and 0.150) rejects any MCP entry without a transport:
failed to load configuration: invalid transport in `mcp_servers.codex_app`
Notes:
- The entry is assembled in-memory by the app (the
codex-app-toolsplugin'sdesktop-mcp.jsondoes containcommand: cmd.exe, but the transport fields are lost on the WSL path). Nothing is wrong with the user's config.toml, despite the error message telling the user to "fix config.toml". - Request-level config replaces any file-level
[mcp_servers.codex_app]table, and disabling the plugin does not stop the injection, so there is no config-level workaround. - Only the WSL code path produces the transport-less entry.
Workaround
Setting [desktop] runCodexInWindowsSubsystemForLinux = false (the Windows code path always sends a valid entry) — threads resume normally afterwards.
Expected fix
Include command/args in the WSL-path codex_app config, or omit the entry entirely when the transport cannot be resolved.
67 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
same issue here
Same issue. Windows + WSL2 + codex desktop. is there any workaround without having to install another version of codex desktop
Codex Desktop WSL thread/start injects partial mcp_servers.codex_app.enabled_tools without a transport, causing invalid transport in bundled app-server 0.150.0-alpha.8
Same issue, Windows 11 + WSL2 OpenSUSE Tumbleweed.
same issue here.
windows 11, WSL2, codex app.
same issue here. windows 11+WSL2
I can reproduce this exact issue on Windows 11 + WSL2 with Codex Desktop 26.820.60940 and:
The error is:
I verified that there is no
[mcp_servers.codex_app]entry in my user, WSL, project, or/etc/codexconfig.tomlfiles.I also traced
codex_appto the bundled plugin:and that file contains a valid transport:
So the source configuration itself appears valid. This is consistent with the report that the Desktop → WSL path is dropping the transport fields when constructing the request-level
mcp_servers.codex_appconfiguration.This started immediately after the 26.820.x update; the same setup was working before the update.
Also reproducible on app version 26.820.60940 (not MS Store), Windows NT 10.0.26200.0 x64,
same WSL agent mode. Confirmed the same workaround (Agent environment → Windows native)
resolves it.
Same issue on my end, Windows 11 + WSL2 running Ubuntu 24.04 using the Codex Desktop App. It all worked fine yesterday, updated before going to sleep and now can't resume because of this error.
This keeps happening. It's the third or fourth time they introduce breaking changes for the WSL subsystem with an update.
Please test these better. I know, mistakes happen, but this error would have been caught by simply trying to resume or start a new thread, which indicates no testing had been done.
Same
<img width="387" height="109" alt="Image" src="https://github.com/user-attachments/assets/84d43a70-290e-47eb-8b16-b16278abeab6" />
Same issue here.
Since updating this morning, I’ve been getting pop-up messages saying that it’s unavailable. At first, I didn’t realize that the problem was with Codex because the error message was very misleading. It took me an hour to discover that changing the configuration wouldn’t solve the problem.
As a temporary workaround, you can try the solution described in issue #40715. If you don’t want to modify the configuration, it seems that the only option is to roll back to a previous version of the Codex desktop app.
---
Additional investigation (AI-assisted analysis based on public source code, 2026-08-26)
I asked GPT to further inspect the public
openai/codexsource code, the bundled plugin manifest documented in #40715, and the app-server's JSON-RPC behavior.The specific code that constructs the Desktop request and performs bundled-plugin reconciliation is not public. The sections below therefore explicitly distinguish between "runtime facts that are already confirmed" and "implementation hypotheses that require maintainer verification."
Behavior that can be confirmed from the public runtime
thread/startandthread/resumeboth accept request-level configuration overrides. The app-server first converts the request'sconfigobject into a TOML override layer and then loads the final configuration.commandis present, it is parsed as a stdio transport;urlis present, it is parsed as a streamable HTTP transport;invalid transport.This validation happens before the MCP process is actually started. Therefore,
enabled = falsedoes not make a transport-less MCP entry valid.Therefore, an object containing only
{ "enabled": true }or{ "enabled_tools": [...] }cannot be treated as a complete standalone MCP server definition.codex-app-toolsmanifest itself includes a complete Windows stdio transport, includingcommand: "cmd.exe"and launcher arguments. Therefore, the more likely problem is not that the manifest lacks a transport, but that Desktop loses, omits, or overwrites the transport fields when constructing the request sent to the WSL app-server.thread/startrequest to succeed;/bin/falseas a dummy transport and disabling the server can restore ordinary chat, but the Desktop-owned tools are lost.0.149and0.150both reject the same transport-less MCP object. This is therefore not simply a WSL CLI version compatibility problem. The fact that the Windows-native path works while the WSL path fails points more directly to host-specific Desktop request construction.A likely configuration-composition failure
One implementation mechanism worth checking is a same-key configuration overlay collision.
The public override builder constructs a session-level TOML layer for dotted paths such as
mcp_servers.codex_app. If Desktop first inserts a complete manifest-derivedmcp_servers.codex_apptable and later inserts another table at the same path containing onlyenabledorenabled_tools, the later policy table may shadow the transport fields.This could explain the following observations:
command;However, this section should be explicitly treated as an implementation hypothesis, not as a root cause confirmed by the maintainers. The public configuration stack also contains recursive table-merge logic in other paths, so the exact precedence and merge behavior should be verified with a focused test or by logging the final request/config layer generated by Desktop.
Recommended fix
1. Fix the Desktop-side request construction first
The Desktop layer is the component that owns the
codex-app-toolstransport information and knows which host runs the app-server. Therefore, the primary fix should be made in Desktop.command/args/cwdthat is actually resolvable from the WSL environment.mcp_servers.codex_appentry completely.A policy-only object must not be sent to the generic MCP parser as if it were a complete server definition.
If a particular host cannot start the Desktop-owned MCP capability, ordinary thread creation and resumption should still proceed with a diagnostic warning. Missing internal capability should not make an otherwise valid thread appear to have a broken user
config.toml.2. Add a narrowly scoped backend defense if needed
If Desktop compatibility requires a backend change, the safer design would be to introduce an explicit, typed policy overlay:
enabled,enabled_tools, and similar policy fields to that existing server.The backend should not globally accept every transport-less MCP table. In particular:
commandnorurlshould remain invalid;enabledorenabled_toolsshould remain invalid, or produce a more structured error;codex_appwithout an explicit protocol contract.The singular
codex_appDesktop-owned namespace should also remain distinct from the pluralcodex_appshosted Apps/connector namespace used by the open-source runtime.3. Make plugin disablement and reconciliation authoritative
When
codex-app-toolsis explicitly disabled, that state should prevent its MCP, app, connector, and tool contributions from being injected into the request.Desktop reconciliation should preserve an explicit disabled state instead of reinstalling and re-enabling the bundled plugin on the next launch. This behavior should be tested independently from transport parsing.
The
/bin/falseworkaround described in #40715 is useful as a diagnostic workaround, but it is not a complete fix: it removes the Desktop-owned capabilitiesautomation_update,create_thread,send_message_to_thread,fork_thread, andhandoff_thread, and it may be undone by plugin reconciliation.4. Improve the diagnostic error boundary
When an internal Desktop-owned MCP contribution cannot be resolved for the target host, the error should identify the Desktop/plugin transport problem. It should not tell the user to modify
config.tomlwhen the invalid object was generated in memory by Desktop.Suggested regression tests
The tests should cover both:
The test matrix should include:
command,url, both fields together, and neither field;enabledandenabled_toolsrequest-override forms observed in existing reports;thread/startandthread/resumepaths;codex_appor no such entry at all;Acceptance criteria
A fix should satisfy all of the following:
thread/startandthread/resumesucceed with the bundled plugin enabled;mcp_servers.codex_appobject reaches the generic MCP parser;config.tomlwhen the invalid configuration was generated by Desktop;Overall, this looks more like a compatibility regression at the internal MCP injection boundary between Desktop and app-server than a problem with the user's configuration file or thread history.
same issue here
<img width="609" height="195" alt="Image" src="https://github.com/user-attachments/assets/a50685b1-6657-4b8e-881a-d8afc9518787" />
same issue here
I can reproduce the same issue on Windows 10.
Environment:
codex-cli 0.150.0-alpha.8codex-cli 0.149.1Additional control tests:
0.150.0-alpha.8binary also runsmcp listsuccessfully when invoked manually and reports no MCP servers configured.runCodexInWindowsSubsystemForLinux = falsein a clean Windows-native test directory.codex_apps_tools/codex_apps_server_infocaches did not resolve the WSL failure.codex-app-toolsplugin did not change the behavior.This appears consistent with the reported Desktop → WSL app-server initialization issue rather than a problem in the user's
config.toml.Same issue here on Windows + WSL2 with Codex Desktop
26.820.7780.0.I checked my
config.tomland there is nomcp_servers.codex_appentry in it.I also found the bundled
codex-app-toolsplugin and itsdesktop-mcp.jsondoes have a validcommand/argstransport. I even tried disabling the plugin and moving its cached/bundled copies out of.codex, but the error is still exactly the same:invalid transport in mcp_servers.codex_appSo this really looks like something is being injected incorrectly by the Desktop → WSL path, not an issue with the user config itself.
Happy to test a fix if needed.
A Codex bug drained all my tokens.
Codex's cross-directory patching and credential decryption failures caused excessive retries, wasting a large number of tokens.hahaha,me too.It is a good thing that we all have this problem.
临时解决方案
[mcp_servers.codex_app]
command = "/bin/false"
enabled = false
same issue
Additional reproduction and workaround limitation (Windows + WSL2)
I can reproduce this issue on Codex Desktop with the app configuration reporting version
26.820.60940and the WSL agent path enabled:The observed error is the same as in this issue:
Reproduction observations
mcp_servers.codex_apptransport error.thread/resume.config.tomldoes not contain a[mcp_servers.codex_app]entry. The configured MCP entry that is present (node_repl) has an explicitcommandtransport.~/.codexexists inside WSL, but there is no~/.codex/config.tomland no symlink redirecting that directory to Windows.Windows-native control test
Switching Agent environment → Windows native, restarting Codex Desktop, and reopening the same previously failing thread succeeds. This is a strong control indicating that the failure is specific to the Desktop → WSL execution path in this setup.
However, Windows-native mode is not a complete operational workaround when the repository itself lives in the WSL filesystem.
For a repository whose real path is of the form:
Codex Desktop in Windows-native mode exposed/configured the workspace as the equivalent of:
A read-only test from that thread:
then failed before Git could run because the Windows runtime rejected the working directory:
Running the same Git command directly inside WSL, against the actual repository, worked normally and showed a clean tracked branch at the time of the test.
So the Windows-native switch is useful as a diagnostic control and can make affected threads open again, but for repositories stored under the WSL filesystem it may require relocating/duplicating the repository to a true Windows filesystem before normal Desktop work is possible. That makes it a poor general workaround for users intentionally keeping development repositories inside WSL.
What these tests support
These observations are consistent with the issue report's conclusion that the failure is introduced on the Codex Desktop → WSL path, rather than by an invalid user
config.toml.They also add two practical data points:
I am not claiming to have independently verified the issue's internal JSON-RPC/root-cause analysis; the statements above are limited to directly observed behavior and configuration checks.
No repository files were modified during these tests.
---
Disclosure: This comment was generated by ChatGPT from my observed test results and is being posted through my GitHub account at my explicit request. ChatGPT did not independently access my computer; the observations above come from screenshots, configuration files, and command outputs that I provided for analysis.
Independently reproduced on Windows 11 + WSL2, same app version
26.820.7780.0. Your analysis matches everything I measured, so just three additions:1.
thread/startfails too, not onlythread/resume. Creating a brand-new chat produces the identical error, so the fix needs to cover both paths. Counted across one day of desktop logs on the affected machine:2. The
apps_mcp_path_overridewarning is a red herring — worth stating explicitly, because it is emitted bycodex_app_server::request_processors::config_processorright alongside the failure and looks like the cause:It appears the same number of times in a working session (
runCodexInWindowsSubsystemForLinux = false, zeroinvalid transport) as in a failing one, and it predates the regression — it is present in logs from days before the update. Setting[features] apps_mcp_path_override = trueinconfig.tomlalso changes nothing.3. Extra confirmation that the entry is assembled in-memory. Beyond disabling the plugin, I also rewrote the bundled plugin's
desktop-mcp.json— in both the installed plugin cache and the materialised bundled-marketplace copy — to a valid POSIX entry (scripts/launch_codex_app_tools_mcpplusserver.mjs, absolute paths,cwdset). The patched files survive an app restart untouched, and the error is unchanged. So on the WSL path the manifest's transport fields are not merely lost, they are never consulted for this entry.---
This comment was written by Claude (Anthropic's Claude Code) and posted with my explicit permission, summarising a debugging session Claude ran on the affected machine. Every measurement above was executed and verified there.
Additional confirmation: WSL launch command omits the Desktop MCP transport
This is an additional reproduction on:
OpenAI.Codex_26.820.7780.0_x64__2p2nqsd0c76g026.820.609400.150.0-alpha.826100, WSL2 Ubuntu26.04The Windows and WSL agent paths differ in the app-server command line:
mcp_servers.codex_apptransport. Nevertheless, duringthread/start, Desktop injects a request-levelmcp_servers.codex_apppolicy object containingenabled_tools(and/orenabled) withoutcommandorurl.That produces:
This also explains why the error is misleading: the user's
config.tomldoes not need to containmcp_servers.codex_app; the invalid object is assembled by Desktop for the WSL app-server request.Isolation and transport validation
thread/startwith the injected policy-only entry fails during configuration parsing.invalid transporterror disappear.codex-app-toolstransport, together withCODEX_APP_TOOLS_PIPE_PATHand the requiredWSLENVpropagation, brings thecodex_appMCP status toready.Workaround tested
A local wrapper can be registered as the WSL-side transport:
The wrapper:
\\\\.\\pipe\\codex-browser-use-*;CODEX_APP_TOOLS_PIPE_PATH;WSLENVso the pipe path crosses the WSL/Windows boundary;codex-app-tools/server.mjsthrough Windowscmd.exe.With this workaround, WSL
thread/startreachescodex_app: ready. It is only a temporary compatibility workaround; the product fix should make Desktop pass the complete transport (or omit the entry) on the WSL path.No personal usernames, workspace names, pipe IDs, or session IDs are included here.
这么严重的bug,都过去几个小时了,还不修??就这??
same here...
<img width="778" height="219" alt="Image" src="https://github.com/user-attachments/assets/71b949e4-4f13-460c-b843-4b210928afc8" />
Same issue
How is it even an issue in prod? How many devs already performed a seppuku?
Additional reproduction and root-cause evidence from Windows Store build 26.820.7780.0 with the bundled WSL CLI 0.150.0-alpha.8:
mcp_servers.codex_app.thread/startandthread/resume, including ChatGPT Project-backed tasks.mcp_servers.codex_apptransport override is supplied only on the non-WSL path, while the renderer still addsmcp_servers.codex_app.enabled_toolsfor local WSL thread requests.enabled_toolsbut nocommandorurl, which the bundled app-server correctly rejects asinvalid transport.A temporary file-level workaround was validated:
After a full app restart, new WSL tasks start successfully. This is only a diagnostic workaround: it disables Codex app-specific task/automation MCP tools inside WSL, so it is not an acceptable product fix.
Expected product fix: when constructing WSL thread start/resume config, either inject a complete Linux-usable transport for
codex_app, or omit the entire table includingenabled_tools. The error should also identify Desktop-generated runtime config rather than instructing users to repair a cleanconfig.toml.UPD: disregard, sorry, I can confirm that 26.818.8289.0 specifically works fine.
DO NOT TRY TO REINSTALL OLDER VERSIONS
they also broke history compatibility so you'll only get other errors instead
Mileage may vary, but I reverted to the closest previous version (26.818) without trouble.
Yes, sorry, I can confirm that 26.818.8289.0 specifically works fine.
yeah same here after the update
I can confirm the same regression on Windows 11 + WSL2 with Codex Desktop 26.820.x. Both creating new chats and resuming existing chats fail with
invalid transport in mcp_servers.codex_app, while my userconfig.tomlhas nomcp_servers.codex_appentry. WSL is my required development environment, so switching the agent to Windows-native is not a viable workaround for me. This is a complete work blocker.Given that this regression completely blocks a supported development workflow for paying users, OpenAI should also consider compensation for affected accounts. At minimum, users impacted by the WSL outage should receive additional/banked usage resets (or equivalent credits) for the period in which Codex Desktop was unusable in their required environment. We are paying for access to this service, and a release regression that prevents all new/resumed WSL chats from working should not consume users' paid usage window without remedy.
Independent reproduction on the same Desktop/Codex build.
Environment:
One additional observation: this affects brand-new threads for me as well as existing/resumed threads, so the malformed codex_app override may also be present on the thread/start path, not only thread/resume.
I also ran the Desktop-bundled codex.exe:
codex.exe doctor --json
It reports:
config.load: ok
CODEX_HOME: C:\Users\Chinoman10\.codex
config.toml parse: ok
configured MCP servers: 1
MCP server: node_repl
There is no mcp_servers.codex_app entry in the physical config and doctor does not see one. So this independently confirms that codex_app is introduced after normal config loading / by the Desktop request-level configuration.
Happy to collect a thread/start JSON-RPC payload or additional diagnostics if useful.
WSL-mode Chat Creation Fails with invalid transport in mcp_servers
Bug Description
After the recent update of the Codex Desktop app, creating or resuming chat threads in WSL-hosted mode/paths completely fails. The UI blocks the conversation with the following error:"ChatGPT failed to load config.toml, so this thread cannot continue. Please fix config.toml: invalid transport in mcp_servers.codex_app (or mcp_servers.node_repl)."While the native Windows environment works perfectly fine, running Codex via WSL or interacting with threads in the WSL file system triggers this deadlock.Relevant
Configuration Snippet
Checking the generated config.toml reveals that the desktop app automatically injects native Windows environment variables and a Named Pipe directory into the MCP server configuration:toml[mcp_servers.node_repl]
args = []
command = "/mnt/c/Users/Administrator/AppData/Local/OpenAI/Codex/runtimes/cua_node/950613ca46815e82/bin/node_repl.exe"
startup_timeout_sec = 120
[mcp_servers.node_repl.env]
...
SKY_CUA_NATIVE_PIPE = "1"
SKY_CUA_NATIVE_PIPE_DIRECTORY = '\\.\pipe\codex-computer-use-54dca94f-2c05-4913-a981-899dfb73e3bf'
WSLENV = "NODE_REPL_NATIVE_PIPE_CONNECT_TIMEOUT_MS/w:..."
Probable Root Cause
The root cause is an environment leak/pollution across the OS boundary:
The scope and root cause here are now documented in considerable detail, and more affected users keep arriving. Why has there still been no visible acknowledgement from an OpenAI maintainer? For people whose repositories and toolchains must run in WSL this is a full work blocker, not a minor feature regression. A short confirmation that the incident is known and being worked on would already be valuable.
Windows 11 + WSL2. Codex Desktop shows "ChatGPT can't load config.toml... invalid transport in mcp_servers.codex_app" when resuming an existing WSL-hosted thread. The issue started after updating to the latest desktop version. My config.toml does not contain an invalid codex_app transport.
Same issue here with WSL. Has any fix come up?
Confirming the same issue here on Windows 11 + WSL2.
Codex Desktop fails to create new WSL tasks with:
failed to load configuration: invalid transport in mcp_servers.codex_app
Existing WSL tasks also fail to resume with:
ChatGPT can't load config.toml, so this thread can't resume.
Additional diagnostic update:
I identified the actual WSL Codex runtime bundled/used by Desktop:
/mnt/c/Users/Ryan/.codex/bin/wsl/bf0dd1e87d338bce/codexVersion:
codex-cli 0.150.0-alpha.8This is separate from my standalone WSL Codex CLI:
/home/ryan/.local/bin/codexwhich is version
0.141.0.I also confirmed again that
/home/ryan/.codex/config.tomlcontains no[mcp_servers.*]entries and nocodex_appreference. A recursive search of WSL-side TOML files likewise finds nocodex_appormcp_serversconfiguration.The clean-room reproduction remains:
/home/ryan/dev/codex-empty-test.codex/config.toml0.150.0-alpha.8failed to load configuration: invalid transport in mcp_servers.codex_appFor comparison, launching my standalone Codex CLI (
0.141.0) directly inside the same WSL distro and the same empty directory succeeds and/statusworks.This further isolates the problem to the Codex Desktop → WSL runtime launch/configuration path rather than WSL itself or user/project configuration.
Feedback ID:
no-active-thread-01a03f1d-ce0c-7810-91e2-63cfb9438357After the latest Codex Desktop update on Windows, I can no longer open several existing projects/threads when using WSL.
The error is:
The strange part is that I do not have any
mcp_servers.codex_appentry in my~/.codex/config.toml, so this looks like something Codex Desktop is injecting internally.My setup is:
These threads were working normally before the update, and the session files are still present under
.codex, so it does not look like the data itself was deleted.I also tested the suggested workaround of switching to:
That avoids the
codex_apperror, but then the native Windows Codex runtime fails with:So at the moment I am stuck between:
I normally use Codex through WSL and would really prefer not to switch my whole workflow to native Windows.
This is quite serious for me because I have a lot of important project context inside those existing Codex threads.
Is there any known workaround for WSL users, or is a fix for this regression already being worked on?
I have an experimental workaround that preserves WSL mode (
runCodexInWindowsSubsystemForLinux = true) and is working for me on:26.820.7780.00.150.0-alpha.8I have tested:
All are working with the workaround applied.
Additional root-cause detail
I put a transparent JSON-RPC proxy between Codex Desktop and the WSL
codex app-serverand captured the actualthread/start/thread/resumerequests.On my build the malformed request-level config is sent as a flattened key:
For example,
thread/start.configcontains:but no:
or:
The same malformed flattened key is present on
thread/resume.Removing the transport-less
mcp_servers.codex_app.*request-level keys before forwarding the JSON-RPC request makes both operations succeed.Importantly, this does not require modifying
config.toml.Temporary WSL-preserving workaround
This is a hack and should only be used until an official fix ships.
It requires a native Linux Bun installation inside WSL.
1. Locate the WSL Codex runtime
Codex Desktop currently launches something similar to:
The
<hash>directory changes between builds.In my case it was:
That directory contained both:
2. Copy the real runtime into the Linux filesystem
Do not leave the backup beside the staged Windows binary: Codex Desktop re-stages that directory on startup and deletes/replaces sibling files.
Instead:
The
codex-code-mode-hostcopy is required.Without it, normal threads may open successfully but execution later fails with:
The real Codex executable resolves that helper relative to its executable directory.
3. Create the JSON-RPC shim
I used the following Bun/TypeScript proxy as
~/codex-app-shim.ts:Replace
<wsl-user>inREAL_CODEX.4. Create a launcher
For example:
5. Bind-mount it over Desktop's staged WSL binary
Simply replacing the staged
codexfile does not work because Desktop re-stages the ELF binary on startup.A file bind mount does survive that restaging:
Verification:
should show the shell script rather than the ELF binary.
Then reopen Codex Desktop.
The resulting process chain should be approximately:
The proxy removes only transport-less
mcp_servers.codex_app.*overrides fromthread/start/thread/resume.Everything else is forwarded unchanged.
Caveats
This is intentionally a temporary workaround.
wsl --shutdown/ reboot and must be reapplied.<hash>directory, requiring the realcodexandcodex-code-mode-hostfiles to be recopied and the bind mount reapplied to the new path.codex-code-mode-host; thread loading can appear fixed while actual execution remains broken without it.config.tomlfor this issue. The malformed configuration is injected by Desktop at request time.After applying this I can create new WSL threads, resume existing WSL threads, attach/send files, and execute normal agent/code-mode work while keeping:
Hopefully the capture of the flattened
mcp_servers.codex_app.enabled_toolskey helps narrow down where the Desktop WSL config translation is dropping the transport.This has worked for me https://github.com/openai/codex/issues/40881#issuecomment-5427361016 (WSL2 + Windows 11 + codex-cli 0.149.1)
Allows me to see old threads, no mcp error. It gave a couldn't open file, but... it is working for now for me.
I can independently reproduce this issue on Windows 11 with WSL2.
Environment:
My local logs show that on 2026-08-25 the app was running build 26.818.8289.0, detected the update to 26.820.7780.0, and completed the download. After the update, resuming WSL-hosted threads began failing with:
"failed to load configuration: invalid transport in mcp_servers.codex_app"
The first recorded failure was on 2026-08-26 at 00:31:23Z.
The NotebookLM MCP remains enabled and healthy in the CLI, and no user MCP configuration was changed. The codex_app entry is not present in my user config.toml; it appears to be injected by the Desktop app on the WSL path.
This confirms the same regression described here and suggests the issue is specifically related to the WSL integration in Desktop 26.820.7780.0.
Final isolation result:
I temporarily changed:
runCodexInWindowsSubsystemForLinux = falseand fully restarted Codex Desktop.
Using the same Desktop build (
26.820.7780.0) and the same local Windows repository (C:\Users\Ryan\Documents\ChatGPT\arr-remux), Codex then starts and runs normally.With:
runCodexInWindowsSubsystemForLinux = truethe same repository fails with:
failed to load configuration: invalid transport in mcp_servers.codex_appSo repository location is not the determining factor. A Windows-hosted repository also fails when the Codex agent itself is configured to run through WSL.
Current isolation:
mcp_servers.codex_appcodex-cli 0.150.0-alpha.8This appears conclusively isolated to the Desktop → WSL agent launch/configuration path.
Additional before/after evidence: dummy stdio entry unblocks new WSL chats
I reproduced the same failure with:
The plugin's cached desktop-mcp.json contains a real codex_app transport using cmd.exe and the bundled launcher. Nevertheless, WSL thread/start repeatedly failed with:
failed to load configuration: invalid transport in 'mcp_servers.codex_app'
Local log evidence:
I then applied this temporary user-config workaround:
[mcp_servers.codex_app]
transport = "stdio"
command = "echo"
args = ["dummy"]
After restarting the app, the next Desktop log started at 15:13:16.094Z, contained zero invalid transport / failed to load configuration occurrences, and recorded two thread/start completions with errorCode=null at 15:13:34.070Z and 15:13:34.071Z. A newly created conversation then recorded activity at 15:13:43.776Z.
This workaround is diagnostic only. echo dummy is not an MCP/JSON-RPC server and exits immediately, so it can cause EOF/handshake failures and can mask or replace the actual Desktop-owned codex_app tools.
The product should either inject a complete host-valid internal transport or omit the internal entry. A malformed Desktop-generated internal MCP overlay should not block all new chat creation or require manual TOML surgery; the app should recover with an actionable diagnostic while preserving ordinary chat access.
same issue
Alternative WSL-preserving workaround: Codex VS Code extension
For anyone primarily blocked because they need to keep working natively in WSL, I've had good results using the official OpenAI Codex extension in VS Code with the project opened through VS Code Remote WSL.
This does not repair Codex Desktop or make the broken Desktop threads resumable, but it has allowed me to continue the same project workflow without switching the project to Windows-native execution.
Tested successfully with:
/home/..., not via\\wsl.localhostchrome-devtools-mcpregistered in WSL~/.codex/config.tomlOne important detail: after adding an MCP server to the WSL Codex config, I had to start a fresh VS Code Codex agent/session before the MCP tools appeared; the existing session did not hot-reload them.
So for my use case this has been a practical temporary workaround while waiting for the Desktop → WSL regression to be fixed, without changing
runCodexInWindowsSubsystemForLinuxor moving the development workflow to Windows.Fixed it with my chatGPT, lol
This is the comand it told me to run and it worked. Ask your GPT to match you PC settings, because i am using MacOS.
Confirming this on Windows + WSL2 with Codex Desktop 26.820.60940 and bundled codex-cli 0.150.0-alpha.8.
I get the same invalid transport in mcp_servers.codex_app failure when runCodexInWindowsSubsystemForLinux = true. The codex_app block is not present in my config.toml and appears to be injected dynamically by Desktop.
Setting runCodexInWindowsSubsystemForLinux = false restores normal operation.
During troubleshooting I also regenerated the local Codex state database. The underlying session files remained intact, but Desktop temporarily displayed No chats / No projects until the database reindexed them. My active DB eventually indexed 48 threads, while the preserved previous DB contained only 11 indexed threads despite roughly 47 session files existing.
Ubuntu/WSL2 itself is healthy and the Linux repository/toolchain remain intact. This appears isolated to the Desktop Windows-to-WSL agent bridge and Desktop session/index state.
Thanks for the bug report. We understand the problem and are working on expediting a fix.
Environment:
runCodexInWindowsSubsystemForLinux = trueWhen opening an existing thread, Codex shows:
The same problem also happens when creating a completely new chat:
There is no
[mcp_servers.codex_app]entry in myC:\Users\RENE\.codex\config.toml, so this appears to be related to the configuration injected internally by Codex Desktop when running through WSL 2.Disabling the
codex-app-tools@openai-bundledplugin did not fix the issue.As a workaround, changing:
runCodexInWindowsSubsystemForLinux = trueto:
runCodexInWindowsSubsystemForLinux = falseallows Codex Desktop to create/open chats again. However, this is not ideal because my development environment and projects run inside WSL 2.
Independent reproduction on the current Stable Windows package. This appears to match this issue exactly.
Environment
OpenAI.Codex 26.820.7780.026.820.609400.150.0-alpha.8codex -c features.code_mode_host=true app-server --analytics-default-enabledCODEX_HOMEused by the WSL app-server: Windows-side.codexdirectory mounted into WSLReproduction
testfails before execution with:Read-only diagnostics
The persisted
config.tomldoes not contain[mcp_servers.codex_app].Using the exact bundled WSL Codex executable and the same
CODEX_HOME:succeeds and lists the valid
node_replMCP server. There is nocodex_appentry and no transport parse error in this direct CLI path.Desktop logs show the failure specifically at
thread/resumeafter other reads succeed (config/read,app/read,thread/read,model/list):The same failure repeats for multiple conversations.
Isolation tests
Tested one variable at a time, with full Desktop/app-server restart between tests:
apps=true -> false: no effectplugins=true -> false: no effectenable_mcp_apps=falsethroughoutFeature flags were restored afterward:
apps=trueenable_mcp_apps=falseplugins=trueremote_plugin=trueNo user-level
[mcp_servers.codex_app]entry was added, and no.codexdata was cleared.Conclusion from this reproduction
The evidence is consistent with a Desktop-generated/effective runtime MCP entry being injected on the WSL
thread/start/thread/resumepath without a valid transport. The persistedconfig.tomlitself parses successfully, so the current UI message telling the user to fixconfig.tomlis misleading in this case.I can provide additional redacted Desktop log excerpts if maintainers need them.
Independent reproduction with additional controls.
Environment:
OpenAI.Codex 26.820.7780.026.820.6094010.0.26200x640.150.0-alpha.8[desktop] runCodexInWindowsSubsystemForLinux = trueObserved behavior:
failed to load configuration: invalid transport in mcp_servers.codex_appfor boththread/startand multiplethread/resumerequests.mcp_servers.codex_appentry.mcp_servers.codex_appfailure is independent of database corruption.This supports the reported Desktop-to-WSL request-level MCP injection regression rather than persistent user configuration or SQLite corruption. The Windows-native workaround is not suitable here because the projects and toolchain need to remain in WSL.
Happy to test a corrected build.
Independent reproduction on the Microsoft Store build.
Environment:
OpenAI.Codex 26.820.7780.026.818.5229.00.150.0-alpha.8Observed:
failed to load configuration: invalid transport in mcp_servers.codex_appDiagnostics:
config.tomlcontainsmcp_servers.codex_appor atransportentry.codex-app-toolsplugin injectscodex_app.codex-app-toolsin user configuration. After restarting Desktop, the app automatically restoredenabled = true, and the WSL error remained. The original configuration state is therefore already restored.This started after the package change from
26.818.5229.0to26.820.7780.0; this is a temporal correlation, not proof that the update itself caused the regression.No project-specific configuration is involved.
Same issue, using the integrated terminal in WSL mode has been broken for me for a week or so as well - feels like WSL support is an afterthought
I am getting this prompt: ChatGPT cannot load config.toml, so this conversation thread cannot continue. Please fix config.toml: invalid transport in mcp_servers.codex_app. It is frustrating as it stops me from working. Please fix this as soon as possible.
I found a workaround for this issue on Codex Desktop + WSL.
I was getting:
config.toml error: invalid transport for mcp_servers.codex_appand couldn't open/resume my existing project chats in Codex Desktop.
Workaround
runCodexInWindowsSubsystemForLinux.In my case, simply opening/loading the conversation once from the phone made it accessible again from Codex Desktop.
I did not need to modify
mcp_servers.codex_app, disable WSL, or move my repositories out of WSL.My projects are stored under WSL (
/home/...), so disabling WSL was not a viable workaround for me.This looks like opening the conversation through Remote Control causes some Codex app/session state to be initialized or refreshed, after which Desktop can resume the conversation normally.
I hope this helps others affected by the same regression.
Windows 11
Codex Desktop
WSL / Ubuntu
Projects stored inside /home/...
runCodexInWindowsSubsystemForLinux = true
Support, PLEASE, enable your speed!!!
You can downgrade to 26.818.8289.0 for now. Anything below this version breaks conversation paging. With this version, there are no WSL issues and any conversations started in 26.820.7780.0 still work as they should.
Get-AppxPackage -Name OpenAI.Codex | Remove-AppxPackageAdd-AppxPackage -Path ".\ChatGPT-x64.msix"check_for_update_on_startup = falsein config.toml, otherwise it will update on its ownVerified WSL-preserving workaround for
invalid transport in mcp_servers.codex_appI reproduced this issue with:
26.820.60940OpenAI.Codex_26.820.7780.0_x64__2p2nqsd0c76g0codex-cli 0.150.0-alpha.8runCodexInWindowsSubsystemForLinux = trueBoth new and existing WSL threads failed with:
A community report in #40881 indicates that Desktop
26.820.9563.0may contain a fix. Check for an official update first. If the error still occurs, the following temporary workaround restored WSL operation in my environment.Temporary workaround
Fully close Codex Desktop.
Back up:
Add this user-level override:
Keep WSL execution enabled:
Why this works:
command = "/usr/bin/true"gives the MCP entry a syntactically valid local STDIO transport.enabled = falseprevents the placeholder server from being used.This is a verified temporary workaround, not an official OpenAI fix or root-cause statement.
Limitation
Internal capabilities supplied specifically by the
codex_appMCP server may be unavailable while this override is active.Do not:
.codex\bin\wsl\...;[mcp_servers.codex_app]section;config.toml, because it may contain private endpoints or credentials;Verification
Run this from Windows PowerShell to locate the current bundled WSL CLI dynamically:
Expected
codex_approw:The exact spacing is not important.
Unsupportedin theAuthcolumn is not the transport error.After restarting Desktop, verify:
/home/...Linux project.Optional ChatGPT-assisted recovery prompt
If you want ChatGPT to guide the recovery, give it this prompt:
In my environment, the workaround was verified by:
/home/...;Official references:
Update: 26.820.9563.0 appears to fix
codex_apptransport error, but WSL project-path translation is now brokenAfter updating Codex Desktop to:
OpenAI.Codex_26.820.9563.0_x64__2p2nqsd0c76g0I no longer receive the previous:
invalid transport in mcp_servers.codex_apperror.
However, WSL sessions now fail with:
Invalid request: AbsolutePathBuf deserialized without a base pathI asked Codex to perform a read-only diagnostic of its inherited working directory. No files or state were modified.
The working directory received by Codex had this form:
The expected WSL project path is:
The apparent failure is that Desktop supplies a Windows-form path:
to the WSL app-server without translating it to WSL path syntax.
The Windows path is then treated as a relative Unix path and appended beneath the app-server resources directory.
Additional diagnostics confirmed that the real WSL repository is healthy:
Explicitly changing directory to the correct
/home/...path allows individual shell commands to execute, but it does not repair the inherited Desktop/app-server project path. Anything relying on the default working directory can still fail.The WSL
codex app-serveritself is running from:So this appears to be a Desktop → WSL path-normalization regression:
That malformed path is also consistent with the new:
AbsolutePathBuf deserialized without a base patherror, since
C:\...is not an absolute path under Unix/WSL path semantics.The previous
mcp_servers.codex_appfailure appears resolved for me in 26.820.9563.0, but WSL execution is still blocked by this new path-handoff problem.This regression has effectively made Codex unusable for my normal Windows + WSL workflow.
I am on
Powered by Codex & OWL Version 26.820.60940(released Aug 26, 2026). Setting:does let affected threads resume, but it is not a real workaround for WSL users.
With the agent now running on Windows, my WSL-based skills and MCP servers no longer work correctly. They depend on Linux shell scripts, Linux paths, and the WSL runtime environment. Changing only the integrated terminal shell to wsl does not change where Codex itself launches skills/MCP processes.
So the choice is currently:
That means this update breaks both continuation of existing work and the tooling needed for real WSL development. Asking users to switch the execution environment is not an acceptable workaround when it silently changes the runtime contract for their skills and MCP servers.
Please prioritize a fix for the WSL codex_app MCP injection path, and consider providing a supported rollback/version-pinning path for the Desktop app. Auto-updating into a release that disables a core development workflow is extremely disruptive.
🤦
Read my comment for fix the bug: Workaround
I can reproduce what appears to be the same
mcp_servers.codex_appfailure on Windows, but without using the WSL execution path.My setup uses an external/shared Codex App Server over WebSocket:
Codex Desktop is then pointed at that shared App Server via:
With the shared App Server running, Codex Desktop fails both when resuming an existing thread and when starting a new thread with:
Important observations:
[mcp_servers.codex_app]entry in my userconfig.toml.thread/resume/thread/start.does not solve this case, because this reproduction is not using the WSL execution path.
So there may be another affected path in addition to Desktop → WSL:
This looks very similar to the request-level
codex_appconfiguration issue described here, but I cannot yet confirm that the exact internal cause is identical.It may be worth checking whether the Desktop-side
codex_appMCP configuration injected into requests assumes that the App Server was launched and managed directly by Codex Desktop, and becomes incomplete when Desktop connects to an externally launched App Server.