claude-desktop-buddy BLE 无线协议深度解析:Nordic UART Service 与换行分隔 JSON 完整参考
claude-desktop-buddy BLE 无线协议深度解析Nordic UART Service 与换行分隔 JSON 完整参考【免费下载链接】claude-desktop-buddyReference and an example for the Bluetooth API for makers in Claude Cowork Claude Code Desktop项目地址: https://gitcode.com/gh_mirrors/cl/claude-desktop-buddyclaude-desktop-buddy 是 Claude 桌面应用Claude Cowork / Claude Code Desktop面向硬件创客的 BLE 参考项目它把会话状态、权限审批请求通过BLE Nordic UART ServiceNUS以换行分隔的 JSON推送到 ESP32 桌面宠物M5StickC Plus并支持在设备上一键批准/拒绝工具调用。本文完整拆解这套无线协议——UUID、心跳快照、权限回传、命令应答与文件夹无线推送——帮你用最少的代码让任意 BLE 设备接上 Claude。协议概览3 个 UUID 定义一切设备侧不需要本项目中的任何代码只要满足两个条件即可接入广播Nordic UART Service业界事实标准的BLE 串口能解析换行分隔 JSON一个对象一行\n结尾。Arduino、ESP32、nRF52甚至树莓派加一块 BLE 蓝牙模块都能实现。Nordic UART Service 核心 UUID 对照表角色UUIDService6e400001-b5a3-f393-e0a9-e50e24dcca9eRX桌面 → 设备Write6e400002-b5a3-f393-e0a9-e50e24dcca9eTX设备 → 桌面Notify6e400003-b5a3-f393-e0a9-e50e24dcca9e设备命名技巧广播名必须以Claude开头桌面端的设备选择器会按此前缀过滤再追加 BT MAC 的几字节多台设备就不会混在一起。连接与配对硬件伴侣Hardware Buddy使用步骤BLE 桥默认关闭需要开发者模式Help → Troubleshooting → Enable Developer Mode菜单栏会多出 Developer 菜单Developer → Open Hardware Buddy…打开配对窗口点击Connect从扫描列表选中设备首次连接授权 macOS 的蓝牙权限。配对完成后桥会自动重连窗口只用于初始配对、查看状态面板或拖拽推送文件夹。传输层细节MTU 分片与行重组线上跑的一切都是UTF-8 编码的 JSON——每行一个对象\n结尾。两个方向都要处理碎片桌面 → 设备Notify 会在 MTU 边界处把一行切成多包设备端必须累积字节直到遇到\n再解析设备 → 桌面桌面端会自动重组多包行你只管按字节发回复由桥按协商 MTU 自动分片见 src/ble_bridge.h 中的 NUS 注释说明。参考实现在 src/ble_bridge.cpp行缓冲收发和 src/data.hJSON 解析入口_applyJson。心跳快照桌面端主动推送的核心消息桌面端在状态变化时发送快照并每 10 秒发一次保活{ total: 3, running: 1, waiting: 1, msg: approve: Bash, entries: [10:42 git push, 10:41 yarn test], tokens: 184502, tokens_today: 31200, prompt: { id: req_abc123, tool: Bash, hint: rm -rf /tmp/foo } }字段含义total/running/waiting全部会话数 / 正在生成 / 被权限提示阻塞msg适合小屏幕展示的一行摘要entries最近的转录行新的在前tokens/tokens_today会话启动以来的累计 token / 今日 token跨重启持久化本地午夜归零prompt仅在需要权限决策时出现其id是回传时要原样带回的凭证实用派生信号running 0表示有会话在跑waiting 0表示有权限提示在等total 0表示空闲。约 30 秒收不到快照就应视为连接已断参考实现里dataConnected()正是 30 秒阈值见 src/data.h。回合事件与权限审批回传每个回合完成会额外触发一条一次性事件携带原始 SDK 内容数组文本块、工具调用等。超过 4KB按 UTF-8 字节计的事件会被丢弃{ evt: turn, role: assistant, content: [{ type: text, text: ... }] }从设备端批准或拒绝工具调用当心跳里出现prompt时设备通过 TX 特征发回一条即可{cmd:permission,id:req_abc123,decision:once} {cmd:permission,id:req_abc123,decision:deny}id必须与prompt.id完全一致once批准本次工具调用deny拒绝。桌面端会把决定转发给会话管理器——这就是桌上小宠物帮你点批准的原理。连接时的一次性消息消息说明{ time: [1775731234, -25200] }时间同步epoch 秒 时区偏移秒设备据此校准 RTC{ cmd: owner, name: Felix }用户账户名名可显示在屏幕上命令与应答ack协议桌面端每发一条带cmd的命令都期望一条对应的 ack{ ack: 与cmd相同, ok: true, n: 0 }ok:false时可附带error:...n是通用计数器如 chunk 应答里的已写字节数。命令用途你应回传的 ack{cmd:status}桌面端每几秒轮询一次填充 Hardware Buddy 状态面板见下方状态响应{cmd:name,name:Clawd}设置设备显示名{ack:name,ok:true}{cmd:owner,name:Felix}设置用户名{ack:owner,ok:true}{cmd:unpair}清除已存绑定用户点忘记时触发{ack:unpair,ok:true}状态响应示例没有的字段可以直接省略{ ack: status, ok: true, data: { name: Clawd, sec: true, bat: { pct: 87, mV: 4012, mA: -120, usb: true }, sys: { up: 8412, heap: 84200 }, stats: { appr: 42, deny: 3, vel: 8, nap: 12, lvl: 5 } } }bat.mA为负值表示正在充电sec: true表示链路已加密下一节详述。文件夹推送BLE 无线文件传输Hardware Buddy 窗口里有个拖放区把一个文件夹拖进去其扁平内容会被流式推送到设备。传输层与内容无关——GIF、配置、固件镜像都行总量需在 1.8MB 以内。桌面: {cmd:char_begin,name:bufo,total:184320} 设备: {ack:char_begin,ok:true} 桌面: {cmd:file,path:manifest.json,size:412} 设备: {ack:file,ok:true} 桌面: {cmd:chunk,d:base64} → 设备逐块 ackn已写字节 桌面: {cmd:file_end} → 设备 ackn最终大小 每个文件重复 file/chunk/file_end … 桌面: {cmd:char_end} → 设备: {ack:char_end,ok:true}几个关键规则桌面端发送文件夹内所有普通文件不递归、跳过隐藏文件每块 base64 编码收到 ack 才发下一块——协议是顺序的无需整文件缓存char_begin.name取文件夹名若文件夹内有manifest.json且带name字段则以后者为准不想收文件不 ackchar_begin即可桌面端几秒超时后告知用户失败安全提醒写入前务必校验file.path拒绝..与绝对路径。设备端参考实现在 src/xfer.h。角色包格式可参考示例 characters/bufo/manifest.json离线烧录可用 tools/flash_character.py 走 USB 绕过 BLE 往返。安全配对LE Secure Connections 绑定转录片段和工具调用提示都会走这条链路——不加密的设备在无线电范围内可被廉价 nRF 嗅探棒直接嗅出。推荐做法NUS 特征及 TX CCCD标记为仅加密广播 DisplayOnly IO 能力首次 GATT 访问触发系统配对桌面端提示用户输入设备显示的6 位 passkey此后链路 AES-CCM 加密重连复用 LTK 无需再提示链路加密后在 status ack 中带sec: true收到{cmd:unpair}时清除本地绑定。设备端实现见 src/ble_bridge.h 中的bleSecure()/blePasskey()/bleClearBonds()三个接口。小结与参考入口整套协议可以浓缩为一句话NUS 三 UUID 每行一个 JSON 10 秒保活 30 秒判死 命令必须 ack。想动手实现前建议按这个顺序阅读协议权威定义REFERENCE.mdBLE 桥实现src/ble_bridge.cpp、src/ble_bridge.h快照解析与状态机src/data.h、src/stats.h文件推送接收端src/xfer.h工程配置ESP32 Arduino LittleFSplatformio.ini⚠️ 该 BLE API 仅在桌面应用开启开发者模式时可用面向创客与开发者不属于官方支持的产品功能。【免费下载链接】claude-desktop-buddyReference and an example for the Bluetooth API for makers in Claude Cowork Claude Code Desktop项目地址: https://gitcode.com/gh_mirrors/cl/claude-desktop-buddy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

