OpenCode: OpenCode工具
最后更新:2026-08-31
OpenCode 的强大能力源于其内置工具体系,AI 通过调用工具来执行具体操作。
1. 你将学到
- 内置工具概览
- 文件操作工具
- Shell 执行工具
- 搜索与分析工具
- 工具配置与权限
2. 内置工具概览
| 工具 | 功能 | 权限级别 |
|---|---|---|
read |
读取文件内容 | 只读 |
write |
写入/创建文件 | 写入 |
edit |
编辑/修补文件 | 写入 |
bash |
执行 Shell 命令 | 执行 |
grep |
搜索文件内容 | 只读 |
glob |
按模式查找文件 | 只读 |
list |
列出目录内容 | 只读 |
webfetch |
获取网页内容 | 网络 |
task |
调用子代理 | 代理 |
3. 文件操作工具
(1) read(读取文件)
AI 自动读取项目文件来理解上下文:
TEXT
📖 仅展示
查看 src/index.ts 的内容
(2) write(写入文件)
创建新文件或覆盖文件:
TEXT
📖 仅展示
创建 src/utils/logger.ts,实现一个简单的日志工具
(3) edit(编辑文件)
精确修改文件的部分内容,使用搜索+替换:
TEXT
📖 仅展示
将 src/config.ts 中的 API_URL 从 localhost 改为 production.example.com
4. Shell 执行工具
(1) bash
执行任意 Shell 命令:
TEXT
📖 仅展示
运行 npm test 并分析失败的测试
AI 会:
- 执行
npm test - 分析输出中的错误信息
- 定位问题并给出修复建议
- 可以直接修改代码修复问题
(2) 常用场景
| 场景 | 示例 |
|---|---|
| 安装依赖 | "安装 express 和 cors" |
| 运行测试 | "运行测试并修复失败的用例" |
| 启动项目 | "启动开发服务器" |
| 查看日志 | "查看最近的错误日志" |
5. 搜索与分析工具
(1) grep
搜索文件内容:
TEXT
📖 仅展示
在项目中搜索所有使用了 deprecated API 的地方
(2) glob
按模式查找文件:
TEXT
📖 仅展示
找出项目中所有的测试文件
(3) list
列出目录内容:
TEXT
📖 仅展示
查看 src/ 目录的结构
6. 工具配置
(1) 全局工具开关
JSON
{
"tools": {
"write": true,
"edit": true,
"bash": true,
"webfetch": false
}
}
(2) 代理级工具配置
JSON
{
"agent": {
"review": {
"tools": {
"write": false,
"edit": false
}
}
}
}
(3) 权限配置
JSON
{
"permission": {
"edit": "ask",
"bash": {
"*": "ask",
"git status *": "allow",
"npm test": "allow"
}
}
}
| 权限值 | 说明 |
|---|---|
allow |
直接允许,无需确认 |
ask |
需要用户确认 |
deny |
直接拒绝 |
7. MCP 扩展工具
通过 MCP(Model Context Protocol)可以扩展更多工具:
BASH
opencode mcp add
详见第 17 课 MCP 服务器配置。
❓ 常见问题
Q 如何禁止 AI 执行危险操作?
A 在 permission 配置中将 bash 设为 ask 或 deny,这样 AI 执行命令前需要你确认。也可以用 Glob 模式精细控制:允许
git status,拒绝 rm -rf。Q AI 执行了错误的修改怎么办?
A 立即使用 /undo 撤销。建议在 opencode.json 中将 edit 和 write 权限设为 ask,这样 AI 修改文件前需要你确认。
Q Alice 允许所有工具,Bob 只允许只读工具,谁更安全?
A Bob 更安全。只读配置(禁用 write/edit/bash)可以防止 AI 做出任何修改,适合代码审查场景。Alice 的配置效率更高但风险也更大。
📖 小节
- 内置工具:read、write、edit、bash、grep、glob、list、webfetch、task
- 工具权限分三级:allow、ask、deny
- 可在全局和代理级别配置工具权限
- bash 权限支持 Glob 模式精细控制
- 通过 MCP 可以扩展更多工具
📝 作业
-
基础题:在 opencode.json 中配置工具权限,将 edit 设为 ask。
-
进阶题:创建一个只读代理,禁用所有写入和执行工具。
-
挑战题:使用 Glob 模式配置 bash 权限,允许 git 操作但拒绝 rm 和其他危险命令。