工具
工具允许 LLM 在你的代码库中执行操作。OpenCode 附带内置工具,并支持通过自定义工具和 MCP 服务器进行扩展。
默认情况下,所有工具都已启用且不需要权限即可运行。你可以通过权限配置控制行为。
内置工具
bash
在你的项目环境中执行 Shell 命令。
# LLM 可以运行如下命令:
npm install
git status
python test.pyedit
使用精确字符串替换修改现有文件。这是 LLM 修改代码的主要方式 — 找到精确的文本匹配并替换它。
write
创建新文件或覆盖现有文件。由 edit 权限控制(覆盖所有文件修改:edit、write、apply_patch、multiedit)。
read
从代码库中读取文件内容。支持对大文件读取特定行范围。
grep
使用正则表达式搜索文件内容。在整个代码库中进行快速内容搜索,支持文件模式过滤。
glob
通过模式匹配查找文件(如 **/*.js、src/**/*.ts)。返回按修改时间排序的匹配文件路径。
list
列出给定路径中的文件和目录。接受 glob 模式过滤结果。
apply_patch
将补丁应用到文件。由 edit 权限控制。
INFO
apply_patch 使用 output.args.patchText 而不是 output.args.filePath。路径嵌入在补丁文本的标记行中(如 *** Add File: src/new-file.ts)。
lsp(实验性)
与已配置的 LSP 服务器交互,获取代码智能功能:
goToDefinition— 跳转到符号定义findReferences— 查找符号的所有引用hover— 获取悬停信息documentSymbol/workspaceSymbol— 浏览符号goToImplementation— 查找实现prepareCallHierarchy/incomingCalls/outgoingCalls— 调用层次结构
WARNING
仅在设置 OPENCODE_EXPERIMENTAL_LSP_TOOL=true(或 OPENCODE_EXPERIMENTAL=true)时可用。
skill
加载一个 skill(SKILL.md 文件)并将其内容返回到对话中。
todowrite
在编码会话期间管理待办事项列表。创建和更新任务列表以跟踪复杂的多步骤操作进度。
webfetch
获取和读取网页内容。对查阅文档或在线资源很有用。
websearch
使用 Exa AI 搜索网络。无需 API 密钥。
TIP
使用 websearch 进行发现(查找信息),使用 webfetch 进行检索(从已知 URL 获取内容)。
仅在使用 OpenCode 供应商或设置 OPENCODE_ENABLE_EXA=1 时可用:
OPENCODE_ENABLE_EXA=1 opencodequestion
在执行过程中向用户提问。包括供用户选择的选项,适用于收集偏好、澄清说明或获取决策。
工具权限
通过 permission 配置控制每个工具的行为:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow",
"bash": "ask",
"webfetch": "allow",
"websearch": "allow"
}
}| 值 | 行为 |
|---|---|
"allow" | 工具无需询问即可运行(默认) |
"ask" | 运行前需要用户批准 |
"deny" | 工具被禁用 |
使用通配符控制 MCP 服务器的工具:
{
"permission": {
"mymcp_*": "ask"
}
}自定义工具
定义 LLM 可以调用的自定义工具。这些工具执行任意代码,在配置文件中定义。
详见自定义工具文档。
MCP 服务器
MCP(模型上下文协议)服务器集成外部工具和服务 — 数据库访问、API 集成、第三方服务等。
在 opencode.json 中配置:
{
"mcp": {
"my-server": {
"type": "remote",
"url": "https://example.com/mcp",
"enabled": true
}
}
}详见 MCP 服务器文档。
内部机制
grep、glob 和 list 等工具内部使用 ripgrep。默认情况下,ripgrep 遵守 .gitignore 规则。
要包含通常被忽略的文件,在项目根目录创建 .ignore 文件:
# .ignore
!node_modules/
!dist/
!build/