---
title: "拦截规则"
description: "对具体命令模式设一道硬关卡，命中即拒绝执行。"
---

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

## 适合拦截什么

- 破坏性命令（删除、`git push`、发布操作）
- 权限修改（`chmod`、`chown`、`icacls`）
- 用 `exec` 去做本该走专用工具的事（用 `cat` 读文件、用 `echo >` 写文件、用 `grep` 搜索）
- 未登记的工具名

这些是内置默认规则，开箱即生效。你也可以增删自己的规则。

## 命中后会发生什么

**拦截规则命中默认会直接拒绝这次调用**，不会弹出确认框。违规信息以 `[INTERCEPTED]` 开头，作为工具结果回给智能体，它会看到失败原因并尝试别的做法。

从 v0.1.0 起，规则可以加 `"action": "confirm"` 让命中走**权限确认**：会弹确认框，由人当场批准或拒绝，批准后才执行。默认动作是 `block`（直接拒绝），只有显式写 `confirm` 才会弹框。

需要人来决定的还有[工具权限](/zh/docs/configuration/permissions)：那一层同样弹确认框。两者是叠加关系，都要允许才真正执行。

## 规则怎么配

规则文件在 `.bi/intercept_rules.json`，也可以通过 `GET/POST /api/rules` 读写。每条规则包含：

- `name`：规则名，内置默认规则有 `read`、`write`、`list`、`search`、`date`
- `pattern`：匹配命令的正则表达式
- `message`：命中时回给智能体的说明
- `action`：命中后的动作，`block`（缺省）直接拒绝，`confirm` 弹确认框

```json
{
  "enabled": true,
  "exec_rules": [
    {
      "name": "no-push",
      "pattern": "(?i)\\bgit\\s+push\\b",
      "message": "推送远端前请先确认要推送的分支。",
      "action": "confirm"
    }
  ]
}
```

命中 `block` 规则会记进违规列表；`confirm` 规则走权限确认，不算违规。列表可用 `GET /api/rules` 查看。

## 一处常见误解

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

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