Bi

拦截规则

对具体命令模式设一道硬关卡,命中即拒绝执行。

Markdown 原文

权限规则按工具分类做放行或审批;拦截规则则盯住具体命令,是比权限更硬的一道关卡。

适合拦截什么

  • 破坏性命令(删除、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、date
  • pattern:匹配命令的正则表达式
  • 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 查看。

一处常见误解

拦截规则不能用来限制「访问工作区之外的路径」。规则只匹配命令文本,没有路径类型的匹配项。

工作区围栏是另一套机制:每个文件类工具在解析路径时都会强制收敛到工作区根内,越界路径直接被拒绝,无法通过配置放宽。这两道防线彼此独立。