日常使用
权限模式与规则
heng-agent 改文件、跑命令前默认都先问你。四种权限模式(手动确认 / 自动改文件 / 计划模式 / 全部放行)怎么选、怎么切,确认框的四个选项,以及用允许 / 拒绝规则把常用命令放行、把危险命令拦死。
- 预计用时
- 约 8 分钟
- 适用版本
- v0.5.0 及以上
读文件、找文件、搜内容这类只读操作直接做;写入、修改、运行命令要不要问你,由权限模式和规则两样决定。无论哪种模式,文件读写都只能在工作目录里,越界一律拒绝。
选一种权限模式
| 模式 | 读文件、搜代码 | 改文件 | 跑命令 | 读网页、MCP 工具 | 适合 |
|---|---|---|---|---|---|
手动确认 ask(默认) |
直接做 | 问 | 问 | 问 | 日常使用 |
自动改文件 accept-edits |
直接做 | 直接做 | 问 | 问 | 信得过它改代码,命令还想把关 |
计划模式 plan |
直接做 | 拒绝 | 拒绝 | 问 | 大改动先出计划,你批准了再动手(见下一步) |
全部放行 auto |
直接做 | 直接做 | 直接做 | 直接做 | 只在 CI、一次性沙箱等可信环境用 |
切换方式:
- 输入框里按 Shift+Tab 循环切换,输入框边框颜色跟着变,底部状态栏最左边显示当前模式;
/mode plan直接指定;- 启动时
heng-agent --permission-mode accept-edits; - 想每次启动都是某个模式,在配置里写
settings.permission_mode(/config set settings.permission_mode plan)。命令行参数优先。
大改动先用计划模式
先按 Shift+Tab 切到计划模式(或 /mode plan),再说任务。它只读代码,想清楚后交出计划(改哪些文件、怎么改、怎么验证),完整显示给你选:
- 计划:改哪些文件、怎么改、怎么验证,完整显示。
- 三个选项:决定按哪种权限模式开始执行,见下表。
| 选项 | 之后 |
|---|---|
开始执行:改文件、跑命令前问我 y |
切到手动确认 ask |
开始执行:改文件不问,跑命令还问 a |
切到自动改文件 accept-edits |
继续规划 n |
留在计划模式,接着说要改哪里;ESC 同样 |
批准后它在同一轮里接着按计划做,不用再说一遍。在编辑器里(ACP)同样弹这三个选项,模式下拉框跟着变。
在确认框里放行
需要确认时弹出确认框(改文件时带红绿对比),用 ↑↓ 选或直接按字母(中文输入法开着时字母会被输入法截走,用 ↑↓ 加 Enter):
- 要改什么:红色是删掉的行,绿色是加上的行。
- 怎么答:四个选项的效果见下表。
| 选项 | 效果 |
|---|---|
这次允许 y |
只放行这一次 |
本会话一直允许 a |
这次启动期间这个工具不再问(只在这个进程的内存里,不写配置) |
以后都允许 p |
写成一条允许规则存进用户配置。跑命令时只放行这一条命令,比如 bash(npm test),不会一下放开所有命令 |
拒绝 n |
不执行;ESC 也是拒绝 |
写成持久规则
/permissions 查看当前规则,也能直接增删:
/permissions allow bash(npm test)
/permissions deny bash(git push*)
/permissions remove bash(npm test)规则写法是 工具名 或 工具名(匹配内容),可以用 * 通配:
- 跑命令比的是命令本身:
bash(git status*); - 读写文件比的是路径:
write_file(src/*); - 读网页比的是网址:
web_fetch(https://docs.python.org/*); - MCP 工具按名字:
mcp__calc__*;只写工具名就是这个工具的所有调用。
规则存在配置文件的 permissions 段:
{ "permissions": { "allow": ["bash(npm test)"], "deny": ["bash(git push*)"] } }记住几条硬限制
- 拒绝规则优先于一切,
auto模式下也拒绝;plan的只读约束也盖过允许规则。 - 组合命令不吃允许规则:命令里有
&&、;、|、重定向、$(...)等就照常询问,免得bash(git status*)放过git status && rm -rf …。拒绝规则则对组合命令逐段检查,cd x && 危险命令也拦得住。 - 文件路径换写法也拦得住:拒绝
.env,./.env、E:\项目\.env同样被拒。 - 项目配置只能加拒绝规则:别人的仓库没法给你放开命令。
- 读网页(
web_fetch)和 MCP 外部工具除auto外都会先问,网址完整显示——模型可能把代码内容拼进网址带出去。 - 项目里已有的 Claude Code 权限规则(
.claude/settings.json等)会自动翻译过来,但项目里的只采用拒绝规则;它的defaultMode不跟,权限模式由 heng-agent 自己定。
脚本模式(-p)里怎么放行
heng-agent -p "任务" 执行完一个任务就退出。没人可问,需要确认的操作默认都拒绝。要放行:
--allowed-tools:逗号分隔,写法同/permissions;--disallowed-tools额外禁止;- 或者用
--permission-mode accept-edits/auto。
终端
$ heng-agent -p "把 cart.py 的运费改成 15 元" --allowed-tools "edit_file,bash(python -m pytest*)" 做完是这样
常用的测试、构建命令写成了允许规则,不再每次都问;git push 这类不想让它碰的写成了拒绝规则,换什么模式都拦得住。/permissions 能看到这两类规则。