Codex Sandbox Modes Explained: `read-only` vs `workspace-write` in the OpenAI Codex Plugin
read-only sandbox mode blocks all file modifications, while workspace-write grants full write access to the repository—this single configuration switch determines whether Codex can only inspect code or actively change it.
The OpenAI Codex plugin for Claude Code orchestrates Codex runs through a local app-server, using sandbox modes as the security boundary between safe code review and autonomous code modification. Understanding how these modes work—and where they are enforced in the source code—is essential for safely delegating tasks to AI agents.
How Sandbox Modes Are Defined
The plugin supports two mutually exclusive sandbox configurations that control filesystem access at the runtime level:
| Sandbox mode | Default? | Write access? | Typical use case |
|---|---|---|---|
read-only |
Yes | No | Code review, test analysis, adversarial audits |
workspace-write |
No | Yes | Bug fixes, refactoring, file creation, automated rescue tasks |
The sandbox is not a mere suggestion—it is passed directly to the Codex app-server, which enforces these permissions at the process level.
read-only: The Safe Default for Inspection Tasks
The read-only sandbox is the plugin's default setting, hardcoded in the thread-creation helper to prevent accidental modifications.
In plugins/codex/scripts/lib/codex.mjs at lines 68-71, the buildThreadParams function establishes this default:
// plugins/codex/scripts/lib/codex.mjs (lines 68-71)
{
sandbox: options.sandbox ?? "read-only",
// ... other thread parameters
}
When operating in read-only mode, Codex can:
- Read any file in the repository
- Execute tests and analyze outputs
- Generate review comments and suggestions
- Produce detailed reports on code quality
However, any attempt to write, delete, or modify files is blocked by the sandbox. This mode powers commands like /codex:review and /codex:adversarial-review, where the goal is understanding code without changing it.
workspace-write: Permission to Modify Code
The workspace-write sandbox is explicitly selected when the user requests a task that may alter the repository. This conditional selection happens in plugins/codex/scripts/codex-companion.mjs at line 491:
// plugins/codex/scripts/codex-companion.mjs (line 491)
sandbox: request.write ? "workspace-write" : "read-only",
In this mode, Codex receives full write access to the current workspace. The plugin tracks these modifications through collectTouchedFiles, which reports exactly which files were created, edited, or deleted during the run.
Use workspace-write for:
/codex:rescuecommands that fix failing builds- Refactoring operations requested with the
--writeflag - Adding new files or removing obsolete code
- Automated bug fixes and patch generation
Practical Code Examples
Running a Pure Review (Read-Only)
await runAppServerTurn(cwd, {
model: "gpt-5.4",
sandbox: "read-only", // enforced default—no file writes possible
prompt: "Please review the changes in this PR."
});
Delegating a Modification Task (Workspace-Write)
await runAppServerTurn(cwd, {
model: "gpt-5.4",
sandbox: "workspace-write", // explicit grant for file modifications
prompt: "Fix the failing test and commit the patch."
});
The CLI abstracts this choice through command semantics:
/codex:review→ automatically uses read-only/codex:rescue …or any--writeflagged command → automatically uses workspace-write
Security and Workflow Implications
The sandbox mode is the only mechanism distinguishing review-only from write-allowed operations. This design provides two critical guarantees:
- Defense in depth: Even if Codex generates code that would modify files, the
read-onlysandbox prevents execution at the system level. - Explicit consent: The
workspace-writemode requires an affirmative signal—either the--writeflag or a rescue-style command—ensuring users consciously authorize changes.
According to the OpenAI Codex plugin source code, the collectTouchedFiles utility only operates meaningfully in workspace-write mode; in read-only mode, it returns empty results since the filesystem remains unchanged.
Summary
read-only(default): Codex can inspect code but never modify it—safe for reviews and analysis.workspace-write(opt-in): Codex can create, edit, and delete files—required for rescue tasks and automated fixes.- Configuration location: Default set in
plugins/codex/scripts/lib/codex.mjs; override logic inplugins/codex/scripts/codex-companion.mjsat line 491. - CLI mapping: Review commands use
read-only; rescue and--writecommands useworkspace-write.
Frequently Asked Questions
What happens if Codex tries to write files in read-only mode?
The Codex runtime receives a permission error from the sandbox layer. The plugin continues execution, but no files are modified, and collectTouchedFiles returns an empty set. The user sees any generated suggestions as output without automatic application.
Can I override the default read-only sandbox for custom commands?
Yes. Any task run with the --write flag triggers the conditional in codex-companion.mjs line 491, selecting workspace-write. Plugin developers can also pass sandbox: "workspace-write" directly to buildThreadParams when constructing custom thread parameters.
Does workspace-write allow access outside the current workspace?
No. The sandbox confines write operations to the current working directory (the workspace). The Codex runtime cannot escape this boundary to modify system files or other repositories, even in workspace-write mode.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →