CLI模块架构差异
2026/4/27大约 2 分钟
CLI模块架构差异
1. 结论先行
只看 CLI 模块时,claude-code-rev 和 opencode 的核心差异是:
claude-code-rev的 CLI 更像“运行模式分流器”opencode的 CLI 更像“统一命令壳”
前者把 CLI 本身做成了 runtime 入口调度层,后者把 CLI 做成了统一命令注册和启动前准备层。
2. Claude Code:CLI 是启动分流前哨
2.1 关键路径
src/bootstrap-entry.tssrc/entrypoints/cli.tsxsrc/main.tsxsrc/commands.ts
2.2 结构特点
Claude Code 的最外层入口很薄:
bootstrap-entry.ts先补 bootstrap 宏环境。- 然后导入
entrypoints/cli.tsx。 cli.tsx并不只是普通参数解析器,而是一个大的运行模式分流入口。
它在真正进入主程序之前,会尽早识别并分流多种 fast path,例如:
--version--help- bridge / daemon
- background session
- MCP server
- headless / print
- 其他不需要完整 REPL 装配的路径
这意味着 Claude Code 的 CLI 不是单纯的“命令解析层”,而是:
在最靠前的位置决定本次进程该走哪条运行模式。
2.3 设计后果
- CLI 层承载了大量模式切换逻辑。
- 有些路径会在完整 REPL 和主程序装配之前就提前返回。
- 为了追求启动快、模式多、入口统一,CLI 层本身会比较厚。
3. Opencode:CLI 是统一命令外壳
3.1 关键路径
packages/opencode/src/index.tspackages/opencode/src/cli/cmd/*
3.2 结构特点
opencode 的 CLI 明显更接近传统命令行架构:
src/index.ts使用yargs集中注册命令。- 在统一 middleware 里做日志初始化、环境变量设置、数据库迁移等启动前准备。
- 然后把控制权交给各自命令模块,例如:
runservesessionagentmcpworkspace-serve
这里 CLI 层的重点是:
- 参数解析
- 命令注册
- 通用初始化
- 错误格式化与退出
也就是说,opencode 的 CLI 更像:
一个统一的命令入口壳,把请求分发给后续模块。
3.3 设计后果
- CLI 主入口集中、规整、可读性强。
- 命令实现边界更清楚,分散在
cli/cmd/。 - CLI 本身不承担太多 agent runtime 细节。
4. 两者最本质的差异
4.1 职责边界不同
claude-code-rev:CLI 是运行模式选择层opencode:CLI 是命令注册与初始化层
4.2 启动策略不同
claude-code-rev更强调 fast path 和 lazy path,尽量在最前面就分流opencode更强调统一初始化和统一命令框架
4.3 和后端 runtime 的耦合程度不同
claude-code-rev的 CLI 更贴近 runtime 主循环opencode的 CLI 与 session/tool/provider/server 等核心模块之间边界更明显
5. 用一句话总结
如果把二者压成一句话:
claude-code-rev:CLI 是 agent runtime 的总闸门opencode:CLI 是平台命令系统的总入口