From 2b2b01e0275294968b759b0a94ea3d51d0dcf938 Mon Sep 17 00:00:00 2001 From: yibo Date: Wed, 24 Jun 2026 17:33:39 +0800 Subject: [PATCH] docs(phoneuse): 记录 Hermes Agent 手机端运行时现状 + 防止设备备份入库 --- .gitignore | 3 +++ CLAUDE.md | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 0 deletions(-) diff --git a/.gitignore b/.gitignore index fdd9f7d..35fa748 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ node_modules/ # Environment (secrets) .env +# Device backups (real secrets + real personal data — never commit) +/hermes_backup_*/ + # OS .DS_Store Thumbs.db diff --git a/CLAUDE.md b/CLAUDE.md index 2f176c4..6bfb140 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -73,6 +73,21 @@ Pixel 上微信发送/跟踪的落地,纯设备内运行(不依赖 Mac): - 真机连续性差:开发时常掉 USB,涉及真机的验证要先确认 `adb devices` 能看到设备。 - 微信相关的 Frida/A11y 经验跟 `wechat_plain` 是分开积累的——`wechat_plain` 已验证过 Frida daemon 注入微信大 bundle 会触发反调试崩溃(见上文 §wechat_plain);`phoneuse` 走的是 USB attach 而非常驻 daemon,崩溃模式不一定一样,但动手前先看那段记录,别重新踩同一个坑。 +### Hermes Agent 运行时现状(手机 `~/.hermes/`,据 2026-06-24 一次性设备备份) + +> 备份本身**不进 git**(含真实 API key + 真实微信消息原文,已加进根 `.gitignore` 的 `/hermes_backup_*/`),看完建议删掉或挪出仓库。这里只摘录"对以后开发有用"的事实,原始内容不再保留引用路径。 + +`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 工具**,值得记下来: + +- **`memory_graph.db` 确认在线增长**:备份快照里 1020 person / 1255 message / 518 vector,对比 `TASKS.md` 2026-06-16 审计时的 522/1205/510+——证明 `ingest_wechat_to_memory`/`embed_memory_messages` 这条链路在真实持续跑,不是一次性验证。 +- **`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` 解决的那条链路,以后两边可以接上看看。 +- **`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 在正常工作。 +- **`feishu-lark` skill + `hermes-feishu` 插件**:飞书机器人通道(身份 "pixel phone agent"),跟微信是两条独立的消息平台,互不影响。 +- **`VisualAgent` cron daemon**(每 5 分钟轮询 `/sdcard/VisualAgent/commands/` 执行 screenshot/tap/swipe/input/start_app):跟 phoneuse 自己的 `ui_control_tools.py` 是两套独立的 UI 自动化通道,目前没有合并,谁先谁后没有约定。 + +> [!NOTE] 备份不完整 +> 备份自带的 `manifest.json` 列了 5 个 skill(含 `screen-wake`、`android-visual-automation`),但备份目录里实际只有 3 个(`wechat-group-digest`/`wechat-image-sender`/`feishu-lark`)——别假设这份备份是手机上 `~/.hermes/` 的完整镜像。 + ## lifelog-recorder(Pixel 8 Pro 24/7 录音 + 本地中文 ASR + 本地 LLM,v0.8) > 完整接手地图、踩坑清单、命令速查见 `lifelog-recorder/HANDOFF.md`。本节只勒住整个项目的**架构骨架 + 关键决策来源**,不重复细节。 -- libgit2 0.21.4