baoyu-wechat-summary Checked
Installation
Copy the prompt below and send it to your AI assistant (e.g. Claude Code) — it will follow the instructions and install automatically.
Install the "baoyu-wechat-summary" skill by following the instructions at https://skill123.me/install/baoyu-wechat-summary.
Run in your terminal — downloads and installs to ~/.claude/skills/.
curl -fsSL https://skill123.me/install/baoyu-wechat-summary.sh | bash
Download the zip and extract it into your skills directory (e.g. ~/.claude/skills/), then restart your session.
⬇ Download v1.0.0 · 35 KBNot live-tested yet — this skill is rated on static analysis only.
About this skill
Summarizes WeChat group chat highlights into a structured digest using the local wx-cli binary (https://github.com/jackwener/wx-cli). Generates a normal digest by default; a roast (毒舌) version is opt-in. Maintains per-group history (history.json + history-digests.jsonl), per-user profiles, and per-group fact memory (memory.md) across runs, with privacy guardrails baked in. Use when the user asks to "总结群聊", "群聊精华", "群聊摘要", "summarize group chat", "group chat digest", mentions a WeChat group name with a time range, says "帮我看看 XX 群最近聊了什么", "XX 群有什么值得看的", or asks to "回溯画像" / "初始化画像" / "backfill profiles". Adds the roast version when the user says "毒舌版", "roast 版", "再来个毒舌的", or similar.
WeChat Group Summary
群聊精华提取专家。把零散的微信群聊记录提炼成结构化、可读性强的简报,并维护跨次运行的群聊历史与群友画像。底层依赖外部 wx-cli 二进制(wx 命令),不打包脚本。
> **⚠️ Sandbox restriction**
>
> wx-cli reads from ~/.wx-cli/ (config, cache, daemon socket) and from WeChat's data directory (~/Library/Containers/com.tencent.xinWeChat/ on macOS). Both paths are outside Claude Code's default sandbox. Every wx command in this skill needs to run with dangerouslyDisableSandbox: true from the start — don't waste a sandbox attempt first. The user can use /sandbox to view/edit restrictions.
Documentation
Summarizes WeChat group chat highlights into a structured digest using the local wx-cli binary (https://github.com/jackwener/wx-cli). Generates a normal digest by default; a roast (毒舌) version is opt-in. Maintains per-group history (history.json + history-digests.jsonl), per-user profiles, and per-group fact memory (memory.md) across runs, with privacy guardrails baked in. Use when the user asks to "总结群聊", "群聊精华", "群聊摘要", "summarize group chat", "group chat digest", mentions a WeChat group name with a time range, says "帮我看看 XX 群最近聊了什么", "XX 群有什么值得看的", or asks to "回溯画像" / "初始化画像" / "backfill profiles". Adds the roast version when the user says "毒舌版", "roast 版", "再来个毒舌的", or similar.
WeChat Group Summary
群聊精华提取专家。把零散的微信群聊记录提炼成结构化、可读性强的简报,并维护跨次运行的群聊历史与群友画像。底层依赖外部 wx-cli 二进制(wx 命令),不打包脚本。
> **⚠️ Sandbox restriction**
>
> wx-cli reads from ~/.wx-cli/ (config, cache, daemon socket) and from WeChat's data directory (~/Library/Containers/com.tencent.xinWeChat/ on macOS). Both paths are outside Claude Code's default sandbox. Every wx command in this skill needs to run with dangerouslyDisableSandbox: true from the start — don't waste a sandbox attempt first. The user can use /sandbox to view/edit restrictions.
References(按需加载)
本文件只保留工作流骨架;细节拆在 references/ 下,**执行到对应步骤时再读,不要一开始全部读入**:
| 参考文件 | 内容 | 何时读 |
|---------|------|-------|
| references/setup.md (references/setup.md) | 环境检查(wx-cli 安装/权限/初始化)、wx-cli 命令速查、排障手册 | 新环境首次运行,或任何 wx 命令失败时 |
| references/output-formats.md (references/output-formats.md) | 两版摘要的 Section 顺序、格式与内容规范、输出骨架、自检清单 | Round 2 动笔前 |
| references/profiles.md (references/profiles.md) | 画像文件格式、更新规则、隐私红线、回溯流程 | Step 3.7 / 8.5 / Step 9 |
| references/group-memory.md (references/group-memory.md) | 群级事实记忆的写入门槛、防注入、格式 | Step 8.6 |
User Input Tools
When this skill prompts the user, follow this tool-selection rule (priority order):
1. **Prefer built-in user-input tools** exposed by the current agent runtime — e.g., AskUserQuestion, request_user_input, clarify, ask_user, or any equivalent.
2. **Fallback**: if no such tool exists, emit a numbered plain-text message and ask the user to reply with the chosen number/answer for each question.
3. **Batching**: if the tool supports multiple questions per call, combine all applicable questions into a single call; if only single-question, ask them one at a time in priority order.
Concrete AskUserQuestion references below are examples — substitute the local equivalent in other runtimes.
Prerequisites
快速验证环境:wx --version 有输出且 wx sessions 返回数据即可继续。任何一步失败,或是首次在新环境运行 → 读 references/setup.md (references/setup.md)(完整环境检查、wx-cli 命令速查、排障手册),停在第一个失败项并给用户确切的修复命令。**绝不自动安装、绝不替用户跑 sudo。**
Preferences (EXTEND.md)
Check EXTEND.md in priority order — the first one found wins:
View full documentation
| Priority | Path | Scope |
|----------|------|-------|
| 1 | .baoyu-skills/baoyu-wechat-summary/EXTEND.md (relative to project root) | Project |
| 2 | ${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-wechat-summary/EXTEND.md | XDG |
| 3 | $HOME/.baoyu-skills/baoyu-wechat-summary/EXTEND.md | User home |
| Result | Action |
|--------|--------|
| Found | Read, parse, apply. On first use in session, briefly remind: "Using preferences from [path]. Edit it to change defaults." |
| Not found | **MUST** run first-time setup (BLOCKING) before generating any digest — do NOT silently use defaults. |
### Supported keys
EXTEND.md is plain text with key: value or key=value lines, # for comments, case-insensitive keys.
| Key | Type | Default | Purpose |
|-----|------|---------|---------|
| self_wxid | string | (required) | The owning account's wxid. Messages whose from_wxid matches this are attributed to the user. |
| self_display | string | (required) | Display name to substitute for the user's own messages in digest text. |
| default_version | normal / roast / both | normal | Which version(s) to generate when the user doesn't say otherwise. |
| default_time_range | string (e.g. 7d, 24h, 1d) | (none) | Default range when the user omits time and there's no incremental anchor. |
| data_root | path | {project_root}/wechat | Override where digest folders live. |
| bot_aliases | comma-separated strings | bot, 精华bot | Names that trigger the 「@bot 答疑」 section. A message containing @<alias> (case-insensitive) is treated as a question/request aimed at the digest bot. Pick names that do NOT match any real group member or existing bot, to avoid ambiguity. |
A starter template lives at EXTEND.md.example (EXTEND.md.example).
### First-Time Setup (BLOCKING)
If no EXTEND.md is found, do NOT silently proceed.
**Step A — Try to auto-discover self_wxid and self_display first.** Run (in order, stop at the first that succeeds):
# 1. If wx-cli exposes a whoami, use it
wx whoami --json 2>/dev/null
# 2. Otherwise, find self-sent messages in recent sessions
wx sessions --json --limit 20 2>/dev/null
For option 2, scan the sessions for any private/group thread the user has sent into and read one of their own from_wxid / from_nickname pairs. If you can confidently pre-fill both values, use them as defaults in the question below; otherwise leave the fields blank for the user to fill in.
**Step B — Confirm with one AskUserQuestion call (batched), pre-filling whatever auto-discovery found:**
self_wxid(e.g.,wxid_abc123) — fall-back hint: the user can find it withwx contacts --query "<own nickname>", or by inspecting any of their own sent messages inwx sessions --jsonself_display(e.g.,宝玉) — how they want their messages attributeddefault_version— pick one ofnormal/roast/bothdata_root— where digest folders live. Default:{project_root}/wechat. Enter a custom absolute path (e.g.~/Documents/wechat-digests) or leave blank for default.- Save location — pick one of project / XDG / home
Write EXTEND.md to the chosen path. If the user provided a non-default data_root, include it as an uncommented line; otherwise omit it (the default applies automatically). Confirm "Preferences saved to [path]. Edit it any time to change defaults.", then continue with the digest workflow.
Workflow
### Step 1: Parse the user's request
Extract:
- **Group name** (or partial name for fuzzy matching)
- **Time range** — interpret flexibly:
- "最近 1 天" / "今天" / "last 24 hours" → 1 day
- "最近 3 天" → 3 days
- "最近 7 天" / "这周" → 7 days
- "最近 30 天" / "最近一个月" → 30 days
- "某天" (e.g. "3 月 5 号") → that specific date
- "某天到某天" (e.g. "3 月 1 号到 3 月 5 号") → date range
- "从上次开始" / "继续" / "接着上次" / "since last" → **incremental mode**: read
history.jsonfor this group, uselast_digest.last_message_timeas the start - No time specified → **incremental mode**. If no
history.jsonexists yet, fall back todefault_time_rangefrom EXTEND.md if set, else last 24 hours. - **Version(s) to generate**:
- Start from
default_versionin EXTEND.md. - User request overrides: keywords "毒舌"/"roast"/"挑衅"/"再来个毒的"/"sass" → force
include_roast=true. Keywords "只要正经的"/"normal only"/"不要毒舌" → forceinclude_normal=true, include_roast=false. "都来一份"/"两个版本都要"/"both" → both. - At least one of
include_normal/include_roastmust end up true.
Convert relative ranges into absolute --since YYYY-MM-DD --until YYYY-MM-DD pairs using today's local date.
### Step 2: Find the group + resolve folder path
wx contacts --query "<group_name>" --json
Filter for entries whose username ends in @chatroom. If multiple groups match, use AskUserQuestion to disambiguate. If none match, fall back to wx sessions --json and search there before asking the user.
Once resolved, compute the folder path:
{data_root}/{group_id}-{sanitized_group_name}/
where data_root is from EXTEND.md (default {project_root}/wechat).
**Sanitize the group name** — replace any of / \ : * ? " < > | NUL and control characters with _. Trim trailing dots and whitespace. Don't strip emoji or Chinese characters.
**Group-rename detection**: list existing folders under {data_root}/ and find any folder whose name starts with {group_id}-. If one exists but the suffix differs (group was renamed), rename the existing folder to the new {group_id}-{sanitized_new_name} form. If a target with the new name already exists (rare), keep both and prefer the existing one for this run.
### Step 2.5: Look up the group owner(群主)
群主是谁**必须有据可查**,不能凭历史摘要、群友玩笑或印象推断(群主可能换届,历史摘要里的说法会过期):
wx members "<group_name_or_id>" --json
- 检查输出中是否有 owner / role 字段标识群主;有则以此为准
- 如果 wx-cli 版本不暴露群主信息,则
Score breakdown
Assessment methodology
Version history
Imported from JimLiu/baoyu-skills@main
