Canghe Post To Wechat
Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP. Supports article posting (文章) with HTML, markdown, or plain text input, and image-text posting (贴图, formerly 图文) with multiple images. Use when user mentions "发布公众号", "post to wechat", "微信公众号", or "贴图/图文/文章".
- Skill ID
- freestylefly/canghe-skills/canghe-post-to-wechat
- Publisher
- freestylefly
- Repository
- canghe-skills
- Installs
- 0
- Files
- 30
- Synced
- Sep 23, 2026
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.
freestylefly/canghe-skills/canghe-post-to-wechatInstalls these files- SKILL.md
- references/article-posting.md
- references/config/first-time-setup.md
- references/image-text-posting.md
- scripts/cdp.ts
- scripts/check-permissions.ts
- scripts/copy-to-clipboard.ts
- scripts/md-to-wechat.ts
- scripts/md/LICENSE
- scripts/md/extensions/alert.ts
- scripts/md/extensions/footnotes.ts
- scripts/md/extensions/index.ts
- scripts/md/extensions/infographic.ts
- scripts/md/extensions/katex.ts
- scripts/md/extensions/markup.ts
- scripts/md/extensions/plantuml.ts
- scripts/md/extensions/ruby.ts
- scripts/md/extensions/slider.ts
- scripts/md/extensions/toc.ts
- scripts/md/render.ts
- scripts/md/themes/base.css
- scripts/md/themes/default.css
- scripts/md/themes/grace.css
- scripts/md/themes/simple.css
- scripts/md/utils/languages.ts
- scripts/paste-from-clipboard.ts
- scripts/wechat-agent-browser.ts
- scripts/wechat-api.ts
- scripts/wechat-article.ts
- scripts/wechat-browser.ts
What this skill tells the agent
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 SKILL_DIR, then use ${SKILL_DIR}/scripts/<name>.ts.
| 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/check-permissions.ts | Verify environment & permissions |
Preferences (EXTEND.md)
Use Bash to check EXTEND.md existence (priority order):
# Check project-level first
test -f .canghe-skills/canghe-post-to-wechat/EXTEND.md && echo "project"
# Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)
test -f "$HOME/.canghe-skills/canghe-post-to-wechat/EXTEND.md" && echo "user"┌────────────────────────────────────────────────────────┬───────────────────┐ │ Path │ Location │ ├────────────────────────────────────────────────────────┼───────────────────┤ │ .canghe-skills/canghe-post-to-wechat/EXTEND.md │ Project directory │ ├────────────────────────────────────────────────────────┼───────────────────┤ │ $HOME/.canghe-skills/canghe-post-to-wechat/EXTEND.md │ User home │ └────────────────────────────────────────────────────────┴───────────────────┘
┌───────────┬───────────────────────────────────────────────────────────────────────────┐ │ Result │ Action │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ Found │ Read, parse, apply settings │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ Not found │ Run first-time setup (references/config/first-time-setup.md) → Save → Continue │ └───────────┴───────────────────────────────────────────────────────────────────────────┘
EXTEND.md Supports: Default theme | Default publishing method (api/browser) | Default author | Default open-comment switch | Default fans-only-comment switch | Chrome profile path
First-time setup: references/config/first-time-setup.md
Minimum supported keys (case-insensitive, accept 1/0 or true/false):
| Key | Default | Mapping |
|---|---|---|
default_author | empty | Fallback for author when CLI/frontmatter not provided |
need_open_comment | 1 | articles[].need_open_comment in draft/add request |
only_fans_can_comment | 0 | articles[].only_fans_can_comment in draft/add request |
Recommended EXTEND.md example:
default_theme: default
default_publish_method: api
default_author: 苍何
need_open_comment: 1
only_fans_can_comment: 0
chrome_profile_path: /path/to/chrome/profileValue priority:
- CLI arguments
- Frontmatter
- EXTEND.md
- Skill defaults
Pre-flight Check (Optional)
Before first use, suggest running the environment check. User can skip if they prefer.
npx -y bun ${SKILL_DIR}/scripts/check-permissions.tsChecks: Chrome, profile isolation, Bun, Accessibility, clipboard, paste keystroke, API credentials, Chrome conflicts.
If any check fails, provide fix guidance per item:
| Check | Fix | |
|---|---|---|
| Chrome | Install Chrome or set WECHAT_BROWSER_CHROME_PATH env var | |
| Profile dir | Ensure ~/.local/share/wechat-browser-profile is writable | |
| Bun runtime | `curl -fsSL https://bun.sh/install \ | bash` |
| Accessibility (macOS) | System Settings → Privacy & Security → Accessibility → enable terminal app | |
| Clipboard copy | Ensure Swift/AppKit available (macOS Xcode CLI tools: xcode-select --install) | |
| Paste keystroke (macOS) | Same as Accessibility fix above | |
| Paste keystroke (Linux) | Install xdotool (X11) or ydotool (Wayland) | |
| API credentials | Follow guided setup in Step 5, or manually set in .canghe-skills/.env |
Image-Text Posting (图文)
For short posts with multiple images (up to 9):
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown article.md --images ./images/
npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --title "标题" --content "内容" --image img.png --submitSee references/image-text-posting.md for details.
Article Posting Workflow (文章)
Copy this checklist and check off items as you complete them:
Publishing Progress:
- [ ] Step 0: Load preferences (EXTEND.md)
- [ ] Step 1: Determine input type
- [ ] Step 2: Check markdown-to-html skill
- [ ] Step 3: Convert to HTML
- [ ] Step 4: Validate metadata (title, summary, cover)
- [ ] Step 5: Select method and configure credentials
- [ ] Step 6: Publish to WeChat
- [ ] Step 7: Report completionStep 0: Load Preferences
Check and load EXTEND.md settings (see Preferences section above).
CRITICAL: If not found, complete first-time setup BEFORE any other steps or questions.
Resolve and store these defaults for later steps:
default_authorneed_open_comment(default1)only_fans_can_comment(default0)
Step 1: Determine Input Type
| Input Type | Detection | Action |
|---|---|---|
| HTML file | Path ends with .html, file exists | Skip to Step 4 |
| Markdown file | Path ends with .md, file exists | Continue to Step 2 |
| Plain text | Not a file path, or file doesn't exist | Save to markdown, then Step 2 |
Plain Text Handling:
- Generate slug from content (first 2-4 meaningful words, kebab-case)
- Create directory and save file:
mkdir -p "$(pwd)/post-to-wechat/$(date +%Y-%m-%d)"
# Save content to: post-to-wechat/yyyy-MM-dd/[slug].md- Continue processing as markdown file
Slug Examples:
- "Understanding AI Models" →
understanding-ai-models - "人工智能的未来" →
ai-future(translate to English for slug)
Step 2: Check Markdown-to-HTML Skill
Skip if: Input is .html file
Skill Discovery:
# Check if canghe-markdown-to-html exists
test -f skills/canghe-markdown-to-html/SKILL.md && echo "found"| Result | Action |
|---|---|
| Found | Read its SKILL.md, continue to Step 3 |
| Multiple skills | AskUserQuestion to choose |
| Not found | Show installation suggestion |
When Not Found:
No markdown-to-html skill found.
Suggested installation:
https://github.com/JimLiu/canghe-skills/blob/main/skills/canghe-markdown-to-html/SKILL.md
Options:
A) Cancel - install the skill first
B) Continue - provide HTML file manuallyStep 3: Convert Markdown to HTML
Skip if: Input is .html file
- Ask theme preference (unless specified in EXTEND.md or CLI):
| Theme | Description |
|---|---|
default | 经典主题 - 传统排版,标题居中带底边,二级标题白字彩底 |
grace | 优雅主题 - 文字阴影,圆角卡片,精致引用块 |
simple | 简洁主题 - 现代极简风,不对称圆角,清爽留白 |
- Execute conversion (using the discovered skill):
npx -y bun ${MD_TO_HTML_SKILL_DIR}/scripts/main.ts <markdown_file> --theme <theme>- Parse JSON output to get:
htmlPath,title,author,summary,contentImages
Step 4: Validate Metadata
Check extracted metadata from Step 3 (or HTML meta tags if direct HTML input).
| Field | If Missing |
|---|---|
| Title | Prompt: "Enter title, or press Enter to auto-generate from content" |
| Summary | Prompt: "Enter summary, or press Enter to auto-generate (recommended for SEO)" |
| Author | Use fallback chain: CLI --author → frontmatter author → EXTEND.md default_author |
Auto-Generation Logic:
- Title: First H1/H2 heading, or first sentence
- Summary: First paragraph, truncated to 120 characters
More from freestylefly
Use this skill in a project
Open any RiverX project, search the Skills panel for freestylefly/canghe-skills/canghe-post-to-wechat, and install it in one click.
