跳到主要內容
Anthropic 開源桌面寵物 API:讓 ESP32 實體裝置控制 Claude Code Desktop 的工具呼叫審批
/閱讀約 12 分鐘/

Anthropic 開源桌面寵物 API:讓 ESP32 實體裝置控制 Claude Code Desktop 的工具呼叫審批

Anthropic 官方開源了 Claude Cowork 與 Claude Code Desktop 的 Bluetooth 硬體 API,附帶 ESP32 桌面寵物參考實作——讓一隻實體小動物在你的書桌上等待你按鈕批准 Claude 的工具呼叫。這不只是玩具,是 ambient AI 介面的原型。

目錄+
anthropics/claude-desktop-buddy on GitHub

有一隻小動物住在你的書桌上。平常它在睡覺。當你開始新的 Claude 對話,它醒過來。當 Claude 需要執行一個 bash 指令或寫入一個檔案,它開始顯得焦躁不安——一種「你能快點按嗎」的肢體語言。你按下裝置上的 A 鍵批准,它歡慶。你按下 B 鍵拒絕,它頭暈轉圈。

這是 claude-desktop-buddy 的核心體驗,一個 Anthropic 官方發佈的開源參考實作。它不是第三方 hack,是文件完整的硬體協定,帶著一個可以在週末完成的 ESP32 實作(688 stars、59 forks、Felix Rieseberg 主導開發;Felix 過去是 Slack 和 Discord 桌面應用的核心工程師)。

值得先釐清:這個 API 官方文字描述是「for makers in Claude Cowork & Claude Code Desktop」——主要目標是 Claude Code Desktop 的工具呼叫審批場景,不是一般 Claude.ai 網頁版的聊天。repo 本身也標注「這是給 maker 和開發者玩的參考,不是正式支援的產品功能」。這個定位會影響你該怎麼看待它:它比較像「Anthropic 在試水溫」而不是「正式產品線」。


這是什麼,以及它為什麼是信號

在介紹細節之前,有一件事值得先說清楚:這是 Anthropic 正式認可的硬體 API,不是有人逆向工程 Claude Desktop 做出來的玩具。

Claude Desktop 的開發者模式裡有一個 "Open Hardware Buddy" 選項。這個入口就是為了這個協定存在的。Anthropic 把它放進官方開發者文件,開源了一個包含 C++ 韌體、BLE bridge 程式碼和完整字元動畫系統的參考實作。

這個決定本身是一個信號:Anthropic 在思考 Claude 作為一個存在於實體空間的東西,不只是螢幕上的聊天介面。當 AI 開始在後台執行長時間的 agent 任務,「如何讓使用者感知到 AI 的狀態」就成了真實的設計問題。這個回答是:一隻放在書桌上的小動物。


審批寵物的 UX 設計邏輯

Claude 的 agentic 工具呼叫需要使用者審批——當 Claude 準備執行 bash 指令、讀寫檔案、發起 API 請求時,會出現一個審批提示。目前的體驗是:你需要把注意力切換回 Claude Desktop 視窗,看清楚要批准什麼,再點確認。

這個流程有個隱形成本:它打斷思維流。你在讀另一份文件、在 editor 裡寫程式碼、或者只是在等 Claude 跑完一個長流程——突然需要 alt-tab 回去,找到提示視窗,處理審批,再切回來。

桌面寵物把這個互動移到實體空間。當 Claude 需要審批,裝置上的寵物進入 "attention" 動畫(焦躁、等待)。你不需要看螢幕就知道有待處理的事。按下 A 批准,按下 B 拒絕。回應觸覺而不是視覺——寵物慶祝或暈眩,確認你的輸入被接收。

這是 ambient computing 做得對的樣子:把通知從注意力的競爭者,變成環境的一部分。


硬體:M5StickCPlus,大約 30 美元

參考實作使用的硬體是 M5StickCPlus,一個基於 ESP32-PICO-D4 的緊湊型開發板,帶有 1.14 吋彩色 TFT 螢幕、兩個實體按鈕、內建電池、IMU,以及 BLE + WiFi 支援。這是 ESP32 生態系裡一個成熟的開發板,在各大電商平台和 M5Stack 官方店都有販售,價格通常在 25–35 美元之間。

開發工具鏈是 PlatformIO,整個 repo 包含完整的 C++ 韌體原始碼。如果你有任何 ESP32 開發經驗,建置流程是標準的:

# clone repo
git clone https://github.com/anthropics/claude-desktop-buddy
cd claude-desktop-buddy

# 用 PlatformIO 建置並燒錄 (需要安裝 PlatformIO Core 或 VS Code 擴充)
pio run --target upload

沒有任何神秘的黑箱。你拿到的是完整的韌體原始碼、字元動畫系統和 BLE 協定實作,可以自由修改和延伸。


18 種 ASCII 寵物,每種 7 個動畫

字元系統比預期的更完整。repo 包含 18 個 ASCII 寵物物種(cat、dog、robot、alien,以及更多),每個物種有 7 個狀態動畫:

動畫狀態觸發情境
sleepClaude Desktop 關閉或閒置
idleClaude 對話中,無待處理事項
busyClaude 正在執行工具呼叫
attention有待審批的工具呼叫,等待使用者輸入
celebrate使用者按下批准
dizzy使用者按下拒絕
heart特殊正向事件

這是一個完整的狀態機動畫系統,不是隨機播放。每個動畫都對應到 Claude 的實際操作狀態,透過 BLE 從 Claude Desktop 即時同步。

