xhs-automation-publisher
Run authorized Xiaohongshu browser workflows for login checks, creator preview fill, publish blockers, final posting, search, export, or approved engagement. Prefer native signed-in Chrome; keep Pytho
SKILL.mdskills/xhs-automation-publisher/SKILL.md
GitHubXHS Automation Publisher
This skill vendors white0dew/XiaohongshuSkills as a deterministic Xiaohongshu batch/export fallback. Interactive logged-in work should first load $browser-automation-router and use the Codex Chrome extension when available. The vendored Python + Chrome DevTools Protocol (CDP) commands remain useful for repeatable preview filling, creator data export, and explicit batch contracts.
Use With The Local Role System
- Use
$xhs-publish-assistantfirst when the user only needs copy-ready title/body/tags/image directory output. - Use
$xhs-automation-publisherwhen the user explicitly needs browser automation, login diagnosis, creator-center filling, auto-publish blocker debugging, content-data export, search/detail collection, or authorized final posting. - Keep
内容主编as coordinator for content strategy and publish authorization.小红书executes this skill only after scope and account boundary are clear.
Hard Gates
- Default to preview/fill, not final posting. Prefer the native Chrome surface for an interactive reviewable fill; use
publish_pipeline.py --previeworcdp_publish.py fillwhen a deterministic script fallback is required. publish_pipeline.pydefaults to clicking publish when--previewis absent. Treat that as high risk.- Do not run
click-publish,publish,post-comment-to-feed,respond-comment,note-upvote,note-unvote,note-bookmark,note-unbookmark,remove-account,re-login, orswitch-accountwithout a fresh explicit user approval for that exact action. - Do not store cookies, account tokens, login QR payloads, real account names, or Chrome profile paths in this repo.
- Do not use this skill for scraping or interaction at scale. Respect platform rules, rate limits, and account risk.
- Stop before final publish if the target account, media list, title, body, tags, or publish time is uncertain.
Surface Selection
- Use the Codex Chrome extension for an existing signed-in profile, visible creator-center review, one-off form filling, and user-observed troubleshooting.
- Use the in-app Browser only when its separate login state is acceptable; it does not inherit the user's Chrome profile.
- Use the vendored Python/CDP commands for batch export, a stable command contract, unattended repeatability, or an explicit fallback when native plugins are unavailable.
- Do not launch or copy a local Chrome profile merely to bypass a missing native plugin. Do not commit profile paths or login state.
Safe Default Flow
- Confirm target account, desired mode, media files, and whether final posting is authorized.
- For interactive work, verify the native Chrome surface and active account. For a script fallback, check/login only when requested:
python scripts/cdp_publish.py check-login
python scripts/cdp_publish.py login
- Fill creator-center form for human review:
python scripts/publish_pipeline.py --preview --title-file title.txt --content-file content.txt --images image1.png
- Only after explicit approval, run a publish command without
--previewor runclick-publish. - Return exact commands, status markers, account boundary, and any manual actions left.
Useful Commands
python scripts/chrome_launcher.py
python scripts/chrome_launcher.py --restart
python scripts/cdp_publish.py list-accounts
python scripts/cdp_publish.py search-feeds --keyword "选题关键词"
python scripts/cdp_publish.py content-data --csv-file "content_data.csv"
The scripts require Python 3.10+, Google Chrome, and dependencies from requirements.txt.
Failure Handling
- Not logged in: switch to headed login and ask the user to scan QR code.
- Selector/page failure: inspect
scripts/cdp_publish.pySELECTORS, upload waits, editor fill, and publish-button logic. - Media path failure: use absolute paths; for WSL/remote CDP path mismatch, consider
--skip-file-check. - Comment/engagement uncertainty: do not guess target IDs or tokens; ask for the exact note/comment target.