| name | xiaohongshu-ops |
| title | 小红书全链路运营(Hermes 适配版) |
| description | 把 Hermes Agent 变成你的小红书运营助手 — 首页分析、账号诊断、选题灵感、内容创作、自动发布、评论回复、爆款复刻、知识库沉淀。全链路 SOP 覆盖,基于浏览器自动化(CDP)。 |
| tags | ["xiaohongshu","小红书","content-ops","social-media","browser-automation","full-chain"] |
小红书全链路运营(Hermes 适配版)
基于 Xiangyu-CAS/xiaohongshu-ops-skill (1.7k⭐) 适配为 Hermes Agent 原生 Skill
前置要求
1. Chrome CDP 调试端口
chrome-debug
2. 登录小红书创作平台
browser_navigate('https://creator.xiaohongshu.com')
3. 知识库目录(自动创建)
mkdir -p ~/xhs-knowledge-base/{accounts,topics,patterns,actions,reviews}
工作流总览
┌─────────────────────────────────────────────────────┐
│ 入口 │
│ 自然语言指令 → 自动路由到对应工作流 │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ 首页推荐流分析 │ │ 账号分析 & 诊断 │ │ 选题灵感生成 │
│ (workflow 1) │ │ (workflow 2) │ │ (workflow 3) │
└─────────────────┘ └──────────────────┘ └──────────────────┘
│ │ │
└────────────────────┼──────────────────────┘
▼
┌─────────────────────────────┐
│ 内容创作 & 发布 │
│ (workflow 4) │
│ 集成 xiaohongshu-emotional │
│ -content + flux-image-gen │
└─────────────────────────────┘
│
▼
┌─────────────────────────────┐
│ 评论回复 & 互动 │
│ (workflow 5) │
└─────────────────────────────┘
│
▼
┌─────────────────────────────┐
│ 知识库沉淀 │
│ (workflow 6) │
│ + 爆款复刻 (workflow 7) │
└─────────────────────────────┘
Workflow 1: 首页推荐流分析
触发词
- "帮我分析一下我小红书首页推荐流"
- "看看首页在推什么"
- "首页推荐有什么趋势"
步骤
Step 1: 打开小红书首页
browser_navigate('https://www.xiaohongshu.com/explore')
确认当前页面是推荐流(不是搜索页/个人页/消息页)。
Step 2: 采样首页前 10-20 条内容
browser_scroll(direction='down')
browser_snapshot(full=true)
tabs = browser_cdp(method='Target.getTargets', params={})
page_tab = [t for t in tabs['result']['targetInfos']
if t['type'] == 'page' and 'xiaohongshu.com' in t.get('url', '')]
if page_tab:
tab_id = page_tab[0]['targetId']
browser_cdp(method='Runtime.evaluate', target_id=tab_id,
params={'expression': 'window.scrollBy(0, 3000)', 'returnByValue': True})
titles = browser_cdp(method='Runtime.evaluate', target_id=tab_id,
params={'expression': '''
[...document.querySelectorAll('a[href*="explore/"]')]
.filter(a => a.textContent?.trim().length > 3 && !a.href.includes('channel_id'))
.map(a => a.textContent?.trim())
.filter(Boolean)
.slice(0, 30)
''', 'returnByValue': True})
每条卡片记录字段:
title:标题原文
hook:首屏钩子
cover_text:封面大字或主文案
cover_type:图文 / 视频 / 文字配图
account_type:达人 / 普通用户 / 品牌
likes、comments、collects(若可见)
tags:话题标签
Step 3: 分析框架
使用以下 4 维度分析每条内容:
- 推荐触发:为什么它出现在首页?
- 停留钩子:标题/封面/情绪点
- 传播机制:收藏型/转发型/评论型/对号入座型
- 结构模板:开头-展开-反转-收口节奏
Step 4: 输出格式
## 首页画像
- 主导主题:XXX
- 常见情绪:XXX
- 高频内容类型:XXX
## 高信号样本(3-5 条)
1. 标题:XXX
钩子:XXX
结构:XXX
互动:XXX
可复用点:XXX
## 可复用模式
- 模式 1:XXX
- 模式 2:XXX
## 下步动作
- 建议继续观察:XXX
- 建议尝试选题:XXX
Step 5: 沉淀到知识库
# 写入 ~/xhs-knowledge-base/patterns/
write_file(path='~/xhs-knowledge-base/patterns/<date>-<topic>.md', content='...')
write_file(path='~/xhs-knowledge-base/topics/<date>-topic-ideas.md', content='...')
# 同步到 Holographic Memory
fact_store(action='add', content='...', category='general', tags='xhs,pattern')
Workflow 2: 账号分析 & 诊断
触发词
- "帮我分析这个账号"
- "看看我的账号表现"
- "账号诊断"
步骤
Step 1: 打开目标账号主页
browser_navigate('https://www.xiaohongshu.com/user/profile/<user_id>')
tabs = browser_cdp(method='Target.getTargets', params={})
page_tab = [t for t in tabs['result']['targetInfos']
if t['type'] == 'page' and 'xiaohongshu.com' in t.get('url', '')]
if page_tab:
tab_id = page_tab[0]['targetId']
browser_cdp(method='Page.navigate', target_id=tab_id,
params={'url': 'https://www.xiaohongshu.com/user/profile/<user_id>'})
import time; time.sleep(2)
info = browser_cdp(method='Runtime.evaluate', target_id=tab_id,
params={'expression': 'document.body.innerText.slice(0, 3000)',
'returnByValue': True})
Step 2: 采样最近 9-15 篇内容
记录:头像、昵称、简介、粉丝量、获赞收藏总量
每篇:标题、封面、类型、发布时间、点赞/评论/收藏、话题、角度
Step 3: 五维评分诊断
| 维度 | 1-5分 | 说明 |
|---|
| 定位清晰度 | x/5 | 能否一句话说清账号 |
| 内容结构力 | x/5 | 标题/封面/正文是否稳定 |
| 互动转化力 | x/5 | 评论区是否有被引导 |
| 账号辨识度 | x/5 | 是否像"同一个账号" |
| 增长可持续性 | x/5 | 爆款是否依赖偶发 |
Step 4: 输出
## 账号快照
- 一句话定位:XXX
- 内容支柱:XXX
- 当前状态:增长期 / 摸索期 / 混乱期 / 稳定期
## 五维评分(带理由)
## 诊断结论
## 下步动作(至少 3 条,按优先级)
Workflow 3: 选题灵感生成(平台搜索驱动)
触发词
- "给我 5 条小红书选题"
- "最近有什么好发的"
- "结合我的定位给选题"
- "情感赛道最近有哪些方向"
- "搜一下XX方向的热门内容"
方法
混合三类信号,通过小红书内部搜索获取实时数据:
Step 1: 多关键词搜索 — 获取平台信号
用 CDP 直连在浏览器中执行搜索(避免 Gemini 干扰):
tabs = browser_cdp(method='Target.getTargets', params={})
page_tab = [t for t in tabs['result']['targetInfos']
if t['type'] == 'page' and 'xiaohongshu.com' in t.get('url', '')]
if not page_tab:
browser_navigate('https://www.xiaohongshu.com')
tabs = browser_cdp(method='Target.getTargets', params={})
page_tab = [t for t in tabs['result']['targetInfos']
if t['type'] == 'page' and 'xiaohongshu.com' in t.get('url', '')]
tab_id = page_tab[0]['targetId']
search_url = 'https://www.xiaohongshu.com/search_result/?keyword=%s&sort=general&type=general'
browser_cdp(method='Page.navigate', target_id=tab_id,
params={'url': search_url % '情感疗愈'})
import time; time.sleep(2)
results = browser_cdp(method='Runtime.evaluate', target_id=tab_id,
params={'expression': 'document.body.innerText.slice(0, 4000)',
'returnByValue': True})
搜索策略: 至少搜 2-3 个不同角度的关键词
| 目的 | 关键词示例 | 说明 |
|---|
| 赛道全景 | 情感疗愈、两性关系 | 看整体热度分布 |
| 子方向深挖 | 分手、内耗、原生家庭 | 看细分方向竞争 |
| 验证蓝海 | 分离 情感、告别 爱 | 看是否有竞品 |
Step 2: 解析搜索信号
从搜索结果中提取:
- 标题原文 — 记录爆款标题的句式、情绪词、标点符号(❗🔥等)
- 赞数 — 8.3万、17.4万、5043 等,判断赛道的"天花板"
- 作者类型 — 大V还是素人(素人高赞说明内容质量>账号体量)
- 相关搜索词 — 小红书搜索页底部的相关推荐词(如「释怀文案」「体面告别」「焦虑缓解」)
- 内容类型 — 图文/视频/文字配图
Step 3: 竞争分析 — 判断红海/蓝海
| 信号 | 红海 | 蓝海 |
|---|
| 高赞条数 | 前 10 条都有 5000+ | 前 10 条只有几百 |
| 作者体量 | 全是 10万+ 粉大V | 素人也能出爆款 |
| 内容深度 | 全是"被这段话治愈了"同质化 | 找不到"心理学+情感"结合内容 |
| 某一关键词 | 分手 有 1.3万+ | 分离 几乎没有结果 |
Step 4: 生成选题清单
每个方向产出 3-5 条选题,每条包含:
1. 选题标题:
选题角度:支持 / 反对 / 中立 / 争议点
目标人群:
互动钩子:
内容结构:3段式大纲
风险提示:是否容易引战/踩线
依据:xx条搜索结果中 xx赞的爆款结构复用
Step 5: 给出起号策略
根据账号阶段(新号/老号/转型号)给出发布顺序建议:
新号/转型号推荐策略:
第1-3篇 蹭赛道热度型(用已验证的爆款标题骨架,快速拿初始流量)
↓
第4-5篇 差异化深度型(展示独特视角,留人)
↓
第7篇 个人IP型(建人设辨识度,让人记住你是谁)
↓
后续 混发,形成稳定的"XX+XX"内容支柱
已知标题骨架(经验证有效)
情感赛道已验证的标题公式:
突然被这段话[治愈/点醒/平复]了
句句不提[爱/感情],却句句都是[爱/感情]
原来真的有人[分手/放弃]不是因为不爱了
放下一个人的[超绝/最好]心态
是时候该[放手/结束]了…
你哭的不是[他/那个人],是[安全感/自己]的崩塌
输出格式
## 赛道全景
- 所属大赛道:情感疗愈
- 子方向热度:方向A(⭐⭐⭐) 方向B(⭐⭐) 方向C(⭐)
- 最大爆款天花板:17.4万赞
- 竞争格局:蓝海信号 / 红海警告
## 推荐选题(按优先级)
1. 标题:XXX
依据:XXX方向搜索中YYY赞的模式复用
互动钩子:XXX
结构:XXX
## 起号策略
第1篇 → 第3篇 → 第7篇 → 后续
情感赛道深度选题分析模板:见 references/topic-analysis-template.md,包含完整输出结构、搜索策略、蓝海验证方法论。
Workflow 4: 内容创作 & 发布
触发词
- "帮我发布一篇笔记"
- "创作一篇关于XX的内容"
- "写一篇小红书"
内容创作
根据内容类型路由:
情感方向 → 集成 xiaohongshu-emotional-content skill
- 5 段式结构:Hook → 故事 → 转折 → 真相 → 金句收尾
- 心理学理论支撑(依恋理论/客体关系/存在孤独等)
- 暗色调温暖视觉风格
通用方向 → 使用通用模板
- 标题(≤20字)
- 正文(短句+换行,max 3行/段)
- 封面文案
- 互动CTA
封面图生成 → 集成 flux-image-generation skill
# 使用 FLUX.1-schnell 生成封面
# 提示词:精简英文,2-3句
# 尺寸:1024×1024
# 压缩后上传:768px JPEG quality=90
发布流程(via 创作平台)
Step 1: 打开创作平台
browser_navigate('https://creator.xiaohongshu.com/publish/publish')
Step 2: 选择发布类型
Step 3: 上传素材
# 图文上传 — 使用 CDP 处理文件上传
browser_click(ref='@upload-btn') # 点击上传按钮
# CDP: DOM.setFileInputFiles 或通过 Input.dispatchFileChooserEvent
browser_cdp(method='DOM.setFileInputFiles', params={
'objectId': '...',
'files': ['/path/to/image.jpg']
})
Step 4: 填写内容
browser_type(ref='@title-input', text='标题(≤20字)')
browser_type(ref='@body-input', text='正文内容...')
Step 5: 三要素校验 & 停在发布按钮
确认三项齐全:
停在「发布」按钮,等待用户确认后点击
Workflow 5: 评论回复 & 互动
触发词
流程
Step 1: 打开通知页
browser_navigate('https://creator.xiaohongshu.com/notifications')
Step 2: 抓取最新评论
记录:用户名、评论文本、时间
Step 3: 输出检查结果
- 新评论条数
- 最新 3-5 条摘要
- 高风险信号(辱骂、钓鱼、违规)
Step 4: 用户确认后回复
按照 persona 设定的语气逐条回复
风控规则:
- 默认一次只发 1 条
- 连续回复间隔 8-15 秒
- 遇到"操作频繁/请稍后再试"立即停止
- 回复 ≤280 字
Workflow 6: 知识库沉淀
目录结构
~/xhs-knowledge-base/
├── README.md # 总览入口
├── accounts/ # 账号定位、诊断、竞品分析
├── topics/ # 选题、标题骨架、内容方向
├── patterns/ # 爆款结构、封面模板、互动钩子
├── actions/ # 发布、回复、下载、复刻记录
└── reviews/ # 复盘、失败原因、下次调整
文件命名
accounts/2026-03-19-account-analysis-xxx.md
topics/2026-03-19-topic-ideas-xxx.md
patterns/2026-03-19-title-hook-pattern.md
actions/2026-03-19-publish-xxx.md
reviews/2026-03-19-reply-retro.md
同时同步到 Holographic Memory
from hermes_tools import fact_store, write_file
write_file(path='~/xhs-knowledge-base/...', content='...')
fact_store(action='add', content='...', category='general', tags='xhs,pattern')
Workflow 7: 爆款笔记复刻
触发词
四步流程
- 输入 爆款笔记 URL
- 分析 爆款因素(标题/封面/正文/互动机制)
- 生成 新封面(使用 FLUX,style-only 模式)
- 发布 新笔记
封面抓取规则
// 轮播页强制使用 active slide
const activeImg = document
.querySelector('.swiper-slide-active:not(.swiper-slide-duplicate) .swiper-container img')
?.currentSrc;
改写规则
- 保留:同主题、同互动机制、同内容结构
- 替换:具体措辞、案例细节、表达顺序
- 禁止:逐句照抄、原图二次使用、作者专属信息迁移
Persona 设置
默认 persona 适用于通用运营。如果你运行情感赛道,请先加载 xiaohongshu-emotional-content skill,它会覆盖内容风格设置。
可以通过以下方式自定义 persona:
# 写入自定义 persona
write_file(path='~/xhs-knowledge-base/persona.md', content='
# 我的小红书人设
- 身份:XXX
- 气质:XXX
- 语气:短句/有温度/直接
- 禁忌:XXX
')
失败降级策略
| 问题 | 处理方式 |
|---|
| 页面结构变化 | 先 browser_snapshot 刷新 ref,不盲跑旧路径 |
| 连续 2 次点击失败 | 停止盲试,告诉用户"页面结构可能变了" |
| 上传路径错误 | 先复制文件到 /tmp/xhs-uploads/ 再上传 |
| 发布页元素失效 | snapshot 刷新引用,仍失败则让用户手动点"发布" |
| 采样不足 | 标注"样本偏少,结论仅供试跑" |
| 登录失效 | 提示重新扫码登录 |
| 评论过于频繁 | 停止,等待 15 分钟后再试 |
browser_navigate 失败(ERR_BLOCKED_BY_CLIENT) | Chrome Gemini/Glic 侧栏干扰。先用 Target.getTargets 找到正确 tab ID,切到 CDP 直连:browser_cdp(method='Target.activateTarget', params={'targetId': tab_id}),再 browser_cdp(method='Page.navigate', target_id=tab_id, params={'url': '...'}) |
browser_snapshot 返回 Gemini 面板而非页面 | 说明 Gemini 侧栏正在覆盖页面。关闭方法:在 Target.getTargets 中找到 type: 'webview'、url 含 glic 或 title 含 Gemini 的 target → Target.closeTarget;然后激活正确的页面 tab 继续操作 |
| Gemini 干扰下提取数据 | 放弃 browser_snapshot,直接用 CDP:browser_cdp(method='Runtime.evaluate', target_id=page_tab_id, params={'expression': '...', 'returnByValue': true})。必须传 target_id——即使 Gemini 被关闭后 Chrome 也会自动重启 Glic,不传会 hit 错误 target 导致 'Runtime.evaluate' wasn't found。每次调用前用 Target.getTargets 确认目标 tab 的 targetId 仍然有效 |
快速启动检查清单
⚠️ Chrome 147+ Gemini/Glic 覆盖层问题
Chrome 147 以上版本内置的 Gemini 助手(chrome://glic/)会在标签页上叠加一层 AI 面板,导致 browser_navigate 失败(ERR_BLOCKED_BY_CLIENT)、browser_snapshot 只返回 Gemini 面板而不是页面内容。
判断方法:
browser_snapshot() 返回的 frame_tree.top 为 null
- snapshot 内容只剩 Gemini 面板的按钮和文字
browser_navigate(url) 返回 net::ERR_BLOCKED_BY_CLIENT
解决方案(分两步):
Step 1: 关闭 Gemini 并重新导航
tabs_result = browser_cdp(method='Target.getTargets', params={})
for tab in tabs_result['result']['targetInfos']:
if 'glic' in tab.get('url', '') or 'Gemini' in tab.get('title', ''):
browser_cdp(method='Target.closeTarget', params={'targetId': tab['targetId']})
for tab in tabs_result['result']['targetInfos']:
if 'xiaohongshu.com' in tab.get('url', ''):
target_id = tab['targetId']
browser_cdp(method='Target.activateTarget', params={'targetId': target_id})
break
browser_cdp(method='Page.navigate', target_id=target_id, params={'url': 'https://www.xiaohongshu.com/explore'})
data = browser_cdp(method='Runtime.evaluate', target_id=target_id, params={
'expression': 'document.title',
'returnByValue': True
})
Step 2: 切换到 CDP 直连模式
如果 Gemini 反复出现,直接切换到 CDP 模式:
- 用
Target.getTargets 获取标签页列表
- 用
Target.activateTarget 激活目标页
- 用
Page.navigate 导航
- 用
Runtime.evaluate 提取数据
- 用
document.body.innerText 获取搜索列表
引用