# 工具授权

AI 要执行命令、写文件之前需要你授权。本页管理已经保存下来的授权规则，入口在「设置 → 工具授权」。

工具自动批准与任务授权分别生效：即使在 AUTO 模式下，难以撤销或影响共享状态的操作（如强推、修改远端、发消息、提/合 PR）仍需取得你针对该操作的明确确认。当前要求、长期记忆与项目规则都须遵守平台权限和安全边界。

## 规则的来源

对话中 AI 请求调用工具时会弹出授权弹窗，你有两个选择：

- **始终允许**：在**当前项目**记住一条允许规则，以后符合规则的调用自动放行。规则为精准匹配（例如 `git pull`、`rm temp.log`）。如果命令里含管道、重定向、命令替换，无法被记住，只能单次放行——弹窗里会写明是哪一处构造（如「命令替换 `$(...)`」）导致无法记忆。
- **拒绝**：只拒绝这一次，不产生规则。

被权限规则拒绝时，AI 收到的提示会包含**命中的规则**与被拦下的**具体片段**（例如「命中规则：Bash(git push)；触发片段：git push origin main」），便于它换一种允许的写法，而不是把整条命令反复重试。

另外系统有一份内置白名单：少量完全无害、只读、不派生子进程的命令（`ls`、`pwd`、`cat`、`grep`、`ps`、`top`、`git status` 等）不弹窗直接放行。

例外：`Shizuku` 工具（直接操作宿主 Android 系统）属高危，任何命令都会弹窗确认且不支持「始终允许」，也不适用内置白名单，详见 [Shizuku 工具](https://aicode.murk.top/md/guide/shizuku.md)。

## 多会话并行时的授权

多个会话（含子代理）同时工作时，每个会话可以各自挂起一个授权请求，互不阻塞：

- 授权弹窗顶部会标注**发起该请求的会话标题**（如「会话「重构登录模块」」），可明确区分弹窗属于哪个会话。
- 弹窗在任意会话界面都会展示，处理完自动切到下一个待授权请求。
- 侧边栏会话列表里，**正在等待授权**的会话行左侧指示灯是**橙色常亮**（执行中是绿色脉冲）。据此可以发现被挂起等待授权的后台会话，点进去处理。

## 页面结构

规则分「当前项目」和「全局」两组，点标题可折叠。

每条规则显示判定图标（对勾是允许，叉是禁止）、工具名、匹配范围与判定，例如 `git pull · 允许`、`整个工具 · 允许`。

- 项目规则右侧有个加号图标，可以把这条规则**提升为全局**，对所有项目生效；提升后它从本项目列表消失。
- 规则行左滑露出红色删除按钮。

## 禁用安全拦截

页面顶部有一项「禁用安全拦截」开关，默认关闭。

- 关闭（默认）：AUTO（自动）模式下仍会拦截灾难性删除——`rm` 删除根目录、系统关键目录（`/etc`、`/usr` 等）、工作区根目录或用户主目录等操作会被直接拒绝；含命令替换、子 shell、绝对路径重定向等无法静态判定、且疑似破坏性的命令（如 `rm -rf $(...)`、`cat > /etc/xxx`）同样会被拦下（无法确认删除目标）。同时，AUTO 下 `Shizuku` 工具仍会逐次弹窗确认（不会被「全放行」豁免）。这是防误删的底线。
- 开启：AUTO 模式下连这层拦截也取消，所有命令一律放行，`Shizuku` 工具也不再弹窗。注意「Shizuku 不可记忆」不受此开关影响：BUILD 模式下它仍逐次确认、不可记忆。BUILD / PLAN 模式的安全拦截不受影响。

打开开关前会弹出确认框，确认按钮带 **5 秒倒计时**，倒计时结束前不可点，避免误触。

::: danger 仅在确有需要时开启
开启后，AUTO 模式下的 `rm` 等破坏性命令不再有任何兜底。只在完全清楚风险、且确实需要时才打开。
:::

## 高危命令提权

非 PLAN 模式下，`rm` 删除根目录、系统关键目录（`/etc`、`/usr` 等）、工作区根目录或用户主目录等灾难性操作会被内置安全防护直接拒绝。如果 AI 判断确有必要执行，它会在调用时带上 `elevate: true` 重试——此时不再直接拒绝，而是弹窗请你**一次性授权**（弹窗标题为「高危操作提权确认」）。

- BUILD 与 AUTO 模式下都可用；AUTO 下会弹窗的场景有两种：灾难性删除提权确认，以及 `Shizuku` 工具调用。
- 提权只对单次调用有效，不会生成记忆规则（「始终允许」不可用）。
- PLAN 模式仍为硬拦截，不受提权影响。

## 关于「禁止」规则

授权弹窗里没有「禁止」这个选项（拒绝只影响单次），所以正常使用不会产生禁止规则。

禁止规则目前只能手动编辑配置文件产生：项目规则写在 `<项目根>/.muse/permissions.json`，全局规则写在 `~/.muse/permissions.json`。手工编辑保存后 App 会在几秒内自动检测并刷新页面，规则立即生效。

配置文件格式：

```json
{
  "permissions": {
    "allow": ["Bash(git pull)", "writeFile"],
    "deny": ["Bash(rm -rf /)"]
  }
}
```

::: tip 全局禁止优先于项目允许
`deny` 里的规则会挡掉同名的 `allow` 规则。例如全局禁止了 `Bash(rm -rf /)`，那么任何项目都不能放行这条命令。如需额外的安全兜底，可在全局 `deny` 里添加规则。
:::
