---
name: nook-xhswrite
version: 2.1
description: 小红书图文的内容层。把粗糙素材（文章、逐字稿、新闻、一句话念头）提炼成事实清单、一句话核心、框架和逐页提纲，写出能交给 nook-xhspage 渲染的方案 JSON，并写图文下方的标题、标签和正文。流程有强制停止点：品牌要先设置，事实和核心要用户确认，截图和成果图必须由用户提供；交付前用脚本检查方案、正文和去 AI 味。图里只放标题、框架、事实、数据、流程，长文写进正文。用户要做小红书图文、把素材拆成小红书卡片、写小红书标题和正文时使用。不画图，不发布，不采集。
---

# 1 nook-xhswrite

小红书图文的内容层。上游是粗素材，下游是 `nook-xhspage`（把方案渲染成 3:4 图片）。本 skill 决定图上放什么、分几页、每页用哪种页型，并写图文下方的标题、标签和正文。

2.0 是重写，沿用旧名字。旧版的“一句话直出整篇成稿”和 5 类型爆款公式已移除；保留三条：每页是一个可单独收藏的信息单元，页数由内容决定，平台风控规则。

## 1.1 四条根本原则

1. **提炼框架，不压缩字数。** 图的任务是让读者看清结构。图上只放标题、框架、事实、数据、流程和逻辑；论述、背景、体会写进图文下方的正文。
2. **事实只来自素材。** 数字、引语、名称、步骤，素材里没有就不写。框架的位置可以推理，事实不可以编。
3. **图片只由用户提供。** 截图和成果图是事实类材料，agent 不自己找、不去本机翻、不用占位图、不用生成图冒充。
4. **每一步都要过检查。** 脚本查得出的（字数、素材 id、去 AI 味、正文格式）交给脚本；脚本查不出的（有没有锚点、节奏是不是太顺）按 1.8 的自检清单读一遍。

## 1.1b 用户只给一句话时怎么做（默认行为）

用户通常只会说“把这篇做成小红书图文”，不给路径，不提关卡。这时不要求用户补任何说明，按下面的默认来：

1. 先读本文件和 `nook-xhspage/SKILL.md`（1.5 硬规则）。两个 skill 在同一个 `skills/` 目录下。
2. 工作文件夹：在素材文件旁边新建 `xhs_<素材文件名里的期号或主要词，去掉空格，不超过 12 个字>/`（例如 `xhs_261016谷歌Pro`），所有关卡文件和 plan.json、post.md 都放这里。用户没指定位置就用它，不要问。
3. 关卡照常走，每个关卡写完文件就停下；停下时只说三件事：写好了什么、哪里是推理不是素材、请用户回复“继续”或提修改。不要一次问多个问题。
4. 用户的回复只有“好”“继续”“行”也算确认；用户直接提了修改，改完再停一次。
5. 用户问的是别的事（比如只要标题、只要封面），只做那一件，别拉出整套流程。
6. 如果环境里读不到本 skill（agent 没有注册它），用户只需把 skill 文件夹路径告诉 agent，其余按本节执行。

## 1.2 流程：关卡 0 加五个关卡，每关停下等用户

每个关卡的输出格式固定，见 `references/templates.md`，文件放在方案文件旁边。

**关卡 0：品牌设置（只在第一次）。**
运行 `nook-xhspage` 的 `python xhs.py setup --status`。未设置时，先问用户四件事：有没有自己的 IP 人物形象，有没有自己的 Logo，账号名叫什么，默认用哪种视觉风格；用户没有特别说明时，直接用通用款：`setup --default`（IP 人物薄荷加薄荷风格）。用户答完，按 `nook-xhspage` 的 1.3 节运行一次 `setup`。已经设置过的，不再询问，直接进关卡 1。没有人物形象的用户，封面不用 cover_person。

**关卡 1：事实清单加一句话核心。**
读素材，判断类型。长素材按 `references/extract.md` 分段抽。列事实清单（每条带原文位置）、一句话核心（给谁，获得什么）、1 到 4 个主题词。素材里没有可用事实时，直接告诉用户“这条素材只有观点，没有事实”，让用户决定是否补素材。输出 `facts.md`，停下，等用户确认。

**事实边界（弱模型最容易出错的地方）。**
- 每条事实写“素材原句”加“位置”，素材里的猜测单独标“推测”，图上带“可能”“据说”这类语气，不能写成定论，也不用“真相”“内幕”做标题。
- 素材没给具体日期和数字，就不写。时间轴的 time 字段只能用素材里出现的说法（如“2月”“八个月后”）；素材里没有时间线，就改用 list、cycle、compare，不要编日期。
- 版面放不下，把原句缩短，不换内容；不能因为“压字”就把一个数字换成另一个数字。
- 一页上的每句话，包括脚注、页脚、小注，都必须能在事实清单里找到对应条目，找不到的整句删掉。脚本只能查数字和日期，没有数字的编造（比如“旗舰都换了两轮”）只能靠你自己逐句核对。
- 页面上的主语要和事实一致：断更的是 Pro，不是整个 Gemini；写之前回看事实原句。
- 每个关卡的确认只能来自用户，自己不能代为确认。
- 汇报只写命令真实的输出和退出码，不写没有逐项核对的“全部通过”。

**关卡 2：框架和逐页提纲。**
按 `references/frameworks.md` 选一个主框架。输出 `outline.md`：页序、页型、这一页的一句话、事实来源（事实清单的编号，或“推理，无数据”）、视觉元素（按 1.3 的判断，写“放：贴纸 id”或“不放：原因”）、风格建议和理由。

