深圳那场 Grok Bot 线下局,有人在把 Bot 往 StackChan 上接,桌面小人跟着说话、转头,挺好玩。
我自己桌上早就有一具差不多的身体:iPhone 吸在 DockKit 云台上,能转头、能看人。当时就想,这不就是给 Bot 用的吗。回来开了工。
现在这具身体能对着手机说话、它转头、它换脸、它把听到的话写回 Grok 对话框。手指还能在屏幕上搓它的脸。拍完、转完默认只出一声短的「拍好了」,长内容留在对话框里。
仓库:github.com/rowline/grokbot-body
它是什么#
Grok Bot 里某一个 Bot 的身体。大脑还是那个 Bot,不是另开一张嘴。
手机只干三件事:
- 脸:白球槽眼。变形跟 bloub 一样,径向轮廓、指数 ease-out,身体不过冲。思考绕彩带,出错变成感叹号。
- 耳朵:系统听写。默认按住球体说话,松手发出去。按住和搓脸是同一根手指:不太动就是说话,拖了就是边说边搓。
- 嘴:把 Bot 要说的话读出来。想用 Grok 音色,自己在绑定页贴 xAI 密钥;不贴就用系统声。密钥留在手机,不过云。
云台用 Belkin 这类 DockKit 支架就行,比如 Auto-Tracking Stand Pro。没有云台也能听、说、换脸、拍照,只是不能转头。
手机出站连你自己部署的 Cloudflare Worker。运行时不需要家里再开一台 Mac。
有一件事要先说清楚:没有公共云通道。 每人部署自己的 Worker,再把地址填进 App 绑定页最上栏「云」。别人的 Worker 别用,也别让别人用你的。

怎么玩#
装好之后,日常就是按住球体说话。下面先写每天怎么用,第一次怎么装放在后面。
按住说话#
默认「按住说话」。按住球体开口,松手发出去。办公室用这个,旁边闲聊不会收进去。
安静环境可以在绑定页切到「一直听」——周围说话也会收进去。还可以切「按住录像」,松手存到相册。
按住和搓脸是同一根手指:不太动就是说话,拖了就是边说边搓。

开口之后大概是这样:
- 说「帮我拍一张桌上」:屏幕闪一下,露出缩略图,身体说「拍好了」。图回到 Grok 对话框,不落盘。
- 说「往左转」「转圈」「点头」:支架当场动,不等 Bot。纯指令不交给 Bot。
- 说「看一下窗户再拍一张」:电机会先转,剩下的仍发给 Bot。
- 电脑里打字让它拍照:只是在调工具,不等于在听。它拍完可能出一声「拍好了」,然后还是没在听,除非门铃接通,或它自己又
wait_for_speech。 - 它要讲很长一段:手机只念一两句要点。全文写在 Grok 对话框,手机屏幕底下也能往上滑看完。
绑定页「任务完成出声」默认开。拍完、转完、录像完只说一句短的,比如「拍好了」「点头完成」「录像好了」。关了就不出声。长内容、报告、完成后的全文只写在对话框,不往外念。
支架当场动#
吸上云台默认人脸追踪。对着手机说这些,支架当场动:
左转、右转、转圈、点头、摇头、抬头、低头、跟着我、别跟着、停下
纯指令不交给 Bot。句子里夹了别的话,电机会动,剩下的仍发给 Bot。

没有云台也能听、说、换脸、拍照,只是上面这些转头不会发生。
拍照和录像#
Bot 可以要一张 JPEG,绑定页可关。拍照会闪一下并露出缩略图。图只走这一次工具返回。
录像 1 到 12 秒,绑定页可关。手机上切「按住录像」也能自己录,松手进相册。Bot 录的也会存一份到相册。过云的片子暂存在 Durable Object 里,每具身体只留最近 4 段。
搓脸、发晕、换脸#
手指在球上拖一拖,眼睛看过来,身体被按扁。松手用同样的 ease-out 缓回去,不会弹。

眼睛会跟着手机倾斜。轻轻晃一下它会愣住;故意连着用力晃会发晕,大约两秒后自己好。
绑定页「脸」可以切 Orb(白球槽眼)或暗球(黑球白眼)。思考绕彩带,出错变成感叹号,还能变成六边形。

