Commit 2b2b01e0275294968b759b0a94ea3d51d0dcf938

Authored by yibo
1 parent e5316555

docs(phoneuse): 记录 Hermes Agent 手机端运行时现状 + 防止设备备份入库

用户从 Pixel 上的 ~/.hermes/ 拷了一份一次性备份到 Mac 核对内容,读完发现
几条对以后开发有用的事实,补进 CLAUDE.md:

- phoneuse/android_mcp.py 的真实消费方是第三方框架 Hermes Agent
  (Nous Research,非本项目自研),驱动模型是 Kimi;memory_graph.db 确认
  在线持续增长(1020 person/1255 message/518 vector,对比 TASKS.md
  2026-06-16 审计时的 522/1205/510+)。
- Hermes 在 phoneuse 之外长出的 wechat-image-sender skill(2026-06-23
  验证通过)已经解决了 wechat_send.py 没做的"发图片"能力(ACTION_SEND
  Intent + OCR 找联系人,1344x2992 屏幕坐标全程验证),该 skill 早期笔记
  里提过想用 Frida bridge 但因为不在 Termux 里跑而放弃——正是这次新增
  的 frida_inspect_tools.py 解决的链路,以后可以接上看看。
- wechat-group-digest 绑的两个 cron job 截至备份时都因
  hermes-agent 自身的 `env_float` 缺失 bug 报错失败,不是 phoneuse 代码
  问题,但别假设它们在正常工作。
- 备份的 manifest.json 声称有 5 个 skill,实际只备份了 3 个,不是完整镜像。

备份目录本身含真实 API key(.env)和真实微信消息/联系人原文
(memory_graph.db、persona.yaml),加进根 .gitignore 的
/hermes_backup_*/ 规则,确保不会被任何后续 git add -A 带进仓库。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Showing 2 changed files with 18 additions and 0 deletions
.gitignore
... ... @@ -4,6 +4,9 @@ node_modules/
4 4 # Environment (secrets)
5 5 .env
6 6  
  7 +# Device backups (real secrets + real personal data — never commit)
  8 +/hermes_backup_*/
  9 +
7 10 # OS
8 11 .DS_Store
9 12 Thumbs.db
... ...
CLAUDE.md
... ... @@ -73,6 +73,21 @@ Pixel 上微信发送/跟踪的落地,纯设备内运行(不依赖 Mac):
73 73 - 真机连续性差:开发时常掉 USB,涉及真机的验证要先确认 `adb devices` 能看到设备。
74 74 - 微信相关的 Frida/A11y 经验跟 `wechat_plain` 是分开积累的——`wechat_plain` 已验证过 Frida daemon 注入微信大 bundle 会触发反调试崩溃(见上文 §wechat_plain);`phoneuse` 走的是 USB attach 而非常驻 daemon,崩溃模式不一定一样,但动手前先看那段记录,别重新踩同一个坑。
75 75  
  76 +### Hermes Agent 运行时现状(手机 `~/.hermes/`,据 2026-06-24 一次性设备备份)
  77 +
  78 +> 备份本身**不进 git**(含真实 API key + 真实微信消息原文,已加进根 `.gitignore` 的 `/hermes_backup_*/`),看完建议删掉或挪出仓库。这里只摘录"对以后开发有用"的事实,原始内容不再保留引用路径。
  79 +
  80 +`phoneuse/android_mcp.py` 的真实消费方是**第三方框架 Hermes Agent**(Nous Research 出品,非本项目自研),跑在手机 Termux 里,靠 `~/.hermes/config.yaml` 的 `mcp_servers.android-phone` 一条配置连过来;驱动模型是 Kimi(`model.default: kimi-for-coding`,`base_url: api.kimi.com/coding`)。Hermes 自己又在 phoneuse 之外长出了一套 skills/plugins/cron,**会直接调用 phoneuse 的 MCP 工具**,值得记下来:
  81 +
  82 +- **`memory_graph.db` 确认在线增长**:备份快照里 1020 person / 1255 message / 518 vector,对比 `TASKS.md` 2026-06-16 审计时的 522/1205/510+——证明 `ingest_wechat_to_memory`/`embed_memory_messages` 这条链路在真实持续跑,不是一次性验证。
  83 +- **`wechat-image-sender` skill(2026-06-23 验证通过)补上了 phoneuse 自己没做的能力**:`send_wechat_message`/`mcp_android_phone_send_wechat_message` 只能发文字,发图片靠这个 skill 的 `am start -a android.intent.action.SEND -t image/png` 唤出微信"选择聊天"→OCR 找联系人(拼音兜底)→固定坐标 `(899, 2627)` 点发送,针对 1344×2992 屏幕全程验证可用。**以后要给 `wechat_send.py` 加发图能力,这条路子是现成验证过的,不用重新摸索**。该 skill 更早的笔记(`image_sending_limitations.md`)里提过想用 Frida bridge 做但因为"不在 Termux 里跑"放弃——这正是这次新增的 `frida_inspect_tools.py`/`start_frida_bridge.sh` 解决的那条链路,以后两边可以接上看看。
  84 +- **`wechat-group-digest` skill**:查 `EnMicroMsg.db` 群消息→提取公众号文章/讨论→Kimi 摘要→Pillow/GPT-Image-2 生成报纸风格信息图→调 `mcp_android_phone_send_wechat_message` 发文字摘要。绑了两个 cron job(每天 00:00 / 12:00),**截至备份时两个都报错失败**:`cannot import name 'env_float' from 'utils'`——hermes-agent 自身 Python 包版本问题,不是 phoneuse 代码的锅,升级 hermes-agent 应该能解,但别假设这两个 cron 在正常工作。
  85 +- **`feishu-lark` skill + `hermes-feishu` 插件**:飞书机器人通道(身份 "pixel phone agent"),跟微信是两条独立的消息平台,互不影响。
  86 +- **`VisualAgent` cron daemon**(每 5 分钟轮询 `/sdcard/VisualAgent/commands/` 执行 screenshot/tap/swipe/input/start_app):跟 phoneuse 自己的 `ui_control_tools.py` 是两套独立的 UI 自动化通道,目前没有合并,谁先谁后没有约定。
  87 +
  88 +> [!NOTE] 备份不完整
  89 +> 备份自带的 `manifest.json` 列了 5 个 skill(含 `screen-wake`、`android-visual-automation`),但备份目录里实际只有 3 个(`wechat-group-digest`/`wechat-image-sender`/`feishu-lark`)——别假设这份备份是手机上 `~/.hermes/` 的完整镜像。
  90 +
76 91 ## lifelog-recorder(Pixel 8 Pro 24/7 录音 + 本地中文 ASR + 本地 LLM,v0.8)
77 92  
78 93 > 完整接手地图、踩坑清单、命令速查见 `lifelog-recorder/HANDOFF.md`。本节只勒住整个项目的**架构骨架 + 关键决策来源**,不重复细节。
... ...