- **封面加第 2 页合起来必须回答：这是什么、给谁、得到什么。**主题词要出现在封面或第 2 页的文字里。图文靠封面决定点不点开，悬念留给正文。
- 风格：先看品牌的默认风格（`xhs.py setup --status`），没有特别理由就用默认；内容明显属于另一类时可以改，并说明理由。工具、技术、Agent 类可用深色（dark）；人物、观点、清单、入门类可用手账（paper）；船票风（ticket）是 nook 的品牌款。
- 相邻两页页型不同，一篇至少 3 种页型，3 到 9 页。

输出后停下，等用户确认。

**关卡 3：素材需求清单。**
输出 `needs.md`：每页需要用户提供的截图或成果图，写清哪一页、要什么、为什么、什么格式。没有需要时写“无”。**停下**，等用户把文件放进 `inputs/`，或明确说“这页换成不用图的页型”。没有收到之前，不继续，不替用户找，不填占位。

**关卡 4：封面候选。**
输出 `covers.md`：2 到 3 个封面方案（页型、封面字、钩子类型、风格），钩子类型从 `references/hooks.md` 选。让用户选一个。

**关卡 5：方案、正文包、交付。**
1. 按 `nook-xhspage` 的词表写 `plan.json`，`meta` 里写 `facts`（事实清单）和 `subject_terms`。示例见 `references/plans/`（12 个框架各一份）。
2. 写 `post.md`（标题 3 个、标签、正文、删除测试记录、事实对照，格式见 `references/templates.md`）。正文写完调用 `nook-alive` 做删除测试，只删不改，把删掉的内容记进“删除测试记录”。
3. 运行 `python xhs.py deliver plan.json post.md`。方案校验、正文检查、出图三项都过才算完成，缺一项就按报错改。
4. 逐页看图，把图和正文交给用户，按意见改。

## 1.3 贴纸放不放

贴纸不是必填，也不是越多越好。每一页按七步判断，任何一步答“不放”就停：

1. 页型没有贴纸位（toc、pyramid、stats、shots）→ 不放。
2. 页型自带贴纸（compare、cycle、matrix）→ 不再加。
3. 页面主体是用户的截图、成果图或数据图（step、result、bar、line、funnel）→ 不放。
4. 内容严肃或负面（风险、事故、损失、违规、隐私、健康、金融、法律）→ 不放。
5. 页面已经满（文字超过 70 字，或清单条目 4 个以上）→ 不放。
6. 素材库里找不到贴切的 → 不放，宁缺毋滥。
7. 都通过才放：每页最多 2 个，同一个贴纸全篇不重复，有贴纸的页不超过 60%。

`python xhs.py suggest-assets plan.json` 按这七步逐页给出结论和候选。候选只按关键词匹配，放之前自己判断是否贴切。

## 1.4 图上的文字

- 标题写内容本身，不写口号。“做封面，差在哪”可以，“一图看懂封面”不行。
- 清单项、步骤名、层名写名词或动宾短语，说明一行以内。
- 数字写真实数字，带单位；没有数据就不写，图表没有真实数据时写“示例数据”。
- 高亮词每个字段最多一处，用 `[[词]]` 标，选这一页最关键的词。
- 字数以版面放得下为准：`validate` 报超限就删，`render` 报“留白不足”或“贴纸压住文字”就删条目；不缩字号。
- 页面不画页码，平台界面自带。

## 1.5 正文、标题和标签

- 正文是第三人称，呈现事实和数据，不立人设，不写“我觉得”式的感悟，除非素材里本来就是作者的原话，原话原样保留。
- 400 到 800 字，自然段，不用粗体，不用列表；第一句直接说内容。
- 标题 3 个（搜索型、结果型、清单型），每个 15 到 25 字，写法见 `references/hooks.md`。
- 标签 5 到 8 个，写成 `#关键词`，不堆无关热词。
- 结尾用站内的收藏或评论钩子，见 `references/hooks.md` 第 4 节。

## 1.6 选题

选题不归本 skill。上游的选题由 `nook-topic` 等 skill 负责；用户给的一个选题或一句话，按“一句话念头”当素材走关卡 1，事实清单里写“素材只有选题，没有事实”，提纲里标“推理，无数据”，再由用户补事实。

## 1.7 平台规则（硬规则）

- 不放二维码、联系方式、站外指向；不做“扣 X 领 X”“加微信”式的诱导互动。
- 结尾用站内的评论或收藏钩子，不抽奖。
- 不使用任何自动发布、自动评论、自动采集小红书的工具，发布全人工。
- 不在图里使用他人品牌 Logo。

## 1.8 人工自检清单

脚本查不出来的几项，交付前读一遍：

1. 每页单独发出去，读者还知道它在讲什么吗？
2. 删掉任何一个词，这页会少信息吗？不会就删。
3. 每个数字、名称、步骤，能在事实清单里找到出处吗？
4. 有没有同义句凑页？
5. 有没有复述前文的结尾、号召式的假结尾？
6. 封面加第 2 页，读者能不能知道这是讲什么、给谁、得到什么？
7. 每个贴纸，和这一页的意思贴切吗？
8. 正文里有没有“没有锚点”的段落（只有概念，没有具体动作、数字、名称）？

## 1.9 文件

```
nook-xhswrite/
  SKILL.md
  references/
    frameworks.md     12 个内容框架（选框架表、页序、页型、封面）
    templates.md      关卡 1 到 5 的输出模板，包括 post.md
    hooks.md          封面钩子、标题写法、结尾和评论钩子
    extract.md        长素材怎么抽事实
    plans/            12 个框架各一份可校验的方案示例（含 inputs/）
    agent-prompt.md   给 agent 的提示词：用户一句话版和验收用完整版
```
