系列导航:这一篇同时讲 v2.2.3、v2.2.4、v2.2.5 三个版本。上一篇是OpenCode v2.2.1 与 v2.2.2:两天两个版本,一个往前推,一个往回拉,v2.2.0 的总览在OpenCode v2 更新日志 03:v2.2.0 一篇抵十篇——桌面端重写、插件能画界面了。
本文目录
- 一、二十八小时,四个版本
- 二、2.2.3:把 Claude Code 接成供应商
- 三、2.2.3 的另外两条线
- 四、2.2.4:终端跟会话走,产物能发出去
- 五、2.2.5:全是手感
- 六、要动手的地方
- 七、怎么升
- 八、一句话
一、二十八小时,四个版本
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
47 |
|
|
|
|
20 |
|
|
|
|
15 |
|
从 2.2.2 到 2.2.5,四个版本压在 28 小时 34 分里。这篇要拆的后三个,跨度 13 小时 22 分——一天一夜。
三个版本的条目数是 47 → 20 → 15,一路往下掉。这不是内容变少,是在做同一件事的收尾:先一口气把能力加进去,再连着两版把边角磨掉。
节奏快到什么程度?看间隔:15 小时 12 分、7 小时 04 分、6 小时 18 分。到最后两个版本,已经接近"改完就发"。npm 的 latest 现在指向 2.2.5,三天里换了四次。
老规矩记一下:npm 上的包总比 GitHub 的发布说明早两三分钟(2.2.3 是 17:53:57 推包、17:55:45 挂说明)。要核发布时间,以 npm 为准。
二、2.2.3:把 Claude Code 接成供应商
这一版最值得说的是Claude Agent:一个内置供应商,走的不是 API key,而是你本机 Claude Code 的登录。
三个动作:
- 装 Claude Code(它不在 OpenCode 里,得先有本机可执行的文件)。
claude auth login登录。注意不是/login——Claude Code 自己提示的那条是错的,2.2.4 专门修了这个误导。- 在
/connect里选 Claude Agent。选完,模型列表里才多出 Claude 的模型。
装在非标准位置、或者机器上有多个版本,用 OPENCODE_CLAUDE_PATH 指过去。
它到底接了什么:接的是登录态和模型,不是把权重搬进 OpenCode。所以额度算在你自己那边,换机器要重新登录。这点别理解错——省事是真的,但它不是"免费的 Claude"。
2.2.4 又补了三处:引导式安装(从供应商列表选 Claude Agent,把安装、登录、连通性检查串成一条流程)、连接检查、以及从「Needs sign-in」直接恢复,不用退出去重来。
同批还有个反向动作:2.2.4 提高了 DeepSeek V4.1 Flash 在 OpenCode Go 里的额度。一边接外援,一边调自己这边的价,两件事在同一批里做完了。
三、2.2.3 的另外两条线
47 条里除了 Claude Agent,还有两条值得记。
第一条:长会话的渲染开销。 流式回复和长对话现在做的渲染工作少了很多,五个 PR 一起改(#60489、#60481、#60513、#60521 等)。具体是时间线增长、缩放后滚动、高亮、DOM 观察器性能这几处。
这条对天天挂着长会话的人意义最大。之前的体验是:聊到几百条消息,往下滚会卡,输入框打字有延迟。改法不是"优化一下",是把不必要的重渲染按掉。
第二条:桌面端补 2.2.2 的漏。 这一版的说明里有一句很直白:侧栏标签关不掉、新建标签按钮点了没反应,是 2.2.2 引入的回归(#60430、#60436)。反复弹「Session not found」是另一条——删掉的会话在拿到 404 之后直接被清掉,不再重试(#60459)。另外 web 端走 HTTP 时「Open file」也修好了(#60462)。
这就把前面的节奏解释清楚了:2.2.2 那天翻了四处默认值,翻的过程中碰坏了侧栏。15 小时后 2.2.3 补上。发布快,代价是偶发回归;兜底也快,所以还能接受。
顺手几条值得留意的:
- 删会话时会清掉它的持久终端(#60322)。之前删了会话,终端还在后台挂着。
- 嵌套工具的进度不再替换父级
execute那行(#60480)。多级调用时时间线不再错乱。 - 失败时也能拿到半成品:
AIError.partial会保留已经生成的那部分输出(#60477)。以前一出错,前面生成的内容就白费了。 - TUI 在
experimental.media_blob开着时,历史图片改成懒加载(#60116)——只在你点开预览时下载。
四、2.2.4:终端跟会话走,产物能发出去
20 条,改结构的只有两件。
终端从「窗口的」变成「会话的」
以前的终端属于窗口进程,关掉窗口或者服务重启,里面的东西就没了。现在终端是会话的 PTY,由服务端持有:
- 服务重启,连回滚的历史一起恢复,不是给你一个空屏。
- 同一个会话,桌面端、TUI、另一个窗口看到的是同一条终端。
- 可以改名,名字存在服务端,重启还在;你起的名字优先于 shell 自己报的标题。
改名这个接口其实 2.2.3 就加好了(persistentPty.update,带 userTitle 和 persistent-pty.updated 事件),2.2.4 才接到桌面端上。两版配合着来。
artifacts:agent 能发布 HTML
打开 experimental.artifacts 之后,agent 多了四个工具:artifact_create、artifact_read、artifact_update、artifact_delete。托管有两种:内置的本地静态文件服务,或者插件提供的存储。SDK 那边是一整套 client.experimental.artifacts.{providers,list,create,get,update,delete,view},插件侧是 ctx.experimental.artifact.transform(...)。
注意它默认是关的。 默认关通常意味着"还没想清楚"——权限怎么给、能不能公网访问、多个会话的产物怎么隔离,这些在说明里都没写。想试就开,别直接接到生产流程上。
另外这一版还有一条容易被忽略、但很关键的改动:启用的定时任务现在能在 opencode serve 下运行,而且多个服务进程之间做了协调,同一个任务只会触发一次(#60478)。这条听着枯燥,但它意味着定时任务不再依赖你开着桌面端窗口。从"客户端功能"变成"服务端能力",是能不能长期跑的界线。
五、2.2.5:全是手感
15 条,没有新功能。三个方向:
快捷键。Cmd+Opt+O 选 worktree,Cmd+Opt+B 选 base branch(Windows / Linux 用 Ctrl+Alt;base branch 那组 2.2.4 就有,这一版和 worktree 一起摆到了工具提示里),Cmd+Shift+X 切 shell 模式。引用弹窗里按住 Cmd 会把对勾变成发送,或者直接 Cmd+Enter——只发这一条引用和评论,输入框里剩下的内容原样保留。
最后这个设计值得单独夸一句:它解决的是"我想先就这段话回一句,但不想把已经写了一半的提示词搅进去"。以前只能先发出去,或者手工剪切。
压缩按百分比。compaction.buffer 现在可以写 "20%",按模型的上下文窗口留白;写数字仍按 token 算。这件事小,但很准——小窗口模型和大窗口模型用同一个配置,不用每次换模型重算。
配套还修了两处:输入上限比模型窗口更大时,压缩会按窗口封顶(#60660);LiteLLM 报的上下文超限错误,现在会触发压缩,而不是直接终止会话(#60692)。
报错说人话。read 找不到目录时,点名是哪个目录、最近的那个存在的是谁(#60688);edit 找不到 oldString 时,贴出文件里最接近的几行,或者直接告诉你"这处改动已经在了"(#60689)。
还有两处工程上的:MCP 单条 stdio 消息超过 10 MiB 不再被断开(#60694);切模型或续跑时不再把 reasoning 转成普通文本——那个转换会让某些供应商直接报错(#60498)。
六、要动手的地方
82 条变更,真正会让旧代码跑不起来的有两条,都在 2.2.3;2.2.4 和 2.2.5 一条都没有。
① TUI 插件要 OpenTUI 0.8。@opencode/plugin 现在要求 @opentui/core 和 @opentui/solid 至少 0.8.0。0.8 里 ScrollBox 的 wrapper、viewport、content 和滚动条变成了 facade 对象,不再当渲染节点用;自定义 RenderContext 必须实现 clock 和 onAnimationTick。
这条是硬依赖,写完 TUI 插件不升版本会当场编译不过。不写插件的,跟你无关。
② 托管策略拆细。integration.use 现在只管集成账号,MCP、skill、plugin 各有自己的动作:mcp.use、skill.use、plugin.use。旧写法里带前缀的规则会自动换算,但裸的 integration.use 不再顺带覆盖那三者。
个人用户基本碰不到;用 managed policy 统一管的团队要检查一遍规则。
另外 2.2.5 有一处行为变更,不算破坏性但值得知道:调一个叫 bash 的工具,现在会自动按 shell 执行,权限一样,不再报错。插件里真有一个叫 bash 的工具时,仍然用插件那个(#60687)。这是兜底,不是坏事。
七、怎么升
npm 的 latest 已指向 2.2.5。
桌面端打开会提示更新,或去 https://opencode.ai/download 覆盖安装。
写 TUI 插件的,多一步:
想试 artifacts,在 opencode.json 里加:
想用 Claude Agent:装 Claude Code → claude auth login → /connect 里选 Claude Agent。
八、一句话
2.2.3 把别人家的 agent 接进来,2.2.4 把终端和产物变成"能留下来的东西",2.2.5 把每天要做几十次的动作缩短成一次按键。
三天 82 条,只剩两条要改代码。这个比例说明它已经从"能干什么"走到"用得顺不顺",而后者才是每天都要付的时间成本。
互动问题:你更在意"接上 Claude Code 多一个模型来源",还是"终端和产物能活过重启和换设备"?我的答案是后者——前者解决一次选择,后者解决每一天。






