要在代码库里真正帮上忙光有聪明的脑子还不够大语言模型LLM还需要能够执行具体操作的“工具”。OpenCode 把这些工具视为模型与项目环境之间的纽带——读取文件、修改代码、运行命令、查文档甚至主动上网搜索靠的全是它们。这套工具系统既包含一批开箱即用的内置工具也保留了充分的扩展空间。默认情况下所有工具都是直接可用的调用前不需要向使用者确认。对高度信任的自动化流程来说这很方便但如果希望在某些操作上多加一道保险也完全可以做到。权限管理该放就放该收就收所有工具的权限都通过项目根目录的opencode.json配置文件集中管理。permission字段可以对每一个工具单独设置策略值只有三种allow—— 直接允许无需询问deny—— 直接拒绝压根不调用ask—— 每次调用前弹出确认比如想让模型可以运行终端命令但每次都要点头同意就这么写{$schema:https://opencode.ai/config.json,permission:{bash:ask}}批量控制也不在话下。用通配符就能一次性给某个 MCP 服务器带来的所有工具加上审批例如mymcp_*: ask会让所有以mymcp_开头的工具都变成“需要确认才执行”。内置工具全家福OpenCode 内置了十几个工具几乎覆盖了开发过程中方方面面的操作。下面逐个看看它们的本事和对应的权限键。bash —— 执行终端命令让模型在项目环境中运行 Shell 指令像npm install、git status等。权限键bash。edit —— 精确修改文件通过精确的字符串替换来编辑文件内容这是 LLM 改动代码最主要的方式比整文件重写更安全。权限键edit。write —— 创建或覆盖文件用来生成新文件或者用新内容直接覆盖已有文件。值得留意的是这个工具的权限并不叫write而是被统一归到edit下面。换句话说控制了edit权限就同时管住了edit、write以及接下来要提到的apply_patch这三种文件修改行为。read —— 读取文件内容把文件内容返回给模型。对大文件可以指定行范围避免上下文一下子被塞得太满。权限键read。grep —— 基于正则的内容搜索在代码库里高速检索文本背后驱动的是 ripgrep。完全支持正则表达式还能按文件类型过滤。权限键grep。glob —— 按文件名模式查找用**/*.js或src/**/*.ts这样的 glob 模式匹配文件返回的路径默认按修改时间排序。找出某一类文件时特别有用。权限键glob。lsp实验性 —— 代码智能查询这个工具能让 LLM 直接跟配置好的语言服务器LSP对话获取诸如定义跳转、引用查找、悬停类型信息、文档符号、调用层级等 IDE 才有的能力。因为它还处于实验阶段必须通过环境变量OPENCODE_EXPERIMENTAL_LSP_TOOLtrue或直接打开全局实验开关OPENCODE_EXPERIMENTALtrue才会激活。支持的操作很多goToDefinition、findReferences、hover、documentSymbol、workspaceSymbol、goToImplementation、prepareCallHierarchy、incomingCalls和outgoingCalls。权限键lsp。apply_patch —— 应用补丁可以直接在代码库中打 patch。补丁内容通过patchText参数传递其中内嵌的标记行比如*** Add File: src/new-file.ts已经包含了文件路径这些路径都是相对于项目根目录的。权限设置上它也归edit管辖。编写tool.execute.before或tool.execute.after这类钩子时需要注意用input.tool apply_patch来判断並且数据在output.args.patchText里而不是output.args.filePath。skill —— 加载技能文件让模型主动读取项目中的SKILL.md把里面写好的指导内容纳入对话适合存放项目约定和领域知识。权限键skill。todowrite —— 任务列表管理在复杂、多步骤的任务中帮助 LLM 创建和维护待办事项清单让执行过程更有条理。默认情况下该工具对子代理subagent是关闭的有需要可以手动开启。权限键todowrite。webfetch —— 获取网页内容允许模型直接抓取指定 URL 的页面很适合查阅线上文档或资源。权限键webfetch。websearch —— 网页搜索利用 Exa AI 进行网络搜索弥补训练数据的时间断层。这个工具只在连接 OpenCode 官方服务端或者手动设了环境变量OPENCODE_ENABLE_EXAtrue或1时才可见。好处是不需要额外申请 API 密钥直连 Exa AI 托管的 MCP 服务免认证。权限键websearch。一个小提示需要“发现信息”时用websearch拿到目标网址后想“提取内容”时用webfetch两者配合效果最好。question —— 向使用者提问执行过程中摸不准的时候模型可以通过这个工具主动发问搜集偏好、澄清需求、让使用者做选择。每个提问都带有标题、正文和一组选项也支持多问题一起呈现使用者可以在提交前导航切换并修改回答。权限键question。不止内置自定义工具和 MCP 集成如果内置工具无法满足需求还有两条宽敞的扩展路。一是自定义工具。开发者可以在配置文件中定义自己的函数LLM 能像调用内置工具一样调用它们执行任意的自定义逻辑。二是MCP 服务器。通过 Model Context Protocol 接入外部服务像数据库操作、第三方 API 等把更多外部能力直接交到模型手上。内部机制搜索那些看不见的文件最后再挖一挖底层细节。grep和glob都依赖 ripgrep而 ripgrep 默认会尊重.gitignore里的忽略规则。也就是说一般被 git 排除在外的目录比如node_modules在搜索和文件匹配时会被自动跳过。如果确实有需要在这些被忽略的路径里查找可以在项目根目录创建一个.ignore文件用感叹号显式放行!node_modules/ !dist/ !build/这样一来哪怕node_modules写进了.gitignoreOpenCode 的搜索工具依然会进去翻找。整个工具体系从细粒度的权限控制到覆盖日常开发的丰富内置能力再到灵活的自定义和第三方接入给大模型在真实项目中动手做事搭起了一套安全又强大的基础。理解了它也就基本掌握了驾驭 OpenCode 的关键。