跳到正文
FunCoding

搜索

搜索文档、智能体、博客、Skill 和 MCP

权限与工具

用 permission 配置决定每个动作自动运行、询问还是阻止:allow/ask/deny、--auto 模式、全局与细粒度规则(最后匹配的规则胜出)、内置工具清单。

权限

OpenCode 用 permission 配置决定某个动作应该自动运行、提示你还是被阻止。从 v1.1.1 起,旧的 tools 布尔配置已弃用并合并进 permission(旧的 tools 配置为向后兼容仍受支持)。每条权限规则解析为:"allow"(无需批准就运行)、"ask"(提示批准)、"deny"(阻止该动作)。

自动模式:用 --auto 启动 OpenCode,自动批准没有被显式拒绝的权限请求(opencode --auto 或 opencode run --auto "Refactor this module")。显式的 "deny" 规则仍然强制,自动模式只改变本来会询问批准的请求。在 TUI 里打开命令面板选 Enable auto-approve permissions 或 Disable auto-approve permissions 切换。

配置:可以用 * 全局设置权限,再覆盖特定工具:

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "*": "ask",
    "bash": "allow",
    "edit": "deny"
  }
}

也可以一次设置全部:"permission": "allow"。

细粒度规则(对象语法):对多数权限,可以用对象根据工具输入应用不同的动作:

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "bash": {
      "*": "ask",
      "git *": "allow",
      "npm *": "allow",
      "rm *": "deny",
      "grep *": "allow"
    },
    "edit": {
      "*": "deny",
      "packages/web/src/content/docs/*.mdx": "allow"
    }
  }
}

规则按模式匹配求值,最后一个匹配的规则胜出。常见做法是把兜底的 "*" 规则放在前面,更具体的规则放在后面。

工具

工具让 LLM 在你的代码库里执行动作。OpenCode 带有一组内置工具,也可以用自定义工具或 MCP 服务器扩展。默认所有工具都启用,运行不需要权限;通过 permission 字段控制每个工具(可以用通配符一次控制多个,如 "mymcp_*": "ask" 让某个 MCP 服务器的所有工具都需批准)。内置工具:

  • bash:在项目环境里执行 shell 命令
  • edit:用精确字符串替换修改现有文件,是 LLM 修改代码的主要方式
  • write:创建新文件或覆盖已有文件。write、edit 和 apply_patch 都由 edit 权限控制,它涵盖所有文件修改
  • read:读取文件内容,支持读取大文件的特定行范围
  • grep:用正则表达式搜索文件内容
  • glob:按模式匹配找文件,如 **/*.js,返回按修改时间排序的匹配路径
  • lsp(实验性):与配置的 LSP 服务器交互获得代码智能(定义、引用、悬停、调用层级),仅在 OPENCODE_EXPERIMENTAL_LSP_TOOL=true 时可用
  • apply_patch:应用补丁文件
  • skill:加载一个 skill(SKILL.md 文件)并把内容返回到对话里
  • todowrite:在编码会话中管理待办列表(默认对子智能体禁用)
  • webfetch:获取网页内容
  • websearch:用 Exa 或 Parallel 搜索网络,仅在使用 OpenCode 或 OpenCode Go 提供商,或设置了 OPENCODE_ENABLE_EXA 或 OPENCODE_ENABLE_PARALLEL 环境变量时可用,无需 API Key
  • question:在执行期间向用户提问