OpenCode 工具
OpenCode 的核心能力不仅来自大模型本身,更来自它可以调用的工具(Tools)。
工具的本质:让 LLM 从会说话变成会做事。
Tools = OpenCode 的执行能力,而权限 = 安全边界。
一、什么是工具(Tools)
工具是 LLM 在项目中执行操作的能力接口,例如:
- 读取代码
- 修改文件
- 执行命令
- 搜索代码
- 访问网络
没有工具:只能生成代码
有工具:可以直接操作项目
二、工具权限控制(最重要)
默认情况下:
- 所有工具都是启用的
- 且无需确认即可执行
生产环境必须配置权限!
1、基础权限配置
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny",
"bash": "ask",
"webfetch": "allow"
}
}
| 权限值 | 说明 |
|---|---|
| allow | 允许直接执行 |
| deny | 完全禁止 |
| ask | 执行前需要人工确认 |
2、通配符控制
可以批量控制工具:
{
"permission": {
"mymcp_*": "ask"
}
}
所有来自 MCP 的工具都需要审批
三、内置工具详解
OpenCode 内置了一整套工程级工具:
1、bash(命令执行)
{
"permission": {
"bash": "allow"
}
}
作用:
- 执行 shell 命令
- 如 npm install、git status
风险:高(建议设为 ask)
2、edit(核心工具)
{
"permission": {
"edit": "allow"
}
}
作用:
- 修改现有文件
- 基于精确文本替换
说明:这是 AI 修改代码的核心能力
3、write(文件创建)
作用:
- 创建新文件
- 覆盖已有文件
注意:
write 受 edit 权限控制
4、read(读取文件)
{
"permission": {
"read": "allow"
}
}
作用:
- 读取代码文件
- 支持按行读取
风险:低(建议 always allow)
5、grep(内容搜索)
{
"permission": {
"grep": "allow"
}
}
作用:
- 正则搜索代码
6、glob(文件匹配)
作用:
- 查找文件路径(如 src/**/*.ts)
7、list(目录浏览)
作用:
- 列出目录结构
8、patch(补丁应用)
作用:
- 应用 diff 补丁
说明:受 edit 权限控制
9、lsp(实验性)
作用:
- 代码智能分析(跳转定义、查引用)
启用方式:
OPENCODE_EXPERIMENTAL_LSP_TOOL=true
10、skill(技能加载)
作用:
- 加载 SKILL.md
- 增强 AI 行为
11、todowrite(任务管理)
作用:
- 维护任务列表
- 跟踪复杂流程
12、webfetch(网页读取)
作用:
- 获取指定 URL 内容
13、websearch(联网搜索)
启用方式:
OPENCODE_ENABLE_EXA=1 opencode
作用:
- 搜索互联网信息
区别:
- websearch:查找信息(发现)
- webfetch:读取内容(获取)
14、question(交互提问)
作用:
- 向用户提问
- 收集需求
适用于:
- 需求不明确
- 需要用户决策
四、自定义工具
你可以定义自己的工具,让 AI 执行自定义逻辑。
例如:
- 调用内部 API
- 操作数据库
- 执行业务逻辑
本质:让 LLM 调用函数
五、MCP 服务器(高级能力)
MCP(Model Context Protocol)允许你接入外部系统:
- 数据库
- 第三方 API
- 内部服务
相当于给 AI 接上"外部能力"
六、底层机制(重要)
OpenCode 使用 ripgrep 作为搜索引擎:
- 遵循 .gitignore
- 默认忽略 node_modules 等目录
如何覆盖忽略规则
创建文件:
.ignore
示例:
!node_modules/ !dist/ !build/
强制包含这些目录
七、最佳实践(强烈建议)
- read / grep / glob → allow
- edit → ask(开发阶段)
- bash → ask(生产环境)
- webfetch → allow
核心原则:
- 读取可以放开
- 修改必须控制
- 执行命令要谨慎
点我分享笔记