拦截规则
对具体命令模式设一道硬关卡,命中即拒绝执行。
权限规则按工具分类做放行或审批;拦截规则则盯住具体命令,是比权限更硬的一道关卡。
适合拦截什么
- 破坏性命令(删除、
git push、发布操作) - 权限修改(
chmod、chown、icacls) - 用
exec去做本该走专用工具的事(用cat读文件、用echo >写文件、用grep搜索) - 未登记的工具名
这些是内置默认规则,开箱即生效。你也可以增删自己的规则。
命中后会发生什么
拦截规则命中默认会直接拒绝这次调用,不会弹出确认框。违规信息以 [INTERCEPTED] 开头,作为工具结果回给智能体,它会看到失败原因并尝试别的做法。
从 v0.1.0 起,规则可以加 "action": "confirm" 让命中走权限确认:会弹确认框,由人当场批准或拒绝,批准后才执行。默认动作是 block(直接拒绝),只有显式写 confirm 才会弹框。
需要人来决定的还有工具权限:那一层同样弹确认框。两者是叠加关系,都要允许才真正执行。
规则怎么配
规则文件在 .bi/intercept_rules.json,也可以通过 GET/POST /api/rules 读写。每条规则包含:
name:规则名,内置默认规则有read、write、list、search、datepattern:匹配命令的正则表达式message:命中时回给智能体的说明action:命中后的动作,block(缺省)直接拒绝,confirm弹确认框
{
"enabled": true,
"exec_rules": [
{
"name": "no-push",
"pattern": "(?i)\\bgit\\s+push\\b",
"message": "推送远端前请先确认要推送的分支。",
"action": "confirm"
}
]
}
命中 block 规则会记进违规列表;confirm 规则走权限确认,不算违规。列表可用 GET /api/rules 查看。
一处常见误解
拦截规则不能用来限制「访问工作区之外的路径」。规则只匹配命令文本,没有路径类型的匹配项。
工作区围栏是另一套机制:每个文件类工具在解析路径时都会强制收敛到工作区根内,越界路径直接被拒绝,无法通过配置放宽。这两道防线彼此独立。