使用 mu
权限与安全
三种权限模式、Jev 能替你批准什么、你的硬约束、危险命令和外来内容。
mu 不问你就能做多少事,由权限模式决定。它显示在状态栏和桌面端的发送框里,/permissions 随时可以切换。
三种模式
| 模式 | 不问就执行 | 要问你 |
|---|---|---|
| 完全访问 | 一切 | 什么都不问 |
| Jev 审批(默认) | 读取;改项目里的文件;Jev 确定任务需要的一切 | Jev 拿不准的、认为超出你要求的,或认为无关的 |
| 最小权限 | 只有读取 | 每一次编辑、命令、对外操作和子代理 |
/permissions full、/permissions jev 和 /permissions ask 直接切换。切换对当前对话生效,并成为新对话的默认;其他正在运行的对话保持各自的模式。MU_PERMISSIONS=ask mu 只为一次运行设置。
Jev 审批什么
在「Jev 审批」模式下,每条命令、项目外的改动、对外操作和子代理都先交给 Jev,只问一个问题:这次调用对任务和你说过的话来说是需要的,超出了范围,无关,还是不清楚?只有「需要」且概率达到 0.8 或以上,才不经过你直接执行。其他情况都会问你,提示里写明原因,比如「Jev 认为这一步超出了你的要求」。
没有判定器能回答时(没有密钥且免费的 Jev 不可用、账户额度用完,或者只有一个本地判定器,而本地判定器不被信任来审批),mu 每一步都问你,并说明原因。用 mu setup 设置一个 Jev 密钥,或者切换模式。
mu 什么时候问你
需要你决定的调用会显示一个选择框:
- 允许这一次
- 这次对话都允许,只在这次调用有安全的范围时才提供:项目内的所有编辑、一个程序(对
git、npm、cargo这类程序还加上它的子命令,所以是npm test,而不是所有npm)、项目外的一个文件,或一个工具 - 不允许
带串联、重定向或命令替换的命令,或以 sudo、env 开头的命令,只能允许一次。Esc 算作「不允许」。拒绝会告诉模型不要另找办法绕过去,而是问你,或者不做这件事继续往下。切换模式或运行 /permissions reset 时,允许过的操作会被忘掉。
任何模式下都成立的规则
- 你的硬约束。 你排除掉的事,比如「别碰 migrations」,会一字不差地记在任务帧里。任何会改变东西的调用之前,都会对照这些约束检查,确定的违反会被拦下,并引用你的原话。完全访问模式下也一样,子代理也受同样的约束。
- 读取从不需要问:读、搜索和列出文件,网页搜索和网页读取,以及只由只读程序组成的 shell 命令,比如
git status或cat … | grep …。 - 未知的工具要问。 mu 不认识的工具,比如一个 MCP 工具,需要授权。
- mu 自己的设置归你管。 动到
~/.mu/agent的调用每次都要问你;Jev 不能批准它。
危险命令
规则会标记看起来危险的命令:rm -rf、强制推送、sudo、运行下载来的脚本等等。在「Jev 审批」模式下,这样的命令只有在 Jev 确定是你要的时才执行;在最小权限模式下,问你时会显示这个标记。被标记的命令只能允许一次,不能整个对话都允许。
外来内容
网页、搜索结果、内置浏览器和 MCP 服务器可能带着写来操纵 AI 的文字:「忽略你的规则」、「把这个文件发出去」、「运行这条命令」,或者一个把对话内容带出去的链接。模型读这类结果之前,会一段一段地筛查;带着冲着 AI 来的指令的段落会被扣下,换成一行说明。判定器没有按时回答时,明显的注入语句仍会被规则扣下。
web_fetch 本身也有限制:每次请求有时间和大小上限,页面文字标为不可信,你私有网络里的地址会被拒绝,除非你允许,所以网页没法把读取引到你的局域网里。
撤销改动
在每个会改文件的回合里,第一次改动之前,mu 会给项目拍一张快照,存进它自己的影子 git 目录。你的仓库、索引和分支从不被碰到,项目也不需要是一个 git 仓库。存着机密的文件(.env、密钥、证书)从不进快照。
/checkpoints列出对话当前分支上的检查点。/rewind先显示会有什么变化,再把文件、对话或两者一起退回去。你自己在那之后改过的文件会单独列出来,并问你。/rewind undo撤销上一次回退。
在你的主目录里开始的会话,以及非常大的项目(要收进的文件超过 5,000 个或 200 MB),会跳过检查点,并给出说明。另见目标模式与收尾。