Breaking config change: `:project_roots` no longer works in recent Codex releases
What version of Codex CLI is running?
codex-cli 0.132.0
What subscription do you have?
Business
Which model were you using?
gpt-5.4
What platform is your computer?
Darwin 25.4.0 arm64 arm
What issue are you seeing?
A recent Codex release appears to have made a breaking change to the config permission token for project-scoped filesystem access.
Previously, configs and docs used :project_roots, but recent Codex behavior now rejects that token and expects :workspace_roots instead.
Observed behavior
The Codex TUI warns:
Configured filesystem path `:project_roots` is not recognized by this version of Codex and will be ignored.
The desktop app does not seem to warn at all.
In either case, the intended project-root write access is not granted.
What steps can reproduce the bug?
A config like this no longer works in current releases:
[permissions.default-dev.filesystem]
":project_roots" = "write"
What is the expected behavior?
This should not have been a breaking config change without a compatibility path.
At minimum, one of these should happen:
- Preserve
:project_rootsas a supported alias for backward compatibility. - Emit a direct migration error/warning that explicitly says to replace
:project_rootswith:workspace_roots. - Call out the breaking change prominently in release notes and migration guidance.
Additional information
Why this matters
This can break existing Codex setups that were previously valid. A config may continue to load, but the relevant filesystem permission is ignored, leading to unrelated-looking failures later when commands no longer have the expected project-root access.
Because the old key is ignored rather than rejected with a clear migration message, this is harder to understand than it should be.
Related context
- PR #22624 renamed the config-facing key from
:project_rootsto:workspace_roots. - Current docs now appear to match the new behavior, but that still leaves existing user configs broken.
Suggested resolution
- Restore
:project_rootsas a compatibility alias, or - add an explicit migration diagnostic that names
:workspace_rootsas the replacement, and - document the breaking change prominently for users upgrading Codex.
2 Comments
Proposed Solution: :project_roots Backward Compatibility
Root Cause
PR #22624 renamed
:project_rootsto:workspace_rootswithout adding a backward-compatibility alias or migration warning. The config parser silently ignores the old token, causing project-root write access to be lost.Fix
:project_rootsto the same resolution as:workspace_rootsKey Code Change
Full solution:
solutions/codex-23826-project-roots-config-breaking-change-fix.mdNote that #22624 contains a mistaken assertion[^1] regarding whether
:project_rootswas shipped publicly:This is incorrect, at least regarding the documentation[^2]. I happened to have a tab open to https://developers.openai.com/codex/config-reference from before this change, showing this publicly documented key with no indication of experimental or otherwise pre-stable status:
<img width="1754" height="386" alt="Image" src="https://github.com/user-attachments/assets/a05ab34d-7721-47c8-a3d2-ef6754c74e23" />
Text version for accessibility:
Key | Type / Values | Details
-- | -- | --
permissions.<name>.filesystem|table| Named filesystem permission profile. Each key is an absolute path or special token such as:minimalor:project_roots.permissions.<name>.filesystem.":project_roots".<subpath-or-glob>|"read" \| "write" \| "none"| Scoped filesystem access relative to the detected project roots. Use"."for the root itself; glob subpaths such as"**/*.env"can deny reads with"none".[^1]: This mistaken assumption likely caused this correct review comment flagging the problem to go unaddressed.
[^2]: I'm not able to say with certainty whether the behavior itself was previously working, as I was configuring the sandbox, working through issues, and had not yet completed testing of the full setup.