权限与安全
权限(Permission)与策略(Policy)的区分
- Permission:控制 session 内工具能做什么(本页第一部分)
- Policy:控制 OpenCode 是否可以使用某个已配置资源(目前仅
provider.use,本页第二部分)
两者是不同层面的门控,不要混用。
Permission 三态
allow(放行)/ ask(需批准)/ deny(禁用)。v1.1.1 起原来的 tools 布尔配置已废弃合并入 permission(仍向后兼容)。
Auto 模式
opencode --auto 或 opencode run --auto "...":自动批准所有未被显式 deny 的权限请求;显式 deny 规则仍然生效。TUI 内可用命令面板切换 “Enable/Disable auto-approve permissions”,开启时提示符旁显示 auto 标记。
配置语法
{
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}也可整体设为字符串:"permission": "allow"。
细粒度对象语法(Granular Rules)
{
"permission": {
"bash": {"*": "ask", "git *": "allow", "rm *": "deny"},
"edit": {"*": "deny", "packages/web/src/content/docs/*.mdx": "allow"}
}
}匹配规则:按模式匹配,最后一条匹配规则生效,因此惯例是把 * 通配放最前,具体规则放后面覆盖。
通配符:* 匹配任意长度字符,? 匹配单字符。
Home 目录展开与外部目录
~/$HOME可用于路径开头展开为用户目录external_directory权限键专门控制”触达工作区外路径”的行为(适用于 read/edit/glob/grep 及很多 bash 命令),home 展开本身不代表纳入工作区,仍需显式external_directory规则放行外部路径
可用权限键完整列表
read、edit(覆盖 edit/write/apply_patch)、glob、grep、bash、task(子 Agent 调用)、skill、lsp(当前非细粒度)、question、webfetch、websearch、external_directory、doom_loop(同一工具调用连续 3 次完全相同输入时触发)。
默认值
- 大多数权限默认
allow doom_loop、external_directory默认askread默认allow,但.env/.env.*默认deny(.env.example例外 allow)——这是 OpenCode 内置的一条安全默认规则
”Ask” 时的三个可选结果
once(仅本次)/ always(本 session 内后续匹配请求自动批准)/ reject(拒绝)。
Agent 级覆盖
Agent 的 permission 与全局配置合并,Agent 规则优先。也可在 Markdown Agent 文件的 frontmatter 中定义(详见 Agent系统)。
Policy(资源策略,实验特性)
配置在 experimental.policies 数组,每条含 effect(allow/deny)、action、resource。目前仅支持一种 action:provider.use(控制能否使用某 LLM Provider)。
{
"experimental": {
"policies": [
{"effect": "deny", "action": "provider.use", "resource": "openai"}
]
}
}resource支持通配符(company-*)- 最后匹配规则生效,惯用先写宽泛 deny 再写具体 allow 做白名单
- 未匹配任何规则时默认允许
- 全局配置的 policy 优先于项目配置(防止仓库越权重新启用被组织禁用的 Provider)——这是与 permission 不同的优先级方向(permission 是就近覆盖,policy 是全局压制项目)
- 官方建议用 Policy 取代旧的
disabled_providers/enabled_providers配置项
网络与证书(企业网络环境)
- 支持标准代理环境变量
HTTPS_PROXY/HTTP_PROXY;必须用NO_PROXY=localhost,127.0.0.1放行本地 TUI↔本地 HTTP server 通信,否则会形成路由环 - 代理认证:URL 内嵌
user:pass(不建议硬编码密码,用环境变量);NTLM/Kerberos 等高级认证建议改用支持该认证方式的 LLM Gateway 中转 - 自定义 CA 证书:
NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
Enterprise(企业部署)
- 核心承诺:OpenCode 不存储代码或上下文数据,处理均在本地或直连你配置的 AI Provider 完成
- 唯一例外是
/share功能(若启用,对话数据会发送到 opencode.ai 托管的分享页 CDN),企业试用建议"share": "disabled" - 代码归属:用户拥有 OpenCode 产出的全部代码,无许可限制
- 定价:按座位收费;若已有自建 LLM Gateway,不额外收 token 费用
- 部署能力:集中式配置(Central Config)+ SSO 集成 + 内部 AI Gateway 强制路由(可禁用其他 Provider);分享页自托管在路线图中
- 私有 npm registry 支持:基于 Bun 原生
.npmrc支持(如 JFrog Artifactory/Nexus),需提前npm login --registry=...完成认证
关联
- 索引 — 返回总索引
- Agent系统 — Permission 作为 Agent 的工具门控机制
- 模型与订阅 — Policy 常用于限制 Provider 访问范围
- 对比Claude-Code — 权限模型(allow/ask/deny + 细粒度 glob)与 Claude Code 的权限模式高度相似
来源
https://opencode.ai/docs/{permissions,policies,network,enterprise}.mdx(dev 分支)。整理:赵卫国 2026-07-07。