- 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/
.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/profile
- Value 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.ts
- Checks: 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
- --submit
- See
- 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 completion
- Step 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_author need_open_comment (default 1 ) only_fans_can_comment (default 0 ) 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 manually
- Step 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 Cover Image Check (required for article_type=news ): Use CLI --cover if provided. Else use frontmatter ( coverImage , featureImage , cover , image ). Else check article directory default path: imgs/cover.png . Else fallback to first inline content image. If still missing, stop and request a cover image before publishing. Step 5: Select Publishing Method and Configure Ask publishing method (unless specified in EXTEND.md or CLI): Method Speed Requirements api (Recommended) Fast API credentials browser Slow Chrome, login session If API Selected - Check Credentials :
Check project-level
test -f .canghe-skills/.env && grep -q "WECHAT_APP_ID" .canghe-skills/.env && echo "project"
Check user-level
test
-f
"
$HOME
/.canghe-skills/.env"
&&
grep
-q
"WECHAT_APP_ID"
"
$HOME
/.canghe-skills/.env"
&&
echo
"user"
If Credentials Missing - Guide Setup
:
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: .canghe-skills/.env (this project only)
B) User-level: ~/.canghe-skills/.env (all projects)
After location choice, prompt for values and write to
.env
:
WECHAT_APP_ID=
[ --title < title
] [ --summary < summary
] [ --author < author
] [ --cover < cover_path
] draft/add payload rules : Use endpoint: POST https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS_TOKEN article_type : news (default) or newspic For news , include thumb_media_id (cover is required) Always resolve and send: need_open_comment (default 1 ) only_fans_can_comment (default 0 ) author resolution: CLI --author → frontmatter author → EXTEND.md default_author If script parameters do not expose the two comment fields, still ensure final API request body includes resolved values. Browser method : npx -y bun ${SKILL_DIR} /scripts/wechat-article.ts --html < html_file
Step 7: Completion Report For API method , include draft management link: WeChat Publishing Complete! Input: [type] - [path] Method: API Theme: [theme name] Article: • Title: [title] • Summary: [summary] • Images: [N] inline images • Comments: [open/closed], [fans-only/all users] Result: ✓ Draft saved to WeChat Official Account • media_id: [media_id] Next Steps: → Manage drafts: https://mp.weixin.qq.com (登录后进入「内容管理」→「草稿箱」) Files created: [• post-to-wechat/yyyy-MM-dd/slug.md (if plain text)] [• slug.html (converted)] For Browser method : WeChat Publishing Complete! Input: [type] - [path] Method: Browser Theme: [theme name] Article: • Title: [title] • Summary: [summary] • Images: [N] inline images Result: ✓ Draft saved to WeChat Official Account Files created: [• post-to-wechat/yyyy-MM-dd/slug.md (if plain text)] [• slug.html (converted)] Detailed References Topic Reference Image-text parameters, auto-compression references/image-text-posting.md Article themes, image handling references/article-posting.md Feature Comparison Feature Image-Text Article (API) Article (Browser) Plain text input ✗ ✓ ✓ HTML input ✗ ✓ ✓ Markdown input Title/content ✓ (via skill) ✓ (via skill) Multiple images ✓ (up to 9) ✓ (inline) ✓ (inline) Themes ✗ ✓ ✓ Auto-generate metadata ✗ ✓ ✓ Default cover fallback ( imgs/cover.png ) ✗ ✓ ✗ Comment control ( need_open_comment , only_fans_can_comment ) ✗ ✓ ✗ Requires Chrome ✓ ✗ ✓ Requires API credentials ✗ ✓ ✗ Speed Medium Fast Slow Prerequisites For API method : WeChat Official Account API credentials Guided setup in Step 5, or manually set in .canghe-skills/.env For Browser method : Google Chrome First run: log in to WeChat Official Account (session preserved) For Markdown conversion : A markdown-to-html skill (e.g., canghe-markdown-to-html ) If not installed, the workflow will suggest installation Config File Locations (priority order): Environment variables
/.canghe-skills/.env ~/.canghe-skills/.env Troubleshooting Issue Solution No markdown-to-html skill Install canghe-markdown-to-html from suggested URL Missing API credentials Follow guided setup in Step 5 Access token error Check if API credentials are valid and not expired Not logged in (browser) First run opens browser - scan QR to log in Chrome not found Set WECHAT_BROWSER_CHROME_PATH env var Title/summary missing Use auto-generation or provide manually No cover image Add frontmatter cover or place imgs/cover.png in article directory Wrong comment defaults Check EXTEND.md keys need_open_comment and only_fans_can_comment Paste fails Check system clipboard permissions Extension Support Custom configurations via EXTEND.md. See Preferences section for paths and supported options.