工具 (Tools)

管理 LLM 可以使用的工具
工具允许 LLM 在您的代码库中执行操作。OpenCode 内置了一系列工具,您也可以通过自定义工具或 MCP 服务器进行扩展。
默认情况下,所有工具都是启用的,并且不需要权限即可运行。您可以通过权限设置来控制工具的行为。

配置 (Configure)

使用 permission 字段来控制工具行为。您可以为每个工具设置允许(allow)、拒绝(deny)或需要批准(ask)。
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "deny",
    "bash": "ask",
    "webfetch": "allow"
  }
}
opencode.json
您还可以使用通配符同时控制多个工具。例如,要求批准来自某个 MCP 服务器的所有工具:
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "mymcp_*": "ask"
  }
}
opencode.json

内置工具 (Built-in)

以下是 OpenCode 中提供的所有内置工具:

bash

在您的项目环境中执行 Shell 命令。允许 LLM 运行终端命令,如 npm install、git status 或任何其他 Shell 命令。

edit

使用精确的字符串替换来修改现有文件。这是 LLM 修改代码的主要方式。

write

创建新文件或覆盖现有文件。
[!NOTE] write 工具受 edit 权限控制,该权限涵盖了所有文件修改操作(edit、write、patch、multiedit)。

read

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

grep

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

glob

通过模式匹配查找文件。使用 Glob 模式(如 **/*.js 或 src/**/*.ts)搜索文件。返回按修改时间排序的匹配文件路径。

list

列出给定路径下的文件和目录。支持使用 Glob 模式过滤结果。

lsp (实验性)

与配置的 LSP 服务器交互,获取代码智能功能,如定义跳转、引用查找、悬停信息和调用层级。
[!IMPORTANT] 仅当 OPENCODE_EXPERIMENTAL_LSP_TOOL=true 时可用。

patch

将补丁应用于文件。适用于应用来自各种来源的 Diff 和补丁文件。
[!NOTE] 受 edit 权限控制。

skill

加载一个技能(SKILL.md 文件)并在对话中返回其内容。

todowrite

在编码会话期间管理待办事项列表。用于跟踪复杂操作的进度。
[!TIP] 默认情况下子代理(subagents)禁用此工具,但可以手动开启。

todoread

读取现有的待办事项列表。供 LLM 跟踪待完成或已完成的任务。

webfetch

获取网页内容。允许 LLM 获取并读取网页,适用于查阅文档或在线研究。

question

在执行任务期间向用户提问。用于:
  • 收集用户偏好或需求。
  • 澄清模糊的指令。
  • 征求实现方案的选择决策。
  • 询问下一步的方向。

自定义工具 (Custom tools)

自定义工具允许您定义自己的函数供 LLM 调用。这些函数在配置文件中定义,可以执行任意代码。 了解更多关于创建自定义工具的信息。

MCP 服务器 (MCP servers)

MCP(模型上下文协议)服务器允许您集成外部工具和服务,包括数据库访问、API 集成和第三方服务。 了解更多关于配置 MCP 服务器的信息。

内部机制 (Internals)

在内部,grep、glob 和 list 等工具底层使用了 ripgrep。默认情况下,ripgrep 遵循 .gitignore 模式,这意味着 .gitignore 中列出的文件和目录将被排除在搜索和列表之外。

忽略模式 (Ignore patterns)

如果需要包含通常被忽略的文件,请在项目根目录创建一个 .ignore 文件来显式允许某些路径。
!node_modules/
!dist/
!build/
.ignore
例如,上面的文件允许 ripgrep 搜索这些目录,即使它们在 .gitignore 中。