代理第二十次请求确认才能运行 npm run test,你开始不看内容就按 Enter。一条错误的 rm 恰恰就是这时候溜过去的。解决办法不是关掉所有确认,而是逐条规则告诉 Verboo Code:哪些可以自己做,哪些必须先问,哪些永远不能做。这就是 /permissions 的用途。本文给出具体命令、规则语法,以及每条规则保存在哪里。
Verboo Code 的 /permissions 是做什么的?
它打开一个面板,用来创建、查看和删除代理工具的权限规则。每条规则决定某个工具(或该工具的某条具体命令)是无需询问直接放行、每次都要确认,还是一律拒绝。
该命令也可以用别名 /allowed-tools 调用。面板有五个标签:
| 标签 | 作用 |
|---|---|
| Recently denied | 列出最近被 auto 模式分类器拒绝的命令,可以批准或重试 |
| Allow | Verboo Code 使用这些工具前不再询问 |
| Ask | Verboo Code 使用这些工具前总是请求确认 |
| Deny | Verboo Code 总是拒绝使用这些工具 |
| Workspace | 项目之外、代理可以访问的额外目录 |
权限规则怎么写?
规则由工具名组成,后面可以跟一个括号内的限定符。没有括号时,规则作用于整个工具。
| 规则 | 匹配范围 |
|---|---|
WebFetch | WebFetch 工具的任何调用 |
Bash | 任何终端命令 |
Bash(npm run test:*) | 任何以 npm run test 开头的命令 |
Bash(git status) | 仅限命令 git status 本身 |
Read(**/.env) | 读取任意目录下的 .env 文件 |
WebFetch(domain:docs.python.org) | WebFetch 对该域名的请求 |
结尾的 :* 让 Bash 规则变成前缀匹配,面板上的描述是 "Any Bash command starting with"。没有它,规则只匹配完全相同的命令。在 Read、Edit 这类文件规则中,限定符遵循 .gitignore 的模式,所以 ** 可以跨目录匹配。
如果命令里有括号,用反斜杠转义:Bash(python -c "print\(1\)")。
怎样放行一条命令,让代理不再询问?
打开面板,进入 Allow 标签,选择 Add a new rule…,输入规则:
/permissions
# Allow 标签 → Add a new rule… →
Bash(npm run test:*)
输入规则后,Verboo Code 会询问保存位置,共有三个选项:
| 面板中的选项 | 文件 | 适用场景 |
|---|---|---|
| Project settings (local) | .verboo/settings.local.json | 只对你、只对当前项目 |
| Project settings | .verboo/settings.json | 整个团队,提交到 git |
| User settings | ~/.verboo/settings.json | 你自己,所有项目 |
规则也可以直接写进文件,不用打开面板。格式如下:
{
"permissions": {
"allow": [
"Bash(npm run test:*)",
"Bash(npm run lint:*)",
"Bash(git status)",
"Bash(git diff:*)"
],
"ask": [
"Bash(git push:*)"
],
"deny": [
"Read(**/.env)",
"Bash(rm -rf:*)"
]
}
}
为你总会批准的命令(测试、lint、只读的 git 操作)建一个简短的 allow 列表,就能去掉大部分确认,同时不放过任何危险操作。
怎样彻底阻止某个文件或命令?
把规则放进 Deny 标签。Deny 是自动拒绝:代理直接收到拒绝结果,根本不会来问你。
/permissions
# Deny 标签 → Add a new rule… →
Read(**/.env)
Read 规则作用于文件读取工具。如果你想在操作系统层面再加一层保护,可以把规则和 Verboo Code 的沙箱结合使用,它会隔离终端命令。
来自企业托管配置(managed settings)的规则会在面板中显示"不可修改"的提示,这种情况只有管理员能改。
为什么我的 allow 规则不起作用?
几乎都是因为有 deny 或 ask 规则匹配了同一条命令。Verboo Code 的判定顺序是:先 deny,再 ask,最后才是 allow。allow 永远赢不了 deny。
要检查三点:
- 所有文件中的规则都会生效。
~/.verboo/settings.json里的 deny,即使项目的.verboo/settings.json放行了,依然会阻止。 - 即使使用
--dangerously-skip-permissions,deny 依然有效。在代码中,deny 检查先于权限模式检查执行,所以连跳过确认的模式也绕不过它。 - 没有
:*的前缀就是精确命令。Bash(npm run test)不会放行npm run test -- --watch。
在列表中选中某条规则时,面板会显示它来自哪个文件,大多数问题几秒钟就能定位。
可以通过命令行传入权限吗?
可以,适合一次性会话或 CI。这些参数接受逗号或空格分隔的列表:
verboo --allowedTools "Bash(git:*) Edit" --disallowedTools "Bash(git push:*)"
如果要改变整体行为,而不只是单条规则,使用 --permission-mode。可用模式有 default、plan、acceptEdits、bypassPermissions 和 dontAsk。同样的值也可以写进 settings:
{
"permissions": {
"defaultMode": "acceptEdits"
}
}
怎样允许访问项目之外的目录?
在 /permissions 的 Workspace 标签中添加目录。Verboo Code 会询问只对本次会话生效,还是保存到项目的本地设置。在文件中对应的键是 additionalDirectories:
{
"permissions": {
"additionalDirectories": ["../shared-lib"]
}
}
规则配好后,代理可以连续跑测试和 lint 而不用叫你,多试几次也不会多花钱:Verboo Code 提供无限 token。



