Corrupted deny_read_acl_state.json causes persistent "apply deny-read ACLs" sandbox failures
What version of the Codex App are you using (From “About Codex” dialog)?
0.145.0-alpha.18
What subscription do you have?
ChatGPT Plus
What platform is your computer?
Microsoft Windows NT 10.0.26200.0 x64
What issue are you seeing?
Codex Desktop on Windows failed to initialize Browser Use and Computer Use.
The sandbox repeatedly failed with the following error:
setup error: apply deny-read ACLs
Caused by:
0: parse deny-read ACL state C:\Users\<user>\.codex\.sandbox\deny_read_acl_state.json
1: expected value at line 1 column 1
The state file existed and was 22 bytes long, but its entire contents consisted of null bytes:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00
Because Codex kept trying to parse this corrupted file as JSON, all subsequent sandbox initialization attempts failed.
What steps can reproduce the bug?
- Start Codex Desktop on Windows.
- Attempt to use Browser Use or Computer Use.
- Codex fails before browser or screen control starts.
- Inspect this file:
C:\Users\<user>\.codex\.sandbox\deny_read_acl_state.json
- The file contains only null bytes instead of valid JSON.
- Restarting Codex or Windows does not resolve the issue because the same corrupted state file is reused.
Workaround:
- Fully exit Codex.
- Rename:
deny_read_acl_state.json
to:
deny_read_acl_state.json.broken
- Restart Codex.
Codex then regenerates the file as:
{
"principals": {}
}
After regeneration, sandbox initialization succeeds.
What is the expected behavior?
Codex should detect that deny_read_acl_state.json is empty, corrupted, or invalid JSON and automatically recreate it.
A corrupted state file should not permanently block Browser Use and Computer Use across restarts.
Additional information
After renaming the corrupted file and restarting Codex, the following successful log entries appeared:
setup refresh: processed 3 write roots (read roots delegated); errors=[]
read-acl-only mode: applying read ACLs
setup binary completed
read ACL run completed
This suggests that the failure was caused specifically by the corrupted deny_read_acl_state.json file rather than Chrome login, the browser extension, or Windows permissions in general.
4 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Thanks for flagging #34013. I reviewed it, and the two issues appear closely related but cover different failure stages.
#34013 identifies a live concurrency race while multiple Windows sandbox helpers update the shared
deny_read_acl_state.jsonfile. The missing inter-process lock and directstd::fs::write()can expose an empty file during truncate/write and can also cause lost updates.This issue, #34276, covers recovery after the state file is already persistently corrupted. In my case, the file was not only observed empty during a concurrent operation; it remained on disk as 22 NUL bytes across Codex and Windows restarts. Codex then failed on every startup until I manually renamed the file and allowed it to regenerate:
The persistent failure was:
After renaming the corrupted file, Codex regenerated:
and sandbox initialization completed successfully.
My understanding is:
The race in #34013 is a plausible source of state corruption, although the exact path that left 22 persistent NUL bytes in my case is not proven by the available logs.
I would therefore prefer to keep this issue open unless maintainers consider existing-corruption recovery fully covered by another issue such as #30251 or #30540. A complete fix should ideally include both prevention and recovery:
.brokenfile, recreate the default state, and continue startup.Additional reproducible Windows Codex Desktop report (2026-07-26, America/New_York):
Exact recurring failure:
Reproduction:
nodeRepl.write("ready").Recovery attempts that did not work:
Scope/impact:
CreateProcess ... helper_unknown_error: apply deny-read ACLs, suggesting the sandbox state failure can spread beyond Node-backed UI tools.Environment visible from the failing session:
26.721.4105926.721.41059Expected behavior:
This appears consistent with the persistent-state recovery problem described in this issue and may also relate to the race discussed in #34013.
Adding another data point on the "recovery after corruption" side of this, since #34013 explains the race but not why the state stays broken across restarts.
Same signature — 22 NUL bytes, persisted across multiple Codex/Windows restarts:
setup error: apply deny-read ACLs
Caused by:
0: parse deny-read ACL state C:\Users<user>.codex.sandbox\deny_read_acl_state.json
1: expected value at line 1 column 1
In my case the impact wasn't limited to Browser Use / Computer Use or Node-backed tools — all file read/write in a normal Codex task was blocked, including editing an existing document with no browser or computer-use tools invoked at all. So this state file failing to parse appears to block sandbox init broadly, not just the browser/computer-use/Node code paths mentioned above.
Same workaround: fully exit Codex, delete/rename the corrupted file, restart — regenerates cleanly as {"principals": {}} and everything works again.
+1 on parkswon1's point that a full fix needs both prevention (the #34013 race fix) and recovery (detect malformed JSON, back it up, regenerate default, continue startup) — since even with the race fixed, any future crash/power-loss mid-write could reproduce this same permanently-stuck state.