权限
控制哪些操作需要批准才能运行。
OpenCode 使用 permission 配置来决定给定操作应该自动运行、提示你还是被阻止。
从 v1.1.1 开始,旧的 tools 布尔配置已弃用并合并到 permission 中。旧的 tools 配置仍然支持向后兼容。
# 操作#
每个权限规则解析为以下之一:
"allow"— 无需批准即可运行"ask"— 提示批准"deny"— 阻止操作
# 配置#
你可以全局设置权限(使用 *),并覆盖特定工具。
json1{ 2 "$schema": "https://opencode.ai/config.json", 3 "permission": { 4 "*": "ask", 5 "bash": "allow", 6 "edit": "deny" 7 } 8}
你也可以一次设置所有权限:
json1{ 2 "$schema": "https://opencode.ai/config.json", 3 "permission": "allow" 4}
# 细粒度规则(对象语法)#
对于大多数权限,你可以使用对象根据工具输入应用不同的操作。
json1{ 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文件默认被拒绝:
json1{ 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* 列入白名单)。
# 代理#
你可以按代理覆盖权限。代理权限与全局配置合并,代理规则优先。了解更多关于代理权限。
json1{ 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 中配置代理权限:
markdown1<!-- ~/.config/opencode/agents/review.md --> 2--- 3description: 无编辑的代码审查 4mode: subagent 5permission: 6 edit: deny 7 bash: ask 8 webfetch: deny 9--- 10 11仅分析代码并建议更改。