The Codex Changelog
All Episodes
Codex Fixes Remote Sandbox and MCP Error Handling

Codex Fixes Remote Sandbox and MCP Error Handling

0:00|0:00

We unpack a subtle cross-platform sandbox bug in remote code execution, where path rules were being evaluated on the client OS instead of the remote executor. The episode also covers model-aware tool routing updates and improved preservation of structured MCP errors for more reliable integrations.


Chapter 1

Remote Sandbox Enforcement Across OS Boundaries

Ethan Park

Imagine you are sitting on your Mac, sending code execution tasks over a WebSocket to a remote Linux executor. You think your sensitive files are completely locked down behind deny read rules. But, uh, what if the sandbox was actually looking at your local Mac file paths instead of the Linux box where the code is actually running? Big thanks to Jellypod for sponsoring today's episode of the daily show. Today, we are digging into Codex zero point one fifty-one point zero and a really fascinating set of security and sandbox updates.

Maya

Yeah, that, that local versus remote path mix up is such a wild bug. In open source release notes for Codex zero point one fifty-one point zero, they highlight how remote sandbox enforcement was upgraded to use the executor's actual home directory, operating system, and path conventions. Before this fix, if you were running the Codex CLI on macOS or Windows against a remote Linux target, the client was evaluating path rules like deny read using local path semantics. So, um, if you told it to block access to relative paths like tilde slash dot ssh, your local machine was trying to resolve that before sending it over.

Ethan Park

Wait, so if your local client is on Windows using backslashes, or on macOS, it might calculate a path boundary that means absolutely nothing to a remote Linux environment using standard POSIX slashes?

Maya

Exactly! The remote Linux worker has a completely different home directory, like slash home slash deploy, and uses forward slashes. If the client evaluates the rule against C backslash Users or your Mac home folder, the remote executor doesn't realize those Linux paths should be blocked. The deny read sandbox filter basically misses the target entirely.

Ethan Park

That is a massive cross platform sandbox flaw. So how did pull requests 41204, 41207, and 41209 actually fix this under the hood?

Maya

They shifted path resolution entirely to the remote executor's turn environment. Now, environment variables like CODEX EXECUTOR HOME, the native path separators, and actual operating system conventions are propagated across the boundary. So when a rule says deny read for tilde slash dot ssh, it evaluates directly against slash home slash deploy slash dot ssh on the remote machine using Linux path rules, regardless of what OS the CLI client is running on.

Ethan Park

That makes so much sense. If you are a developer setting up remote WebSocket executors right now, what is the best way to test this? You will definitely want to open up your repository level dot codex slash config dot toml file and define explicit deny read boundaries. Then run a test turn using a client on Windows or Mac connected to your Linux build box, and verify that attempting to read outside the sandbox throws an immediate permission denied error directly from the executor environment.

Chapter 2

Model Aware Tool Routing and Preserved MCP Error Payloads

Maya

Speaking of fixing subtle bugs across turn boundaries, pull requests 41195 and 41206 tackle something that used to drive me crazy when working with multi model setups. Have you ever been in the middle of an interactive session, switched models mid stream, or had the system fall back to an Ultra reasoning model, and suddenly half your tools just vanished?

Ethan Park

Oh yeah, or worse, the reasoning parameters get corrupted because the system assumes the new model shares the exact same tool schema and reasoning effort budget as the old one.

Maya

Right! That was happening because the old tool router held onto a static plan created at the beginning of the session. In zero point one fifty-one point zero, the ToolRouter got a complete refactor. It now calculates model specific tool plans dynamically on every single turn.

Ethan Park

Ah, so if you start with one model and then hit a fallback or explicitly swap models, the updated ToolRouter re-evaluates tool availability and reasoning effort specifically for the target model. Your specialized tools stay accessible, and the reasoning fallback remains model aware throughout the entire turn.

Maya

Exactly. And while we are talking about turn execution, pull request 41196 brings a huge improvement for anyone building custom integrations on top of the app server or Model Context Protocol servers. Previously, if an MCP server hit an error, the app server would often flatten that structured error into a plain text string exception.

Ethan Park

Which makes programmatic error handling practically impossible because your client just gets an unparseable blob of text instead of the original JSON RPC error code and structured data.

Maya

Precisely. Now, structured MCP tool and resource errors are fully preserved in app server responses. You get the exact structured error response back, so your client extensions can inspect, log, or recover from specific tool failures cleanly.

Ethan Park

That is a massive win for reliability. If you are running mixed operating system remote executor setups or building custom MCP extensions, definitely update to Codex zero point one fifty-one point zero or the latest alpha releases, and double check your path rules and error handlers. Alright, that is it for today. Good chatting with you, talk soon!