OpenCode 2.0 升级教程:从 1.x 迁移配置、插件与会话(附回滚方法)
更新于

先说结论: 备份 OpenCode 的配置和数据目录,升级到最新的 1.x,然后再执行大版本升级。
# 1. 备份配置和数据(会话保存在数据目录里)
cp -R ~/.config/opencode ~/opencode-v1-config-backup
cp -R ~/.local/share/opencode ~/opencode-v1-data-backup
# 2. 先升级到最新的 1.x(--major 从 v1.19.0 开始才有)
opencode upgrade
# 3. 升级到 OpenCode 2
opencode upgrade --major在终端界面里输入 /update 效果相同。如果想干净安装,先卸载 v1 的包,再使用下文第 3 步里的任一 v2 安装命令。
大部分 v1 设置可以继续使用。有三处是有意做出的破坏性改动:v1 插件无法加载;服务端 API 换成了新的;tui.json 被 cli.json 取代。另外两处改动不那么显眼,却经常让人措手不及:v2 不再读取 CLAUDE.md;默认允许访问项目以外的目录。本文逐一说明这些变化,并整理了 2.x 发布头几周里已知的 bug。
我们核实了什么、没核实什么: 2026 年 10 月 25 日,我们在 macOS 上安装 OpenCode 1.18.19,检查了 v1 一侧,阅读了它的
upgrade、export、session和debug paths命令。我们还查看了 npm registry 中@opencode/cli2.1.4 的数据,以及下文引用的 GitHub issue 和维护者回复。本文写作过程中我们没有实际运行 OpenCode 2。所有关于 v2 行为的描述都来自官方迁移指南 (opens in a new tab)、v2 文档 (opens in a new tab)、OpenCode 2.0 发布公告 (opens in a new tab)以及上述维护者回复。每一处都附了来源链接。2026 年 11 月 4 日,我们又对照@opencode/cli2.2.5 和opencode-ai1.19.5 复核了版本号、发布页面和 issue 讨论。
- pandas 3.1 升级指南:inplace 弃用警告、df.select() 与 read_csv 并行加速
- OpenCode 2.0 升级教程:从 1.x 迁移配置、插件与会话(附回滚方法)
- Python 3.15 安装与升级指南:用 uv 安装、延迟导入提速、数据科学库兼容性实测
- Claude Code Mods 教程:从零写出第一个 Mod、测试与安装,附 15 个社区案例
- Pi Coding Agent 1.0 使用教程:安装、接入模型(含 Ollama 本地模型)并跑通第一个任务
- Claude Code 现在会读 AGENTS.md:配置方法、四种加载模式,以及如何与 Codex、OpenCode、Cursor 共用一份文件
- GPT Image 2.5 使用指南:Flare 与 Sunburst 怎么选、API 调用与价格
- DeepSeek Harness 安装教程:一条命令装好 DSH 并跑通第一个任务
- Runcell Science:面向科研的开源 Claude Science 替代方案
- Mac 怎么不休眠:合盖继续运行 Codex、Claude Code 和本地 AI Agent
- OpenClaw vs ZeroClaw vs Pi Agent vs Nanobot:2026 年该选哪个 AI Agent 技术栈?
- Claude Code 能分析 Jupyter Notebook 吗?Data Science 场景下它到底做了什么
- Claude Code Routines 是什么?AI Agent 定时任务与自动触发指南
- Claude Code Desktop 绕过权限:如何开启 Bypass permissions
- 如何用 Google 的 A2A 协议构建两个 Python Agent:一步步教程
- 2025 年 Python 增长最快的 10 个数据可视化库
现在该不该升级?
OpenCode 2.0 于 2026 年 9 月 11 日以 @opencode/cli 的包名发布到 npm。但许多通过 npm 或安装脚本安装 v1 的用户直到 10 月才注意到它(Homebrew core 的用户更早就拿到了,见第 3 步里关于 Homebrew 的坑)。原因是 opencode upgrade --major 这条升级路径在 10 月 11 日的 v1.19.0 中才加入,而团队在 10 月 14 日才正式宣布 2.0。这条公告在 Hacker News 上拿到了 888 分。从 10 月 11 日起,仓库新增了 4,000 多个 issue,其中 130 个提到了 2.0。
两个版本目前并行发布。npm 上的 opencode-ai 仍然是 v1(10 月 28 日为 1.19.5),@opencode/cli 是 v2(10 月 30 日为 2.2.5)。从 v2.2.0(10 月 27 日)起,2.x 的构建也会出现在 GitHub Releases (opens in a new tab) 上,但标记为 Latest 的 release 仍然是 1.x。这是团队有意为之:v1 通过 Latest release 检查更新,团队不希望 v1 的自动更新把用户直接带到 2.x(#57675 (opens in a new tab))。
| 你的使用情况 | 建议 |
|---|---|
| 只用原版 OpenCode,配了几个 provider,没装插件 | 直接升级,对你影响很小 |
依赖 CLAUDE.md 存放项目规则 | 先把规则移到 AGENTS.md,再升级 |
| 使用 Oh My OpenCode(oh-my-openagent) | 先把它更新到 5.1.38 或更高版本。更旧的版本在 2.x 上无法加载 |
| 使用其他 v1 插件 | 等每个插件发布 v2 版本,或者准备替换它们 |
| 使用 VS Code 扩展 | 先把扩展更新到 v1.0.0 或更高版本 |
| 自己写的脚本调用了 OpenCode 服务端 API | 预留时间把它们迁移到 @opencode/client |
| 需要在 OpenAI 兼容 provider(例如小米 MiMo)上使用特定推理档位 | 先看 #51541 (opens in a new tab)。2.x 不会为这些模型生成 variant;讨论串里有一个配置层面的变通方法 |
第 1 步:动手之前先备份
官方迁移指南建议在测试期间保留一份 v1 配置的副本,但没说具体要复制哪些内容。在 macOS 和 Linux 上,opencode debug paths 会列出相关目录。我们的 1.18.19 安装显示如下:
| 路径 | 存放内容 |
|---|---|
~/.config/opencode | 全局配置:opencode.json(c)、agent、命令、tui.json |
~/.local/share/opencode | 数据,包括会话数据库和日志 |
~/.local/state/opencode | 界面状态 |
~/.cache/opencode | 缓存和下载的二进制文件,可以不备份 |
复制前两个目录即可(命令见本文开头)。复制前先退出 OpenCode,这样会话数据库(opencode.db 及其 -wal 文件)才能在一致的状态下被复制。另外,把你在意的项目级 opencode.json 和 .opencode/ 目录也复制一份。它们留在各自的仓库里,多数情况下已经由 git 跟踪。
如果想把某段重要对话导出成可移植的副本,请在升级之前用 v1 导出:
opencode session list
opencode export <sessionID> > my-session.jsonopencode export 会把会话写成 JSON。分享文件前,加上 --sanitize 可以去掉敏感的对话内容和文件数据。
第 2 步:先升级到最新的 1.x
opencode upgrade --major 从 v1.19.0 才开始提供。在我们的 1.18.19 上,opencode upgrade --help 里没有 --major 参数。如果你还在 1.18 或更早的版本,先执行一次普通升级:
opencode --version
opencode upgrade然后确认 opencode --version 输出的是 1.19.x。从 v1.19.0 起,更新不再自动安装,所以不手动执行这一步,旧版本会一直停在旧版本。
第 3 步:升级或安装 v2
原地升级(从 1.19.x):
opencode upgrade --major干净安装。 迁移指南要求先卸载通过包管理器安装的 v1,因为 v1 和 v2 默认不能并存安装。然后从以下官方 v2 命令中选一个:
# 官方安装脚本(会替换 v1 的二进制文件)
curl -fsSL https://opencode.ai/v2/install | bash
# Homebrew(注意 formula 名带 -v2;先卸载用 brew 安装的 v1)
brew uninstall opencode
brew install anomalyco/tap/opencode-v2
# npm(新的包名)
npm uninstall -g opencode-ai
npm install -g @opencode/cli包管理器的几个坑:
- npm 包名。 v1 是
opencode-ai,v2 是@opencode/cli。今天执行npm install -g opencode-ai,装到的仍然是 1.19.5。 - Homebrew core 与 tap 的区别。
brew install opencode(不带 tap)从 9 月 28 日起安装的就是 OpenCode 2,所以这类安装执行brew upgrade时,不需要--major就会升到 2.x。1.x 的 formula 是anomalyco/tap/opencode,2.x 的是anomalyco/tap/opencode-v2。两者互相冲突,所以安装另一个之前,先运行brew uninstall opencode。 - 安装脚本。 v2 的 npm 包通过 postinstall 脚本选择原生二进制文件。如果你用 Bun 或 pnpm,需要加上
--trust(Bun)或--allow-build=@opencode/cli(pnpm)。不加的话,二进制文件会缺失。 - 两个命令名。 这个 npm 包在
bin字段里同时注册了opencode和opencode2(我们核对过 registry 元数据)。 - mise 从 2026.10.9 版本起才会安装 v2,更早的 mise 安装的是 OpenCode 1。
- Windows 包管理器(Scoop、Chocolatey)不支持 v2,
opencode upgrade --major也无法切换这类安装。请从 v2 安装页面 (opens in a new tab)下载独立的 Windows CLI 二进制文件或桌面应用,或者使用 WSL。有一份中文报告称 v2 在 WSL 下会卡住(#55033 (opens in a new tab)),该 issue 已于 10 月 16 日因缺少细节被关闭。 - Docker: 有带版本号的镜像,例如
ghcr.io/anomalyco/opencode:2.0.0。
运行 opencode --version,确认输出的是 2.x。
第 4 步:检查 v2 从 v1 配置里读到了什么
你不需要重写配置。v1 和 v2 读取的是相同的位置(~/.config/opencode/opencode.json、项目里的 opencode.json、.opencode/)。v2 会在内存中映射 v1 的字段名,不会改写你的文件。第一次启动 v2 时,全局 tui.json 里的设置会迁移到新建的 ~/.config/opencode/cli.json,v1 的文件保持原样。
在真正信任它之前,打开一个实际项目,检查五项:模型、provider 凭据、agent、权限和 MCP 服务器。迁移指南给的也是这份检查清单。
如果之后想改成原生 v2 配置,下面这些是最重要的字段变化:
| 范围 | v1 | v2 |
|---|---|---|
| 权限 | 按工具分组的 permission,以及 tools | 有序的 permissions 数组,元素为 { action, resource, effect } |
| 权限 action 名称 | bash、task、write、patch | shell、subagent、edit |
| Agent | agent / mode、prompt、disable、maxSteps、variant | agents、system、disabled、steps、model: "provider/model#variant" |
| 命令 | command、subtask、单独的 variant | commands、subagent、model#variant |
| MCP | mcp.<name>、enabled | mcp.servers.<name>、disabled |
| Provider | provider、npm、api、options | providers、package: "aisdk:<pkg>"、settings.baseURL(来自 api);options 拆分为 settings、headers 和 body |
| Provider ID | azure-cognitive-services、google-vertex-anthropic | azure、google-vertex |
| 插件 | plugin(字符串或元组) | plugins(字符串或 { package, options }) |
| Skills | skills.paths + skills.urls | 一个 skills 数组 |
| 终端界面配置 | 分层的 tui.json(c) | 一个全局的 ~/.config/opencode/cli.json |
| 目录名 | agent/、command/、plugin/、skill/ | .opencode/agents/、.opencode/commands/、.opencode/plugins/、.opencode/skills/<id>/SKILL.md |
迁移指南里有两条规则,能避免大多数迁移错误:
- 每个条目只用一种格式。 顶层可以混用 v1 和 v2 语法,但在单个 agent、provider、命令或模型条目内部,只能选一种格式。
- 不要让 v1 读取已转换的文件。 两个版本读取相同的路径。一旦把某个文件转成仅 v2 支持的语法,v1 就读不了它。如果打算回滚,最后再做转换。
指南还建议让 OpenCode 自己来做转换。在项目中启动 v2,给它这段提示词:"Migrate my OpenCode configuration, including file-based definitions, from the V1 format to the native V2 format. Preserve its behavior and all unrelated settings."(意思是:把我的 OpenCode 配置,包括基于文件的定义,从 V1 格式迁移到原生 V2 格式,保持其行为和所有无关设置不变。)保留之前先检查 diff。
v2 会忽略的 v1 字段
下列字段只会打印一条警告,不会生效:
| v1 字段 | 替代方式 |
|---|---|
logLevel | OPENCODE_LOG_LEVEL 环境变量 |
server | v2 的 service 和 server 选项 |
顶层的 subagent_depth | experimental.subagent_depth |
compaction.tail_turns、compaction.prune | compaction.keep.tokens |
Provider 的 id、whitelist、blacklist | 没有直接对应的字段,参见 Policies (opens in a new tab) |
agent 级别的 temperature、top_p 和 options 也不再生效。v2 会把它们保留在 agent 的 request.body 里,但不会发送出去。请改为在模型 variant 上设置。
下面这些 v1 字段看起来像旧写法,但仍然有效,也不会出现警告,因为 v2 会替你转换。清理配置时不要删掉它们:
| v1 字段 | v2 将其转换为 |
|---|---|
enabled_providers、disabled_providers | Provider policies |
autoupdate | update(false → "disable","notify" → "notify",true → "auto") |
small_model | agents.title.model |
LSP 配置会保留,但不会运行。 如果你依赖 OpenCode 的 LSP 诊断,请改为给 agent 明确的 lint、类型检查或编译命令(例如写在 AGENTS.md 里)。
第 5 步:升级后才会暴露的行为变化
这些行为变了也不会报任何错,所以最容易让人意外。
v2 不读取 CLAUDE.md
v1 在没有 AGENTS.md 时会回退读取 CLAUDE.md,v2 不会。如果你的项目规则写在 CLAUDE.md 里,v2 启动时就没有这些规则,而且没有任何提示。修复只需一分钟:
# 在每个只有 CLAUDE.md 的仓库里执行
git mv CLAUDE.md AGENTS.mdv1 在 ~/.config/opencode/AGENTS.md 不存在时,还会把 ~/.claude/CLAUDE.md 当作全局规则。v2 同样去掉了这个回退。如果你没有全局的 AGENTS.md,把它复制过去:
cp ~/.claude/CLAUDE.md ~/.config/opencode/AGENTS.md现在 Claude Code 在没有 CLAUDE.md 时会读取 AGENTS.md,所以一个文件仍然可以同时服务两个工具。设置方法见 Claude Code 读取 AGENTS.md。恢复回退行为的功能请求目前在 #53402 (opens in a new tab) 中处于 open 状态。
默认允许访问项目以外的目录
在 v1 中,agent 访问项目外的目录前会先询问。在 v2 中,外部目录访问默认是允许的。要恢复 v1 的行为,在 permissions 中加上这条规则:
{
"permissions": [
{ "action": "external_directory", "resource": "*", "effect": "ask" }
]
}如果你开启了自动批准,或者机器上在仓库之外存有敏感文件,请在第一次使用 v2 之前加上这条规则。
Todo 默认关闭
v1 中 todo 列表默认开启,v2 中默认关闭。用 "experimental": { "todo": true } 重新打开。
整个用户账户共用一个后台服务
v2 会启动一个共享的后台服务器,TUI、Web 界面和桌面应用都连接到它。opencode pair(一次性链接,5 分钟后过期)和后台任务(Ctrl+B)正是靠它实现的。如果你不想要它:
opencode service set disabled true # 停止服务并取消自动启动
opencode service unset disabled # 重新启用
opencode --standalone # 仅本次运行使用一个独立服务器服务被禁用时,配对功能无法使用。该服务也不读取 cli.json,所以终端界面设置只影响终端客户端。
第 6 步:插件、Oh My OpenCode 和 VS Code 扩展
v1 插件无法在 v2 中加载。 插件 API 是全新的。仅仅把配置里的 plugin 改成 plugins 是不够的,每个插件的代码都要移植(参见官方插件迁移指南 (opens in a new tab))。
此前最常见的失败案例是 Oh My OpenCode(oh-my-openagent)。在 OpenCode 2.0.27 上,它的 5.1.32 版本报错 Plugin must export a default definition with an id and an effect or setup function(oh-my-openagent #10089 (opens in a new tab))。修复(#10439 (opens in a new tab))已于 10 月 18 日合并,5.1.38 是第一个包含该修复的 npm 版本。11 月 2 日,维护者确认当前版本可以在 OpenCode 2 上加载,并会显示一条提示,引导用户使用 OmO Native,也就是独立应用 omo。升级 OpenCode 之前,先把 oh-my-openagent 更新到 5.1.38 或更高版本。如果你更想转到 omo,其 README 说明只需运行一次 omo setup,就能带上 provider 密钥、MCP 服务器、skills 和模型选择。如果你还不熟悉这套工具本身,可以先看 OpenCode 使用指南(含 Oh My OpenCode)。
VS Code 扩展报错 Unrecognized flag: --port。 旧版扩展用 opencode --port <port> 启动 CLI,而 v2 移除了这个参数。把扩展更新到 v1.0.0 或更高版本(Marketplace 或 Open VSX)。更新之前,可以在 VS Code 里打开终端,自己运行 opencode(#55219 (opens in a new tab))。
你自己调用服务端的脚本。 v1 的服务端 API 已经移除。请把脚本迁移到 @opencode/client 包,它还能自动找到后台服务。在 shell 中,opencode api 调用的是同一套 API。OPENCODE_SERVER_USERNAME 已不再支持,用户名固定为 opencode。OpenCode GitHub Action 已在 2.2.0 中移除。
升级后的已知问题
以下是 2.x 发布头几周里仍未关闭或刚刚修复的 GitHub issue。修复方法来自各 issue 中维护者、报告者或项目机器人的回复。
| 现象 | 原因 | 解决方法 |
|---|---|---|
| 会话列表里看不到旧会话 | 在非 git 目录(例如 ~)中启动的 v1 会话停留在旧的 global 项目上(#49827 (opens in a new tab)) | 数据仍然在。按 Ctrl+X 再按 L(List all sessions)即可看到。#56322 (opens in a new tab) 从 2.1.4 起修复了导入问题,所以直接升级到当前的 2.x 就能避开这个问题。但它不会修复已经被 2.0.x 导入过的数据库。这种情况下,维护者给出的逐个会话处理的临时方案是 opencode api post /api/session/<id>/move --data '{"directory":"<dir>"}',它会重置每个会话的更新时间。操作前先备份 opencode.db。内置的修复功能目前在 #58846 (opens in a new tab) 中处于 open 状态 |
Unrecognized flag: --port | VS Code 扩展版本过旧 | 把扩展更新到 v1.0.0+ |
插件加载失败 / invalid v2 tui plugin module | 在 v2 上使用 v1 插件,或使用为 2.0/2.1 构建的 v2 TUI 插件(2.2.0 改用 OpenTUI 0.7,2.2.3 又改用 0.8) | 使用为你当前 2.x 版本构建的插件版本、移除插件,或留在 1.19.x |
/variant 提示模型 "does not support any variants" | 对于 OpenAI 兼容 provider 上仅支持开关的推理设置,2.x 不会生成 variant(#51541 (opens in a new tab)) | 没有内置修复。讨论串里有一个配置层面的变通方法:用原始请求 body 自己定义这些 variant。否则就留在 1.19.x |
| 项目规则被忽略 | v2 不读取 CLAUDE.md | 重命名为 AGENTS.md |
| 桌面版或 Web 版中模型和 agent 选择器变灰 | #55567 (opens in a new tab) 报告的是 2.0 之前创建的对话出现此问题。该 issue 因缺少细节已关闭 | OpenCode 机器人建议检查 Settings → Preferences → Show agent,这个选项关闭时会隐藏 agent 选择器 |
opencode upgrade 一直停在 1.x | 有意为之。GitHub 上的 Latest release 仍然是 1.x,而 v1 只会在 1.x 范围内更新 | 运行 opencode upgrade --major |
如何回滚到 1.x
迁移指南没有讲如何回退。下面是稳妥的顺序:
- 卸载 v2。
opencode uninstall --dry-run会显示将要删除的内容。然后运行opencode uninstall,它会删除程序,但保留磁盘上的会话、配置和状态。 - 用固定版本重新安装 v1:
npm install -g opencode-ai@1.19.5,或brew install anomalyco/tap/opencode(不带-v2的 formula)。 - 如果你把某个配置文件转成了仅 v2 支持的语法,从
~/opencode-v1-config-backup恢复它。 - 如果 v2 使用过会话数据库之后 v1 无法读取,就恢复
~/opencode-v1-data-backup。我们没有测试 v1 能否打开被 v2 写入过的数据库,请做好用备份的准备。
安全提示:OpenCode Console 泄露事件
这件事和升级无关,但发生在同一周。10 月 17 日,OpenCode 团队表示,有人未经授权访问了一个正在下线的旧系统(Hacker News 上引用的声明原文 (opens in a new tab))。保存在 Console 工作区里的第三方 provider 密钥 "may have been exposed"(可能已经泄露)。官方建议:在各个 provider 的控制台里吊销并更换这些密钥,并检查近期用量。之后的一篇说明称,受影响的 Console 用户占比为 1.4%,联合创始人 Dax Raad 表示 CLI 和桌面应用没有受到影响(TechCrunch (opens in a new tab))。如果你曾在 Console 中保存过 OpenAI、Anthropic 或其他密钥,无论升级前后,都请轮换它们。
2.0 真正新增了什么
完成升级并不需要了解这些。它们解释了架构为什么要改:
- 后台服务:由 TUI、Web 界面和桌面应用共享,另有
opencode pair用于 Web 访问。 - 后台任务:按
Ctrl+B可把正在运行的 shell 命令或 subagent 放到后台,主 agent 继续工作。 - Code Mode:把 MCP 服务器和 OpenAPI 端点变成函数,agent 可以在一步之内串联调用。MCP 服务器默认使用它。
- 热重载:OpenCode 可以在会话中途为自己写一个插件,并立即使用。
@opencode/sdk和@opencode/client:CLI 背后的代码,可用来构建你自己的客户端。
如果你不是要升级,而是从零挑选一个终端 agent,Codex 使用教程和 Pi Coding Agent 使用教程介绍了最接近的替代方案。
相关指南
- OpenCode 使用指南:快速上手、实战技巧,以及何时搭配 Oh My OpenCode
- Claude Code 读取 AGENTS.md:与 Codex、OpenCode、Cursor 共用一个文件
- Codex 使用教程
- Pi Coding Agent 1.0 使用教程
- DeepSeek Harness 使用教程
- 并行代码 Agent 详解