权限与工具
用 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 Keyquestion:在执行期间向用户提问