先说结论:opencode是目前终端AI编程代理里我非常看好的一匹黑马,最近从Claude Code切到它之后,日常写代码的工作流基本定型了。它是SST团队开源的一个终端AI编程工具,可以简单理解成Claude Code、Codex CLI这类工具的开源替代,但它的做法更“博爱”:不锁定任何一家模型,OpenAI、Anthropic、Google Gemini、本地Ollama都能接,还能通过Skills、Memory、MCP把整个编码工作流固化下来,让AI不是“聊完就忘”,而是越用越懂你的项目。
这篇文章我会从零开始,把安装、配置、使用、进阶玩法、IDE集成、常见故障排查全部过一遍,中间夹带一些我实际踩过的坑,比如Windows下命令找不到、服务端报错、团队配置同步等。适合第一次接触终端Agent的开发者,也适合想从Claude Code或Codex CLI迁移过来的人。我不会把opencode吹成万能钥匙,但至少能让你花半小时把它跑起来,并且真正用进项目里。
1. opencode到底是什么:一个不锁模型的开源AI编程代理
1.1 从“又一个终端工具”说起
如果你用过Claude Code或者Codex CLI,脑海里应该已经浮现出一个画面:在终端里启动一个交互式界面,输入自然语言,AI自动读取项目代码、修改文件、运行命令、甚至提交代码。opencode做的就是这件事,而且它的定位是“AI编码代理”,不是简单的代码补全插件。
它由SST团队开发维护,项目在GitHub上开源,并以TypeScript编写。这里有个很容易搞混的点:你搜索opencode时可能会看到sst/opencode这个仓库,也可能看到另外一些同名项目,认准SST维护的这个就行。npm上的包名是opencode-ai,不是opencode,这点在安装时很容易踩坑。
1.2 核心能力清单:Agent、Skills、Memory、MCP
opencode吸引我的地方,不是它能把代码补全做得有多漂亮,而是它把Agent的几块核心能力都补上了:
- 代理式任务执行:它能自己读文件、搜索代码、跨文件修改、运行测试,出错会根据报错信息自我修正,而不是每次都要你手动复制粘贴上下文。
- 多模型Provider:原生支持OpenAI、Anthropic、Google、OpenRouter、Ollama等,理论上只要兼容OpenAI接口的模型服务都能接入。
- Skills技能包:类似Claude Code里的Skills机制,你可以给opencode定义一套“项目专属技能”,比如“如何跑测试”“代码风格规范”“Maven构建流程”,让AI在处理任务时自动调用。
- Memory记忆系统:可以记录项目约定、用户偏好,跨会话保留。这个对大型项目特别有用,不用每次重头解释背景。
- MCP协议支持:可以接入外部工具,比如让opencode操作浏览器、查询数据库、调用内部系统。
- 非交互模式:支持一条命令直接执行任务,方便接进自动化流水线。
这些能力单独看都不是首创,但组合在一起,再加上开源和模型无关,就让opencode变得很有张力。
1.3 opencode是哪个团队的,为什么会火
热词里有人问“opencode是哪家公司的”,准确说它不是某家大厂的产品,而是SST团队的社区开源项目。SST之前主要是做Serverless应用开发框架的,在开发者圈子里有一定知名度。为什么opencode能火起来?我个人的观察是,它踩中了一个时间节点:大家已经接受了“AI编程代理”这种交互形态,但很多人不想被单一模型绑架,Claude Code绑定Anthropic模型,Codex CLI绑定OpenAI模型,而opencode是“模型自由”——它是连接层,谁强就接谁。再加上它迭代速度极快,社区又擅长整活,VSCode插件、IDEA插件、桌面端陆续都来了,自然就聚拢了一批用户。
2. 选型对比:opencode、Claude Code、Codex CLI、其他Agent怎么选
2.1 四类工具横向对比
我用过Claude Code、Codex CLI、Gemini CLI,也试过几个同类开源Agent,把它们放在一起看会更清楚:
| 工具 | 开源 | 模型支持 | 上手难度 | 适合场景 |
|---|---|---|---|---|
| opencode | 是 | 多模型 | 低 | 想灵活切换模型、喜欢折腾配置的人 |
| Claude Code | 否 | Claude系列 | 低 | Anthropic生态重度用户,追求开箱即用 |
| Codex CLI | 部分开源 | OpenAI系 | 中 | OpenAI模型用户,偏爱官方工具链 |
| Gemini CLI | 否 | Gemini系列 | 低 | 已经在用Google生态的开发者 |
这个表格不是硬性推荐,它有我强烈的主观色彩。opencode的多模型支持不是简单地在配置里写几个key,而是把不同provider之间的能力差异做了抽象,比如有的模型不支持工具调用、有的上下文窗口小、有的便宜适合跑批量任务,你可以在配置里为不同任务指定不同模型。
2.2 我为什么从Claude Code迁到opencode
说实话,Claude Code的开箱体验是目前所有终端Agent里最舒服的,安装就能用,模型能力也确实强。但我在实际使用中遇到几个问题:一是项目做大了之后,团队里不是每个人都愿意订阅Anthropic的付费套餐;二是Claude Code对模型高度绑定,有几次因为模型服务波动,整个工作流停摆;三是团队希望把一些内部规范、脚本封装成可复用的技能,闭源工具做这类定制总隔着一层。
opencode让我觉得踏实的是,配置是纯本地的JSON文件,可以直接放进Git仓库,团队谁拉下来都能用同一套模型配置、Skills、记忆。OpenAI的Key也行,Anthropic的Key也行,本地Ollama也行,成本可以自己控制。你不用一次性推翻现有工具链,完全可以先把它当Claude Code的补充来用。
2.3 适合与不适合opencode的人群
适合的人群我很明确:一是喜欢在终端里干活、不依赖IDE的开发者;二是模型要经常切换、对成本敏感的人;三是团队想统一AI编码工具链、但又不想被商业产品绑定的组织;四是对开源有执念、想改工具底层行为的高手。
不适合的人群也有:如果你只想要最简单的AI补全体验,不想碰JSON配置,那直接用Cline、Continue这类开箱即用的插件更省心;如果你完全依赖某个商业产品的高级功能(比如企业级治理、审计日志),那开源工具的运维成本得自己扛。opencode适合那种“愿意花半天折腾,换后面一年顺手”的人。
3. 安装与启动:三行命令搞定,以及最常踩的PATH坑
3.1 推荐安装方式
opencode的安装方式有好几种,Node环境直接npm全局安装是最常见的:
npm install -g opencode-ai这里要注意,包名是opencode-ai,不是opencode。如果你npm install -g opencode,装的很可能是另一个无关的包。装完之后验证一下:
opencode --version如果网络受限或者不方便用npm,也可以走官方安装脚本,或者用Homebrew、Scoop这类包管理器,具体以官方文档为准。我自己的习惯是先npm装,原因很简单:升级方便,npm update -g opencode-ai一条命令搞定,不用重新下安装包。
3.2 Windows下“无法识别opencode命令”的解决办法
热词里有一条典型报错:opencode : 无法将“opencode”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。这条报错在Windows下非常常见,本质就是opencode的安装目录没有加入系统PATH,PowerShell找不到这个命令。
解决方案很直接:先看npm全局安装目录在哪:
npm config get prefix大概率是C:\Users\你的用户名\AppData\Roaming\npm。把这个路径加到系统PATH,然后重新打开终端,再执行opencode --version。注意“重新打开终端”很关键,因为PATH环境变量是在终端启动时加载的,你加完不重启一样报错。
如果加了PATH仍然不行,检查一下npm安装的包是不是真的在目录里:
npm list -g --depth=0看到opencode-ai就说明装的没问题,剩下就是路径或版本问题。在macOS或Linux上,如果遇到EACCES权限报错,通常是npm全局目录权限不够,建议用nvm管理Node版本,避免直接用sudo去改全局文件。
3.3 验证安装与启动交互界面
安装成功后,直接在终端输入opencode回车,就会启动交互式TUI界面。第一次启动一般会引导选择模型Provider,如果没引导也不用慌,可以输入/help查看可用命令,输入/model切换模型。opencode的界面风格偏极简,左边是对话区,右边是文件变更或工具调用面板,初次使用可能觉得信息密度高,但用习惯之后效率确实比纯文本高很多。
4. 模型接入与免费配置:从官方API到Ollama本地模型
4.1 先理解opencode的Provider机制
opencode把“模型服务商”抽象成Provider,每种Provider都有自己的配置格式,统一写在一个配置文件中。常见的几种Provider:
- OpenAI:配置API Key,使用
gpt-4o、o3等模型 - Anthropic:配置API Key,使用Claude系列
- Google:配置Gemini API Key
- OpenRouter:一个聚合服务商,上面有大量模型,包括一些免费额度模型
- Ollama:本地模型服务,完全免费,数据留在本地
Provider机制的好处是,你在日常对话里可以用/model随时切换,比如写业务代码时用Claude或GPT-4级别的强模型,做批量重构时用便宜模型,涉及敏感代码时切到本地模型,调度很灵活。
4.2 一个可用的opencode.json配置示例
下面这份配置我简化过,方向是对的,但不同版本的字段可能略有差异,记得以官方配置文档为准:
{ "$schema": "https://opencode.ai/config.json", "model": "openai/gpt-4o", "provider": { "openai": { "api_key": "sk-your-key" }, "anthropic": { "api_key": "sk-ant-your-key" }, "ollama": { "models": { "qwen2.5-coder:14b": { "name": "Qwen2.5 Coder 14B" } } } } }这份配置文件一般放在~/.config/opencode/opencode.json(Linux/macOS)或%USERPROFILE%\.config\opencode\opencode.json(Windows)。如果你只想最快跑起来,也可以只配一个Provider的Key,opencode支持在首次启动时通过交互式登录去配置,不一定要手写JSON。
4.3 低成本/免费模型接入路线
热词里有“opencode免费模型”,这里我明确几条合规且好用的路线:
第一,Ollama本地模型。这是最彻底免费方案,装好Ollama后拉一个代码模型,比如qwen2.5-coder:14b,本地跑,不花钱,隐私最安全,对机器要求高一点,14B模型建议内存32GB以上,体验才跟得上。适合日常重构、写测试这类中等复杂度任务。
第二,OpenRouter上的免费模型。OpenRouter本身是一个合规的模型聚合服务平台,它上面有一些限时免费或低价的模型,可以用很低的成本体验不同模型的效果。在opencode里配OpenRouter只需要一个API Key,然后把model设为openrouter/模型标识。
第三,官方API的赠金或试用额度。OpenAI、Anthropic、Google对新用户通常都有免费体验额度,够你跑上一阵。这些是官方渠道,规则公开,没有歧义。
我个人推荐的做法:把Ollama作为默认模型处理不太重的任务,把商用强模型作为“疑难杂症”专用模型,通过/model切换。这样成本、效率、隐私三者能较好平衡。
4.4 API Key与安全管理
配置API Key时有个大坑,就是Key可能被误提交到Git仓库。强烈建议在配置文件里用环境变量模板,而不是硬编码明文Key:
{ "provider": { "openai": { "api_key": "{env:OPENAI_API_KEY}" } } }然后把真实的OPENAI_API_KEY放到Shell的环境变量里,或放到.env文件并加入.gitignore。团队协作时,配置文件模板可以进Git,真正Key不上库。这个习惯能帮你避免几次很社死的泄露事故。
5. 第一次完整实操:让opencode帮我修一个真实Bug
5.1 准备工作与初始化项目上下文
我拿一个实际的Node.js小服务举例。这个服务有一个订单接口,返回的金额没有按用户币种做换算,导致下游展示有问题。在没有opencode之前,我得自己翻代码、定位汇率服务、改逻辑、写单测,至少半小时;现在我的做法是:
先进入项目目录,启动opencode:
cd /path/to/project opencode然后在交互界面里先让opencode熟悉项目:
请先阅读项目README、package.json和src目录结构,梳理这个项目的主要模块,我要修一个订单金额币种换算的bug。这一步很重要。你不说“先了解项目”,AI经常会直接猜,然后改错地方。opencode会调用工具读文件,并把项目结构整理出来。如果你希望这个理解被长期记住,可以输入:
把项目技术栈、目录约定、测试命令记录到memory里。之后你再提问,它就会基于记忆里的项目背景回答问题,不用每次重新解释。
5.2 核心对话流程与常用命令
我完整跑一遍修bug的过程,大致是这样:
我:订单接口返回的amount没有按user的currency换算,请定位问题代码。 opencode:[读取src/order.ts、src/user.ts等],定位到订单服务里的amount字段直接用原始值,没有调用currencyExchange方法。 我:请修复,并补充一条单测。 opencode:[修改代码,创建测试文件,执行npm test,输出测试通过信息]这里提几个高频命令:
/init可以初始化项目上下文,让opencode读取仓库配置并生成项目总结。/model切换模型。/memory查看和管理记忆。/skills查看可用的技能包。/help随时查看全部命令。
如果你是偏小心的人,可以在让它动手前加一句话:“先给出修改方案,包括涉及文件和具体改动,我确认之后再动手。”opencode支持这种“先计划后执行”的方式,在大改动场景里强烈建议这样做。我有一条铁律:涉及数据库迁移、批量文件重命名、大面积重写的任务,必须让AI先展示计划。
5.3 Skills与Memory:把团队规范固化进Agent
opencode的Skills玩法很值得花时间琢磨。你可以把团队规范写成一个个Skill,比如“代码提交规范”“构建命令速查”“数据库迁移流程”。每个Skill本质上是一个包含SKILL.md文件的目录,里面用自然语言描述这个技能适用于什么场景、具体步骤是什么。
我在项目里建过一个skill/commit-guide,内容大致是:
# 提交规范 当用户要求生成提交信息或提交代码时: 1. 检查git status和git diff 2. 按Conventional Commits格式生成提交信息 3. 说明变更类型(feat/fix/docs等) 4. 中文描述,简洁明了opencode会在完成任务时自动匹配并加载Skill。这么做的好处是,团队规范不再躺在文档里吃灰,而是直接长在AI的工作流里。
Memory则更像一个长期便签,你把项目约定、踩坑记录放进去,AI在后续会话还能记住。比如我在Memory里记录“测试框架使用Vitest,不要用Jest”,之后让它跑测试时它就不再问是哪个框架了。这对新人上手团队项目是很大的效率提升。
5.4 在Maven/Java等项目中的适配注意点
热词里有“opencode mvn配置”,我多说一句。很多人在Java项目里用opencode时会遇到构建失败的问题,根源大都是opencode运行命令时没有正确读取Maven的配置文件或JDK版本。解决办法是:在项目的Skill或Memory里明确说明构建命令,比如“本项目使用Maven,构建命令为mvn clean test,JDK需要17+”。然后让它先跑mvn -v确认环境,再执行任务。
Java项目的编译速度通常比Node慢,AI在等待输出时容易重复触发或超时,你可以在opencode配置里把命令超时时间调大,并根据实际报错让它先看编译日志再动手改代码。这类项目用opencode的体验确实比动态语言项目稍“钝”一点,但把命令和约定讲清楚后,整体效率还是可观的。
6. IDE集成与前端Bug排查:VSCode、IDEA、Playwright组合拳
6.1 VSCode插件怎么装
opencode官方提供了VSCode插件,直接在插件市场搜“opencode”安装即可。装完之后你可以在侧边栏打开一个面板,里面是完整的AI对话界面,和终端版共用同一套配置和记忆。我个人觉得VSCode插件最大的价值不是面板本身,而是它把代码变更以Diff形式展示出来,你可以逐行Accept或拒绝AI的修改,比终端里直接改文件可控得多。
插件还能把当前打开的文件或选区自动作为上下文传给opencode,比如你正在看某个函数,这个函数太复杂想重构,直接右键“发送给opencode”,它就能基于这段代码生成重构方案。这个交互很自然,省去手打路径的麻烦。
6.2 JetBrains IDEA插件怎么配
IDEA用户也有官方或社区插件可用。装好插件后,先确保本机已经装好opencode命令行工具,因为IDEA插件本质是封装了opencode命令在后台运行,所以前面提到的PATH问题如果没解决,插件也会白屏。
IDEA插件适合处理Java、Kotlin项目,尤其是复杂的Spring应用。我在IDEA里用了几周,感觉比VSCode插件更稳的是它对Project Structure的理解,比如Maven模块的依赖关系、多模块仓库的根目录识别都更准确。它同样支持给选中代码直接发指令,还能读取控制台输出,让AI基于报错去改代码。
配置方面没有太多可调项,核心就是确认opencode可执行文件路径,一般自动就能找到。建议给插件映射一个快捷键,比如Ctrl+Shift+O唤起对话框,这样不用离开键盘就能问答。
6.3 用opencode配合Playwright测前端Bug
热词里有一条“opencode playwright 怎么测试前端bug”,这是很多前端同学关心的场景。我的实操经验是分两步走:第一步,先让opencode读前端项目结构,定位到需要复现的页面和组件;第二步,让opencode写出或用现有Playwright脚本驱动浏览器复现,再把报错信息带回来分析。
比如我遇到过一个线上表格组件在特定数据量下卡死的问题,我给opencode的指令是这样的:
请先查看e2e目录下现有的Playwright脚本,了解测试环境和启动命令。我在表格页面手动输入1000行数据后会卡死,请写一个新的Playwright脚本,复现这个场景,截图并输出浏览器控制台错误。opencode会启用MCP的浏览器工具直接跑Playwright,或者创建脚本执行。这里最容易翻车的点是测试环境和本地开发环境的地址没对上,建议在项目Skill里维护一份“前端本地启动命令与端口”,让AI别猜。
7. 高频报错与配置排查:一份实测速查表
7.1 报错对照与处理方案
我在使用过程中收集了一些高频报错,整理成速查表:
| 报错信息 | 出现场景 | 处理办法 |
|---|---|---|
| 无法将opencode识别为cmdlet | Windows下安装后命令找不到 | 检查npm全局目录是否在PATH,重开终端 |
| error: unexpected server error, check server logs | 模型服务端返回异常 | 查看opencode日志定位是哪个provider,再排查模型服务状态 |
| 429 rate limit | 模型接口限流 | 换模型或降低并发,稍后重试 |
| Connection timeout | 网络不可达 | 检查API地址是否能访问,本地模型确认服务已启动 |
| EACCES permission denied | npm全局安装权限不足 | 用nvm管理Node,不要用sudo乱改 |
7.2 日志与调试手段
opencode的日志是排查问题的第一手段,默认以文件形式保存在本地。查看日志可以这样:
tail -f ~/.local/share/opencode/logs/*.log日志里会记录每一次工具调用、API请求、模型返回、错误堆栈,信息量很大。遇到“unexpected server error”,第一反应应该是开浏览器手动测试对应的模型API,确认是不是Provider那边出了问题。我就遇到过某次模型服务商整体故障,界面报“unexpected server error”,折腾半天换模型马上好了,所以排查顺序非常关键:先验证Provider可用性,再怀疑opencode配置。
7.3 我的避坑心得
最后分享几条踩过几次坑之后沉淀下来的习惯:
第一,重要操作一定启用“先计划后执行”。opencode默认是直接动手干的,但涉及删文件、批量替换、数据库脚本之类的改动,让它先列计划,你再确认,能堵住九成的事故。
第二,把Git当保险丝。在让它做大规模重构之前,先保证工作区是干净的或切一个临时分支。AI跑完后,你可以快速审查diff,不满意就回滚,成本非常低。
第三,不要同时开太多任务。opencode虽然支持多个并发会话,但几个Agent同时在同一个工作区里改代码,会发生文件冲突或互相覆盖。我习惯一次专心让它做一个独立任务,最多两个会话,一个写业务,一个查资料。
第四,保持配合版本更新。opencode迭代很快,新版本往往会改配置结构或命令行为。升级之后如果发现配置失效,先看官方更新日志,比在网上搜旧帖快得多。我每周会跑一次npm update -g opencode-ai,配合查看项目Release Notes,已经养成了习惯。
我现在的日常是:VSCode里开着opencode面板处理小改动,终端里开着opencode跑分析和验证,遇到重活再让Claude Code或Codex CLI来辅助,模型调度权和数据控制权都握在自己手上。对我来说,opencode最大的吸引力不是某一个功能,而是它把“AI编程助手”重新变回了一个可以自由拆卸、组装、备份、共享的开发者工具。你可以把它当成一个起点,顺着Skills、MCP、多Provider的思路往深了玩,后面还有很大的空间可以折腾。