凌晨两点,你的终端里 Claude Code 的日志正疯狂滚动,Bash 命令一条接一条地往外输出。你盯着那几乎要溢出屏幕的滚动条,手指悬在键盘上,心里暗自担忧:
- 它会不会趁我不注意,擅自修改了配置文件?
- 那个高危操作的审批提示,会不会被日志冲掉而遗漏?
- 我到底要等多久?它现在是真在忙碌,还是卡住了?
Claude Code 的“工具自动执行”功能确实极大提升了效率,然而这种黑盒式的操作流程,总会带来一种难以言喻的“失控感”。
为了消除这种焦虑,我为 Claude Code 打造了一个「实体监工搭子」—— 一个基于 ESP32 的电子宠物,能实时同步 Claude 的状态,所有高危操作都必须经它批准才能执行。
先看看实际效果:当 Claude 要执行任何 Bash、Write 或 Edit 操作时,终端里甚至还没来得及反应,你的小屏幕上就已经弹出了审批请求:
- 亮黄色界面醒目地显示“APPROVE?”,并且命令内容已完整呈现。
- 小猫歪着头,屏幕右下角的“YES”按钮闪烁着绿光,只等你轻轻一按。
- 审批通过后,小猫会跳起爱心舞,示意“搞定啦”,随后恢复忙碌状态,继续同步 Claude 的工作进度。

我为它设计了 3 种截然不同的 ASCII 角色:软萌猫咪、机械感十足的机器人,以及圆滚滚的鸭子。每个角色都配备了 7 种状态动画:
- 空闲时:猫咪闭眼打哈欠,机器人指示灯缓慢闪烁。
- 忙碌时:小猫皱眉专注工作,鸭子来回踱步,显得十分忙碌。
- 等待审批时:它会突然瞪大双眼,歪着头等候你的决定。
- 任务完成时:它会直接跳起爱心庆祝舞蹈,告诉你“搞定啦!”。
从此无需再反复刷日志寻找进度,只需瞥一眼小屏幕,就能立即知道 Claude 是在偷懒还是认真工作。

Claude Code 自带的审批提示,确实容易被海量日志淹没而漏看。而 Buddy 的做法,是将审批流程从“终端弹窗”迁移到物理屏幕上:
- 所有需要审批的工具操作(Bash、Write、Edit),都会先发送到 Buddy。
- 屏幕会强制弹出审批界面,并附带 30 秒倒计时,若不点击“YES”,Claude 将无法继续执行。
- 即使终端里不小心误操作,也会被 Buddy 的物理审批机制拦截,彻底避免“误删库”的风险。

从 Claude Code 的 Hook 事件,到 PC 端的守护进程,再到 ESP32 的 BLE 连接,整个流程几乎做到无感知:
- 你依然可以像往常一样使用 Claude,只需在终端输入
claude命令。 - 所有的状态同步和审批请求,都在后台静默完成,不会打断你的工作流。
- 即使 Buddy 电量耗尽,也会自动超时放行,确保你的任务不被卡住。

很多人问我:“不就是个连接蓝牙的小屏幕?有必要写这么多代码吗?”其实,为了让 Buddy 运行流畅且稳定,我踩了不少坑,也做了许多“强迫症级别”的细节处理。
1. 双层状态机:动画执行时,主流程依然正常运行
Buddy 内部采用了一种双层状态模型:
base状态:与 Claude 同步的持久状态,例如空闲、忙碌、等待审批。active状态:临时覆盖的动画,如审批通过后的爱心庆祝,持续 2-3 秒后自动回退。
这样设计的好处是,即使 Claude 还在忙碌,它跳完庆祝舞也会自动回到忙碌状态,完全无需编写复杂的恢复逻辑。
2. BLE 透明分片:20 字节的限制?上层完全不用管
ESP32 的 BLE NUS 服务有个经典问题:单次只能发送 20 字节数据,JSON 消息稍长就容易截断。在驱动层直接做了透明拼接:
- 发送时自动按 20 字节分片,并添加帧头标记。
- 接收时自动拼接完整消息,遇到
n再抛给上层。
上层代码收发 JSON 就像处理普通字符串一样简单,完全无需操心分片细节。
3. 三任务异步并发:动画、BLE、触控,谁也别抢谁的资源
用 asyncio 开启了三个独立任务:
ble_task:后台处理蓝牙连接和消息收发。touch_task:异步监听触控,不阻塞主循环。render_task:固定 20FPS 渲染动画,流畅不卡顿。
即使 Claude 疯狂发送消息,小猫的眨眼动画也不会掉帧。
4. 硬件抽象:换块开发板?改一个文件就行
所有引脚定义、屏幕参数、设备配置,全部集中在 config.py 里。以后想换别的 ESP32 开发板,只需修改这个文件的参数即可,业务代码完全无需变动。
很多人觉得这东西“华而不实”,但说到底,它解决的是程序员与 AI 交互时最容易被忽视的问题:失控感。当 AI 的操作从“终端里滚动的日志”,变成“物理屏幕上一只小猫点头”,你和 AI 的关系,也就从“被动接受”转变为“主动掌控”。它不再是一个只会敲代码的黑盒,而是一个有状态、有反馈、需要你配合的“搭子”。
况且,谁能拒绝一个会在你敲代码时陪在旁边,还会跳爱心舞给你庆祝的电子宠物呢?

