本节摘要:OpenCode 让人困惑的一点是它有八种形态——终端 TUI、桌面应用、浏览器 Web、无头 HTTP 服务器、嵌入式 SDK、MCP 服务器、ACP 服务、GitHub CI。这不是八套代码,而是八个入口共享一个内核。本节先用一张表给你全景,然后给你一个选型框架——给定需求,该用哪种形态?把这个判断练熟,你就不会被「八种壳」绕晕。
先看全貌。八种入口的定位与适合谁:
| 形态 | 一句话定位 | 适合谁 |
|---|---|---|
| 交互式 TUI(默认) | 全屏终端对话界面 | 日常编码、坐在终端前的人 |
| 非交互式 run | 一条命令拿一次响应 | 脚本化、自动化、CI |
| 无头 serve | 起一个 HTTP 服务被调 | 集成进别的应用、Web/Desktop 后端 |
| 桌面应用 | 独立窗口的图形界面 | 偏好图形界面、不熟终端的用户 |
| 浏览器 Web | 浏览器里用 | 远程访问、跨设备 |
| 嵌入式 SDK | 进程内复用内核 | 把内核嵌进自己程序的开发者 |
| MCP 服务器 | 把 OpenCode 暴露给别的 Agent | 让别的 Agent 用它的能力 |
| ACP / GitHub CI | 协议服务 / CI 集成 | 自动化流水线、PR 审查 |
第一次接触,你只需要关心前三种——它们覆盖了绝大多数日常场景。桌面、Web、SDK、MCP、ACP/CI 是进阶或特定场景的形态。
记住三个判断维度,你就能为绝大多数需求选对形态:
是否需要人在回路里持续对话? │ ├─ 是 ──► 交互式 TUI(默认) 或 桌面/Web │ └─ 否(自动化/一次性) │ ├─ 只想要一次响应 ──► 非交互式 run │ └─ 想被别的程序反复调 ──► 无头 serve │ ├─ 想嵌进自己进程 ──► 嵌入式 SDK │ └─ 想让别的 Agent 用 ──► MCP 服务器
用具体场景感受这个框架:
⚠️ 别什么需求都先起 TUI。TUI 是为人机对话设计的,一旦你想自动化,它的交互式特性反而碍事——它会占据终端、等键盘输入、不适合被脚本调用。记住:自动化场景用 run,被调用场景用 serve,被嵌入场景用 SDK,被别的 Agent 用是 MCP server。
这一节列了八种形态,但有一个关键认知必须钉死:它们的内核完全相同。TUI 和 run 不是两个产品,serve 和 SDK 也不是——它们是同一个内核的八种「壳」。
共享内核 (模式/协议/服务端/领域核心/LLM 抽象) │ ├─► TUI 壳 ├─► run 壳 ├─► serve 壳 ├─► 桌面壳 ├─► Web 壳 ├─► SDK 壳 ├─► MCP 壳 └─► ACP/CI 壳
这意味着:不管你用哪种形态,会话循环、工具系统、上下文管理、权限模型都是同一套。你在一个形态里学的知识,完全迁移到其他形态。这就是为什么本教程大部分章节(第 4~9 章)讲内核,不分形态——因为内核是共享的。
本节只给你选型框架,没讲每种形态的内部机制。后面三节会挑三个最值得讲的深入:
桌面、Web、MCP server、ACP/CI 的细节散落在更后面章节(第 10 章讲 MCP,第 13 章讲 SDK 与集成)。
选型清楚了,下一节讲「安装」背后的工程——启动脚本怎么按平台挑对二进制。