---
title: "权限"
description: "决定 agent 能碰什么的五种权限姿态，从 readonly 到 yolo——按会话选择，也可以分阶段放开。"
---

> Documentation Index
> Fetch the complete documentation index at: https://colmugx.github.io/cetas/llms.txt
> Use this file to discover all available pages before exploring further.

# 权限

每个会话都在且只在一个权限姿态下运行。这是你要设的最重要的开关，因为它决定的是：当 agent 想做点什么（而不是读点什么）时，会发生什么。

```text
/permission readonly
```

这个切换在回合进行中也能用。姿态属于会话 —— 谨慎的选择不需要变成一次全局决策。

## 五种模式

| 模式 | 读 | 写、shell、未知工具 |
| --- | --- | --- |
| `readonly` | 预批准，包含可判定为只读的 shell | **直接拒绝** —— 没有提示，也没有绕过 |
| `workspace_write` | 预批准 | 走审批提示 |
| `interactive` | 预批准 | 走审批提示，包含有副作用的检查类操作 |
| `auto` | 预批准 | 每次调用交给决策模型判断；被拒是引导信号，不是错误 |
| `yolo` | 预批准 | 预批准 —— 审批提示根本不出现 |

其中三个值得展开。

**`readonly`**：不弹提示，也没有例外。它不需要 UI，也不需要人：改文件和只读之外的 shell 一律拒绝。审阅类任务、汇报类任务、以及团队放量的第一周，用它。

**`auto`**：语义闸门。每个非只读调用都交给决策模型；看起来有风险的操作、或者授予概率偏低的，会被拒。它没有确定性兜底：没有决策模型就组装不起来，`/permission auto` 也会拒绝切换。后端用 `/decision` 指定 —— 见[模型](/cetas/configuration/models/)。

**`yolo`**：只管工具执行。它从不批准提交上来的计划；计划是否通过，仍然归评审流程管。

## "批准"记住了什么

当提示被回答为*本会话内允许*时，这次授权会在该 agent 生命周期内被缓存 —— 不落盘：

- 写类工具和未知工具**按工具名**缓存 —— 批准过一次 `edit`，之后所有 `edit` 都算批过
- shell 工具**按命令段**缓存：命令按 `&`、`|`、`;` 和换行切段，每段以第一个词为作用域，所以批准了 `moon check` 不等于批准同一条管线里的 `rm -rf`

新会话从空的授权缓存开始。

## 各入口怎么设

| 入口 | 方式 |
| --- | --- |
| 终端 | `/permission <mode>` |
| 编辑器（ACP） | 会话配置项 `permission`，或启动时的 `CETAS_PERMISSION_MODE` |
| 自动化 | `--permission <mode>`，或 `--yolo` |
| 启动时未设置 | ACP 入口默认 `yolo` |

`CETAS_PERMISSION_MODE` 只在**一个方向**上宽容：取值不认识就警告一次、退回 `workspace_write`。笔误永远不会把姿态放宽。

## 一条不需要开会的放量路径

1. 所有人先 `readonly`。把阅读行为验证一遍，确认答案值得照着做。
2. 把 `workspace_write` 给那些明确要求动手的人。从这刻起每次写都会先提示一次，这些提示会慢慢养成评审习惯。
3. 想要"引导"而不是"确认"的团队，上 `interactive` 或 `auto`。`auto` 需要决策模型，所以这一步正是 `/decision` 派上用场的地方。
4. `yolo` 只给无人值守、有边界的工作 —— 带 `readonly` 的 CI，或者任务非常窄的专用自动化。

要避免的失败模式是"因为安静所以从 `yolo` 起步"——出事之前，它一直是安静的。

Source: https://colmugx.github.io/cetas/configuration/permissions/index.mdx
