---
title: "权限与审批"
description: "调整读写执行的授权边界与自动放行规则。"
---

Bi 的默认姿态是**所有工具调用都需要你批准**。默认权限等级是「需审批」，包括 `read` 在内的每一次调用都会弹确认框。这是有意的起点：先把边界交到你手上，再由你决定哪些操作值得免打扰。

想让它变顺手，靠的是下面的规则，而不是把默认值调低。

## 判定顺序

一次工具调用会依次经过三步，命中即止：

1. **自动放行规则**（`auto_approve_rules`）—— 命中就直接放行，不再询问
2. **分级规则**（`rules`）—— 命中后按该条规则的风险等级决定放行还是询问
3. **默认等级**（`default_level`）—— 前两步都没命中时兜底

所以规则是有优先级的：一条精确的自动放行规则能覆盖宽泛的分级规则。

## 两种规则

权限配置写在 `.bi/permissions.json`，也可以在设置界面编辑。结构是：

```json
{
  "enabled": true,
  "default_level": 2,
  "timeout_seconds": 0,
  "auto_approve_rules": [],
  "rules": []
}
```

`enabled` 为 `false` 时整套审批机制直接关闭，工具调用不再检查。`timeout_seconds` 为 0 表示不设超时。

**自动放行规则**只有 `tool`、`pattern`、`message` 三个字段，含义单一：匹配即放行。

```json
{
  "enabled": true,
  "default_level": 2,
  "auto_approve_rules": [
    { "tool": "exec", "pattern": "command=(git status|git diff)", "message": "只读查看" },
    { "tool": "read", "pattern": "path=.*\\.go$", "message": "读取源码" }
  ],
  "rules": []
}
```

**分级规则**多一个 `level` 字段。等级低于「需审批」（数值小于 2）时放行，等于或高于时弹框：

```json
{
  "tool": "exec",
  "pattern": "command=.*",
  "level": 3,
  "message": "执行命令需要你确认"
}
```

## 规则怎么写 pattern

工具参数会被折叠成一个 `k=v k=v` 的匹配串，字段名按字母排序后再拼。所以 pattern 直接对着这个形态写就行：

- `command=.*npm.*`
- `path=.*\.md$`
- `command=.*git\s+push.*`

这种设计避免了让你去匹配转义后的原始 JSON 文本——那种写法脆弱且极易误配。

## 风险等级

| 等级 | 含义 |
| --- | --- |
| 0 | 记录（`Log`） |
| 1 | 自动（`Auto`） |
| 2 | 需审批（`Approve`）—— 默认值 |
| 3 | 敏感（`Sensitive`） |

## 与拦截规则的区别

两者都拦操作，但机制不同：

- **权限规则**命中会**弹确认框**，你可以当场放行
- **[拦截规则](/zh/docs/advanced/intercept-rules)**命中**直接拒绝**，没有确认环节

想要「必须经人批准才放行」用权限规则；想要「无论你怎么操作都不许做」用拦截规则。

## 工作区边界

智能体的文件操作被限制在你选定的工作区根目录内，越界路径一律拒绝。这与权限规则是两道独立的防线，无法通过配置放宽。
