jimliu/baoyu-skills6 files

Baoyu Wechat Summary

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.

Specification
Skill ID
jimliu/baoyu-skills/baoyu-wechat-summary
Publisher
jimliu
Repository
baoyu-skills
Installs
0
Files
6
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

jimliu/baoyu-skills/baoyu-wechat-summaryInstalls these files
  • EXTEND.md.example
  • SKILL.md
  • references/group-memory.md
  • references/output-formats.md
  • references/profiles.md
  • references/setup.md

What this skill tells the agent

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环境检查(wx-cli 安装/权限/初始化)、wx-cli 命令速查、排障手册新环境首次运行,或任何 wx 命令失败时
references/output-formats.md两版摘要的 Section 顺序、格式与内容规范、输出骨架、自检清单Round 2 动笔前
references/profiles.md画像文件格式、更新规则、隐私红线、回溯流程Step 3.7 / 8.5 / Step 9
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(完整环境检查、wx-cli 命令速查、排障手册),停在第一个失败项并给用户确切的修复命令。绝不自动安装、绝不替用户跑 `sudo`。

Preferences (EXTEND.md)

Check EXTEND.md in priority order — the first one found wins:

PriorityPathScope
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.mdXDG
3$HOME/.baoyu-skills/baoyu-wechat-summary/EXTEND.mdUser home
ResultAction
FoundRead, parse, apply. On first use in session, briefly remind: "Using preferences from [path]. Edit it to change defaults."
Not foundMUST 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.

KeyTypeDefaultPurpose
self_wxidstring(required)The owning account's wxid. Messages whose from_wxid matches this are attributed to the user.
self_displaystring(required)Display name to substitute for the user's own messages in digest text.
default_versionnormal / roast / bothnormalWhich version(s) to generate when the user doesn't say otherwise.
default_time_rangestring (e.g. 7d, 24h, 1d)(none)Default range when the user omits time and there's no incremental anchor.
data_rootpath{project_root}/wechatOverride where digest folders live.
bot_aliasescomma-separated stringsbot, 精华botNames 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.

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 with wx contacts --query "<own nickname>", or by inspecting any of their own sent messages in wx sessions --json
  • self_display (e.g., 宝玉) — how they want their messages attributed
  • default_version — pick one of normal / roast / both
  • data_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.json for this group, use last_digest.last_message_time as the start
  • No time specified → incremental mode. If no history.json exists yet, fall back to default_time_range from EXTEND.md if set, else last 24 hours.
  • Version(s) to generate:
  • Start from default_version in EXTEND.md.
  • User request overrides: keywords "毒舌"/"roast"/"挑衅"/"再来个毒的"/"sass" → force include_roast=true. Keywords "只要正经的"/"normal only"/"不要毒舌" → force include_normal=true, include_roast=false. "都来一份"/"两个版本都要"/"both" → both.
  • At least one of include_normal/include_roast must 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 字段标识群主;有则以此为准

Use this skill in a project

Open any RiverX project, search the Skills panel for jimliu/baoyu-skills/baoyu-wechat-summary, and install it in one click.

Use this skill