Receber por email
← Voltar para o catálogo

baoyu-wechat-summary

Esta skill resume os destaques de conversas em grupos do WeChat em um resumo estruturado usando o binário wx-cli. Ela gera um resumo normal por padrão, com uma versão "ácida" (毒舌) opcional, e mantém histórico por grupo e perfis de usuário com privacidade integrada.

22.1kestrelas
Atualizado há 4 meses

Ver no GitHub ↗

Como adicionar

/plugin marketplace add JimLiu/baoyu-skills

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Para o autor da skill

Cole no README do seu repo

Mostra que sua skill está catalogada na Skillteca, gera backlink e tráfego rastreável.

[![Skillteca](https://www.skillteca.com.br/api/badge/baoyu-wechat-summary/svg)](https://www.skillteca.com.br/skills/baoyu-wechat-summary)

Skills relacionadas

Ver todas de Desenvolvimento →

Alerta por categoria

Receba novas skills de Desenvolvimento toda segunda

1 email curto, só com as skills novas de Desenvolvimento. 4 minutos de leitura, sem spam, cancela com 1 clique.

Você confirma o email no primeiro envio. Sem spam. Cancela com 1 clique.

Ler descrição completa

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.

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

Before invoking the workflow, verify the environment. Run these checks in order; stop at the first failure and surface the exact next command the user needs.

  1. wx-cli installed — run wx --version. If missing, tell the user to install it themselves (npm install -g @jackwener/wx-cli or use one of the alternatives at https://github.com/jackwener/wx-cli). Do NOT auto-install — this repo forbids piped/silent installs.
  2. ~/.wx-cli directory owned by the current user — sudo wx init historically chowned this directory to root, which breaks every subsequent non-sudo wx call. Check:

``bash ls -la ~/.wx-cli/ 2>/dev/null | head -5 ` If the directory exists but the owner is root (or anything other than $(whoami)), tell the user to repair it themselves: `bash sudo chown -R $(whoami) ~/.wx-cli sudo rm -f ~/.wx-cli/daemon.pid ~/.wx-cli/daemon.sock wx daemon start ` The skill should NOT run sudo` on the user's behalf.

  1. wx-cli initialized — wx sessions should return data. If it fails with "no keys" / "init required", instruct the user to run wx init while WeChat is running (on macOS, codesign --force --deep --sign - /Applications/WeChat.app first). Prefer non-sudo init; only fall back to sudo wx init if the user's wx-cli version requires it — and warn them that they'll need step 2's chown after.
  2. WeChat 4.x running and logged in — required for the daemon to find data files.

Preferences (EXTEND.md)

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

| 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 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 — replac

Compartilhar X LinkedIn