React 界面收下任务
渲染层只拿到明确开放的桌面能力和 coordinator 端口。
X-Ray · Grok Bot 0.24.0
Grok Bot 把一个长期存在的 AI 队友放进每位用户的云端电脑。Mac App 负责身份、界面、连接与人工接管,云端 Host 负责 Agent loop、工具、会话和后台任务。本文现已补到本机 0.24.0 版本。
grok-4.5。包里已有 Grok 4.6 支持,后端返回的 responseInfo.model 才能说明某一轮实际解析成了哪个模型。
com.anysphere.sand一条消息怎么走
这张图把本机 App、云端电脑和模型服务放在同一条因果线上。它也解释了为何 Bot 能离线工作,以及本机权限为何另算一层。
渲染层只拿到明确开放的桌面能力和 coordinator 端口。
它处理 Cursor 登录、附件、设置、升级和本机权限。
主进程把一次性 MessagePort 交给界面,连接断开后重新收敛。
后端创建或找到共享云端电脑,再返回网关地址和短期凭据。
Host 组装上下文、工具和模型请求,默认选择 Grok 4.5。
插件、浏览器、文件、终端和获准的本机动作完成实际工作。
执行主体在云端 Host。官方 FAQ 也确认后台 turn 与 routine 不依赖笔记本保持开启。
每个 Bot 有独立角色、会话和屏幕,共享文件、浏览器登录与云端凭据。
云端工具默认可用,本机命令另走反向通道和审批设置,默认应当逐次询问。
0.24.0 最新复核
我重新拆了当前安装包。0.24.0 的第一方 bundle 没有公开源码映射,所以这次按压缩文件中的稳定字符串和字节位置复核。能确认的是客户端怎样选、怎样发、怎样接收结果。
grok-4.5,参数为 effort high、fast true 和 maxMode true。这只说明没有其他配置命中时客户端会请求什么,不能单凭这一行断定你账号里的每次对话都跑在 Grok 4.5。
显式会话模型、环境变量、实验设置与保存的默认值都排在它前面。
兼容分支和模型选择实验都已出现 4.6,内置兜底尚未跟着改成 4.6。
摘要流程可以走独立模型,不应拿它代替主对话模型来判断一次 turn。
电脑操作的后备选择关闭 thinking、使用 low effort。浏览器分支还受功能配置控制。
0.24.0 的周额度界面拿到使用百分比、下次重置时间、是否仍有额度和套餐标签。
当前包里没有记录一个固定的每周 token 总数,也没有把周额度百分比换算成 token 的公式。
GetSandUsageStatusResponse 返回 usage_percent、next_reset_timestamp_utc 与额度状态,没有 raw token 字段。usedCents 和 limitCents,它是金额口径。GetTokenUsage RPC 定义,渲染层没有消费它,也找不到 Grok Bot 周额度的调用链。官方 FAQ 也把这套共享周额度写成百分比。不同产品和任务消耗的计算量不同,因此不能从百分比可靠倒推一个固定 token 数。
SAND_AGENT_MODEL、实验或已保存默认值、内置 Grok 4.5 兜底。请求会带上 requestedModel,响应再给出已解析模型。包内证据位于 host-main.cjs 字节 3,729,286、5,745,415、10,944,249 与 11,698,298 附近。
源码证据层
下面的架构证据来自首次拆解的 0.16.0 安装包。它保留了 source map,因此可以回到源码文件和行号。0.24.0 的模型与额度补充来自当前已签名安装包,证据按压缩 bundle 的字节位置记录。
BrowserWindow 开启 contextIsolation,关闭 nodeIntegration。preload 只向页面公开 desktop 与 coordinatorPort,聊天界面通过 IPC 和 MessagePort 请求能力。
src/electron-main/main.cts 第 693 至 720 行src/electron-preload/preload.cts 第 142 至 161 行、第 806 至 815 行
BrokeredHostConnector 通过 GrokBotService.ensureSandBox 找到或创建云端电脑。返回值包含网关 URL、每 Box bearer、网络路由 token 和 VNC 地址。
src/electron-main/box/box-host-connector.ts 第 1 至 25 行、第 122 至 213 行
Host 网关提供 /api/<method>、/events、/health 等入口。敏感命令和事件流在配置 token 时必须携带 bearer,比较过程使用 timingSafeEqual。本机 shell 与 WebAuthn 反向通道缺少 token 会直接返回 401。
src/host/gateway-server.ts 第 216 至 227 行、第 583 至 725 行
SandHost.start 按依赖顺序启动插件,再装配 roster、runner、审批、MCP、持久会话和后台任务。用户发消息以后,turn-runtime 调用 runner,runner 负责模型流和工具循环。
src/host/sand-host.ts 第 140 至 270 行src/host/extensions/transcript/turn-runtime.ts 第 394 至 512 行
0.16.0 包内的默认选择写成 grok-4.5、maxMode true、effort high 和 fast true。设置、环境变量、实验配置和特定子 Agent 可以改写选择。0.24.0 仍保留同一兜底,也加入了 Grok 4.6 的兼容与选择入口。
src/shared/agents/agent-model.ts 第 10 至 38 行src/host/extensions/inference/cursor-session.ts 第 58 至 86 行、第 166 至 209 行src/shared/node/cursor-backend/cursor-inference.ts 第 413 至 485 行
每个 Agent 的数据目录下有 store.db 和对话 blob。SQLite 使用 WAL,并在快照前检查 checkpoint,避免复制一个落后的主库。根目录可以由运行环境重定位,所以桌面端与云端 Host 可以共用同一套路径规则。
src/host/extensions/session/session-paths.ts 第 10 至 51 行src/host/storage/store-db.ts 第 47 至 109 行
可信边界
我的判断
“Bot 有自己的电脑”这句话在包内有完整实现对应。桌面端没有把模型和工具都塞进一个聊天窗口,它连接一台长期存在的 Linux Box,Box 里有网关、Agent runner、工具、SQLite、自动任务和独立更新。Grok 4.5 是客户端兜底请求,Grok 4.6 已进入选择链,最终解析仍由账号配置与后端响应共同决定。
这也给出了最实用的判断标准。把它当成能操作真实系统的远程同事,先给一个有明确结果的一次性任务,把外部副作用留在审批后,再把跑顺的过程保存成 Skill 或 routine。
来源
/Applications/Grok Bot.app · 版本 0.24.0 · 主程序 SHA-256 c958d80cdd126cb95f1d60ef6bf451037a7569994a75a6c06b2863ae0781250a · app.asar SHA-256 41f7d5008db4edcb198d9e466c9c1e776bb8a75a7651951257ff9a4f885a4540
本次检查使用 PR #174 head c349718d58d171c8721bbaac12b7ee0a01a51639 的静态应用分析、证据和双层解释规则。