
痛点与破局
你有没有过这种体验:白天在 Cursor 里写代码,切到 Claude Code 处理复杂任务,又想用 Codex 试试新模型——每换一个 AI 后端,就要换一套工具、重学一套交互、重配一遍 MCP 工具。工具之间的墙,正在消耗你的生产力。
同时,作为一名对桌面应用架构好奇的开发者,你是否也想扒开那些闭源 Electron 应用的外壳,看看里面的 Electron 主进程、沙箱执行、协议层到底是怎么搭起来的?
今天介绍的项目一次满足两个愿望:Grok Bot 0.18 Reconstructed——一个针对公开发布的 Grok Bot 0.18.0 macOS 应用做的源码级重构项目。它不仅用可读的 TypeScript 重建了应用的运行时边界,还额外加上了推理路由(Inference Router):让 Grok Bot 的对话可以在 Cursor、Claude Code、Codex、OpenRouter 之间自由切换。注意:这是一个逆向研究项目,不是官方发布。
核心功能深挖
1. 推理路由:四个后端,一套 UI
打开 Settings -> Router,即可选择新对话使用的推理后端:
| Provider | 认证方式 | 工具支持 |
|---|---|---|
| Cursor | 现有 Grok Bot/Cursor 会话 | 原生 Grok Bot 工具与插件 |
| Claude Code | 现有 Claude Code 登录 | 路由的 Grok Bot MCP 工具 |
| Codex | 现有本地 ChatGPT/Codex 登录 | 直接 Responses 传输 + Grok Bot 工具 |
| OpenRouter | 通过桌面 secrets bridge 保存的 API key | Grok Bot 工具执行循环 |
亮点细节:
- Cursor 是默认后端;
- Claude Code 和 Codex 不需要单独的 API key,只要本地客户端已登录即可复用认证;
- 路由切换时保留流式响应、thinking 状态、reactions、富插件 mention 以及 MCP 工具执行——体验无缝;
- Usage & Billing 页面展示本地记录的请求与 token 统计(注意:这只是活动记录,不是服务商账单)。
2. 本地 Docker 沙箱:不连远程 box
Router 页面还有一个 Use local Docker VM 开关。开启后,Grok Bot 会在本地自有容器中运行 box host 和执行 daemon,替代远程沙箱。容器特性:
- 仅绑定 loopback 端口;
- 以只读方式挂载内容寻址的 host 与 daemon 产物;
- 需要时复用用户已有的 provider 认证;
- coordinator 连接前会先验证容器;
- 通过同一套 settings 生命周期停止或替换。
前提:需要 Docker Desktop 或兼容的本地 Docker daemon。远程模式仍是默认。
3. 混合式架构重构:源码 + 锁定渲染器
为什么前端不重写?作者解释得很诚实:官方发布包里只有压缩混淆后的 JS/CSS chunk,没有原始 React 组件、注释和设计系统源码,周末项目重写整个前端不现实。所以采用混合策略:
- 应用运行时由
source/下的可读源码编译; - 保留官方精修渲染器作为 UI 基线;
- 用一个窄范围的确定性 transform 注入重构的 Router 设置 UI;
- 原始与补丁后的渲染器 chunk hash 均被记录和校验;
- 成品使用独立 bundle identifier 和 ad-hoc 签名,绝不覆盖机器上已装的官方应用。
官方安装器以 Git LFS 归档保存,且校验 SHA-256:
| 平台 | 文件 | SHA-256 |
|---|---|---|
| macOS arm64 | macos-arm64/Grok_Bot_0.18.0.dmg | a253ccd8aab01e083f9812a0264354c5034d8ba7f0610bbb557e82ae77d203eb |
| Windows x64 | windows-x64/Grok_Bot_0.18.0_Setup.exe | 464079a15ef5fa8b61ccea8fffcc78f63cfcf6df65fb0ad5e725d8b95f7e437e |
4. 整体架构一览
polished shipped renderer
│
│ desktop preload / RPC
▼
Electron main
│
├── settings, secrets, auth and plugin lifecycle
├── remote box connector
└── owned local Docker connector
│
▼
coordinator + host
│
inference router
┌───────────┼───────────┐
Cursor Claude Codex / OpenRouter
│
Grok Bot MCP tools
主要源码区域:
source/electron-main/— 桌面生命周期、settings、auth、box 连接器、coordinator 所有权与 RPC 处理;source/electron-preload/— 暴露给 UI 的窄信任桥;source/host/— 推理、工具、MCP、settings 与 turn 执行;source/node-agent-coordinator/— 转录路由、流式活动、reactions 与路由 MCP 桥;source/shared/— 共享契约、协议与 provider 辅助;frontend/— 可读的 React/TypeScript 渲染器重构与设计工作区;scripts/与tests/— 构建链与回归测试。
实战演示
环境要求:macOS Apple Silicon、Node.js 26.5.x、Xcode Command Line Tools、Git LFS;本地沙箱需 Docker Desktop;路由 Claude Code / Codex 需对应的本地登录。
从克隆到启动:
git clone <your-repository-url>
cd grok-bot-0.18-reconstructed
git lfs install
git lfs pull
npm ci
npm run bootstrap
npm run check
npm run package
open "dist/Grok Bot 0.18 Reconstructed.app"
说明几个关键步骤:
npm run bootstrap优先使用 Git LFS 保存的 0.18.0 DMG;若归档缺失则回退到公开 URL;也可用GROK_BOT_018_APP指向已有应用副本。Bootstrap 会校验 DMG 和app.asar、缓存匹配的 Electron 运行时。npm run package编译重构运行时、应用渲染器 transform、创建 app bundle、赋予独立标识、ad-hoc 签名并验证,输出到:
dist/Grok Bot 0.18 Reconstructed.app
常用开发命令:
npm test # 聚焦回归测试
npm run typecheck # 渲染器 TypeScript
npm run source:typecheck # 运行时 TypeScript
npm run frontend:build # 构建可读渲染器重构
npm run package # 构建、签名并验证 macOS 应用
npm run verify # 验证已打包应用
npm run smoke # 有界原生冒烟检查
npm run publication:check # 证明全新历史导出无损
避坑指南与总结
几个必须知道的坑:
- 仅锁定单一版本:只针对 0.18.0 macOS/arm64,不承诺兼容未来的 Grok Bot 版本;
- 依赖外部 provider 会话:Cursor/Claude Code/Codex 的登录态由外部客户端管理,会话失效会影响路由;
- 非官方项目:这是逆向重构,模块名和边界可能与原始源码不同;
- 隐私方面,重构包默认关闭上游 Sentry 与遥测、禁用上游更新器,但显式提供的环境配置仍会被尊重;
frontend/只是部分重构与设计工作区,别误以为是完整前端源码。
适合谁:想研究 Electron 桌面应用逆向与架构分层(main/preload/host/coordinator)的开发者;想在 Grok Bot UI 里统一使用多个推理后端的重度 AI 编程用户;对 MCP 工具路由感兴趣的人。不适合:追求稳定生产工具链的团队,或非 Apple Silicon 用户。
一句话总结:这是一个把“逆向研究”和“实用工具”结合得相当漂亮的项目——源码可读、hash 可验证、架构文档齐全,值得一读。
GitHub开源地址:https://github.com/b-nnett/grok-bot-0.18-reconstructed
夜雨聆风