FreeCAD MCP 三种执行模式怎么选?execute_code / async / headless 终极对比

FreeCAD MCP 三种执行模式怎么选?execute_code / async / headless 终极对比

FreeCAD MCP 三种执行模式怎么选?execute_code / async / headless 终极对比 【免费下载链接】freecad-mcp FreeCAD MCP(Model Context Protocol) server 项目地址: https://gitcode.com/gh_mirrors/fr/freecad-mcp FreeCAD MCP 是一个让 Claude Desktop 等 …

2026/10/4 7:53:42 阅读更多 →
S32K3XX HSE实操避坑指南:MU通信、UTEST校验与IVT/A-B Swap全解析

S32K3XX HSE实操避坑指南:MU通信、UTEST校验与IVT/A-B Swap全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 7:46:29 阅读更多 →
开题报告里的研究内容、研究方法和预期成果怎么对齐?大四学生用一张表检

开题报告里的研究内容、研究方法和预期成果怎么对齐?大四学生用一张表检

一、先分清三部分 研究内容回答“我要研究哪些问题”。例如研究校园服务时,可以拆成现状、使用体验、存在的问题、影响因素和改进建议。研究方法回答“准备用什么方式获得和分析材料”。问卷适合了解较大范围的情况,访谈适合了解具体经历和原因&#xff…

