DEEPDIVE / [LAB] · CLAUDE DESKTOP BUDDY № 01 → № 02 协议篇
v1 · 2026
PRIMER / 入门读本

不止是桌面宠物
Claude Desktop Buddy
对开发者意味着什么

Anthropic 开源了个 ESP32 固件,把 Claude Code 的会话状态映射成桌上一只小宠物。真正解决的问题:Claude Code 跑长任务时,审批弹窗每次都要打断你——Buddy 用一个物理按钮解掉这个打断。

硬件成本
$25
M5StickC Plus
行为状态
7
sleep ↔ heart
内置宠物
18
species × 7 anim
开放协议
BLE
Nordic UART + JSON
M5StickC Plus running the buddy firmware
FIG / 01 M5StickC Plus running buddy firmware — anthropic / claude-desktop-buddy
TL;DR / 30 秒

Buddy 把 agent 审批从 "切窗口点击" 变成 "余光看设备按一下"——省的不是两秒,是注意力上下文切换。

反共识洞察:哪怕完全不碰硬件,单纯把 Buddy 当 「agent 审批 UI 该长什么样」 的参考案例研究一下,也值这 25 美元和一个下午。

§ 01 / PROBLEM

它解决的真问题

Claude Code 跑长任务时,最烦的不是等——是弹窗。

你刚进状态,approve: Bash 跳出来,切窗口、点按钮、切回编辑器,刚才脑子里那条线断了。单次不痛,叠起来很痛。越敢放权给 agent,弹窗越多;不放权 agent 又跑不动。

Buddy 做的事很简单:把「切回 Claude 窗口点按钮」变成「余光看设备、伸手按一下」。听起来省了两秒,实际省的是注意力上下文的切换。

§ 02 / BEHAVIOR

设备有 7 种状态

状态
动画
触发表现
SLEEP
sleep
桌面端没连上闭眼,慢呼吸
IDLE
idle
连上但无任务眨眼,东张西望
BUSY
busy
session 在跑出汗、忙工作脸
ATTENTION
attention
有审批弹窗警觉表情 + LED 闪
CELEBRATE
celebrate
累计满 50K tokens撒彩花、跳跃
DIZZY
dizzy
你晃了它(IMU)转圈眼 + 摇晃
HEART
heart
5 秒内秒批飘心

FIG / 02  LIVE GIFS FROM characters/bufo/ — 仓库官方角色包

KEYMAP / 按键语义随状态切换
平时 看宠物 看信息 有审批时
A(正面) 切下一屏 切下一屏 切下一屏 ✓ 批准
B(右侧) 滚动对话 切下一只宠物 翻页 ✗ 拒绝
长按 A 进菜单
晃一下 触发 dizzy 动画
倒扣放桌上 睡觉回血(攒能量)

30 秒无操作自动息屏 / 有审批时保持常亮 / 任意按键唤醒

A DAY / 实际用起来大概是这样
  1. 09:00 开 Claude 桌面端 → 从 sleep 睁眼进 idle,开始眨眼东张西望。
  2. 10:15 让 Code 跑重构 → 进 busy,开始出汗。
  3. 10:23 跑到一半要 git push 需要审批 → 切 attention,LED 闪。余光扫到,伸手按 A,5 秒内批完 → heart 飘心。
  4. 11:40 跑了个长 agent,烧了 50K tokens → celebrate 撒彩花。
  5. 12:30 出门吃饭把它倒扣桌上 → 进 sleep 回能量。
  6. 14:00 回来摇一下 → dizzy 转圈眼。
§ 03 / USEFUL

实际有用的地方

审批不打断工作流

你在另一个终端调试,Claude 在后台跑批量任务。不用来回切窗口,手不离键盘,余光扫一眼,按一下。双屏或 Claude 跑在另一台机器时尤其有用。

token 消耗变得可感知

每 50K tokens 升一级放彩花。原来这数字埋在网页里,没什么感知。现在桌上会发生物理事件,你会真正注意到自己烧了多少——对控制成本有非显然的效果。

倒扣和摇晃

倒扣 = 去睡别烦我,摇 = 闲着玩。听起来有点蠢,但这两个手势传达意图的成本比打字低很多,而且是真实的物理操作,不是软件按钮。

