﻿---
title: "权限档和旧 sandbox_mode 不要混用"
summary: "default_permissions 与 sandbox_mode 不叠加。任意一层写了 sandbox_mode 或传了 --sandbox，就会走旧沙箱，权限档等于没配。"
category: sandbox
level: advanced
surfaces: [cli, app, ide]
tags: ["permissions", "sandbox_mode", "config.toml"]
canonical: /tips/permissions-not-sandbox-mode/
---

# 权限档和旧 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`，先删掉旧键，否则用户会以为新档生效。

网络规则还要另开代理，否则域名表是摆设：

```toml
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。

## 来源

- [OpenAI · Permissions](https://learn.chatgpt.com/docs/permissions)
- [OpenAI · Config basics](https://learn.chatgpt.com/docs/config-file/config-basic)
