版本:2.0.27 · 发布日期:2026-10-12(公测 2026-07-10)· 文档定位:架构说明 + 关键操作参考
速查:关键结论
| 项目 | 结论 |
|---|---|
| 架构 | 客户端 / 服务端(C/S)。后台服务持有会话、配置、插件、权限、工具执行 |
| 服务本体 | 一个本地 HTTP 服务器,默认 127.0.0.1:49374 |
| 服务提供 | Web UI + REST API(/api/...)+ 事件流(SSE)+ OpenAPI(/openapi.json) |
| 客户端 | TUI、网页、桌面、脚本、自研客户端,全部连接同一服务 |
| 鉴权 | 密码保护。即使本机访问也需先登录 |
| 配对链接 | 一次性、5 分钟有效。浏览器打开后获得 30 天会话 |
| 登录会话 | 30 天。修改服务器密码会使全部会话登出 |
| 旧会话位置 | 保存在本地数据库,升级后仍可访问 |
| 旧会话访问 | TUI 中按 Ctrl+O(最近会话与项目),或 Ctrl+X → L,或 /sessions |
| 设备管理 | 无"按设备撤销"功能,只能改密码全体登出 |
一、架构
1.1 从单进程改为客户端 / 服务端
| V1 | V2 | |
|---|---|---|
| 运行形态 | 单个进程(TUI 自带全部功能) | 一个后台服务 + 多个客户端 |
| 状态归属 | 终端进程 | 后台服务 |
| 多端共享 | 不支持 | 支持,多客户端共享同一批会话 |
| 服务生命周期 | 随终端 | 独立,自动启动、可单独管理 |
V2 中,后台服务持有一切核心状态与能力:
- 会话(sessions)
- 配置(configuration)
- 插件(plugins)
- 权限(permissions)
- 工具执行(tool execution)
客户端只负责界面渲染与输入,属于"瘦客户端"。
1.2 进程拓扑
TUI(终端) ─┐
桌面 App ─┤
网页浏览器 ─┼── HTTP / SSE ──► 后台服务(本地 HTTP 服务器)
程序化客户端 ─┤ ├─ 会话 / 配置 / 插件 / 权限 / 工具执行
自研客户端 ─┘ ├─ REST API + OpenAPI
└─ Web UI
1.3 后台服务的形态
后台服务本质是一个 HTTP 服务器:
- 默认监听地址:
127.0.0.1(仅本机) - 默认端口:
49374(可修改) - 同时对外提供:Web UI、REST API、SSE 事件流、OpenAPI 规范
即:网页版界面不是额外的前端工程,而是由同一个服务在本机原生提供。
1.4 相关包(V2 新增)
| 包 | 作用 |
|---|---|
@opencode/client |
编程客户端,脚本可自动发现本地服务 |
@opencode/codemode |
将 MCP 服务器与 OpenAPI 端点转换为脚本可调用的函数 |
@opencode/sdk |
将同一引擎作为库嵌入到宿主应用中 |
三者的详细介绍、对比与使用示例见《OpenCode 2.0 新增开发包:client / codemode / sdk》。
二、数据与文件位置
| 内容 | 路径 |
|---|---|
| 数据库(会话等持久数据) | ~/.local/share/opencode/opencode.db(可用 OPENCODE_DB 覆盖) |
| 日志 | ~/.local/share/opencode/log/opencode.log |
| 服务注册信息 | ~/.local/state/opencode/service.json |
| 服务私有配置 | ~/.config/opencode/service.json |
| 终端客户端配置 | ~/.config/opencode/cli.json |
说明:
- 会话、项目等持久数据都存放在数据库中,不随客户端关闭而消失。
- 请勿在排障时直接删除或编辑服务文件与数据库,使用
opencode service系列命令进行管理;如需查看,请先备份。
三、升级后原有会话的位置
结论:升级到 V2 后,原有会话仍然保留在本地数据库中,可直接访问。
访问方式(TUI):
| 操作 | 说明 |
|---|---|
Ctrl+O |
打开"最近会话与项目" |
Ctrl+X 然后 L |
列出全部会话 |
/sessions |
命令方式列出会话 |
相关迁移说明:
- 终端客户端配置由 V1 的分层
tui.json(c)迁移为单一全局cli.json(首次启动自动迁移,V1 文件保留)。 - 配置、agents、commands、skills 等受支持的 V1 功能在 V2 中仍可使用。
- 旧会话数据存放在同一数据库中,可在新版本中继续打开。
四、接入方式
| 方式 | 配置 | 适用场景 |
|---|---|---|
| 本机 | 默认 | 浏览器访问 http://127.0.0.1:49374 |
| 局域网 | opencode service set hostname 0.0.0.0 + service start |
同 Wi-Fi 设备直连,不经公网 |
| 远程 | opencode pair --remote |
经 OpenTunnel 公网隧道,端到端加密 |
远程方式补充:
- 首次执行
opencode pair --remote会提示"是否将服务器暴露到公网",需确认。 - 非交互环境需附加
--yes。 - 接受后保持开启,后续执行仅生成新的配对链接。
- 关闭远程:
opencode service set remote false+opencode service start。
五、鉴权与配对
服务默认受密码保护,任何客户端(含本机浏览器)首次访问都需要登录。
5.1 两种登录方式
| 方式 | 凭证 | 有效期 | 复用 |
|---|---|---|---|
| 配对链接 | .../auth/connect/<token> 链接 |
5 分钟 | 一次性,用后作废 |
| 地址 + 密码 | 服务器密码 | 长期 | 可反复使用 |
5.2 配对链接的兑换结果
打开 .../auth/connect/<code> 时,按请求类型返回不同结果:
| 请求类型 | 返回 |
|---|---|
| 浏览器(HTML) | 302 重定向到 Web UI,并写入会话 Cookie |
| 接口请求(JSON) | 返回会话 token,可当作密码使用 |
- 会话 Cookie 名称形如
opencode_session_49374,有效期 30 天。 - 配对链接 5 分钟内有效,且只能使用一次;重复使用返回 401(提示已过期或已使用)。
5.3 使用要点
- 配对链接仅用于首次登录;登录成功后应直接访问基础地址,无需再次输入链接。
- 浏览器会保留 30 天会话 Cookie,关闭浏览器不影响登录状态。
- Cookie 按来源主机区分:
127.0.0.1与远程域名的 Cookie 相互独立,应固定使用同一入口。 - 查看服务器密码:
opencode service get password - 设置服务器密码:
opencode service set password "新密码"
六、服务管理命令
| 命令 | 作用 |
|---|---|
opencode service status |
查看服务状态与地址 |
opencode service start |
启动后台服务 |
opencode service stop |
停止后台服务 |
opencode service restart |
重启后台服务 |
opencode service get [key] |
读取配置 |
opencode service set <key> <value> |
修改配置 |
opencode service unset <key> |
删除配置项 |
opencode service set disabled true |
禁止自动启动共享服务 |
opencode --standalone |
客户端使用自带私有服务,不依赖共享服务 |
opencode --server <url> |
连接指定的服务器 |
常用配置项:
# 监听所有网络接口(供局域网接入) opencode service set hostname 0.0.0.0 # 固定端口 opencode service set port 49374 # 修改服务器密码(会使所有会话登出) opencode service set password "a-long-secret" # 关闭远程访问 opencode service set remote false
注意:修改任意配置都会停止后台服务,需再执行 opencode service start 生效;重启会断开当前所有客户端,但会话数据不会丢失。
七、设备与会话管理
- V2 当前不提供"按设备撤销"功能:设置中只有"Pair device(添加设备)"入口,没有已连接设备列表或单独撤销项,接口层面亦无对应接口。
- 唯一的一键吊销方式是修改服务器密码:修改密码会使全部已登录会话登出。
- 登录会话有效期为 30 天,到期需重新登录。
- 配对链接为一次性且 5 分钟有效,不会长期滞留。
八、自研客户端要点
服务对外暴露标准 HTTP 接口,且项目开源,可据此开发自有客户端。
| 事项 | 说明 |
|---|---|
| 获取凭证 | 请求 /auth/connect/{code} 并接受 JSON,返回 token(当密码使用) |
| 实时事件 | GET /api/event,SSE 流(text/event-stream) |
| 接口契约 | GET /openapi.json(需鉴权),可用 codegen 生成客户端骨架 |
| 终端接入 | /api/pty/{ptyID}/connect + connect-token |
注意事项:
- 事件流为"尽力而为":慢消费者会导致流中断,断线期间事件会丢失。客户端必须实现断线重连,并在重连后全量重新拉取状态;事件仅作增量提示,状态以 REST 为准。
- 带
/api/experimental/*前缀的接口属实验性,可能变更,不宜重度依赖。 - 版本迭代较快,接口契约可能调整。
- 鉴权 Cookie 名称包含端口(如
opencode_session_49374),修改端口后名称随之变化。
九、破坏性变更与升级
升级命令:
opencode upgrade --major
V2 有三处明确的破坏性变更:
- 插件不兼容:1.0 插件无法在 2.0 运行,需按新的插件 API 重写。
- 服务器 API 重写:调用旧服务器 API 的集成需迁移到
@opencode/client。 - 配置文件迁移:
tui.json迁移为全局cli.json(首次启动自动迁移)。
其他需要注意的变更:
- V2 仅读取
AGENTS.md,不再回退到CLAUDE.md。 compaction.prune被忽略,并产生告警。
十、常用 TUI 快捷键
以下 leader 键为 Ctrl+X。
| 快捷键 | 作用 |
|---|---|
Ctrl+O |
打开最近会话与项目 |
Ctrl+X 然后 N |
新建会话 |
Ctrl+X 然后 L |
列出全部会话 |
Ctrl+X 然后 M |
选择模型 |
Ctrl+X 然后 A |
选择 agent |
Ctrl+X 然后 U |
撤销上一条消息及其后续操作 |
Ctrl+X 然后 Enter |
将提示排队、稍后执行 |
Ctrl+Tab / Ctrl+Shift+Tab |
切换会话标签 |
Ctrl+X 然后 W |
关闭当前标签 |
Ctrl+Shift+T |
重新打开最近关闭的标签 |
Ctrl+I |
会话标签历史前进 |
Ctrl+P |
打开命令面板 |
F2 / Shift+F2 |
循环切换最近使用的模型 |
Shift+Tab |
循环切换 agent |
Ctrl+B |
将前台任务移至后台 |
参考
- 官方发布说明:OpenCode 2.0 launch note(Anomaly,2026-10-12)
- 更新日志:
opencode.ai/changelog(v2.0.27,2026-10-12) - V2 文档:
opencode.ai/v2/docs/
文章评论