权限

控制哪些操作需要批准才能运行。

OpenCode 使用 permission 配置来决定给定操作应该自动运行、提示你还是被阻止。

从 v1.1.1 开始,旧的 tools 布尔配置已弃用并合并到 permission 中。旧的 tools 配置仍然支持向后兼容。


# 操作#

每个权限规则解析为以下之一:

  • "allow" — 无需批准即可运行
  • "ask" — 提示批准
  • "deny" — 阻止操作

# 配置#

你可以全局设置权限(使用 *),并覆盖特定工具。

json
1{
2  "$schema": "https://opencode.ai/config.json",
3  "permission": {
4    "*": "ask",
5    "bash": "allow",
6    "edit": "deny"
7  }
8}

你也可以一次设置所有权限:

json
1{
2  "$schema": "https://opencode.ai/config.json",
3  "permission": "allow"
4}

# 细粒度规则(对象语法)#

对于大多数权限,你可以使用对象根据工具输入应用不同的操作。

json
1{
2  "$schema": "https://opencode.ai/config.json",
3  "permission": {
4    "bash": {
5      "*": "ask",
6      "git *": "allow",
7      "npm *": "allow",
8      "rm *": "deny"
9    },
10    "edit": {
11      "*": "deny",
12      "packages/web/src/content/docs/*.mdx": "allow"
13    }
14  }
15}

规则按模式匹配评估,最后匹配的规则获胜。常见的模式是把通配符 "*" 规则放在前面,更具体的规则放在后面。

## 通配符#

权限模式使用简单的通配符匹配:

  • * 匹配零个或多个任意字符
  • ? 精确匹配一个字符
  • 所有其他字符按字面意思匹配

# 可用权限#

OpenCode 权限按工具名称键入,加上几个安全保护:

权限描述
read读取文件(匹配文件路径)
edit所有文件修改(涵盖 edit、write、patch、multiedit)
glob文件通配(匹配 glob 模式)
grep内容搜索(匹配正则表达式模式)
list列出目录中的文件(匹配目录路径)
bash运行 shell 命令(匹配解析的命令如 git status --porcelain)
task启动子代理(匹配子代理类型)
skill加载技能(匹配技能名称)
lsp运行 LSP 查询(目前非细粒度)
todoread, todowrite读取/更新待办事项列表
webfetch获取 URL(匹配 URL)
websearch, codesearch网页/代码搜索(匹配查询)
external_directory当工具触及项目工作目录外的路径时触发
doom_loop当同一工具调用使用相同输入重复 3 次时触发

# 默认值#

如果你不指定任何内容,OpenCode 从宽松的默认值开始:

  • 大多数权限默认为 "allow"。
  • doom_loop 和 external_directory 默认为 "ask"。
  • read 是 "allow",但 .env 文件默认被拒绝:
json
1{
2  "permission": {
3    "read": {
4      "*": "allow",
5      "*.env": "deny",
6      "*.env.*": "deny",
7      "*.env.example": "allow"
8    }
9  }
10}

# "Ask" 的作用#

当 OpenCode 提示批准时,UI 提供三种结果:

  • once — 仅批准此请求
  • always — 批准与建议模式匹配的未来请求(在当前 OpenCode 会话的剩余时间内)
  • reject — 拒绝请求

always 将批准的模式集由工具提供(例如,bash 批准通常将安全命令前缀如 git status* 列入白名单)。


# 代理#

你可以按代理覆盖权限。代理权限与全局配置合并,代理规则优先。了解更多关于代理权限。

json
1{
2  "$schema": "https://opencode.ai/config.json",
3  "permission": {
4    "bash": {
5      "*": "ask",
6      "git status": "allow"
7    }
8  },
9  "agent": {
10    "build": {
11      "permission": {
12        "bash": {
13          "*": "ask",
14          "git status": "allow",
15          "git push": "allow"
16        }
17      }
18    }
19  }
20}

你也可以在 Markdown 中配置代理权限:

markdown
1<!-- ~/.config/opencode/agents/review.md -->
2---
3description: 无编辑的代码审查
4mode: subagent
5permission:
6  edit: deny
7  bash: ask
8  webfetch: deny
9---
10
11仅分析代码并建议更改。