| name | xhs-automation-publisher |
| description | 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 Python/CDP for deterministic batch fallback. |
XHS 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-assistant first when the user only needs copy-ready title/body/tags/image directory output.
- Use
$xhs-automation-publisher when 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 --preview or cdp_publish.py fill when a deterministic script fallback is required.
publish_pipeline.py defaults to clicking publish when --preview is 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, or switch-account without 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
--preview or run click-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.py SELECTORS, 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.