Install
openclaw skills install @bonniegeng-max/xiaohongshu-preflight-check小红书发布前文本合规自查(4 组)。把「发一篇笔记之前要人工过的那些关」变成一条命令 + 一个退出码:违禁词·敏感词·限流词检测(复用离线词库)、标题与篇幅规范、AI 声明与强制标注、导流风险。纯本地、零依赖、不调用付费 API,退出码 0/1/2/3 可直接卡住发布流程。
openclaw skills install @bonniegeng-max/xiaohongshu-preflight-check把「发一篇笔记之前要人工过的那些关」变成一条命令 + 一个退出码。
发布前一次性过完 4 组检查,直接告诉你:能不能发、哪一条要改、改成什么。
这是对照平台公开规范做发布前自检。类比:进机场前自己先检查一遍行李。
架构上的对应约束:词库 references/prohibited-words.md 里带有运营视角的叙述,
本 skill 只取它的「词 + 级别 + 替代建议」三列,不引用那些叙述。词库是单一真相源,
过滤是这一层的责任。
# 1. 从笔记 md 读(推荐):读「## 标题」「## 正文」「## 标签」三段
python3 scripts/preflight.py --file 笔记终稿.md
# 2. 直接传文本
python3 scripts/preflight.py --title "标题" --body "正文" --tags "#标签1 #标签2"
# 3. 位置参数
python3 scripts/preflight.py "标题" "正文" "标签"
# 4. 机器可读(接自动化)
python3 scripts/preflight.py --file 笔记终稿.md --json
未提供的项自动跳过,不报错(只给标题也能跑,只是不做正文检查)。
| 码 | 含义 | 该怎么办 |
|---|---|---|
0 | 通过 | 可以发 |
1 | 有 P0 必改项 | 不许发,清空 P0 再重跑 |
2 | 只有 P1 建议项 | 可发,但建议顺手改 |
3 | 输入缺失 / 词库找不到 / 解析失败 | fail-closed,按「不允许发布」处理 |
为什么 3 要单独留一档:「没查出来」和「查不了」必须是两件事。 一条发布前的自检命令如果把依赖缺失静默当成「干净」,那它比没有更危险 —— 你会以为查过了。
| # | 检查组 | 查什么 | 数据来源 |
|---|---|---|---|
| 1 | 违禁词·敏感词·限流词 | 实测硬词(如「白嫖」)、营销高危组合(官方+免费+拿证)、外部平台名、极限词、价格诱导、账号级禁区词 | 词库(单一真相源) |
| 2 | 标题与篇幅规范 | 标题 20 字符上限、过短、无结果感钩子、感叹号 / emoji 堆叠;正文 1000 字符上限 | references/platforms/xiaohongshu.json |
| 3 | AI 声明与强制标注 | 文本命中 AI 生成 / 辅助信号时提醒勾选声明;并列出平台强制标注项供逐条核对 | 平台 JSON + 词库「七」 |
| 4 | 导流风险 | 手机号、邮箱、二维码 / 扫码话术、私域话术 | 平台 JSON + 词库「二」「五」 |
三档分级:P0 必改(阻塞)/P1 建议改(不阻塞)/提示(不影响退出码)。
【违禁词·敏感词·限流词】
✗ P0 [全文]「白嫖」 ×2
依据:9/12 两次实测"仅自己可见"软限流,改标题去词后重过审核即恢复
建议:直接删,靠"结果感"钩子(如"4小时拿3个徽章")
【标题与篇幅规范】
! P1 [标题]「24 字符(上限 20)」
依据:小红书标题上限 20 字符,超出会被折叠,钩子在列表页看不全
建议:压到 20 字符内,把结果感放前半句
──────────────────────────────────────────────
结论:✗ 需改 —— P0 共 9 处(7 项),P0 未清空 = 禁止发布
最小补法
1. 先清 P0(9 处)—— 这一档清空之前不要发
2. 再处理 P1(1 处)—— 顺手改,不阻塞
3. 重跑自检:python3 scripts/preflight.py --file 笔记终稿.md
未覆盖:图片 / 封面 / 视频 —— v1 只查文本
退出码 1
同一个词出现多次会折叠成 ×N —— 自检结果要能一眼看完,不是把出现次数都铺出来。
违禁词库的单一真相源是 skill xiaohongshu-prohibited-words,
本 skill 不复制它,只在运行时按候选路径去读。
⚠️ 这是一个硬依赖 —— 用之前先装它,否则本 skill 会一直返回退出码 3:
clawhub install xiaohongshu-prohibited-words
其它行为:
--wordlist <路径> 指定,或环境变量 XHS_WORDLIST解析逻辑也不在这里:本 skill 复用词库 skill 的 scripts/wordlist.py
(运行时按它相对于词库的路径动态载入),不保留自己的解析副本。
段落映射与逐词级别(哪一段归哪一组、默认什么级别、「微信号」为什么提到 P0)
写在词库 skill 的 references/sections.json —— 本 skill 下一次运行自动跟上。
改平台规则(字数上限、标题规则、AI 信号词)→ 只改
references/platforms/xiaohongshu.json,不用动脚本。
改词 / 改级别 → 改词库那边(xiaohongshu-prohibited-words/references/):
prohibited-words.md 加词、sections.json 改段落级别 —— 本 skill 下次运行自动跟上。
加平台(v2 方向) → 在 references/platforms/ 下加一个 <platform>.json
(公众号 / 抖音…),用 --platform <name> 切。只加数据文件,不改架构。
python3 scripts/selftest.sh # 改完跑一遍,确认 4 条路径的退出码没跑偏
scripts/preflight.py — 主脚本(纯 stdlib,零依赖)scripts/selftest.sh — 退出码回归自测references/platforms/xiaohongshu.json — 平台规则(字数上限、标题规则、AI 信号)references/wordlist-bridge.md — 与词库的引用关系、只取三列原则、解析逻辑位置xiaohongshu-prohibited-words(references/sections.json + scripts/wordlist.py)examples/ — 通过 / 不通过两个用例xiaohongshu-prohibited-wordsmulti-wordcheck —— 那是三平台通用词检,本 skill 只盯「小红书发布前这一刻」xiaohongshu-prohibited-words 的词库(运行时不复制)xiaohongshu-content-workflow 串在内容生产最后一步当闸门