每次审批的注意力损耗(估值) 越短越好
模态弹窗 + 鼠标 ~8s + flow loss
键盘快捷键 ~3s
Buddy 物理按钮 ~1s, no focus
§ 04 / HACKING

怎么

LV / 01 ZERO CODE 3 sec

换宠物

固件内置 18 个 ASCII 物种,长按 A → 菜单 → next pet 循环切换,掉电不丢。只是想换个皮,这一步就够了。

LV / 02 ASSET PACK drag & drop

推 GIF 角色包

不想要 ASCII?做一套 GIF 拖到 Hardware Buddy 窗口 drop target,走 BLE 推到设备实时切换。仓库 characters/bufo/ 是完整的青蛙例子。

Hardware Buddy window with Connect button and folder drop target
FIG / 03 HARDWARE BUDDY WINDOW — drag drop target 在右边
my-character/
  manifest.json
  sleep.gif
  idle_0.gif      # 数组:循环轮播
  idle_1.gif
  busy.gif / attention.gif / celebrate.gif / dizzy.gif / heart.gif
CONSTRAINTS

96px 宽 / 高 ≤140px / 整包 < 1.8MB  ·  tools/prep_character.py 帮你统一缩放  ·  gifsicle --lossy=80 -O3 --colors 64 一般压掉 40~60%

LV / 03 FAST LOOP USB

USB 直刷(迭代更快)

迭代角色不想每次走蓝牙:tools/flash_character.py characters/bufo 把素材放到 data/ 然后 pio run -t uploadfs 直接写文件系统。

LV / 04 FIRMWARE C++

改固件

src/ 结构清晰:状态机在 main.cpp,物种动画一个文件一只在 buddies/,BLE 桥在 ble_bridge.cpp,GIF 解码在 character.cpp。加新状态、加新触发(比如双击)、改动画——改一个文件的事。

§ 05 / PROTOCOL

协议是开放的

Nordic UART over BLE,JSON over line buffer,schema 都在 REFERENCE.md。文档明确写了:"Building your own device? You don't need any of the code here."

也就是说:不用 M5Stick 也能接,不显示宠物也行,可以完全反向用。

不用 M5Stick

任何能跑 BLE 的 ESP32、nRF52、树莓派 + dongle 都能接。

不显示宠物

机械翻页时钟、旧诺基亚屏、办公室门口的雾化灯——只要能消费那几条状态消息。

反向接

Claude 状态接 Home Assistant,agent 跑起来时家里灯调暗,跑完了灯亮回来。

M5StickC Plus 整机约 $25,固件开源,PlatformIO 刷机。门槛基本是零。

§ 06 / ACTION

现在就能做的事

TUTORIAL / 完整上手演示(约 80 秒)

VID / 01  PlatformIO 环境 → 固件烧录 → Developer Mode → BLE 配对 → 实机审批交互

  1. 01

    拿来用

    M5StickC Plus 烧官方固件,先体验一周再说。

  2. 02

    换宠物

    长按 A → 菜单 → next pet,18 种 ASCII 物种都试一遍。

  3. 03

    换皮

    拖 GIF 角色包过去,或自己做一个(96px 宽,< 1.8MB)。

  4. 04

    改固件

    加个双击触发、改动画、加新状态。

  5. 05

    接其他硬件

    基于公开 BLE 协议,让你现有的设备接 Claude 状态。

  6. 06

    反向应用

    Claude 状态接 Home Assistant / Stream Deck / 自定义键盘宏。

哪怕完全不碰硬件,把 Buddy 当「agent 审批 UI 该长什么样」的一个参考案例研究一下,也值这 $25 和一个下午。

CLAUDE DESKTOP BUDDY · 二部曲
FIELD NOTE / № 01 — 产品视角

价值篇

Buddy 解决了什么问题、怎么用、怎么改 · 状态表 + 一天叙事 + 行动梯度

▣ 阅读中
DEEP DIVE / № 01 — 技术视角 →

协议深潜

协议拆解 + 设计分析 + 协议栈定位 + 未来预测 · BLE 到 agent-hardware 通信的全貌

▢ 已发布