从年初开始,我陆陆续续把所有能跑的 AI 编码 Agent 都试了一遍,从 Claude Code 到 Codex,再到 Google 的 Gemini CLI。半年多折腾下来,现在终端里留得最久、用得最顺的反而是 opencode。这名字乍一听像某个开源库的内部代号,其实它是一个用 Go 编写的开源 AI 编码代理,最大特点就是模型接入自由:Anthropic、OpenAI、Google Gemini 能接,Ollama 和 vLLM 这类本地模型也能接,所有操作都在一个终端界面里完成。
正因为这种“不绑定某一家模型”的定位,opencode 成了很多开发者接手新项目、做日常重构、跑自动化测试时的首选。它既能像 Claude Code 那样在终端里读懂整个仓库上下文,又能像 Codex 一样直接处理多文件改动;配合 Playwright 之后,还能自己打开浏览器复现前端 bug,这体验和单纯问大模型“哪里有问题”完全不是一个级别。这篇就把我这段时间的安装、配置、上手经验和踩坑记录整理出来,给正在观望或者已经装上但没玩明白的朋友一条通用路线。
1. opencode 是什么,为什么值得放弃点一遍 AI 编码 Agent
1.1 定位对比:Terminal Agent 并不是 chat 窗口
很多人第一次用这类工具,容易把它当成“终端里的 ChatGPT”。这个理解其实不太准。opencode 的核心不是聊天,而是 Agent:你给它一个任务目标,它会自己分析项目结构、搜索相关文件、读取代码、逐文件修改、运行测试,然后根据结果决定下一步做什么。它依赖的是“文件读写 + 命令执行 + 工具调用”这几个能力,而不是单纯的问答。
我自己实际用下来的感受是,opencode 在终端这个场景里做了很多针对开发者工作流的优化,比如能自动跳过 gitignore 里的文件、能识别 monorepo 里的多个子项目、能记住当前分支和工作区状态。相比 IDE 插件那种对话框式的辅助,这种全终端 Agent 在批量重构、跨文件修改、跑测试这类场景下优势非常明显,因为它的上下文是整个仓库,而不是你选中粘贴给它的那几行代码。
1.2 多模型接入与开源可控的核心优势
日常使用中我经常在几个模型之间切换:写文档和简单脚本用便宜快速的模型,做复杂重构用 Claude 或 GPT 的高性能模型,断网或涉及敏感代码时切到本地 Ollama 上跑的模型。opencode 对“多模型并行管理”这件事处理得比较优雅,只要在配置文件里注册不同的 provider,启动后在 TUI 里按一个快捷键就能切换,不用重启、不用改环境变量。
开源也给排查问题带来了便利。遇到诡异报错时,我可以直接去看源码确认它的行为逻辑,而不是等官方更新。这一点和 Claude Code 这类闭源工具差异很大。opencode 目前是开源项目,主要由 SST 团队在维护,社区的 PR 和插件生态也比较活跃。对新工具选型比较谨慎的团队,这种“代码在自己手里”的感觉会踏实很多。
1.3 2.0 版本迭代:从终端工具到全家桶
opencode 2.0 发布之后,整个项目跨度一下子大了很多,除了原本的 TUI 终端界面,还推出了桌面版、VSCode 插件和 JetBrains 插件,另外引入了更丰富的 Skills 机制和 Playwright 等 MCP 集成。2.0 之前它更像一个“终端里跑命令的小工具”,现在已经变成了一套横跨终端、桌面、IDE 的编码代理体系。
通过统一的服务端会话机制,你在桌面版和 IDE 插件里发起的任务都能共享同一个会话上下文,这意味着可以早上在办公室用 IDE 插件接手项目,晚上到家在终端里继续之前的对话,项目状态和之前的操作历史都还在。这种一致性体验是很多同类工具到现在都没完全做到的。
2. 三种安装方式与 Windows 环境配置
2.1 基于 Go 的安装、Homebrew 与 npm 方式
opencode 本身就是 Go 编写的,所以最简单的安装方式之一是直接用 Go 工具链拉取:
go install github.com/sst/opencode@latest这要求本机装好了 Go 环境,并且$GOPATH/bin已经在 PATH 里。对大部分不搞 Go 开发的前端或后端同学来说,更推荐直接用官方安装脚本:
curl -fsSL https://opencode.ai/install | bash这个脚本会检测操作系统和架构,把二进制装到~/.opencode/bin下,并尝试帮你写 PATH。macOS 用户还能走 Homebrew:
brew install sst/tap/opencode另外很多前端同学习惯统一用 npm 管理全局工具,opencode 也发了 npm 包,执行npm i -g opencode-ai就能装。总的来看,安装入口多但都很直接,核心就是把一个可执行的二进制放进系统 PATH,之后所有功能都靠这个命令驱动。
2.2 解决“无法将 opencode 项识别为 cmdlet”报错
如果你用的是 Windows 和 PowerShell,大概率会撞上这么一个错误提示:
opencode : 无法将“opencode”项识别为 cmdlet、函数、脚本文件或可运行程序的名称这基本就是 PATH 没配置好。常见原因有三个:一是安装脚本写 PATH 失败,二是 npm 全局目录没在 PATH 里,三是终端是改完环境变量之前就打开的。解决思路很简单,先确认 opencode 装在了哪里:
- 如果是官方脚本安装,通常路径是
%USERPROFILE%\.opencode\bin\opencode.exe - 如果是 npm 安装,执行
npm config get prefix看全局目录,再把xxx\nodejs或xxx\npm加进 PATH - 如果是手动下载压缩包解压,记得把解压目录加进 PATH
改完环境变量最关键的一步是重新打开一个终端窗口,然后执行opencode --version验证。踩过几次坑之后,我现在都习惯安装完立刻开新窗口验证,避免在同一个旧窗口里反复试错浪费时间。
2.3 初始化登录与 API Key 管理
二进制装好之后,直接运行opencode就会进入首次初始化流程。大部分官方模型服务都支持通过opencode auth login登录授权,跳转到浏览器完成认证之后,凭证会安全地保存在系统钥匙串里,不会散落在项目目录中。
如果你习惯用环境变量管理密钥,opencode 也支持读取ANTHROPIC_API_KEY、OPENAI_API_KEY这类通用变量。有一点要特别提醒:项目里的.env文件不要直接塞 API Key,容易跟着仓库一起提交上去;优先用系统的凭据管理,或者至少确保.env在.gitignore里加白名单。多模型配置场景下,更推荐把所有密钥统一放到配置文件里统一管理,后面会详细讲。
3. 模型接入与配置自由:provider、免费模型与 CC Switch
3.1 标准 Provider 配置与本地模型接入
opencode 的全局配置文件默认在~/.config/opencode/opencode.json(Windows 下是%USERPROFILE%\.config\opencode\opencode.json)。首次登录官方服务后,配置会自动生成,不需要手动写。需要自己加其他模型供应商时,把对应的 provider 块补进去就行,比如本地 Ollama 的接法:
{ "$schema": "https://opencode.ai/config.json", "provider": { "ollama": { "npm": "@ai-sdk/ollama", "name": "Ollama", "options": { "baseURL": "http://localhost:11434/api" }, "models": { "qwen2.5-coder:14b": { "name": "Qwen Coder 14B" } } } } }配置完在 opencode 里选择模型就能直接跑。本地模型的好处不用多说,代码不出机器,隐私有保障,也不花 token;缺点也很现实,14B 的小模型做简单脚本还能应付,做跨文件重构就明显吃力。所以我的习惯是:普通需求、脱敏代码走本地,正式任务还是切回云端大模型。
3.2 谈谈免费模型与第三方源下线问题
很多同学刚接触这类工具,第一反应就是找免费模型。市面上确实有一些社区维护的免费模型网关或“中转服务”,宣传时说是零成本跑 Claude/GPT,实际体验一圈下来问题不少:限流严格、延迟高,最关键的是稳定性没保证。最近很多人在问的 hy3-free 这类免费源下线,其实就是这类问题集中爆发的一个典型表现。
我个人的建议是,免费资源可以拿来临时体验,但不要成为正式工作流的一部分。如果你只是想低成本试一下 opencode 的能力,优先看 Ollama 和本地模型这条路,至少它不会半夜下线也没有隐私风险。真正要长期用、想在项目里稳定产出,还是得配官方 API 或公司统一采购的合规接口。省下的不只是一点 API 费用,更是反复折腾配置和排查故障的时间成本。
3.3 用 CC Switch 同时管理多套配置
在多模型和多接口地址之间来回切换,手动改 opencode.json 确实麻烦,这时候就轮到 CC Switch 这类配置管理工具登场了。它本来是为了方便 Claude Code 在多个供应商之间切换而设计的,因为 opencode 也采用类似的 provider 模型,所以不少开发者会把两边的配置统一交给 CC Switch 管理。
实际操作中,我会在 CC Switch 里创建几套命名清晰的配置:比如“日常 GPT-4o”“复杂重构 Claude”“本地 Ollama”。切到哪一套,再启动 opencode,它读到的就是这个供应商的配置。对经常需要在不同项目、不同网络环境之间切换的人来说,这种“配置即套餐”的工作方式能省掉大量重复劳动,也避免手误改坏配置文件造成的不可预知问题。
4. 核心功能实战:Skills、Memory、Playwright
4.1 Plan/Agent 模式与“接手开发项目”
opencode 的对话模式里,我最常用的是两类:Plan 模式和 Agent(或 Build)模式。Plan 模式只做分析和规划,不实际改文件,适合在动手前先让 Agent 全局看一遍代码,输出一个改动方案;确认无误后再切到 Agent 模式,让它直接执行修改。
接手一个从来没见过的项目时,这个习惯特别有用。我一般上来先让它“解释一下这个仓库的结构和业务模块,列出可能的坑”,相当于花几十秒拿一份项目体检报告。然后再提具体的重构或修 bug 目标。如果你也遇到过“让 Agent 改一个函数,结果它把旁边模块也顺手改了”的失控情况,那基本就是没走 Plan 这一步。让 Agent 先说,再做,能拦住大多数毫无必要的连带修改。
4.2 Skills:让团队规范变成 Agent 默认动作
Skills 机制可以理解成给 Agent 预置的“工作手册”。正常的模型提示只能保证当前这一次对话遵守规则,而 skills 相当于把规则固化成一个可复用的指令包,之后每次对话都能默认加载。比如我可以给它一个“提交信息规范”的 skill,或者“前后端联调时必须在接口文档中同步更新”的规范,这些就不再需要每次重述了。
opencode 的项目级 skills 一般放在.opencode/skills/目录下,全局的则放在配置目录下。每个 skill 用 YAML 写元信息加一段 markdown 提示词,Agent 会根据任务类型自动匹配加载。团队场景下,这份 skills 目录可以放进 git 仓库,新成员一拉代码就拥有同一套 Agent 行为约定。如果你家里或公司有 Claude Code 的 agents 或类似规则目录,思路完全一致,迁移成本很低。
4.3 Memory:跨会话上下文
Memory 是 opencode 让我最有“复用感”的功能。以前用普通大模型对话,每次开新会话都要重新描述一遍“我是什么技术栈、项目用什么框架、代码风格是什么”,非常啰嗦。opencode 的 memory 可以把这些信息保存下来,下次新建对话时 Agent 自动读取。
实际使用中,我会在里面长期保存几类信息:项目技术栈关键字、测试命令和 lint 命令、代码风格偏好(比如“接口返回统一用 Result 包装”)。时间一长,Agent 的表现会越来越像一个真正熟悉这个项目的同事。不过 memory 也不是写得越多越好,内容太杂反而会干扰 Agent 的判断。建议只放真正稳定、长期有效的项目规则,那些一次性任务的临时信息就别往 memory 里写了。
4.4 用 Playwright MCP 让 opencode 自己查前端 bug
这是我觉得最惊艳的一个场景。以往 Agent 只能静态分析代码,遇到前端 bug 很难真正“看到”页面表现。opencode 支持 MCP 协议,可以直接接入 Playwright,让 Agent 打开浏览器、访问本地页面、点击按钮、抓取控制台报错,再把结果带回对话上下文里做分析。
接入方式不复杂,在 opencode.json 里声明一个 MCP 服务:
{ "mcp": { "playwright": { "type": "local", "command": ["npx", "-y", "@playwright/mcp@latest"], "enabled": true } } }配置之后,你可以在 opencode 里直接说“启动开发服务器,打开首页,点击登录按钮,把控制台报错信息贴给我”。它会调用 Playwright 自动操作浏览器,然后把页面状态和报错内容带回来分析。对我来说,这已经不是一个“锦上添花”的功能,而是查前端 bug 时绕过“复现-截图-粘贴代码-让 AI 猜”这一整套低效流程的实用方案。
5. IDE 与桌面体验:VSCode、JetBrains 插件
5.1 桌面版与 TUI 的取舍
opencode 桌面版推出后,我一开始觉得有点多余,毕竟终端 TUI 已经很高效了。但用了一段时间发现,桌面版有它独特的价值:在浏览代码、查看 diff、管理多个会话时,图形界面的体验确实比终端更直观,尤其是面对一个大型仓库的多个并行任务时,界面里把会话列表和文件改动分开展示,比在终端里来回切换顺手很多。
TUI 和桌面版不是互斥关系,它们共享同一套后端和会话体系。我目前的习惯是:在纯命令行场景下用 TUI,比如 ssh 到服务器上排查问题;在本机做深度代码修改时用桌面版,因为查看 diff 和展开文件树更方便。两个界面里聊到一半的任务,换到另一个界面还能继续,这种连续性让工具边界变得很淡。
5.2 VSCode 插件与 JetBrains IDEA 插件的接入方式
如果你主要工作场景在 IDE 里,opencode 也提供了对应的 VSCode 和 JetBrains 插件。装好插件后,一般需要指定 opencode 可执行文件的路径,然后再启动一个本地后台服务,插件会连接这个服务完成会话管理和代码读取。这种方式的好处是 IDE 里的选中代码、当前打开文件、运行日志等信息能够直接共享给 Agent,省去不少上下文切换的成本。
我试用 JetBrains IDEA 插件时有个很深的感受:插件和原生 IDE 功能的结合度比终端对话高得多。比如在 IntelliJ 里让 opencode 重构一个类,它能直接利用 IDE 的代码分析能力,改完后还能自动高亮所有调用处。对以 IDE 为主要工作台的同学来说,这类插件体验已经非常接近“结对编程”。
5.3 社区配置方案:superpowers 与 oh-my-claudecode
opencode 社区生态里,很多人会把 Claude Code 时代沉淀下来的配置方案迁移过来,最常见的就是 superpowers 和 oh-my-claudecode 这类增强配置包。它们本质上是一批精心打磨过的 skills 和提示词集合,从代码审查、测试生成到重构建议,覆盖面很全。装上之后,Agent 面对常见任务的表现会有明显提升,相当于给模型额外开了一堆“默认微调指令”。
不过我要提醒一句:这些配置集合里的提示词模板不一定都适合你的项目。我的做法是先从里面挑两三个最贴近需求的 skill 用,跑一段时间沉淀出团队自己的规则,再逐步替换成私有版本。直接全量导包容易让行为变得不可预期,到时候出了问题,你很难判断是模型的问题还是某个 skill 提示词的问题。
6. 常见问题排查实录与选型建议
6.1 终端突然报 “Unexpected server error” 怎么办
很多人在 Windows 终端第一次运行 opencode 时会遇到:
Error: unexpected server error. check server logs.这个问题我碰到过几次,原因基本集中在三类。第一是本地某个服务端口被占用,导致 opencode 的后台服务起不来;第二是网络代理设置导致请求失败;第三是配置文件里有语法错误或路径不存在,服务初始化直接崩了。
排查顺序建议如下:先看配置文件是否能被正确解析,可以把 provider 块先全部注释掉再启动看是否恢复;然后检查系统代理或防火墙是否拦截了本地的回环请求;最后再看 4000-4999 范围内有没有端口冲突。如果这三步都排除了,直接删掉节点_modules 或重装二进制,很多时候反而是最简单有效的办法。整体思路就是“先最小化,再逐步恢复”——把复杂配置剥掉,让它跑起来,再一层层加回去。
6.2 会话变慢或 token 消耗异常
用着用着发现一个 Agent 任务变慢了,十有八九是会话上下文过长导致的。大模型的推理时间会随着上下文长度显著增加,我在接手大项目的时候经常遇到,尤其是带着一堆历史代码片段聊到二三十轮之后。解决办法有两个:一是及时开新会话,只把关键的结论和需求带到新会话里,而不是一路翻旧账;二是充分利用 skills 和 memory,把长期的规则放进固定文件,而不是每轮对话都重复贴。
token 消耗方面,一个容易被忽视的坑是 MCP 工具会把大量“额外观察”塞进上下文,比如 Playwright 每次抓取的完整页面文本。加上这类工具之前,先想想你是不是真的需要每一轮都让浏览器跑一遍;不需要的时候把 MCP 服务停掉,能把 token 消耗降一个量级。
6.3 Codex、Claude Code、opencode 怎么选
如果你看到这里还在纠结“opencode、Codex,还有 Claude Code 到底选哪个”,我的观点其实很简单:不要只看名气,要看你日常的模型供应商和工作流。主力用 OpenAI 模型的,Codex 很顺手;主力是 Anthropic 生态的,Claude Code 深度集成没话说;但如果你经常在多个模型之间切换,或者有很强的本地模型和私有化部署需求,那 opencode 的多模型接入和开源架构带来的自由度,就是另外两个工具很难给的。
我现在的组合是:团队合规项目用 opencode 接公司统一的模型接入层,个人探索型项目接本地 Ollama,写正式方案和复杂重构接云端模型。所有工作统一走 opencode 这一个入口。当然,工具选型这件事本身是高度个人化的,上述只是我自己的使用经验,不见得适合所有人的团队约束和项目类型。
最后说一个我实际用过之后最大的体会:opencode 这类终端 Agent 的威力,不在于它某一个单独功能有多惊艳,而在于它能把这些能力串成一个完整的工作流。从读取项目、分析问题、给出方案、动手修改、跑测试,再到我事后审查 diff,整套过程都发生在同一个会话里。我现在已经习惯把“带着 opencode 走完一遍开发流程”当成一种日常状态,而不是什么需要特别准备的事。如果你也想把手上的重复编码工作往下压一压,我的建议很简单:先找一个不起眼的小任务,让它完整跑通一遍,再慢慢扩大边界。