五、权限系统详解

OpenCode 的权限系统控制 AI 可以访问哪些工具和资源。

权限模式

每个工具可以有三种权限模式:

  • allow:自动允许,不询问用户
  • deny:自动拒绝,不执行
  • ask:询问用户,由ǜ�用户决定

配置方式

在 opencode.json 中配置:

{
  "permission": {
    "read": "allow",
    "edit": "ask",
    "bash": "deny"
  }
}

支持 Glob 模式匹配:

{
  "tools": {
    "read": true,
    "edit": "ask",
    "bash*": false
  }
}

权限级别

权限按以下优先级评估(从高到低):

  1. Agent 级别:特定 Agent 的权限配置
  2. 工具级别:全局工具权限
  3. 默认级别:默认行为

Agent 级权限

可以为不同 Agent 设置不同的权限:

{
  "agent": {
    "code-reviewer": {
      "permission": {
        "read": "allow",
        "edit": "deny",
        "bash": "deny"
      }
    }
  }
}

这样,code-reviewer Agent 只能读取文件,无法修改或执行命令。

Skill 权限

也可以控制 AI 能够加载哪些 Skill:

{
  "permission": {
    "skill": {
      "*": "allow",
      "internal-*": "deny",
      "experimental-*": "ask"
    }
  }
}

实际案例

比如你想让一个 Agent 只读不写:

{
  "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

安全建议

  1. 最小权限原则:只给 AI 必要的权限
  2. 分层管理:不同 Agent 给不同权限
  3. 定期审查:定期检查权限配置是否合理
  4. 注意布尔值:老版本使用 true/false,新版本用 allow/deny/ask

例如,生产环境中可以这样配置:

{
  "permission": {
    "read": "allow",
    "glob": "allow",
    "grep": "allow",
    "edit": "ask",
    "write": "ask",
    "bash": "deny",
    "webfetch": "allow"
  }
}

这样配置能在保证安全的同时,让 AI 发挥最大效率。

总结

权限系统是 OpenCode 安全性的基石。通过本文你学会了:

  • 三种权限模式:allow/deny/ask
  • 权限的分级配置:全局、工具、Agent
  • 安全配置建议和实践案例

下一篇文章将介绍如何通过 MCP 协议为 OpenCode 添加外部工具能力。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