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