元旦前我接手了一个七万多行的老仓库,原本只是想找个能在终端里陪我看代码的 AI 搭档,结果在 Claude Code、Codex 之间来回折腾了三四天,反而被一个当时还算小众的工具留住了。它就是 opencode——一个开源的、跑在终端里的 AI 编码代理(coding agent)。如果你也听过“opencode”这个名字,但不清楚它和 Claude Code、Codex 到底差在哪,或者已经装上了却被各种报错搞得头大,那这篇实测记录应该能帮你省下不少时间。我会从安装配置讲到 VS Code、IDEA 插件,再讲到 Skills、Memory 这些进阶玩法,最后把我踩过的坑全部摊开说清楚。
1. 为什么 OpenCode 值得你留在终端里
1.1 它到底是一个什么东西
opencode 的本质,是一个把大模型接进本地开发环境的命令行 agent。它不像 Copilot 那样只做代码补全,而是能自己读文件、执行命令、看报错、改代码、再用 git 提交,整个过程你能在旁边盯着它干活。它的主界面是终端里的一套交互 UI(TUI),启动之后给你一个命令行对话框,你在这里下指令,它一步步执行并展示中间结果。
和其他 coding agent 相比,opencode 最大的特点是“壳子与模型解耦”。它本身不绑定某一家大模型,既可以用商业模型的官方 API,也可以接本地跑起来的开源模型。这一点对我来说非常关键:我手上同时有项目组统一的 API key,也有自己的本地试验环境,一个工具能自由切换,就不用为每个模型单独开一个终端软件。
1.2 它和 Claude Code、Codex 的定位差异
热词里有个问题一直被反复问:“opencode、codex、claude code、pi 哪个 agent 好用?”我个人的答案有点反直觉:不要单纯把希望寄托在“哪个壳子更聪明”上,配置方式、工具链、扩展机制才真正决定日常体验。先放一个对比表格,都是我实际用过之后的体感:
| 维度 | opencode | Claude Code | Codex CLI |
|---|---|---|---|
| 是否开源 | 开源 | 闭源产品 | 开源 |
| 模型绑定 | 可接多种后端,支持 OpenAI 兼容接口 | 以 Anthropic 模型为主 | 以 OpenAI 模型为主 |
| 终端交互 | TUI,命令式 | TUI,命令式 | TUI,命令式 |
| 扩展能力 | Skills、Memory、插件体系 | 有 Skills 概念,封闭 | 相对轻量 |
| 编辑器生态 | VS Code / JetBrains / 桌面端 | 官方插件有限 | 以 CLI 为主 |
| 配置灵活度 | 高,JSON 配置 | 中 | 中 |
这个表不是我拍脑袋写的,是跑了几个真实项目之后得出来的。opencode 不算是最“聪明”的那一个,但它的扩展开放度最舒服,后面我会专门讲怎么靠 Skills 把“聪明程度”补回来。
1.3 什么样的人更适合选它
我大概梳理了几类适合直接用 opencode 的人:
- 日常在终端里维护多个项目的后端开发者,尤其需要 agent 帮你跑测试、查日志、改环境配置;
- 手里已经有多个模型 API,想用一个统一界面管理的人;
- 对数据安全敏感,希望代码尽量留在本机、只发送必要上下文的人;
- 想让 AI 不只聊天,还能自动跑命令、读报错、修 bug 的团队。
如果是纯前端快速原型、只想用某一家模型的最强能力,那不必强上 opencode。但如果你像我一样要长期折腾代码库,它是那种能留得下来的工具。
2. 安装环节最容易翻车的三个点
热词里有一条非常现场感的报错:opencode : 无法将“opencode”项识别为 cmdlet、函数、脚本文件或可运行程序的名。这类环境问题占了新手问题的六成以上,我自己也在 Windows 上栽过跟头。
2.1 安装方式应该怎么选
opencode 的安装来源有好几个,按我的推荐顺序排一下:
- 官网一键脚本或包管理器:macOS 上可以直接用 Homebrew 安装,命令大概就是
brew install opencode,这是最省心的方式。 - npm 全局安装:如果你本机已经有 Node.js 环境,走 npm 也很方便,安装命令是
npm install -g opencode。 - Go 方式安装:热词里会出现“opencode go”,就是因为不少人用
go install直接从源码装。这种方式要求本机 Go 版本满足项目要求,适合本来就在用 Go 的人。 - 直接下载官方 Release 里的二进制文件:Windows 用户我比较推荐这一步,把压缩包解压到固定目录,手动加入 PATH,干净利落。
我在 macOS 上优先用 npm 方式,在 Windows 上则直接用二进制包,省得被编译环境折腾。
2.2 cmdlet 报错的完整排查链路
遇到“无法识别为 cmdlet、函数、脚本文件或可运行程序的名”,我的排查顺序基本是固定的:
- 先确认安装是否真的成功。如果是 npm 装的,执行
npm list -g --depth=0看包在不在列表里;如果是二进制,确认你下载的是对应平台的压缩包,而不是把 linux 版解压到了 Windows。 - 检查可执行文件所在目录是否在 PATH 里。npm 全局包通常会放进一个 npm 前缀目录,Windows 下一般是
%APPDATA%\npm。安装成功但终端找不到命令,十有八九是这个目录没加进 PATH。 - 检查 PowerShell 执行策略。npm 生成的脚本里常有 .ps1 文件,执行策略限制太严时会出现“无法识别”或直接拒绝运行。可以在管理员 PowerShell 里执行
Get-ExecutionPolicy查看当前策略,必要时调整为RemoteSigned。这一步有安全影响,改之前要想清楚。 - 改完 PATH 一定要重开终端。终端里的环境变量是启动时读取的,改完不重开就报错,这是最容易被忽略的一步。
提示:Windows 上如果想快速验证二进制能不能用,可以先绕开 PATH。把压缩包解压到比如
D:\tools\opencode\,直接运行D:\tools\opencode\opencode.exe --version,通了再改系统 PATH。这个思路能帮你把“文件问题”和“环境问题”分开,不会两头瞎猜。
2.3 “装完打不开”的另外两种情况
一种是安装脚本下载到一半失败,导致二进制文件不完整。这种情况最典型的特征是运行时直接异常退出,或者闪退,连个明确的报错都不给。遇到这种我习惯先删掉旧文件重新下载,而不是在原地反复重试。
另一种是版本冲突。如果你同时用 npm 和 go 两个渠道装过,终端里实际执行的可能不是你想要的那个版本,配置了半天功能不生效,最后发现是旧版本在 PATH 里排前面。所以配置之前,先跑一下opencode --version确认版本,这一步能省一个晚上。
3. 第一次跑通 OpenCode:从模型配置到真正对话
opencode 装好只是第一步,真正决定好不好用的,是你给它接什么模型、怎么给模型授权。
3.1 启动后的第一屏怎么处理
在项目目录下直接运行opencode,会进入 TUI。第一次启动通常会让你选择模型供应商,同时也会尝试读取本机已有的环境变量,比如ANTHROPIC_API_KEY、OPENAI_API_KEY这类常见变量。如果你之前用过 Claude Code 或 OpenAI 的 CLI,opencode 往往能直接读到同一套 key,省掉重复配置。
如果启动后没有看到模型选择界面,大概率是环境变量没生效,或者项目级配置覆盖了全局配置。我建议先退出 TUI,在终端里执行echo $OPENAI_API_KEY(macOS/Linux)或echo $env:OPENAI_API_KEY(PowerShell)确认 key 真的存在。如果输出为空,说明 key 没设置,后面所有模型请求都会失败。
3.2 配置文件该写在哪、怎么写
opencode 的配置是 JSON 格式,分两个层级:
- 全局配置:放在用户配置目录,所有项目共用;
- 项目级配置:放在当前仓库根目录,随项目走,适合团队共享约定。
一个最简配置大概长这样:
{ "model": "qwen3-coder:14b", "provider": { "local": { "baseURL": "http://localhost:11434/v1" } }, "autoupdate": false }这里的provider.local就是接本地模型的典型写法。热词里很多人问“opencode 免费模型”,我后面会专门展开。先记住一点:不同版本的字段名可能有差异,如果写进去不生效,优先去官方仓库的示例配置里对比,不要凭记忆瞎写。
3.3 免费模型和本地模型接入的理智姿势
我不鼓励去依赖那些来路不明的“免费 API”,但“低成本把 opencode 跑起来”确实有两条靠谱路线:
本地模型:用 Ollama 跑一个支持工具调用的开源模型,比如 Qwen 系列的 Coder 模型。Ollama 会提供一个 OpenAI 兼容的本地接口,默认是
http://localhost:11434/v1,opencode 只需要以 OpenAI 兼容的方式连过去就行。优点是数据完全不出机器、不花钱;缺点也很明显:设备性能决定响应速度,参数量不够的模型处理复杂任务时会有明显误操作。使用自己账号下合法免费额度或开发者额度的官方接口。很多平台对新用户有试用额度,用这类合法额度去体验完全没问题。但注意:同一个 key 不要同时放到多个公开项目里,更不要提交到 git 仓库,泄露之后的损失远大于省下的那点费用。
热词里还有人问“hy3-free 下线了吗”,这类社区共享免费模型服务我见过不少,稳定性基本是玄学,说下线就下线,而且你根本不知道自己的对话内容被谁处理。个人练手图新鲜可以,拿它当生产主力风险太大,我劝你冷静。
3.4 一个“免费但要靠谱”的起步组合
如果你手头没有任何商业模型的 key,我建议这样组合:
- 本地 Ollama 装一个 7B 到 14B 的代码模型,用来跑日常小任务的补全和简单重构;
- 同时配置一个有免费额度的官方 API 作为复杂任务的备选;
- 把模型切换做成配置项,而不是写死在代码里。
这样即使免费额度用完,也不会陷入“没有 key 就什么都跑不了”的尴尬。我自己的实践里,opencode 配本地模型之后,用来写测试、改配置文件已经足够顺,只有真正复杂的架构问题才会切到更强的模型。
4. 真正拉开体验差距的 Skills 与 Memory
opencode 和普通对话式工具最大的不同,是它支持把“工作方法”沉淀成技能。热词里的“opencode skills”“opencode memory”“opencode superpowers”都属于这一类,这也是它对我最有吸引力的地方。
4.1 Skills:让 AI 按你的流程干活
Skills 可以理解为一套带说明文件的操作手册。你可以告诉 opencode:“以后每次改完代码,先跑项目里的测试,再检查 lint,全部通过才允许提交。”这套流程不用每次重新打字提醒,而是放在一个技能目录里,让 agent 在需要时自动读到。
以我环境里实际生效的目录结构为例,大致是这样的:
.opencode/ skills/ code-review/ SKILL.mdSKILL.md 里写清楚技能的目标、触发条件、执行步骤。opencode 会在相关任务中把它作为上下文带进模型。至于目录名和文件名是否完全一致,不同版本可能有差异,我建议第一次用的时候,先看看当前版本的命令帮助,再照着官方示例建,不要照抄网上的旧帖子。
4.2 Memory:让 AI 记住项目的“潜规则”
热词里“opencode memory”是团队协作时非常关心的话题。我这里说的 Memory,指的是让 agent 跨会话记住项目约定。比如:
- 这个项目的测试命令是
npm test,不是yarn test; - 提交代码前必须跑格式化;
- 某个核心模块历史上有坑,不要随便动它对外暴露的接口。
这些信息如果每次都在对话里重复提,效率会很低,而且容易漏。把它们写进项目级配置或 Memory 文件之后,新的会话一进来就能读到,agent 的表现会稳定很多。这相当于给你的老项目建了一份不断更新的“新人手册”。
4.3 社区技能包 superpowers 的用法
superpowers 是社区里流传的一个技能包集合,安装之后 opencode 会多出很多预设动作,比如规划任务、写测试、检查改动边界。它解决的核心痛点是:默认 agent 拿到需求后常常“想一步做一步”,而 superpowers 会先让它输出计划、拆解步骤,再动手。
不过我自己的经验是,不用无脑装全套。我挑了几条适合自己节奏的模块来用。工具越灵活越需要克制,你给 agent 装太多技能,它的上下文会被占用,反而可能误触发不相关的流程。建议装完跑一个真实的小需求,把明显多余的技能移除。
4.4 用 OpenCode 接手老项目的标准姿势
热词里有“opencode接手开发项目”,这个场景我特别有感触。我不建议一上来就丢给它一句“帮我看懂这个项目”,太泛了,它也不知道从哪下手。我惯用的开始方式是这样的:
- 先让它读
README、package.json、pom.xml这类入口文件,搞清楚项目用什么语言、什么构建工具; - 让它跑一次构建或测试,把报错信息喂回给模型,验证环境通不通;
- 让它按模块梳理目录结构和核心入口,把结论写成一个
AGENTS.md或记忆文件; - 之后再开始提具体需求,比如“修复登录超时 bug”,这时候它已经掌握了足够上下文。
这么一轮走下来,老项目的新人上手时间明显缩短,很多“只有老人才知道”的约定也被沉淀了下来。这也是我力推 opencode 的一个重要原因:它不只是个编码助手,还是团队知识的沉淀器。
5. 在 VS Code 和 IDEA 里用 OpenCode:插件真的不是装饰
热词里出现频率很高的是“vscode opencode插件”“opencode jetbrains idea 插件”,说明很多人并不喜欢长时间待在纯终端界面里。你可以说这是习惯问题,但工具适配习惯,才能让人愿意长期用。
5.1 为什么已经能跑 TUI 了还要装插件
终端 TUI 适合专注改代码,但你做代码 review 或者调试前端样式时,总会希望代码和对话能并排看到。官方生态里已经有 VS Code 插件和 JetBrains 插件,装上之后,可以直接在编辑器侧边栏打开 opencode 面板,选中代码块发给它,它返回的 diff 也能直接在编辑器里预览。这种“看到再改”的体验,比切终端舒服太多。
5.2 插件的“打开姿势”
我自己的习惯是:
- 在 VS Code 里用命令面板唤起 opencode,让它“解释当前选中代码”,比新建对话再粘贴代码高效;
- 在 IDEA 里更多用 opencode 跑单测和 Maven 命令。热词里的“opencode mvn配置”,本质上是 agent 需要执行
mvn,但 IDE 内置的 JDK 或环境变量并没有暴露给它,导致找不到命令或仓库坐标错乱。解决方法很简单:把 Java、Maven 的路径明确加到 opencode 运行的 shell 环境里,让 agent 用完整路径执行关键构建命令。 - 桌面版“opencode desktop”如果只是偶尔用用,体验和插件差别不大。我一般不在日常主力环境里开它,避免聊天记录和对话上下文散落在多个端,反而增加管理成本。
5.3 插件配置和终端配置的优先级
注意,插件使用的配置并不是独立的一套,它复用的是你在终端里已经跑通的那份配置。所以我的建议是:先在终端把模型和 Skills 全部调好,再装插件。否则你会陷入“在编辑器里配一次 key,在终端里再配一次 key”的循环,最后两个地方还不一致。
一个很实用的小技巧:如果插件打开后报 server error,先回终端执行一下opencode,看能不能正常启动。插件报错很多时候是底层的本地服务起不来,而不是插件本身的问题。这个排查顺序能帮你快速确定问题边界。
6. 我把常见错误全部踩了一遍之后:真实排查链路
这一节专门写给被报错卡住的人。我会尽量还原整个思考过程,而不是直接扔结论。很多问题看起来复杂,拆开之后其实就那么几类。
6.1 “unexpected server error. check server logs”的定位思路
热词里出现过完整的报错句子:error: unexpected server error. check server logs。它看起来像废话,但其实已经很明确地提示你去查日志。
我的排查顺序是这样:
- 找到日志文件。不同系统位置不同,一般在 opencode 的数据目录下,比如
~/.local/share/opencode/log或~/Library/Logs/opencode。如果找不到,直接去官方仓库的 issue 里搜同款报错,通常会有人贴出路径。 - 看日志里有没有 HTTP 状态码或具体响应内容。如果出现 401/403,基本是 key 失效或权限不足;429 是限流;5xx 可能是服务端波动,也可能是模型请求参数格式不对。
- 手动用 curl 模拟一次请求,排除 opencode 自身的问题。假设你配置的是 OpenAI 兼容接口,就用 curl 调一下同一个 baseURL 的 chat completions 接口,看看返回是否正常。
- 检查版本。很多报错是老版本的解析问题,升级到最新版再复现一次,可能就自动消失了。
6.2 配置不生效的深层原因
配置了模型,但 agent 还是用默认模型跑。这类问题多半出在“配置层级”上:opencode 的项目级配置会覆盖全局配置,环境变量又可能被配置文件覆盖,优先级很容易搞晕。
我的做法是:平时尽量只维护一个层级的配置。全局配置只放通用内容,到特殊项目需要单独指定模型时,才在项目根目录加配置文件。配置源越多,出问题越难查,这个道理和代码里的全局变量一样。
6.3 一个 Windows 下的组合坑
有一次在 Windows 上,opencode 能正常启动,但执行任何 Python 子命令都失败。查到最后发现是两个原因叠加:PowerShell 的执行策略限制导致命令行脚本无法运行;同时 Python 的 Scripts 目录没有加入 PATH。两个问题单独看都不明显,叠加起来就是“命令全挂”。
这种环境问题,排查时一定要分步骤验证。先手动在终端执行同一条命令,看是 shell 环境本身的问题,还是 opencode 传参的问题。这个习惯能帮你避免在错误的方向上浪费大量时间。
6.4 用 Playwright 测前端 bug 的小实战
热词里有人问“opencode playwright 怎么测试前端 bug”,这是我最近用得挺舒适的场景。前端 bug 很多时候很难用文字描述清楚,但如果你能让 agent 写一个自动化脚本来复现,问题就具体了。
通常流程是:
- 把 bug 描述和复现路径发的 opencode;
- 让它先用 Playwright 写一个最小复现脚本,把页面交互跑一遍,并断言预期的 UI 状态;
- 跑
npx playwright test,看脚本本身能不能通过;如果跑不通,八成是选择器写错了,让 agent 读取页面 DOM 后修正; - 脚本能稳定复现问题之后,再让它去改源码,并用同一个测试验证修复。
这个流程的价值在于:它把“AI 改代码”从“模型说自己修好了”变成了“测试真的变绿”。验收标准是客观的,这比任何口头承诺都可靠。
7. 把 OpenCode、Codex、Claude Code 放进同一个工作流
热词里出现“opencode codex claude code”“opencode codex pi哪个agent好用”,说明很多人都在同时比较这些 agent。我的观点可能和多数人不太一样:与其纠结选一个最好的,不如给每个工具一个明确的分工。
7.1 三个工具的分工建议
结合我自己的项目经验,我是这样分的:
- 日常小改动、写测试、跑批处理:用 opencode,模型可以配成本地模型或低成本 API,胜在顺手、开源、技能可沉淀;
- 复杂架构设计、大规模重构、需要强推理的任务:用 Claude Code,配官方模型,虽然贵但值得;
- 快速写一次性脚本、问偏知识性的问题:用 Codex 命令行,交互轻,随手就能用。
这个分工不是绝对的,但能让我在“效率”和“成本”之间找到平衡。日常 80% 的任务其实不需要最强模型,一个稳定的工具链加中等模型就足够了。
7.2 ccswitch 这类配置切换工具到底解决什么问题
热词里有“ccswitch配置opencode”,还有“opencode go 需要配合 cc switch 等工具”,这说明很多人在不同账号、不同模型之间来回切换的需求非常真实。ccswitch 这类工具本质上做的是配置管理和认证信息的快速切换,让 opencode 在不同场景下用不同的模型供应商,不必每次手动改环境变量。
我的建议是:先用配置文件手动切几遍,搞清楚切换的原理(无非是改了某些环境变量或配置文件),再决定要不要上切换工具。直接上工具,出问题时反而更难定位是哪一层配置被覆盖了。
7.3 一个容易被忽视的结论
从实际体验来看,agent 的表现约等于“基座模型能力 + 工具链稳定性 + 技能沉淀”三者的乘积。opencode 的优势在第二项和第三项,模型能力则取决于你给它配了什么模型。所以与其反复问哪个 agent 好用,不如先想清楚:你手头的任务模型能不能扛住?你对工具链的掌控程度如何?团队是否愿意把流程沉淀成技能?这三个问题想明白,选型就不是难题。
8. 我的 OpenCode 日常配置模板
最后分享一个我现在工程里在用的配置模板,当作参考,不要盲目照抄。工具版本会变,字段名也会有差异,但思路是通用的。
{ "model": "qwen3-coder:14b", "provider": { "local": { "baseURL": "http://localhost:11434/v1" }, "official": { "baseURL": "https://api.example.com/v1" } }, "skills": { "enabled": true, "path": ".opencode/skills" }, "memory": { "enabled": true }, "autoupdate": false, "theme": "catppuccin" }几个字段的说明:
model:默认主模型,我配本地模型,便宜且隐私好;provider:配置多个供应商,切换时不改代码只改配置项;skills:开启技能目录,让团队流程能被 agent 自动读取;memory:开启跨会话记忆;autoupdate:设成false,避免新版本突然改变默认行为,这种“惊喜”我不想再来一次。
配置完之后,我强烈建议做一件事:在一个干净环境里新建临时目录,启动 opencode,让它执行一条简单命令,确认整条链路是通的,再把配置推到团队仓库。别让团队一上手就遇到一堆环境问题。信任一旦被消耗,后面的推广会加倍困难。
我踩过几次坑之后的体会是:opencode 这类工具能不能留在工作流里,不取决于它的宣传有多满,而取决于你能不能把它的行为“管”住。Skills、Memory、配置文件、测试脚本,本质上都是给模型立规矩。规矩立好了,它才会从一个偶尔惊艳的玩具,变成每天都能稳定帮你干活的同事。