此外,repo 還支援自訂 GIF 字元包透過 BLE 串流傳輸。這意味著你可以設計自己的像素角色,不需要重新燒錄韌體就能更新顯示內容。


BLE 協定:Nordic UART Service + JSON

底層協定是 Nordic UART Service (NUS),一個廣泛支援的 BLE GATT 服務,使用 TX/RX 特徵值模擬串列埠通訊。訊息格式是 JSON。根據獨立研究者對 Claude Desktop 應用內部的拆解,主要的 UUID 包括:

RX:      6e400002-b5a3-f393-e0a9-e50e24dcca9e
TX:      6e400003-b5a3-f393-e0a9-e50e24dcca9e
Control: 6e400001-b5a3-f393-e0a9-e50e24dcca9e

此外還有一個 Anthropic 自訂的 service UUID 94406324-c0b4-4cac-9147-14e1bbaa0de9,負責標準 Nordic UART 以外的特定指令。這表示協定本身比單純的 UART serial 更結構化——對於想做非 ESP32 實作的人,這是個需要留意的細節。

repo 的 REFERENCE.md 完整記錄了 wire protocol——這份文件是真正重要的東西。幾個關鍵訊息結構:

// 狀態更新:Claude Desktop → 裝置
{
  "type": "state",
  "state": "attention",
  "tool": "bash",
  "description": "Run: npm install"
}

// 使用者輸入:裝置 → Claude Desktop
{
  "type": "input",
  "action": "approve"
}

// 字元包串流(GIF 幀資料)
{
  "type": "character",
  "frame": 0,
  "data": "..."
}

Nordic UART 的 BLE service UUID 是標準的,幾乎所有 BLE 開發板都支援。這意味著你不受限於 ESP32。


協定開放的意涵:不只是一個 ESP32 專案

這是整個計畫裡最值得關注的技術決定。

Anthropic 選擇文件化協定而不是只開源 ESP32 韌體,意味著他們在邀請人們建立更多種類的硬體介面。Nordic UART + JSON 可以在任何支援 BLE 的嵌入式平台上實作:

  • Raspberry Pi — 用 Python bleak 套件,幾十行程式碼就能連接
  • Arduino — 任何帶 BLE 的 Arduino 板(如 Nano 33 BLE)都可以直接實作
  • 自訂 PCB — 如果你想做更小的設計或整合其他感測器
  • 智慧顯示器 — 把狀態投射到房間角落的小螢幕

連接方式也是開放的:Claude → Developer → Open Hardware Buddy → Connect。這是 Claude Desktop 內建的入口,不需要任何外掛或 sideloading。

這個設計選擇背後的意圖很明確:Anthropic 把協定視為產品,ESP32 實作只是讓人有地方開始。


Maker 週末專案清單

如果你想直接動手,這是一個合理的 weekend project 路徑:

材料

  • M5StickCPlus 開發板(建議從 M5Stack 官方購入以確保相容性)
  • USB-C 線(燒錄用)
  • 電腦安裝 PlatformIO

步驟

  1. Clone repo,在 PlatformIO 開啟
  2. 選擇 M5StickCPlus 為目標板
  3. pio run --target upload 燒錄
  4. Claude Desktop → Developer → Open Hardware Buddy → Connect
  5. 選擇你的裝置(BLE 廣播名稱預設為 ClaudeDesktopBuddy)

整個流程不需要修改任何程式碼就能跑起來。韌體是完整的,BLE 配對邏輯已經實作。

如果你想改動字元,動畫系統使用的是簡單的 frame array 結構,在 C++ 源碼裡修改或新增寵物物種不需要了解 BLE 細節。


更大的問題:AI 的實體存在感

桌面寵物是可愛的,但它指向一個更嚴肅的設計問題。

Claude 越來越像一個在背景執行、代替你採取行動的 agent——執行 bash 指令、寫入檔案、呼叫外部 API、管理任務清單。這些動作在傳統 UI 假設下(你專注在一個應用的視窗上)是合理的。但現實中,使用者在做很多件事,Claude 只是其中一條執行緒。

當 AI 是背景執行緒,你如何感知它的狀態?

螢幕上的通知徽章是一個答案,但它是往注意力競爭的方向走。桌面寵物是另一個方向:把 AI 狀態變成環境的一部分,像一盞燈的顏色變化或辦公桌上的小動靜,你不需要主動看,卻能被動感知。

這是 ambient AI interface 的一個原型概念。它現在是 30 美元的 ESP32 加上 ASCII 小貓,但底下的思路——讓 AI 有實體的存在感和狀態訊號——值得認真對待。

Anthropic 選擇把這件事做成官方 API 而不是讓社群自己摸索,本身就是一個立場:這個方向是值得投資的。


結語

claude-desktop-buddy 是一個小專案,但它打開的是一個不小的問題空間。

如果你是 maker,這是一個完整的週末專案:有硬體清單、有開源韌體、有文件化協定,終點是一個真正有用的工具(你再也不用為了批准一個 npm install 而 alt-tab 回 Claude Desktop)。

如果你對 AI agent 的 UX 有興趣,協定文件值得仔細讀——不是為了 ESP32,而是為了理解 Anthropic 在思考什麼樣的硬體互動模型。一個文件完整、開放實作的 BLE API,是在說「去建造吧」,不是「我們以後可能會做這個」。

實體世界裡的 AI 存在感,這個想法正在從科幻詞彙變成可以在書桌上買到的 30 美元硬體。