🎁 Get the FREE AI Skills Starter GuideSubscribe →
BytesAgainBytesAgain
🦀 ClawHub

Baoyu Post To Wechat

by @jimliu

Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP. Supports article posting (文章) with HTML, markdown, or plain text input, and image-tex...

Versionv1.117.5
Downloads3,562
Installs63
TERMINAL
clawhub install baoyu-post-to-wechat

📖 About This Skill


name: baoyu-post-to-wechat description: 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. Markdown article workflows default to converting ordinary external links into bottom citations for WeChat-friendly output. Use when user mentions "发布公众号", "post to wechat", "微信公众号", or "贴图/图文/文章". version: 1.56.1 metadata: openclaw: homepage: https://github.com/JimLiu/baoyu-skills#baoyu-post-to-wechat requires: anyBins: - bun - npx

Post to WeChat Official Account

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.

Language

Respond in the user's language. If they write in Chinese, reply in Chinese; if English, English. Keep technical tokens (paths, flags, field names) in English.

Script Directory

{baseDir} = this SKILL.md's directory. Resolve ${BUN_X}: prefer bun; else npx -y bun; else suggest brew install oven-sh/bun/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 these paths in order; first hit wins:

| Path | Scope | |------|-------| | .baoyu-skills/baoyu-post-to-wechat/EXTEND.md | Project | | ${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-post-to-wechat/EXTEND.md | XDG | | $HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md | User home |

Found → read, parse, apply. Not found → run first-time setup (references/config/first-time-setup.md) before anything else.

Minimum 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 | | only_fans_can_comment | 0 | articles[].only_fans_can_comment in draft/add |

Recommended EXTEND.md:

default_theme: default
default_color: blue
default_publish_method: api
default_author: 宝玉
need_open_comment: 1
only_fans_can_comment: 0
chrome_profile_path: /path/to/chrome/profile

Theme options: default, grace, simple, modern. Color presets: blue, green, vermilion, yellow, purple, sky, rose, olive, black, gray, pink, red, orange (or hex).

Value priority: CLI args → frontmatter → EXTEND.md (account-level → global) → skill defaults.

Multi-Account Support

EXTEND.md supports an accounts: block for managing multiple Official Accounts. With 2+ entries, the workflow inserts a Step 0.5 to prompt for account selection (or auto-selects based on default: true or --account ).

Full details — compatibility rules, per-account keys, credential resolution, per-account Chrome profiles, CLI usage — in references/multi-account.md.

Pre-flight Check (Optional)

Before first use, suggest the environment check (user can skip):

${BUN_X} {baseDir}/scripts/check-permissions.ts

Checks: Chrome, profile isolation, Bun, Accessibility, clipboard, paste keystroke, API credentials, Chrome conflicts.

| Check fails | Fix | |-------------|-----| | Chrome | Install Chrome or set WECHAT_BROWSER_CHROME_PATH | | Profile dir | Shared profile at baoyu-skills/chrome-profile | | Bun runtime | brew install oven-sh/bun/bun or npm install -g bun | | Accessibility (macOS) | System Settings → Privacy & Security → Accessibility → enable terminal app | | Clipboard copy | Ensure Swift/AppKit (macOS: xcode-select --install) | | Paste keystroke (Linux) | Install xdotool (X11) or ydotool (Wayland) | | API credentials | Follow guided setup in Step 2, or set in .baoyu-skills/.env |

Image-Text Posting (图文)

Short posts with multiple images (up to 9):

${BUN_X} {baseDir}/scripts/wechat-browser.ts --markdown article.md --images ./images/
${BUN_X} {baseDir}/scripts/wechat-browser.ts --title "标题" --content "内容" --image img.png --submit

Details: references/image-text-posting.md.

Article Posting Workflow (文章)

- [ ] Step 0: Load preferences (EXTEND.md)
  • [ ] Step 0.5: Resolve account (multi-account only — see references/multi-account.md)
  • [ ] Step 1: Determine input type
  • [ ] Step 2: Select method and configure credentials
  • [ ] Step 3: Resolve theme/color and validate metadata
  • [ ] Step 4: Publish to WeChat
  • [ ] Step 5: Report completion
  • Step 0: Load Preferences

    Check and load EXTEND.md (see "Preferences" above). If not found, complete first-time setup before any other questions. Resolve and cache for later steps: default_theme, default_color, default_author, need_open_comment, only_fans_can_comment.

    Step 1: Determine Input Type

    | Input | Detection | Next | |-------|-----------|------| | HTML file | Path ends .html, file exists | Skip to Step 3 | | Markdown file | Path ends .md, file exists | Step 2 | | Plain text | Not a file path, or file doesn't exist | Save to markdown, then Step 2 |

    Plain-text handling:

    1. Generate slug (first 2-4 meaningful words, kebab-case; translate Chinese to English for the slug). 2. Save to post-to-wechat/YYYY-MM-DD/.md (create directory if needed). 3. Continue as a markdown file.

    Step 2: Select Publishing Method and Configure

    Ask method unless specified in EXTEND.md or CLI:

    | Method | Speed | Requires | |--------|-------|----------| | api (Recommended) | Fast | API credentials | | browser | Slow | Chrome + logged-in session |

    API selected + missing credentials → run guided setup per references/api-setup.md (writes to .baoyu-skills/.env).

    Step 3: Resolve Theme/Color and Validate Metadata

    1. Theme: CLI --theme → EXTEND.md default_themedefault (first match wins; do NOT ask if resolved). 2. Color: CLI --color → EXTEND.md default_color → omit (theme default applies). 3. Validate metadata (frontmatter for markdown, meta tags for HTML):

    | Field | Missing → | |-------|-----------| | Title | Ask, or press Enter to auto-generate from content | | Summary | Frontmatter descriptionsummary → ask or auto-generate | | Author | CLI --author → frontmatter author → EXTEND.md default_author |

    Auto-generation: title = first H1/H2 or first sentence; summary = first paragraph, truncated to 120 chars.

    4. Cover image (required for API article_type=news): CLI --cover → frontmatter (coverImage / featureImage / cover / image) → imgs/cover.png → first inline image → stop and request one if still missing.

    Step 4: Publish

    Important — never pre-convert markdown to HTML. Publishing scripts handle the conversion internally and the two methods render images differently: API renders tags for upload, browser uses placeholders for paste-and-replace. Passing a pre-converted HTML breaks one or the other.

    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 inline links. Existing HTML input is left as-is.

    API method (accepts .md or .html):

    ${BUN_X} {baseDir}/scripts/wechat-api.ts  --theme  [--color ] [--title ] [--summary <summary>] [--author <author>] [--cover <cover_path>] [--no-cite]
    </code></pre></p><p style="margin:8px 0">Always pass <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--theme</code> even if it's <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">default</code>. Only pass <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--color</code> when explicitly set by the user or EXTEND.md.</p><p style="margin:8px 0"><strong style="color:#e5e7eb"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">draft/add</code> payload rules</strong>:
    <li style="color:#94a3b8;margin:3px 0">Endpoint: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">POST https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS_TOKEN</code></li>
    <li style="color:#94a3b8;margin:3px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">article_type</code>: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">news</code> (default) or <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">newspic</code></li>
    <li style="color:#94a3b8;margin:3px 0">For <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">news</code>, include <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">thumb_media_id</code> (cover required)</li>
    <li style="color:#94a3b8;margin:3px 0">Always include <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">need_open_comment</code> (default <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">1</code>) and <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">only_fans_can_comment</code> (default <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">0</code>) in the request body, even if the CLI doesn't expose them</li></p><p style="margin:8px 0"><strong style="color:#e5e7eb">Browser method</strong> (accepts <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--markdown</code> or <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--html</code>):</p><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">${BUN_X} {baseDir}/scripts/wechat-article.ts --markdown <markdown_file> --theme <theme> [--color <color>] [--no-cite]
    ${BUN_X} {baseDir}/scripts/wechat-article.ts --html <html_file>
    </code></pre></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">Step 5: Completion Report</h4></p><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">WeChat Publishing Complete!</p><p style="margin:8px 0">Input: [type] - [path]
    Method: [API | Browser]
    Theme: [theme] [color if set]</p><p style="margin:8px 0">Article:
    • Title: [title]
    • Summary: [summary]
    • Images: [N] inline
    • Comments: [open/closed], [fans-only/all]    ← API method only</p><p style="margin:8px 0">Result:
    ✓ Draft saved to WeChat Official Account
    • media_id: [media_id]                         ← API method only</p><p style="margin:8px 0">Next Steps (API):
    → Manage drafts: https://mp.weixin.qq.com (登录后进入「内容管理」→「草稿箱」)</p><p style="margin:8px 0">Files created:
    [• post-to-wechat/YYYY-MM-DD/slug.md (if plain text input)]
    [• slug.html (converted)]
    </code></pre></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">Feature Comparison</h3></p><p style="margin:8px 0">| Feature | Image-Text | Article (API) | Article (Browser) |
    |---------|:---:|:---:|:---:|
    | Plain text input | ✗ | ✓ | ✓ |
    | HTML input | ✗ | ✓ | ✓ |
    | Markdown input | Title/content | ✓ | ✓ |
    | Multiple images | ✓ (up to 9) | ✓ (inline) | ✓ (inline) |
    | Themes | ✗ | ✓ | ✓ |
    | Auto-generate metadata | ✗ | ✓ | ✓ |
    | Default cover fallback (<code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">imgs/cover.png</code>) | ✗ | ✓ | ✗ |
    | Comment control | ✗ | ✓ | ✗ |
    | Requires Chrome | ✓ | ✗ | ✓ |
    | Requires API credentials | ✗ | ✓ | ✗ |
    | Speed | Medium | Fast | Slow |</p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">Troubleshooting</h3></p><p style="margin:8px 0">| Issue | Fix |
    |-------|-----|
    | Missing API credentials | Follow guided setup in Step 2 |
    | Access token error | Verify credentials valid and not expired |
    | Not logged in (browser) | First run opens browser — scan QR to log in |
    | Chrome not found | Set <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">WECHAT_BROWSER_CHROME_PATH</code> |
    | Title/summary missing | Use auto-generation or provide manually |
    | No cover image | Add frontmatter cover or place <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">imgs/cover.png</code> in article directory |
    | Wrong comment defaults | Check <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">need_open_comment</code> / <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">only_fans_can_comment</code> in EXTEND.md |
    | Paste fails | Check system clipboard permissions |</p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">References</h3></p><p style="margin:8px 0">| File | Content |
    |------|---------|
    | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">references/image-text-posting.md</code> | Image-text parameters, auto-compression |
    | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">references/article-posting.md</code> | Article themes, image handling |
    | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">references/multi-account.md</code> | Multi-account compatibility, credentials, Chrome profiles, CLI |
    | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">references/api-setup.md</code> | Guided credential setup |
    | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">references/config/first-time-setup.md</code> | First-time EXTEND.md setup |</p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">Extension Support</h3></p><p style="margin:8px 0">Custom configurations via EXTEND.md. See "Preferences" for paths and supported options.
    </p></div></section><section class="skill-card" style="margin-bottom:20px"><h2 style="color:#f8fafc;font-size:1.2em;font-weight:800;margin:0 0 16px;display:flex;align-items:center;gap:8px">📋 Tips & Best Practices</h2><div style="font-size:.92em;color:#94a3b8;line-height:1.75"><p style="margin:8px 0">| Issue | Fix |
    |-------|-----|
    | Missing API credentials | Follow guided setup in Step 2 |
    | Access token error | Verify credentials valid and not expired |
    | Not logged in (browser) | First run opens browser — scan QR to log in |
    | Chrome not found | Set <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">WECHAT_BROWSER_CHROME_PATH</code> |
    | Title/summary missing | Use auto-generation or provide manually |
    | No cover image | Add frontmatter cover or place <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">imgs/cover.png</code> in article directory |
    | Wrong comment defaults | Check <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">need_open_comment</code> / <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">only_fans_can_comment</code> in EXTEND.md |
    | Paste fails | Check system clipboard permissions |</p></div></section></div><div class="two-col-side"></div></div></div><script>
            document.querySelectorAll('.copy-btn, .script-copy-btn').forEach(btn => {
              btn.addEventListener('click', () => {
                const cmd = btn.getAttribute('data-cmd');
                if (!cmd) return;
                navigator.clipboard.writeText(cmd).then(() => {
                  const orig = btn.textContent;
                  btn.textContent = 'Copied!';
                  setTimeout(() => btn.textContent = orig, 1500);
                }).catch(() => {});
              });
            });
          </script><!--$--><!--/$--></main><footer style="background:#0a0a1a;border-top:1px solid #1a1a2e;margin-top:60px"><div style="border-top:1px solid #111;max-width:1200px;margin:0 auto;padding:24px 20px"><div style="display:flex;justify-content:space-between;flex-wrap:wrap;gap:24px;margin-bottom:24px"><div><div style="font-weight:700;color:#ccc;margin-bottom:8px">BytesAgain</div><div style="color:#555;font-size:.82em;max-width:200px">Discover the best AI agent skills for your workflow.</div></div><div><div style="color:#888;font-size:.75em;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px">Explore</div><div style="margin-bottom:6px"><a href="/skills" style="color:#666;text-decoration:none;font-size:.85em">Skills</a></div><div style="margin-bottom:6px"><a href="/articles" style="color:#666;text-decoration:none;font-size:.85em">Articles</a></div><div style="margin-bottom:6px"><a href="/use-case" style="color:#666;text-decoration:none;font-size:.85em">Cases</a></div></div><div><div style="color:#888;font-size:.75em;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px">Company</div><div style="margin-bottom:6px"><a href="/about" style="color:#666;text-decoration:none;font-size:.85em">About</a></div><div style="margin-bottom:6px"><a href="/contact" style="color:#666;text-decoration:none;font-size:.85em">Contact</a></div><div style="margin-bottom:6px"><a href="/privacy-policy" style="color:#666;text-decoration:none;font-size:.85em">Privacy Policy</a></div><div style="margin-bottom:6px"><a href="/terms" style="color:#666;text-decoration:none;font-size:.85em">Terms</a></div><div style="margin-bottom:6px"><a href="/feedback" style="color:#666;text-decoration:none;font-size:.85em">Feedback</a></div></div></div><div style="border-top:1px solid #111;padding-top:16px"><div style="color:#444;font-size:.8em;margin-bottom:8px">© <!-- -->2026<!-- --> BytesAgain. All rights reserved.</div><div style="color:#333;font-size:.75em;line-height:1.6;max-width:720px">BytesAgain is an independent skill directory. We index and link to third-party content (ClawHub, GitHub, LobeHub, Dify, etc.) for informational purposes only. All trademarks, skill names, and content are the property of their respective owners. BytesAgain does not claim ownership of any indexed content.</div></div></div></footer><button style="position:fixed;bottom:28px;right:28px;z-index:1000;width:48px;height:48px;border-radius:50%;border:none;cursor:pointer;background:linear-gradient(135deg,#667eea,#00d4ff);color:#fff;font-size:1.3em;box-shadow:0 4px 20px #667eea66;display:flex;align-items:center;justify-content:center;transition:transform .2s">💬</button><script src="/_next/static/chunks/0ze4gu236oq96.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[62894,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"LangProvider\"]\n3:I[16988,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"default\"]\nd:I[68027,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"default\",1]\n:HL[\"/_next/static/chunks/07v-rkwetoheo.css?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"style\"]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n4:Td5e,"])</script><script>self.__next_f.push([1,"[{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"BytesAgain\",\"url\":\"https://bytesagain.com\",\"description\":\"Search 60,000+ verified AI agent skills via MCP API or REST. Supports 7 languages. Free, no auth required.\",\"inLanguage\":[\"en\",\"zh\",\"es\",\"fr\",\"de\",\"ja\",\"ko\"],\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://bytesagain.com/skills?q={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}},{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"BytesAgain\",\"url\":\"https://bytesagain.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://bytesagain.com/og-image.png\"},\"description\":\"AI agent skill directory. Search 60,000+ skills, 1,000+ use cases, and community requests.\",\"foundingDate\":\"2026\",\"foundingLocation\":{\"@type\":\"Place\",\"name\":\"Global\"},\"sameAs\":[\"https://x.com/bytesagain\",\"https://github.com/bytesagain/ai-skills\",\"https://clawhub.ai/profile/bytesagain\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"email\":\"hello@bytesagain.com\",\"contactType\":\"customer support\"},\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"value\":1}},{\"@context\":\"https://schema.org\",\"@type\":\"WebApplication\",\"name\":\"BytesAgain AI Skills Search\",\"url\":\"https://bytesagain.com\",\"applicationCategory\":\"DeveloperApplication\",\"operatingSystem\":\"Web\",\"description\":\"Search engine and MCP API for 60,000+ AI agent skills. Semantic search, role recommendations, and use case packs.\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"},\"featureList\":[\"Search 60,000+ AI agent skills\",\"Role-based recommendations for developers, creators, and traders\",\"1,000+ curated use case packs\",\"Free MCP API and REST API\",\"Multi-language search (EN, ZH, ES, FR, DE, JA, KO)\"],\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":\"https://bytesagain.com/skills?q={search_term_string}\",\"query-input\":\"required name=search_term_string\"},\"dateModified\":\"2026-06-01\"},{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"BytesAgain is a curated directory of 60,000+ AI agent skills from ClawHub, GitHub, LobeHub, and Dify. Search skills by keyword in 7 languages, browse by role (developer, creator, trader, marketer) or by use case.\"}},{\"@type\":\"Question\",\"name\":\"How do I find AI skills on BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Use the search bar on BytesAgain.com to search by keyword in 7 languages. You can also browse by role (developer, creator, trader, marketer) or by use case. Each skill shows install instructions for Claude, Cursor, OpenClaw, Continue, and more.\"}},{\"@type\":\"Question\",\"name\":\"Is BytesAgain free?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes, BytesAgain is completely free. No registration required for searching skills. The MCP API is also free with rate limits.\"}},{\"@type\":\"Question\",\"name\":\"Does BytesAgain have an API for AI agents?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! BytesAgain provides a free MCP SSE endpoint at /api/mcp/sse for AI agents, plus a REST API at /api/mcp?action=search\u0026q=\u003cquery\u003e. No authentication needed.\"}},{\"@type\":\"Question\",\"name\":\"Can I request a new AI skill on BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! Visit the Requests page on BytesAgain.com to submit a skill request. Your request will be visible to the community and notified to the site admin.\"}}]}]"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"skill\",\"baoyu-post-to-wechat\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"skill\",{\"children\":[[\"slug\",\"baoyu-post-to-wechat\",\"d\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/07v-rkwetoheo.css?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"llms\",\"href\":\"/llms.txt\"}],[\"$\",\"link\",null,{\"rel\":\"llms-full\",\"href\":\"/llms-full.txt\"}],[\"$\",\"script\",null,{\"async\":true,\"src\":\"https://www.googletagmanager.com/gtag/js?id=G-3C1MM9FWYF\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n          window.dataLayer = window.dataLayer || [];\\n          function gtag(){dataLayer.push(arguments);}\\n          gtag('js', new Date());\\n          gtag('config', 'G-3C1MM9FWYF');\\n        \"}}]]}],[\"$\",\"body\",null,{\"className\":\"geist_9e050971-module__05dp7a__className\",\"style\":{\"background\":\"#0a0a1a\",\"color\":\"#e0e0e0\",\"margin\":0},\"children\":[\"$\",\"$L2\",null,{\"children\":[[\"$\",\"div\",null,{\"style\":{\"width\":\"100%\",\"background\":\"linear-gradient(90deg,#13103a,#0d0d1f,#13103a)\",\"borderBottom\":\"1px solid #2a2a5a\",\"padding\":\"8px 20px\",\"textAlign\":\"center\",\"fontSize\":\".82em\",\"color\":\"#818cf8\"},\"children\":[\"🎁 \",[\"$\",\"strong\",null,{\"style\":{\"color\":\"#e2e8f0\"},\"children\":\"Get the FREE AI Skills Starter Guide\"}],\" — \",[\"$\",\"a\",null,{\"href\":\"/register\",\"style\":{\"color\":\"#00d4ff\",\"textDecoration\":\"underline\"},\"children\":\"Subscribe →\"}]]}],[\"$\",\"$L3\",null,{}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$4\"}}],\"$L5\",\"$L6\",\"$L7\"]}]}]]}]]}],{\"children\":[\"$L8\",{\"children\":[\"$L9\",{\"children\":[\"$La\",{},null,false,null]},null,false,\"$@b\"]},null,false,\"$@b\"]},null,false,null],\"$Lc\",false]],\"m\":\"$undefined\",\"G\":[\"$d\",[\"$Le\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"f:I[39756,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"default\"]\n10:I[37457,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"default\"]\n11:I[22016,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0ka051yepewro.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"\"]\n12:I[90940,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"default\"]\n13:I[16397,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"default\"]\n15:I[97367,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"OutletBoundary\"]\n16:\"$Sreact.suspense\"\n19:I[97367,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"ViewportBoundary\"]\n1b:I[97367,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"MetadataBoundary\"]\n"])</script><script>self.__next_f.push([1,"5:[\"$\",\"main\",null,{\"children\":[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"main\",null,{\"style\":{\"minHeight\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"background\":\"#050611\",\"color\":\"#e5e7eb\"},\"children\":[[\"$\",\"style\",null,{\"children\":\"\\n        .nf-box { text-align: center; padding: 60px 32px; }\\n        .nf-code { font-size: 6rem; font-weight: 900; color: #22d3ee; line-height: 1; margin: 0; }\\n        .nf-title { font-size: 1.8rem; font-weight: 800; margin: 12px 0 8px; }\\n        .nf-desc { color: #64748b; font-size: 1rem; margin-bottom: 32px; max-width: 440px; }\\n        .nf-link { display: inline-block; padding: 12px 28px; background: linear-gradient(135deg,#34d399,#22d3ee); color: #000; font-weight: 900; border-radius: 12px; text-decoration: none; }\\n      \"}],[\"$\",\"div\",null,{\"className\":\"nf-box\",\"children\":[[\"$\",\"p\",null,{\"className\":\"nf-code\",\"children\":\"404\"}],[\"$\",\"h1\",null,{\"className\":\"nf-title\",\"children\":\"Page Not Found\"}],[\"$\",\"p\",null,{\"className\":\"nf-desc\",\"children\":\"The skill or page you're looking for doesn't exist or has been moved.\"}],[\"$\",\"$L11\",null,{\"className\":\"nf-link\",\"href\":\"/\",\"children\":\"Back to BytesAgain\"}]]}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]\n"])</script><script>self.__next_f.push([1,"6:[\"$\",\"$L12\",null,{}]\n7:[\"$\",\"$L13\",null,{}]\n8:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n9:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\na:[\"$\",\"$1\",\"c\",{\"children\":[\"$L14\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0~t057~scpf-f.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L15\",null,{\"children\":[\"$\",\"$16\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@17\"}]}]]}]\n18:[]\nb:\"$W18\"\nc:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L19\",null,{\"children\":\"$L1a\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L1b\",null,{\"children\":[\"$\",\"$16\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1c\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\ne:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/07v-rkwetoheo.css?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"1a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"1d:I[27201,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"IconMark\"]\n17:null\n"])</script><script>self.__next_f.push([1,"1c:[[\"$\",\"title\",\"0\",{\"children\":\"Baoyu Post To Wechat — AI Agent Skill | BytesAgain | BytesAgain\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP. Supports article posting (文章) with HTML, markdown, or plain text input, and image-tex...\"}],[\"$\",\"meta\",\"2\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"3\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"meta\",\"4\",{\"name\":\"llms-txt\",\"content\":\"https://bytesagain.com/llms.txt\"}],[\"$\",\"meta\",\"5\",{\"name\":\"llms-full-txt\",\"content\":\"https://bytesagain.com/llms-full.txt\"}],[\"$\",\"link\",\"6\",{\"rel\":\"canonical\",\"href\":\"https://bytesagain.com/skill/baoyu-post-to-wechat\"}],[\"$\",\"meta\",\"7\",{\"name\":\"baidu-site-verification\",\"content\":\"codeva-0evUqX1TFs\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:title\",\"content\":\"Baoyu Post To Wechat — AI Agent Skill | BytesAgain\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:description\",\"content\":\"Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP. Supports article posting (文章) with HTML, markdown, or plain text input, and image-tex...\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:url\",\"content\":\"https://bytesagain.com/skill/baoyu-post-to-wechat\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:site_name\",\"content\":\"BytesAgain\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image\",\"content\":\"https://bytesagain.com/social-preview.png\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:title\",\"content\":\"Baoyu Post To Wechat — AI Agent Skill | BytesAgain\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:description\",\"content\":\"Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP. Supports article posting (文章) with HTML, markdown, or plain text input, and image-tex...\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:image\",\"content\":\"https://bytesagain.com/social-preview.png\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"22\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$L1d\",\"23\",{}]]\n"])</script><script>self.__next_f.push([1,"1e:T1463,"])</script><script>self.__next_f.push([1,"\n        .skill-page { max-width: 1100px; margin: 0 auto; padding: 32px 20px 80px; }\n        .two-col { display: flex; gap: 32px; align-items: flex-start; }\n        .two-col-main { flex: 1; min-width: 0; }\n        .two-col-side { width: 300px; flex-shrink: 0; }\n        @media (max-width: 860px) {\n          .two-col { flex-direction: column; }\n          .two-col-side { width: 100%; }\n        }\n        .breadcrumb { font-size: .82em; color: #4b5563; margin-bottom: 28px; }\n        .breadcrumb a { color: #818cf8; text-decoration: none; }\n        .breadcrumb a:hover { text-decoration: underline; }\n        .skill-card { background: #0d0d1f; border: 1px solid #1e1e3f; border-radius: 20px; padding: 28px; margin-bottom: 24px; }\n        .skill-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; }\n        .skill-badges { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }\n        .skill-top-actions { display: flex; align-items: center; gap: 10px; margin-left: auto; }\n        .badge { display: inline-flex; align-items: center; gap: 5px; font-size: .75em; font-weight: 600; padding: 4px 12px; border-radius: 999px; border: 1px solid transparent; }\n        .skill-title { font-size: 1.6em; font-weight: 800; color: #f1f5f9; margin: 0 0 4px; line-height: 1.2; }\n        .skill-owner { font-size: .82em; color: #4b5563; margin: 0 0 14px; }\n        .skill-owner span { color: #818cf8; }\n        .skill-desc { font-size: .92em; color: #94a3b8; line-height: 1.65; margin: 0 0 16px; }\n        .skill-meta { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 18px; padding-bottom: 16px; border-bottom: 1px solid #1e1e3f; }\n        .meta-item { display: flex; flex-direction: column; gap: 2px; }\n        .meta-label { font-size: .7em; color: #374151; text-transform: uppercase; letter-spacing: 1px; font-weight: 600; }\n        .meta-value { font-size: .92em; color: #94a3b8; font-weight: 600; }\n        .tags-row { display: flex; gap: 6px; flex-wrap: wrap; }\n        .tag { font-size: .75em; color: #6366f1; background: #6366f115; border: 1px solid #6366f130; border-radius: 6px; padding: 3px 10px; text-decoration: none; }\n        .tag:hover { background: #6366f125; }\n        .install-box { background: #070714; border: 1px solid #1e1e3f; border-radius: 12px; overflow: hidden; margin-bottom: 24px; }\n        .install-header { display: flex; align-items: center; justify-content: space-between; padding: 10px 16px; border-bottom: 1px solid #1e1e3f; }\n        .install-dots { display: flex; gap: 6px; }\n        .dot { width: 10px; height: 10px; border-radius: 50%; }\n        .install-label { font-size: .72em; color: #374151; font-family: monospace; letter-spacing: 1px; }\n        .install-body { padding: 16px 20px; display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n        .install-cmd { font-family: 'Courier New', monospace; font-size: 1em; color: #a5f3fc; }\n        .copy-btn { font-size: .75em; color: #6366f1; background: #6366f115; border: 1px solid #6366f130; border-radius: 6px; padding: 5px 12px; cursor: pointer; white-space: nowrap; transition: all .15s; }\n        .copy-btn:hover { background: #6366f125; }\n        .btn-secondary { display: inline-flex; align-items: center; gap: 8px; padding: 13px 24px; background: transparent; border: 1px solid #1e1e3f; border-radius: 10px; color: #6b7280; text-decoration: none; font-weight: 600; font-size: .95em; transition: all .15s; }\n        .btn-secondary:hover { border-color: #818cf8; color: #818cf8; }\n        .ours-badge { display: inline-flex; align-items: center; gap: 6px; font-size: .72em; font-weight: 700; color: #22d3ee; background: #22d3ee10; border: 1px solid #22d3ee30; border-radius: 999px; padding: 4px 14px; }\n        .section-card { background: #0d0d1f; border: 1px solid #1e1e3f; border-radius: 16px; padding: 22px 24px; margin-bottom: 20px; }\n        .section-title { color: #f8fafc; font-size: 1.08em; font-weight: 800; margin: 0 0 12px; display: flex; align-items: center; gap: 8px; }\n        /* Script box */\n        .script-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 14px; background: #0a0a1c; border-bottom: 1px solid #1e1e3f; }\n        .script-filename { font-size: .72em; color: #4b5563; font-family: 'Courier New', monospace; }\n        .script-copy-btn { font-size: .72em; color: #6366f1; background: none; border: 1px solid #6366f130; border-radius: 4px; padding: 2px 10px; cursor: pointer; }\n        .script-copy-btn:hover { background: #6366f115; }\n        .script-body { padding: 14px 16px; font-family: 'Courier New', monospace; font-size: .82em; line-height: 1.6; color: #a5f3fc; overflow-x: auto; max-height: 420px; overflow-y: auto; white-space: pre; }\n        /* Articles */\n        .article-card { display: block; background: #0f0f23; border: 1px solid #1a1a3e; border-radius: 10px; padding: 14px 16px; text-decoration: none; transition: border-color .15s; }\n        .article-card:hover { border-color: #6366f1; }\n        @media (max-width: 600px) {\n          .skill-card { padding: 20px; }\n          .skill-title { font-size: 1.5em; }\n        }\n      "])</script><script>self.__next_f.push([1,"14:[[\"$\",\"style\",null,{\"children\":\"$1e\"}],\"$L1f\",\"$L20\"]\n"])</script><script>self.__next_f.push([1,"21:I[78297,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0~t057~scpf-f.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"default\"]\n22:T6ccf,"])</script><script>self.__next_f.push([1,"\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\nname: baoyu-post-to-wechat\ndescription: 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. Markdown article workflows default to converting ordinary external links into bottom citations for WeChat-friendly output. Use when user mentions \"发布公众号\", \"post to wechat\", \"微信公众号\", or \"贴图/图文/文章\".\nversion: 1.56.1\nmetadata:\n  openclaw:\n    homepage: https://github.com/JimLiu/baoyu-skills#baoyu-post-to-wechat\n    requires:\n      anyBins:\n        - bun\n        - npx\n\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003ePost to WeChat Official Account\u003c/h2\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eUser Input Tools\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eWhen this skill prompts the user, follow this tool-selection rule (priority order):\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e1. \u003cstrong style=\"color:#e5e7eb\"\u003ePrefer built-in user-input tools\u003c/strong\u003e exposed by the current agent runtime — e.g., \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eAskUserQuestion\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003erequest_user_input\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eclarify\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eask_user\u003c/code\u003e, or any equivalent.\n2. \u003cstrong style=\"color:#e5e7eb\"\u003eFallback\u003c/strong\u003e: 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.\n3. \u003cstrong style=\"color:#e5e7eb\"\u003eBatching\u003c/strong\u003e: 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.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eConcrete \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eAskUserQuestion\u003c/code\u003e references below are examples — substitute the local equivalent in other runtimes.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eLanguage\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eRespond in the user's language. If they write in Chinese, reply in Chinese; if English, English. Keep technical tokens (paths, flags, field names) in English.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eScript Directory\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e{baseDir}\u003c/code\u003e = this SKILL.md's directory. Resolve \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e${BUN_X}\u003c/code\u003e: prefer \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ebun\u003c/code\u003e; else \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enpx -y bun\u003c/code\u003e; else suggest \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ebrew install oven-sh/bun/bun\u003c/code\u003e.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Script | Purpose |\n|--------|---------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003escripts/wechat-browser.ts\u003c/code\u003e | Image-text posts (图文) |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003escripts/wechat-article.ts\u003c/code\u003e | Article posting via browser (文章) |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003escripts/wechat-api.ts\u003c/code\u003e | Article posting via API (文章) |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003escripts/md-to-wechat.ts\u003c/code\u003e | Markdown → WeChat-ready HTML with image placeholders |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003escripts/check-permissions.ts\u003c/code\u003e | Verify environment \u0026 permissions |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003ePreferences (EXTEND.md)\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eCheck these paths in order; first hit wins:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Path | Scope |\n|------|-------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e.baoyu-skills/baoyu-post-to-wechat/EXTEND.md\u003c/code\u003e | Project |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-post-to-wechat/EXTEND.md\u003c/code\u003e | XDG |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md\u003c/code\u003e | User home |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eFound → read, parse, apply. Not found → run first-time setup (\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ereferences/config/first-time-setup.md\u003c/code\u003e) before anything else.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eMinimum keys\u003c/strong\u003e (case-insensitive, accept \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e1/0\u003c/code\u003e or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etrue/false\u003c/code\u003e):\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Key | Default | Mapping |\n|-----|---------|---------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edefault_author\u003c/code\u003e | empty | Fallback for \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eauthor\u003c/code\u003e when CLI/frontmatter not provided |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eneed_open_comment\u003c/code\u003e | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e1\u003c/code\u003e | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003earticles[].need_open_comment\u003c/code\u003e in \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edraft/add\u003c/code\u003e |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eonly_fans_can_comment\u003c/code\u003e | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e0\u003c/code\u003e | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003earticles[].only_fans_can_comment\u003c/code\u003e in \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edraft/add\u003c/code\u003e |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eRecommended EXTEND.md\u003c/strong\u003e:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003edefault_theme: default\ndefault_color: blue\ndefault_publish_method: api\ndefault_author: 宝玉\nneed_open_comment: 1\nonly_fans_can_comment: 0\nchrome_profile_path: /path/to/chrome/profile\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTheme options\u003c/strong\u003e: default, grace, simple, modern. \u003cstrong style=\"color:#e5e7eb\"\u003eColor presets\u003c/strong\u003e: blue, green, vermilion, yellow, purple, sky, rose, olive, black, gray, pink, red, orange (or hex).\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eValue priority\u003c/strong\u003e: CLI args → frontmatter → EXTEND.md (account-level → global) → skill defaults.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eMulti-Account Support\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eEXTEND.md supports an \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eaccounts:\u003c/code\u003e block for managing multiple Official Accounts. With 2+ entries, the workflow inserts a Step 0.5 to prompt for account selection (or auto-selects based on \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edefault: true\u003c/code\u003e or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--account \u003calias\u003e\u003c/code\u003e).\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eFull details — compatibility rules, per-account keys, credential resolution, per-account Chrome profiles, CLI usage — in \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ereferences/multi-account.md\u003c/code\u003e.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003ePre-flight Check (Optional)\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eBefore first use, suggest the environment check (user can skip):\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e${BUN_X} {baseDir}/scripts/check-permissions.ts\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eChecks: Chrome, profile isolation, Bun, Accessibility, clipboard, paste keystroke, API credentials, Chrome conflicts.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Check fails | Fix |\n|-------------|-----|\n| Chrome | Install Chrome or set \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eWECHAT_BROWSER_CHROME_PATH\u003c/code\u003e |\n| Profile dir | Shared profile at \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ebaoyu-skills/chrome-profile\u003c/code\u003e |\n| Bun runtime | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ebrew install oven-sh/bun/bun\u003c/code\u003e or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enpm install -g bun\u003c/code\u003e |\n| Accessibility (macOS) | System Settings → Privacy \u0026 Security → Accessibility → enable terminal app |\n| Clipboard copy | Ensure Swift/AppKit (macOS: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003excode-select --install\u003c/code\u003e) |\n| Paste keystroke (Linux) | Install \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003exdotool\u003c/code\u003e (X11) or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eydotool\u003c/code\u003e (Wayland) |\n| API credentials | Follow guided setup in Step 2, or set in \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e.baoyu-skills/.env\u003c/code\u003e |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eImage-Text Posting (图文)\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eShort posts with multiple images (up to 9):\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e${BUN_X} {baseDir}/scripts/wechat-browser.ts --markdown article.md --images ./images/\n${BUN_X} {baseDir}/scripts/wechat-browser.ts --title \"标题\" --content \"内容\" --image img.png --submit\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eDetails: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ereferences/image-text-posting.md\u003c/code\u003e.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eArticle Posting Workflow (文章)\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e- [ ] Step 0: Load preferences (EXTEND.md)\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e[ ] Step 0.5: Resolve account (multi-account only — see references/multi-account.md)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e[ ] Step 1: Determine input type\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e[ ] Step 2: Select method and configure credentials\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e[ ] Step 3: Resolve theme/color and validate metadata\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e[ ] Step 4: Publish to WeChat\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e[ ] Step 5: Report completion\u003c/li\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eStep 0: Load Preferences\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eCheck and load EXTEND.md (see \"Preferences\" above). If not found, complete first-time setup before any other questions. Resolve and cache for later steps: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edefault_theme\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edefault_color\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edefault_author\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eneed_open_comment\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eonly_fans_can_comment\u003c/code\u003e.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eStep 1: Determine Input Type\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Input | Detection | Next |\n|-------|-----------|------|\n| HTML file | Path ends \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e.html\u003c/code\u003e, file exists | Skip to Step 3 |\n| Markdown file | Path ends \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e.md\u003c/code\u003e, file exists | Step 2 |\n| Plain text | Not a file path, or file doesn't exist | Save to markdown, then Step 2 |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003ePlain-text handling\u003c/strong\u003e:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e1. Generate slug (first 2-4 meaningful words, kebab-case; translate Chinese to English for the slug).\n2. Save to \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epost-to-wechat/YYYY-MM-DD/\u003cslug\u003e.md\u003c/code\u003e (create directory if needed).\n3. Continue as a markdown file.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eStep 2: Select Publishing Method and Configure\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eAsk method unless specified in EXTEND.md or CLI:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Method | Speed | Requires |\n|--------|-------|----------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eapi\u003c/code\u003e (Recommended) | Fast | API credentials |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ebrowser\u003c/code\u003e | Slow | Chrome + logged-in session |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAPI selected + missing credentials\u003c/strong\u003e → run guided setup per \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ereferences/api-setup.md\u003c/code\u003e (writes to \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e.baoyu-skills/.env\u003c/code\u003e).\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eStep 3: Resolve Theme/Color and Validate Metadata\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e1. \u003cstrong style=\"color:#e5e7eb\"\u003eTheme\u003c/strong\u003e: CLI \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--theme\u003c/code\u003e → EXTEND.md \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edefault_theme\u003c/code\u003e → \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edefault\u003c/code\u003e (first match wins; do NOT ask if resolved).\n2. \u003cstrong style=\"color:#e5e7eb\"\u003eColor\u003c/strong\u003e: CLI \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--color\u003c/code\u003e → EXTEND.md \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edefault_color\u003c/code\u003e → omit (theme default applies).\n3. \u003cstrong style=\"color:#e5e7eb\"\u003eValidate metadata\u003c/strong\u003e (frontmatter for markdown, meta tags for HTML):\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Field | Missing → |\n|-------|-----------|\n| Title | Ask, or press Enter to auto-generate from content |\n| Summary | Frontmatter \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edescription\u003c/code\u003e → \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003esummary\u003c/code\u003e → ask or auto-generate |\n| Author | CLI \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--author\u003c/code\u003e → frontmatter \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eauthor\u003c/code\u003e → EXTEND.md \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edefault_author\u003c/code\u003e |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eAuto-generation: title = first H1/H2 or first sentence; summary = first paragraph, truncated to 120 chars.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e4. \u003cstrong style=\"color:#e5e7eb\"\u003eCover image\u003c/strong\u003e (required for API \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003earticle_type=news\u003c/code\u003e): CLI \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--cover\u003c/code\u003e → frontmatter (\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecoverImage\u003c/code\u003e / \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003efeatureImage\u003c/code\u003e / \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecover\u003c/code\u003e / \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eimage\u003c/code\u003e) → \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eimgs/cover.png\u003c/code\u003e → first inline image → stop and request one if still missing.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eStep 4: Publish\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eImportant — never pre-convert markdown to HTML.\u003c/strong\u003e Publishing scripts handle the conversion internally and the two methods render images differently: API renders \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e\u003cimg\u003e\u003c/code\u003e tags for upload, browser uses placeholders for paste-and-replace. Passing a pre-converted HTML breaks one or the other.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eMarkdown citation default\u003c/strong\u003e: for markdown input, ordinary external links are converted to bottom citations by default. Use \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--no-cite\u003c/code\u003e only if the user explicitly wants to keep inline links. Existing HTML input is left as-is.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAPI method\u003c/strong\u003e (accepts \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e.md\u003c/code\u003e or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e.html\u003c/code\u003e):\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e${BUN_X} {baseDir}/scripts/wechat-api.ts \u003cfile\u003e --theme \u003ctheme\u003e [--color \u003ccolor\u003e] [--title \u003ctitle\u003e] [--summary \u003csummary\u003e] [--author \u003cauthor\u003e] [--cover \u003ccover_path\u003e] [--no-cite]\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eAlways pass \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--theme\u003c/code\u003e even if it's \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edefault\u003c/code\u003e. Only pass \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--color\u003c/code\u003e when explicitly set by the user or EXTEND.md.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edraft/add\u003c/code\u003e payload rules\u003c/strong\u003e:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eEndpoint: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ePOST https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS_TOKEN\u003c/code\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003earticle_type\u003c/code\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enews\u003c/code\u003e (default) or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enewspic\u003c/code\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eFor \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enews\u003c/code\u003e, include \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ethumb_media_id\u003c/code\u003e (cover required)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eAlways include \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eneed_open_comment\u003c/code\u003e (default \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e1\u003c/code\u003e) and \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eonly_fans_can_comment\u003c/code\u003e (default \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e0\u003c/code\u003e) in the request body, even if the CLI doesn't expose them\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eBrowser method\u003c/strong\u003e (accepts \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--markdown\u003c/code\u003e or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--html\u003c/code\u003e):\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e${BUN_X} {baseDir}/scripts/wechat-article.ts --markdown \u003cmarkdown_file\u003e --theme \u003ctheme\u003e [--color \u003ccolor\u003e] [--no-cite]\n${BUN_X} {baseDir}/scripts/wechat-article.ts --html \u003chtml_file\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eStep 5: Completion Report\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eWeChat Publishing Complete!\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eInput: [type] - [path]\nMethod: [API | Browser]\nTheme: [theme] [color if set]\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eArticle:\n• Title: [title]\n• Summary: [summary]\n• Images: [N] inline\n• Comments: [open/closed], [fans-only/all]    ← API method only\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eResult:\n✓ Draft saved to WeChat Official Account\n• media_id: [media_id]                         ← API method only\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eNext Steps (API):\n→ Manage drafts: https://mp.weixin.qq.com (登录后进入「内容管理」→「草稿箱」)\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eFiles created:\n[• post-to-wechat/YYYY-MM-DD/slug.md (if plain text input)]\n[• slug.html (converted)]\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eFeature Comparison\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Feature | Image-Text | Article (API) | Article (Browser) |\n|---------|:---:|:---:|:---:|\n| Plain text input | ✗ | ✓ | ✓ |\n| HTML input | ✗ | ✓ | ✓ |\n| Markdown input | Title/content | ✓ | ✓ |\n| Multiple images | ✓ (up to 9) | ✓ (inline) | ✓ (inline) |\n| Themes | ✗ | ✓ | ✓ |\n| Auto-generate metadata | ✗ | ✓ | ✓ |\n| Default cover fallback (\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eimgs/cover.png\u003c/code\u003e) | ✗ | ✓ | ✗ |\n| Comment control | ✗ | ✓ | ✗ |\n| Requires Chrome | ✓ | ✗ | ✓ |\n| Requires API credentials | ✗ | ✓ | ✗ |\n| Speed | Medium | Fast | Slow |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eTroubleshooting\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Issue | Fix |\n|-------|-----|\n| Missing API credentials | Follow guided setup in Step 2 |\n| Access token error | Verify credentials valid and not expired |\n| Not logged in (browser) | First run opens browser — scan QR to log in |\n| Chrome not found | Set \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eWECHAT_BROWSER_CHROME_PATH\u003c/code\u003e |\n| Title/summary missing | Use auto-generation or provide manually |\n| No cover image | Add frontmatter cover or place \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eimgs/cover.png\u003c/code\u003e in article directory |\n| Wrong comment defaults | Check \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eneed_open_comment\u003c/code\u003e / \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eonly_fans_can_comment\u003c/code\u003e in EXTEND.md |\n| Paste fails | Check system clipboard permissions |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eReferences\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| File | Content |\n|------|---------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ereferences/image-text-posting.md\u003c/code\u003e | Image-text parameters, auto-compression |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ereferences/article-posting.md\u003c/code\u003e | Article themes, image handling |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ereferences/multi-account.md\u003c/code\u003e | Multi-account compatibility, credentials, Chrome profiles, CLI |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ereferences/api-setup.md\u003c/code\u003e | Guided credential setup |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ereferences/config/first-time-setup.md\u003c/code\u003e | First-time EXTEND.md setup |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eExtension Support\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eCustom configurations via EXTEND.md. See \"Preferences\" for paths and supported options.\n\u003c/p\u003e"])</script><script>self.__next_f.push([1,"1f:[\"$\",\"div\",null,{\"className\":\"skill-page\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"SoftwareApplication\\\",\\\"name\\\":\\\"Baoyu Post To Wechat\\\",\\\"description\\\":\\\"Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP. Supports article posting (文章) with HTML, markdown, or plain text input, and image-tex...\\\",\\\"url\\\":\\\"https://bytesagain.com/skill/baoyu-post-to-wechat\\\",\\\"applicationCategory\\\":\\\"crypto\\\",\\\"operatingSystem\\\":\\\"Any\\\",\\\"offers\\\":{\\\"@type\\\":\\\"Offer\\\",\\\"price\\\":\\\"0\\\",\\\"priceCurrency\\\":\\\"USD\\\"},\\\"publisher\\\":{\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"BytesAgain\\\",\\\"url\\\":\\\"https://bytesagain.com\\\"}}\"}}],[\"$\",\"div\",null,{\"className\":\"breadcrumb\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/\",\"children\":\"BytesAgain\"}],\" › \",[\"$\",\"a\",null,{\"href\":\"/skills\",\"children\":\"Skills\"}],\" › \",\"Baoyu Post To Wechat\"]}],[\"$\",\"div\",null,{\"className\":\"two-col\",\"children\":[[\"$\",\"div\",null,{\"className\":\"two-col-main\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-card\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-badges\",\"children\":[[\"$\",\"span\",null,{\"className\":\"badge\",\"style\":{\"color\":\"#818cf8\",\"background\":\"#818cf822\",\"borderColor\":\"#818cf844\"},\"children\":[\"🦀\",\" \",\"ClawHub\"]}],false]}],[\"$\",\"div\",null,{\"className\":\"skill-top-actions\",\"children\":[\"$\",\"$L21\",null,{\"slug\":\"baoyu-post-to-wechat\"}]}]]}],[\"$\",\"h1\",null,{\"className\":\"skill-title\",\"children\":\"Baoyu Post To Wechat\"}],[\"$\",\"p\",null,{\"className\":\"skill-owner\",\"children\":[\"by \",[\"$\",\"span\",null,{\"children\":[\"@\",\"jimliu\"]}]]}],[\"$\",\"p\",null,{\"className\":\"skill-desc\",\"children\":\"Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP. Supports article posting (文章) with HTML, markdown, or plain text input, and image-tex...\"}],[\"$\",\"div\",null,{\"className\":\"skill-meta\",\"children\":[[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Version\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":[\"v\",\"1.117.5\"]}]]}],[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Downloads\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":\"3,562\"}]]}],[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Installs\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":\"63\"}]]}],false,false,[\"$\",\"div\",null,{\"className\":\"meta-item\",\"style\":{\"flexDirection\":\"row\",\"gap\":6,\"alignItems\":\"center\"},\"children\":[[\"$\",\"a\",\"crypto-defi\",{\"href\":\"/?q=crypto-defi\",\"className\":\"tag\",\"children\":[\"#\",\"crypto-defi\"]}],[\"$\",\"a\",\"writing\",{\"href\":\"/?q=writing\",\"className\":\"tag\",\"children\":[\"#\",\"writing\"]}],[\"$\",\"a\",\"social-media\",{\"href\":\"/?q=social-media\",\"className\":\"tag\",\"children\":[\"#\",\"social-media\"]}],[\"$\",\"a\",\"legal\",{\"href\":\"/?q=legal\",\"className\":\"tag\",\"children\":[\"#\",\"legal\"]}]]}]]}],[\"$\",\"div\",null,{\"style\":{\"marginTop\":6},\"children\":[\"$\",\"a\",null,{\"href\":\"https://clawhub.ai/jimliu/baoyu-post-to-wechat\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"btn-secondary\",\"style\":{\"padding\":\"6px 12px\",\"fontSize\":\".82em\",\"borderRadius\":8,\"background\":\"transparent\",\"border\":\"1px solid #1e1e3f\",\"color\":\"#6b7280\",\"textDecoration\":\"none\",\"whiteSpace\":\"nowrap\"},\"children\":[\"View on \",\"ClawHub\",\" →\"]}]}]]}],[\"$\",\"div\",null,{\"className\":\"install-box\",\"children\":[[\"$\",\"div\",null,{\"className\":\"install-header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"install-dots\",\"children\":[[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#ef4444\"}}],[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#eab308\"}}],[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#22c55e\"}}]]}],[\"$\",\"span\",null,{\"className\":\"install-label\",\"children\":\"TERMINAL\"}]]}],[\"$\",\"div\",null,{\"className\":\"install-body\",\"style\":{\"flexWrap\":\"wrap\"},\"children\":[[\"$\",\"code\",null,{\"className\":\"install-cmd\",\"children\":\"clawhub install baoyu-post-to-wechat\"}],[\"$\",\"button\",null,{\"className\":\"copy-btn\",\"data-cmd\":\"clawhub install baoyu-post-to-wechat\",\"style\":{\"fontWeight\":700},\"children\":\"Copy\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"skill-card\",\"style\":{\"marginBottom\":20},\"children\":[[\"$\",\"h2\",null,{\"style\":{\"color\":\"#f8fafc\",\"fontSize\":\"1.2em\",\"fontWeight\":800,\"margin\":\"0 0 16px\",\"display\":\"flex\",\"alignItems\":\"center\",\"gap\":8},\"children\":\"📖 About This Skill\"}],[\"$\",\"div\",null,{\"style\":{\"fontSize\":\".92em\",\"color\":\"#94a3b8\",\"lineHeight\":1.75},\"dangerouslySetInnerHTML\":{\"__html\":\"$22\"}}]]}],null,null,null,\"$L23\",null,null,null,false,false]}],\"$L24\"]}]]}]\n"])</script><script>self.__next_f.push([1,"20:[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n        document.querySelectorAll('.copy-btn, .script-copy-btn').forEach(btn =\u003e {\\n          btn.addEventListener('click', () =\u003e {\\n            const cmd = btn.getAttribute('data-cmd');\\n            if (!cmd) return;\\n            navigator.clipboard.writeText(cmd).then(() =\u003e {\\n              const orig = btn.textContent;\\n              btn.textContent = 'Copied!';\\n              setTimeout(() =\u003e btn.textContent = orig, 1500);\\n            }).catch(() =\u003e {});\\n          });\\n        });\\n      \"}}]\n"])</script><script>self.__next_f.push([1,"26:I[71521,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\",\"/_next/static/chunks/0~t057~scpf-f.js?dpl=dpl_8BavFdE5zgaEzeDDeRJuHgbHFqSc\"],\"default\"]\n25:T406,\u003cp style=\"margin:8px 0\"\u003e| Issue | Fix |\n|-------|-----|\n| Missing API credentials | Follow guided setup in Step 2 |\n| Access token error | Verify credentials valid and not expired |\n| Not logged in (browser) | First run opens browser — scan QR to log in |\n| Chrome not found | Set \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eWECHAT_BROWSER_CHROME_PATH\u003c/code\u003e |\n| Title/summary missing | Use auto-generation or provide manually |\n| No cover image | Add frontmatter cover or place \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eimgs/cover.png\u003c/code\u003e in article directory |\n| Wrong comment defaults | Check \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eneed_open_comment\u003c/code\u003e / \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eonly_fans_can_comment\u003c/code\u003e in EXTEND.md |\n| Paste fails | Check system clipboard permissions |\u003c/p\u003e23:[\"$\",\"section\",null,{\"className\":\"skill-card\",\"style\":{\"marginBottom\":20},\"children\":[[\"$\",\"h2\",null,{\"style\":{\"color\":\"#f8fafc\",\"fontSize\":\"1.2em\",\"fontWeight\":800,\"margin\":\"0 0 16px\",\"display\":\"flex\",\"alignItems\":\"center\",\"gap\":8},\"children\":\"📋 Tips \u0026 Best Practices\"}],[\"$\",\"div\",null,{\"style\":{\"fontSize\":\".92em\",\"color\":\"#94a3b8\",\"lineHeight\":1.75},\"dangerouslySetInnerHTML\":{\"__html\":\"$25\"}}]]}]\n24:[\"$\",\"div\",null,{\"className\":\"two-col-side\",\"children\":[\"$\",\"$L26\",null,{\"category\":\"crypto\",\"currentSlug\":\"baoyu-post-to-wechat\",\"name\":\"Baoyu Post To Wechat\",\"tags\":[\"crypto-defi\",\"writing\",\"social-media\",\"legal\"]}]}]\n"])</script></body></html>