最近要是逛 GitHub,你会发现 opencode 这个名字冒出来的频率高得吓人。简单说,opencode 是一个跑在终端里的 AI 编码代理(AI coding agent),你可以在命令行里直接让它读代码、改代码、跑测试、提交 commit,甚至让它自己复盘报错日志。它不是某个模型厂商的官方客户端,而是一个开源工具,能接 Anthropic、OpenAI、Gemini 以及各种兼容接口,天然适合像我这种喜欢混用模型、又不想被单一厂商锁死的开发者。
这篇文章我会从零开始,把安装、模型配置、Skills、Memory、IDE 集成、前端 Bug 排查这些实际操作全过一遍,最后再分享一些踩坑记录。不管你是刚听说 opencode 的新手,还是已经在用 Claude Code / Codex CLI 想换个工具的老手,应该都能在里面找到用得上的内容。
1. opencode 是什么?它和 Claude Code、Codex CLI 有什么不一样
1.1 定位:终端里的 AI 编码代理
先给没接触过的朋友一句话定位:opencode 是一个在终端里运行的 AI 编程助手,它的工作方式不是像 Copilot 那样在你输入代码时补全下一行,而是你给它一个任务,它自己规划步骤、读写文件、执行命令、看报错、改代码、再运行验证,像一个真正坐在你旁边干活的人。
我第一次用 opencode 的真实感受是,它比普通 AI 插件“大胆”得多。普通插件你问一句它答一句,而 opencode 进入 Agent 模式后,会自己列出待办事项,逐个执行。比如你跟它说“把登录页的校验逻辑抽成独立 util,并补上单元测试”,它会自动创建文件、修改引用、跑测试,如果测试挂了它还会自己读失败信息继续修。这种体验和我当初第一次用 Claude Code 很像,但 opencode 的优势在于它是开源的,配置灵活,还可以让我在同一个终端里随时切换不同模型,不用每次换工具都重新学一套命令。
1.2 与 Claude Code、Codex CLI 的差异对照
很多人会问,我有 Claude Code 了,为什么还要用 opencode?我把三者的差异整理成一张表,方便你根据自己的情况判断:
| 对比项 | opencode | Claude Code | Codex CLI |
|---|---|---|---|
| 开源情况 | 开源,社区活跃 | 闭源 | 开源 |
| 模型支持 | 多模型,Anthropic/OpenAI/Gemini/兼容接口 | 仅 Claude 系列 | OpenAI 系列为主 |
| 配置管理 | 统一 config.json,Provider 可切换 | 官方账号体系 | 官方账号体系 |
| Skills 机制 | 支持,有目录规范和社区生态 | 有,但和官方绑定较紧 | 较弱 |
| Memory 机制 | 支持 project memory,维护成本低 | 支持 CLAUDE.md | 支持 |
| IDE 插件 | VSCode / JetBrains 都有 | 官方插件 | 官方插件 |
我个人的使用习惯是:Claude Code 在深度推理上依然很强,Codex CLI 在 OpenAI 生态里很顺,opencode 则更像一个“瑞士军刀”。它不挑模型,也不挑平台,尤其适合需要通过配置切换多家模型服务的人。我在实际项目里,通常把 opencode 当主力终端代理,遇到特别复杂的架构问题再临时切回 Claude Code,两边互补。
1.3 它适合谁?
如果你是下面这几类人,opencode 值得花十分钟试一下:
- 经常在服务器上工作,没有图形化 IDE,但又想用 AI 辅助开发的人。
- 同时订阅或持有多家模型 API,希望一个工具统一调度的人。
- 对开源工具和本地数据安全有要求,不想把代码全部上传到单一厂商的人。
- 前端、后端、运维都沾一点的“全栈杂活选手”,希望 AI 能帮自己跑命令、看日志、改配置。
如果你平时主要用 VSCode 的 Copilot 做补全,暂时不需要 AI 帮你执行命令和修改文件,那 opencode 对你来说可能有些过重。但一旦你开始接手复杂项目、需要 AI 做“执行者”而不是“建议者”,它就会很顺手。
2. 安装:三分钟跑起来,含 Windows 常见坑点
2.1 npm / brew / 脚本三种安装方式
opencode 的安装方式非常灵活,支持 npm、Homebrew 以及官方安装脚本,我分别说一下。实际上我最常用的是 npm,因为前端项目的开发者基本都有 Node 环境,而且 npm 升级也方便。
# 方式一:npm 全局安装(推荐,覆盖全平台) npm install -g opencode-ai # 方式二:macOS 使用 Homebrew brew install sst/tap/opencode # 方式三:Linux/macOS 官方脚本 curl -fsSL https://opencode.ai/install | bash安装完成后,在终端输入opencode --version,能输出版本号就说明成功了。有一个细节值得注意:这个工具在 npm 上的包名是opencode-ai,不是opencode。我第一次安装时就直接npm install -g opencode,结果装了一个毫不相干的包,折腾了好一会儿。如果你也遇到类似情况,先卸载掉错误包,再重新安装opencode-ai即可。
2.2 Windows 下最常见的 cmdlet 报错
热词里有一句很眼熟:“无法将‘opencode’项识别为 cmdlet、函数、脚本文件或可运行程序的名称”。这几乎是 Windows 新手安装 opencode 后遇到的第一块绊脚石。这个问题本质上不是 opencode 的问题,而是 Windows 环境变量没刷新,或者 npm 全局安装目录没有加入 PATH。
解决办法有三个,我按照推荐顺序来。
第一,先彻底关闭当前终端窗口,重新打开一个。很多情况下 npm 安装成功后,PATH 已经写入了,但当前终端会话没有重新加载,所以识别不了新命令。
第二,如果重开终端还不行,多半是 npm 全局 bin 目录不在 PATH 里。先执行下面的命令找到全局安装路径:
npm config get prefix然后把输出目录下的bin路径(Windows 上是同名的目录)加到系统环境变量里。比如输出是C:\Users\你的用户名\AppData\Roaming\npm,你就去系统设置 → 高级系统设置 → 环境变量,把C:\Users\你的用户名\AppData\Roaming\npm追加到 Path 变量中,保存后重开终端。
第三,如果上面两步都无效,大概率是安装时被权限或杀毒软件拦了一部分文件,执行一次npm install -g opencode-ai --force强制重装,再把 node 和 npm 都升级到较新版本。
2.3 版本确认与升级
opencode 的迭代速度非常快,社区热词里都出现“opencode 2.0”了,所以养成升级习惯很重要。我一般会定期执行:
# 查看当前版本 opencode --version # 升级到最新版 npm update -g opencode-ai这里提醒一句,opencode 的配置格式在不同大版本之间偶尔会有调整,升级前最好备份一下配置文件(后面会讲配置文件位置)。我踩过一次坑,从旧版本升级后发现自定义 Provider 不生效了,查了半天才发现是配置结构变化。这种问题一般去官方 changelog 看一眼就能定位,不用慌。
3. 模型接入与配置:让 opencode 用上你手头的模型
3.1 官方登录 vs API Key
安装好之后,我们得让 opencode 能调用模型。第一次运行opencode,它会进入交互式终端界面,并提示你配置认证信息。这里有两种路径:
- 使用 Anthropic、OpenAI 等官方账号登录,适合有订阅的普通用户;
- 使用 API Key 配合自定义 Provider,适合有 API 额度或想要更多模型选择的开发者。
我的建议是直接走 API Key 路线。订阅账号虽然方便,但 opencode 的价值之一就是“多模型自由切换”,如果只绑一个订阅账号,这个优势就浪费了。现在市面上兼容 Anthropic 或 OpenAI 协议的服务商有很多,国内外的模型厂商基本都支持,你只需要找到对应的 Base URL 和 API Key。
3.2 配置文件与 Provider 详解
opencode 的配置文件在用户主目录下:~/.config/opencode/config.json。这个文件采用 JSON 格式,2.0 之后兼容 LiteLLM 风格的配置结构,写起来很直观。一个最简单的自定义 Provider 配置长这样:
{ "$schema": "https://opencode.ai/config.json", "provider": { "my-provider": { "npm": "@ai-sdk/openai-compatible", "name": "My Provider", "options": { "baseURL": "https://your-api-endpoint.com/v1", "apiKey": "sk-your-key" }, "models": { "my-chat-model": { "name": "My Chat Model" } } } } }这个结构里需要注意几个点:provider的键名是你自己起的别名,比如"glm"、"deepseek"、"moonshot"都可以;npm字段告诉 opencode 使用哪个 SDK 适配器,如果你接的是 OpenAI 兼容接口,就固定写"@ai-sdk/openai-compatible";models下要列出你能用的所有模型名,name 会显示在交互界面中。
配置保存后,重新打开 opencode,按快捷键切换模型,就能看到你新加的 Provider 和模型列表。整个流程类似给浏览器配代理,只不过这里配的是 AI 服务地址,改起来真心不难。
3.3 用 CC Switch 高效管理多个供应商
热词里频繁出现“opencode go 需要配合 cc switch 等工具”,这确实说到了点子上。当你手里的 API 服务商越来越多,手动去改 config.json 就变得很烦,这时候 CC Switch 这类工具就有用了。
CC Switch 是开源的多供应商配置切换工具,核心作用就是帮你管理各种 AI 编程工具的 Provider 配置,一键切换到当前想用的服务商。对 opencode,它可以直接读写~/.config/opencode/config.json,你在 CC Switch 里维护好各个服务商的 Base URL 和 API Key,点一下按钮,opencode 的配置就自动更新了。
我在实际项目中,至少同时维护三套配置:一套官方 Anthropic 用于深度任务,一套 OpenAI 兼容服务用于日常编码,一套偏便宜的模型用于批量任务和闲聊式提问。没有 CC Switch 之前,每次切换都要手改 JSON,改错一个逗号就半天不痛快。现在直接在 CC Switch 里一键切,效率提升非常明显。
使用 CC Switch 时要注意,它生成配置时可能把自己的模型列表覆盖掉你手动添加的部分,所以切换后最好cat一眼配置文件,确认没有丢失。如果发现模型列表不对,可以在 CC Switch 的配置模板里手动补全模型名列表。
3.4 免费模型能不能用?我的实测结论
很多朋友会冲着“免费模型”来问 opencode 能不能接。我的结论是:能接,但我只建议用来做轻量任务,不建议把核心工作流押在免费端点上。
社区里常见的 hy3-free 这类免费测试端点,优点是确实不要钱,缺点是不稳定。我在一次日常会话中遇到过“opencode error: unexpected server error. check server logs”的报错,排查了很久,最后还是换成付费 API 就一切正常。这个报错虽然表面上是 opencode 的问题,实际上很多次都是上游模型服务返回异常导致的。
所以我的建议是:开发展环境、学习测试、跑简单的脚本任务,可以接免费模型,成本低很香;但正式的商业项目、需要稳定上下文的复杂重构,还是用官方或正规 API 服务更稳妥。你省下的那点模型费用,可能还不够赔一次错误改代码带来的时间损失。
4. 核心功能实操:Agent、会话、Skills、Memory
4.1 Agent 模式:让 AI 自己动手干活
opencode 最核心的使用方式就是 Agent 模式。启动 opencode 后,在输入框里给一个任务,Enter 发送,它就会像一个正常的结对程序员那样开始干活。
举个例子,我接手一个旧的前端项目时,会让 opencode 执行这样的任务:
> 帮我找到项目里所有使用 token 进行权限校验的接口,列出一份清单,并标注每个接口所在的文件和行号。opencode 会先读项目结构,然后逐个文件搜索,最终在会话里输出一份带路径和行号的列表。你不需要自己手动 grep,也不需要一个个文件翻,这种“读代码”的能力在接手新项目时性价比极高。
如果想让 opencode 不仅读代码,还直接动手改,你可以给它明确的修改指令,比如:
> 把 authService.ts 里的登录接口请求超时时间从 10s 改成 30s,并同步更新单元测试里的超时断言。这时 opencode 会自己编辑文件,运行测试,失败就反复修。当它需要确认信息时,会在对话中问你,而不是自作主张。这个交互模式我非常喜欢,它把决定权留在人手里,把脏活累活交给 AI。
4.2 会话管理与上下文控制
opencode 的会话管理比我在终端里用过的其他工具都清晰。它默认把每次任务当作一个会话,多个任务可以同时进行,以列表形式展示在终端里,随时可以切换回来继续。
这个设计对实际开发很重要。举个例子,你正在改登录模块,突然产品过来让你查一个支付问题,你不用打断当前思路,直接opencode里新建一个会话处理支付问题,处理完了再切回登录会话,上下文完全不会混乱。终端里一排会话看下来,跟 IDE 里开了多个标签页一样。
这里有一个我踩过的坑:会话数量开太多,会让模型上下文碎片化,尤其是有些模型收费按 token 计算,切换旧会话时重新加载上下文会消耗不少 token。建议每完成一个任务就/sessions清理掉无关旧会话,保留关键的 2-3 个长期会话即可。
4.3 Skills 系统:像插件一样扩展 opencode
Skills 是 opencode 最有想象力的功能之一,你可以把它理解为“给 AI 代理预装的技能包”。一个 Skill 就是一组提示词和工具调用模板,告诉 opencode 在特定场景下该怎么工作。
安装 Skill 的方式很简单,官方和社区都维护着一些现成的 Skills。我试过skills命令,它能打开一个交互式列表,直接从中挑选并安装需要的技能。想手动安装也不复杂,Skill 通常是以目录形式存放在配置目录下的skills文件夹里,每个 Skill 自带说明文件和模板文件。
我实际用得最多的一个 Skill 是“commit 消息规范”。它要求 opencode 在生成 Git commit 消息时,严格按照 conventional commits 格式来写,包括 type、scope、subject 等。安装后,我只要说“帮我提交这次改动”,它就会自动按规范生成提交信息,不再需要我手动补充前缀,省了不少事。
写自己的 Skill 也不难。本质上就是写清楚触发条件、执行步骤和输出格式,让 opencode 在遇到相关任务时遵循这套流程。这种把“团队规范”变成 AI 行为准则的方式,是我觉得 opencode 比很多 AI 工具更适合团队落地的地方。
4.4 Memory 与 AGENTS.md
热词里的“opencode memory”指的就是它内置的项目记忆机制。opencode 会读取项目根目录下的AGENTS.md文件,把它当作项目的长期上下文。这个文件里可以写清楚项目结构、技术栈、代码规范、常用命令,甚至你个人的偏好。
我第一次体会到 memory 的威力,是在一个 Java Maven 项目里。那是我很久没碰过的老项目,模块多依赖复杂,我在AGENTS.md里手动写了一段说明,包括“项目采用多模块结构,核心业务逻辑在 mall-core 模块的com.example.service包下,构建命令是mvn clean package -DskipTests”。之后不管我开多少次新会话,opencode 都能准确理解项目背景,提问质量和修改准确率明显提升。
所以如果你发现 opencode 在一个新项目里表现“有点笨”,大概率是没写AGENTS.md。配置好 project memory,就是花几分钟时间,换来后续每个会话都带着完整项目预热的巨大收益。
5. IDE 集成:在 VSCode 和 JetBrains 里怎么用
5.1 VSCode 插件:把终端 AI 挪进编辑器
opencode 官方提供了 VSCode 插件,安装之后可以在编辑器侧边栏直接打开 opencode 面板。这个面板和终端里的交互逻辑几乎一样,区别在于它能看到当前打开的文件内容,AI 在处理代码时可以结合你正在阅读的文件来理解上下文。
我用 VSCode 插件的习惯是这样的:当我打开了某个报错文件时,直接在面板里输入“帮我分析这个文件的报错原因”,opencode 能结合编辑器当前活动文件来回答,不用我在终端里手动把文件路径贴进去。这种“所见即所问”的体验,比在终端里更流畅。
有一点需要注意,VSCode 插件本质上还是调用本地 opencode 会话,所以它依赖 opencode 的配置文件,Model 配置以~/.config/opencode/config.json为准。想在 IDE 里切换模型,跟终端里的操作是同一套。
5.2 JetBrains 插件:IDEA 用户也不用换门
热词里多次出现“opencode jetbrains idea 插件”“idea opencode插件”,说明这个需求确实不小。JetBrains 版插件的作用和 VSCode 版类似,直接在 IDEA 底部打开一个 opencode 工具窗口,可以在不离开 IDE 的情况下和 AI 协作。
我在 IDEA 里用 opencode,最典型的场景是写 Java 代码时让它帮我生成单元测试。它会读取当前类的方法签名,生成对应的 JUnit 测试文件,再放到正确的 test 目录里。做完之后再让 mvn 跑一轮测试,验证生成结果,全程不需要切换到终端。
顺便提一下热词里的“opencode mvn配置”,其实不是 opencode 的 mvn 插件,而是指 opencode 能正确处理 Maven 项目,包括读取pom.xml、解析依赖、识别测试目录等。你只要在AGENTS.md里写清楚项目命令,它就能跑得很好。
5.3 终端 + IDE 混合工作流
我的实际工作流不是二选一,而是两个结合。日常读代码、做小修改时,我用 IDE 插件,因为跟文件上下文绑定更方便;但涉及大规模重构、批量文件操作、跑 shell 脚本时,我会切到终端里的 opencode,因为它操作文件系统的自由度更大,不会受到编辑器上下文的束缚。
还有一个细节:opencode 运行在后台时,即使你切到浏览器查文档,它也会等任务完成后在终端输出结果。这种“异步干活”的特性让我能同时推进多条开发线。比如让一个会话跑重构,另一个会话整理需求文档,自己在旁边 review 代码,整体产出的节奏快了很多。
6. 用 opencode 接手实际项目的经验
6.1 先读后改:快速理解陌生代码库
接手一个没接触过的项目,最怕的是不知道该从哪看起。opencode 的“先读后改”能力,我建议应该排在所有功能前面掌握。
以一个真实案例来说,我接手过一个用 Vue 3 写的后台管理系统,代码量在几万行级别。我没有让 opencode 一次性读所有代码,而是分步来。先让它读取package.json、路由配置、Store 结构,总结出项目的功能模块划分;再让它列举核心数据流;最后再让它定位某个模块具体实现。每一步都在会话里留下结论,相当于慢慢“喂”给它一个项目认知地图。
等这个认知建立得差不多了,再让它做具体修改,准确率就高很多。如果你上来就让它“修复登录 bug”,它往往需要来回探索,浪费不少 token。所以我的经验是:陌生项目,先花半天带它建立项目认知,再动代码,收益远大于直接硬碰硬。
6.2 结合 Playwright 排查前端 Bug
热词里有个问题非常有意思:“opencode playwright 怎么测试前端bug”。这说的是 opencode 可以调用 Playwright 工具,让 AI 自己打开浏览器页面、复现 Bug、截图、读控制台报错,然后帮你定位问题。
我实际使用过这个功能,过程很惊艳。一个页面白屏的 Bug,我让 opencode 用 Playwright 打开对应路由,它在浏览器控制台发现了一个 TypeError,然后自动把相关组件代码翻出来,指出是某个接口返回的数据结构变了,导致组件里data.list.map报错。整个过程我没有手动打开一次浏览器,全部由 AI 代理完成。
要实现这个能力,你需要保证 opencode 运行环境中已经安装了 Playwright,并且项目里能启动本地开发服务器。我在 Mac 上使用时会先启动 dev server,然后在会话里给 opencode 指定页面 URL 和复现步骤,它就能自行动手操作。
6.3 生态组合:Superpowers 与 Oh-My-ClaudeCode
如果你已经用过 Claude Code 的增强框架 Superpowers 或 Oh-My-ClaudeCode,应该知道它们提供了大量预置技能,比如代码审查、重构、架构分析等。这些生态现在也能和 opencode 结合使用,热词里的“opencode安装 superpowers”就是指这个。
实际安装时,Superpowers 会把一堆 Skills 文件放到你配置目录的.splaced或 skills 目录下,opencode 能直接识别这些目录,只要路径配置正确,就可以在 opencode 里使用同一套 Skills。我试过把 Oh-My-ClaudeCode 里的一些命令迁移到 opencode 上用,大部分都能正常工作,偶尔有个别 Skill 依赖 Claude Code 特有的参数,那就只能在那还是用 Claude Code。
我的建议是:不要追求所有工具链统一到一家。终端里 opencode、Claude Code、Codex CLI 并存完全没问题,用 CC Switch 管理配置,用 Superpowers 给它们共享技能,各取所长,这才是这些开源生态最理想的使用方式。
7. 常见问题排查与避坑手册
7.1 高频报错排查速查表
我把实际使用中遇到的高频问题整理成一张速查表,方便你直接对照:
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 无法识别 opencode 命令 | npm 全局目录未入 PATH | 重开终端或手动添加 PATH |
| error: unexpected server error | 上游模型服务异常 | 检查网络和 API 状态,更换模型服务商 |
| 认证失败 / 403 | API Key 错误或权限不足 | 重新生成 Key,确认配置文件格式 |
| 切换模型后不生效 | 配置文件缓存或版本升级 | 重启 opencode,备份后重新配置 |
| 上下文被截断/回答变蠢 | 单会话内容过多 | 新建会话,精简 AGENTS.md 或清理旧会话 |
| Skills 不显示 | 目录路径不对 | 确认 skills 目录位置与命名规范 |
7.2 Windows 下 cmdlet 报错的完整处理流程
这个报错太常见了,我再单独详细说一遍。Windows 上安装完 opencode 后,如果输入命令提示“无法识别项目名称”,处理路径是这样的:
先确认是否设置了 npm 全局目录。执行npm config get prefix,一般会得到类似C:\Users\你的用户名\AppData\Roaming\npm的路径。把这个路径加入系统 Path,手动添加时注意用“编辑文本”模式,避免把多个路径拼成一行。添加完保存后,务必重新打开一个干净的终端窗口,老窗口不会自动刷新环境变量。如果还是不行,运行where.exe opencode看系统是否能搜到可执行文件,能搜到说明 PATH 对了。
另外还有一种情况容易忽略:在 PowerShell 里执行脚本类安装命令时,如果碰到执行策略限制,可以临时用powershell -ExecutionPolicy Bypass运行安装脚本,但这只是临时方案,不建议永久关闭系统的执行策略。
7.3 模型服务异常的排查思路
如果 opencode 报错 “unexpected server error”,先别急着卸载重装。我的排查顺序是:
先看是不是模型服务本身的问题,去对应服务商的状态页或用 curl 直接请求 API 接口,确认接口通不通。通了之后再检查 opencode 配置文件里的baseURL是否写对了,比如有些服务商要求路径以/v1结尾,漏掉会导致 404。然后检查 API Key 是否有对应模型的权限,很多账号要在后台单独开通模型白名单。最后再试更新 opencode 版本,因为某些模型服务商调整了接口格式后,旧版本 SDK 可能会解析异常。
这个排查思路适用于大多数“工具正常但请求失败”的场景,核心原则是:先从上游到下游逐层排除,不要一上来就怀疑 opencode 本身。
7.4 一些值得养成的使用习惯
最后分享几个我长期使用下来的小习惯。第一个,全局配置里尽量不要写死太多 Provider,按需添加,否则模型切换列表太长,选择反而费劲。第二个,重要项目一定写AGENTS.md,而且要定期更新,让记忆文件保持和项目现状一致。第三个,定期整理会话,删除没用的临时会话,避免 token 浪费。第四个,遇到 opencode 本身报错时,先看版本,再查 changelog,很多问题升级就能解决。
我个人在实际操作里最大的体会是:opencode 不是简单的“另一个 AI 插件”,它更像一个可以自定义、可编程、可接入各种模型服务的“AI 终端工作台”。花点时间把环境配好,把 Skills 和 Memory 用起来,后面每天的开发效率提升都是实打实的。如果你现在还在观望,建议直接用 npm 装一个,新建一个会话让它读一遍你最近在写的项目目录,你会很快感受到这种工作方式的魔力。