权限与审批
调整读写执行的授权边界与自动放行规则。
Bi 的默认姿态是所有工具调用都需要你批准。默认权限等级是「需审批」,包括 read 在内的每一次调用都会弹确认框。这是有意的起点:先把边界交到你手上,再由你决定哪些操作值得免打扰。
想让它变顺手,靠的是下面的规则,而不是把默认值调低。
判定顺序
一次工具调用会依次经过三步,命中即止:
- 自动放行规则(
auto_approve_rules)—— 命中就直接放行,不再询问 - 分级规则(
rules)—— 命中后按该条规则的风险等级决定放行还是询问 - 默认等级(
default_level)—— 前两步都没命中时兜底
所以规则是有优先级的:一条精确的自动放行规则能覆盖宽泛的分级规则。
两种规则
权限配置写在 .bi/permissions.json,也可以在设置界面编辑。结构是:
{
"enabled": true,
"default_level": 2,
"timeout_seconds": 0,
"auto_approve_rules": [],
"rules": []
}
enabled 为 false 时整套审批机制直接关闭,工具调用不再检查。timeout_seconds 为 0 表示不设超时。
自动放行规则只有 tool、pattern、message 三个字段,含义单一:匹配即放行。
{
"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)时放行,等于或高于时弹框:
{
"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) |
与拦截规则的区别
两者都拦操作,但机制不同:
- 权限规则命中会弹确认框,你可以当场放行
- 拦截规则命中直接拒绝,没有确认环节
想要「必须经人批准才放行」用权限规则;想要「无论你怎么操作都不许做」用拦截规则。
工作区边界
智能体的文件操作被限制在你选定的工作区根目录内,越界路径一律拒绝。这与权限规则是两道独立的防线,无法通过配置放宽。