05. 权限、计划与安全
询问、自动与始终批准
权限模式决定 Matcha CLI 问你的频率。它们是基线。允许、询问和拒绝规则仍叠在上面。
三种模式
| 模式 | 不弹卡片就会跑的 | 适合 |
|---|---|---|
| 询问(默认) | 只读工具和一份固定的只读 shell 片段 | 日常 TUI |
| 自动 | 安全检查放行的调用;其余拦截或升级询问 | 少问、仍可交互 |
| 始终批准 | 工具调用大体上都会跑 | 可信的自动化,不是刚开始聊天 |
始终批准和自动互斥。两者同时请求时,始终批准优先。计划模式是另一种会话模式——它可以叠在始终批准上面,仍然拦住改文件。见「先计划再动手」。
产品名是始终批准。配置和 Claude 兼容设置里,同一模式可能写成 bypassPermissions。
每种模式做什么
询问
TUI 的默认。有风险的编辑、shell 和外部工具会停在卡片上。读取和内置只读命令列表不会,除非规则或钩子另有规定。
自动
分类器(加上快速路径)批准日常本地工作。危险或不清楚的调用仍会询问,或在非交互会话里失败(Auto mode blocked this action …)。只有自动模式功能打开时才提供 /auto(通常默认打开)。该开关关掉后,/auto 既不出现在列表里,也不能执行。
始终批准
跳过普通卡片,工具不用点确认就会跑。deny 规则、PreToolUse 钩子,以及部分匹配命令片段的 shell ask 规则仍然生效。记住的授权(包括「永不允许」)不会被查阅。非 shell 工具上的 ask 规则不会弹卡片。
原生 [ui] permission_mode 接受 ask、default(等同询问)、auto 和 always-approve。未知值回退到询问。
Claude 兼容的 permissions.defaultMode 还认识 acceptEdits、dontAsk、bypassPermissions 和 plan。那些名字是兼容项,不是额外的 MatchaCode 产品。--permission-mode 接受那份 Claude 风格列表(default、acceptEdits、auto、dontAsk、bypassPermissions、plan)。
在 TUI 里
| 动作 | 命令或按键 |
|---|---|
| 切换始终批准 | /always-approve 或 Ctrl+O |
| 切换自动 | /auto |
| 循环会话模式 | Shift+Tab(焦点在提示符) |
| 设置 | /settings → permission mode |
/always-approve 是开关:关 → 开,开 → 询问。它忽略多余参数。打开时的提示是 ⚠ Always-approve ON: all tool actions auto-run(在计划模式下会警告改文件仍被拦住)。
/auto 从询问或始终批准切到自动。已经在自动时再跑一次,会回到询问。
在 matcha agent / shell 内置命令列表里,/always-approve 的别名是 /yolo(那里还接受 on / off)。交互式 TUI 命令不登记这个别名——请输入 /always-approve。CLI 旗标别名 --yolo 可以用。
自动模式可用时(默认如此),Shift+Tab 循环为 普通 → 计划 → 自动 → 始终批准 → 普通。若自动被关掉,环上会跳过自动(普通 → 计划 → 始终批准)。从普通按一次落到计划。屏幕上若有计划模式提示,会先把自动或始终批准收成询问,好让这一下仍能进到计划。
从命令行
matcha --always-approve -p "Run the test suite"
matcha --yolo -p "Run the test suite" # same flag
matcha --permission-mode auto
matcha --permission-mode bypassPermissions
matcha agent --always-approve stdio--always-approve 也接受更早的别名 --dangerously-skip-permissions。CLI 会覆盖该进程的 [ui] permission_mode。若同时传入始终批准和自动,始终批准优先。
ACP 客户端可在 session/new 上设置 "_meta": { "yoloMode": true }。
配置
# ~/.matcha/config.toml
[ui]
permission_mode = "always-approve" # or "auto", "ask"在 TUI 里切换会写入同一项。
记住这条命令
按命令的 Always allow: cargo test / 「永不允许」行默认关闭,直到你打开:
[ui]
remember_tool_approvals = true这些授权是个人的、按项目的,存在仓库外面。内置危险列表上的命令(rm、chmod、git push 等)会再问一次,而不是用记住的前缀。明确的 allow 规则或始终批准仍能覆盖它们。
关掉始终批准并锁死
管理员可以把始终批准钉死为关:
# ~/.matcha/requirements.toml or /etc/matcha/requirements.toml
[ui]
disable_bypass_permissions_mode = true不要用 permission_mode 来做这把锁;那一项是可切换的默认值。requirements.toml 里旧的 [ui] yolo = false 也会把始终批准钉死为关。