组织与配置策略
适用于 OpenCode V2;核验日期:2026-11-12。
Policies 是不可交互的 allow/deny 控制,和每个代理可询问的 permissions 不同。它能禁用供应商或扩展,也能在工具权限通过后继续硬拒绝。策略不授予原本被权限拒绝的操作。
# 只允许指定提供商#
json1{ 2 "$schema": "https://opencode.ai/config.json", 3 "policies": [ 4 { "action": "provider.use", "resource": "*", "effect": "deny" }, 5 { "action": "provider.use", "resource": "anthropic", "effect": "allow" }, 6 { "action": "tool.use", "resource": "shell:git push *", "effect": "deny" } 7 ] 8}
同一来源内最后匹配生效,没有匹配默认允许。* 和 ? 做整个值的通配匹配,没有“越具体优先”规则。无效语句会被丢弃并产生警告,所以配置 deny 后必须查看日志并测试。
# 支持的动作#
| action | 控制对象 |
|---|---|
| provider.use | 提供商 ID |
| tool.use | 权限动作与资源组成的 action:value |
| mcp.use | MCP 服务器 |
| skill.use | 技能 |
| plugin.use | 插件 |
| integration.connect / integration.use | 集成连接与使用 |
| websearch.use | 搜索提供商 |
各动作的资源格式要按官方定义配置,不能把所有动作都当文件路径。tool.use 的 shell:git push * 也覆盖无参数的 git push;其 allow 只能解除更早的策略限制,不能覆盖代理 deny 或替代用户批准。
# 优先级与普通配置相反#
从高到低为:macOS 管理偏好、系统配置、Console 工作区、全局配置、直接项目配置、.opencode 项目配置。同类目录中外层高于内层。更广范围的策略后评估,因此仓库不能用局部 allow 覆盖全局 deny。
普通权限适合任务交互;强制组织规则应放在用户不能随意覆盖的管理配置。策略不是宿主 OS 隔离,也不能修复恶意插件内部未受检查的任意代码行为。
# 调试#
被禁止的提供商从目录消失;tool.use 拒绝返回配置策略阻止错误,不显示确认按钮。先核对当前连接的 Console 工作区、系统配置和全局文件,不要反复点 Allow always。持久批准不能绕过策略。
旧 experimental.policies 仍兼容,但新配置使用顶层 policies。V1 提供商白名单和黑名单迁移到 provider.use 规则。