ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

opencode 完全指南:终端 AI 编码代理的安装、配置与实战

opencode 完全指南:终端 AI 编码代理的安装、配置与实战 2025 年如果你还在命令行里交替使用 git log、grep 和 grep -n 去理解一个老项目说明你还没试过 opencode。作为一个开源的终端 AI 编码代理terminal-based AI coding agentopencode 把类似 Claude Code 的对话式编程、类似 Codex 的任务执行能力以及自动化的代码导航、浏览器测试能力揉到了一起而且它不绑定任何一家模型厂商API Key 是谁家的就能接谁家的模型。过去半年我基本把它当成主力编码工具在用从命令行到 VSCode、IDEA从技能包到 LSP 接入踩过的坑和摸出来的经验都不少。这篇文章不是官方文档的复述而是我实际用下来的完整记录。我会从它到底是什么讲起然后覆盖安装、模型配置、Skills/Memory/LSP 这些容易被忽略的核心功能最后把常见报错的排查思路一次说清。无论你是第一次听说 opencode还是已经在用但被某个错误卡住这篇都值得你花十几分钟读完。1. 先说清楚opencode 到底是什么1.1 它是哪种“AI 编码代理”很多人分不清 opencode、Claude Code、Codex、Cursor 这堆工具的区别。其实从形态上很好分类Cursor 是“AI 加持的 IDE”你别无选择地要在它的编辑器里工作Claude Code 是“跑在终端里的编码代理”它帮你执行命令、读写文件、查资料但编辑器还是你自己的opencode 走的是第三条路线本质上和 Claude Code 一样是个终端代理但它在开源协议和可扩展性上做得更彻底。opencode 是一个用 Go 语言写的开源项目主仓库在 GitHub 上核心交互是一个类似聊天窗口的 TUI终端界面。你在终端里输入 opencode 启动它然后像聊天一样描述需求。它可以读取整个项目结构、搜索代码、创建和修改文件、执行终端命令、运行测试甚至自己打开浏览器去复现前端 Bug。最方便的是它能同时接多个模型不用像某些工具那样被锁死在一家云服务上。和 Claude Code 相比opencode 最大的优势是“中立”。Claude Code 默认绑定 Anthropic 的模型虽然也能配第三方但总感觉是客场作战。opencode 从一开始设计就是 provider 无关的OpenAI、Anthropic、Google、本地模型只要配置好 API 地址和 Key谁来都行。这种设计让它很适合“多模型对比”的场景同一个需求我可以先让 Claude 试试再切 GPT看看谁的处理方式更合理。1.2 和 Claude Code、Codex、Pi Agent 的对比热词里有人问“opencode、codex、claude code、pi 哪个 agent 好用”这类问题其实没法给出“谁最好”的答案因为每个工具的侧重点不一样。以我实测的体验来看Claude Code 在长上下文理解上确实强适合处理那种涉及十几个文件的跨模块重构但它是商业工具开放性和自定义能力有限Codex 更偏“自动执行固定任务”写小脚本、跑批量操作很顺手但遇到复杂的项目理解需求时交互感差一些Pi Agent 是另一种风格的通用 agent它更强调任务分解适合把它当作流水线的一部分来用而不太适合日常“陪聊式”的编码。opencode 的优势在于它把“对话式编程”和“工具链能力”结合得比较均衡。它有完整的 TUI 界面可以随时看到上下文文件列表它支持 Skills 机制可以把团队的开发规范做成技能包它可以接入 LSP获得类似 IDE 的跳转定义、查找引用能力它还能直接调起 Playwright 做浏览器测试。这些能力摆在一起你会发现它更像一个“能长在命令行里的个人开发助手”而不是单纯的模型聊天框。1.3 为什么是 Go 写的对用户意味着什么热词里反复出现“opencode go”这其实是两层意思。第一层opencode 本身就是用 Go 语言开发的所以可以直接通过 go install 安装二进制第二层社区里说的“opencode go 套餐”“opencode go 订阅”是指 opencode 提供的托管订阅服务云端的模型访问方案后面我会单独讲。Go 写的好处是部署极其简单。最终产物就是一个单一可执行文件没有 Node 运行时依赖没有 Python 虚拟环境拷到任何一台 Linux 服务器上都能直接跑。这也意味着你可以在远程开发机、容器、CI 环境里放心使用不用担心“这台机器没装 Node 环境”之类的问题。如果你准备在团队里推广这个工具单文件分发是一个很强的加分项。2. 安装与初始化Windows/macOS/Linux 三端实测2.1 官方推荐安装方式opencode 的安装方式很灵活官方主推的是 curl 脚本安装一键搞定curl -fsSL https://opencode.ai/install | bash这个命令会在用户目录下安装 opencode 二进制并把路径写进 shell 配置。macOS 用户也可以用 Homebrewbrew install sst/tap/opencodeWindows 用户稍微麻烦一点但也还好。我一般建议用 npm 方式因为 npm 在 Windows 下处理 PATH 环境变量最省心npm install -g opencode-ai如果你机器上有完整的 Go 工具链也可以直接编译安装go install github.com/sst/opencodelatest我个人的偏好是日常开发机用 npm 或 Homebrew方便版本管理服务器或 Docker 环境用 curl 脚本或 go install因为那类环境往往没有 Node但只要能跑二进制就行。2.2 初始化配置与第一个会话装好之后直接在项目目录下输入opencode第一次启动会进入初始化流程它通常会自动检测环境变量里已有的 API Key比如 OPENAI_API_KEY、ANTHROPIC_API_KEY找不到也没关系它会提示你去配置文件里补充。opencode 的配置文件叫 opencode.json支持放在项目根目录只对当前项目生效和用户目录全局生效两级。最简单的配置长这样{ $schema: https://opencode.ai/config.json, provider: { openai: { apiKey: sk-xxx, model: gpt-5 }, anthropic: { apiKey: sk-ant-xxx, model: claude-sonnet-4 } } }配好之后在 opencode 的输入框里敲/models可以即时切换模型敲/context可以查看当前会话加载了哪些文件。第一次跑通这个流程基本就算入门了。2.3 踩坑实录无法将“opencode”项识别为 cmdlet热词里有条报错是这样的opencode : 无法将“opencode”项识别为 cmdlet、函数、脚本文件或可运行程序的名称这个报错在 Windows 上太经典了90% 的情况是安装完没有正确设置 PATH。npm 全局包的默认安装路径通常在%APPDATA%\npm但很多系统的 PATH 里没有加这一项。排查步骤我建议按顺序来第一步在 PowerShell 里执行npm config get prefix拿到 npm 全局安装路径第二步检查这个路径是否在 PATH 环境变量里可以执行echo $env:Path第三步如果不在用系统设置把%APPDATA%\npm加进去或者用setx命令临时补上然后重启终端。还有一个容易忽略的点如果你是用 curl 脚本装的脚本默认只写 Bash 的配置不会给 PowerShell 配置 PATH。这种情况下最省事的办法是找回安装目录比如C:\Users\你的用户名\.opencode\bin手动添加进去然后新开一个终端窗口。2.4 更新与卸载opencode 迭代很快基本一两周就有新版本。更新方式很简单opencode upgradenpm 装的就用 npm 原生命令npm update -g opencode-ai卸载更暴力直接删二进制文件再清理配置文件就行。如果你用 npm 装的执行npm uninstall -g opencode-ai如果是脚本装的删掉~/.opencode目录再把 shell 配置里对应的 PATH 行删掉即可。配置文件一般在~/.config/opencode/万一你之后想装回来又不想重新配 Key建议先把opencode.json备份一份。3. 模型接入与配置opencode.json 才是灵魂3.1 provider 体系与配置文件优先级opencode 的模型抽象做得非常干净。它把“谁来提供模型能力”统一成 provider常见的有 openai、anthropic、google以及兼容 OpenAI 接口的第三方网关。每个 provider 都可以单独指定apiKey和model甚至还能指定自定义baseUrl。我强烈建议凡是项目级的配置放在项目根目录的 opencode.json 里比如这个项目统一用哪个模型、开启哪些技能而个人级的 API Key 放在用户目录的~/.config/opencode/opencode.json里。这样你切项目时不用担心把自己的 Key 暴露给同事同时每个团队又可以在仓库里维护统一的模型策略。配置项的优先级也需要注意用户目录的配置是基础项目目录的配置会覆盖同名项。如果你在项目里配了model但没配apiKey那么 apiKey 会从用户目录继承。这个设计很实用但前提是你得理解它的覆盖逻辑否则会出现“我明明改了项目配置却不生效”的困惑。3.2 模型选择免费模型、订阅套餐与 opencode go关于模型选择网上的讨论特别多包括热词里的“opencode 免费模型”“opencode go 订阅模型选择”“opencode go 套餐”。先说免费模型。opencode 早期很多教程喜欢接第三方免费端点比如 hy3-free 这类社区维护的免费模型服务。但现实是这类免费服务稳定性很难保证响应慢、限流频繁最近 hy3-free 也已经确认下线。我个人的建议是免费端点只适合体验功能不适合进正式工作流否则你正干着活提示词发不出去很容易被卡住。真想免费试直接用本地模型可能是更稳的路子比如通过 Ollama 跑一个 7B 或 14B 的模型本地起服务opencode 的 provider 地址指向http://localhost:11434完全不依赖公网。再说 opencode go。这是 opencode 的托管订阅服务本质上是官方帮你把多个主流模型统一到一个入口你只需要一个 opencode go 的账号和 Key就可以在 opencode 里使用包含的模型组不用自己去各家开会员、管 Key。这种模式的好处是省心模型选择也很多缺点是区域可用性、计费额度这类事情你控制不了实际使用中偶尔会遇到模型不可用的问题。如果只是个人开发用我推荐先用官方各家的 API Key 直接配置想清楚自己真正需要哪款模型再决定要不要上 opencode go 这种聚合订阅。不要一上来就买套餐因为套餐里的很多模型你可能根本用不上。3.3 ccswitch 与多服务商切换热词里多次出现 ccswitch 配合 opencode 的用法。ccswitch 本质上是一套 API 网关/模型服务切换工具它把多个模型服务商的 Key 集中管理对外暴露一个统一的 OpenAI 兼容接口。opencode 只需要把 baseUrl 指向 ccswitch 的本地地址就能在会话中快捷切换不同服务商。我用下来的感觉是ccswitch 这类工具解决的最大痛点是“模型间切换成本”。你不需要在 opencode.json 里反复修改 apiKey 和 baseUrl只要在 ccswitch 里选好当前使用的服务商opencode 侧完全不用动。对于经常对比 Claude、GPT、Gemini 输出质量的人来说这是效率神器。但要注意多一层网关就多一层故障点。如果你请求失败先确认 ccswitch 本身有没有启动、服务商账号是否有额度、目标模型是否被放行。很多人在 opencode 里看到 unexpected server error第一反应是 opencode 的问题结果排查半天发现是网关层挂了。3.4 常见错误unexpected server error 与 model not available热词里有两条高频报错这里必须单独展开。第一条是opencode error: unexpected server error. check server logs。看到这个先别慌按顺序排查确认本机网络是否正常确认 API 服务商是否可用很多服务商会在高峰期返回 5xx但网关层没有做好错误透传opencode 就只显示一个笼统的 server error确认模型名称是否写对比如有些模型在服务商侧的型号名称带版本后缀漏掉一个点就会 404最后再看 opencode 自己的日志通常位于~/.local/share/opencode/log目录Linux/macOS或对应的用户数据目录Windows里面会有完整的 HTTP 请求和响应详情。第二条是this model is not available in your country。这条报错通常和模型服务商的区域授权有关。我见过不少人的第一反应是去折腾系统时区或者改网络出口但这既不稳定还可能违反服务商条款尤其是公司电脑上千万别这么干。正确的做法是先确认你当前 opencode 实际请求的模型端点属于哪家服务商然后看这家服务商的账号区域是否覆盖你所在的位置如果用的是 opencode go 这类托管服务确认服务覆盖范围如果都不行就切换到其他可用模型或服务商。总之换模型比绕限制靠谱得多。4. 核心功能深挖Skills、Memory、LSP、浏览器测试4.1 Skills把团队规范变成技能包Skills 是 opencode 最值得花时间研究的功能它相当于给 Agent 预装“行业经验和团队规范”。比如你的团队要求所有代码必须写单元测试、提交信息必须遵循 specified 格式、前端组件必须带无障碍属性这些都能做成一个 Skill 包让 Agent 在干活时自动遵守。Skill 的安装路径通常是~/.config/opencode/skills/每个 Skill 就是一个包含说明文件的目录。最简单的结构如下skills/ backend-bugfix/ SKILL.md scripts/ reproduce.shSKILL.md 里面用自然语言描述这个技能适用的场景、执行步骤、注意事项。当 opencode 判断当前任务与某个技能匹配时会自动加载这个文件并遵循里面的规则来执行。社区里有人把 Claude Code 的 superpowers 技能集移植到了 opencode也就是热词里的“opencode 安装 superpowers”。安装方法一般是在 opencode 配置里声明对应的技能路径或者在项目里引入第三方技能仓库。装上之后Agent 拆解任务、写计划、做复盘的能力会明显提升。我个人比较推荐的方式是把 superpowers 当作“方法论包”把你自己团队的规范单独做成私有技能两者配合使用。4.2 Memory让 Agent 记住项目约定热词里有“opencode memory”。这个功能解决的是长期记忆问题。默认情况下每个会话是独立的Agent 不会记得上次聊到哪、也不会记得项目的特殊约定这在实际使用中很痛苦。opencode 的 Memory 机制就是用来打破这种“每次都要重新交代”的局面。它有两种持久化方式。第一种是项目级的记忆文件通常叫 AGENTS.md 或类似名字放在项目根目录里面写清楚这个项目的技术栈、目录结构、常用命令、约定规则。opencode 每次启动时会自动读取类似 Claude Code 的 CLAUDE.md。第二种是跨项目的用户级记忆放在配置目录下适合写你个人偏好的代码风格、常用工具链、通用工作流。建议你把“全局搜索用 ripgrep”“测试命令是 pnpm test”“Python 代码用 ruff 做 lint”这类信息写进记忆文件越多越好。你会惊喜地发现之前需要反复纠正 Agent 的小事现在它自己就会遵守。4.3 LSP 接入让 Agent 像 IDE 一样理解代码“opencode 如何使用 LSP”是很多人的疑问。LSPLanguage Server Protocol就是语言服务器协议原本是给 IDE 提供跳转定义、查找引用、错误诊断等能力用的。opencode 可以通过配置接入 LSP让 Agent 不再只是“按字符串匹配”去理解代码而是获得精确的符号级信息。在 opencode.json 里可以这样配置{ lsp: { typescript: { command: [typescript-language-server, --stdio] }, gopls: { command: [gopls] } } }配置完成后opencode 会在需要时启动对应语言服务器向它请求符号信息。这样 Agent 在重构一个函数时能准确判断哪些地方引用了它而不是靠 grep 盲猜在遇到编译错误时也能拿到更具体的诊断信息。不过 LSP 也不是配得越多越好。语言服务器本身也是吃内存的资源如果你同时开了十几个 LSP启动速度会明显变慢。我建议只给你项目主语言配置 LSP像那种一个项目里既有 TypeScript 又有 Go 的情况先配主导语言就够用了。4.4 Playwright 前端 Bug 测试让 Agent 自己开浏览器热词里有一条非常具体“opencode playwright 怎么测试前端 bug”。这其实是 opencode 的一个杀手级功能它内置了浏览器操作能力通过 Playwright 驱动真实浏览器去复现前端问题。我在实践中发现这个功能在两类场景下特别好用。第一类是“复现 bug”比如你收到反馈说“某个按钮点了没反应”Agent 可以启动浏览器打开页面点击那个按钮然后把控制台报错带回来分析第二类是“视觉回归”让 Agent 跑一个脚本检查页面关键元素是否正常渲染。热词里的“opencode playwright 测试前端 bug”指的正是这种工作流。要注意的是运行浏览器测试前必须先启动前端开发服务器。你可以直接告诉 opencode“先运行 pnpm dev等端口起来之后再用 Playwright 打开 localhost:3000 复现问题”它会自动把这些步骤串联起来。如果你发现 Agent 没有正确等待服务器启动可以在项目记忆文件里写清楚启动端口和健康检查 URL它会学得很快。4.5 快速接手老项目从目录结构到全局检索“opencode 接手开发项目”这个热词代表了很多人的真实需求拿到一个没接触过的老项目不知道从哪看起。用它来干这事效率比人肉看代码高太多了。我通常的做法是在项目根目录启动 opencode然后把记忆文件先建好告诉它“这是一个 XX 技术的项目入口文件在 src/main.ts主要请求走 server 目录”。然后直接让它做几件事梳理目录结构标出核心模块找出启动脚本和环境变量清单定位最近改动较多的文件分析大概原因最后让它给出“如果要新增一个 XX 功能应该动哪些文件”。这一套下来一个陌生项目的基本盘就清楚了之后再做具体开发就不会像无头苍蝇。5. 编辑器与桌面端体验5.1 VSCode 插件opencode 虽然是终端工具但它也出了官方的 VSCode 插件。在扩展市场搜 opencode装好后侧边栏会多出一个 opencode 面板。它的价值不在于替代终端而在于把 Agent 的上下文和你的编辑器状态打通。比如你在终端里跑 opencode让它“修复当前打开文件的 lint 错误”它需要知道当前打开的是哪个文件。在 VSCode 插件里这个信息是自动同步的Agent 能感知到当前活动文件、选中内容甚至编辑器里的诊断信息。实测下来配合插件使用时Agent 给出建议后还能一键生成 diff直接在编辑器里 review比终端里复制代码再跑到编辑器里粘贴要流畅很多。如果你是重度 VSCode 用户我建议装插件之后把终端里的 opencode 放到一个独立的分屏里左边编辑器、右边 Agent配合上下文同步看起来非常舒服。5.2 JetBrains IDEA 插件IDEA 插件的功能逻辑和 VSCode 版本类似但起步要晚一些。目前主要的交互方式还是在 IDEA 里调起 opencode 终端面板插件负责同步当前项目路径、活动文件以及接收 Agent 生成的代码补丁。Java/Kotlin 生态的同学用 IDEA 插件有一个好处IDEA 自己的 LSP 能力很强你可以把 opencode 的 LSP 配置交给 IDEA 插件去处理不一定要在 opencode.json 里再配置 Java 语言服务器避免重复开销。我的经验是IDEA 插件适合“想用 opencode又不想完全离开 IDE”的人如果你本身是键盘流常年在终端和编辑器之间切换那么纯命令行版本也够用。5.3 桌面版 opencode desktopopencode 桌面版是一个独立的 GUI 应用本质上是把 TUI 包了一层更友好的界面。它解决了两个问题一是很多不习惯终端的人也能用二是 GUI 能更直观展示上下文列表、技能加载状态、模型切换选项。但从实用性来说桌面版目前还没有比终端版多出什么独有功能它的底层还是同一个命令行工具。所以我更愿意把它定位成“新手上路工具”或“给非技术协作人员看效果的工具”。真正干活时我还是会回到终端毕竟键盘操作效率高太多。5.4 一些使用小技巧这里分享几个我常用的小技巧。第一在 opencode 输入框里用/可以呼出所有命令比如/models切模型、/tabs管理会话、/context查看上下文文件。第二如果 Agent 跑偏了不要急着开新会话先用/rewind回退到之前的某一步这比重新描述需求省事得多。第三把常用的指令写成 Skill比如“帮我写 SQL 前先看表结构”一劳永逸。还有一个小细节opencode 支持在配置里设置theme和键盘映射你可以改成和平时终端一样的配色减少割裂感。这些看起来是小事情但每天用下来体验差距非常大。6. 常见问题排查速查表与我的实际体会6.1 高频问题速查表这些年我在各个社区群里看到的问题90% 都能落到下面这张表里问题现象最常见原因处理办法opencode 无法识别为命令PATH 未配置或安装不完整检查 npm 全局路径或脚本安装目录手动加入 PATH启动后一直转圈不响应网络无法访问模型 API检查网络、服务商状态确认 baseUrl 是否正确unexpected server error服务商 5xx 或模型名错误看 opencode 日志确认具体 HTTP 错误码和模型名this model is not available in your country服务商区域授权限制确认账号区域、服务覆盖范围或换可用模型模型能聊但不会改文件没有给 Agent 文件读写权限检查项目目录权限确认运行用户对文件有写权限技能不生效Skill 路径或格式错误确认 SKILL.md 在正确目录重启 opencode 后再试VSCode 插件连不上终端版本不匹配升级插件和 opencode 到最新版本重新加载窗口6.2 我踩过最深的坑这里说一个我印象最深的坑跨项目的配置污染。有一次我给 A 项目配了自定义 baseUrl结果切到 B 项目时发现所有模型请求都失败了排查了很久最后发现是项目级配置里没有显式覆盖 baseUrl而用户目录的全局配置又恰好被某个脚本改写成了 A 项目的地址。后来我给自己定了一条规矩凡是带环境的配置baseUrl、apiKey 指向一律只放用户目录项目级配置只放模型偏好和技能开关。这样换项目时不会互相污染。另一个坑是模型“看起来配好了实际没生效”。你在 opencode.json 里配置了model但在会话里用/models切到别的模型后它会把你的手动选择保存下来下次启动时优先采用用户手动选择而不是配置文件里的值。很多人改了配置文件却发现没变化就是这个原因。遇到这种情况用/models重新选一次或者删掉会话级状态即可。6.3 什么样的项目适合用 opencode最后给一个实用的判断标准。我用了这么久觉得 opencode 最适合的场景有三类第一类是个人开发者自己维护多个小项目靠它快速进入上下文、批量改代码第二类是团队里已经有明确工程规范lint、测试、commit 规范的项目通过 Skills 和 Memory 把规范变成 Agent 的肌肉记忆第三类是“接盘”老项目的场景新人入职第一天用它快速摸清仓库架构比看一周文档都高效。反过来如果项目本身构建链路特别诡异或者公司严格要求所有终端操作走专门的跳板机和审批流程那这类自动化工具在合规层面会碰壁不建议硬推。工具是为人服务的不顺手或者不合规换一个就好。opencode 目前还在快速迭代版本翻新非常频繁新功能的变数也大但“本地优先、模型中立、可扩展”这三个方向我认为会一直坚持。如果你准备开始使用它不用等什么“正式版”现在直接装一个试两天比看任何教程都有用。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进