五、权限系统详解
OpenCode 的权限系统控制 AI 可以访问哪些工具和资源。
权限模式
每个工具可以有三种权限模式:
- allow:自动允许,不询问用户
- deny:自动拒绝,不执行
- ask:询问用户,由ǜ�用户决定
配置方式
在 opencode.json 中配置:
jsonc
{
"permission": {
"read": "allow",
"edit": "ask",
"bash": "deny"
}
}
支持 Glob 模式匹配:
jsonc
{
"tools": {
"read": true,
"edit": "ask",
"bash*": false
}
}
权限级别
权限按以下优先级评估(从高到低):
- Agent 级别:特定 Agent 的权限配置
- 工具级别:全局工具权限
- 默认级别:默认行为
Agent 级权限
可以为不同 Agent 设置不同的权限:
jsonc
{
"agent": {
"code-reviewer": {
"permission": {
"read": "allow",
"edit": "deny",
"bash": "deny"
}
}
}
}
这样,code-reviewer Agent 只能读取文件,无法修改或执行命令。
Skill 权限
也可以控制 AI 能够加载哪些 Skill:
jsonc
{
"permission": {
"skill": {
"*": "allow",
"internal-*": "deny",
"experimental-*": "ask"
}
}
}
实际案例
比如你想让一个 Agent 只读不写:
jsonc
{
"agent": {
"reviewer": {
"description": "代码审查专家,只读模式",
"mode": "subagent",
"permission": {
"bash": "deny",
"edit": "deny",
"write": "deny",
"read": "allow"
}
}
}
}
权限提示与日志
当权限被拒绝时,OpenCode 会记录日志:
Tool "bash" was blocked by permission settings.
Allowed tools: read, glob, grep
安全建议
- 最小权限原则:只给 AI 必要的权限
- 分层管理:不同 Agent 给不同权限
- 定期审查:定期检查权限配置是否合理
- 注意布尔值:老版本使用 true/false,新版本用 allow/deny/ask
例如,生产环境中可以这样配置:
jsonc
{
"permission": {
"read": "allow",
"glob": "allow",
"grep": "allow",
"edit": "ask",
"write": "ask",
"bash": "deny",
"webfetch": "allow"
}
}
这样配置能在保证安全的同时,让 AI 发挥最大效率。
总结
权限系统是 OpenCode 安全性的基石。通过本文你学会了:
- 三种权限模式:allow/deny/ask
- 权限的分级配置:全局、工具、Agent
- 安全配置建议和实践案例
下一篇文章将介绍如何通过 MCP 协议为 OpenCode 添加外部工具能力。