一键导入
xiaohongshu-ops
把 Hermes Agent 变成你的小红书运营助手 — 首页分析、账号诊断、选题灵感、内容创作、自动发布、评论回复、爆款复刻、知识库沉淀。全链路 SOP 覆盖,基于浏览器自动化(CDP)。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
把 Hermes Agent 变成你的小红书运营助手 — 首页分析、账号诊断、选题灵感、内容创作、自动发布、评论回复、爆款复刻、知识库沉淀。全链路 SOP 覆盖,基于浏览器自动化(CDP)。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | xiaohongshu-ops |
| title | 小红书全链路运营(Hermes 适配版) |
| description | 把 Hermes Agent 变成你的小红书运营助手 — 首页分析、账号诊断、选题灵感、内容创作、自动发布、评论回复、爆款复刻、知识库沉淀。全链路 SOP 覆盖,基于浏览器自动化(CDP)。 |
| tags | ["xiaohongshu","小红书","content-ops","social-media","browser-automation","full-chain"] |
基于 Xiangyu-CAS/xiaohongshu-ops-skill (1.7k⭐) 适配为 Hermes Agent 原生 Skill
# 启动调试模式 Chrome(独立 profile)
chrome-debug
# 在 Hermes 中连接
# 运行: /browser connect
# 确认 browser.cdp_url = http://localhost:9222
# 在已连接的浏览器中导航到创作平台
browser_navigate('https://creator.xiaohongshu.com')
# 扫码登录(首次)
# 使用手机小红书 App 扫码
# 登录成功后 cookie 持久化在 debug profile 中,后续无需重复登录
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) │
└─────────────────────────────┘
Step 1: 打开小红书首页
browser_navigate('https://www.xiaohongshu.com/explore')
确认当前页面是推荐流(不是搜索页/个人页/消息页)。
Step 2: 采样首页前 10-20 条内容
# 方案 A: 标准方式(browser_snapshot 可用时)
browser_scroll(direction='down')
browser_snapshot(full=true)
# 方案 B: CDP 直连(推荐,更可靠 — 避免 Gemini/Glic 干扰)
# 先用 Target.getTargets 找到正确 tab
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')
Step 1: 打开目标账号主页
# 方式 A: 标准导航
browser_navigate('https://www.xiaohongshu.com/user/profile/<user_id>')
# 方式 B: CDP 直连(当 browser_navigate 被 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 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>'})
# 等页面加载后用 CDP 提取数据
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 条,按优先级)
混合三类信号,通过小红书内部搜索获取实时数据:
用 CDP 直连在浏览器中执行搜索(避免 Gemini 干扰):
# 1. 找到正确的 tab
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:
# 如果没有小红书 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']
# 2. 搜索关键词(URL 中 keyword 要 URL encode)
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 % '情感疗愈'})
# 3. 提取搜索结果(搜索页与 explore 页 DOM 不同!用 body.innerText)
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 个不同角度的关键词
| 目的 | 关键词示例 | 说明 |
|---|---|---|
| 赛道全景 | 情感疗愈、两性关系 | 看整体热度分布 |
| 子方向深挖 | 分手、内耗、原生家庭 | 看细分方向竞争 |
| 验证蓝海 | 分离 情感、告别 爱 | 看是否有竞品 |
从搜索结果中提取:
| 信号 | 红海 | 蓝海 |
|---|---|---|
| 高赞条数 | 前 10 条都有 5000+ | 前 10 条只有几百 |
| 作者体量 | 全是 10万+ 粉大V | 素人也能出爆款 |
| 内容深度 | 全是"被这段话治愈了"同质化 | 找不到"心理学+情感"结合内容 |
| 某一关键词 | 分手 有 1.3万+ | 分离 几乎没有结果 |
每个方向产出 3-5 条选题,每条包含:
1. 选题标题:
选题角度:支持 / 反对 / 中立 / 争议点
目标人群:
互动钩子:
内容结构:3段式大纲
风险提示:是否容易引战/踩线
依据:xx条搜索结果中 xx赞的爆款结构复用
根据账号阶段(新号/老号/转型号)给出发布顺序建议:
新号/转型号推荐策略:
第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,包含完整输出结构、搜索策略、蓝海验证方法论。
根据内容类型路由:
情感方向 → 集成 xiaohongshu-emotional-content skill
通用方向 → 使用通用模板
封面图生成 → 集成 flux-image-generation skill
# 使用 FLUX.1-schnell 生成封面
# 提示词:精简英文,2-3句
# 尺寸:1024×1024
# 压缩后上传:768px JPEG quality=90
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: 三要素校验 & 停在发布按钮 确认三项齐全:
停在「发布」按钮,等待用户确认后点击
Step 1: 打开通知页
browser_navigate('https://creator.xiaohongshu.com/notifications')
Step 2: 抓取最新评论 记录:用户名、评论文本、时间
Step 3: 输出检查结果
Step 4: 用户确认后回复
按照 persona 设定的语气逐条回复
风控规则:
~/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
from hermes_tools import fact_store, write_file
# 结构化记录写文件
write_file(path='~/xhs-knowledge-base/...', content='...')
# 关键结论同步到 fact_store
fact_store(action='add', content='...', category='general', tags='xhs,pattern')
// 轮播页强制使用 active slide
const activeImg = document
.querySelector('.swiper-slide-active:not(.swiper-slide-duplicate) .swiper-container img')
?.currentSrc;
默认 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-debug)/browser connect 或 config 自动)creator.xiaohongshu.com(首次扫码)~/xhs-knowledge-base/ 目录已创建xiaohongshu-emotional-contentflux-image-generationChrome 147 以上版本内置的 Gemini 助手(chrome://glic/)会在标签页上叠加一层 AI 面板,导致 browser_navigate 失败(ERR_BLOCKED_BY_CLIENT)、browser_snapshot 只返回 Gemini 面板而不是页面内容。
判断方法:
browser_snapshot() 返回的 frame_tree.top 为 nullbrowser_navigate(url) 返回 net::ERR_BLOCKED_BY_CLIENT解决方案(分两步):
# 1. 用 CDP 探索所有标签页,找到并关闭 Gemini/Glic
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']})
# 2. 激活小红书标签页(如果已存在)
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
# 3. 用 CDP 直接导航
browser_cdp(method='Page.navigate', target_id=target_id, params={'url': 'https://www.xiaohongshu.com/explore'})
# 4. 用 CDP evaluate 提取数据
data = browser_cdp(method='Runtime.evaluate', target_id=target_id, params={
'expression': 'document.title',
'returnByValue': True
})
如果 Gemini 反复出现,直接切换到 CDP 模式:
Target.getTargets 获取标签页列表Target.activateTarget 激活目标页Page.navigate 导航Runtime.evaluate 提取数据document.body.innerText 获取搜索列表