2026/10/4 7:47:10 阅读更多 →

最新新闻

快速设计Cache的四大支柱:容量、映射、写策略与替换算法

快速设计Cache的四大支柱:容量、映射、写策略与替换算法

1. 什么是“快速设计一个cache”——不是写个LRU就叫设计“如何快速设计一个cache”这个标题,乍看像程序员面试题,实则藏着整个计算机体系结构里最精妙又最常被低估的工程权衡。它不等于“用Python写个字典加个淘汰策略”,也不等于“在Redis里…

2026/10/4 10:37:15 阅读更多 →
用TaoToken统一Key打通Codex与嘉立创EDA:Bridge控制原理图绘制大纲

用TaoToken统一Key打通Codex与嘉立创EDA:Bridge控制原理图绘制大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 10:37:15 阅读更多 →
OpenClaw 跑在腾讯云上太烧钱?阶跃星辰 Step 3.5 Flash 免费额度 + TaoToken 统一 Key 实测

OpenClaw 跑在腾讯云上太烧钱?阶跃星辰 Step 3.5 Flash 免费额度 + TaoToken 统一 Key 实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 10:37:15 阅读更多 →
北邮学生10天打造7.4万星开源项目,获3000万投资

北邮学生10天打造7.4万星开源项目,获3000万投资

看到这个标题,我第一时间是愣了一下。GitHub 上 7.4 万星,10 天完成,北邮学生,盛大 3000 万投资,这几个词放在一起,放在任何一个开源爱好者眼里都属于“离谱”级别。尤其是星标数——7.4 万个 star 是什么概…

2026/10/4 10:37:15 阅读更多 →
Hermes Agent中chrome-devtools的token消耗陷阱与降本方案

Hermes Agent中chrome-devtools的token消耗陷阱与降本方案

1. 这不是Bug,是设计暴露的“隐性成本”——Hermes Agent里chrome-devtools工具为何吃掉76.5%的token你刚跑通Hermes Agent,配置好MCP协议接入,调用一个网页分析任务,结果发现:整个请求的token消耗里,光是c…

2026/10/4 10:37:15 阅读更多 →
从传统RAG到Agent智能知识库:混合检索、记忆管理与工程落地实践

从传统RAG到Agent智能知识库:混合检索、记忆管理与工程落地实践

从第一篇搭 Agent 骨架,到第二篇给 Agent 接上工具调用,这一篇我来讲点更实用的东西:把知识库从“搜索框”升级成“会自己思考的 Agent”。先说一个让我很郁闷的场景。之前帮团队做过一个传统 RAG 知识库,原理很简单——把文档切块…

2026/10/4 10:36:14 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →