# Wechat Reply Assistant

> 使用 computer-use 操控桌面微信，帮用户在群聊或私聊里发送 / 回复消息。触发场景包括：发送微信消息、回复某人、跟进对方的回复、在某个群里说点话、以及任何形式的\"帮我用微信发 / 说 / 回一下…\"。即使用户没明确说\"微信\"，只要提到\"发给 XX\"、\"在群里说\"、\"回复一下\"且上下文是聊天工具，也应使用本 skill。本 skill 会根据聊天历史生成贴切、自然的中文消息，尽量贴合对方的说话风格和关系亲疏。

- **Type:** Skill
- **Install:** `agentstack add skill-zhoucookie-wechat-assistant-for-claude-wechat-assistant-for-claude`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [ZHOUCOOKIE](https://agentstack.voostack.com/s/zhoucookie)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [ZHOUCOOKIE](https://github.com/ZHOUCOOKIE)
- **Source:** https://github.com/ZHOUCOOKIE/wechat-assistant-for-claude

## Install

```sh
agentstack add skill-zhoucookie-wechat-assistant-for-claude-wechat-assistant-for-claude
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# 微信回复助手 (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 的核心其实很简单：**把微信当成一个需要看屏幕、带一点人情味的应用**。技术上是模拟点击，内容上是像本人一样说话。两件事都做好，回复就会贴切又不出岔子。

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [ZHOUCOOKIE](https://github.com/ZHOUCOOKIE)
- **Source:** [ZHOUCOOKIE/wechat-assistant-for-claude](https://github.com/ZHOUCOOKIE/wechat-assistant-for-claude)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-zhoucookie-wechat-assistant-for-claude-wechat-assistant-for-claude
- Seller: https://agentstack.voostack.com/s/zhoucookie
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
