做了个Claude Code CLI 电子宠物:程序员的实体监工代码搭子
目地址在文章末尾麻烦佬们帮忙star!!!!凌晨两点你的终端里 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命令该怎么用怎么用所有状态同步、审批请求都是后台静默完成的不打断你的工作流就算 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 的关系从 “被动接受” 变成了 “主动掌控”。它不再是一个只会敲代码的黑盒而是一个有状态、有反馈、需要你配合的 “搭子”。而且谁能拒绝一个会在你敲代码时陪在旁边还会跳爱心舞给你庆祝的电子宠物呢