最近后台私信里被问得最多的一个工具,就是这个 OpenCode。很多人看到它和 Codex CLI、Claude Code 长得有点像,但又不清楚它到底能干什么、值不值得换。我先用一句话说清楚:OpenCode 是一个跑在终端里的开源 AI 编程助手,它能读懂你的项目代码,按你的自然语言指令去改文件、执行命令、跑测试、提交 Git,整个过程都发生在你原本就在用的命令行窗口里,不需要切换到别的编辑器或网页。
很多人第一次听说 OpenCode 是因为它在 GitHub 上快速涨星,用了一段时间之后我才确认,它并不是拿来替代 Cursor 或者 Copilot 的,而是另一种思路——把 AI 直接嵌进终端工作流。这篇文章我会从环境准备、安装、配置文件、日常使用,到模板(Skills)的创建和复用,完整走一遍。内容不搞虚的,主要是我自己从零开始用到现在的真实步骤和踩坑记录。不管你是刚接触命令行的小白,还是已经在用 Cursor、Copilot 的老手,这篇都能给你一份可以直接照着做的 OpenCode 入门参考。
1. OpenCode 是什么:先看清定位再动手
1.1 核心定位:终端原生的 AI 编程代理
OpenCode 本质上是一个“终端原生”的 AI 编程代理。所谓代理(Agent),不只是你问一句它答一句,而是它能看到你整个项目的文件结构,能读取代码内容,能执行终端命令,能自己决定接下来该做什么。打个比方:Copilot 像是坐在你旁边帮你补全代码的加强版输入法,而 OpenCode 更像一个能接手你键盘的实习生——你说“帮我把登录接口加上校验”,它会自己去翻相关文件、改代码、跑测试,然后把结果汇报给你。
这个定位决定了它的使用场景。它最适合那些已经有命令行习惯的开发者:平时用 Vim、Neovim、Tmux,或者喜欢在集成终端里敲命令的人。OpenCode 不会强迫你改变工具链,反而把你现有的 Git 操作、编译流程、测试命令全部纳入它的协作范围。你不需要把一个项目文件拖进某个 IDE,也不用在网页和大模型之间来回复制粘贴,直接在项目目录里启动它就能干活。
另外一个核心特点是“模型中立”。OpenCode 本身不绑定某一家大模型,你可以接 OpenAI 的模型,也可以接 Anthropic 的模型,还能接本地跑起来的开源模型(比如通过 Ollama)。这就解决了很多人对单一厂商的顾虑——想用哪个模型,或者哪个模型对当前任务效果更好,随时可以切换,不用因为换工具而被迫换模型供应商。
1.2 和 Codex CLI、Claude Code 对比,为什么选它
目前市面上同类的终端 AI 工具主要有三款:OpenCode、Codex CLI 和 Claude Code。它们在基本形态上很像,都是命令行交互,但侧重点不太一样。
我用过一段时间之后,对它们做了这么个对比:
| 工具 | 开源情况 | 模型支持 | 交互方式 | 扩展性 |
|---|---|---|---|---|
| OpenCode | 完全开源 | 多模型(OpenAI / Anthropic / 本地模型等) | 斜杠命令 + 交互式 TUI | 支持模板(Skills)自定义 |
| Codex CLI | 代码开源 | 以 OpenAI 模型为主 | 命令行对话 | 插件机制,但生态相对受限 |
| Claude Code | 非完全开源 | 以 Anthropic 模型为主 | 命令行对话 + Agent 模式 | 有技能扩展,但和自家模型绑定较深 |
我自己最看重的两点,一个是模型中立,另一个是 OpenCode 的模板机制足够轻量。模板这个能力我后面会详细展开,简单说,它允许你把“代码审查”“生成提交信息”“创建新组件”这类经常重复的指令封装成一个个可复用的 SKILL.md 文件。团队里任何一个人写好模板,其他人就能共用同一套最佳实践,这对于保持代码风格统一和提升效率很有帮助。
不过也要实话实说,OpenCode 现在的生态还在快速变化中,文档更新速度赶不上功能迭代速度。如果你喜欢凡事有官方文档兜底的工具,可能会觉得它有点“野”。但换个角度看,这种活跃迭代也正是它的优势——社区反馈的问题往往很快就能得到修复。了解清楚定位之后,我们再来看怎么装。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装前的环境准备:Node.js、Git 与终端环境
2.1 Node.js 安装与版本管理
OpenCode 是基于 Node.js 开发的,官方推荐通过 npm 全局安装,所以装 OpenCode 之前,你需要先确认机器上有 Node.js 环境。版本方面,建议不低于 Node.js 18,我自己用的是 Node.js 20 LTS,整个使用过程比较稳定。
这里我强烈建议不要直接去官网下载安装包,而是用版本管理工具来装 Node.js。macOS 和 Linux 上我常用 nvm,Windows 上推荐 Volta 或者 nvm-windows。为什么要多此一举?因为后续你可能会同时维护多个项目,有的项目要求 Node.js 18,有的要求 Node.js 20,用版本管理工具可以一条命令切换,避免卸载重装的麻烦。
bash复制# macO S / Linux 安装 nvm 后
nvm install 20
nvm use 20
node -v
npm -v
装完之后把 node 和 npm 版本确认一下。如果这里报错,先检查是不是 PATH 没有配好,输入 which node 看看路径是否指向你预期的位置。这一步别跳过,很多人后面 OpenCode 装不上,回头排查才发现是 Node.js 版本太老或者 PATH 混乱。
2.2 Git 配置与终端环境
OpenCode 在做代码修改、提交、分支操作时,底层依赖 Git,所以 Git 也是必须装的。macOS 上通常自带了 Git,Windows 用户需要去 Git 官网下载安装,安装时记得勾选“将 Git 添加到 PATH”。
装完 Git,先做最基础的配置。这里有个我之前踩过的坑:直接用 OpenCode 让它提交代码,结果报错说无法提交,原因就是 Git 没有配置用户名和邮箱。所以最好提前配好:
bash复制git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
终端环境方面,macOS 用户我建议用 iTerm2,Windows 用户建议用 Windows Terminal + PowerShell 7。不一定要完全照搬,但尽量别用 Windows 自带的旧版 cmd,它对 UTF-8 的支持不够好,OpenCode 输出的中文内容可能会出现乱码。如果你用的是 Linux,自带的终端基本都够用。
2.3 检查环境是否到位
正式安装之前,我习惯把所有环境变量和依赖一次性检查完。你可以按顺序跑这几条命令:
bash复制node -v
npm -v
git --version
如果三条命令都能正常输出版本号,说明环境这块没问题了。这里多说一句,如果你是一个项目同时在多台电脑上开发,我建议把上述这些工具的配置放进你的 dotfiles 仓库,用 Git 管理起来。这样换电脑时几十秒就能把环境恢复到位,省下的时间非常可观。
3. 安装 OpenCode 的完整流程:从 npm 到项目初始化
3.1 使用 npm 全局安装 OpenCode
环境准备好之后,安装其实就是一条命令的事。打开终端,执行:
bash复制npm install -g opencode-ai
注意包名是 opencode-ai,有些搜索网站上会写成 opencode,但 npm 上的实际包名要以官方文档为准。装完之后执行:
bash复制opencode --version
如果能看到版本号,就说明安装成功了。如果你是想尝鲜最新开发版,也可以从源码仓库 clone 下来自己构建,但日常使用没必要,稳定版足够。
这里有一个很容易踩的坑:npm 全局安装时出现 EACCES 权限报错。这通常是因为你的 Node.js 安装在系统目录下,全局安装需要写系统级目录。参考我之前在 VSCode 配置博客里提到的思路,不要直接加 sudo 绕过权限,正确做法是把 npm 的全局安装路径改到用户目录下:
bash复制mkdir -p ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH=~/.npm-global/bin:$PATH
把最后一句 export 写进你的 shell 配置文件(zsh 的话是 ~/.zshrc),然后重新加载。这个方法比 sudo 优雅得多,后续装任何全局包都不会再遇到权限问题。
3.2 首次启动与项目初始化
安装完成之后,先别急着做什么复杂操作,我们从一个最简单的项目开始试水。创建一个测试目录,在里面启动 OpenCode:
bash复制mkdir opencode-demo
cd opencode-demo
git init
opencode
首次启动会进入交互式界面,通常它会引导你选择要使用的模型提供方。如果你已经准备好了 API Key,可以直接登录;如果还不确定,也可以先退出,完成配置再进来。我建议第一次启动时打开 opencode --help 看一下有哪些参数,至少知道几个常用的:
bash复制opencode --help
opencode --config ~/my-config.json
opencode --model openai/gpt-4o
--model 参数可以直接指定本次会话使用的模型,这个很实用。比如默认模型是 A,但这次想试试 B,不用改配置文件,启动时加参数就行。熟悉这一步之后,OpenCode 的基本使用就算入门了。
4. 配置要点与模型接入:三种方式一次说清
4.1 认证登录与环境变量配置
OpenCode 支持多种模型提供方,主要的认证方式有三种。第一种是在交互界面里直接执行登录命令,按提示走授权流程;第二种是把 API Key 写进环境变量;第三种是在配置文件里指定 Key。我最推荐第二种,原因很简单:环境变量是操作系统层面的能力,不会因为项目不同而改变,也不会像配置文件那样容易误提交到 Git 仓库。
常用环境变量名是 ANTHROPIC_API_KEY 和 OPENAI_API_KEY。在 shell 配置文件中加上:
bash复制export OPENAI_API_KEY="sk-xxx"
export ANTHROPIC_API_KEY="sk-ant-xxx"
然后 source ~/.zshrc 让配置生效。OpenCode 启动时会自动读取这些变量完成认证。如果你用本地模型,比如 Ollama,甚至不需要 API Key,只要本地服务跑起来就行。
4.2 主配置文件逐项解析
OpenCode 的配置文件位置在 ~/.config/opencode/config.json。注意,不同版本可能不同,不确定的时候可以在 OpenCode 里执行 /config 命令查看具体路径。这个文件负责控制模型选择、生成参数、主题、自动更新等行为。
下面是我常用的一份配置,我加上了注释,方便你对照理解每个字段的作用:
json复制{
"model": "openai/gpt-4o",
"temperature": 0.7,
"max_tokens": 4096,
"theme": "dark",
"autoupdate": true,
"disable_telemetry": true,
"format": {
"stream": true,
"markdown": true
}
}
几个关键字段我单独说一下。temperature 控制的是模型输出随机性,代码任务建议保持在 0.2 到 0.7 之间,太高了容易“自由发挥”写出不稳定的代码;max_tokens 决定单次输出上限,代码任务建议至少 4096,否则模型经常写到一半就断;autoupdate 建议打开,因为 OpenCode 迭代很快,保持最新版本能少踩很多已修复的 bug。
如果你不方便用默认路径的配置文件,也可以通过 --config 参数指定其他位置的配置文件。这一点在团队环境里很实用,可以让不同项目用不同的配置,避免互相干扰。
4.3 接入本地模型:用 Ollama 跑开源模型
本地模型是我比较喜欢的一个能力。有些项目涉及敏感信息,不方便把代码内容发给外部 API,这时候本地模型就是唯一选择。本地模型的部署方式很多,Ollama 是其中最省事的一个。
先安装 Ollama,然后拉取一个开源代码模型,比如 qwen2.5-coder 或 deepseek-coder:
bash复制ollama pull qwen2.5-coder:14b
ollama serve
然后在 OpenCode 配置里把模型指向本地:
json复制{
"model": "ollama/qwen2.5-coder:14b"
}
这里要有个心理准备:本地模型的代码能力,和 GPT-4o、Claude 这些顶级闭源模型相比还是有差距的。我的经验是,本地模型更适合做代码解释、简单重构、生成 commit message 这类轻量任务,复杂的架构设计和大规模重构还是建议交给更强的云端模型。好处是数据不出机器、不花钱、响应也快。所以我的建议是,日常办公准备一个云端模型的 Key,本地再挂一个 Ollama 兜底,按任务灵活切换。
5. 核心使用技巧与实战记录:斜杠命令、权限机制、工作流配合
5.1 高频斜杠命令:先记住这几个就够用
OpenCode 的交互方式类似聊天工具,但它提供了一组斜杠命令,用来控制 AI 的行为。我日常用下来,最高频的是这几个:
| 命令 | 作用 | 我的使用场景 |
|---|---|---|
/init |
让 AI 阅读项目结构并生成说明 | 新接手一个旧项目时快速了解全貌 |
/ask |
只回答问题,不修改任何文件 | 问某个函数怎么用、代码逻辑的解释 |
/code |
让 AI 聚焦写代码任务 | 实现新功能、修复 bug、补测试 |
/diff |
查看当前改动的内容 | 每次 AI 改完代码,先看 diff 再决定是否接受 |
/commit |
根据当前改动生成提交信息并提交 | 省去手写 commit message 的时间 |
/clear |
清空当前对话上下文 | 对话跑偏或上下文太长时重置 |
刚上手的时候,最容易犯的错误是把 /ask 和 /code 混用。/ask 只管说,/code 才动手。如果你想让 AI 修改代码,一定要用 /code 模式,否则它可能只给你建议,不会直接改文件。我一开始没注意这个区别,问了好几轮“帮我改一下”都没反应,还以为是工具坏了。
5.2 提需求的三段式方法:背景、约束、验收
用 OpenCode 这类工具,最关键的能力其实是“把需求说清楚”。我发现很多初次使用者抱怨“AI 改的不是我要的”,大部分原因是初始指令太模糊。我自己实践下来,一个有效的需求应该包括三个部分:背景、约束、验收标准。
举个例子,比起直接说“帮我优化登录接口”,更好的说法是:
code复制背景:项目在 src/api/auth.ts 里有登录接口,目前没有做参数校验。
约束:不要改动其他文件,不要引入新的依赖。
验收:账号密码为空时返回 400,并在返回结构里带上提示字段。
为什么要这么详细?因为 AI 不知道你的项目约定,不知道哪些文件能碰,也不知道你心里的“优化”到底指什么。三段式需求本质上是在补全信息差。这个技巧看起来简单,但它直接决定了 AI 输出的质量,花 30 秒写清需求,至少能省下 3 轮来回沟通的时间。
5.3 文件修改的权限机制:哪些操作必须人工确认
OpenCode 在修改文件之前,会先展示改动计划,需要你确认才执行。这个机制非常关键,尤其是涉及以下三类高风险操作时,一定要仔细看:
- 删除文件或目录:AI 可能为了“清理无用代码”删掉你不想删的东西。
- 安装或卸载依赖:它可能会运行
npm install之类的命令,引入你不需要的包。 - 推送远端分支:如果它执行
git push,代码就到了远端仓库,影响面更大。
我的习惯是,每次 AI 提出要执行这些操作时,先停下来看一遍它要跑的命令,确认没问题再批准。另外,我要求 AI 每完成一小步就停下来汇报,而不是一口气改完十个文件。小步提交配合 /diff 查看改动,是我目前觉得最稳妥的操作方式。这种“每一步都可见、可回溯”的体验,也是我信任这类工具的基础。
5.4 与 VSCode、Git 工作流配合:提高日常开发效率
虽然 OpenCode 是终端工具,但它和图形界面工具并不冲突。我日常开发的标配是:VSCode 写代码和调试,打开集成终端在里面跑 OpenCode,两者互补。遇到跨文件的批量重构,比如“把所有用户模块的接口改成 RESTful 风格”,这种活扔给 OpenCode 比手动改高效得多;而界面样式、调试断点这类工作,VSCode 依然是强项。
另外一个很适合交给 OpenCode 的场景是 Git 操作。它不只是能帮你写 commit message,还能帮你分阶段提交。比如你改了一堆文件,里面有 bug 修复也有一项新功能,你可以告诉它:“把登录相关的改动分成一个 commit,支付相关的分成另一个 commit,分别写好信息。”它会按语义拆分文件并执行提交,这个能力在文件多、改动杂的时候特别省心。
6. 模板(Skills)定义与自定义扩展:把重复劳动封装成一次指令
6.1 模板机制的原理:SKILL.md 是什么
在 OpenCode 里,模板(Skill)本质上是一个 Markdown 文件,用来描述一套指令集,告诉 AI 在面对某个场景时应该怎么做。它的目录结构一般是这样的:
text复制~/.config/opencode/skills/
└── code-review/
└── SKILL.md
当你需要执行代码审查时,在 OpenCode 对话里唤起这个 Skill,它就会读取 SKILL.md 里的指令,按照你定义的标准去审查代码。这些文件是纯文本的,意味着一件很重要的事:模板可以放进 Git 仓库,可以被团队共享,可以被后人轻易修改。它不像某些工具里的“插件”是一个黑盒,而是像代码规范文档一样透明。
为什么用 Markdown 作为模板格式?核心原因是低门槛。任何人都会写 Markdown,不需要了解编程语言或 SDK,直接把团队已有的代码规范文档改造一下就能成为一个模板。这种“文档即代码”的思路,大大降低了团队内部经验复用的成本。
6.2 自建一个代码审查模板:从零到可用
我不喜欢空谈机制,直接带大家建一个最通用的模板——代码审查。先在 skills 目录下建好结构:
bash复制mkdir -p ~/.config/opencode/skills/code-review
然后创建 SKILL.md,写入审查规则:
markdown复制# 代码审查技能
当用户要求代码审查时,请按以下步骤执行:
## 审查范围
- 检查当前分支相对主分支的所有改动。
- 重点关注:逻辑错误、安全问题、性能隐患、命名是否规范。
- 不要修改代码,只输出审查意见。
## 输出格式
按下面的结构输出:
1. 问题列表:每个问题包含文件路径、行号、问题描述、严重程度。
2. 修改建议:给出具体可行的修复思路,必要时附代码示例。
3. 总结:给出整体评价和是否建议合并的意见。
保存之后,在 OpenCode 会话里唤起这个 Skill,它就会严格按照这套规则来审查代码。我给团队几个同学都装了这套模板,大家的审阅风格一下统一了。这比在群里发“以后按这个标准来审查”要有效得多——因为规则直接进入了工具的工作流,不需要靠人自觉执行。
6.3 模板管理的三条经验:持续复用不翻车
用的模板多了之后,我总结了几条管理经验,很实用。
第一,一个模板只干一件事。不要把“代码审查”“生成提交信息”“架构设计”全都塞进同一个 SKILL.md,那样 AI 会变得无所适从,模板输出质量会很差。每个模板都应该有明确的输入触发和输出格式。
第二,模板要定期更新。模板不是写完就完了,随着团队规范和项目模式的演进,模板内容也要同步调整。我一般会要求模板文件放在 Git 仓库里,每次修改都留记录,这样能追踪模板的演变历史。
第三,模板里不要写死具体技术栈。比如你写了一个“创建新组件”的模板,里面却写死了 Vue 3 的语法,那 React 项目中用这个模板就会差得很远。好的模板描述“需求应该怎么梳理”、“组件应该怎么拆分”,而不是绑定某一种技术实现,这样在团队技术栈可能变化的情况下,模板还能继续复用。
7. 常见问题与排查技巧实录
7.1 问题速查表
使用 OpenCode 的过程中,我遇到过不少问题,下面按出现频率整理成一份速查表,你在排查时可以直接对照:
| 问题 | 常见原因 | 解决方案 |
|---|---|---|
npm install 报 EACCES 权限错误 |
Node.js 安装在系统目录 | 修改 npm prefix 到用户目录,不要用 sudo |
| 启动后提示无法找到认证信息 | 环境变量未设置或未加载 | 检查 ~/.zshrc 或 ~/.bashrc 中 API Key 变量,source 后重试 |
| 对话到一半请求失败 | 网络波动或请求超时 | 检查网络连通性,稍后重试;也可以在配置里调大超时时间 |
| 模型输出乱码 | 终端未使用 UTF-8 编码 | Windows 用户切换到 Windows Terminal,确保编码为 UTF-8 |
/code 模式改完代码但文件没变 |
改动未通过权限确认 | 查看对话中的 diff 预览,按确认键接受修改 |
| 模型输出内容被截断 | max_tokens 设置过小 |
将 max_tokens 调到 8192 或更高 |
| 提交代码时报 Git 用户名错误 | 未配置 user.name / user.email |
执行 git config --global 补全配置 |
| 对话流畅度下降明显 | 上下文过长导致模型混淆 | 执行 /clear 清空会话,新开一轮对话 |
如果你遇到的问题不在表里,最快的排查路径是带上完整报错信息去官方仓库的 Issues 搜一下。因为 OpenCode 迭代速度快,很多问题其实别人已经遇过并给出了解决方案。
7.2 我踩过的几个坑:从懵到会的实战记录
第一个坑就是全局安装的权限问题。当时我直接在官网装了 Node.js,没注意安装目录,结果 npm install -g 一直报 EACCES,当时图省事就用了 sudo。后面每次装全局包都要加 sudo,特别别扭,最后才改成修改 npm prefix。这个教训我在前文已经反复强调过,但真的值得再说一次:尽量少用 sudo 装全局依赖。
第二个坑是第一次用 /code 模式时没仔细看它的改动方案,直接按了确认,结果它在“优化”的过程中把一整个配置文件里所有注释都删了,还重新排了字段顺序。虽然功能上没出问题,但 diff 看起来非常吓人。从那以后,凡是 AI 批量修改文件,我都强制自己先看完整 diff,再动手确认。
第三个坑是模板里写了太细的技术栈约束。我最初给团队写“新组件开发”模板,里面写了“统一使用 Vue 3 组合式 API”,后来有个 React 项目也要用同一套模板,AI 生成的代码风格就很奇怪。后来我把模板改成了关注组件职责划分、props 和数据流设计,不绑定具体框架,才算真正通用起来。
7.3 让 OpenCode 保持好用的三个日常习惯
最后说三个让我使用体验稳定提升的日常习惯。
第一个,定期 /clear 会话。OpenCode 会保留当前对话的上下文,这既是优势也是负担。上下文太长时,模型会“记得”前面很多次要信息,甚至把之前的错误判断带到新任务里。我一般每完成一个任务就清一次,类似于开新窗口写新代码。
第二个,正式操作前先让 AI 读项目说明。如果项目里有 README 或规范文档,先让它读一遍再动工。比如我可以说:“先读一下 README 和 docs 目录下的规范,然后在这个基础上帮我处理登录模块的改动。”这个“热身”步骤能让 AI 少犯很多低级错误。
第三个,把重要的操作流程写成模板。比如发布流程、数据库迁移、测试运行规则,这些都是重复性强、出错成本高的场景,用模板固定下来之后,相当于把团队经验直接安进了工具的工作流。我个人体会最深的一点是:OpenCode 本身只是个引擎,真正拉开效率差距的,是你在它之上积累的那套可复用的模板和用法。
