doc(rvclaw): Update CC Buddy documentation with new images and enhance Wi-Fi connection instructions

This commit is contained in:
taorye
2026-04-28 17:34:36 +08:00
parent 90a6035970
commit d176eceb3e
19 changed files with 216 additions and 5 deletions

View File

@@ -8,6 +8,10 @@ update:
- First version
---
[*模型文件于此下载*](https://dl.sipeed.com/shareURL/LICHEE/LicheeRV_Nano/08_RVClaw)
![rvclaw-kit-jpg](../../../zh/lichee/assets/RV_Nano/rvclaw/rvclaw-kit.jpg)
## PicoClaw 扩展板
PicoClaw 扩展板是一款为 **PicoClaw** 交互应用打造、基于 **LicheeRV Nano** 开发板的功能扩展板,面向语音交互与本地显示场景,集成显示、按键、指示灯、电池管理与音频外设接口,便于快速搭建完整的人机交互终端。
@@ -58,13 +62,13 @@ PicoClaw 扩展板定制镜像下载:
- 镜像内扩展板功能代码基于 Python位于 `/opt/app_picoclaw`(源码:[https://github.com/sipeed/rvclaw](https://github.com/sipeed/rvclaw)),便于按需二次开发和自定义。
## 快速上手
## 快速上手 Picoclaw
### 1. 选择应用
### 选择应用
应用默认启动后进入应用选择界面,按下 `KEY1` 键选择 PicoClaw 应用,按下 `KEY2` 键选择 CC Buddy 应用。CC Buddy 自定义的虚拟宠物应用,提供了一个可爱的交互界面和简单的对话功能,适合初次使用者体验。
### 2. 连接网络
### 连接 Wi-Fi
首先需要进入设备控制台,推荐以下两种方式:
@@ -76,9 +80,28 @@ PicoClaw 扩展板定制镜像下载:
<img src="../assets/RV_Nano/picoclaw/usb_net.jpeg" style="width: 90%; height: auto;" alt="usb network" >
</div>
然后可以使用 SSH 工具或者串口工具登录设备,默认用户名和密码均为 `root`登录进设备后可以按照[外设使用](https://wiki.sipeed.com/hardware/zh/lichee/RV_Nano/5_peripheral.html#WIFI)中的方法连接 Wi-Fi。
然后可以使用 SSH 工具或者串口工具登录设备,默认用户名和密码均为 `root`
### 3. 配置 PicoClaw
**登录进设备后可以按照下述方法连接 Wi-Fi。**
<details>
<summary>连接 Wi-Fi</summary>
> ```bash
> # 在 sd 卡第一个分区创建 wifi.sta 文件启用 sta 模式:
> touch /boot/wifi.sta && rm -f /boot/wifi.ap /boot/wifi.mon
>
> # 然后将 AP 的 SSID 和密码写入文件:
> echo ssid > /boot/wifi.ssid
> echo pass > /boot/wifi.pass
>
> # 最后重启 Wifi 服务
> /etc/init.d/S30wifi restart
> ```
</details>
### 配置 PicoClaw
第一次进入系统后PicoClaw 还未完成初始化,需要先进行配置。可以使用 Web UI 或者 TUI 进行配置,以下以 Web UI 为例:
@@ -139,6 +162,178 @@ PicoClaw 扩展板定制镜像下载:
</div>
</div>
## CC Buddy 应用
### CC Buddy 介绍
<div align="center">
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_hero.jpg" style="width: 90%; height: auto;" alt="📷 cc buddy hero" >
</div>
**CC Buddy** 是 PicoClaw 扩展板镜像内置的另一款应用,定位为 **Claude Code 的桌面伙伴设备Companion Device**。它将 Claude Code 的交互过程“拟物化”为一只可爱的虚拟宠物ASCII Pet并把 Claude Code 在执行命令、调用工具时所产生的 **权限审批请求**Permission Request从电脑端直接转移到 LicheeRV Nano 这块小屏幕上:在屏幕上一键允许或拒绝,决策结果会回传给 Claude Code从而无需切回电脑窗口即可控制 Agent 的行为。
CC Buddy 移植自 Felix Rieseberg 的 [claude-desktop-buddy](https://github.com/anthropics/claude-desktop-buddy) 项目,针对 LicheeRV Nano + PicoClaw 扩展板做了专门适配:使用 240×240 ST7789 显示、KEY1(A)/KEY2(B) 双按键、板载 LED 等外设。源码位于系统镜像的 `/opt/app_cc_buddy`
CC Buddy 的核心设计理念:
- **拟物化反馈**:把 Claude Code 的运行状态(空闲、忙碌、等待审批、完成任务等)映射成宠物的情绪与动作,让看不见的 Agent 行为变得直观。
- **就近审批**Claude Code 的权限请求被推送到设备屏幕,直接按键 A/B 即可批准或拒绝,省去电脑的窗口切换,优化体验。
- **CLI 桥接**:通过 Claude Code 官方 Hook 机制 + 本地守护进程将事件桥接到设备 TCP 端口,无需修改 Claude Code 本体。
### 主要功能
- 240×240 LCD 上以 ASCII 像素风格显示宠物形象(默认提供 `capybara``cat``robot` 三种形象,可在设置中切换)
- 实时显示 Claude Code 会话状态会话总数、运行中、等待中、Token 消耗、最近一行命令/输出
- 权限审批弹窗:显示工具名称、提示信息、等待秒数,超过 10 秒会高亮提醒
- 宠物养成系统根据“审批速度、拒绝次数、Token 消耗”计算情绪值mood、饱食度fed和精力energy累计 Token 触发升级动画
- 多种显示模式HUD脚本/转录、INFO设备/网络/统计信息、PET宠物状态页、CLOCK无 Claude 连接时切换为时钟)
- 可选 LED 状态闪烁、屏幕自动息屏30 秒无操作)、声效反馈(可在设置中开关)
- 一键从应用菜单切换回 PicoClaw 应用(无需重启)
<div style="display:flex; gap:10px; justify-content:center; margin: 8px 0 16px;">
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_hud.jpg" alt="📷 cc buddy hud mode" style="width:23%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_info_P4.jpg" alt="📷 cc buddy info mode" style="width:23%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_pet_P1.jpg" alt="📷 cc buddy pet mode" style="width:23%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_clock_species_capybara.jpg" alt="📷 cc buddy clock mode" style="width:23%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
</div>
<details>
<summary>Full Mode </summary>
<div style="display:flex; gap:10px; justify-content:center; margin: 8px 0 16px;">
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_pet_P1.jpg" alt="📷 cc buddy pet mode P1" style="width:48%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_pet_P2.jpg" alt="📷 cc buddy pet mode P2" style="width:48%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
</div>
<div style="display:flex; gap:10px; justify-content:center; margin: 8px 0 16px;">
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_info_P1.jpg" alt="📷 cc buddy info mode P1" style="width:31%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_info_P2.jpg" alt="📷 cc buddy info mode P2" style="width:31%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_info_P3.jpg" alt="📷 cc buddy info mode P3" style="width:31%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
</div>
<div style="display:flex; gap:10px; justify-content:center; margin: 8px 0 16px;">
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_info_P4.jpg" alt="📷 cc buddy info mode P4" style="width:31%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_info_P5.jpg" alt="📷 cc buddy info mode P5" style="width:31%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_info_P6.jpg" alt="📷 cc buddy info mode P6" style="width:31%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
</div>
</details>
### 连接方式
CC Buddy 通过 **Claude Code CLIHooks + Daemon** 与设备通信。
适用于使用 `claude` 终端命令行的用户。需要在电脑上常驻一个守护进程daemon由它把 Claude Code 的 Hook 事件桥接到设备的 TCP 端口。
```
Claude Code CLI (sessions)
│ HTTP hooks自动注入到 ~/.claude/settings.json
cc_buddy_daemon.py (默认 :9876)
│ TCP
RVClaw 设备 (:19000)
```
在电脑端启动 daemon[脚本于此下载](https://raw.githubusercontent.com/sipeed/rvclaw/refs/heads/main/app_cc_buddy/hooks/cc_buddy_daemon.py)
```bash
python3 cc_buddy_daemon.py --device <RVCLAW_IP>
# 自定义端口
python3 cc_buddy_daemon.py --device <RVCLAW_IP> --port 9877
```
启动后 daemon 会自动:
- 将以下 Hook 写入 `~/.claude/settings.json`退出Ctrl+C / SIGTERM时自动清理
- 监听 `http://127.0.0.1:9876` 接收 Claude Code 的 Hook 事件
- 通过 TCP 连接到 RVClaw 的 `19000` 端口推送心跳并接收按键决策
| Hook | 用途 |
| --- | --- |
| SessionStart / SessionEnd | 维护活跃会话计数 |
| PreToolUse | 标记“运行中”状态并构建命令转录 |
| PostToolUse | 清除“运行中”状态 |
| Stop | 标记会话生成完成 |
| **PermissionRequest** | **阻塞**等待设备按键决策(默认 30s 超时) |
| PermissionDenied | 清除“等待中”状态 |
| PreCompact | 同步 Token 计数 |
随后正常使用 `claude` 即可:当 Claude 需要权限时,设备会切到审批界面,按 **A 批准 / B 拒绝**,决策通过 daemon 回传给 Claude Code。
<div align="center">
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_approval.jpg" style="width: 60%; height: auto; border: 1px solid #e5e7eb; border-radius: 4px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);" alt="📷 cc buddy approval" >
</div>
### 按键操作
CC Buddy 的两个按键复用为多种功能,行为根据当前界面变化:
| 操作 | A左侧 | B右侧 |
| --- | --- | --- |
| 主界面短按 | 切换显示模式NORMAL / PET / INFO | 在 INFO/PET 页内翻页HUD 模式下滚动转录 |
| 长按(≥ 600ms | 弹出主菜单settings / help / about / demo / to picoclaw / close | — |
| 审批界面 | **批准**once | **拒绝**deny |
| 菜单/设置打开时 | 移动选择项 | 确认/触发当前项 |
| 屏幕息屏时 | 唤醒(首次按键不触发功能) | 唤醒(首次按键不触发功能) |
> 在主菜单中选择 `to picoclaw` 即可在不重启系统的前提下切换回 PicoClaw 应用CC Buddy 的服务停止PicoClaw 的服务启动)。
### 设置项与持久化
<div style="display:flex; gap:10px; justify-content:center; margin: 8px 0 16px;">
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_menu.jpg" alt="📷 cc buddy menu" style="width:45%; min-width:200px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_settings.jpg" alt="📷 cc buddy settings" style="width:45%; min-width:200px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
</div>
进入 `主菜单 → settings`,可配置以下项目:
| 设置项 | 含义 | 取值 |
| --- | --- | --- |
| brightness | 显示亮度档位 | 04 |
| sound | 提示音开关 | on / off |
| led | 状态 LED 开关(等待审批时闪烁) | on / off |
| transcript | HUD 转录显示开关 | on / off |
| ascii pet | 宠物形象选择 | capybara / cat / robot |
| sleep | 自动息屏开关30s 无操作) | on / off |
| reset stats | 清空养成数据并恢复出厂 | — |
设备数据持久化到 `/root/.cc_buddy/`
- `stats.json`等级、token 累计、approve/deny 计数、宠物形象索引、主人/宠物名等
- `settings.json`:上述设置项
### 宠物养成规则
<div style="display:flex; gap:10px; justify-content:center; margin: 8px 0 16px;">
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_clock_species_capybara.jpg" alt="📷 cc buddy capybara" style="width:30%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_clock_species_cat.jpg" alt="📷 cc buddy cat" style="width:30%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
<img src="../../../zh/lichee/assets/RV_Nano/rvclaw/cc_buddy_mode_clock_species_robot.jpg" alt="📷 cc buddy robot" style="width:30%; min-width:160px; height:auto; border:1px solid #e5e7eb; border-radius:6px; box-shadow:0 2px 8px rgba(0,0,0,.1);" />
</div>
- **MOOD情绪**:审批越快情绪越高(< 5 秒会触发 `HEART` 一次性动画频繁拒绝会降低情绪
- **FED饱食度**每累计约 50K tokens 升级一次并播放 `CELEBRATE` 动画
- **ENERGY精力**设计上将屏幕朝下放置触发小睡回满精力当前未支持
- **状态映射**连接断开 IDLE等待审批 ATTENTION伴随 LED 闪烁同时运行 3 个会话 BUSY最近完成 CELEBRATE深夜1:007:00且无 Claude 连接 SLEEP时钟模式
### 二次开发
开发仓库地址位于 [Github app_cc_buddy](https://github.com/sipeed/rvclaw/tree/main/app_cc_buddy)
CC Buddy 完全使用 Python 编写目录结构清晰
| 文件 | 作用 |
| --- | --- |
| `main.py` | 主事件循环按键调度状态切换显示刷新 |
| `config.py` | 引脚定义SPI 参数字体路径UI 布局常量 |
| `ui.py` | 启动画面HUD审批页Info/Pet/Clock/Menu/Settings 各界面绘制 |
| `buddy.py` + `buddies/*.py` | 宠物形象渲染器已注册 capybaracatrobot |
| `state.py` | `TamaState``PersonaState``DisplayMode` 等数据结构 |
| `protocol.py` | JSON 心跳/命令解析与权限响应封装 |
| `transport.py` | TCP19000通信实现 |
| `hooks/cc_buddy_daemon.py` | 电脑端 Hook 桥接守护进程 |
| `S99cc_buddy_app` | 开机自启脚本 |
可在 `buddies/` 下新增 species 文件并在 `buddies/__init__.py` `register_species()` 注册即可扩展自定义宠物形象
## FAQ
- 对话过程中出现报错

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

View File

@@ -0,0 +1,16 @@
<script>
var hash = window.location.hash
var url_language = "zh"
if( navigator.language.indexOf("zh") == -1 )
{
url_language = "en"
}
switch (window.location.hash) {
case "#c8" :
break;
default :
location.href = window.location.origin + "/hardware/" + url_language + "/lichee/RV_Nano/7_picoclaw_board.html"
}
</script>