The codex-exec-server crate provides a standalone JSON-RPC server designed to manage subprocess execution and filesystem operations. It acts as a bridge between a Codex session and a potentially remote or sandboxed execution environment. By leveraging codex-utils-pty, it supports both interactive PTY-based sessions and non-interactive piped execution across different operating systems codex-rs/exec-server/Cargo.toml21-29
The Exec Server decouples the Codex agent's logic from the environment where code is executed. This is essential for supporting remote execution environments (e.g., cloud-based sandboxes) or local execution with strict security boundaries.
ExecServerClient: The primary interface for clients to interact with a remote execution server via WebSockets codex-rs/exec-server/src/lib.rs47EnvironmentManager: A shared registry that manages the lifecycle of execution environments, creating local or remote Environment instances based on CODEX_EXEC_SERVER_URL or an environments.toml configuration codex-rs/exec-server/src/environment.rs78-84ExecBackend: A trait that abstracts the process of spawning and managing subprocesses, implemented by LocalProcess and RemoteProcess codex-rs/exec-server/src/lib.rs106-112ExecutorFileSystem: A trait providing filesystem operations (read, write, metadata), implemented locally or via RPC for remote servers codex-rs/exec-server/src/lib.rs61The following diagram maps the conceptual "Run Command" request to the specific code entities involved in the dispatch and execution.
Execution Dispatch Path
Sources: codex-rs/exec-server/src/environment.rs78-84 codex-rs/exec-server/src/client.rs181-189 codex-rs/exec-server/src/connection.rs228-231 codex-rs/exec-server/src/local_process.rs175-197
Communication with the server occurs over WebSockets or Stdio using a JSON-RPC 2.0 compatible protocol managed by JsonRpcConnection codex-rs/exec-server/src/connection.rs228-231
Before any commands are executed, the client must send an initialize request. This establishes client identity and allows for session resumption codex-rs/exec-server/src/client.rs102-105
InitializeParams containing client_name and optional resume_session_id codex-rs/exec-server/src/lib.rs166InitializeResponse containing environment details codex-rs/exec-server/src/lib.rs167initialized notification after receiving the response codex-rs/exec-server/src/client.rs103The server implements several methods for controlling subprocesses codex-rs/exec-server/src/client.rs50-57:
| Method | Protocol Constant | Description |
|---|---|---|
process/start | EXEC_METHOD | Spawns a new process (PTY or Pipe) codex-rs/exec-server/src/client.rs52 |
process/read | EXEC_READ_METHOD | Long-polls for output from a specific process codex-rs/exec-server/src/client.rs54 |
process/write | EXEC_WRITE_METHOD | Writes data to the stdin of a running process codex-rs/exec-server/src/client.rs57 |
process/signal | EXEC_SIGNAL_METHOD | Sends a signal (e.g., SIGINT) to the process codex-rs/exec-server/src/client.rs55 |
process/terminate | EXEC_TERMINATE_METHOD | Kills a running process codex-rs/exec-server/src/client.rs56 |
The server streams process events back to the client codex-rs/exec-server/src/client.rs50-53:
process/output: ExecOutputDeltaNotification containing raw bytes codex-rs/exec-server/src/client.rs53process/exited: ExecExitedNotification sent when the process terminates codex-rs/exec-server/src/client.rs51process/closed: ExecClosedNotification sent when output streams are drained codex-rs/exec-server/src/client.rs50Sources: codex-rs/exec-server/src/client.rs37-115 codex-rs/exec-server/src/lib.rs113-181
The server provides filesystem operations via the ExecutorFileSystem trait, implemented locally or remotely codex-rs/exec-server/src/lib.rs61
| RPC Method | Parameters | Description |
|---|---|---|
fs/readFile | FsReadFileParams | Reads file contents codex-rs/exec-server/src/client.rs93 |
fs/writeFile | FsWriteFileParams | Writes data to a file codex-rs/exec-server/src/client.rs99 |
fs/createDirectory | FsCreateDirectoryParams | Creates directories codex-rs/exec-server/src/client.rs83 |
fs/getMetadata | FsGetMetadataParams | Retrieves file metadata codex-rs/exec-server/src/client.rs85 |
fs/readDirectory | FsReadDirectoryParams | Lists directory contents codex-rs/exec-server/src/client.rs91 |
fs/remove | FsRemoveParams | Deletes files or directories codex-rs/exec-server/src/client.rs95 |
fs/walk | FsWalkParams | Recursively walks a directory codex-rs/exec-server/src/client.rs97 |
fs/canonicalize | FsCanonicalizeParams | Resolves absolute paths codex-rs/exec-server/src/client.rs77 |
Sources: codex-rs/exec-server/src/client.rs65-100 codex-rs/exec-server/src/lib.rs136-160
The EnvironmentManager tracks environments by ID (e.g., local, remote) codex-rs/exec-server/src/environment.rs104-105
LocalProcess codex-rs/exec-server/src/environment.rs35ExecServerClient to a remote endpoint codex-rs/exec-server/src/environment.rs39-40The FileSystemSandboxRunner prepares and executes filesystem operations within restricted environments codex-rs/exec-server/src/fs_sandbox.rs51-54
PermissionProfile into FileSystemSandboxPolicy and NetworkSandboxPolicy codex-rs/exec-server/src/fs_sandbox.rs82-98SandboxManager to select and apply platform-specific sandboxes (Landlock, Seatbelt, etc.) before running the fs-helper codex-rs/exec-server/src/fs_sandbox.rs116-152The client includes sophisticated recovery and ordering logic codex-rs/exec-server/src/client_recovery.rs66-73
process/read with the last known sequence number to fetch missing output and state codex-rs/exec-server/src/client_recovery.rs74-83Entity Mapping: Client Recovery Flow
Sources: codex-rs/exec-server/src/client.rs181-196 codex-rs/exec-server/src/client_recovery.rs66-83 codex-rs/exec-server/src/rpc.rs42-53
For remote environments, the server supports a Noise-encrypted relay codex-rs/exec-server/src/remote.rs42-45
EnvironmentRegistryClient registers the executor's public key with a central registry codex-rs/exec-server/src/remote.rs110-114Sources: codex-rs/exec-server/src/environment.rs54-130 codex-rs/exec-server/src/fs_sandbox.rs56-152 codex-rs/exec-server/src/remote.rs51-196
Refresh this wiki
This wiki was recently refreshed. Please wait 4 days to refresh again.