~/.codex/ treated as project config when running from home directory
What version of Codex is running?
codex-cli 0.91.0
What subscription do you have?
Pro
Which model were you using?
gpt-5.2-codex
What platform is your computer?
macOS (Darwin 25.2.0), zsh, installed via Homebrew
What issue are you seeing?
When running codex from the home directory (~), the global config folder ~/.codex/ is treated as both a user config (trusted) and a project config (untrusted), causing this warning:
⚠ The following config folders are disabled:
1. /Users/username/.codex
Add /Users/username as a trusted project in /Users/username/.codex/config.toml.
The ~/.codex/ folder is the canonical user config location and shouldn't require explicit trust as a "project."
Root cause
In codex-rs/core/src/config_loader/mod.rs, the config loading works as follows:
- User config is loaded from
$CODEX_HOME/config.toml(lines 164-174) - always trusted - Project configs are found by
load_project_layers()walking fromcwdup to project root, looking for.codex/folders (lines 658-748)
When cwd is the home directory and no .git marker is found, find_project_root() returns cwd itself. Then load_project_layers() finds ~/.codex/ and treats it as a project config requiring trust.
The issue is that load_project_layers() doesn't check if the discovered .codex/ folder is the same as $CODEX_HOME.
Steps to reproduce
cd ~- Ensure
~has no.gitdirectory (or ancestors with.git) - Run
codex - See the warning about disabled config folders
Expected behavior
~/.codex/ should not require trust when it's the user's global config directory. The load_project_layers() function should skip directories where dot_codex == codex_home.
Suggested fix
In load_project_layers(), add a check to skip when the discovered .codex/ folder matches $CODEX_HOME:
let dot_codex = dir.join(".codex");
let dot_codex_abs = AbsolutePathBuf::from_absolute_path(&dot_codex)?;
// Skip if this is the user's global config directory
if dot_codex_abs.as_path() == codex_home {
continue;
}
Workaround
Add the home directory as a trusted project in ~/.codex/config.toml:
[projects."/Users/username"]
trust_level = "trusted"
12 Comments
Me too,
❗️ except when applying the W/A, then when running next from home directory I get Sandbox = "workspace-write" instead of "read-only" 👇🏼
<img width="593" height="573" alt="Image" src="https://github.com/user-attachments/assets/055349a3-0f9c-480d-856a-b856d096aff6" />
Actually it might be worse:
On first invocation from home directory we are asked to choose (default being read-only):
This writes the below to
~/.codex/config.toml:and subsequent invocations from home directory will still set Sandbox to "workspace-write" 👇🏼
<img width="1164" height="643" alt="Image" src="https://github.com/user-attachments/assets/223ad9d8-dbda-4ebc-b031-3566293c38d8" />
Happens in Git worktress too; even with the workaround suggested above.
In particular, the tweak which the application recommends is quite twisted IMO.
The risk associated with
trust_level = "trusted"for the whole home directory is quite bad.I only see a rollback as a solution to this.
Getting that message also in the Codex extension in VS Code whenever I open chat.
I get this error in vscode as well, and it seems that project .codex/config.toml aren't overriding
The same here. I use the codex extension in cursor (mac os). I try to add
trusted_projects = ["home/user"]but it's still the same. The warning keeps appearing when I open the ide -> extensionsame, it also shows when I open other dir not under home.
Hi @daniel-oai ,
I just updated to v0.93.0 and while it fixed the warning issue, it missed one issue I mentioned earlier
https://github.com/openai/codex/issues/9932#issuecomment-3811966217
Should I report it as a new issue?
Thanks.
@kingtistel, yes, please open another issue so it doesn't get lost. Thanks!
@etraut-openai
https://github.com/openai/codex/issues/10395
Glad to hear we fixed at least part of it. Ill try and get the next fix out soon as well
Fixed the initial error here
Skip loading codex home as project layer #10207
Will update the next one