权限档和旧 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-accessextends

一旦写了 default_permissions,旧的 [sandbox_workspace_write] network_access = true 会被静默丢掉,会话仍可能断网。把网络写进当前权限档的 [permissions.<name>.network] enabled = true,不要指望两套键一起生效。

Windows 上对 env 文件那种无界 glob 会在启动前展开成具体路径。Chrome 配置目录那种递归匹配能让会话直接起不来。目录级拒绝写精确路径,不要再加递归 glob。

来源