---
title: "04 - Sandbox 與 Approval 權限模型"
type: note
specialty: Programming
tags: [codex-cli從0開始使用教學, 04-權限, sandbox, approval, security]
created: 2026-08-04
updated: "2026"
modified: 2026-08-04
---

# 04 - Sandbox 與 Approval 權限模型

← [[03-互動模式基本操作]] | [[00-Index]] | 下一篇 → [[05-AGENTS-md與config-toml]]

> ⚠️ **這是 Codex CLI 最該讀懂的一章。** 兩個獨立的旋鈕，搞混會出事。

---

## 核心觀念：兩個獨立的旋鈕

```
┌──────────────────────┐        ┌──────────────────────┐
│   sandbox_mode       │        │   approval_policy    │
│                      │        │                      │
│  技術上「能不能做」    │   ×    │  「什麼時候問你」      │
│  （作業系統層級隔離）  │        │                      │
└──────────────────────┘        └──────────────────────┘
```

> 🔑 **`sandbox_mode` 控制 Codex 技術上能做什麼；`approval_policy` 控制它什麼時候必須先問你。把它們當成分開的控制項。**

這跟 Claude Code 只有一個 `permission-mode` 維度不同。**好處是更精確，代價是要多想一層。**

---

## Sandbox modes（能做什麼）

| 模式 | 允許 |
|---|---|
| `read-only` | 指令可以**讀**檔案，**不能寫** |
| `workspace-write` | 可以寫在**目前 repo 和暫存目錄**裡 |
| `danger-full-access` | **可以寫任何地方** ⚠️ |

`danger-full-access` 是「不受限制的檔案系統政策」，官方定位是**只有在外層環境已經提供隔離時才用**（容器、VM、CI runner）。

`workspace-write` 底下還有一個細部設定表 `[sandbox_workspace_write]`，可以調整：
- `network_access` — 沙箱內能不能連網
- `writable_roots` — 除了 repo 之外還能寫哪些路徑

---

## Approval policies（什麼時候問）

| 政策 | 行為 |
|---|---|
| `untrusted` | **只有被視為可信的指令**能不經核准直接跑 |
| `on-request` | **Codex 自己決定何時要求升級權限**（日常預設）|
| `never` | **從不問**；被拒絕的操作直接失敗並把結果回給模型 |

選法：
- **`never`** 適合**信任的開發機**（你已經用 sandbox 圈好範圍了）
- **`untrusted`** 是**無人值守的 CI 和正式環境**的正確預設

---

## 常用組合

| 組合 | 用途 |
|---|---|
| `read-only` + `untrusted` | **最保守**：純分析、審查、盤點 |
| `read-only` + `never` | 純分析且不打擾（適合自動化盤點）|
| `workspace-write` + `on-request` | **日常開發預設** |
| `workspace-write` + `never` | **量產模式**（= `--full-auto`）|
| `danger-full-access` + `never` | ⚠️ 只在容器 / VM 裡 |

### `--full-auto` 是什麼

> `--full-auto` 是一個便利旗標：**讓 Codex 不問核准，並把 sandbox 強制設成 `workspace-write`**。

也就是說 `--full-auto` ≈ `approval_policy = "never"` + `sandbox_mode = "workspace-write"`。

**這是 [[08-實戰-被Claude指揮的雙手|被 Herdr 編排時]] 最常用的組合**：worker 不能停下來等人，但也不該能寫到 repo 外面。

> ⚠️ **`--full-auto` 不等於「什麼都能做」。** sandbox 還在，它寫不出 repo 和暫存目錄。想關掉沙箱要另外明確指定 `danger-full-access`——**不要因為想省事就這樣做**。

---

## 在設定檔裡

`~/.codex/config.toml`：

```toml
approval_policy = "on-request"
sandbox_mode = "workspace-write"

[sandbox_workspace_write]
network_access = false
```

用 profile 準備好幾組：

```toml
[profiles.paranoid]
approval_policy = "untrusted"
sandbox_mode = "read-only"

[profiles.ci]
approval_policy = "never"
sandbox_mode = "workspace-write"
```

```bash
codex --profile paranoid    # 純分析
codex --profile ci          # 無人值守
```

---

## 給你兩個 repo 的建議

### `Obsidian-med-note`（醫學筆記庫）

```toml
[profiles.vault-audit]
approval_policy = "never"
sandbox_mode = "read-only"          # 盤點、稽核：物理上改不到你的筆記

[profiles.vault-format]
approval_policy = "never"
sandbox_mode = "workspace-write"    # 格式修補：能改，但寫不出 repo
```

> 🔴 **強烈建議盤點類任務一律用 `read-only`。** 你的筆記是不可重建的資產（很多是查過 PubMed 才寫出來的），而 obsidian-git 每 10 分鐘會自動 commit——**一旦被改壞，很可能在你發現之前就被推上去了**。
>
> `read-only` 是**作業系統層級**的保證，比在 prompt 裡寫「不要改檔」可靠得多。

### `Taiwan_IM_board`（刷題網站）

```toml
[profiles.exam-draft]
approval_policy = "never"
sandbox_mode = "workspace-write"
```

詳解量產寫進 `tmp_drafts/`，在 repo 內，`workspace-write` 剛好夠用。

---

## `--skip-git-repo-check`

Codex 預設要求在 git repo 裡跑，這是為了避免無法回退的破壞性變更。

```bash
codex exec --skip-git-repo-check "..."
```

> ⚠️ **這個 flag 只跳過該指令的「非互動 repo 守衛」，不會關掉 sandbox。** 但也代表**你失去了 git 這層安全網**——用之前想清楚。

---

## 網路存取

`[sandbox_workspace_write]` 的 `network_access` 控制沙箱內能不能連網。

**什麼時候需要開**：安裝相依套件、抓 API 資料。
**什麼時候該關**：處理敏感資料時（你的醫學筆記、理財對帳單）。

> 💡 **關掉網路是防資料外流最簡單的一招。** 一個做格式稽核的 worker 根本不需要連網。

---

## 一個實務上的心智模型

把兩個旋鈕想成**安全帶和速限**：

- **sandbox = 安全帶**：出事時保護你。**永遠繫著**，跟你開多快無關。
- **approval = 速限**：決定你被攔下來的頻率。信任的路段可以放寬。

**最常見的錯誤是「因為一直被問而直接跳到 `danger-full-access`」**——那是把安全帶解掉來解決被開罰單的問題。正確做法是**調 approval，不是調 sandbox**。

---

## 🔗 相關筆記

- [[03-互動模式基本操作]] — 上一步
- [[05-AGENTS-md與config-toml]] — 下一步：怎麼寫進設定檔
- [[08-實戰-被Claude指揮的雙手]] — 編排時該用哪個組合
- [[Programming/Claude-Code/Claude-Code-CLI從0開始使用教學/05-權限模式與安全|Claude Code CLI 05 - 權限模式]] — 對照：單一維度的設計

---

*最後更新：2026-08-04*
