Skip to content

工具

工具允许 LLM 在你的代码库中执行操作。OpenCode 附带内置工具,并支持通过自定义工具和 MCP 服务器进行扩展。

默认情况下,所有工具都已启用且不需要权限即可运行。你可以通过权限配置控制行为。

内置工具

bash

在你的项目环境中执行 Shell 命令。

bash
# LLM 可以运行如下命令:
npm install
git status
python test.py

edit

使用精确字符串替换修改现有文件。这是 LLM 修改代码的主要方式 — 找到精确的文本匹配并替换它。

write

创建新文件或覆盖现有文件。由 edit 权限控制(覆盖所有文件修改:editwriteapply_patchmultiedit)。

read

从代码库中读取文件内容。支持对大文件读取特定行范围。

grep

使用正则表达式搜索文件内容。在整个代码库中进行快速内容搜索,支持文件模式过滤。

glob

通过模式匹配查找文件(如 **/*.jssrc/**/*.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

加载一个 skillSKILL.md 文件)并将其内容返回到对话中。

todowrite

在编码会话期间管理待办事项列表。创建和更新任务列表以跟踪复杂的多步骤操作进度。

webfetch

获取和读取网页内容。对查阅文档或在线资源很有用。

websearch

使用 Exa AI 搜索网络。无需 API 密钥。

TIP

使用 websearch 进行发现(查找信息),使用 webfetch 进行检索(从已知 URL 获取内容)。

仅在使用 OpenCode 供应商或设置 OPENCODE_ENABLE_EXA=1 时可用:

bash
OPENCODE_ENABLE_EXA=1 opencode

question

在执行过程中向用户提问。包括供用户选择的选项,适用于收集偏好、澄清说明或获取决策。

工具权限

通过 permission 配置控制每个工具的行为:

json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "allow",
    "bash": "ask",
    "webfetch": "allow",
    "websearch": "allow"
  }
}
行为
"allow"工具无需询问即可运行(默认)
"ask"运行前需要用户批准
"deny"工具被禁用

使用通配符控制 MCP 服务器的工具:

json
{
  "permission": {
    "mymcp_*": "ask"
  }
}

自定义工具

定义 LLM 可以调用的自定义工具。这些工具执行任意代码,在配置文件中定义。

详见自定义工具文档

MCP 服务器

MCP(模型上下文协议)服务器集成外部工具和服务 — 数据库访问、API 集成、第三方服务等。

opencode.json 中配置:

json
{
  "mcp": {
    "my-server": {
      "type": "remote",
      "url": "https://example.com/mcp",
      "enabled": true
    }
  }
}

详见 MCP 服务器文档

内部机制

grepgloblist 等工具内部使用 ripgrep。默认情况下,ripgrep 遵守 .gitignore 规则。

要包含通常被忽略的文件,在项目根目录创建 .ignore 文件:

# .ignore
!node_modules/
!dist/
!build/

延伸阅读

Released under the GPLv3 License.