Install
$ agentstack add skill-leeguooooo-xhs-skill-xhs-skill ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
本技能是 xhs-* 的合并版,目标是让用户只需要 clawhub install xhs-skill 一次即可开始使用。
约束:
- 所有浏览器交互(打开页面/点击/输入/上传/截图/登录/导出)全部委托
agent-browser-stealth。 - 禁止在本仓库编写/维护发布编排脚本(如
publish_from_payload);发布动作必须在会话中由agent-browser-stealth执行。 - 禁止使用
agent-browser(旧通道禁用,统一使用agent-browser-stealth)。 - 所有敏感数据(cookies、导出文件、截图)只落地在本机
data/目录,不要粘贴到聊天里。
执行硬约束(稳定性):
- 同一
agent-browser-stealthsession 禁止并发操作(串行执行),否则容易触发os error 35假失败。 snapshot的 ref 会漂移:关键动作前后必须重抓snapshot -i,并用placeholder/role/text做二次定位兜底。- 扫码不等于登录成功;必须做后验校验(见下方 A 节“登录成功判定”)。
安装
clawhub install xhs-skill
cd skills/xhs-skill
npm i
说明:npm i 仅用于本技能自带的本地 CLI(二维码解码、cookies 工具)。如果你不需要解码二维码/转换 cookies,也可以只用 agent-browser-stealth 完成扫码与导出。
目录约定(本机)
建议在你运行命令的工作目录下准备:
data/xhs_login_qr.png:登录页二维码截图(PNG)data/raw_cookies.json:导出的原始 cookies(JSON)data/xhs_cookies.json:归一化后的 cookies(JSON)data/exports//:导出数据(CSV/XLSX/截图)data/assets//:发布笔记用的图标/配图素材与来源记录
mkdir -p data
A. 登录(扫码)并保存 cookies
目标:登录小红书创作者中心并导出 cookies,避免频繁重复登录。
- 用
agent-browser-stealth打开登录页:
https://creator.xiaohongshu.com/login- 若默认展示「手机号/验证码登录」,点击「扫码」切换到二维码视图
- 让
agent-browser-stealth截图保存二维码(PNG)到data/xhs_login_qr.png
- (可选)用本地 CLI 解码二维码文本并打印 ASCII 二维码:
node ./bin/xhs-skill.mjs qr show --in ./data/xhs_login_qr.png
OpenClaw 回传规范(强制):
- 禁止只回传文件路径(例如仅说
data/xhs_login_qr.png)。 - 必须先执行
node ./bin/xhs-skill.mjs qr show --in ./data/xhs_login_qr.png,然后把输出的二维码文本 + ASCII 二维码直接发给用户。 - 若会话支持图片渲染,再附上二维码截图绝对路径(或图片附件)作为补充。
- 发完二维码后必须暂停,等待用户确认“已扫码”再继续 cookies 导出。
推荐回传模板:
请用小红书 App 扫这个二维码登录。
二维码文本:
- 用小红书 App 扫码完成登录后,导出 cookies 到
data/raw_cookies.json(不走 DevTools):
agent-browser-stealth cookies --json > ./data/raw_cookies.json
- 归一化 cookies 并保存到
data/xhs_cookies.json:
node ./bin/xhs-skill.mjs cookies normalize --in ./data/raw_cookies.json --out ./data/xhs_cookies.json
node ./bin/xhs-skill.mjs cookies status --in ./data/xhs_cookies.json
5.1 推荐用脚本做后验校验(可执行门禁):
# 例:先让 agent-browser-stealth 记录当前 URL 与后台探测后的 URL
CURRENT_URL="$(agent-browser-stealth get url)"
agent-browser-stealth open https://creator.xiaohongshu.com/creator/home
PROBE_FINAL_URL="$(agent-browser-stealth get url)"
node ./scripts/verify_login.mjs \
--cookies ./data/xhs_cookies.json \
--current-url "$CURRENT_URL" \
--probe-final-url "$PROBE_FINAL_URL" \
--json
登录成功判定(强制):
- 必须同时满足以下 2 条才可回报“登录完成”(
web_session不再作为硬依赖): - 当前 URL 已离开
/login - 可访问创作者后台页面,且不会 401/回跳登录
- 加分项:cookies 中存在“session-like cookie”(例如
web_session,或 cookie 名含session)。没有也可能可用,但稳定性更差。 - 任一强制条件不满足,必须回报“登录失败/未完成”,并重试登录流程;禁止误报成功。
登录结果输出契约(JSON):
{
"task": "xhs_login",
"ok": true,
"checks": {
"left_login": true,
"backend_not_rejected": true,
"has_session_like_cookie": true
},
"artifacts": {
"qr_png": "data/xhs_login_qr.png",
"raw_cookies": "data/raw_cookies.json",
"normalized_cookies": "data/xhs_cookies.json"
}
}
失败时 ok=false,并给出失败项(例如仍在 /login、或 probe 回跳),禁止输出“已完成”。
- (可选)生成
Cookie:header:
node ./bin/xhs-skill.mjs cookies to-header --in ./data/xhs_cookies.json
失败回退:
- 二维码解码失败:通常是没有切到扫码视图或二维码太小,让
agent-browser-stealth放大后重新截图(仍为 PNG)。 - cookies 归一化失败:保留原始
data/raw_cookies.json,后续再扩展兼容分支。
A1. 防封/限流运行规范(强制)
核心结论:小红书风控主要看“节奏 + 指纹 + 行为 + IP + 账号权重”。工具本身不是主因,使用方式才是主因。
强制策略:
- 真人节奏:
- 禁止连续无停顿点击/填写;关键动作之间必须随机停顿(建议
1.2s~7s)。 - 输入优先
type --delay(逐字),避免全量瞬时fill。
- 固定指纹:
- 运行发布流程时优先固定
--profile,并启用--headed。 - 推荐同一账号长期复用同一个 profile 目录,不要每次新建临时环境。
- 发布频率门禁:
- 同一 profile 默认 `24h ./data/tag_registry.json 填充 -> 读回校验 -> 发布 -> 回查。
- 若任一门禁失败(
verify/review非ok=true),必须停止在“发布前”,禁止继续点击提交。
P0:发布编排器(流程编排,不是仓库脚本):
- 预检:
- 入口路由固定从
https://creator.xiaohongshu.com/publish/publish进入;禁止把/creator/*作为首入口。 - 若被跳到
https://creator.xiaohongshu.com/new/home(“你访问的页面不见了”),立即回到/publish/publish重试。 - 进入发布页后先切到“图文”模式,再上传图片;未切图文不进入后续步骤。
- 填充:
- 写标题、正文、标签/话题、可见性。
- 读回校验:
- 校验通过才允许点击发布。
- 发布:
- 点击发布后等待页面状态稳定并记录 URL。
- 回查:
- 先检查 URL 参数包含
published=true; - 再从页面菜单进入“笔记管理”做二次确认,不允许硬编码管理页直链回查。
P0:路由与状态稳定性(强制):
- 稳定入口只认
/publish/publish;其他页面只作为中转,不作为成功判定依据。 - “发布页可用”不等于“管理页可用”:发布后必须菜单跳转二次查验。
- 若发布页元素未出现,先检查是否处于“图文模式 + 图片已上传”状态,再判断失败。
P0:选择器双通道(强制):
- 第一通道(默认):语义定位(
placeholder + role + 可见性 + 附近文案)。 - 第二通道(兜底):DOM 结构线索定位(例如标题输入框 placeholder 语义 + 正文编辑器
tiptap/ProseMirror语义类名)。 - 禁止只依赖
snapshot ref或@e1/@e2序号;每个关键动作前后都要snapshot -i二次确认。 - DOM 兜底只作为会话级临时手段,命中后仍需“读回校验”确认字段正确,不把脆弱 selector 当硬依赖。
P0:写入可靠性(强制):
- 标题字段必须满足:单行、可见、可编辑、placeholder 命中“标题”语义。
- 正文字段必须满足:多行或
contenteditable、可见、可编辑、placeholder/附近文本命中“正文/内容”语义。 - 写入后必须做“双向读回校验”:同时读取标题和正文,计算
title_len与body_len。 - 错位判定:若
title_len > 20且 `body_len 标题写短标题 -> 正文写正文 -> 读回再校验);仍失败则中止并回报失败,不允许继续提交。 - 强制规则:标题禁止包含
#标签、长段正文、链接;标签必须通过小红书发布页“标签/话题交互”选择,不把标签文本塞进标题。
P0:草稿确认闭环(强制):
- 点击“暂存离开”后,必须等待并验证“保存成功/已保存草稿”类 toast。
- 进入草稿列表,验证出现“新草稿条目”。
- 新条目校验最少包含:
- 标题前缀匹配本次标题;
- 时间戳在本次运行窗口内(建议 2 分钟内);
- 打开草稿后读回
title/body/media/tags仍满足门禁。
- 任一校验失败判定为“草稿保存失败”,允许重试 1 次;重试后仍失败则中止流程。
P0:图片预处理(无脚本版):
- 不新增仓库脚本;统一采用“发布前本地预处理 + 读回尺寸确认”。
- 推荐目标尺寸:
1242x1660(3:4 竖版)。 - 可选命令(单次执行,不落仓库脚本):
# macOS: 先居中裁剪再缩放到 1242x1660(按需替换输入输出路径)
sips -c 1660 1242 ./data/assets/in.png --out ./data/assets/out_1242x1660.png
- 上传后必须在发布页确认缩略图比例正常;若拉伸/裁切异常,先替换素材再继续。
P0:发布前硬校验(强制):
- 标题长度
= 80。 - 已上传图片(图文至少 1 张,且可见缩略图)。
- 已选择真实话题
>= 3(通过小红书话题交互选择,不是正文拼接)。 - 标题/正文/标签无链接词(
http、https、www.、域名形态)。 - 任一不满足直接中止,不允许“先发再修”。
P0:发布后双重确认(强制):
- 第一重:发布后 URL 含
published=true。 - 第二重:从发布页菜单进入“笔记管理”,确认列表出现新笔记(标题前缀 + 时间窗口)。
- 管理页若被重定向或不可达,判定“回查未完成”,记录
run_log并提示人工复核。
P1:热点到 payload 半自动(无脚本版):
- 不新增
newsnow -> payload代码生成器;改为会话模板填充。 - 采集热点后,按以下模板生成
data/publish_payload.json,人工只改“观点段”:
{
"topic": "今日热点:",
"source": {
"name": "",
"url": "",
"date": "YYYY-MM-DD",
"evidence_snippet": "",
"key_facts": ["", ""]
},
"post": {
"title": "",
"body": "",
"tags": ["#标签1", "#标签2", "#标签3"],
"real_topics": ["#真实话题1", "#真实话题2", "#真实话题3"],
"media": ["/abs/path/1.png"]
}
}
P1:标签/话题池维护(无脚本版):
- 每天第一次发布前,手动刷新一次
data/tag_registry.json(从小红书发布页话题选择器抄录)。 - 若当天未刷新,流程必须回报风险提示并建议先刷新后再发布。
- 门禁保持不变:
tags与real_topics都必须命中tag_registry。
P1:流程可观测(无脚本版):
- 每次运行结束都产出
data/run_log/.json(手工写文件即可,不新增脚本)。 - 建议字段:
steps、durations_ms、failed_step、error_message、screenshots、result_url、draft_check、editor_check、route_check、post_publish_check。
P1:固定模板(强烈建议):
- 固定标题模板:
[主题词]+[观点/结论],目标 12~18 字,留 2~8 字缓冲避免超长。 - 固定正文模板:
开场观点 -> 事实1 -> 事实2 -> 个人判断 -> 行动建议,默认 >120 字。 - 固定标签与话题池:仅从
data/tag_registry.json选取,避免临场造词导致门禁失败。
P2:回归用例(每日 smoke,手工执行):
- 场景 1:仅存草稿(不发布)。
- 场景 2:草稿后二次编辑再存草稿。
- 场景 3:正式发布(通过全部门禁)。
- 每个场景都输出一份
run_log,用于对比“定位稳定性/错位率”。
流程(浏览器侧全部由 agent-browser-stealth 完成):
- 确保已登录(先完成上面的 A,或已有有效登录态)。
- 准备并校验
data/publish_payload.json(必须ok=true)。 - 打开
https://creator.xiaohongshu.com/publish/publish,先snapshot -i获取最新结构。 - 切图文模式并上传媒体(确认缩略图比例与数量)。
- 用“语义定位优先 + DOM 兜底”填写标题与正文,写入后执行“双向读回校验 + 错位自愈”。
- 通过小红书标签交互选择标签与真实话题(至少 3 个),不要把标签写进标题。
- 执行发布前硬校验(标题、正文、图片、话题、无链接词)。
- 点击“暂存离开”并执行草稿闭环校验(toast + 列表新条目 + 读回)。
- 点击“发布/提交”前暂停,要求用户确认最终预览。
- 发布后执行双重确认(
published=true+ 菜单进入笔记管理二次查验),并写入run_log。
发布结果输出契约(JSON):
{
"task": "xhs_publish",
"ok": true,
"result_url": "https://creator.xiaohongshu.com/....",
"content_checks": {
"title_len": 18,
"body_len": 136,
"tag_count": 3,
"real_topic_count": 3,
"editor_alignment_ok": true,
"draft_saved_ok": true,
"publish_precheck_ok": true,
"published_param_ok": true,
"manage_menu_check_ok": true,
"topic": "今日热点:xxxx",
"source_date": "2026-02-12"
},
"artifacts": {
"payload_json": "data/publish_payload.json",
"media_inputs": ["..."],
"run_log_json": "data/run_log/2026-02-27_14-36-00.json",
"error_screenshot": null
}
}
发布失败时 ok=false,并返回 error_message、error_screenshot 路径、未通过的 missing_checks 与 failed_stage(preflight/fill/readback/publish/postcheck)。
C. 导出创作者中心数据(CSV/XLSX 或截图)
目标:把创作者中心关键数据导出到 data/exports//,用于后续分析。
- 确认已登录。
- 用
agent-browser-stealth进入创作者中心的常用分析页(仪表盘/内容分析/粉丝分析)。 - 每个页面:
- 优先使用页面自带导出(如有)到
data/exports// - 无导出时:保存关键区块截图到同目录
- 记录:导出时间范围、口径说明、页面 URL。
本地 CLI(本技能自带)
命令:
node ./bin/xhs-skill.mjs qr show --innode ./bin/xhs-skill.mjs cookies normalize --in --outnode ./bin/xhs-skill.mjs cookies status --innode ./bin/xhs-skill.mjs cookies to-header --innode ./scripts/verify_publish_payload.mjs --in --policy ./config/verify_publish_policy.json --tag-registry ./data/tag_registry.json --min-registry-tags 12 --require-source-evidence on --strict-anti-ai on [--mode hot]node ./scripts/review_publish_payload.mjs --in --policy ./config/review_policy.json --taxonomy ./config/review_taxonomy.json --ai-provider auto --require-ai off [--mode hot]
D. 轻量发版流程(维护者)
- 先跑本地门禁:
npm run check:constraintsnpm test
- 查看改动只包含预期文件:
git status --short - 用中文 Conventional Commit 提交(示例):
docs(skill): 补充发版前快速自检清单
- 发布到 ClawHub(patch):
clawhub sync --all --bump patch --changelog "docs: 补充发版前快速自检清单"
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: leeguooooo
- Source: leeguooooo/xhs-skill
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.