
OpenMausBot架构深度解析一个harness server如何统一Claude、Codex、Grok的协议流【免费下载链接】OpenMausBotOpen Source Alternative to Grok Bot with a virtual machine that bots can use项目地址: https://gitcode.com/gh_mirrors/op/OpenMausBotOpenMausBot 是一款开源的 Grok Bot 替代品它的核心是一个harness server协议统一层无论你给 Bot 接的是 Claude Code、Codex 还是 Grok CLI服务端看到的都是同一套事件流和工具契约。对新手来说理解这个统一层就理解了整个项目 80% 的架构。为什么需要 harness server三大引擎的原生协议完全不同引擎原生交互方式会话恢复机制Claude CodeCLI 进程 stream-jsonstdin 写提示词--resume sessionId游标CodexCLI 进程 自有 JSON 事件流会话 ID 续接GrokCLI / ACPAgent Client Protocol原生会话上下文如果每个前端都直接对接一种引擎UI、审批、日志、MCP 工具挂载就得写三遍。OpenMausBot 的做法是把所有引擎压平进同一个对话运行时即 harness server 中的统一契约。核心契约定义在 server/contracts.ts其中ProviderAdapter接口只要求每种引擎实现 5 个能力sendTurn()发送一轮对话携带文本、图片、系统提示、MCP 集成描述符interruptTurn()打断当前回合respondToRequest()回答是否允许执行这类审批请求steer()在回合运行中追加用户输入可选能力onEvent()订阅统一事件流引擎的差异全部被隔离在各自的 driver 文件里互不干扰。三大协议流同一份契约三种实现1️⃣ Claude 流stream-json 双向管道Claude 驱动server/drivers/claude.ts为每一轮启动一个 CLI 进程通过 stdin 写入提示词用 stream-json 双向通信跨轮次对话靠--resume游标续接。它还会把 Bot 的集成云电脑、Composio 连接应用、手机工具转成 MCP server 挂到 CLI 上让 Claude 能直接调用。2️⃣ Codex 流自读 config.tomlCodex 驱动server/drivers/codex.ts有自己的目录解析server/drivers/codex-catalog.ts、设备授权流server/drivers/codex-device-auth.ts和身份模型。它直接读取用户本地的config.tomlharness 不重复注入 MCP 配置只负责把统一事件转发出去。3️⃣ Grok 流CLI ACP 双通道Grok 有两条路径原生 CLI 驱动server/drivers/grok.ts以及走 ACP 协议的 agent 版server/drivers/acp/grok.ts。ACP 是 Agent Client ProtocolOpenMausBot 把 Gemini、Kimi、Cursor、Qwen 等 10 余种引擎也统一挂在这套 ACP 桥接下见 server/drivers/acp/ 目录。所有内置驱动在一个静态数组中注册server/drivers/builtIn.ts——注释里写得直白添加一个驱动 写一个drivers/x.ts然后追加进数组。事件总线把 N 条协议流合成一条统一后的事件流由 harness 的 EventBus 负责汇聚每个引擎实例的adapter.onEvent()回调把事件交给总线总线给每个事件盖上providerInstanceId时间戳事件只能来自自己的驱动跨驱动事件直接丢弃事件先脱敏redactSecrets再落盘到每个线程的canonical NDJSON 日志threadId.ndjson这就是排查问题时可以整份贴进 issue 的文件最后分发给 SSE 端点和消息存储UI 实时刷新。实例的生命周期则由 ProviderRegistry 管理配置项 → 活实例。设计上有两个亮点值得新手注意影子快照shadow snapshot未知驱动或配置解析失败不会导致启动崩溃而是降级为不可用快照——旧配置在新版本上能安全降级按实例隔离销毁某个引擎的配置变更只会重建它自己不影响同机的其他引擎。从事件到界面审批与能力门控统一事件流让执行前审批变成一份全局体验任何引擎想执行危险操作都走同一张审批卡片用户点击允许/拒绝后harness 调用respondToRequest()把决定送回对应引擎。另一个新手容易忽略的设计是能力门控capabilities 字段见 server/contracts.ts界面永远不会展示引擎转不动的旋钮。例如某驱动不支持queueing输入框就不会开放中途插话不支持图片输入粘贴图片的入口自动消失。这套规则让多引擎混用的 Bot 不会出现说了有电脑却找不到工具的尴尬。想继续深入推荐阅读路径 目标入口文件理解统一契约server/contracts.ts看事件如何汇聚server/harness/bus.ts、server/harness/http.ts看实例注册与降级server/harness/registry.ts学习写一个驱动server/drivers/claude.ts最完整范例学习 ACP 桥接server/drivers/acp/重试与会话空闲策略server/drivers/retry.ts、server/drivers/session-idle.ts会话恢复与重建server/resume-recovery.ts多引擎行为验证server/harness/bus.test.ts、server/drivers/codex.test.ts一句话总结harness server 用一份契约contracts 一个总线bus 一个注册表registry把 Claude、Codex、Grok 乃至十余种 ACP 引擎统一成了同一个可审批、可日志化、可热插拔的事件流——这正是 OpenMausBot 能同时兼容这么多引擎还能让 Bot 直接使用虚拟机的架构底座。【免费下载链接】OpenMausBotOpen Source Alternative to Grok Bot with a virtual machine that bots can use项目地址: https://gitcode.com/gh_mirrors/op/OpenMausBot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考