最近一个月,我把终端里的 AI 编程助手几乎换了个遍:Claude Code、Codex CLI、Gemini CLI,最后停在了 opencode 上。说实话,一开始我对这类工具是有点免疫的,毕竟命令行 Agent 听起来很酷,但真用起来往往在“能跑”和“真正能帮手”之间差着十万八千里。opencode 打破我偏见的地方在于,它开源、模型自由、社区玩法多,而且不像某些大厂工具那样一上来就把你锁死在自家生态里。
如果你正在找一个能真正接手项目、能自己改代码跑测试、又不想被单一模型绑定的 AI 编程工具,这篇内容应该对你有用。我会从安装、配置、IDE 插件到进阶玩法全流程走一遍,重点讲我在实际项目里踩过的坑和验证过的方案,而不是贴一堆官方文档然后让你自己悟。
1. 先聊清楚:opencode 为什么值得从 Claude Code 转过来
1.1 它到底解决了什么问题
opencode 是一个开源的终端 AI 编程 Agent,核心定位和 Claude Code、Codex CLI 很接近:你在终端里用自然语言描述需求,它自己规划步骤、读写文件、执行命令、跑测试,最后把改动交给你 review。区别在于,opencode 不是某个大厂的闭源附属品,而是由开源团队维护的独立项目,所以它在模型选择上的自由度远高于同类工具。
简单说,opencode 解决的最大痛点是“模型绑定”。用 Claude Code,你就得面对 Anthropic 的账号、限流和 token 费用;用 Codex,你就得适应 OpenAI 那一套。而 opencode 在设计上把“Agent 能力”和“底层模型”解耦了——你可以用 Claude,也可以换 GPT,可以切 DeepSeek、通义,甚至可以接本地跑起来的 Ollama 模型。这种自由度对于需要控制成本、或者在不同项目里想用不同模型的人来说,是实打实的刚需。
还有一点很关键:opencode 是 TUI(终端界面)程序,但它同时提供opencode run这种非交互模式,可以放进脚本和 CI 流程。我在实际使用中经常这样组合:白天在 TUI 里和它讨论方案,确定思路后用opencode run一键执行批量重构。这种“交互讨论 + 非交互执行”的双模设计,让它既能当陪聊顾问,也能当自动化工兵。
1.2 与 Claude Code 的本质区别
用一句话概括:Claude Code 是“围绕 Claude 打造的 Agent”,opencode 是“围绕 Agent 打造的模型中立平台”。
这个区别带来的实际影响很直接。Claude Code 的 Skills、hooks 这些机制确实是行业标杆,但它们是绑定在 Claude 模型体系内的;而 opencode 虽然也借鉴了类似的玩法(比如它支持自定义 skills、slash commands、模型配置),但底层是开放的,社区可以自由扩展。举个我自己的例子:我在一个 Java/Maven 项目里用 opencode,配置好 Maven 命令后,它能自己读 pom.xml、执行mvn test、分析失败日志然后修代码。这套流程如果用 Claude Code 也能做,但 opencode 的好处是我可以把模型换成本地模型来处理一些敏感代码片段,不用把代码全部送到云端。
另外,opencode 的 UI 我个人觉得比 Codex CLI 舒服。它的 TUI 支持多工作区、会话管理、任务中断和恢复,操作逻辑更接近现代 IDE 里的 AI 面板,而不是单纯的“终端问答机”。
1.3 谁适合 / 谁不适合
结合我自己的体验和身边同事的反馈,我建议这样判断:
- 适合:日常要用多种模型、想控制 API 成本、对开源和可扩展性有要求的开发者;已经在用 Claude Code 但受不了账号绑定的人;习惯终端工作流、又想引入 AI Agent 的人。
- 不太适合:完全不想碰命令行、只想在网页里聊天的用户;希望“开箱即用零配置”的人(opencode 的默认配置虽然简单,但要达到好用还是需要花点心思调);对数据隐私极度敏感、所有代码都必须留在本地的团队(虽然可以接本地模型,但体验和云端模型还是有差距)。
2. 安装、初始化与 Windows 踩坑记录
2.1 环境要求与三种安装方式
opencode 本质上是一个 Node.js 程序(底层通过 AI SDK 对接各家模型),所以前提是机器上有 Node.js,建议 18 以上版本。安装方式我实际验证过三种:
第一种:npm 全局安装
npm install -g opencode-ai注意包名是opencode-ai,不是opencode。我一开始直接npm install -g opencode,装出来是完全不相干的包,浪费了十分钟。装完后执行opencode --version验证。
第二种:官方脚本安装
curl -fsSL https://opencode.ai/install | bash这个方式适合不想折腾 npm 全局路径的人,脚本会把二进制放到用户目录下。缺点是如果官方安装源更新策略发生变化,脚本路径可能变,所以如果报 404 就去 GitHub Releases 页面下载对应平台的二进制,效果一样。
第三种:直接下载二进制
去项目的 GitHub Releases 页面,按平台下载文件后手动放进PATH目录。这个方式我后来最常用,因为团队内部要分发统一版本时,直接把二进制丢给同事是最省事的。
2.2 最常见的 Windows“无法识别”问题
热搜里有条很典型:“无法将‘opencode’项识别为 cmdlet、函数、脚本文件或可运行程序的名称”。这几乎是 Windows 上所有命令行工具的经典问题,根因只有一个:opencode 的可执行文件所在目录不在系统的PATH环境变量里。
如果你用 npm 安装,opencode 会被装到 npm 的全局目录下(通常形如C:\Users\你的用户名\AppData\Roaming\npm),排查步骤如下:
- 在 PowerShell 里执行
npm config get prefix,拿到 npm 全局目录路径。 - 打开“系统属性 -> 环境变量”,在用户变量或系统变量中找到
Path,把上面的路径加进去。 - 重新打开 PowerShell(必须完全关闭再开,环境变量不会热更新),执行
opencode --version。
如果已经是通过脚本或二进制的安装方式,那就确认你把解压后的目录加到了Path里。另一个容易被忽略的点:npm 全局目录里通常只有一个很小的.cmd和.ps1脚本,真正的程序文件在 node_modules 下,所以你加Path时一定加的是全局目录本身,而不是更深层的路径。
2.3 首次启动与最小可用配置
安装完成后直接执行opencode会进入 TUI,但这时它还没有任何可用的模型配置,需要先设置 provider。官方支持交互式初始化,会问你用哪家模型、填 API Key,然后把结果写进配置文件。
不过我更推荐直接手写配置文件,因为交互式初始化对“多模型并存”支持得不够直观。opencode 的配置读取顺序是:项目根目录的opencode.json-> 用户全局目录(~/.config/opencode/)下的config.json。项目级配置优先于全局配置,这个逻辑和 ESLint、Prettier 一致。
最简配置如下:
{ "$schema": "https://opencode.ai/config.json", "model": "anthropic/claude-sonnet-4", "provider": { "deepseek": { "npm": "@ai-sdk/deepseek", "name": "DeepSeek", "options": { "baseURL": "https://api.deepseek.com", "apiKey": "sk-xxxx" }, "models": { "deepseek/deepseek-chat": { "name": "DeepSeek V3" } } } } }$schema字段强烈建议保留,这样在 VSCode 里编辑 JSON 时能获得字段提示和校验,很多配置错误在保存前就能发现。model字段指定默认模型,格式是provider/model。遇到多项目需要不同默认模型时,我会在项目级的opencode.json里覆盖model字段,全局配置只放通用 provider。
3. 多模型接入:一份配置搞定各家模型,兼谈免费模型
3.1 理解 provider 与模型 ID
opencode 模型接入的核心概念是 provider(供应商)和 model(模型)。每个 provider 定义一件事:怎么连、请求地址是什么、API Key 是什么、支持哪些模型。模型 ID 用斜杠连接,比如anthropic/claude-sonnet-4-0、openai/gpt-4o、deepseek/deepseek-chat。
模型 ID 的命名风格会直接决定你在配置里的写法,也决定了后续切换命令的复杂度。opencode 通过 @ai-sdk 系列包对接各家模型,每新增一个 provider,需要在配置里指定对应的 npm 包名,比如 DeepSeek 对应@ai-sdk/deepseek,OpenAI 对应@ai-sdk/openai。首次使用某 provider 时,opencode 会自动安装对应的 SDK 包,所以确保网络能访问 npm registry 就行。
多模型并存的配置思路是:在provider字段下并列写多个供应商,然后通过model切换默认模型,或者在对话里直接输入模型 ID 临时指定。我在团队内部用得最多的是“Anthropic 主攻复杂重构 + DeepSeek 处理日常简单任务”的组合,成本能下降一大截。
3.2 接入 Anthropic / OpenAI / DeepSeek 等云端模型
接入 Anthropic 的配置如下:
{ "provider": { "anthropic": { "npm": "@ai-sdk/anthropic", "name": "Anthropic", "options": { "apiKey": "sk-ant-xxxx" }, "models": { "anthropic/claude-sonnet-4-0": { "name": "Claude Sonnet 4" } } } } }这里有一个我踩过的坑:apiKey如果直接写在配置文件里,多人协作时容易把 key 提交进 git。opencode 支持读取环境变量,比如不写apiKey,而是配置"apiKey": "{env:ANTHROPIC_API_KEY}",key 就不会出现在文件里。我在所有项目里都改成这种方式,就算配置文件被同事 clone 过去泄露的也只是变量名而不是密钥。
OpenAI 的配置与 Anthropic 几乎一样,只需把npm改成@ai-sdk/openai,baseURL默认是https://api.openai.com/v1。DeepSeek 我当时配置时最省心,因为它的接口兼容 OpenAI 格式,而且官方有一个很典型的国内使用场景:直连即可,不需要额外处理网络问题。配置里指定baseURL为https://api.deepseek.com就行。
还有一类是 OpenRouter。它做了件事情:把几十家模型聚合到一个 API 入口,用一套 key 访问所有模型。对于想快速体验不同模型、又不想注册一堆厂商账号的人来说非常方便。配置方式仍然是定义一个 provider,npm用@ai-sdk/openrouter,baseURL填https://openrouter.ai/api/v1。OpenRouter 的好处不只是聚合,它还提供很多带:free后缀的免费模型,这点对预算敏感的个人开发者很友好。
3.3 用 Ollama 跑本地模型
本地模型的接入逻辑和云端不同,它没有标准 npm SDK,而是靠兼容 OpenAI 接口来连。Ollama 启动后默认监听http://localhost:11434,配置示例:
{ "provider": { "ollama": { "npm": "@ai-sdk/openai-compatible", "name": "Ollama", "options": { "baseURL": "http://localhost:11434/v1" }, "models": { "ollama/qwen2.5-coder:14b": { "name": "Qwen2.5 Coder 14B" } } } } }注意@ai-sdk/openai-compatible是所有兼容 OpenAI 协议的本地服务的统一接入包,不只是 Ollama,LM Studio、vLLM 这类服务也能用同样的方式接进来。本地模型的优势是隐私,劣势是智商上限放在那里。我用 14B 级别的模型处理格式化、补测试、写注释还行,但让它跨多个文件做架构级重构就明显吃力。建议把本地模型定位成“辅助型 Agent”,而不是“主力工程师”。
3.4 免费模型:能用,但要会挑
OpenRouter 上有一批带:free后缀的模型,一开始我挺兴奋,觉得能白嫖了,实际用下来发现几个现实问题:
一是免费模型经常“下线”。某天早上你可能发现昨天还能用的xxx:free已经 404 了,因为免费额度本质上靠厂商赠送,赠送结束模型就没了。二是免费模型超时和限流比较严重,代码任务往往需要多轮交互,刚聊到一半就限流,体验很碎。三是免费模型通常不是最新最强的版本,处理复杂项目时错误率明显偏高。
我的建议是:免费模型可以拿来体验工具流程、跑一些小 demo,但别在正式项目里依赖它。如果你真的预算有限,我更推荐 DeepSeek 这种本身定价就很低的商业 API,而不是依赖随时可能下线的免费通道。“能用”和“能稳定用”是两回事。
4. 从终端到 IDE:VSCode、JetBrains 与桌面版
4.1 VSCode 插件:聊天式编程的新入口
opencode 的 VSCode 插件在扩展市场里直接搜“opencode”就能装。它不是简单地把 TUI 嵌进终端面板,而是提供了一套和编辑器联动的交互界面。你在侧边栏选中代码片段就能把上下文直接送给 Agent,Agent 回复中给出的代码 diff 会以内联建议的形式展示,接收或拒绝比在终端里复制粘贴方便得多。
我个人的使用习惯是:TUI 负责“重活”,比如整个项目的架构梳理、多文件重构;VSCode 插件负责“轻活”,比如解释一段晦涩代码、生成单测、修复 lint 报错。两个入口共享同一个会话体系,切换时上下文不会丢。
插件安装完成后需要做一步:在插件设置里指定 opencode 的可执行文件路径。如果opencode不在 PATH 里,或者你用的是版本管理器(nvm 之类),插件容易报“找不到 opencode”错误。遇到这个情况,在 VSCode 设置里搜opencode.path,把二进制路径填进去就好了。
4.2 JetBrains 插件与 IDEA 场景
JetBrains 系的插件(IDEA、WebStorm、PyCharm 通用)在插件市场里也能搜到。安装后会在右侧开一个面板,交互逻辑和 VSCode 插件相似。我在 IDEA 里最常用的场景是:让 Agent 根据异常栈定位问题。把运行日志里的 stack trace 复制给 Agent,它可以结合项目上下文推断出错位置,然后给出修改建议。
这里分享一个 Java/Maven 项目里非常实用的配置:在项目根目录的opencode.json中添加一个自定义命令,让 Agent 能一键运行 Maven 测试:
{ "commands": { "test": { "description": "运行整个项目的 Maven 测试", "command": "mvn test" } } }配置之后在对话里敲/test,Agent 就会执行对应的 Maven 命令并读取输出结果。别小看这个设定,它让 Agent 真正具备了“自己验证自己”的能力,而不是只改代码不跑测试,改完留一堆运行时错误让你擦屁股。
4.3 opencode desktop 的定位
如果你连终端都不想开,也可以试 opencode desktop。桌面版本质上是把 TUI 包装成独立应用,好处是界面更接近现代聊天软件,能看到任务执行日志、文件变更记录,还支持多项目切换。我在给团队做演示时用桌面版比较多,因为它看起来更直观,免得同事看到终端黑框就失去兴趣。
但我自己日常工作还是以终端和 IDE 插件为主。桌面版目前的功能覆盖没有 CLI 完整,一些高阶配置项在 GUI 里找不到入口,最后还是得去改配置文件。所以我的建议是:桌面版适合入门体验和演示,真正干活还是回到 CLI 更顺手。
5. 进阶作战能力:memory、skills 与社区生态
5.1 用 memory 建立项目上下文
用过 Claude Code 的人应该对 memory 机制不陌生:Agent 能在项目目录下记住你的技术栈、代码规范、常用命令,下次会话直接沿用。opencode 也有类似能力,它会在项目目录里维护记忆文件,内容可以是“本项目用 React 18 + TypeScript,组件目录在 src/components”这类项目约定。
要发挥作用,关键在于主动投喂信息。第一次在新项目里使用时,我会花几分钟把项目背景、目录结构、构建命令一次性告诉 Agent,然后明确跟它说“记住这些”。后续会话它就表现得像个懂行多年的老同事,而不是每次都要重新介绍自己的失忆症患者。
记忆文件是纯文本,我习惯定期检查一下里面存了什么。因为 Agent 偶尔会把一些临时性信息写进去,比如某次调试的中间结论,这种信息留着可能误导后续任务。清理掉过期记忆是保持 Agent 稳定输出质量的一个重要习惯。
5.2 skills 与前端的 Bug 复现实战
opencode 的 skills 机制类似 Claude Skills:把某类问题的处理经验封装成可复用的技能,通过提示词或脚本的形式挂载到 Agent 上。网上有现成的 skills 仓库可以直接复制到 opencode 的 skills 目录,我早期就扒过社区里一批 Claude Code 的 skills,移植过来后大部分能直接用。
其中我最有感悟的技能是 Playwright 相关。前端项目里最烦的 bug 类型是“在我机器上是好的,但页面上就是不对”,尤其是那些依赖交互时序的问题。opencode 内置了浏览器自动化能力(基于 Playwright),可以让 Agent 自己打开页面、点击按钮、在控制台里看报错。
我实际操作过一例:某个页面的表单提交后没有任何反应。我给 Agent 的指令是“用 Playwright 打开本地开发服务器,访问对应页面,填写表单并提交,把 console 和 network 的报错信息抓回来”。它会启动浏览器,按步骤操作,然后把关键信息带回来分析,最后定位到是某个接口请求参数序列化出错。这个排查流程如果纯手动做,光复现步骤就要重复好几遍,有了浏览器自动化之后,等于多了一个能自己动手做测试的实习生。
5.3 社区玩法:superpowers、oh-my-claudecode、ccswitch
开源社区很大的乐趣在于总有人把工具玩出花来。opencode 目前已经有几个比较知名的配套玩法:
superpowers:原本是给 Claude Code 设计的一套 skills 集合,包含从需求拆解到代码评审的一整套方法论。社区里有人把它移植到了 opencode 上,安装后 Agent 会执行更严格的执行框架,比如先写计划再动手、每步都要验证输出。我用了一段时间,觉得对复杂项目尤其有效,因为纯 AI 最大的问题不是不会写代码,而是容易自嗨式地写一堆表面正确但方向跑偏的代码。
oh-my-claudecode:原本是增强 Claude Code 终端体验的配置集,提供快捷键增强、命令别名等功能。很多人从 Claude Code 转过来后不习惯 opencode 的默认键位,就通过社区脚本把 oh-my-claudecode 的快捷键习惯带过来。对键盘流用户来说,这个迁移优化很值得折腾。
ccswitch:一个管理多套模型配置的切换器。我最初看到“opencode go 需要配合 cc switch 等工具”的说法,实际用下来更准确的理解是:ccswitch 解决的是“多套 API 配置来回切换”的痛点。比如同一台机器上同时有个人 API key 和公司的 key,每次手动改配置文件很痛苦,ccswitch 可以帮你一键切换。它本质上是配置管理工具,和 opencode 配合使用属于锦上添花,不存在“必须配合”的依赖关系。opencode 自己也能通过--config参数指定不同配置文件,不过 ccswitch 更省事。
我不建议一上来就把所有社区玩法全部装上。正确节奏是:先用纯 opencode 跑通基础流程,确认自己真的需要某项增强后,再引入对应工具,否则排查问题时都不知道锅该甩给谁。
6. 和 Codex / Claude Code 的横向对比与选型建议
6.1 三个主流 Agent 的对比表
我用同一组任务(给一个中型 React 项目加功能、修 bug、补测试)分别跑过三个工具,下面是不带感情色彩的评估:
| 维度 | opencode | Claude Code | Codex CLI |
|---|---|---|---|
| 开源 | 是 | 否 | 否 |
| 模型自由 | 自由接入多家 | 绑定 Claude | 绑定 OpenAI |
| 免费模型支持 | 支持(OpenRouter / 本地模型) | 有限 | 有限 |
| TUI 体验 | 优秀,多会话管理 | 优秀 | 中上 |
| 非交互模式 | opencode run | claude -p | codex exec |
| IDE 插件 | VSCode / JetBrains | 官方插件 | 较简陋 |
| Skills 机制 | 支持,兼容社区玩法 | 最成熟 | 逐步完善 |
| 上手门槛 | 中(需配置模型) | 低(官方账号开箱即用) | 低 |
| 成本控制 | 灵活(多模型混合) | 取决于 Claude 定价 | 取决于 OpenAI 定价 |
坦白讲,如果你是 Anthropic 的铁粉、不在乎成本、也不想折腾任何配置,Claude Code 目前的综合体验依然是最顺滑的,它的技能生态和工程完成度不是 opencode 一下子能超越的。但如果你需要在不同模型之间切换、有成本压力、或者就是单纯不想被一家厂商绑死,opencode 的优势就非常明显了。
6.2 我现在的日常工作流
说说我现在的固定操作,给大家一个参考。早上到公司先看一眼昨天的对话会话,然后把当天要做的任务用自然语言写给 opencode,让它列一个实施计划。我先审计划,哪里不对当场改掉,然后让它开始干。它写代码的过程中我会去处理其他类的活儿,等它执行完命令把结果汇总后我再 review diff。
遇到自己不熟的领域(比如某个冷门库的 API),我会把相关的文档链接或者代码片段丢给它,让它结合上下文理解后给出方案。这种模式比我自己去翻文档效率高太多。最终凡是进主干分支的代码,我都要求 Agent 必须跑完测试,这一步我会在配置里写死,防止它偷懒。
6.3 给新手的最后建议
如果你准备开始用 opencode,我的核心建议有四个:第一,不要贪多,先把一个项目一个模型跑通,再逐步加模型和技能;第二,配置文件一定要开启$schema校验,能省掉大量低级错误;第三,API Key 凡是能走环境变量就不要写在文件里,这是习惯问题,早期偷懒后面迟早吃亏;第四,多花点时间整理 memory 和 skills,这是 Agent 效率上限的分水岭,投入产出比极高。
还有一个小提醒:opencode 迭代速度很快,版本升级后配置格式可能有变化,遇到升级后行为异常的情况,先去官方 changelog 看看有没有 breaking change,再怀疑是自己配置写错了。别问我为什么知道,这类坑我都替你踩过好几遍了。