权限档和旧 sandbox_mode 不要混用
default_permissions 与 sandbox_mode 不叠加。任意一层写了 sandbox_mode 或传了 --sandbox,就会走旧沙箱,权限档等于没配。
权限档还是 beta。官方内置三档::read-only、:workspace、:danger-full-access。自定义档写在 [permissions.<name>],再用顶层 default_permissions 选中。
两边只能留一套:
- 继续用旧旋钮:
sandbox_mode/sandbox_workspace_write - 改用权限档:
default_permissions+[permissions.*]
任意已加载的 config、选中的 profile,或 CLI 的 --sandbox 出现 sandbox_mode,Codex 就走旧路径。企业若下发了 allowed_permission_profiles,先删掉旧键,否则用户会以为新档生效。
网络规则还要另开代理,否则域名表是摆设:
default_permissions = "project-edit"
[features]
network_proxy = true
[permissions.project-edit]
extends = ":workspace"
[permissions.project-edit.filesystem.":workspace_roots"]
"." = "write"
"**/*.env" = "deny"
[permissions.project-edit.network]
enabled = true
[permissions.project-edit.network.domains]
"api.openai.com" = "allow"
network.enabled = true 只允许命令出网,并不启动代理。更窄的 deny 会压过同样路径上的 write / read。不要从 :danger-full-access 做 extends。
一旦写了 default_permissions,旧的 [sandbox_workspace_write] network_access = true 会被静默丢掉,会话仍可能断网。把网络写进当前权限档的 [permissions.<name>.network] enabled = true,不要指望两套键一起生效。
Windows 上对 env 文件那种无界 glob 会在启动前展开成具体路径。Chrome 配置目录那种递归匹配能让会话直接起不来。目录级拒绝写精确路径,不要再加递归 glob。