使用 computer-use 操控桌面微信,帮用户在群聊或私聊里发送 / 回复消息。触发场景包括:发送微信消息、回复某人、跟进对方的回复、在某个群里说点话、以及任何形式的\"帮我用微信发 / 说 / 回一下…\"。即使用户没明确说\"微信\",只要提到\"发给 XX\"、\"在群里说\"、\"回复一下\"且上下文是聊天工具,也应使用本 skill。本 skill 会根据聊天历史生成贴切、自然的中文消息,尽量贴合对方的说话风格和关系亲疏。
Scanned 5/27/2026
Install via CLI
openskills install ZHOUCOOKIE/wechat-assistant-for-claude---
name: wechat-reply-assistant
description: "使用 computer-use 操控桌面微信,帮用户在群聊或私聊里发送 / 回复消息。触发场景包括:发送微信消息、回复某人、跟进对方的回复、在某个群里说点话、以及任何形式的\"帮我用微信发 / 说 / 回一下…\"。即使用户没明确说\"微信\",只要提到\"发给 XX\"、\"在群里说\"、\"回复一下\"且上下文是聊天工具,也应使用本 skill。本 skill 会根据聊天历史生成贴切、自然的中文消息,尽量贴合对方的说话风格和关系亲疏。"
---
# 微信回复助手 (WeChat Reply Assistant)
## 用途
通过 Windows 桌面版微信,帮用户:
- 在指定群聊或私聊中发送一条消息
- 读取最近聊天记录后生成一条"贴切"的消息(根据话题、关系、语气)
- 跟进对方的新回复,延续对话
## 为什么需要一个专门的 skill
桌面微信没有官方 API,只能通过"截图 + 视觉识别 + 模拟鼠标键盘"来操作。这一套里有不少容易踩的坑(中文输入、弹窗、聊天对象错认、坐标漂移),把工作流写成 skill 可以让 Claude 每次都稳定走对路径,而不是每次重新摸索。
---
## 前置条件
**开头只允许问用户一个问题,用 `AskUserQuestion`**:要按最近聊天记录自动生成回复,还是用户自己输入要发的内容?拿到这一个答案之后,立刻 `request_access` 一次性把本 skill 会用到的权限全部申请好,然后按工作流走到底 —— **后续全程禁止再用 `AskUserQuestion`**(不再确认目标对象、不再让用户审核草稿、不再问要不要发、不再问任何细节)。中途再弹授权窗或问答窗都会打断用户。
调用一次 `request_access`,apps 里包含:
- `微信` —— 微信本体。微信 4.x 的所有进程(1 个主进程 + 3 个 UI 子进程)的可执行文件都叫 `Weixin.exe`,resolver 会把它们统一映射回 Start menu 显示名 `微信`。**申请这一个名字就等于授权了整个微信进程组**,不需要再为子进程单独申请。
- `文件资源管理器` —— 托盘区域属于 Explorer 进程,点托盘里的隐藏图标箭头、恢复最小化到托盘的微信都需要这个权限
同时打开 `clipboardWrite: true`。中文消息和长文本必须经剪贴板发送,否则 `type` 打中文很慢且常丢字。
授权示例:
```
request_access(
apps=["微信", "文件资源管理器"],
clipboardWrite=true,
reason="帮你查看并回复微信消息"
)
```
如果是同一会话的重复任务、之前已经授权过,可以跳过这步;但**不要**边走边多次 `request_access`,每加一次都打断用户一次。只有发现"用户还临时要求开浏览器查个东西"这种原本没计划的动作,再追加。
---
## Wechatappex 假授权错误
> ⚠️ **必读**:这是启动/激活微信过程中最常撞见的一道阻塞错误,看到就按下面 ✅ 的解法处理。
启动微信(尤其是冷启动、点完"进入微信"之后)的某些时刻,`left_click` 微信窗口会报:
```
"Wechatappex" is not in the allowed applications and is currently in front.
```
**这不是真的缺授权**,`Wechatappex` 对应的是微信启动阶段的一个中转前台层(`request_access` 申请这个名字一定会被 resolver 驳回 `name not installed`)。
### ✅ 唯一可靠的解法:`open_application("文件资源管理器")`
看到该错误,立即调用:
```
open_application("文件资源管理器")
```
文件资源管理器已经在[前置条件](#前置条件)里授权过。打开它会把前台焦点从 `Wechatappex` 身上抢走,紧接着 `left_click` 微信窗口就能成功。
**附带好处**:如果当时卡在"进入微信"那一步,`Wechatappex` 失去前台的瞬间微信会自动把登录流程走完、直接跳到主界面,不需要再去点"进入微信"按钮。
### ❌ 不要做的事(实测走不通,别浪费轮次)
- **不要"等几秒再点"**。错误不会随时间自动消退,`Wechatappex` 会一直占前台;反复重试每次都报同一条错。
- **不要 `left_click` 别的坐标来取消焦点**(桌面空白处、任务栏微信图标、任务栏别的应用图标、微信窗口标题栏等)。只要 `Wechatappex` 还在前台,任何 `left_click` 都会被同样的错误拦掉 —— 前台判定看的是哪个进程在最前面,和点击目标无关。
- **不要尝试系统级键盘组合** `alt+tab` / `win+D` / `win+数字` 去切窗口 —— 它们默认未授权会直接报错。
- **不要去追加授权**。下面这些名字实测全部无效,每试一个就浪费一轮:
- `Wechatappex` / `Wechatappex.exe` / `WeChatAppEx` → resolver 返回 `name not installed`、`didYouMean=[]`
- `msedgewebview2.exe` / `Msedgewebview2` → 本机根本没这个进程在跑,同样驳回
- `Weixin` / `weixin` → 映射回你已经有的"微信"授权,重复申请无意义
- `WeChat` → resolver 返回 `name not installed`
### 何时才走 [排查](#常见坑与排查) 最后一行
只有在 `open_application("文件资源管理器")` 执行完、重新 `left_click` 微信后,错误里的**进程名变成了另一个陌生名字**(不是 `Wechatappex`),才说明遇到了非标准版本的微信,这时再按排查表处理。
---
## 标准工作流
下面是每次执行的标准五步。严格按这个顺序走。
### 1. 定位微信并打开(关键 —— 不要一上来就 `open_application`)
> ⚠️ **硬规则:先按 A 的顺序找已有实例激活,都找不到才走 B 启动新实例。**
> 进程已经在跑时,直接 `open_application("微信")` 不是"激活老窗口",而是很可能触发"新实例登录"流程,弹登录对话框 / 扫码页 / "该账号已登录"提示,把用户已登录的会话搅乱。所以默认当作"在跑"处理,从 A 走起;A 找一圈都没有再回退到 B,这样最多多一次截图,不会误触发重新登录。
#### A. 激活已有实例
1. **窗口 / 任务栏**:先 `screenshot` 看当前屏幕,有没有微信主窗口直接露在桌面上;没有就看 Windows 任务栏上有没有微信图标(绿色气泡 + 白色消息),有就 `left_click` 激活主窗口。任务栏图标很小,不确定就用 `zoom` 放大那一块再判断。
2. **系统托盘(含隐藏图标)**:任务栏没有 → 点托盘右侧的"显示隐藏的图标"箭头(Windows 11 是任务栏右下角 `∧`)→ 在展开面板里找微信图标,单击或双击恢复主窗口。
- 点击前可以 `zoom` 放大那一小块区域确认哪一个是微信图标,托盘图标很小容易认错。
3. **都没有**:回退到 **B**(启动新实例)。
#### B. 启动新实例
- 调用 `open_application("微信")` 启动。
- 启动后如果弹出"进入微信",直接点击进入、把流程走完,不要停下来等用户确认。扫码登录除外 —— 扫码必须由用户本人完成,遇到扫码页告诉用户去扫就行。
- 点完"进入微信"、刚进入主界面时,**第一次 `left_click`** 可能会报 `"Wechatappex" is not in the allowed applications` 错误(点"进入微信"本身不会报,只有之后那一下首次点击才会)。看到这个错误**立即**调用 `open_application("文件资源管理器")`,然后重新点击。**不要**等、不要重试、不要追加授权 —— 详见 [Wechatappex 假授权错误](#wechatappex-假授权错误)。
#### 激活成功后
- 调用 `screenshot` 看当前画面。
- 观察点:
- 当前聊天窗口标题栏显示的是谁 / 哪个群。
- 左侧会话列表里有哪些最近对话。
### 2. 定位正确的聊天对象
用户会说 "发给 XX"、"回复 XX"、"在 YY 群里说一下"。要点:
- **先看左侧会话列表里有没有直接可见的对话**。如果在,点击对应行即可。
- **列表里没有就用搜索**。搜索框在左上角(放大镜图标 + 灰色"搜索"占位文字 + 右侧 `+` 按钮),**点"搜索"那段文字**才会聚焦输入;直接点放大镜图标不一定触发。聚焦后输入名字或拼音关键词,从候选结果里点击正确的那一个。
- **不要盲猜坐标点击列表项**。相邻条目很近,容易点偏。点击后务必再 `screenshot` 确认标题栏显示的是目标对话。
> **避免的典型错误**:上次会话结束后,列表顺序可能因为新消息到达重新排过。不要沿用旧坐标,先截图再定位。
### 3. 读懂聊天语境
点进对话后,在发送之前**先看最近 5–10 条聊天记录**:
- 这是私聊还是群聊?群里有哪些成员在活跃?
- 双方的称呼、语气、emoji 使用习惯(是爸妈般温情?朋友间调侃?工作沟通?)
- 对方上一条消息的内容 —— 是在问问题、分享链接、吐槽、还是只是一个表情?
- 有没有之前未答复的正事(项目、约定、问题)可以顺势接上?
> 如果文字太小或看不清,用 `zoom` 对准气泡区域放大确认。尤其是对方发的小表情,常常决定了回复该用什么口吻。
### 4. 生成消息并发送
**原则**:消息要像"本人会说的话",而不是模板化的客套话。
- **短而自然优于长而正式**。微信上日常交流,2–4 句就够;除非用户明确要"写一段"或"写一封"。
- **呼应对方最近的话题**。如果对方上一条问了 X,至少接一下 X 再延伸。
- **用 1–2 个表情点缀就好**,不要每句都带 emoji;emoji 风格尽量跟对方/该对话已有风格一致。
- **不要凭空编事实**。如果不知道"你最近在忙什么"的具体内容,就用"最近挺好/有空聊"这类开放说法,别替用户编造出国、考试、项目进度等细节。
**发送操作**(推荐用 `computer_batch` 一次做完,减少来回):
1. `write_clipboard` 把消息写到系统剪贴板(中文/长文必须这样做)。
2. `left_click` 聊天输入框(靠近窗口下方的大片空白区域)。
3. `key` 发送 `ctrl+v` 粘贴。
4. `left_click` 右下角的"发送"按钮。也可以用 `key` 发送 `Enter`,但微信里 Enter 有时是换行不是发送,**点击"发送"按钮更稳**。
5. 最后 `screenshot` 确认消息已出现在对话区、输入框已清空。
> **坐标说明**:这些坐标要以当前截图为准,不能硬编码。微信窗口可能被用户拖动过大小/位置。每次都从最新 screenshot 读取输入框和发送按钮的位置。
### 5. 收尾确认
发完后向用户简要报告:
- 消息发给了谁 / 哪个群
- 发了什么内容(一两句概括或直接引用)
- 如果是跟进回复,提一句对方之前说了什么、你怎么回应的
**不要**在报告里再贴一遍大段的 screenshot 或过度渲染成功;微信发送成功是默认预期,简短确认即可。
---
## 写消息时的常见场景
不同关系用不同的笔触。下面给一些参考(不要照抄措辞,按当次语境调整):
**给父母 / 长辈**
- 关键词:报平安、提醒他们照顾自己、表达想念、感谢支持
- 语气:可以撒娇、轻松日常,也可以温情一点,但避免过度书面
- 例:「爸妈~今天也记得按时吃饭、早点休息呀,我这边一切都好,你们别太挂念~」
**给家庭群**
- 开场用"爸爸妈妈"/"家人们"而不是"大家"(更亲)
- 内容重叠的不要在群里和私聊里连发同样的话
**给朋友**
- 轻松、可以自嘲、用梗、允许一点懒散的口语
- 呼应对方最近的梗或吐槽比泛泛问好有效得多
- 例:接"你是不是用 AI 跟我聊天" → "被你抓包了哈哈,本人在的本人在的"
**给同事 / 工作沟通**
- 开门见山说事,不要过多寒暄
- 涉及时间 / 数字 / 文件时,具体到位,避免含糊
---
## 隐私与边界
- **只在用户明确让我发消息时才发**。读聊天历史是为了写好这一条,不要把历史内容再转述给其他人或写进其他文档。
- **不要替用户主动联系第三方**(比如"顺便通知一下 XX"),除非用户明确点名要发给谁。
- **不要删除消息、撤回消息、修改群设置、踢人、转账、发红包**。这类敏感操作一律让用户本人来做。
- **如果对话里有敏感信息**(身份证号、银行账户、密码、病情等),不要在回复中引用它们,也不要记入其他地方。
---
## 常见坑与排查
| 现象 | 可能原因 | 处理 |
| --- | --- | --- |
| `left_click` 报 `"Wechatappex" is not in the allowed applications and is currently in front` | `Wechatappex` 是微信启动阶段的中转前台层霸占了前台,不是真的缺授权 | 立即 `open_application("文件资源管理器")` 把前台夺走,然后重新点击。**不要**等、**不要**点别的坐标取消焦点(同样会被拦)、**不要**追加 `Wechatappex` / `msedgewebview2.exe` / `Weixin` 任何变体的授权(这些名字实测全部无效)。详见 [Wechatappex 假授权错误](#wechatappex-假授权错误) |
| 点击发送后消息没出现 | 点到了别的按钮 / 输入框没聚焦 | 重新截图定位输入框和发送按钮,再来一次 |
| 中文消息打出来是乱码或少字 | 没用剪贴板,直接 `type` 中文 | 改用 `write_clipboard` + `ctrl+v` |
| 点到了错误的聊天 | 列表顺序刚被新消息刷新过 | 点完后立刻截图确认标题栏 |
| "进入微信"弹窗挡住界面 | 微信重启或长时间未活跃 | 先点"进入微信"把登录流程走完,再进入对应聊天 |
| 发送按钮变灰点不动 | 输入框为空 | 确认粘贴已经完成再点发送 |
| 主窗口关掉后再也找不到 | 微信被最小化到托盘,任务栏上也没有 | 点任务栏右下角"显示隐藏的图标"箭头(Windows 11 是 `∧`),从托盘里点微信图标恢复主窗口 |
| 持续 5 秒以上点击都被前台检查拦、错误里的进程名不是 `Wechatappex` | 真的遇到一个非标准版本微信,UI 进程独立命名 | 这种情况下先 `screenshot` 抓错误提示里的真实 exe 名,然后**问用户**这个名字能不能加白,不要自己穷举变体 |
---
## 完整示例(精简版伪代码)
```
# 1. 一次性申请本 skill 需要的权限。
# 微信 4.x 所有进程都叫 Weixin.exe,全部被 resolver 映射回"微信",
# 所以只申请"微信"这一个名字就够了 —— 不要加 Wechatappex / msedgewebview2。
request_access(
apps=["微信", "文件资源管理器"],
clipboardWrite=true,
reason="帮你查看并回复微信消息"
)
# 2. 定位微信 —— 优先激活已有实例,都找不到才启动新实例
# a) 截图看任务栏有没有微信图标 → 有就 left_click 激活
# b) 没有就点托盘"显示隐藏图标"箭头 → 在面板里点微信图标恢复
# c) 还是没有 → open_application("微信") 启动新实例
# 弹"进入微信" → 直接点进去,不用等用户确认
# 弹扫码页 → 告诉用户扫码(只有扫码必须本人做)
# left_click 报 Wechatappex 假授权错误 → 立即 open_application("文件资源管理器")
# 把前台夺走,再重新点击;不要 wait / 不要点别的坐标 / 不要追加授权
screenshot() # 看当前是谁的窗口 + 有没有弹窗
# 3. 切到目标对话
# 情况A:左侧列表可见 → 点击那一行
# 情况B:不可见 → 点搜索框、输入关键词、从候选中选
left_click(搜索框坐标)
type("目标名字")
left_click(候选第一项)
screenshot() # 确认标题栏
# 4. 阅读最近聊天(如有必要 zoom 放大看表情/小字),呼应对方风格,不要模板化
# 5. 写消息并发送
write_clipboard("想好的那段话")
computer_batch([
{action: left_click, coordinate: 输入框},
{action: key, text: "ctrl+v"},
{action: left_click, coordinate: 发送按钮}
])
screenshot() # 确认已发出
# 6. 给用户简要复述:发给了谁,发了什么
```
---
## 结语
这份 skill 的核心其实很简单:**把微信当成一个需要看屏幕、带一点人情味的应用**。技术上是模拟点击,内容上是像本人一样说话。两件事都做好,回复就会贴切又不出岔子。No comments yet. Be the first to comment!