跳至内容

工具

管理 LLM 可以使用的工具。

工具允许 LLM 在您的代码库中执行操作。OpenCode 附带一套内置工具,但您可以通过自定义工具MCP 服务器来扩展它。

默认情况下,所有工具都已启用且无需运行权限。您可以通过权限来控制工具行为。


配置

使用 permission 字段控制工具行为。您可以允许、拒绝或要求每个工具获得批准。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"edit": "deny",
"bash": "ask",
"webfetch": "allow"
}
}

您还可以使用通配符一次控制多个工具。例如,要要求 MCP 服务器中的所有工具获得批准

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"mymcp_*": "ask"
}
}

了解更多关于配置权限。


内置

以下是 OpenCode 中所有可用的内置工具。


bash

在您的项目环境中执行 shell 命令。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"bash": "allow"
}
}

此工具允许 LLM 运行终端命令,例如 npm installgit status 或任何其他 shell 命令。


编辑

使用精确字符串替换修改现有文件。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"edit": "allow"
}
}

此工具通过替换精确匹配的文本来对文件执行精确编辑。这是 LLM 修改代码的主要方式。


写入

创建新文件或覆盖现有文件。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"edit": "allow"
}
}

使用此工具允许 LLM 创建新文件。如果文件已存在,它将覆盖现有文件。


读取

从您的代码库中读取文件内容。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"read": "allow"
}
}

此工具读取文件并返回其内容。它支持读取大型文件的特定行范围。


grep

使用正则表达式搜索文件内容。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"grep": "allow"
}
}

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


glob

通过模式匹配查找文件。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"glob": "allow"
}
}

使用 glob 模式搜索文件,例如 **/*.jssrc/**/*.ts。返回按修改时间排序的匹配文件路径。


列出

列出给定路径中的文件和目录。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"list": "allow"
}
}

此工具列出目录内容。它接受 glob 模式来过滤结果。


LSP (实验性)

与您配置的 LSP 服务器交互,以获取代码智能功能,例如定义、引用、悬停信息和调用层次结构。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"lsp": "allow"
}
}

支持的操作包括 goToDefinitionfindReferenceshoverdocumentSymbolworkspaceSymbolgoToImplementationprepareCallHierarchyincomingCallsoutgoingCalls

要配置哪些 LSP 服务器可用于您的项目,请参阅LSP 服务器


应用补丁

将补丁应用于文件。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"edit": "allow"
}
}

此工具将补丁文件应用于您的代码库。适用于从各种来源应用差异和补丁。

处理 tool.execute.beforetool.execute.after 钩子时,请检查 input.tool === "apply_patch"(而非 "patch")。

apply_patch 使用 output.args.patchText 而非 output.args.filePath。路径嵌入在 patchText 内的标记行中,并且是相对于项目根目录的(例如:*** Add File: src/new-file.ts*** Update File: src/existing.ts*** Move to: src/renamed.ts*** Delete File: src/obsolete.ts)。


技能

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

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"skill": "allow"
}
}

待办事项写入

在编码会话期间管理待办事项列表。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"todowrite": "allow"
}
}

创建和更新任务列表,以在复杂操作期间跟踪进度。LLM 使用此功能来组织多步骤任务。


网页抓取

抓取网页内容。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"webfetch": "allow"
}
}

允许 LLM 抓取和读取网页。适用于查找文档或研究在线资源。


网页搜索

在网络上搜索信息。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"websearch": "allow"
}
}

使用 Exa AI 执行网页搜索,以在线查找相关信息。适用于研究主题、查找时事或收集训练数据截止日期之后的信息。

无需 API 密钥 — 该工具无需身份验证即可直接连接到 Exa AI 托管的 MCP 服务。


提问

在执行期间向用户提问。

opencode.json
{
"$schema": "https://opencode.ac.cn/config.json",
"permission": {
"question": "allow"
}
}

此工具允许 LLM 在任务期间向用户提问。它有助于

  • 收集用户偏好或需求
  • 澄清模糊指令
  • 就实施方案做出决策
  • 提供关于采取何种方向的选择

每个问题都包含一个标题、问题文本和选项列表。用户可以从提供的选项中选择或输入自定义答案。当存在多个问题时,用户可以在提交所有答案之前在它们之间进行导航。


自定义工具

自定义工具允许您定义 LLM 可以调用的函数。这些函数在您的配置文件中定义,并且可以执行任意代码。

了解更多关于创建自定义工具。


MCP 服务器

MCP(模型上下文协议)服务器允许您集成外部工具和服务。这包括数据库访问、API 集成和第三方服务。

了解更多关于配置 MCP 服务器。


内部机制

在内部,grepgloblist 等工具底层使用 ripgrep。默认情况下,ripgrep 遵循 .gitignore 模式,这意味着您的 .gitignore 中列出的文件和目录将从搜索和列表中排除。


忽略模式

要包含通常被忽略的文件,请在项目根目录中创建一个 .ignore 文件。此文件可以明确允许某些路径。

.ignore
!node_modules/
!dist/
!build/

例如,此 .ignore 文件允许 ripgrep 在 node_modules/dist/build/ 目录中进行搜索,即使它们已在 .gitignore 中列出。