📰 来源: 博客园
项目地址在文章末尾,麻烦佬们帮忙star!!!!
凌晨两点,你的终端里 Claude Code 正在疯狂跑日志,Bash 命令一条接一条执行。你盯着飞速滚动的黑框,手指悬在键盘上,心里直打鼓:
Claude Code 的 “工具自动执行”是效率神器,但黑盒式的操作流程,总让人有种 “失控感”。
为了治这种焦虑,我给 Claude Code 做了个「实体监工搭子」—— 一个跑在 ESP32 上的电子宠物,能实时同步 Claude 的状态,所有高危操作,必须经过它点头才放行。
先上效果:当你的 Claude 要执行任何 Bash/Write/Edit 操作时,终端里还没反应,你的小屏幕上已经弹出了审批请求:
我给它做了 3 个不同风格的 ASCII 角色:软萌猫咪、机械机器人、圆滚滚鸭子,每个角色都对应 7 种状态动画:
不用再刷日志找进度,瞟一眼小屏幕,就知道 Claude 现在是在摸鱼还是在干活。
Claude Code 自带的审批提示,很容易被日志刷过去漏看。而我的 Buddy,把审批流程从 “终端弹窗” 搬到了物理屏幕上:
从 Claude Code 的 Hook 事件,到 PC 端守护进程,再到 ESP32 的 BLE 连接,整个流程完全无感:
claude 命令,该怎么用怎么用很多人问我:“不就是个连蓝牙的小屏幕?有必要写这么多代码吗?”其实为了让它丝滑又稳定,我踩了不少坑,也做了很多 “强迫症细节”:
1. 双层状态机:临时动画不打断主流程
我给 Buddy 做了个双层状态模型:
base状态:和 Claude 同步的持久状态(空闲 / 忙碌 / 等待审批)active状态:临时覆盖的动画(比如审批后的爱心庆祝),持续 2-3 秒后自动回落这样就算 Claude 还在忙碌,它跳完庆祝舞也会自动回到忙碌状态,完全不用写复杂的恢复逻辑。
2. BLE 透明分片:20 字节限制?上层完全不用管
ESP32 的 BLE NUS 服务有个痛点:单次只能发 20 字节数据,JSON 消息很容易被截断。我直接在驱动层做了透明拼接:
\n 再抛给上层上层代码收发 JSON 就和普通字符串一样简单,完全不用管分片细节。
3. 三任务异步并发:动画、BLE、触控互不阻塞
用 asyncio 开了三个独立任务:
ble_task:后台处理蓝牙连接和消息收发touch_task:异步监听触控,不阻塞主循环render_task:固定 20FPS 渲染动画,丝滑不卡顿就算 Claude 疯狂发消息,小猫的眨眼动画也不会掉帧。
4. 硬件抽象:换板?改一个文件就行
所有引脚、屏幕参数、设备配置,全塞在 config.py 里。以后换别的 ESP32 开发板,只要改这个文件的参数,不用动业务代码,直接适配。
很多人说,这东西 “华而不实”,但我觉得,它解决的是程序员和 AI 交互里最容易被忽略的问题:失控感。当 AI 的操作从 “终端里滚动的日志”,变成 “物理屏幕上的小猫点头”,你和 AI 的关系,从 “被动接受” 变成了 “主动掌控”。它不再是一个只会敲代码的黑盒,而是一个有状态、有反馈、需要你配合的 “搭子”。
而且,谁能拒绝一个会在你敲代码时陪在旁边,还会跳爱心舞给你庆祝的电子宠物呢?😼
仓库地址:https://github.com/FreakStudioCN/MicroPython_Claude_Assistant
🔗 原文链接: 点击阅读原文
文章评论