This source did not publish a separate summary. Review SKILL.md before using the skill.
SKILL.md
Post to WeChat Official Account
Language
Match user's language: Respond in the same language the user uses. If user writes in Chinese, respond in Chinese. If user writes in English, respond in English.
Script Directory
Agent Execution: Determine this SKILL.md directory as {baseDir}, then use {baseDir}/scripts/<name>.ts. Resolve ${BUN_X} runtime: if bun installed → bun; if npx available → npx -y bun; else suggest installing bun.
Script
Purpose
scripts/wechat-browser.ts
Image-text posts (图文)
scripts/wechat-article.ts
Article posting via browser (文章)
scripts/wechat-api.ts
Article posting via API (文章)
scripts/md-to-wechat.ts
Markdown → WeChat-ready HTML with image placeholders
scripts/check-permissions.ts
Verify environment & permissions
Preferences (EXTEND.md)
Check EXTEND.md existence (priority order):
# macOS, Linux, WSL, Git Bash
test -f .baoyu-skills/baoyu-post-to-wechat/EXTEND.md && echo "project"
test -f "${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-post-to-wechat/EXTEND.md" && echo "xdg"
test -f "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md" && echo "user"
# PowerShell (Windows)
if (Test-Path .baoyu-skills/baoyu-post-to-wechat/EXTEND.md) { "project" }
$xdg = if ($env:XDG_CONFIG_HOME) { $env:XDG_CONFIG_HOME } else { "$HOME/.config" }
if (Test-Path "$xdg/baoyu-skills/baoyu-post-to-wechat/EXTEND.md") { "xdg" }
if (Test-Path "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md") { "user" }
┌───────────┬───────────────────────────────────────────────────────────────────────────┐
│ Result │ Action │
├───────────┼───────────────────────────────────────────────────────────────────────────┤
│ Found │ Read, parse, apply settings │
├───────────┼───────────────────────────────────────────────────────────────────────────┤
│ Not found │ Run first-time setup (references/config/first-time-setup.md) → Save → Continue │
└───────────┴───────────────────────────────────────────────────────────────────────────┘
EXTEND.md supports managing multiple WeChat Official Accounts. When accounts: block is present, each account can have its own credentials, Chrome profile, and default settings.
Per-account keys (can be set per-account or globally as fallback):
default_publish_method, default_author, need_open_comment, only_fans_can_comment, app_id, app_secret, chrome_profile_path
Global-only keys (always shared across accounts):
default_theme, default_color
Account Selection (Step 0.5)
Insert between Step 0 and Step 1 in the Article Posting Workflow:
if no accounts block:
→ single-account mode (current behavior)
elif accounts.length == 1:
→ auto-select the only account
elif --account <alias> CLI arg:
→ select matching account
elif one account has default: true:
→ pre-select, show: "Using account: <name> (--account to switch)"
else:
→ prompt user:
"Multiple WeChat accounts configured:
1) <name1> (<alias1>)
2) <name2> (<alias2>)
Select account [1-N]:"
Credential Resolution (API Method)
For a selected account with alias {alias}:
app_id / app_secret inline in EXTEND.md account block
Env var WECHAT_{ALIAS}_APP_ID / WECHAT_{ALIAS}_APP_SECRET (alias uppercased, hyphens → underscores)
.baoyu-skills/.env with prefixed key WECHAT_{ALIAS}_APP_ID
~/.baoyu-skills/.env with prefixed key
Fallback to unprefixed WECHAT_APP_ID / WECHAT_APP_SECRET
WeChat API credentials not found.
To obtain credentials:
1. Visit https://mp.weixin.qq.com
2. Go to: 开发 → 基本配置
3. Copy AppID and AppSecret
Where to save?
A) Project-level: .baoyu-skills/.env (this project only)
B) User-level: ~/.baoyu-skills/.env (all projects)
After location choice, prompt for values and write to .env:
If still missing, stop and request a cover image before publishing.
Step 4: Publish to WeChat
CRITICAL: Publishing scripts handle markdown conversion internally. Do NOT pre-convert markdown to HTML — pass the original markdown file directly. This ensures the API method renders images as <img> tags (for API upload) while the browser method uses placeholders (for paste-and-replace workflow).
Markdown citation default:
For markdown input, ordinary external links are converted to bottom citations by default.
Use --no-cite only if the user explicitly wants to keep ordinary external links inline.
Existing HTML input is left as-is; no extra citation conversion is applied.