屏幕上这几行字#
左上角「在听 / 在说」表示身体正在听或正在读。
听到的原话会显示在屏幕底下,长句可以往上滑看完:
- 已交给 Bot:正在听,或门铃已经按过
- 已记下 · 现在没在听:话到云了,但没人在等,门铃也还没接通
听到的原话和它的回答,会写进 Grok Bot 对话框,电脑这边能看见。
认领成功后它应自己循环听。wait_for_speech 一次最多约 18 秒,没人说话也必须马上再调。这是它听人说话的唯一入口。
电脑里打字让它拍照、转头,只是在调工具,不等于在听。屏幕若停在「已记下 · 现在没在听」,对着手机再说话会去按门铃。门铃没接通,话只会落到云上,Bot 不会醒来。
第一次怎么装#
先备齐三样:
- 能加 Custom Connector 的 Grok Bot
- 一部 iPhone(吸上 DockKit 云台更好)
- 一个 Cloudflare 账号
做完一次,日常就是按住球体说话。
1. 自己跑云#
把仓库拉下来,进 cloud/:
cd cloud
npm install
npm test
npx wrangler deploy
记下部署后的地址,形如 https://<worker名>.<你的子域>.workers.dev。这就是身体的云。
本地调试可以 npx wrangler dev,手机绑定页填 http://<这台 Mac 的局域网 IP>:8787。真机日常用 workers.dev,不要走家里的网关。
2. 装 App,填云地址#
Xcode 打开 ios/GrokBotBody.xcodeproj,Team 换成你的 Apple ID,装到真机。第一次允许相机、麦克风、相册。
打开绑定页,最上栏「云」填上一步的 Worker 地址,点「保存并重连」。不填就不连,屏幕会写「未填云地址」。
连上之后,屏幕下方出现 6 位配对码,十分钟内有效。
3. 把 Connector 贴进 Grok#
绑定页有一栏「连接」,复制那条带密钥的地址,形如:
https://<你的worker>/mcp/<密钥>
到 Grok Bot → Settings → Plugins → Custom Connector:
- Name:GrokBot Body(随便起)
- Server URL:贴上面那条,只贴一次
不要贴不带密钥的 /mcp。那条旧地址 Bot 忘了 token 就调不动。带密钥的地址认领之后,工具自己找这具身体。
Connector 是账号级的,你名下所有 Bot 都看得到。真正的锁是配对码,加上连接地址里的密钥。
4. 认领#
打开要当灵魂的那个 Bot,对它说:
用配对码 482193 认领身体。认领后立刻 wait_for_speech。
把 482193 换成手机上那 6 位。手机屏幕变成「已绑定 · …」就对了。
解绑:绑定页点「解绑」,或让已绑定的 Bot 调用 unbind_body。门铃网址还留着,重绑不用重设,除非点了「关掉门铃」。
5. 门铃设一次#
Grok 只有正在跑回合时才会调工具。它没在听的时候,你对着手机说话,话会到云上,但 Bot 不会醒来。所以要给它装个门铃。这一步只做一次。
电脑打开 https://<你的worker>/setup,或看手机绑定页「门铃」:
- 打开这个 Bot → 自动化 → 新建
- 触发选「当 webhook 响起」
- 说明贴这段:
身体有人说话了。立刻 wait_for_speech。把听到的原话写进对话框。开口最多一两句要点,长文和完成后的全文只写对话框。然后再听。不要编。
- 打开触发卡片,把网址和密钥贴回 setup 页或手机。密钥只在电脑上能看见。
- setup 页要填手机上的 6 位码:认领前是配对码,认领后是门铃码
保存后绑定页显示「门铃 · 已接通」。
它能干什么#
| 能力 | 说明 |
|---|---|
| 听和说 | 人对着手机说,Bot 用嘴回答。开口只说短句 |
| 换脸 | 思考、高兴、出错、六边形 |
| 搓脸 | 手指按在屏幕上,眼睛跟着,身体被按扁 |
| 转头点头 | 云台左转、右转、转圈、点头、摇头、抬头、低头 |
| 跟着人 | 吸上云台默认开 |
| 拍一张 | Bot 可以要一张 JPEG,绑定页可关。图只走这一次工具返回,不落盘 |
| 录像 | 1 到 12 秒,绑定页可关。过云的片子暂存在 Durable Object 里,每具身体只留最近 4 段 |
| 任务完成出声 | 绑定页可关。开了只说一句短的 |
Bot 转头、拍照、录像、跟着人时,手机屏幕会写出正在做什么。拍照会闪一下并露出缩略图;录像时左上角红点倒数。
几个边界#
Grok 没有对外的「塞一条用户消息进去」的接口。所以身体要嘛一直 wait_for_speech,要嘛靠门铃把 Bot 叫醒。电脑对话框里写完,不等于告诉了身体;要开口必须 speak,而且只说要点。
这不是 xAI 官方产品。脸的变形移植自 jeremy-prt/bloub。
现场那个 StackChan 方案和这个不打架。一个是桌面小人,一个是你已经吸在支架上的手机。我选后者,只是因为硬件已经在桌上了。
玩之前把 README 再过一遍:github.com/rowline/grokbot-body