diff --git a/.agents/skills/xiaohongshu-note-analyzer/SKILL.md b/.agents/skills/xiaohongshu-note-analyzer/SKILL.md
deleted file mode 100644
index 4ab1e05..0000000
--- a/.agents/skills/xiaohongshu-note-analyzer/SKILL.md
+++ /dev/null
@@ -1,190 +0,0 @@
----
-name: xiaohongshu-note-analyzer
-description: 全面分析小红书笔记的内容质量、关键词优化、标题吸引力、敏感内容风险、商业化程度、互动潜力等。适用于发布前审核、内容优化建议、提升笔记曝光率。触发词包括"分析小红书笔记"、"小红书内容审核"、"笔记优化"、"XHS分析",或上传小红书笔记内容请求分析。
----
-
-# 小红书笔记分析器 (XiaoHongShu Note Analyzer)
-
-对小红书笔记进行全方位分析,提供优化建议,提升内容质量和曝光率。
-
-## 分析维度
-
-1. **关键词分析** — 搜索热度、关键词布局、标签优化
-2. **标题/首段吸引力** — 爆款标题元素、首图文案
-3. **敏感内容风险** — 违规词检测、限流风险评估
-4. **商业化程度** — 软广硬广识别、自然度评分
-5. **互动触发潜力** — 讨论点、分享动机、收藏价值
-6. **内容结构** — 排版、emoji使用、段落节奏
-
-## 分析流程
-
-```
-1. 提取笔记内容 → 标题、正文、标签、图片描述
-2. 关键词分析 → 核心词、长尾词、布局检查
-3. 敏感词扫描 → 违规风险、限流风险
-4. 商业化评估 → 广告痕迹、自然度
-5. 互动潜力评估 → 讨论点、情感共鸣
-6. 生成优化建议 → 具体修改方案
-```
-
-## 1. 关键词分析
-
-### 检查要点
-
-| 维度 | 优秀 | 待改进 |
-|------|------|--------|
-| 核心关键词 | 标题+首段+正文+标签都包含 | 仅出现1-2处 |
-| 长尾关键词 | 3-5个相关长尾词自然分布 | 无长尾词或堆砌 |
-| 标签数量 | 5-10个相关标签 | <3个或>15个 |
-| 关键词密度 | 2-3%自然出现 | <1%或>5%堆砌 |
-
-### 关键词布局公式
-
-```
-标题: 必含核心关键词 + 吸引词
-首段(前50字): 核心关键词 + 痛点/好奇点
-正文: 长尾关键词自然分布
-标签: #核心词 #长尾词 #场景词 #人群词
-```
-
-详见 `references/keyword-strategy.md`
-
-## 2. 标题/首段吸引力
-
-### 爆款标题公式
-
-| 类型 | 公式 | 示例 |
-|------|------|------|
-| 数字型 | 数字+关键词+结果 | "5个技巧让你月瘦10斤" |
-| 痛点型 | 痛点+解决方案 | "毛孔粗大?这个方法亲测有效" |
-| 好奇型 | 悬念+关键词 | "闺蜜问我怎么突然变白的..." |
-| 对比型 | Before/After | "用了这个精华,同事都问我怎么了" |
-| 权威型 | 身份+干货 | "皮肤科医生自用的5款防晒" |
-| 情绪型 | 强烈情绪词 | "后悔没早点知道!这个神器太绝了" |
-
-### 首段黄金50字
-
-首段必须包含:
-- ✅ 核心关键词
-- ✅ 痛点/需求点
-- ✅ 吸引继续阅读的钩子
-- ✅ 与封面图呼应
-
-详见 `references/title-formulas.md`
-
-## 3. 敏感内容风险评估
-
-### 风险等级
-
-| 等级 | 说明 | 后果 |
-|------|------|------|
-| 🔴 高危 | 明确违规词 | 删帖/封号 |
-| 🟠 中危 | 灰色地带词 | 限流/不推荐 |
-| 🟡 低危 | 可能触发审核 | 延迟发布 |
-| 🟢 安全 | 无敏感内容 | 正常推荐 |
-
-### 常见敏感类别
-
-1. **医疗健康类** — 疾病名称、药品、治疗效果承诺
-2. **金融理财类** — 收益承诺、投资建议、借贷
-3. **政治敏感类** — 时政、领导人、敏感事件
-4. **虚假宣传类** — 最、第一、100%、绝对
-5. **引流违规类** — 微信号、外链、二维码暗示
-6. **低俗擦边类** — 性暗示、身材过度暴露
-
-详见 `references/sensitive-words.md`
-
-## 4. 商业化程度评估
-
-### 自然度评分标准
-
-| 分数 | 描述 | 特征 |
-|------|------|------|
-| 9-10 | 纯分享 | 无品牌露出,真实体验 |
-| 7-8 | 软植入 | 自然提及品牌,不刻意 |
-| 5-6 | 明显软广 | 品牌多次出现,有推荐意图 |
-| 3-4 | 硬广 | 明显推销,价格引导 |
-| 1-2 | 纯广告 | 通篇产品介绍,无真实体验 |
-
-### 降低商业感技巧
-
-- ✅ 先讲痛点/故事,后引出产品
-- ✅ 提及缺点(真实感)
-- ✅ 对比其他产品(客观感)
-- ✅ 强调个人体验而非产品功能
-- ❌ 避免价格、购买链接、促销信息
-- ❌ 避免品牌名在标题
-
-## 5. 互动触发潜力
-
-### 讨论触发点
-
-| 类型 | 方法 | 示例 |
-|------|------|------|
-| 提问式 | 结尾抛出问题 | "你们觉得哪个颜色更好看?" |
-| 争议式 | 轻度争议观点 | "我觉得XX比XX好用,有人同意吗?" |
-| 求助式 | 请求建议 | "姐妹们帮我看看选哪个!" |
-| 共鸣式 | 引发情感共鸣 | "有没有和我一样的..." |
-| 抽奖式 | 互动福利 | "评论区抽3位送同款" |
-
-### 分享动机触发
-
-用户分享笔记的原因:
-1. **实用价值** — 干货教程、省钱攻略
-2. **社交货币** — 显得有品味/见识
-3. **情感共鸣** — "说出了我的心声"
-4. **收藏备用** — 清单、合集、测评
-
-### 收藏价值评估
-
-高收藏内容特征:
-- ✅ 清单/合集形式
-- ✅ 步骤教程
-- ✅ 对比测评
-- ✅ 省钱/避坑指南
-- ✅ 信息密度高
-
-## 输出格式
-
-```markdown
-# 小红书笔记分析报告
-
-## 📊 综合评分: X/10
-
-## 1️⃣ 关键词分析
-- **核心关键词**: [识别的关键词]
-- **关键词布局**: ✅/❌ [评价]
-- **标签优化**: [建议]
-
-## 2️⃣ 标题/首段评估
-- **标题类型**: [数字型/痛点型/...]
-- **吸引力评分**: X/10
-- **优化建议**: [具体建议]
-
-## 3️⃣ 敏感内容风险
-- **风险等级**: 🟢/🟡/🟠/🔴
-- **检测到的敏感词**: [列表]
-- **修改建议**: [具体建议]
-
-## 4️⃣ 商业化程度
-- **自然度评分**: X/10
-- **商业痕迹**: [分析]
-- **降低商业感建议**: [具体建议]
-
-## 5️⃣ 互动潜力
-- **讨论触发点**: ✅/❌
-- **分享动机**: [分析]
-- **收藏价值**: X/10
-
-## 6️⃣ 优化后版本
-[提供优化后的标题和首段]
-
-## 📝 修改优先级
-1. [最重要的修改]
-2. [次重要的修改]
-3. [可选优化]
-```
-
-## 分析示例
-
-详见 `references/analysis-examples.md`
diff --git a/.agents/skills/xiaohongshu-note-analyzer/references/analysis-examples.md b/.agents/skills/xiaohongshu-note-analyzer/references/analysis-examples.md
deleted file mode 100644
index e1f70b7..0000000
--- a/.agents/skills/xiaohongshu-note-analyzer/references/analysis-examples.md
+++ /dev/null
@@ -1,229 +0,0 @@
-# 分析示例 (Analysis Examples)
-
-## 示例1: 护肤类笔记分析
-
-### 原始笔记
-
-**标题**: 分享一个好用的精华
-
-**正文**:
-```
-最近用了一款精华感觉还不错,分享给大家。
-这个精华质地很清爽,吸收也快。
-我用了大概两周,感觉皮肤状态好了一些。
-推荐给大家试试。
-
-#精华 #护肤
-```
-
-### 分析报告
-
-```markdown
-# 小红书笔记分析报告
-
-## 📊 综合评分: 4/10
-
-## 1️⃣ 关键词分析
-- **核心关键词**: 精华、护肤
-- **关键词布局**: ❌ 仅在标签出现,标题和正文缺乏
-- **标签优化**: ❌ 只有2个标签,过少
-- **问题**: 无长尾关键词,难以被精准搜索触达
-
-**优化建议**:
-- 标题加入具体关键词:"油皮精华"、"补水精华"
-- 增加标签至5-8个
-- 正文加入肤质、功效等长尾词
-
-## 2️⃣ 标题/首段评估
-- **标题类型**: 无类型(过于笼统)
-- **吸引力评分**: 2/10
-- **问题**:
- - "好用"无具体信息
- - 无数字、无痛点、无悬念
- - 不知道是什么精华、适合什么肤质
-
-**优化建议**:
-将 "分享一个好用的精华"
-改为 "油皮亲测|这款平价精华控油效果绝了"
-
-## 3️⃣ 敏感内容风险
-- **风险等级**: 🟢 安全
-- **检测到的敏感词**: 无
-- **说明**: 内容较为保守,无违规风险
-
-## 4️⃣ 商业化程度
-- **自然度评分**: 6/10
-- **商业痕迹**: 低,但内容过于单薄
-- **问题**: 缺乏真实体验细节,反而显得不够真诚
-
-**优化建议**:
-- 加入使用前的皮肤问题
-- 加入具体使用感受(气味、肤感)
-- 可以提一个小缺点增加真实感
-
-## 5️⃣ 互动潜力
-- **讨论触发点**: ❌ 无
-- **分享动机**: 低(无实用价值)
-- **收藏价值**: 2/10
-
-**问题**:
-- 无提问引导评论
-- 内容信息量低,无收藏必要
-
-**优化建议**:
-- 结尾加问题:"姐妹们还有什么平价精华推荐吗?"
-- 加入使用步骤增加实用性
-
-## 6️⃣ 优化后版本
-
-**标题**: 油皮亲测|这款百元精华控油效果绝了
-
-**正文**:
-```
-作为一个大油皮,夏天真的太难了😭
-出油、毛孔粗、还容易闷痘...
-
-试了很多精华,这款终于让我看到效果!
-
-💧质地:水状精华,清爽不粘腻
-👃气味:淡淡的草本味,很舒服
-✨效果:用了两周,出油明显减少,毛孔也没那么明显了
-
-唯一小缺点是瓶口设计不太好控制用量
-
-油皮姐妹可以试试!
-你们还有什么控油精华推荐吗?评论区告诉我👇
-
-#油皮护肤 #控油精华 #平价精华 #夏日护肤 #毛孔护理 #学生党护肤
-```
-
-## 📝 修改优先级
-1. 【必改】标题重写,加入关键词和吸引点
-2. 【必改】增加标签至5-8个
-3. 【建议】丰富正文内容,加入真实体验
-4. 【建议】结尾加互动问题
-```
-
----
-
-## 示例2: 检测到敏感内容的笔记
-
-### 原始笔记
-
-**标题**: 这个方法治好了我的痘痘!
-
-**正文**:
-```
-长了三年的痘痘终于治好了!
-用了这个产品,痘痘全消了,绝对有效!
-加我VX:xxx123,我告诉你具体方法
-这是最好的祛痘方法,100%有效!
-```
-
-### 分析报告
-
-```markdown
-# 小红书笔记分析报告
-
-## 📊 综合评分: 1/10 (高风险,不建议发布)
-
-## 3️⃣ 敏感内容风险
-- **风险等级**: 🔴 高危
-- **检测到的敏感词**:
- 1. "治好" — 医疗效果承诺
- 2. "绝对有效" — 绝对化用语
- 3. "加我VX" — 引流违规
- 4. "最好的" — 绝对化用语
- 5. "100%有效" — 虚假宣传
-
-**后果**: 大概率被删帖,可能影响账号权重
-
-## 修改建议
-
-| 原文 | 问题 | 修改为 |
-|------|------|--------|
-| 治好了我的痘痘 | 医疗效果承诺 | 我的痘痘情况改善了很多 |
-| 绝对有效 | 绝对化用语 | 我个人体验很有效 |
-| 加我VX | 引流违规 | 删除,或改为"可以评论区交流" |
-| 最好的 | 绝对化用语 | 我用过很有效的 |
-| 100%有效 | 虚假宣传 | 对我来说效果很好 |
-
-## 优化后版本
-
-**标题**: 困扰我三年的痘痘终于好转了!分享我的方法
-
-**正文**:
-```
-长了三年的痘痘,最近终于有好转了!
-分享一下我的祛痘心得,希望对姐妹们有帮助~
-
-⚠️ 每个人肤质不同,我的方法仅供参考哦
-
-[具体方法内容]
-
-有同样困扰的姐妹可以评论区交流~
-你们有什么祛痘好方法吗?👇
-```
-```
-
----
-
-## 示例3: 商业化程度过高的笔记
-
-### 原始笔记
-
-**标题**: XX品牌精华测评
-
-**正文**:
-```
-今天给大家介绍XX品牌的明星产品!
-这款精华含有专利成分XXX,官方介绍可以XXX。
-现在官方旗舰店有活动,原价299现在只要199!
-姐妹们快去抢!链接在评论区!
-```
-
-### 分析报告
-
-```markdown
-## 4️⃣ 商业化程度
-- **自然度评分**: 2/10
-- **商业痕迹**:
- - ❌ 标题直接品牌名
- - ❌ 复述官方介绍而非真实体验
- - ❌ 强调价格促销
- - ❌ 引导购买链接
-
-**问题**: 这是一篇明显的硬广,用户信任度低,平台可能限流
-
-## 优化建议
-
-1. **标题去品牌化**: 改为功效/场景导向
-2. **先讲故事/痛点**: 不要上来就介绍产品
-3. **真实体验为主**: 质地、气味、使用感受
-4. **加入小缺点**: 增加可信度
-5. **删除价格促销**: 避免商业感
-6. **不提链接**: 想了解的自然会搜
-
-## 优化后版本
-
-**标题**: 换季维稳精华|敏感肌亲测不踩雷
-
-**正文**:
-```
-换季皮肤又开始闹脾气了😢
-泛红、起皮、还有点刺痛...
-
-朋友推荐我试了这款精华,用了两周来反馈!
-
-💧质地:精华液偏水状,流动性很好
-👃气味:几乎没什么味道,敏感肌友好
-✨使用感:上脸很温和,没有刺激感
-
-我连续用了两周,泛红情况确实好了很多
-唯一觉得不太好的是按压头有点难控制用量
-
-敏感肌姐妹可以考虑~你们换季用什么维稳?👇
-
-#敏感肌护肤 #换季护肤 #维稳精华 #敏感肌精华推荐
-```
-```
diff --git a/.agents/skills/xiaohongshu-note-analyzer/references/keyword-strategy.md b/.agents/skills/xiaohongshu-note-analyzer/references/keyword-strategy.md
deleted file mode 100644
index c2faebb..0000000
--- a/.agents/skills/xiaohongshu-note-analyzer/references/keyword-strategy.md
+++ /dev/null
@@ -1,170 +0,0 @@
-# 小红书关键词策略 (Keyword Strategy)
-
-## 关键词类型
-
-### 1. 核心关键词 (Core Keywords)
-用户搜索的主要词汇,竞争激烈但流量大
-
-**特征**:
-- 1-3个字
-- 高搜索量
-- 竞争激烈
-
-**示例**: 护肤、穿搭、减肥、美妆、旅游
-
-### 2. 长尾关键词 (Long-tail Keywords)
-更具体的搜索词,竞争小但精准
-
-**特征**:
-- 4-10个字
-- 搜索量较小
-- 用户意图明确
-- 转化率高
-
-**示例**:
-- 核心词"护肤" → 长尾词"油皮夏天护肤步骤"
-- 核心词"穿搭" → 长尾词"小个子梨形身材穿搭"
-
-### 3. 场景关键词 (Scenario Keywords)
-描述使用场景的词汇
-
-**示例**: 约会、通勤、旅游、居家、上班
-
-### 4. 人群关键词 (Audience Keywords)
-描述目标人群的词汇
-
-**示例**: 学生党、上班族、宝妈、新手、敏感肌
-
-### 5. 修饰关键词 (Modifier Keywords)
-增加描述的词汇
-
-**示例**: 平价、大牌、小众、百元、高性价比
-
-## 关键词布局策略
-
-### 布局位置优先级
-
-```
-1. 标题 (权重最高)
-2. 首段前50字 (权重高)
-3. 正文小标题 (权重中)
-4. 正文内容 (权重中)
-5. 标签 (权重中)
-6. 图片OCR文字 (权重低)
-```
-
-### 最佳布局公式
-
-```
-标题: [核心关键词] + [修饰词] + [吸引词]
- 例: "油皮护肤|平价好用的夏日护肤清单"
-
-首段: 包含核心关键词 + 1-2个长尾关键词
- 例: "作为一个油皮,夏天护肤真的太难了,
- 出油、毛孔、闷痘...今天分享我的油皮夏日护肤心得"
-
-正文: 每200字自然出现1次关键词变体
- 例: "这款控油精华"、"适合油皮的XX"
-
-标签: 5-10个,覆盖不同类型关键词
- 例: #油皮护肤 #夏日护肤 #控油 #平价护肤 #学生党护肤
-```
-
-## 标签策略
-
-### 标签数量
-- **最佳**: 5-10个
-- **最少**: 3个
-- **最多**: 不超过15个
-
-### 标签组合公式
-
-```
-2-3个 核心词标签: #护肤 #美妆
-2-3个 长尾词标签: #油皮护肤 #夏日护肤推荐
-1-2个 场景词标签: #通勤妆容 #约会穿搭
-1-2个 人群词标签: #学生党 #新手化妆
-1-2个 热门话题标签: #好物分享 #我的日常
-```
-
-### 标签注意事项
-
-✅ **正确做法**:
-- 标签与内容高度相关
-- 混合大词和小词
-- 使用平台热门话题标签
-
-❌ **错误做法**:
-- 堆砌不相关热门标签
-- 只用大词不用长尾词
-- 标签与内容不符(影响推荐精准度)
-
-## 关键词密度
-
-### 理想密度
-- **核心关键词**: 2-3% (每100字出现2-3次)
-- **长尾关键词**: 每个出现1-2次即可
-
-### 检查方法
-```
-关键词密度 = (关键词出现次数 × 关键词字数) ÷ 总字数 × 100%
-```
-
-### 密度问题
-
-| 密度 | 问题 | 解决方案 |
-|------|------|----------|
-| <1% | 关键词不足,搜索难触达 | 在标题、首段、小标题增加关键词 |
-| 2-3% | ✅ 理想状态 | 保持 |
-| >5% | 关键词堆砌,影响阅读 | 使用同义词替换,减少重复 |
-
-## 关键词挖掘方法
-
-### 1. 小红书搜索框
-- 输入核心词,查看下拉推荐词
-- 这些是用户真实搜索的长尾词
-
-### 2. 相关笔记分析
-- 查看同类爆款笔记使用的关键词和标签
-- 分析评论区用户使用的词汇
-
-### 3. 关键词组合矩阵
-
-```
-核心词 × 人群词 = 长尾词
-护肤 × 油皮 = 油皮护肤
-护肤 × 学生党 = 学生党护肤
-护肤 × 敏感肌 = 敏感肌护肤
-
-核心词 × 场景词 = 长尾词
-穿搭 × 通勤 = 通勤穿搭
-穿搭 × 约会 = 约会穿搭
-
-核心词 × 修饰词 = 长尾词
-护肤 × 平价 = 平价护肤
-护肤 × 大牌 = 大牌护肤
-```
-
-## 关键词分析输出模板
-
-```markdown
-### 关键词分析结果
-
-**识别的核心关键词**: [词汇]
-**识别的长尾关键词**: [词汇列表]
-
-**当前布局情况**:
-- 标题: ✅/❌ 包含核心词
-- 首段: ✅/❌ 包含核心词
-- 正文: X次出现
-- 标签: X个相关标签
-
-**关键词密度**: X%
-
-**优化建议**:
-1. [具体建议]
-2. [具体建议]
-
-**推荐增加的标签**:
-#标签1 #标签2 #标签3
-```
diff --git a/.agents/skills/xiaohongshu-note-analyzer/references/sensitive-words.md b/.agents/skills/xiaohongshu-note-analyzer/references/sensitive-words.md
deleted file mode 100644
index 360bbc0..0000000
--- a/.agents/skills/xiaohongshu-note-analyzer/references/sensitive-words.md
+++ /dev/null
@@ -1,113 +0,0 @@
-# 小红书敏感词库 (Sensitive Words Reference)
-
-## 🔴 高危词汇 (删帖/封号风险)
-
-### 医疗违规
-- 治愈、根治、药到病除
-- 处方药名称
-- 癌症、肿瘤等重大疾病+治疗方案
-- 医美手术具体操作描述
-
-### 金融违规
-- 稳赚、保本、高收益
-- 具体投资回报率承诺
-- 代投、跟单、带单
-- 虚拟货币交易引导
-
-### 政治敏感
-- 国家领导人姓名+评价
-- 敏感政治事件
-- 境外政治内容
-
-### 违法内容
-- 赌博、博彩相关
-- 毒品、违禁品
-- 枪支、管制刀具
-- 色情、低俗内容
-
-### 引流违规
-- 直接微信号/QQ号
-- "私我"、"滴滴"、"DD"
-- 明显外链、二维码
-- "主页有联系方式"
-
-## 🟠 中危词汇 (限流风险)
-
-### 绝对化用语
-- 最好、最佳、第一、首选
-- 100%、绝对、肯定
-- 全网最低、史上最强
-- 国家级、世界级
-
-### 医疗擦边
-- 祛痘、美白、抗衰(需谨慎表述)
-- 减肥、瘦身(避免效果承诺)
-- 功效承诺类描述
-- "亲测有效"+"医疗效果"
-
-### 商业敏感
-- 价格对比贬低竞品
-- "比XX便宜"
-- 购买链接暗示
-- 过度促销用语
-
-### 版权风险
-- 未授权品牌logo
-- 影视剧截图过多
-- 音乐版权内容
-- 他人原创内容搬运
-
-## 🟡 低危词汇 (可能延迟审核)
-
-### 可能触发审核
-- 赚钱、副业、兼职
-- 借贷、贷款、信用卡
-- 整容、医美、手术
-- 政策、法规相关
-
-### 行业特殊词
-- 保健品功效描述
-- 母婴产品安全声明
-- 食品功效暗示
-- 化妆品成分功效
-
-## ✅ 安全表述替换
-
-| 危险表述 | 安全替换 |
-|----------|----------|
-| 最好的 | 我用过很不错的 |
-| 100%有效 | 我个人体验很好 |
-| 治愈了我的XX | 改善了我的XX情况 |
-| 加我微信 | 可以交流(不留号) |
-| 绝对好用 | 亲测感觉很棒 |
-| 全网最低价 | 我买的时候很划算 |
-| 药到病除 | 对我的情况有帮助 |
-| 专家推荐 | 我看到有人推荐 |
-| 官方认证 | 我在官方渠道买的 |
-
-## 行业特殊规则
-
-### 美妆护肤
-- ❌ 避免:药妆、医学护肤、治疗效果
-- ✅ 使用:护肤体验、个人感受、肤感描述
-
-### 母婴育儿
-- ❌ 避免:治疗婴儿疾病、代替医嘱
-- ✅ 使用:个人育儿经验、仅供参考
-
-### 健身减肥
-- ❌ 避免:X天瘦X斤、快速减肥
-- ✅ 使用:健身记录、饮食分享、个人体验
-
-### 金融理财
-- ❌ 避免:投资建议、收益承诺
-- ✅ 使用:个人理财记录、学习笔记
-
-## 检测方法
-
-分析笔记时,按以下优先级检查:
-
-1. **全文扫描** — 检查是否包含高危词库中的词汇
-2. **上下文分析** — 判断中危词汇的使用语境
-3. **意图识别** — 判断是否有引流、违规推广意图
-4. **替换建议** — 提供安全表述替换方案
diff --git a/.agents/skills/xiaohongshu-note-analyzer/references/title-formulas.md b/.agents/skills/xiaohongshu-note-analyzer/references/title-formulas.md
deleted file mode 100644
index 7942bb2..0000000
--- a/.agents/skills/xiaohongshu-note-analyzer/references/title-formulas.md
+++ /dev/null
@@ -1,142 +0,0 @@
-# 爆款标题公式 (Title Formulas)
-
-## 核心原则
-
-好标题 = **关键词** + **情绪触发** + **价值预期**
-
-## 八大爆款标题公式
-
-### 1️⃣ 数字具象型
-**公式**: 数字 + 关键词 + 具体结果
-
-```
-✅ "5个技巧让我月瘦10斤"
-✅ "3步画出日杂妆容"
-✅ "7天养成早起习惯的方法"
-✅ "100元搞定一周穿搭"
-```
-
-**为什么有效**: 数字给人具体、可执行、有结果的感觉
-
-### 2️⃣ 痛点解决型
-**公式**: 痛点问题 + 解决方案暗示
-
-```
-✅ "毛孔粗大?这个方法亲测有效"
-✅ "总是存不下钱?试试这个记账法"
-✅ "拍照不上镜?学会这几个姿势"
-✅ "皮肤暗沉怎么办?我的美白心得"
-```
-
-**为什么有效**: 直击用户痛点,暗示有解决方案
-
-### 3️⃣ 好奇悬念型
-**公式**: 制造信息缺口 + 引发好奇
-
-```
-✅ "闺蜜问我怎么突然变白的..."
-✅ "用了这个之后,同事都问我怎么了"
-✅ "原来一直用错了!难怪没效果"
-✅ "看完这个,我把XX扔了"
-```
-
-**为什么有效**: 信息缺口让人想知道答案
-
-### 4️⃣ 对比反差型
-**公式**: Before vs After / 意外反差
-
-```
-✅ "从120斤到100斤,我做了这件事"
-✅ "黄皮穿对颜色,气质直接翻倍"
-✅ "换了这个枕头,睡眠质量完全不一样"
-✅ "以前嫌贵,用了才知道值"
-```
-
-**为什么有效**: 对比产生冲击力,暗示巨大改变
-
-### 5️⃣ 身份权威型
-**公式**: 身份背书 + 干货内容
-
-```
-✅ "皮肤科医生自用的5款防晒"
-✅ "健身教练不会告诉你的减脂真相"
-✅ "10年化妆师的底妆技巧"
-✅ "留学生的省钱购物攻略"
-```
-
-**为什么有效**: 专业身份增加可信度
-
-### 6️⃣ 情绪共鸣型
-**公式**: 强烈情绪词 + 内容主题
-
-```
-✅ "后悔没早点知道!这个神器太绝了"
-✅ "救命!这个也太好看了吧"
-✅ "绝绝子!一整个爱住"
-✅ "哭了,早买早享受"
-```
-
-**为什么有效**: 情绪感染,引发共鸣
-
-### 7️⃣ 场景代入型
-**公式**: 具体场景 + 解决方案
-
-```
-✅ "约会前一晚这样护肤"
-✅ "出门旅游必带的10件好物"
-✅ "上班通勤听的播客推荐"
-✅ "租房改造,500块焕新"
-```
-
-**为什么有效**: 场景具体,用户容易代入
-
-### 8️⃣ 清单合集型
-**公式**: 主题 + 合集/清单/盘点
-
-```
-✅ "2024年度爱用物大盘点"
-✅ "学生党平价护肤清单"
-✅ "小个子穿搭合集|显高10cm"
-✅ "懒人早餐食谱合集"
-```
-
-**为什么有效**: 信息密度高,收藏价值高
-
-## 标题优化检查清单
-
-### 必须包含 ✅
-- [ ] 核心关键词
-- [ ] 情绪触发点或价值点
-- [ ] 字数控制在20字以内(最佳15-18字)
-
-### 避免 ❌
-- [ ] 纯品牌名做标题
-- [ ] 过于笼统无具体信息
-- [ ] 绝对化用语(最好、第一)
-- [ ] 标题党但内容不符
-
-## 首段黄金50字
-
-首段决定用户是否继续阅读,必须包含:
-
-### 结构公式
-```
-痛点/场景引入(10-15字) +
-解决方案预告(15-20字) +
-继续阅读的钩子(10-15字)
-```
-
-### 示例
-```
-❌ "今天给大家分享一个好东西"(无信息量)
-
-✅ "换季皮肤又开始爆痘了😭
- 试了很多方法终于找到有效的,
- 往下看我是怎么3周恢复的👇"
-```
-
-### 首段钩子技巧
-- 抛出问题:"你们有没有这种情况?"
-- 制造悬念:"但是有个关键点..."
-- 预告价值:"下面分享我的方法"
-- 引发共鸣:"和我一样的姐妹看过来"
diff --git a/.agents/skills/xiaohongshu/LICENSE b/.agents/skills/xiaohongshu/LICENSE
deleted file mode 100644
index 8a57463..0000000
--- a/.agents/skills/xiaohongshu/LICENSE
+++ /dev/null
@@ -1,25 +0,0 @@
-MIT License
-
-Copyright (c) 2025
-
-This license applies to the shell script wrapper layer in this repository only.
-The xiaohongshu-mcp binary (https://github.com/xpzouying/xiaohongshu-mcp) is a
-separate project with its own licensing terms.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/.agents/skills/xiaohongshu/README.md b/.agents/skills/xiaohongshu/README.md
deleted file mode 100644
index 4302f9a..0000000
--- a/.agents/skills/xiaohongshu/README.md
+++ /dev/null
@@ -1,315 +0,0 @@
-# XHS AI Toolkit
-
-
- Make AI understand your Xiaohongshu (RedNote)
-
-
-
- 简体中文 | English
-
-
-
-
-
-
-
-
-
----
-
-AI-powered toolkit for **Xiaohongshu (小红书 / RedNote)** that turns your favorite posts into AI memory.
-
-- **MCP Integration** — Search, browse, comment via AI assistants
-- **Trend Tracking** — Auto-generate topic reports with engagement analytics
-- **Memory Export** — Convert your liked/saved posts into AI-searchable knowledge base
-
-Built on [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) and [XHS-Downloader](https://github.com/JoeanAmier/XHS-Downloader).
-
-## Features
-
-| Feature | Description |
-|---------|-------------|
-| Search | Search posts by keywords |
-| Feed | Get homepage recommendations |
-| Post Details | Fetch post content, comments, engagement stats |
-| Comment | Post comments to notes |
-| User Profile | Get user info and their posts |
-| Trend Tracking | Auto-generate topic analysis reports |
-| Long Image Export | Export posts as annotated JPG long images |
-| Memory Export | Export liked/saved posts as Markdown for AI memory |
-
-## Quick Start
-
-### 1. Install xiaohongshu-mcp
-
-Download from [GitHub Releases](https://github.com/xpzouying/xiaohongshu-mcp/releases):
-
-```bash
-# Linux x64
-wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-mcp-linux-amd64.tar.gz
-wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-login-linux-amd64.tar.gz
-
-# macOS ARM
-wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-mcp-darwin-arm64.tar.gz
-wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-login-darwin-arm64.tar.gz
-```
-
-Install:
-
-```bash
-mkdir -p ~/.local/bin
-tar -xzf xiaohongshu-mcp-*.tar.gz -C ~/.local/bin/
-tar -xzf xiaohongshu-login-*.tar.gz -C ~/.local/bin/
-
-cd ~/.local/bin
-mv xiaohongshu-mcp-* xiaohongshu-mcp
-mv xiaohongshu-login-* xiaohongshu-login
-chmod +x xiaohongshu-mcp xiaohongshu-login
-```
-
-### 2. Install This Toolkit
-
-```bash
-# Clone to OpenClaw workspace
-git clone https://github.com/zhjiang22/openclaw-xhs.git
-cp -r openclaw-xhs ~/.openclaw/workspace/skills/xiaohongshu
-
-# Or use symlink
-ln -s /path/to/openclaw-xhs ~/.openclaw/workspace/skills/xiaohongshu
-
-# Verify installation
-cd ~/.openclaw/workspace/skills/xiaohongshu/scripts
-./install-check.sh
-```
-
-### 3. Login (Get Cookies)
-
-**Option A: Desktop Environment**
-
-```bash
-./login.sh # Opens browser, scan QR code with Xiaohongshu app
-```
-
-**Option B: Headless Server**
-
-Get cookies on your local machine, then copy to server:
-
-```bash
-# On local machine with GUI
-./xiaohongshu-login
-# Cookies saved to /tmp/cookies.json
-
-# Copy to server
-scp /tmp/cookies.json user@server:~/.xiaohongshu/cookies.json
-```
-
-### 4. Start Service
-
-```bash
-./start-mcp.sh # Headless mode
-./start-mcp.sh --headless=false # Show browser (debug)
-```
-
-Service runs at `http://localhost:18060/mcp`.
-
-#### Server Deployment (Headless Linux)
-
-On servers without a desktop environment, the underlying browser requires a virtual display.
-`start-mcp.sh` **auto-detects** the environment — if no display is found, it starts Xvfb automatically. Just install it first:
-
-```bash
-# Debian/Ubuntu
-sudo apt-get install -y xvfb
-
-# CentOS/RHEL
-sudo yum install -y xorg-x11-server-Xvfb
-```
-
-No extra configuration needed. The script handles:
-- Detecting the `DISPLAY` environment variable
-- Auto-starting `Xvfb :99` when no display is available
-- Cleaning up Xvfb when `stop-mcp.sh` is called
-
-> **Note**: Without Xvfb, login and search will fail on headless servers. See [Issue #3](https://github.com/zhjiang22/openclaw-xhs/issues/3).
-
-## Usage
-
-### Basic Commands
-
-```bash
-./status.sh # Check login status
-./search.sh "coffee" # Search posts
-./recommend.sh # Get recommendations
-./post-detail.sh # Get post details
-./comment.sh "Great post!" # Comment
-./user-profile.sh # Get user profile
-```
-
-### Trend Tracking
-
-Auto-search trending posts and generate analysis reports:
-
-```bash
-./track-topic.sh "AI" --limit 10
-./track-topic.sh "travel" --limit 5 --output report.md
-./track-topic.sh "iPhone" --limit 5 --feishu # Export to Feishu
-```
-
-### MCP Tools
-
-| Tool | Description |
-|------|-------------|
-| `check_login_status` | Check login status |
-| `search_feeds` | Search posts |
-| `list_feeds` | Get homepage feed |
-| `get_feed_detail` | Get post details & comments |
-| `post_comment_to_feed` | Post comment |
-| `user_profile` | Get user profile |
-| `like_feed` | Like/unlike post |
-| `favorite_feed` | Save/unsave post |
-| `publish_content` | Publish image post |
-| `publish_with_video` | Publish video post |
-
-### Long Image Export
-
-Export posts as annotated JPG long images (white background, black text):
-
-```bash
-# Prepare posts.json
-cat > posts.json << 'EOF'
-[
- {
- "title": "Post title",
- "author": "Author",
- "stats": "13k likes 100 saves",
- "desc": "Post summary",
- "images": ["https://...webp"],
- "per_image_text": {"1": "Caption for 2nd image"}
- }
-]
-EOF
-
-./export-long-image.sh --posts-file posts.json -o output.jpg
-```
-
-Requires: Python 3.10+, Pillow (`pip install Pillow`)
-
-## Memory Export (Turn Likes into AI Memory)
-
-Export your liked/saved posts as a searchable knowledge base for AI assistants.
-
-### 1. Install XHS-Downloader
-
-```bash
-git clone https://github.com/JoeanAmier/XHS-Downloader.git
-cd XHS-Downloader
-pip install -r requirements.txt
-```
-
-### 2. Extract Post Links (Tampermonkey Script)
-
-1. Install [Tampermonkey](https://www.tampermonkey.net/)
-2. Install [XHS-Downloader UserScript](https://raw.githubusercontent.com/JoeanAmier/XHS-Downloader/refs/heads/master/static/XHS-Downloader.js)
-3. Go to Xiaohongshu web → Profile → Liked/Saved
-4. Click Tampermonkey menu → "Extract liked posts" or "Extract saved posts"
-5. Links auto-copied to clipboard
-6. Paste into `links.md`
-
-### 3. Download & Export
-
-```bash
-# Copy helper scripts
-cp tools/xhs-downloader/*.py /path/to/XHS-Downloader/
-
-# Download posts
-cd /path/to/XHS-Downloader
-python batch_download.py links.md
-
-# Export to workspace
-python export_to_workspace.py
-# Output: ~/.openclaw/workspace/xhs-memory/
-```
-
-### 4. Configure OpenClaw Memory Search
-
-Edit `~/.openclaw/openclaw.json`:
-
-```json
-{
- "memorySearch": {
- "extraPaths": [
- "~/.openclaw/workspace/xhs-memory"
- ]
- }
-}
-```
-
-Now your AI assistant can search your Xiaohongshu favorites!
-
-## Project Structure
-
-```
-openclaw-xhs/
-├── README.md # English docs
-├── README_CN.md # Chinese docs
-├── LICENSE
-├── SKILL.md # Skill manifest
-├── scripts/ # MCP wrapper scripts
-│ ├── install-check.sh
-│ ├── start-mcp.sh
-│ ├── stop-mcp.sh
-│ ├── login.sh
-│ ├── mcp-call.sh
-│ ├── status.sh
-│ ├── search.sh
-│ ├── recommend.sh
-│ ├── post-detail.sh
-│ ├── comment.sh
-│ ├── user-profile.sh
-│ ├── track-topic.sh
-│ ├── track-topic.py
-│ ├── export-long-image.sh
-│ └── export-long-image.py
-└── tools/
- └── xhs-downloader/ # Memory export tools
- ├── README.md
- ├── batch_download.py
- ├── export_memory.py
- └── export_to_workspace.py
-```
-
-## Security
-
-This project implements the following security measures:
-
-- **Cookie protection**: Cookie files are copied with `600` permissions (owner-only read/write)
-- **Injection prevention**: All shell scripts use `jq` to build JSON payloads instead of string interpolation, preventing shell injection
-- **Tool name validation**: MCP tool names are restricted to alphanumeric characters and underscores
-- **Path validation**: Cross-skill script calls validate that target paths are within allowed directories
-- **Third-party content**: Content fetched from Xiaohongshu is user-generated; exercise appropriate caution
-
-
-## Disclaimer
-
-This project is a **wrapper layer** for [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp).
-
-- Does NOT contain xiaohongshu-mcp source code
-- Users must download xiaohongshu-mcp binaries separately
-- Scripts communicate via HTTP protocol only
-
-## Acknowledgments
-
-- [@xpzouying](https://github.com/xpzouying) — [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp)
-- [@JoeanAmier](https://github.com/JoeanAmier) — [XHS-Downloader](https://github.com/JoeanAmier/XHS-Downloader) (GPL-3.0)
-
-## License
-
-MIT License (wrapper scripts only)
-
-**Note:** xiaohongshu-mcp has no declared license. Please respect the author's terms.
-
----
-
-
- If this project helps you, please give it a ⭐!
-
diff --git a/.agents/skills/xiaohongshu/README_CN.md b/.agents/skills/xiaohongshu/README_CN.md
deleted file mode 100644
index cafb74e..0000000
--- a/.agents/skills/xiaohongshu/README_CN.md
+++ /dev/null
@@ -1,373 +0,0 @@
-# XHS AI Toolkit
-
-
- 让 AI 读懂你的小红书
-
-
-
- 简体中文 | English
-
-
-
-
-
-
-
-
-
----
-
-小红书 AI 工具包 — 把你的收藏变成 AI 的记忆。
-
-- **MCP 集成** — 通过 AI 助手搜索、浏览、评论小红书
-- **热点跟踪** — 自动生成话题报告,含互动数据分析
-- **记忆导出** — 将收藏/点赞笔记转为 AI 可搜索的知识库
-
-基于 [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) 和 [XHS-Downloader](https://github.com/JoeanAmier/XHS-Downloader) 构建。
-
-## 功能特性
-
-| 功能 | 说明 |
-|------|------|
-| 搜索内容 | 按关键词搜索小红书笔记 |
-| 首页推荐 | 获取首页推荐列表 |
-| 帖子详情 | 获取笔记内容、评论、互动数据 |
-| 发表评论 | 在笔记下发表评论 |
-| 用户主页 | 获取用户资料和笔记列表 |
-| 热点跟踪 | 自动生成话题分析报告 |
-| 长图导出 | 将帖子导出为带注释的 JPG 长图 |
-| 记忆导出 | 导出收藏/点赞为 Markdown 记忆库 |
-
-## 快速开始
-
-### 1. 安装 xiaohongshu-mcp
-
-从 [GitHub Releases](https://github.com/xpzouying/xiaohongshu-mcp/releases) 下载:
-
-```bash
-# Linux x64
-wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-mcp-linux-amd64.tar.gz
-wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-login-linux-amd64.tar.gz
-
-# macOS ARM
-wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-mcp-darwin-arm64.tar.gz
-wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-login-darwin-arm64.tar.gz
-```
-
-解压安装:
-
-```bash
-mkdir -p ~/.local/bin
-tar -xzf xiaohongshu-mcp-*.tar.gz -C ~/.local/bin/
-tar -xzf xiaohongshu-login-*.tar.gz -C ~/.local/bin/
-
-cd ~/.local/bin
-mv xiaohongshu-mcp-* xiaohongshu-mcp
-mv xiaohongshu-login-* xiaohongshu-login
-chmod +x xiaohongshu-mcp xiaohongshu-login
-```
-
-### 2. 安装本工具包
-
-```bash
-# 克隆到 OpenClaw workspace
-git clone https://github.com/zhjiang22/openclaw-xhs.git
-cp -r openclaw-xhs ~/.openclaw/workspace/skills/xiaohongshu
-
-# 或使用软链接
-ln -s /path/to/openclaw-xhs ~/.openclaw/workspace/skills/xiaohongshu
-
-# 验证安装
-cd ~/.openclaw/workspace/skills/xiaohongshu/scripts
-./install-check.sh
-```
-
-### 3. 登录获取 Cookies
-
-**方式一:本地桌面环境**
-
-```bash
-./login.sh # 打开浏览器,用小红书 App 扫码登录
-```
-
-**方式二:Linux 服务器(无桌面)**
-
-在本地电脑获取 cookies 后复制到服务器:
-
-```bash
-# 本地电脑(有 GUI)
-./xiaohongshu-login
-# Cookies 保存在 /tmp/cookies.json
-
-# 复制到服务器
-scp /tmp/cookies.json user@server:~/.xiaohongshu/cookies.json
-```
-
-服务启动时会自动检查以下位置的 cookies(按优先级):
-
-1. 环境变量 `XHS_COOKIES_SRC` 指定的路径
-2. `~/cookies.json`
-3. `~/.xiaohongshu/cookies.json`
-
-### 4. 启动服务
-
-```bash
-./start-mcp.sh # headless 模式
-./start-mcp.sh --headless=false # 显示浏览器(调试用)
-```
-
-服务监听 `http://localhost:18060/mcp`。
-
-停止服务:`./stop-mcp.sh`
-
-#### 服务器部署(无桌面环境)
-
-在没有图形界面的 Linux 服务器上,`xiaohongshu-mcp` 底层的浏览器需要虚拟显示器才能正常工作。
-`start-mcp.sh` 会**自动检测**是否有桌面环境,如果没有则自动启动 Xvfb,你只需提前安装:
-
-```bash
-# Debian/Ubuntu
-sudo apt-get install -y xvfb
-
-# CentOS/RHEL
-sudo yum install -y xorg-x11-server-Xvfb
-```
-
-安装后无需额外配置,`start-mcp.sh` 会自动处理:
-- 检测 `DISPLAY` 环境变量
-- 没有显示器时自动启动 `Xvfb :99`
-- `stop-mcp.sh` 停止服务时会一并清理 Xvfb 进程
-
-> **提示**:如果不安装 Xvfb,登录和搜索功能会失败。参见 [Issue #3](https://github.com/zhjiang22/openclaw-xhs/issues/3)。
-
-## 使用方法
-
-### 基础命令
-
-```bash
-./status.sh # 检查登录状态
-./search.sh "咖啡" # 搜索内容
-./recommend.sh # 获取推荐
-./post-detail.sh # 获取帖子详情
-./comment.sh "写得真好!" # 发表评论
-./user-profile.sh # 获取用户主页
-```
-
-### 热点跟踪
-
-自动搜索热帖并生成分析报告:
-
-```bash
-./track-topic.sh "DeepSeek" --limit 10
-./track-topic.sh "春节旅游" --limit 5 --output report.md
-./track-topic.sh "iPhone 16" --limit 5 --feishu # 导出到飞书
-```
-
-报告包含:
-- 📊 概览统计(帖子数、点赞数、评论数)
-- 📝 热帖详情(标题、作者、正文、热门评论)
-- 💬 评论区热点关键词
-- 📈 趋势分析
-
-### MCP 工具清单
-
-| 工具名 | 描述 |
-|--------|------|
-| `check_login_status` | 检查登录状态 |
-| `search_feeds` | 搜索内容 |
-| `list_feeds` | 获取首页推荐 |
-| `get_feed_detail` | 获取帖子详情和评论 |
-| `post_comment_to_feed` | 发表评论 |
-| `user_profile` | 获取用户主页 |
-| `like_feed` | 点赞/取消 |
-| `favorite_feed` | 收藏/取消 |
-| `publish_content` | 发布图文笔记 |
-| `publish_with_video` | 发布视频笔记 |
-
-### 通用 MCP 调用
-
-```bash
-./mcp-call.sh # 查看可用工具
-./mcp-call.sh search_feeds '{"keyword": "咖啡"}'
-./mcp-call.sh like_feed '{"feed_id": "xxx", "xsec_token": "xxx", "like": true}'
-```
-
-### 长图导出
-
-将搜索结果或帖子详情导出为带文字注释的 JPG 长图:
-
-```bash
-# 准备 posts.json(搜索+拉详情后整理)
-cat > posts.json << 'EOF'
-[
- {
- "title": "帖子标题",
- "author": "作者名",
- "stats": "1.3万赞 100收藏",
- "desc": "正文摘要",
- "images": ["https://...webp"],
- "per_image_text": {"1": "第2张图的专属说明"}
- }
-]
-EOF
-
-./export-long-image.sh --posts-file posts.json -o output.jpg
-```
-
-依赖:Python 3.10+、Pillow(`pip install Pillow`)
-
-## 记忆导出:把收藏变成 AI 的记忆
-
-将你的收藏/点赞笔记导出为 AI 可搜索的知识库,让 AI 更懂你。
-
-### 1. 安装 XHS-Downloader
-
-```bash
-git clone https://github.com/JoeanAmier/XHS-Downloader.git
-cd XHS-Downloader
-pip install -r requirements.txt
-```
-
-### 2. 获取收藏/点赞链接(油猴脚本)
-
-手动复制链接效率太低,推荐使用油猴脚本批量提取:
-
-**安装脚本:**
-
-1. 安装 [Tampermonkey](https://www.tampermonkey.net/) 浏览器扩展
-2. 安装用户脚本:[XHS-Downloader.js](https://raw.githubusercontent.com/JoeanAmier/XHS-Downloader/refs/heads/master/static/XHS-Downloader.js)
-
-**提取链接:**
-
-1. 打开 [小红书网页版](https://www.xiaohongshu.com) 并登录
-2. 进入个人主页 → **收藏** 或 **点赞** 页面
-3. 点击 Tampermonkey 图标,选择:
- - `提取收藏作品链接`
- - `提取点赞作品链接`
-4. 脚本会自动滚动页面加载全部内容
-5. 提取完成后链接自动复制到剪贴板
-6. 粘贴到 `links.md` 文件
-
-> **注意**:自动滚动功能默认关闭,需在脚本设置中手动开启。开启后可能触发风控,建议适度使用。
-
-### 3. 批量下载并导出
-
-```bash
-# 复制工具脚本到 XHS-Downloader 目录
-cp tools/xhs-downloader/*.py /path/to/XHS-Downloader/
-
-# 批量下载
-cd /path/to/XHS-Downloader
-python batch_download.py links.md
-
-# 导出为多文件(推荐)
-python export_to_workspace.py
-# 输出到 ~/.openclaw/workspace/xhs-memory/
-
-# 或导出为单文件
-python export_memory.py
-# 生成 xhs_memory.md
-```
-
-### 4. 配置 OpenClaw 记忆搜索
-
-编辑 `~/.openclaw/openclaw.json`:
-
-```json
-{
- "memorySearch": {
- "extraPaths": [
- "~/.openclaw/workspace/xhs-memory"
- ]
- }
-}
-```
-
-现在你的 AI 助手可以搜索你的小红书收藏了!
-
-## 安全说明
-
-本项目在脚本安全方面采取了以下措施:
-
-- **Cookies 保护**:cookies 文件复制时自动设置 `600` 权限(仅当前用户可读写)
-- **防注入**:所有 shell 脚本使用 `jq` 构建 JSON payload,不通过字符串拼接,防止 shell 注入攻击
-- **工具名校验**:MCP 工具名限制为字母数字和下划线,拒绝非法字符
-- **路径校验**:跨 skill 调用时校验目标路径在允许的目录范围内
-- **第三方内容**:从小红书获取的内容为用户生成内容(UGC),请注意甄别
-
-
-## 注意事项
-
-1. **发布限制**
- - 标题最多 20 个字符
- - 正文最多 1000 个字符
- - 每日发布上限约 50 条
-
-2. **账号安全**
- - 避免多设备同时登录同一账号
- - 手机 App 仅用于查看,不要同时操作
-
-3. **首次运行**
- - 会自动下载 headless 浏览器(约 150MB)
- - 请确保网络畅通
-
-4. **Cookies 有效期**
- - 通常有效期约 30 天
- - 失效后需重新获取
-
-## 项目结构
-
-```
-openclaw-xhs/
-├── README.md # 英文文档
-├── README_CN.md # 中文文档
-├── LICENSE
-├── SKILL.md # Skill 描述文件
-├── scripts/ # MCP 调用脚本
-│ ├── install-check.sh
-│ ├── start-mcp.sh
-│ ├── stop-mcp.sh
-│ ├── login.sh
-│ ├── mcp-call.sh
-│ ├── status.sh
-│ ├── search.sh
-│ ├── recommend.sh
-│ ├── post-detail.sh
-│ ├── comment.sh
-│ ├── user-profile.sh
-│ ├── track-topic.sh
-│ ├── track-topic.py
-│ ├── export-long-image.sh
-│ └── export-long-image.py
-└── tools/
- └── xhs-downloader/ # 记忆导出工具
- ├── README.md
- ├── batch_download.py
- ├── export_memory.py
- └── export_to_workspace.py
-```
-
-## 声明
-
-本项目是 [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) 的**调用封装层**。
-
-- **不包含** xiaohongshu-mcp 的任何源代码
-- **用户需自行下载** xiaohongshu-mcp 二进制文件
-- 脚本仅通过 HTTP 协议与 MCP 服务通信
-
-## 致谢
-
-- [@xpzouying](https://github.com/xpzouying) — [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp)
-- [@JoeanAmier](https://github.com/JoeanAmier) — [XHS-Downloader](https://github.com/JoeanAmier/XHS-Downloader) (GPL-3.0)
-
-## License
-
-MIT License(仅限本项目脚本)
-
-**注意:** xiaohongshu-mcp 项目未声明开源许可证,请遵守其作者的使用条款。
-
----
-
-
- 觉得有用?给个 ⭐ 支持一下!
-
diff --git a/.agents/skills/xiaohongshu/SKILL.md b/.agents/skills/xiaohongshu/SKILL.md
deleted file mode 100644
index 17791b0..0000000
--- a/.agents/skills/xiaohongshu/SKILL.md
+++ /dev/null
@@ -1,202 +0,0 @@
----
-name: xiaohongshu
-description: |
- 小红书(RedNote)内容工具。使用场景:
- - 搜索小红书笔记并获取详情
- - 获取首页推荐列表
- - 获取帖子详情(正文、图片、互动数据、评论)
- - 发表评论 / 回复评论
- - 获取用户主页和笔记列表
- - 点赞、收藏帖子
- - 发布图文或视频笔记
- - 热点话题跟踪与分析报告
- - 帖子导出为长图
- 触发词示例:
- - "搜一下小红书上的XX"
- - "跟踪一下小红书上的XX热点"
- - "分析小红书上关于XX的讨论"
- - "小红书XX话题报告"
- - "生成XX的小红书舆情报告"
----
-
-# 小红书 MCP Skill
-
-基于 [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) 封装的 shell 脚本工具集。
-
-## 前置条件
-
-```bash
-cd scripts/
-./install-check.sh # 检查依赖(xiaohongshu-mcp、jq、python3)
-./start-mcp.sh # 启动 MCP 服务(默认端口 18060)
-./status.sh # 确认已登录
-```
-
-未登录时需扫码:`mcp-call.sh get_login_qrcode` 获取二维码,用小红书 App 扫码。
-
-服务端口可通过 `MCP_URL` 环境变量覆盖(默认 `http://localhost:18060/mcp`)。
-
-## 核心数据流
-
-**重要:** 大多数操作需要 `feed_id` + `xsec_token` 配对。这两个值从搜索/推荐/用户主页结果中获取,**不可自行构造**。
-
-```
-search_feeds / list_feeds / user_profile
- │
- ▼
- 返回 feeds 数组,每个 feed 包含:
- ├── id → 用作 feed_id
- ├── xsecToken → 用作 xsec_token
- └── noteCard → 标题、作者、封面、互动数据
- │
- ▼
- get_feed_detail(feed_id, xsec_token)
- │
- ▼
- 返回完整笔记: 正文、图片列表、评论列表
- 评论中包含 comment_id、user_id(用于回复评论)
-```
-
-## 脚本参考
-
-| 脚本 | 用途 | 参数 |
-|------|------|------|
-| `search.sh <关键词>` | 搜索笔记 | 关键词 |
-| `recommend.sh` | 首页推荐 | 无 |
-| `post-detail.sh ` | 帖子详情+评论 | 从搜索结果获取 |
-| `comment.sh <内容>` | 发表评论 | 从搜索结果获取 |
-| `user-profile.sh ` | 用户主页+笔记 | 从搜索结果获取 |
-| `track-topic.sh <话题> [选项]` | 热点分析报告 | `--limit N` `--output file` `--feishu` |
-| `export-long-image.sh` | 帖子导出长图 | `--posts-file json -o output.jpg` |
-| `mcp-call.sh [json_args]` | 通用 MCP 调用 | 见下方工具表 |
-| `start-mcp.sh` | 启动服务 | `--headless=false` `--port=N` |
-| `stop-mcp.sh` | 停止服务 | 无 |
-| `status.sh` | 检查登录 | 无 |
-| `install-check.sh` | 检查依赖 | 无 |
-
-## MCP 工具详细参数
-
-### search_feeds — 搜索笔记
-
-```json
-{"keyword": "咖啡", "filters": {"sort_by": "最新", "note_type": "图文", "publish_time": "一周内"}}
-```
-
-filters 可选字段:
-- `sort_by`: 综合 | 最新 | 最多点赞 | 最多评论 | 最多收藏
-- `note_type`: 不限 | 视频 | 图文
-- `publish_time`: 不限 | 一天内 | 一周内 | 半年内
-- `search_scope`: 不限 | 已看过 | 未看过 | 已关注
-- `location`: 不限 | 同城 | 附近
-
-### get_feed_detail — 帖子详情
-
-```json
-{"feed_id": "...", "xsec_token": "...", "load_all_comments": true, "limit": 20}
-```
-
-- `load_all_comments`: false(默认) 返回前10条,true 滚动加载更多
-- `limit`: 加载评论上限(仅 load_all_comments=true 时生效),默认 20
-- `click_more_replies`: 是否展开二级回复,默认 false
-- `reply_limit`: 跳过回复数超过此值的评论,默认 10
-- `scroll_speed`: slow | normal | fast
-
-### post_comment_to_feed — 发表评论
-
-```json
-{"feed_id": "...", "xsec_token": "...", "content": "写得真好!"}
-```
-
-### reply_comment_in_feed — 回复评论
-
-```json
-{"feed_id": "...", "xsec_token": "...", "content": "谢谢!", "comment_id": "...", "user_id": "..."}
-```
-
-`comment_id` 和 `user_id` 从 get_feed_detail 返回的评论列表中获取。
-
-### user_profile — 用户主页
-
-```json
-{"user_id": "...", "xsec_token": "..."}
-```
-
-`user_id` 从 feed 的 `noteCard.user.userId` 获取,`xsec_token` 使用该 feed 的 `xsecToken`。
-
-### like_feed — 点赞/取消
-
-```json
-{"feed_id": "...", "xsec_token": "..."}
-{"feed_id": "...", "xsec_token": "...", "unlike": true}
-```
-
-### favorite_feed — 收藏/取消
-
-```json
-{"feed_id": "...", "xsec_token": "..."}
-{"feed_id": "...", "xsec_token": "...", "unfavorite": true}
-```
-
-### publish_content — 发布图文
-
-```json
-{"title": "标题(≤20字)", "content": "正文(≤1000字)", "images": ["/path/to/img.jpg"], "tags": ["美食","旅行"]}
-```
-
-- `images`: 至少1张,支持本地路径或 HTTP URL
-- `tags`: 可选,话题标签
-- `schedule_at`: 可选,定时发布(ISO8601,1小时~14天内)
-
-### publish_with_video — 发布视频
-
-```json
-{"title": "标题", "content": "正文", "video": "/path/to/video.mp4"}
-```
-
-### 其他工具
-
-| 工具 | 参数 | 说明 |
-|------|------|------|
-| `check_login_status` | 无 | 检查登录状态 |
-| `list_feeds` | 无 | 获取首页推荐 |
-| `get_login_qrcode` | 无 | 获取登录二维码(Base64 PNG) |
-| `delete_cookies` | 无 | 删除 cookies,重置登录 |
-
-## 热点跟踪
-
-自动搜索 → 拉取详情 → 生成 Markdown 报告。
-
-```bash
-./track-topic.sh "DeepSeek" --limit 5
-./track-topic.sh "春节旅游" --limit 10 --output report.md
-./track-topic.sh "iPhone 16" --limit 5 --feishu # 导出飞书
-```
-
-报告包含:概览统计、热帖详情(正文+热评)、评论关键词、趋势分析。
-
-## 长图导出
-
-将帖子导出为白底黑字的 JPG 长图。
-
-```bash
-./export-long-image.sh --posts-file posts.json -o output.jpg
-```
-
-posts.json 格式:
-```json
-[{
- "title": "标题", "author": "作者", "stats": "1.3万赞",
- "desc": "正文摘要", "images": ["https://..."],
- "per_image_text": {"1": "第2张图的说明"}
-}]
-```
-
-依赖:Python 3.10+、Pillow。
-
-## 注意事项
-
-- Cookies 有效期约 30 天,过期需重新扫码
-- 首次启动会下载 headless 浏览器(~150MB)
-- 同一账号避免多客户端同时操作
-- 发布限制:标题≤20字符,正文≤1000字符,日发布≤50条
-- Linux 服务器无桌面环境需安装 xvfb(`apt-get install xvfb`,脚本自动管理)
diff --git a/.agents/skills/xiaohongshu/scripts/comment.sh b/.agents/skills/xiaohongshu/scripts/comment.sh
deleted file mode 100755
index 8a51d59..0000000
--- a/.agents/skills/xiaohongshu/scripts/comment.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-# 发表评论到小红书帖子
-
-NOTE_ID="$1"
-XSEC_TOKEN="$2"
-CONTENT="$3"
-
-if [ -z "$NOTE_ID" ] || [ -z "$XSEC_TOKEN" ] || [ -z "$CONTENT" ]; then
- echo "用法: $0 <评论内容>"
- exit 1
-fi
-
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-ARGS=$(jq -n --arg fid "$NOTE_ID" --arg tok "$XSEC_TOKEN" --arg ct "$CONTENT" \
- '{"feed_id":$fid,"xsec_token":$tok,"content":$ct}')
-"$SCRIPT_DIR/mcp-call.sh" post_comment_to_feed "$ARGS"
diff --git a/.agents/skills/xiaohongshu/scripts/cookies.json b/.agents/skills/xiaohongshu/scripts/cookies.json
deleted file mode 100644
index 819f8b6..0000000
--- a/.agents/skills/xiaohongshu/scripts/cookies.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"name":"acw_tc","value":"0a00dbc717762232847051713ea1217a7acc4a89d81bf95e65906a490251e7","domain":"www.xiaohongshu.com","path":"/","expires":1776225084.815888,"size":68,"httpOnly":true,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"abRequestId","value":"0db952cd-3244-52d5-bf14-4ffb86d79784","domain":".xiaohongshu.com","path":"/","expires":1807759284.816125,"size":47,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"ets","value":"1776223285450","domain":".xiaohongshu.com","path":"/","expires":1778815285.450774,"size":16,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"webBuild","value":"6.6.0","domain":".xiaohongshu.com","path":"/","expires":-1,"size":13,"httpOnly":false,"secure":false,"session":true,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"xsecappid","value":"xhs-pc-web","domain":".xiaohongshu.com","path":"/","expires":1807759285,"size":19,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"loadts","value":"1776223285510","domain":".xiaohongshu.com","path":"/","expires":1807759285,"size":19,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"a1","value":"19d8f28710bg4n2alvzxu30gnyyxnprzioy5how6430000426473","domain":".xiaohongshu.com","path":"/","expires":1807759285,"size":54,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"webId","value":"74c0c5711a2be3b7ab536e24ab97e644","domain":".xiaohongshu.com","path":"/","expires":1807759285,"size":37,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"acw_tc","value":"0a4ae12217762232858201316ec263c2521ac3093f47d21bb05138d6c47855","domain":"edith.xiaohongshu.com","path":"/","expires":1776225085.794244,"size":68,"httpOnly":true,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"websectiga","value":"16f444b9ff5e3d7e258b5f7674489196303a0b160e16647c6c2b4dcb609f4134","domain":".xiaohongshu.com","path":"/","expires":1776482485,"size":74,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"sec_poison_id","value":"04a04fa0-b866-4141-b00c-8e9d86696803","domain":".xiaohongshu.com","path":"/","expires":1776223890,"size":49,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"acw_tc","value":"0a4adb3917762232862231622e397f82f8986c933f9409333119ea8ff76fe5","domain":"so.xiaohongshu.com","path":"/","expires":1776225086.198765,"size":68,"httpOnly":true,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"unread","value":"{%22ub%22:%2264be88f5000000000a01a738%22%2C%22ue%22:%2263f49daf0000000013004a95%22%2C%22uc%22:13}","domain":".xiaohongshu.com","path":"/","expires":-1,"size":103,"httpOnly":false,"secure":false,"session":true,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"gid","value":"yjfYiJYWfd3KyjfYiJYWyllE8Dk4IJ01huC7vK4q8kIvv2q8CIUFux8884JK4Wq8f0dSf0SW","domain":".xiaohongshu.com","path":"/","expires":1810783298.403007,"size":75,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"web_session","value":"0400698e3df40f57bfb4244cea3b4b5566c8bc","domain":".xiaohongshu.com","path":"/","expires":1807759309.695016,"size":49,"httpOnly":true,"secure":true,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"id_token","value":"VjEAAAE6HnlvwMhfB2lWeyhDp5C0798IDu1q6CFvQyi96bTV8pU4Im29xspYVZTHBEjxVUEH2Xkq5RxQgrTOfZBdGAY8c3Fk49zwLKmPTsJ7fxsQ/bcD+l+hcfi2X9+WcXoAIWKf","domain":".xiaohongshu.com","path":"/","expires":1807759309.695111,"size":144,"httpOnly":true,"secure":true,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443}]
\ No newline at end of file
diff --git a/.agents/skills/xiaohongshu/scripts/export-long-image.py b/.agents/skills/xiaohongshu/scripts/export-long-image.py
deleted file mode 100644
index 6aad14c..0000000
--- a/.agents/skills/xiaohongshu/scripts/export-long-image.py
+++ /dev/null
@@ -1,260 +0,0 @@
-#!/usr/bin/env python3
-"""
-小红书帖子长图导出工具
-
-用法:
- python3 export-long-image.py --posts '' --output output.jpg
- python3 export-long-image.py --posts-file posts.json --output output.jpg
-
-posts JSON 格式:
-[
- {
- "title": "帖子标题",
- "author": "作者名",
- "stats": "1.3万赞 5171收藏",
- "desc": "正文摘要,支持\\n换行",
- "images": ["url1", "url2", ...],
- "per_image_text": {
- "1": "第2张图的说明文字(0-indexed)",
- "3": "第4张图的说明文字"
- }
- },
- ...
-]
-
-per_image_text 可选:如果原帖文字明确指向某张图,可以把说明放在对应图片上。
-未指定 per_image_text 时,所有文字放在该帖第一张图前的文字块中。
-"""
-
-import argparse
-import json
-import os
-import sys
-import tempfile
-import urllib.request
-from PIL import Image, ImageDraw, ImageFont
-
-# --- 配置 ---
-WIDTH = 800
-PAD = 24
-LINE_SPACE = 10
-FONT_CANDIDATES = [
- "/System/Library/Fonts/STHeiti Medium.ttc",
- "/System/Library/Fonts/Hiragino Sans GB.ttc",
- "/System/Library/Fonts/Supplemental/Arial Unicode.ttf",
- "/usr/share/fonts/truetype/noto/NotoSansCJK-Regular.ttc",
- "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc",
-]
-
-
-def find_font():
- for path in FONT_CANDIDATES:
- if os.path.exists(path):
- return path
- return None
-
-
-def load_font(path, size):
- if path:
- try:
- return ImageFont.truetype(path, size, index=0)
- except Exception:
- pass
- return ImageFont.load_default()
-
-
-def wrap_text(text, font, max_width, draw):
- lines = []
- for paragraph in text.split("\n"):
- paragraph = paragraph.strip()
- if not paragraph:
- continue
- current = ""
- for char in paragraph:
- test = current + char
- bbox = draw.textbbox((0, 0), test, font=font)
- if bbox[2] - bbox[0] > max_width:
- if current:
- lines.append(current)
- current = char
- else:
- current = test
- if current:
- lines.append(current)
- return lines
-
-
-def draw_lines(draw, lines, font, x, y, fill):
- for line in lines:
- draw.text((x, y), line, font=font, fill=fill)
- bbox = draw.textbbox((0, 0), line, font=font)
- y += (bbox[3] - bbox[1]) + LINE_SPACE
- return y
-
-
-def measure_lines(lines, font, draw):
- h = 0
- for line in lines:
- bbox = draw.textbbox((0, 0), line if line else " ", font=font)
- h += (bbox[3] - bbox[1]) + LINE_SPACE
- return h
-
-
-def make_text_block(title, author_line, desc, font_path, width):
- """白底黑字文字块,模仿小红书原样"""
- title_font = load_font(font_path, 32)
- author_font = load_font(font_path, 20)
- body_font = load_font(font_path, 24)
-
- tmp = Image.new("RGB", (width, 10))
- draw = ImageDraw.Draw(tmp)
- max_w = width - PAD * 2
-
- title_lines = wrap_text(title, title_font, max_w, draw)
- author_lines = [author_line] if author_line else []
- desc_lines = wrap_text(desc, body_font, max_w, draw) if desc else []
-
- # 计算高度
- total_h = PAD
- total_h += measure_lines(title_lines, title_font, draw)
- if author_lines:
- total_h += 4
- total_h += measure_lines(author_lines, author_font, draw)
- if desc_lines:
- total_h += 8
- total_h += measure_lines(desc_lines, body_font, draw)
- total_h += PAD
-
- # 绘制
- block = Image.new("RGB", (width, total_h), (255, 255, 255))
- draw = ImageDraw.Draw(block)
-
- y = PAD
- y = draw_lines(draw, title_lines, title_font, PAD, y, (33, 33, 33))
- if author_lines:
- y += 4
- y = draw_lines(draw, author_lines, author_font, PAD, y, (153, 153, 153))
- if desc_lines:
- y += 8
- y = draw_lines(draw, desc_lines, body_font, PAD, y, (66, 66, 66))
-
- return block
-
-
-def make_image_caption(text, font_path, width):
- """图片上方的小说明文字块"""
- font = load_font(font_path, 20)
- tmp = Image.new("RGB", (width, 10))
- draw = ImageDraw.Draw(tmp)
- lines = wrap_text(text, font, width - PAD * 2, draw)
-
- h = PAD + measure_lines(lines, font, draw) + 8
- block = Image.new("RGB", (width, h), (245, 245, 245))
- draw = ImageDraw.Draw(block)
- draw_lines(draw, lines, font, PAD, PAD // 2, (100, 100, 100))
- return block
-
-
-def download_image(url, tmpdir, idx):
- """下载图片到临时目录"""
- ext = ".webp"
- path = os.path.join(tmpdir, f"img_{idx}{ext}")
- try:
- req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
- with urllib.request.urlopen(req, timeout=30) as resp:
- with open(path, "wb") as f:
- f.write(resp.read())
- return path
- except Exception as e:
- print(f" 警告: 下载失败 {url[:60]}... ({e})", file=sys.stderr)
- return None
-
-
-def main():
- parser = argparse.ArgumentParser(description="小红书帖子长图导出")
- parser.add_argument("--posts", help="Posts JSON string")
- parser.add_argument("--posts-file", help="Posts JSON file path")
- parser.add_argument("--output", "-o", required=True, help="Output JPG path")
- parser.add_argument("--width", type=int, default=800, help="Image width (default 800)")
- parser.add_argument("--quality", type=int, default=88, help="JPEG quality (default 88)")
- args = parser.parse_args()
-
- global WIDTH
- WIDTH = args.width
-
- # 读取 posts 数据
- if args.posts:
- posts = json.loads(args.posts)
- elif args.posts_file:
- with open(args.posts_file, "r") as f:
- posts = json.load(f)
- else:
- print("错误: 需要 --posts 或 --posts-file", file=sys.stderr)
- sys.exit(1)
-
- font_path = find_font()
- if not font_path:
- print("警告: 未找到中文字体,文字可能显示异常", file=sys.stderr)
-
- sep = Image.new("RGB", (WIDTH, 3), (230, 230, 230))
- pieces = []
-
- with tempfile.TemporaryDirectory() as tmpdir:
- img_counter = 0
- for pi, post in enumerate(posts):
- title = post.get("title", "")
- author = post.get("author", "")
- stats = post.get("stats", "")
- desc = post.get("desc", "")
- images = post.get("images", [])
- per_image_text = post.get("per_image_text", {})
-
- # 作者行
- author_line = author
- if stats:
- author_line = f"{author} · {stats}" if author else stats
-
- # 主文字块
- text_block = make_text_block(title, author_line, desc, font_path, WIDTH)
- pieces.append(text_block)
-
- # 图片
- for i, url in enumerate(images):
- # 是否有针对这张图的说明
- img_key = str(i)
- if img_key in per_image_text:
- caption_block = make_image_caption(per_image_text[img_key], font_path, WIDTH)
- pieces.append(caption_block)
-
- img_path = download_image(url, tmpdir, img_counter)
- img_counter += 1
- if img_path:
- try:
- im = Image.open(img_path).convert("RGB")
- ratio = WIDTH / im.width
- im = im.resize((WIDTH, int(im.height * ratio)), Image.LANCZOS)
- pieces.append(im)
- except Exception as e:
- print(f" 警告: 图片处理失败 ({e})", file=sys.stderr)
-
- # 帖子间分隔线
- if pi < len(posts) - 1:
- pieces.append(sep)
-
- if not pieces:
- print("错误: 没有内容可拼接", file=sys.stderr)
- sys.exit(1)
-
- total_h = sum(p.height for p in pieces)
- long_img = Image.new("RGB", (WIDTH, total_h), (255, 255, 255))
- y = 0
- for p in pieces:
- long_img.paste(p, (0, y))
- y += p.height
-
- long_img.save(args.output, "JPEG", quality=args.quality)
- print(f"完成: {args.output} ({WIDTH}x{total_h})")
-
-
-if __name__ == "__main__":
- main()
diff --git a/.agents/skills/xiaohongshu/scripts/export-long-image.sh b/.agents/skills/xiaohongshu/scripts/export-long-image.sh
deleted file mode 100755
index 556e455..0000000
--- a/.agents/skills/xiaohongshu/scripts/export-long-image.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-# 小红书帖子导出长图
-#
-# 用法:
-# ./export-long-image.sh --posts-file posts.json -o output.jpg
-# ./export-long-image.sh --posts '' -o output.jpg
-#
-# posts.json 示例:
-# [
-# {
-# "title": "帖子标题",
-# "author": "作者",
-# "stats": "1.3万赞 100收藏",
-# "desc": "正文摘要",
-# "images": ["https://...webp", "https://...webp"]
-# }
-# ]
-
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-python3 "$SCRIPT_DIR/export-long-image.py" "$@"
diff --git a/.agents/skills/xiaohongshu/scripts/install-check.sh b/.agents/skills/xiaohongshu/scripts/install-check.sh
deleted file mode 100755
index ad05126..0000000
--- a/.agents/skills/xiaohongshu/scripts/install-check.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/bash
-# 检查小红书 MCP 依赖是否已安装
-
-set -e
-
-echo "检查小红书 MCP 依赖..."
-echo ""
-
-XHS_MCP="$HOME/.local/bin/xiaohongshu-mcp"
-XHS_LOGIN="$HOME/.local/bin/xiaohongshu-login"
-
-check_binary() {
- local name="$1"
- local path="$2"
- if [ -f "$path" ]; then
- echo "✅ $name: $path"
- return 0
- else
- echo "❌ $name: 未找到"
- return 1
- fi
-}
-
-MISSING=0
-
-check_binary "xiaohongshu-mcp" "$XHS_MCP" || MISSING=1
-check_binary "xiaohongshu-login" "$XHS_LOGIN" || MISSING=1
-
-echo ""
-
-# 检查 jq(必需,用于安全构建 JSON)
-if command -v jq &> /dev/null; then
- echo "✅ jq: $(which jq)"
-else
- echo "❌ jq: 未安装(必需,用于安全构建 JSON)"
- echo " 安装: apt-get install jq / brew install jq"
- MISSING=1
-fi
-
-# 检查 Python3(track-topic.py 需要)
-if command -v python3 &> /dev/null; then
- echo "✅ python3: $(python3 --version)"
-else
- echo "⚠️ python3: 未安装(热点跟踪功能需要)"
-fi
-
-echo ""
-
-if [ $MISSING -eq 1 ]; then
- echo "=========================================="
- echo "缺少必要依赖,请按以下步骤安装:"
- echo ""
- echo "1. 从 GitHub Releases 下载对应平台的二进制文件:"
- echo " https://github.com/xpzouying/xiaohongshu-mcp/releases"
- echo ""
- echo "2. 解压并安装到 ~/.local/bin/:"
- echo " mkdir -p ~/.local/bin"
- echo " mv xiaohongshu-mcp-linux-amd64 ~/.local/bin/xiaohongshu-mcp"
- echo " mv xiaohongshu-login-linux-amd64 ~/.local/bin/xiaohongshu-login"
- echo " chmod +x ~/.local/bin/xiaohongshu-*"
- echo ""
- echo "3. 确保 ~/.local/bin 在 PATH 中(可选)"
- echo "=========================================="
- exit 1
-else
- echo "✅ 所有依赖已就绪"
-fi
diff --git a/.agents/skills/xiaohongshu/scripts/login.sh b/.agents/skills/xiaohongshu/scripts/login.sh
deleted file mode 100755
index 6206621..0000000
--- a/.agents/skills/xiaohongshu/scripts/login.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-# 启动小红书登录工具
-
-XHS_LOGIN="$HOME/.local/bin/xiaohongshu-login"
-
-echo "启动小红书登录工具..."
-echo "注意:需要桌面环境或 X11 转发"
-echo ""
-
-"$XHS_LOGIN"
diff --git a/.agents/skills/xiaohongshu/scripts/mcp-call.sh b/.agents/skills/xiaohongshu/scripts/mcp-call.sh
deleted file mode 100755
index a081b41..0000000
--- a/.agents/skills/xiaohongshu/scripts/mcp-call.sh
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/bin/bash
-# 通用 MCP 调用脚本(支持 Streamable HTTP + Session ID)
-
-set -e
-
-TOOL_NAME="$1"
-TOOL_ARGS="$2"
-MCP_URL="${MCP_URL:-http://localhost:18060/mcp}"
-export no_proxy="${no_proxy:+$no_proxy,}localhost,127.0.0.1"
-
-# 检查 jq 依赖
-if ! command -v jq &> /dev/null; then
- echo "错误: 需要安装 jq (apt-get install jq / brew install jq)"
- exit 1
-fi
-
-if [ -z "$TOOL_NAME" ]; then
- echo "用法: $0 [json_args]"
- echo ""
- echo "可用工具:"
- echo " check_login_status - 检查登录状态"
- echo " search_feeds - 搜索内容 {\"keyword\": \"...\", \"filters\": {\"sort_by\": \"最新\"}}"
- echo " list_feeds - 获取首页推荐"
- echo " get_feed_detail - 获取帖子详情 {\"feed_id\": \"...\", \"xsec_token\": \"...\"}"
- echo " post_comment_to_feed - 发表评论 {\"feed_id\": \"...\", \"xsec_token\": \"...\", \"content\": \"...\"}"
- echo " reply_comment_in_feed - 回复评论 {\"feed_id\": \"...\", \"xsec_token\": \"...\", \"content\": \"...\", \"comment_id\": \"...\", \"user_id\": \"...\"}"
- echo " user_profile - 获取用户主页 {\"user_id\": \"...\", \"xsec_token\": \"...\"}"
- echo " like_feed - 点赞 {\"feed_id\": \"...\", \"xsec_token\": \"...\"} 取消: {\"unlike\": true}"
- echo " favorite_feed - 收藏 {\"feed_id\": \"...\", \"xsec_token\": \"...\"} 取消: {\"unfavorite\": true}"
- echo " get_login_qrcode - 获取登录二维码"
- echo " delete_cookies - 删除 cookies,重置登录状态"
- echo " publish_content - 发布图文"
- echo " publish_with_video - 发布视频"
- exit 1
-fi
-
-# 校验 tool name,只允许字母数字和下划线
-if [[ ! "$TOOL_NAME" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then
- echo "错误: 无效的工具名: $TOOL_NAME"
- exit 1
-fi
-
-[ -z "$TOOL_ARGS" ] && TOOL_ARGS="{}"
-
-# 校验 TOOL_ARGS 是合法 JSON
-if ! echo "$TOOL_ARGS" | jq empty 2>/dev/null; then
- echo "错误: 参数不是合法的 JSON: $TOOL_ARGS"
- exit 1
-fi
-
-# 1. Initialize 并获取 Session ID
-INIT_RESPONSE=$(curl --noproxy '*' -s -i -X POST "$MCP_URL" \
- -H "Content-Type: application/json" \
- -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"openclaw","version":"1.0"}}}')
-
-SESSION_ID=$(echo "$INIT_RESPONSE" | grep -i "Mcp-Session-Id" | awk '{print $2}' | tr -d '\r\n')
-
-if [ -z "$SESSION_ID" ]; then
- echo "错误: 无法获取 MCP Session ID"
- echo "请确保 MCP 服务正在运行: ./start-mcp.sh"
- exit 1
-fi
-
-# 2. Initialized notification
-curl --noproxy '*' -s -X POST "$MCP_URL" \
- -H "Content-Type: application/json" \
- -H "Mcp-Session-Id: $SESSION_ID" \
- -d '{"jsonrpc":"2.0","method":"notifications/initialized"}' > /dev/null
-
-# 3. Call tool — 使用 jq 安全构建 JSON,避免 shell 注入
-CALL_PAYLOAD=$(jq -n \
- --arg name "$TOOL_NAME" \
- --argjson args "$TOOL_ARGS" \
- '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":$name,"arguments":$args}}')
-
-RESULT=$(curl --noproxy '*' -s --max-time 120 -X POST "$MCP_URL" \
- -H "Content-Type: application/json" \
- -H "Mcp-Session-Id: $SESSION_ID" \
- -d "$CALL_PAYLOAD")
-
-# 输出结果
-echo "$RESULT" | jq .
diff --git a/.agents/skills/xiaohongshu/scripts/post-detail.sh b/.agents/skills/xiaohongshu/scripts/post-detail.sh
deleted file mode 100755
index 033fc4a..0000000
--- a/.agents/skills/xiaohongshu/scripts/post-detail.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# 获取小红书帖子详情
-
-NOTE_ID="$1"
-XSEC_TOKEN="$2"
-
-if [ -z "$NOTE_ID" ] || [ -z "$XSEC_TOKEN" ]; then
- echo "用法: $0 "
- echo ""
- echo "note_id 和 xsec_token 可从搜索或推荐结果中获取"
- exit 1
-fi
-
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-ARGS=$(jq -n --arg fid "$NOTE_ID" --arg tok "$XSEC_TOKEN" \
- '{"feed_id":$fid,"xsec_token":$tok}')
-"$SCRIPT_DIR/mcp-call.sh" get_feed_detail "$ARGS"
diff --git a/.agents/skills/xiaohongshu/scripts/recommend.sh b/.agents/skills/xiaohongshu/scripts/recommend.sh
deleted file mode 100755
index b93ec1f..0000000
--- a/.agents/skills/xiaohongshu/scripts/recommend.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-# 获取小红书首页推荐列表
-
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-"$SCRIPT_DIR/mcp-call.sh" list_feeds
diff --git a/.agents/skills/xiaohongshu/scripts/search.sh b/.agents/skills/xiaohongshu/scripts/search.sh
deleted file mode 100755
index 9a9ed79..0000000
--- a/.agents/skills/xiaohongshu/scripts/search.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-# 搜索小红书内容
-
-KEYWORD="$1"
-
-if [ -z "$KEYWORD" ]; then
- echo "用法: $0 <关键词>"
- exit 1
-fi
-
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-ARGS=$(jq -n --arg kw "$KEYWORD" '{"keyword":$kw}')
-"$SCRIPT_DIR/mcp-call.sh" search_feeds "$ARGS"
diff --git a/.agents/skills/xiaohongshu/scripts/start-mcp.sh b/.agents/skills/xiaohongshu/scripts/start-mcp.sh
deleted file mode 100755
index bd7a413..0000000
--- a/.agents/skills/xiaohongshu/scripts/start-mcp.sh
+++ /dev/null
@@ -1,166 +0,0 @@
-#!/bin/bash
-# 启动小红书 MCP 服务
-
-XHS_MCP="$HOME/.local/bin/xiaohongshu-mcp"
-PID_FILE="$HOME/.xiaohongshu/mcp.pid"
-LOG_FILE="$HOME/.xiaohongshu/mcp.log"
-XVFB_PID_FILE="$HOME/.xiaohongshu/xvfb.pid"
-XVFB_DISPLAY_FILE="$HOME/.xiaohongshu/xvfb.display"
-
-# Cookies 路径(可通过环境变量覆盖)
-# XHS_COOKIES_SRC: 源 cookies 文件(用于远程服务器场景)
-# 默认检查 ~/cookies.json 和 ~/.xiaohongshu/cookies.json
-COOKIES_DST="/tmp/cookies.json"
-
-mkdir -p "$HOME/.xiaohongshu"
-
-# 检测是否有显示器(桌面环境)
-has_display() {
- [ -n "$DISPLAY" ] && xdpyinfo >/dev/null 2>&1
-}
-
-# 在无桌面环境下自动启动 Xvfb
-ensure_display() {
- if has_display; then
- return 0
- fi
-
- # 已有 Xvfb 在运行
- if [ -f "$XVFB_PID_FILE" ]; then
- local pid
- pid=$(cat "$XVFB_PID_FILE")
- if kill -0 "$pid" 2>/dev/null; then
- export DISPLAY=$(cat "$XVFB_DISPLAY_FILE" 2>/dev/null || echo ":99")
- echo "复用已有 Xvfb (PID: $pid, DISPLAY=$DISPLAY)"
- return 0
- fi
- fi
-
- # 检查 Xvfb 是否安装
- if ! command -v Xvfb >/dev/null 2>&1; then
- echo "⚠ 未检测到桌面环境,且未安装 Xvfb。"
- echo " 请安装:sudo apt-get install -y xvfb"
- echo " 安装后重新运行本脚本即可自动配置。"
- exit 1
- fi
-
- echo "未检测到桌面环境,自动启动 Xvfb 虚拟显示..."
-
- # 自动选择可用的 display 号(99-109)
- local display_num=""
- local d
- for d in $(seq 99 109); do
- if [ ! -e "/tmp/.X${d}-lock" ]; then
- display_num=$d
- break
- fi
- # 锁文件存在但进程已死,尝试清理后使用
- local lock_pid
- lock_pid=$(cat "/tmp/.X${d}-lock" 2>/dev/null | tr -d ' ')
- if [ -n "$lock_pid" ] && ! kill -0 "$lock_pid" 2>/dev/null; then
- rm -f "/tmp/.X${d}-lock" "/tmp/.X11-unix/X${d}" 2>/dev/null
- if [ ! -e "/tmp/.X${d}-lock" ]; then
- display_num=$d
- break
- fi
- fi
- done
-
- if [ -z "$display_num" ]; then
- echo "✗ 无法找到可用的 display 号(:99-:109 均被占用)"
- exit 1
- fi
-
- # -ac: 关闭访问控制,允许 chromium 连接虚拟显示(仅用于 headless 自动化)
- Xvfb ":${display_num}" -screen 0 1024x768x24 -ac >/dev/null 2>&1 &
- echo $! > "$XVFB_PID_FILE"
- echo ":${display_num}" > "$XVFB_DISPLAY_FILE"
- export DISPLAY=":${display_num}"
- sleep 1
-
- if kill -0 "$(cat "$XVFB_PID_FILE")" 2>/dev/null; then
- echo "✓ Xvfb 已启动 (DISPLAY=:${display_num})"
- else
- echo "✗ Xvfb 启动失败"
- exit 1
- fi
-}
-
-# 同步 cookies(支持多个可能的来源)
-sync_cookies() {
- local src=""
-
- # 优先使用环境变量指定的路径
- if [ -n "$XHS_COOKIES_SRC" ] && [ -f "$XHS_COOKIES_SRC" ]; then
- src="$XHS_COOKIES_SRC"
- elif [ -f "$HOME/cookies.json" ]; then
- src="$HOME/cookies.json"
- elif [ -f "$HOME/.xiaohongshu/cookies.json" ]; then
- src="$HOME/.xiaohongshu/cookies.json"
- fi
-
- if [ -n "$src" ]; then
- if [ ! -f "$COOKIES_DST" ] || [ "$src" -nt "$COOKIES_DST" ]; then
- install -m 600 "$src" "$COOKIES_DST"
- echo "已同步 cookies: $src -> $COOKIES_DST"
- fi
- else
- # 确保已有的 cookies 文件权限正确
- [ -f "$COOKIES_DST" ] && chmod 600 "$COOKIES_DST"
- fi
-}
-
-sync_cookies
-ensure_display
-
-# 检查是否已在运行
-if [ -f "$PID_FILE" ]; then
- PID=$(cat "$PID_FILE")
- if kill -0 "$PID" 2>/dev/null; then
- echo "MCP 服务已在运行 (PID: $PID)"
- echo "如需重启,请先运行 stop-mcp.sh"
- exit 0
- fi
-fi
-
-# 解析参数
-HEADLESS="true"
-PORT="${XHS_MCP_PORT:-18060}"
-for arg in "$@"; do
- case $arg in
- --headless=false)
- HEADLESS="false"
- ;;
- --port=*)
- PORT="${arg#*=}"
- ;;
- esac
-done
-
-# 校验端口号
-if [[ ! "$PORT" =~ ^[0-9]+$ ]]; then
- echo "错误: 无效端口号: $PORT"
- exit 1
-fi
-
-# 启动服务
-echo "启动小红书 MCP 服务..."
-if [ "$HEADLESS" = "false" ]; then
- nohup "$XHS_MCP" -port ":${PORT}" -headless=false > "$LOG_FILE" 2>&1 &
-else
- nohup "$XHS_MCP" -port ":${PORT}" > "$LOG_FILE" 2>&1 &
-fi
-
-echo $! > "$PID_FILE"
-sleep 2
-
-# 验证启动
-if kill -0 $(cat "$PID_FILE") 2>/dev/null; then
- echo "✓ MCP 服务已启动 (PID: $(cat $PID_FILE))"
- echo " 端点: http://localhost:${PORT}/mcp"
- echo " 日志: $LOG_FILE"
-else
- echo "✗ 启动失败,查看日志: $LOG_FILE"
- cat "$LOG_FILE"
- exit 1
-fi
diff --git a/.agents/skills/xiaohongshu/scripts/status.sh b/.agents/skills/xiaohongshu/scripts/status.sh
deleted file mode 100755
index 567a603..0000000
--- a/.agents/skills/xiaohongshu/scripts/status.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-# 检查小红书登录状态
-
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-"$SCRIPT_DIR/mcp-call.sh" check_login_status
diff --git a/.agents/skills/xiaohongshu/scripts/stop-mcp.sh b/.agents/skills/xiaohongshu/scripts/stop-mcp.sh
deleted file mode 100755
index 88474a7..0000000
--- a/.agents/skills/xiaohongshu/scripts/stop-mcp.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/bash
-# 停止小红书 MCP 服务
-
-PID_FILE="$HOME/.xiaohongshu/mcp.pid"
-XVFB_PID_FILE="$HOME/.xiaohongshu/xvfb.pid"
-
-if [ -f "$PID_FILE" ]; then
- PID=$(cat "$PID_FILE")
- if kill -0 "$PID" 2>/dev/null; then
- kill "$PID"
- rm -f "$PID_FILE"
- echo "✓ MCP 服务已停止"
- else
- echo "进程不存在,清理 PID 文件"
- rm -f "$PID_FILE"
- fi
-else
- echo "MCP 服务未运行"
-fi
-
-# 清理 Xvfb
-if [ -f "$XVFB_PID_FILE" ]; then
- XVFB_PID=$(cat "$XVFB_PID_FILE")
- if kill -0 "$XVFB_PID" 2>/dev/null; then
- kill "$XVFB_PID"
- echo "✓ Xvfb 已停止"
- fi
- rm -f "$XVFB_PID_FILE" "$HOME/.xiaohongshu/xvfb.display"
-fi
diff --git a/.agents/skills/xiaohongshu/scripts/track-topic.py b/.agents/skills/xiaohongshu/scripts/track-topic.py
deleted file mode 100755
index 231e68c..0000000
--- a/.agents/skills/xiaohongshu/scripts/track-topic.py
+++ /dev/null
@@ -1,313 +0,0 @@
-#!/usr/bin/env python3
-"""
-小红书热点跟踪工具
-
-用法:
- python track-topic.py <话题> [--limit N] [--feishu] [--output FILE]
-
-示例:
- python track-topic.py "DeepSeek" --limit 5 --feishu
- python track-topic.py "春节旅游" --limit 10 --output report.md
-"""
-
-import argparse
-import json
-import subprocess
-import sys
-import os
-from datetime import datetime
-from pathlib import Path
-
-# 获取脚本目录
-SCRIPT_DIR = Path(__file__).parent.resolve()
-XHS_SCRIPTS = SCRIPT_DIR # 现在就在 xiaohongshu/scripts 目录下
-
-# 飞书 skill 路径(支持多种可能的位置)
-def find_feishu_scripts() -> Path:
- """查找 feishu-docs skill 的 scripts 目录"""
- # 只允许在已知的 skill 目录中查找
- allowed_roots = [
- SCRIPT_DIR.parent.parent, # 同级 skill 目录
- Path.home() / ".openclaw" / "workspace" / "skills",
- Path.home() / ".claude" / "skills",
- ]
- for root in allowed_roots:
- candidate = (root / "feishu-docs" / "scripts").resolve()
- # 校验解析后的路径仍在允许的根目录下(防止符号链接逃逸)
- if candidate.is_dir() and any(
- str(candidate).startswith(str(r.resolve()) + os.sep) for r in allowed_roots
- ):
- return candidate
- return allowed_roots[0] / "feishu-docs" / "scripts" # 返回默认路径(可能不存在)
-
-FEISHU_SCRIPTS = find_feishu_scripts()
-
-
-def call_xhs_mcp(tool: str, args: dict) -> dict:
- """调用小红书 MCP 工具"""
- mcp_call = XHS_SCRIPTS / "mcp-call.sh"
- if not mcp_call.exists():
- print(f"❌ 找不到 xiaohongshu skill: {mcp_call}", file=sys.stderr)
- sys.exit(1)
-
- result = subprocess.run(
- [str(mcp_call), tool, json.dumps(args)],
- capture_output=True, text=True, timeout=120
- )
-
- if result.returncode != 0:
- print(f"❌ MCP 调用失败: {result.stderr}", file=sys.stderr)
- return {}
-
- try:
- response = json.loads(result.stdout)
- if "result" in response and "content" in response["result"]:
- text = response["result"]["content"][0].get("text", "{}")
- return json.loads(text) if text else {}
- elif "error" in response:
- print(f"⚠️ MCP 错误: {response['error'].get('message', 'Unknown')}", file=sys.stderr)
- return {}
- return response
- except json.JSONDecodeError:
- return {}
-
-
-def search_feeds(keyword: str) -> list:
- """搜索小红书内容"""
- print(f"🔍 搜索: {keyword}")
- result = call_xhs_mcp("search_feeds", {"keyword": keyword})
- feeds = result.get("feeds", [])
- # 过滤掉 hot_query 类型
- return [f for f in feeds if f.get("modelType") == "note"]
-
-
-def get_feed_detail(feed_id: str, xsec_token: str, load_comments: bool = True) -> dict:
- """获取帖子详情"""
- args = {
- "feed_id": feed_id,
- "xsec_token": xsec_token,
- "load_all_comments": load_comments
- }
- result = call_xhs_mcp("get_feed_detail", args)
- return result.get("data", {})
-
-
-def format_timestamp(ts: int) -> str:
- """格式化时间戳"""
- if not ts:
- return "未知"
- try:
- dt = datetime.fromtimestamp(ts / 1000)
- return dt.strftime("%Y-%m-%d %H:%M")
- except:
- return "未知"
-
-
-def get_comments_list(post: dict) -> list:
- """安全地获取评论列表"""
- comments = post.get("comments", {})
- if isinstance(comments, dict):
- return comments.get("list", [])
- elif isinstance(comments, list):
- return comments
- return []
-
-
-def generate_report(keyword: str, posts: list) -> str:
- """生成 Markdown 报告"""
- now = datetime.now().strftime("%Y-%m-%d %H:%M")
-
- report = f"""# 🔥 小红书热点跟踪报告
-
-**话题:** {keyword}
-**生成时间:** {now}
-**收录帖子:** {len(posts)} 篇
-
----
-
-## 📊 概览
-
-"""
-
- # 统计信息
- total_likes = sum(int(p.get("note", {}).get("interactInfo", {}).get("likedCount", 0) or 0) for p in posts)
- total_comments = sum(len(get_comments_list(p)) for p in posts)
-
- report += f"""| 指标 | 数值 |
-|------|------|
-| 总帖子数 | {len(posts)} |
-| 总点赞数 | {total_likes:,} |
-| 总评论数 | {total_comments} |
-
----
-
-## 📝 热帖详情
-
-"""
-
- for i, post in enumerate(posts, 1):
- note = post.get("note", {})
- comments = get_comments_list(post)
-
- title = note.get("title", "无标题")
- desc = note.get("desc", "")
- user = note.get("user", {}).get("nickname", "匿名")
- time_str = format_timestamp(note.get("time"))
- interact = note.get("interactInfo", {})
- likes = interact.get("likedCount", "0")
- collected = interact.get("collectedCount", "0")
-
- report += f"""### {i}. {title}
-
-**作者:** {user}
-**时间:** {time_str}
-**互动:** ❤️ {likes} 赞 · ⭐ {collected} 收藏
-
-**正文:**
-
-> {desc[:500]}{"..." if len(desc) > 500 else ""}
-
-"""
-
- if comments:
- report += f"""**热门评论 ({len(comments)} 条):**
-
-"""
- for j, comment in enumerate(list(comments)[:5], 1):
- c_user = comment.get("userInfo", {}).get("nickname", "匿名")
- c_content = comment.get("content", "")
- c_likes = comment.get("likeCount", 0)
- report += f"- **{c_user}** ({c_likes}赞): {c_content[:100]}\n"
-
- if len(comments) > 5:
- report += f"- *... 还有 {len(comments) - 5} 条评论*\n"
-
- report += "\n---\n\n"
-
- # 评论区热点总结
- report += """## 💬 评论区热点关键词
-
-"""
-
- # 简单的关键词提取(统计高频词)
- all_comments = []
- for post in posts:
- for c in get_comments_list(post):
- all_comments.append(c.get("content", ""))
-
- if all_comments:
- report += f"共 {len(all_comments)} 条评论,主要讨论方向:\n\n"
- # 这里可以做更复杂的 NLP 分析,暂时简化
- report += "- 用户对该话题的关注度较高\n"
- report += "- 评论区互动活跃\n"
- else:
- report += "暂无足够评论数据进行分析\n"
-
- report += """
----
-
-## 📈 趋势分析
-
-基于以上热帖和评论数据,该话题在小红书上呈现以下特点:
-
-1. **热度指数**: """ + ("🔥🔥🔥 高" if total_likes > 1000 else "🔥🔥 中" if total_likes > 100 else "🔥 低") + f"""
-2. **互动活跃度**: """ + ("活跃" if total_comments > 50 else "一般" if total_comments > 10 else "较低") + """
-3. **内容类型**: 以图文笔记为主
-
----
-
-*报告由 OpenClaw 小红书热点跟踪工具自动生成*
-"""
-
- return report
-
-
-def export_to_feishu(title: str, content: str) -> str:
- """导出到飞书文档"""
- import_script = FEISHU_SCRIPTS / "doc-import.sh"
- if not import_script.exists():
- print(f"❌ 找不到 feishu-docs skill: {import_script}", file=sys.stderr)
- return ""
-
- print("📤 导出到飞书文档...")
-
- # 写入临时文件
- tmp_file = Path("/tmp/xhs_report.md")
- tmp_file.write_text(content, encoding="utf-8")
-
- result = subprocess.run(
- [str(import_script), title, "--file", str(tmp_file)],
- capture_output=True, text=True, timeout=60
- )
-
- if result.returncode != 0:
- print(f"⚠️ 飞书导出失败: {result.stderr}", file=sys.stderr)
- return ""
-
- # 解析返回的文档链接
- output = result.stdout
- print(output)
- return output
-
-
-def main():
- parser = argparse.ArgumentParser(description="小红书热点跟踪工具")
- parser.add_argument("keyword", help="要跟踪的话题/关键词")
- parser.add_argument("--limit", "-n", type=int, default=10, help="获取帖子数量 (默认 10)")
- parser.add_argument("--feishu", "-f", action="store_true", help="导出到飞书文档")
- parser.add_argument("--output", "-o", help="输出 Markdown 文件路径")
- parser.add_argument("--no-comments", action="store_true", help="不获取评论")
-
- args = parser.parse_args()
-
- # 1. 搜索帖子
- feeds = search_feeds(args.keyword)
- if not feeds:
- print("❌ 未找到相关帖子")
- sys.exit(1)
-
- print(f"✅ 找到 {len(feeds)} 条帖子")
-
- # 2. 获取详情
- posts = []
- for i, feed in enumerate(feeds[:args.limit]):
- feed_id = feed.get("id")
- xsec_token = feed.get("xsecToken")
- title = feed.get("noteCard", {}).get("displayTitle", "")
-
- print(f"📖 [{i+1}/{min(len(feeds), args.limit)}] 获取: {title[:30]}...")
-
- detail = get_feed_detail(feed_id, xsec_token, not args.no_comments)
- if detail:
- posts.append(detail)
-
- if not posts:
- print("❌ 未能获取帖子详情")
- sys.exit(1)
-
- print(f"✅ 成功获取 {len(posts)} 篇帖子详情")
-
- # 3. 生成报告
- print("📝 生成报告...")
- report = generate_report(args.keyword, posts)
-
- # 4. 输出
- if args.output:
- output_path = Path(args.output)
- output_path.write_text(report, encoding="utf-8")
- print(f"✅ 报告已保存: {output_path}")
-
- if args.feishu:
- doc_title = f"小红书热点跟踪: {args.keyword} ({datetime.now().strftime('%m-%d')})"
- export_to_feishu(doc_title, report)
-
- if not args.output and not args.feishu:
- # 默认输出到 stdout
- print("\n" + "="*60 + "\n")
- print(report)
-
- return report
-
-
-if __name__ == "__main__":
- main()
diff --git a/.agents/skills/xiaohongshu/scripts/track-topic.sh b/.agents/skills/xiaohongshu/scripts/track-topic.sh
deleted file mode 100755
index 1aef334..0000000
--- a/.agents/skills/xiaohongshu/scripts/track-topic.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-# 小红书热点跟踪工具
-
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-python3 "$SCRIPT_DIR/track-topic.py" "$@"
diff --git a/.agents/skills/xiaohongshu/scripts/user-profile.sh b/.agents/skills/xiaohongshu/scripts/user-profile.sh
deleted file mode 100755
index 14d0f07..0000000
--- a/.agents/skills/xiaohongshu/scripts/user-profile.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# 获取小红书用户主页
-
-USER_ID="$1"
-XSEC_TOKEN="$2"
-
-if [ -z "$USER_ID" ] || [ -z "$XSEC_TOKEN" ]; then
- echo "用法: $0 "
- echo ""
- echo "user_id 和 xsec_token 可从搜索或推荐结果中获取"
- exit 1
-fi
-
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-ARGS=$(jq -n --arg uid "$USER_ID" --arg tok "$XSEC_TOKEN" \
- '{"user_id":$uid,"xsec_token":$tok}')
-"$SCRIPT_DIR/mcp-call.sh" user_profile "$ARGS"
diff --git a/.agents/skills/xiaohongshu/tools/xhs-downloader/README.md b/.agents/skills/xiaohongshu/tools/xhs-downloader/README.md
deleted file mode 100644
index e403e68..0000000
--- a/.agents/skills/xiaohongshu/tools/xhs-downloader/README.md
+++ /dev/null
@@ -1,98 +0,0 @@
-# XHS-Downloader 辅助工具
-
-配合 [XHS-Downloader](https://github.com/JoeanAmier/XHS-Downloader) 使用的工具脚本,用于下载小红书收藏/点赞笔记并导出为 OpenClaw 记忆库格式。
-
-## 依赖
-
-需要先安装 XHS-Downloader:
-
-```bash
-git clone https://github.com/JoeanAmier/XHS-Downloader.git
-cd XHS-Downloader
-pip install -r requirements.txt
-```
-
-## 使用流程
-
-### 1. 获取收藏/点赞链接(使用油猴脚本)
-
-手动复制链接效率低,推荐使用 XHS-Downloader 提供的油猴脚本批量提取:
-
-**安装脚本:**
-
-1. 安装 [Tampermonkey](https://www.tampermonkey.net/) 浏览器扩展
-2. 安装用户脚本:[XHS-Downloader.js](https://raw.githubusercontent.com/JoeanAmier/XHS-Downloader/refs/heads/master/static/XHS-Downloader.js)
-
-**提取链接:**
-
-1. 打开 [小红书网页版](https://www.xiaohongshu.com) 并登录
-2. 进入个人主页 → **收藏** 或 **点赞** 页面
-3. 点击 Tampermonkey 图标,选择:
- - `提取收藏作品链接`
- - `提取点赞作品链接`
-4. 脚本会自动滚动页面加载全部内容
-5. 提取完成后链接自动复制到剪贴板
-
-**保存链接:**
-
-将剪贴板内容粘贴到 `links.md` 文件:
-
-```
-https://www.xiaohongshu.com/explore/xxx?xsec_token=...
-https://www.xiaohongshu.com/explore/yyy?xsec_token=...
-```
-
-> **注意**:自动滚动功能默认关闭,需在脚本设置中手动开启。开启后可能触发风控,建议适度使用。
-
-### 2. 批量下载
-
-```bash
-# 在 XHS-Downloader 目录下运行
-python batch_download.py links.md
-```
-
-下载的数据会保存到 `Volume/Download/ExploreData.db`。
-
-### 3. 导出记忆库
-
-**方式 A:导出为单文件**
-
-```bash
-python export_memory.py
-# 生成 xhs_memory.md
-```
-
-**方式 B:导出为多文件(推荐用于 OpenClaw)**
-
-```bash
-python export_to_workspace.py
-# 生成到 ~/.openclaw/workspace/xhs-memory/
-```
-
-### 4. 配置 OpenClaw 记忆搜索
-
-编辑 `~/.openclaw/openclaw.json`,添加:
-
-```json
-{
- "memorySearch": {
- "extraPaths": [
- "~/.openclaw/workspace/xhs-memory"
- ]
- }
-}
-```
-
-或者如果使用单文件导出,将 `xhs_memory.md` 放到 workspace 目录下。
-
-## 脚本说明
-
-| 脚本 | 功能 |
-|------|------|
-| `batch_download.py` | 批量下载笔记并记录到数据库 |
-| `export_memory.py` | 导出为单个 Markdown 文件 |
-| `export_to_workspace.py` | 导出为多个独立文件(按日期+标题命名) |
-
-## 致谢
-
-- [XHS-Downloader](https://github.com/JoeanAmier/XHS-Downloader) - GPL-3.0 License
diff --git a/.agents/skills/xiaohongshu/tools/xhs-downloader/batch_download.py b/.agents/skills/xiaohongshu/tools/xhs-downloader/batch_download.py
deleted file mode 100644
index b68f513..0000000
--- a/.agents/skills/xiaohongshu/tools/xhs-downloader/batch_download.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env python
-"""
-批量下载小红书笔记
-
-用法:
- python batch_download.py [links_file]
-
-默认读取当前目录的 links.md 文件
-"""
-import asyncio
-import sys
-from pathlib import Path
-
-try:
- from source import XHS
-except ImportError:
- print("错误: 请在 XHS-Downloader 项目目录下运行此脚本")
- print("或安装依赖: pip install -e /path/to/XHS-Downloader")
- sys.exit(1)
-
-
-async def main():
- # 读取链接文件
- links_file = Path(sys.argv[1]) if len(sys.argv) > 1 else Path("links.md")
-
- if not links_file.exists():
- print(f"错误: 链接文件不存在: {links_file}")
- print("用法: python batch_download.py [links_file]")
- sys.exit(1)
-
- links = links_file.read_text().strip()
- link_count = len([l for l in links.split() if l.startswith("http")])
-
- print(f"开始下载,共 {link_count} 个链接...")
-
- async with XHS(
- work_path="./Volume",
- folder_name="Download",
- record_data=True, # 记录作品数据到数据库
- download_record=True, # 跳过已下载
- author_archive=True, # 按作者分文件夹
- ) as xhs:
- result = await xhs.extract(links, download=True)
- print(f"完成!处理了 {len(result)} 个作品")
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/.agents/skills/xiaohongshu/tools/xhs-downloader/export_memory.py b/.agents/skills/xiaohongshu/tools/xhs-downloader/export_memory.py
deleted file mode 100644
index 1021f47..0000000
--- a/.agents/skills/xiaohongshu/tools/xhs-downloader/export_memory.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env python
-"""
-从 XHS-Downloader 数据库导出笔记到单个 Markdown 文件
-
-用法:
- python export_memory.py [db_path] [output_file]
-
-默认:
- db_path: Volume/Download/ExploreData.db
- output_file: xhs_memory.md
-"""
-import sqlite3
-import sys
-from pathlib import Path
-from datetime import datetime
-
-
-def export_memory(db_path: Path = None, output_file: Path = None):
- db_path = db_path or Path("Volume/Download/ExploreData.db")
- output_file = output_file or Path("xhs_memory.md")
-
- if not db_path.exists():
- print(f"错误: 数据库不存在: {db_path}")
- return False
-
- conn = sqlite3.connect(db_path)
- cursor = conn.cursor()
-
- # 查询所有作品
- cursor.execute("""
- SELECT 作品标题, 发布时间, 作品链接, 作品描述, 作者昵称, 作品标签
- FROM explore_data
- ORDER BY 发布时间 DESC
- """)
-
- rows = cursor.fetchall()
- conn.close()
-
- if not rows:
- print("数据库为空")
- return False
-
- # 生成 Markdown
- output = f"# 小红书收藏/点赞笔记 Memory\n\n"
- output += f"> 导出时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
- output += f"> 共 {len(rows)} 条笔记\n\n---\n\n"
-
- for i, (title, time, link, desc, author, tags) in enumerate(rows, 1):
- output += f"## {i}. {title or '无标题'}\n\n"
- output += f"- **作者**: {author or '未知'}\n"
- output += f"- **时间**: {time or '未知'}\n"
- output += f"- **链接**: {link or '无'}\n"
- if tags:
- output += f"- **标签**: {tags}\n"
- output += f"\n### 内容\n\n{desc or '无内容'}\n\n---\n\n"
-
- # 保存文件
- output_file.write_text(output, encoding="utf-8")
- print(f"导出完成: {output_file.absolute()}")
- print(f"共 {len(rows)} 条笔记")
- return True
-
-
-if __name__ == "__main__":
- db_path = Path(sys.argv[1]) if len(sys.argv) > 1 else None
- output_file = Path(sys.argv[2]) if len(sys.argv) > 2 else None
- export_memory(db_path, output_file)
diff --git a/.agents/skills/xiaohongshu/tools/xhs-downloader/export_to_workspace.py b/.agents/skills/xiaohongshu/tools/xhs-downloader/export_to_workspace.py
deleted file mode 100644
index 68f9607..0000000
--- a/.agents/skills/xiaohongshu/tools/xhs-downloader/export_to_workspace.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/env python
-"""
-将小红书笔记按单独文件导出到 OpenClaw workspace
-
-用法:
- python export_to_workspace.py [db_path] [output_dir]
-
-默认:
- db_path: Volume/Download/ExploreData.db
- output_dir: ~/.openclaw/workspace/xhs-memory
-
-导出格式类似 gpt-history,每条笔记一个文件,文件名格式: YYYY-MM-标题.md
-"""
-import sqlite3
-import re
-import sys
-from pathlib import Path
-
-
-def sanitize_filename(name: str, max_len: int = 50) -> str:
- """清理文件名,移除非法字符"""
- name = re.sub(r'[<>:"/\\|?*\n\r\t]', '', name)
- name = re.sub(r'\s+', '-', name.strip())
- name = re.sub(r'-+', '-', name)
- name = name.strip('-')
- if len(name) > max_len:
- name = name[:max_len].rstrip('-')
- return name or "无标题"
-
-
-def export_to_workspace(db_path: Path = None, output_dir: Path = None):
- db_path = db_path or Path("Volume/Download/ExploreData.db")
- output_dir = output_dir or Path.home() / ".openclaw/workspace/xhs-memory"
- output_dir.mkdir(parents=True, exist_ok=True)
-
- if not db_path.exists():
- print(f"错误: 数据库不存在: {db_path}")
- return False
-
- conn = sqlite3.connect(db_path)
- cursor = conn.cursor()
-
- cursor.execute("""
- SELECT 作品标题, 发布时间, 作品链接, 作品描述, 作者昵称, 作品标签
- FROM explore_data
- ORDER BY 发布时间 DESC
- """)
-
- rows = cursor.fetchall()
- conn.close()
-
- if not rows:
- print("数据库为空")
- return False
-
- count = 0
- for title, time, link, desc, author, tags in rows:
- # 解析时间: 2026-01-25_18:17:43 -> 2026-01
- if time:
- date_prefix = time[:7] # YYYY-MM
- full_date = time.replace('_', ' ')
- else:
- date_prefix = "unknown"
- full_date = "未知"
-
- # 生成文件名
- safe_title = sanitize_filename(title or "无标题")
- filename = f"{date_prefix}-{safe_title}.md"
- filepath = output_dir / filename
-
- # 避免重复文件名
- counter = 1
- while filepath.exists():
- filename = f"{date_prefix}-{safe_title}-{counter}.md"
- filepath = output_dir / filename
- counter += 1
-
- # 生成内容
- content = f"# {title or '无标题'}\n\n"
- content += f"**来源**: 小红书收藏/点赞\n\n"
- content += f"**日期**: {full_date}\n\n"
- content += f"**作者**: {author or '未知'}\n\n"
- content += f"**链接**: {link or '无'}\n\n"
- if tags:
- content += f"**标签**: {tags}\n\n"
- content += "---\n\n"
- content += "## 内容\n\n"
- content += f"{desc or '无内容'}\n"
-
- filepath.write_text(content, encoding="utf-8")
- count += 1
-
- print(f"导出完成: {output_dir}")
- print(f"共生成 {count} 个文件")
- return True
-
-
-if __name__ == "__main__":
- db_path = Path(sys.argv[1]) if len(sys.argv) > 1 else None
- output_dir = Path(sys.argv[2]) if len(sys.argv) > 2 else None
- export_to_workspace(db_path, output_dir)
diff --git a/.claude/skills/post-to-xhs/SKILL.md b/.claude/skills/post-to-xhs/SKILL.md
new file mode 100644
index 0000000..bd0e69b
--- /dev/null
+++ b/.claude/skills/post-to-xhs/SKILL.md
@@ -0,0 +1,86 @@
+---
+name: post-to-xhs
+argument-hint: "[标题或内容描述]"
+description: |
+ 发布内容到小红书,支持图文笔记和视频笔记。自动判断发布类型,校验标题和素材,用户确认后发布。
+ 当用户想在小红书发布内容时使用——包括发笔记、发图文、发视频、上传图片、写一篇小红书、把内容发到红书上、种草笔记、好物分享等,即使用户只说"帮我发一下"但上下文明确是小红书也应触发。
+---
+
+## 输入判断
+
+根据用户提供的素材判断发布类型:
+- 提供了视频文件 → 视频笔记
+- 提供了图片 → 图文笔记
+- 仅提供文本 → 提示用户至少提供图片或视频
+
+## 约束
+
+- 标题最多 20 个中文字或英文单词(小红书平台限制,超长会被截断)
+- 图文笔记至少 1 张图片(小红书不允许纯文本笔记)
+- 视频笔记仅支持本地视频文件绝对路径(MCP 服务需要读取本地文件)
+- 图片和视频不能混用,只能二选一(小红书平台限制)
+- 正文中不要包含 # 标签(标签通过 `tags` 参数单独传递,MCP 服务会自动处理格式)
+- 发布前展示完整内容让用户确认(发布后无法撤回)
+
+## 执行流程
+
+### 1. 收集发布信息
+
+确保以下内容齐全:
+- `title`(必填)— 标题
+- `content`(必填)— 正文
+- 图片列表或视频路径(必填其一)
+- `tags`(可选)— 话题标签
+- `schedule_at`(可选)— 定时发布,ISO8601 格式
+- `is_original`(可选,仅图文)— 声明原创
+- `visibility`(可选)— 公开可见 | 仅自己可见 | 仅互关好友可见
+
+信息不完整时,向用户询问缺少的部分。
+
+### 2. 内容校验
+
+- 检查标题长度(≤20 中文字)
+- 检查图片/视频文件路径是否为绝对路径
+- 如用户提供 URL 内容,先用 WebFetch 提取文本和图片
+
+### 3. 确认发布
+
+向用户展示完整的发布内容预览:
+- 标题、正文、标签
+- 图片列表或视频路径
+- 定时时间、可见范围(如有)
+
+等待用户确认后才执行发布。
+
+### 4. 发布
+
+**图文笔记** — 调用 `publish_content`:
+- `title`(string,必填)
+- `content`(string,必填)
+- `images`(string[],必填)— 图片路径或 URL
+- `tags`(string[],可选)
+- `schedule_at`(string,可选)
+- `is_original`(bool,可选)
+- `visibility`(string,可选)
+
+**视频笔记** — 调用 `publish_with_video`:
+- `title`(string,必填)
+- `content`(string,必填)
+- `video`(string,必填)— 本地视频绝对路径
+- `tags`(string[],可选)
+- `schedule_at`(string,可选)
+- `visibility`(string,可选)
+
+### 5. 报告结果
+
+发布成功后,告知用户笔记 ID 和发布状态。
+
+## 失败处理
+
+| 场景 | 处理 |
+|---|---|
+| 未登录 | 引导使用 xhs-login |
+| 标题超长 | 提示用户缩短标题 |
+| 图片路径无效 | 提示检查路径是否正确 |
+| 视频使用了相对路径 | 提示改为绝对路径 |
+| 发布失败 | 展示错误信息,建议检查内容或重试 |
diff --git a/.claude/skills/setup-xhs-mcp/SKILL.md b/.claude/skills/setup-xhs-mcp/SKILL.md
new file mode 100644
index 0000000..92ab64f
--- /dev/null
+++ b/.claude/skills/setup-xhs-mcp/SKILL.md
@@ -0,0 +1,143 @@
+---
+name: setup-xhs-mcp
+description: |
+ 安装部署 xiaohongshu-mcp 服务并配置 MCP 连接,引导用户完成从零到可用的全流程。
+ 当用户第一次使用小红书功能、提到安装/部署/配置小红书、环境搭建、MCP 服务连接失败、或 check_login_status 等 MCP 工具不可用时使用。
+---
+
+项目仓库:https://github.com/xpzouying/xiaohongshu-mcp
+
+## 执行流程
+
+### 1. 检测服务状态
+
+检查 xiaohongshu-mcp 是否已在运行(注意:MCP 端点只接受 POST,GET 会返回 405,不能用 `-f` 判断):
+
+```bash
+curl -so /dev/null http://localhost:18060/mcp && echo "running" || echo "not running"
+```
+
+- 已运行 → 记录地址 `http://localhost:18060/mcp`,跳到步骤 3
+- 未运行 → 询问用户:服务是否部署在其他地址/端口?
+ - 用户提供地址 → 验证可达后跳到步骤 3
+ - 未部署 → 进入步骤 2
+
+### 2. 部署服务
+
+确认操作系统(macOS / Linux / Windows)和是否已安装 Docker。
+
+#### 方式一:Docker Compose(推荐)
+
+Docker 镜像内置 Chrome 和中文字体,无需额外配置。
+
+```bash
+# 下载 docker-compose.yml
+wget https://raw.githubusercontent.com/xpzouying/xiaohongshu-mcp/main/docker/docker-compose.yml
+
+# 启动服务
+docker compose up -d
+
+# 查看日志
+docker compose logs -f
+```
+
+镜像源:
+- Docker Hub(默认):`xpzouying/xiaohongshu-mcp`
+- 阿里云(国内推荐):`crpi-hocnvtkomt7w9v8t.cn-beijing.personal.cr.aliyuncs.com/xpzouying/xiaohongshu-mcp`
+
+切换方法:编辑 docker-compose.yml,注释默认 image 行,取消注释阿里云 image 行。
+
+数据持久化:
+- `./data` — cookies 登录状态
+- `./images` — 发布图片时的挂载目录
+
+#### 方式二:下载二进制
+
+从 GitHub Releases 下载:https://github.com/xpzouying/xiaohongshu-mcp/releases/latest
+
+```bash
+curl -s https://api.github.com/repos/xpzouying/xiaohongshu-mcp/releases/latest | grep browser_download_url
+```
+
+注意:二进制方式需要本机已安装 Chrome 或 Chromium。
+
+#### 方式三:源码编译
+
+不推荐,仅适合 Go 开发者。参考项目仓库 README。
+
+部署完成后用 curl 确认服务已启动,然后进入步骤 3。
+
+### 3. 检测 MCP 连接配置
+
+检查当前客户端是否已配置 xiaohongshu MCP 连接。
+
+**Claude Code**:读取 `~/.claude/settings.json` 和项目级 `.claude/settings.json`,查找 `mcpServers` 中是否有 `xiaohongshu` 配置。
+
+- 已配置且地址正确 → 跳到步骤 5
+- 已配置但地址不匹配 → 修正地址
+- 未配置 → 进入步骤 4
+
+### 4. 配置 MCP 连接
+
+询问用户:
+
+**连接地址**:如果步骤 1 已确认可达的地址,用该地址作为默认值,否则默认 `http://localhost:18060/mcp`。
+
+**使用的客户端**:
+
+**Claude Code**:
+
+```bash
+claude mcp add xiaohongshu --transport http <地址>
+```
+
+或写入配置文件:
+- 全局:`~/.claude/settings.json`
+- 项目级:`.claude/settings.json`
+
+```json
+{
+ "mcpServers": {
+ "xiaohongshu": {
+ "url": "http://localhost:18060/mcp"
+ }
+ }
+}
+```
+
+**Cursor**(`.cursor/mcp.json`):
+
+```json
+{
+ "mcpServers": {
+ "xiaohongshu": {
+ "url": "http://localhost:18060/mcp"
+ }
+ }
+}
+```
+
+**其他客户端**:告知用户 MCP 服务地址,让用户按客户端文档自行配置。
+
+### 5. 验证与提示
+
+1. **提示用户重启当前会话** — MCP 配置变更后需重启客户端才能加载新的 MCP 工具
+2. 重启后调用 `check_login_status` 验证连接正常
+3. 验证成功 → 引导用户使用 `/xhs-login` 完成扫码登录
+
+## 环境变量(可选)
+
+- `XHS_PROXY` — HTTP/HTTPS/SOCKS5 代理地址
+- `ROD_BROWSER_BIN` — 自定义 Chromium 路径
+- `HEADLESS` — 无头模式开关
+
+## 失败处理
+
+| 场景 | 处理 |
+|---|---|
+| Docker 未安装 | 建议安装 Docker 或改用二进制方式 |
+| 国内拉取镜像慢 | 切换到阿里云镜像源 |
+| 端口 18060 被占用 | 检查已有进程,或更换端口 |
+| Chrome 未安装(二进制方式) | 引导安装 Chrome 或改用 Docker 方式 |
+| 配置写入后工具仍不可用 | 提示重启客户端会话 |
+| 已有配置但地址错误 | 修正地址并重启 |
diff --git a/.claude/skills/xhs-content-creator/SKILL.md b/.claude/skills/xhs-content-creator/SKILL.md
deleted file mode 100644
index bdd78c6..0000000
--- a/.claude/skills/xhs-content-creator/SKILL.md
+++ /dev/null
@@ -1,212 +0,0 @@
----
-name: xhs-content-creator
-description: |
- 小红书爆款内容创作器。基于知识库中沉淀的爆款逻辑、用户身份信息和场馆资料,自动生成高质量小红书帖子。
- 完整流程:读取 wiki 知识库 → 可选搜索竞品 → 生成内容 → 审核优化 → 沉淀到知识库。
-
- 触发场景(即使用户没有明确说"小红书",只要意图是创作社交媒体内容也应触发):
- - "帮我写一篇小红书"
- - "生成小红书内容"
- - "写篇帖子/笔记"
- - "创作一篇关于XX的内容"
- - "帮我写个引流帖"
- - "出一篇关于XX的文案"
- - 用户描述了想表达的主题/卖点,期望产出可发布的内容
-
- 不触发:
- - 纯搜索/拉取小红书数据(用 xiaohongshu skill)
- - 分析已有笔记质量(用 xiaohongshu-note-analyzer skill)
- - 知识库的 ingest/query/lint 操作
----
-
-# 小红书爆款内容创作器
-
-用户只需说出想表达的主题,本 skill 自动完成:知识库调研 → 内容生成 → 质量审核 → 知识库沉淀。
-
-## 执行流程
-
-按以下 5 个阶段顺序执行。每个阶段完成后简要告知用户进度。
-
----
-
-### 阶段 1:读取知识库上下文
-
-这一步的目的是让你充分理解用户的身份、过往内容风格、已沉淀的爆款规律,避免生成泛泛而谈的内容。
-
-1. 读取项目根目录的 `CLAUDE.md`,了解知识库结构和页面规范
-2. 读取 `wiki/index.md`,扫描所有已有的 source、topic、entity、idea 页面
-3. 根据用户本次创作主题,读取相关的 wiki 页面:
- - `wiki/topics/` 下与主题相关的爆款逻辑分析
- - `wiki/sources/` 下的历史素材摘要
- - `wiki/entities/` 下的用户身份、场馆、品牌信息
- - `wiki/ideas/` 下是否有相关的已有构思
- - `wiki/meta/` 下的方法论和风格指南
-
-从这些页面中提取并记住以下关键信息(后续阶段会用到):
-
-- **用户身份**:职业、资质认证、从业经验
-- **场馆/品牌信息**:名称、地址、特色、定位
-- **爆款规律**:标题公式、正文结构模式、标签策略、互动触发技巧
-- **历史创作**:过往的选题和风格,避免重复
-
-如果 wiki 中缺少用户身份或场馆信息(比如 entities 目录为空),直接询问用户补充关键信息,并建议后续创建 entity 页沉淀。
-
----
-
-### 阶段 2:确认创作方向
-
-和用户对齐内容策略,避免写完才发现方向不对。
-
-根据知识库中的爆款分析(如果有),向用户展示适合本次主题的内容类型选项:
-
-| 类型 | 特征 | 适合场景 |
-|---|---|---|
-| 经验复盘型 | 赞藏评均衡,评论互动强 | 引流获客、建立信任 |
-| 模板/清单型 | 高赞高藏,天花板高 | 涨粉、扩大曝光 |
-| 方法论干货型 | 高收藏,同行传播 | 打造行业 IP |
-| 避坑/对比型 | 痛点驱动,讨论多 | 引发互动、吸引精准客户 |
-
-让用户选择或确认。如果用户已经明确说了类型(比如"写篇复盘帖"),直接跳过选择。
-
-同时确认:
-- 这篇内容的核心卖点/想表达的重点
-- 目标读者是谁(潜在客户 vs 同行)
-
----
-
-### 阶段 3:生成内容
-
-这是核心输出阶段。基于阶段 1 的知识库上下文和阶段 2 的方向确认,生成完整帖子。
-
-#### 标题生成
-
-从 wiki 中提取的爆款标题公式中选择最适合本次内容类型的公式,生成 2-3 个备选标题。
-
-标题要求:
-- 20 字以内
-- 必须包含核心关键词
-- 必须有情绪触发点或价值点
-- 包含地域词(如果是同城引流内容)
-
-#### 正文生成
-
-遵循以下结构原则(来自爆款分析的共性规律):
-
-1. **开头即钩子**:前 2 句制造"跟我有关"的感觉,用故事或痛点切入,不用"大家好我是XX"
-2. **结构可扫读**:用 emoji 编号(❶❷❸)+ 短段落,不写大段文字
-3. **有具体案例**:不讲道理讲经历,不说术语说感受
-4. **真实感 > 专业感**:用第一人称,带入个人经历和真实数据
-5. **结尾留互动空间**:提问式引导评论,但不用"一键三连"这类硬引导
-
-正文字数:300-600 字(小红书最佳区间)。
-
-自动融入用户身份和场馆信息,但要自然 — 品牌名只在结尾出现一次,认证资质作为背景信息融入叙述,不要堆砌。
-
-#### 标签生成
-
-15 个左右标签,覆盖四个维度:
-- 核心词标签(行业 + 细分)
-- 地域词标签(城市 + 区域 + 地标)
-- 场景词标签(痛点场景、使用场景)
-- 泛赛道标签(跨到更大的流量池,如女性创业、实体门店)
-
-#### 输出格式
-
-```
-## 备选标题
-
-A: [标题A]
-B: [标题B]
-C: [标题C]
-
-推荐:[推荐哪个,为什么]
-
-## 正文
-
-[完整正文,可直接复制发布]
-
-## 标签
-
-[所有标签,以 # 分隔]
-```
-
----
-
-### 阶段 4:内容审核与优化
-
-生成初稿后,调用 xiaohongshu-note-analyzer skill 进行 6 维度审核:
-
-```
-使用 Skill tool 调用 xiaohongshu-note-analyzer,传入生成的标题和正文
-```
-
-审核维度:
-1. 关键词分析 — 核心词布局、标签优化
-2. 标题/首段吸引力 — 爆款公式匹配度
-3. 敏感内容风险 — 违规词、限流风险
-4. 商业化程度 — 自然度评分
-5. 互动触发潜力 — 讨论点、收藏价值
-6. 内容结构 — 排版节奏
-
-根据审核结果,自动修改有问题的部分:
-- 🔴 高危敏感词:直接替换
-- 🟠 中危问题:调整表述
-- 标题吸引力 < 7/10:重写标题
-- 自然度 < 7/10:降低商业感
-- 互动触发缺失:补充结尾互动引导
-
-将审核报告和最终优化版一并展示给用户。
-
----
-
-### 阶段 5:沉淀到知识库
-
-用户确认内容满意后(或用户说"就这样"、"可以了"、"保存"),将内容存入知识库。
-
-1. **创建 idea 页**:保存到 `wiki/ideas/` 目录
-
-文件名:`xhs-{主题关键词}.md`
-
-```yaml
----
-type: idea
-created: YYYY-MM-DD
-updated: YYYY-MM-DD
-tags: [相关标签]
-sources: [引用的 wiki 页面路径]
-status: ready
----
-```
-
-页面内容包含:
-- 最终标题
-- 完整正文
-- 标签列表
-- 审核评分摘要
-- 创作思路备注(用了哪个标题公式、参考了哪些爆款规律)
-
-2. **更新 `wiki/index.md`**:在 Ideas 区块添加条目
-3. **追加 `wiki/log.md`**:`## [YYYY-MM-DD] create | 小红书内容:{标题}`
-
----
-
-## 竞品搜索(可选增强)
-
-如果用户希望参考竞品(比如说"看看别人怎么写的"、"搜一下类似的"),或者 wiki 中缺少该主题的爆款分析:
-
-1. 使用 Skill tool 调用 xiaohongshu skill,搜索相关关键词
-2. 拉取 Top 3-5 的帖子详情
-3. 快速分析竞品的标题套路、正文结构、互动数据
-4. 将分析结果临时参考用于生成,并建议用户是否要 ingest 到知识库
-
-不要每次都自动搜索 — 只在用户要求或知识库中明显缺少相关主题分析时才触发。
-
----
-
-## 注意事项
-
-- 始终优先使用 wiki 中已沉淀的爆款规律,它们是基于真实数据分析得出的
-- 内容要有真实感和个人色彩,不要写成通用模板
-- 认证资质(如斯多特认证)用英文原名更有辨识度(如 STOTT PILATES)
-- 地址信息放在结尾的 📍 区块,不要散落在正文中
-- 如果用户只是随口说了个想法还不想深入,先帮 ta 理清思路再动手写
diff --git a/.claude/skills/xhs-content-plan/SKILL.md b/.claude/skills/xhs-content-plan/SKILL.md
new file mode 100644
index 0000000..8881d7d
--- /dev/null
+++ b/.claude/skills/xhs-content-plan/SKILL.md
@@ -0,0 +1,41 @@
+---
+name: xhs-content-plan
+description: |
+ 小红书内容策划助手:搜索分析热门内容和竞品,帮助规划内容方向、选题、标签策略。
+ 当用户想做小红书运营规划时使用——内容策划、选题灵感、竞品分析、爆款分析、热门话题研究、怎么做小红书、涨粉策略等。
+---
+
+## 执行流程
+
+### 1. 明确策划需求
+
+向用户了解:
+- 目标领域/赛道(如:美妆、旅行、美食)
+- 策划目的:选题灵感 / 竞品分析 / 热门趋势
+
+### 2. 搜索分析
+
+根据需求调用 `search_feeds` 搜索相关内容:
+- 使用不同关键词多次搜索覆盖领域
+- 利用 `sort_by` 筛选:最多点赞(爆款)、最新(趋势)
+
+对高互动笔记,调用 `get_feed_detail` 获取详情,分析:
+- 标题写法和关键词
+- 内容结构和篇幅
+- 话题标签使用
+- 评论区用户关注点
+
+如需分析特定博主,调用 `user_profile` 查看其内容风格和数据表现。
+
+### 3. 输出策划建议
+
+整理分析结果,为用户提供:
+- 热门选题方向
+- 标题参考模板
+- 推荐话题标签
+- 内容结构建议
+
+## 约束
+
+- 这是只读分析 skill,不执行任何发布或互动操作
+- 搜索操作需要已登录状态
diff --git a/.claude/skills/xhs-explore/SKILL.md b/.claude/skills/xhs-explore/SKILL.md
new file mode 100644
index 0000000..8c41075
--- /dev/null
+++ b/.claude/skills/xhs-explore/SKILL.md
@@ -0,0 +1,44 @@
+---
+name: xhs-explore
+description: |
+ 浏览小红书推荐流、查看笔记详情和评论。
+ 当用户想看推荐内容、刷首页、查看某条笔记的详情/评论、或已有 feed_id 想获取完整内容时使用。
+---
+
+## 输入判断
+
+- 用户想浏览推荐 → 步骤 1
+- 用户提供了 feed_id → 步骤 2
+
+## 执行流程
+
+### 1. 获取推荐流
+
+调用 `list_feeds`(无参数),返回首页推荐笔记列表。
+
+展示每条笔记的标题、作者、互动数据,附带 `feed_id` 和 `xsec_token`。
+
+### 2. 查看笔记详情
+
+调用 `get_feed_detail`:
+- `feed_id`(string,必填)
+- `xsec_token`(string,必填)
+- `load_all_comments`(bool,可选,默认 false,仅返回前 10 条评论)
+- `limit`(int,可选,load_all_comments=true 时生效,默认 20)
+- `click_more_replies`(bool,可选,是否展开二级回复)
+- `reply_limit`(int,可选,跳过回复数超过此值的评论,默认 10)
+- `scroll_speed`(string,可选:slow | normal | fast)
+
+展示:笔记内容、图片、作者信息、互动数据、评论列表。
+
+提示用户可以:
+- 点赞/收藏(使用 xhs-interact)
+- 发表评论(使用 xhs-interact)
+- 查看作者主页(使用 xhs-profile)
+
+## 失败处理
+
+| 场景 | 处理 |
+|---|---|
+| 未登录 | 引导使用 xhs-login |
+| 笔记已删除或不可见 | 告知用户该笔记无法访问 |
diff --git a/.claude/skills/xhs-interact/SKILL.md b/.claude/skills/xhs-interact/SKILL.md
new file mode 100644
index 0000000..7273dbc
--- /dev/null
+++ b/.claude/skills/xhs-interact/SKILL.md
@@ -0,0 +1,70 @@
+---
+name: xhs-interact
+description: |
+ 对小红书笔记进行互动:点赞/取消点赞、收藏/取消收藏、发表评论、回复评论。
+ 当用户想对小红书笔记进行互动时使用——赞一下、收藏一下、留个评论、回复某条评论、取消点赞、取消收藏等。
+---
+
+## 输入判断
+
+根据用户意图路由:
+- 点赞/取消点赞 → 点赞流程
+- 收藏/取消收藏 → 收藏流程
+- 发表评论 → 评论流程
+- 回复评论 → 回复流程
+
+## 约束
+
+- 评论和回复执行前展示内容让用户确认(评论以用户身份公开发表,无法撤回)
+- 点赞和收藏可直接执行(操作可逆,MCP 服务有幂等处理)
+- 所有操作都需要 `feed_id` + `xsec_token`(来自搜索或详情结果,编造会导致报错)
+
+## 执行流程
+
+### 点赞
+
+调用 `like_feed`:
+- `feed_id`(string,必填)
+- `xsec_token`(string,必填)
+- `unlike`(bool,可选)— true 取消点赞,默认 false 点赞
+
+已点赞时再点赞会自动跳过,反之同理。
+
+### 收藏
+
+调用 `favorite_feed`:
+- `feed_id`(string,必填)
+- `xsec_token`(string,必填)
+- `unfavorite`(bool,可选)— true 取消收藏,默认 false 收藏
+
+已收藏时再收藏会自动跳过,反之同理。
+
+### 发表评论
+
+调用 `post_comment_to_feed`:
+- `feed_id`(string,必填)
+- `xsec_token`(string,必填)
+- `content`(string,必填)— 评论内容
+
+发送前展示评论内容让用户确认。
+
+### 回复评论
+
+调用 `reply_comment_in_feed`:
+- `feed_id`(string,必填)
+- `xsec_token`(string,必填)
+- `comment_id`(string,可选)— 目标评论 ID
+- `user_id`(string,可选)— 目标评论作者 ID
+- `content`(string,必填)— 回复内容
+
+`comment_id` 和 `user_id` 至少提供一个。
+
+发送前展示回复内容让用户确认。
+
+## 失败处理
+
+| 场景 | 处理 |
+|---|---|
+| 未登录 | 引导使用 xhs-login |
+| 缺少 feed_id/xsec_token | 提示先搜索或浏览获取笔记信息 |
+| 笔记不可评论 | 告知用户该笔记已关闭评论 |
diff --git a/.claude/skills/xhs-login/SKILL.md b/.claude/skills/xhs-login/SKILL.md
new file mode 100644
index 0000000..d94c13f
--- /dev/null
+++ b/.claude/skills/xhs-login/SKILL.md
@@ -0,0 +1,55 @@
+---
+name: xhs-login
+description: |
+ 管理小红书登录状态:检查是否已登录、二维码扫码登录、重置登录切换账号。
+ 当用户提到登录、扫码、账号、切换账号、退出登录、登录状态检查,或其他 skill 报告"未登录"需要先登录时使用。
+---
+
+## 执行流程
+
+### 1. 检查登录状态
+
+调用 `check_login_status`(无参数),返回是否已登录及用户名。
+
+- 已登录 → 告知用户当前登录账号
+- 未登录 → 进入步骤 2
+
+### 2. 扫码登录
+
+调用 `get_login_qrcode`(无参数)。MCP 工具返回两部分内容:
+- 文本:超时提示(含截止时间)
+- 图片:PNG 格式二维码(MCP image content type,Base64 编码)
+
+**展示二维码**:MCP 返回的图片会通过客户端渲染给用户。如果客户端无法直接展示图片(如纯文本终端),则将 Base64 数据保存为临时 PNG 文件,告知用户文件路径让其手动打开:
+```bash
+# fallback: 保存二维码到临时文件
+echo "" | base64 -d > /tmp/xhs-qrcode.png
+open /tmp/xhs-qrcode.png # macOS
+xdg-open /tmp/xhs-qrcode.png # Linux
+```
+
+提示用户:
+- 打开小红书 App 扫描二维码
+- 二维码有效期有限,过期需重新获取
+
+扫码完成后,调用 `check_login_status` 确认登录成功。
+
+### 3. 重新登录 / 切换账号
+
+当用户要求重新登录或切换账号时:
+
+1. 调用 `delete_cookies`(⚠️ 需用户确认)— 清除当前登录状态
+2. 调用 `get_login_qrcode` — 获取新二维码
+3. 引导用户扫码
+
+## 约束
+
+- `delete_cookies` 会清除登录状态,执行前必须确认
+- 登录需要用户手动用手机 App 扫码,无法自动完成
+
+## 失败处理
+
+| 场景 | 处理 |
+|---|---|
+| MCP 工具不可用 | 引导用户使用 `/setup-xhs-mcp` 完成部署和连接配置 |
+| 二维码超时 | 重新调用 `get_login_qrcode` |
diff --git a/.claude/skills/xhs-profile/SKILL.md b/.claude/skills/xhs-profile/SKILL.md
new file mode 100644
index 0000000..4bf480d
--- /dev/null
+++ b/.claude/skills/xhs-profile/SKILL.md
@@ -0,0 +1,29 @@
+---
+name: xhs-profile
+description: |
+ 查看小红书用户主页:基本信息、粉丝/关注/获赞数据、发布的笔记列表。
+ 当用户想查看某个博主、作者、用户的主页信息和作品时使用。
+---
+
+## 执行流程
+
+### 1. 获取用户信息
+
+调用 `user_profile`:
+- `user_id`(string,必填)— 用户 ID(来自笔记详情或搜索结果)
+- `xsec_token`(string,必填)
+
+### 2. 展示结果
+
+- 基本信息:昵称、头像、简介、性别、地区
+- 数据:粉丝数、关注数、获赞与收藏数
+- 最近发布的笔记列表(含 feed_id 和 xsec_token)
+
+提示用户可以查看某条笔记详情或进行互动。
+
+## 失败处理
+
+| 场景 | 处理 |
+|---|---|
+| 未登录 | 引导使用 xhs-login |
+| 用户不存在 | 告知用户该主页无法访问 |
diff --git a/.claude/skills/xhs-search/SKILL.md b/.claude/skills/xhs-search/SKILL.md
new file mode 100644
index 0000000..147246f
--- /dev/null
+++ b/.claude/skills/xhs-search/SKILL.md
@@ -0,0 +1,44 @@
+---
+name: xhs-search
+argument-hint: "[搜索关键词]"
+description: |
+ 搜索小红书笔记,支持关键词搜索和多维度筛选(排序、内容类型、时间范围、位置等)。
+ 当用户想在小红书上搜索、查找内容时使用——包括搜笔记、找攻略、看看小红书上有没有某某内容、搜一下、查一查等场景。
+---
+
+## 执行流程
+
+### 1. 确认搜索条件
+
+从用户输入中提取:
+- `keyword`(必填)— 搜索关键词
+- `filters`(可选)— 筛选条件
+
+### 2. 调用搜索
+
+调用 `search_feeds`:
+- `keyword`(string,必填)
+- `filters`(object,可选):
+ - `sort_by`:综合 | 最新 | 最多点赞 | 最多评论 | 最多收藏
+ - `note_type`:不限 | 视频 | 图文
+ - `publish_time`:不限 | 一天内 | 一周内 | 半年内
+ - `search_scope`:不限 | 已看过 | 未看过 | 已关注
+ - `location`:不限 | 同城 | 附近
+
+### 3. 展示结果
+
+将搜索结果整理为列表展示,每条包含:
+- 标题、作者
+- 点赞数、评论数、收藏数
+- `feed_id` 和 `xsec_token`(后续操作需要)
+
+提示用户可以:
+- 查看某条笔记详情(使用 xhs-explore)
+- 对笔记进行互动(使用 xhs-interact)
+
+## 失败处理
+
+| 场景 | 处理 |
+|---|---|
+| 未登录 | 引导使用 xhs-login 登录 |
+| 无搜索结果 | 建议调整关键词或筛选条件 |
diff --git a/.claude/skills/xiaohongshu b/.claude/skills/xiaohongshu
deleted file mode 120000
index 6c9a062..0000000
--- a/.claude/skills/xiaohongshu
+++ /dev/null
@@ -1 +0,0 @@
-../../.agents/skills/xiaohongshu
\ No newline at end of file
diff --git a/.claude/skills/xiaohongshu-note-analyzer b/.claude/skills/xiaohongshu-note-analyzer
deleted file mode 120000
index 963126f..0000000
--- a/.claude/skills/xiaohongshu-note-analyzer
+++ /dev/null
@@ -1 +0,0 @@
-../../.agents/skills/xiaohongshu-note-analyzer
\ No newline at end of file
diff --git a/.obsidian/graph.json b/.obsidian/graph.json
index 046165d..7104d2b 100644
--- a/.obsidian/graph.json
+++ b/.obsidian/graph.json
@@ -17,6 +17,6 @@
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
- "scale": 1.992301859915002,
+ "scale": 2.506918337983666,
"close": false
}
\ No newline at end of file
diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json
index 96f13c7..2ca3cdc 100644
--- a/.obsidian/workspace.json
+++ b/.obsidian/workspace.json
@@ -178,21 +178,32 @@
},
"active": "07a6f5425ad166a7",
"lastOpenFiles": [
- "wiki/log.md",
+ "wiki/meta/index.md",
+ "wiki/sources/xhs-三公里社群渗透方法论.md",
+ "wiki/entities/focus-core.md",
+ "wiki/ideas/品牌介绍帖-focus-core.md",
+ "wiki/raw/普拉提引流调研报告.md",
+ "wiki/topics/普拉提一人一馆-内容矩阵策划.md",
"wiki/topics/普拉提场馆引流-爆款逻辑.md",
+ "wiki/entities/and-her-pilates.md",
+ "wiki/sources/xhs-普拉提IP打造-案例拆解法.md",
+ "wiki/sources/xhs-普拉提私教-竞品爆款分析.md",
+ "wiki/entities/放羊的杨.md",
+ "wiki/raw/xhs-产后恢复引流帖-v2.md",
+ "wiki/raw",
+ "wiki/sources/xhs-普拉提引流-top5爆款.md",
+ "wiki/entities/贝贝聊IP.md",
+ "wiki/meta/log.md",
+ "wiki/meta",
+ "raw",
+ "wiki/log.md",
"wiki/entities/cathy-普拉提.md",
"wiki/ideas/案例拆解内容模型.md",
- "wiki/sources/xhs-三公里社群渗透方法论.md",
- "wiki/entities/贝贝聊IP.md",
- "wiki/sources/xhs-普拉提IP打造-案例拆解法.md",
- "wiki/entities/focus-core.md",
- "wiki/sources/xhs-普拉提引流-top5爆款.md",
"CLAUDE.md",
"wiki/index.md",
"assets",
"wiki/topics",
"wiki/sources",
- "wiki/meta",
"wiki/ideas",
"wiki/entities",
"wiki"
diff --git a/skills/xiaohongshu b/skills/xiaohongshu
deleted file mode 120000
index e43b9cb..0000000
--- a/skills/xiaohongshu
+++ /dev/null
@@ -1 +0,0 @@
-../.agents/skills/xiaohongshu
\ No newline at end of file
diff --git a/skills/xiaohongshu-note-analyzer b/skills/xiaohongshu-note-analyzer
deleted file mode 120000
index 0de1097..0000000
--- a/skills/xiaohongshu-note-analyzer
+++ /dev/null
@@ -1 +0,0 @@
-../.agents/skills/xiaohongshu-note-analyzer
\ No newline at end of file
diff --git a/wiki/entities/and-her-pilates.md b/wiki/entities/and-her-pilates.md
new file mode 100644
index 0000000..bf7f2a5
--- /dev/null
+++ b/wiki/entities/and-her-pilates.md
@@ -0,0 +1,51 @@
+---
+type: entity
+created: 2026-04-19
+updated: 2026-04-19
+tags: [普拉提, 品牌, 武汉, 一人一馆, 竞品]
+sources: [wiki/sources/xhs-普拉提私教-竞品爆款分析]
+---
+
+# AND HER PILATES
+
+## 基本信息
+
+- **类型**:普拉提私教工作室
+- **城市**:武汉
+- **模式**:1v1 预约制,每个时段只接待一位客户
+- **器械**:曼丽丘(普拉提界高端器械品牌)
+- **认证**:斯多特认证教练(官网可查)
+
+## 品牌定位
+
+> 为想从运动中探寻自由的女性所打造的空间
+
+- 强调「不定义女性力量」,情感价值驱动
+- 不只卖课,卖「运动乌托邦」体验
+- 附加服务:更衣淋浴、咖啡茶饮、主题拍照角、会员墙
+
+## 课程与定价
+
+- 只做 1v1 私教
+- 无储值卡、无大课包
+- 课包设置:12节(建立运动模式)、36节(强化肌肉效果)
+- 推荐频率:每周 2-3 次
+- **无销售、无套路** — 体验后理性购买
+
+## 小红书数据
+
+- 爆款帖:「关于课程与价格,服务与体验,一篇讲清楚!」
+- 数据:**1163赞 / 1011藏 / 74评**
+- 图文 11 张,完整介绍品牌理念→器械→课程→价格→服务
+
+## 值得学习的点
+
+1. **透明度极高**:价格、频率、效果预期全部公开,降低决策门槛
+2. **情感包装**:不说"私教课",说"专属运动乌托邦"
+3. **服务细节展示**:咖啡茶饮、绿植音乐、拍照角 — 体验感 > 功能性
+4. **评论区就是客资池**:74条评论大多是咨询预约
+
+## 相关页面
+
+- [[wiki/sources/xhs-普拉提私教-竞品爆款分析]]
+- [[wiki/ideas/品牌介绍帖-focus-core]]
diff --git a/wiki/entities/放羊的杨.md b/wiki/entities/放羊的杨.md
new file mode 100644
index 0000000..b51fe9c
--- /dev/null
+++ b/wiki/entities/放羊的杨.md
@@ -0,0 +1,53 @@
+---
+type: entity
+created: 2026-04-19
+updated: 2026-04-19
+tags: [普拉提, 博主, 一人一馆, 竞品, 人设运营]
+sources: [wiki/sources/xhs-普拉提私教-竞品爆款分析]
+---
+
+# 放羊的杨-
+
+## 基本信息
+
+- **小红书 ID**:XYY18383223241
+- **粉丝**:11,904
+- **获赞与收藏**:244,737
+- **关注**:17
+- **IP 属地**:陕西
+- **简介**:游走50+国的地球观光客 / 普拉提爱好者从业者@遊|普拉提 / 运动|旅行|运动穿搭
+
+## 账号定位
+
+典型的「一人一馆」赛道标杆博主,以 Vlog 日常为主要内容形式。
+
+## 内容矩阵
+
+| 类型 | 代表作 | 赞 | 评 |
+|------|--------|---|---|
+| 创业Vlog | 没有30+创业 也没有月入10万 | 331 | 59 |
+| 日常记录 | 一人一馆 记录生活可以提高行动力 | 62 | 20 |
+| 聊天/talk | 一人一馆日常看腻了 又是一期talk局 | 134 | 10 |
+| 经验分享 | 聊聊我一人一馆的第三年 | 119 | 17 |
+| 工作节奏 | 一天上5节课和8节课的区别 | 74 | 12 |
+| 下班日常 | 羊师傅下钟啦 | 77 | 12 |
+| 旅行/穿搭 | 最不后悔的事:在24岁前环游40国 | 513 | — |
+| 干货分享 | 普拉提必读书籍推荐 | 2711 | — |
+
+## 运营特点
+
+1. **人设 > 专业**:旅行经历 + 创业故事让她不只是"普拉提老师"
+2. **高频 Vlog**:几乎每篇都是视频,展示真实日常
+3. **评论互动强**:日常类内容评论数普遍 10-60 条
+4. **粉丝粘性高**:24.4万获赞/1.19万粉,每粉赞比 20.6
+5. **跨赛道流量**:旅行穿搭类内容拉新,普拉提内容留存
+
+## 对 Focus Core 的启示
+
+- 一人一馆 Vlog 是可持续的内容方向,不需要高制作成本
+- 个人故事/经历是差异化壁垒,别人无法复制
+- 建议 Focus Core 也建立「专业之外」的人设维度
+
+## 相关页面
+
+- [[wiki/sources/xhs-普拉提私教-竞品爆款分析]]
diff --git a/wiki/ideas/品牌介绍帖-focus-core.md b/wiki/ideas/品牌介绍帖-focus-core.md
new file mode 100644
index 0000000..7956bd2
--- /dev/null
+++ b/wiki/ideas/品牌介绍帖-focus-core.md
@@ -0,0 +1,147 @@
+---
+type: idea
+created: 2026-04-19
+updated: 2026-04-19
+tags: [普拉提, 品牌介绍, 获客, 小红书, focus-core]
+sources: [wiki/sources/xhs-普拉提私教-竞品爆款分析, wiki/entities/and-her-pilates]
+status: ready
+---
+
+# 品牌介绍帖 · Focus Core
+
+## 创作背景
+
+参考 AND HER PILATES 的爆款帖(1163赞/1011藏/74评),这是普拉提工作室最直接的获客工具。评论区全是「怎么预约」「想了解价格」,本质是一篇长效引流的「店面门面」帖。
+
+## 核心 Hook
+
+> 一个人的馆,只为一个人服务。
+
+切入点:用「一人一馆」的稀缺感和「只做私教」的专注度,与大馆团课形成差异。
+
+## 目标受众
+
+- 深圳宝安区及周边女性
+- 在大馆上过团课但效果不明显、想试私教的人
+- 有明确体态问题(骨盆前倾、圆肩驼背、产后修复)
+- 在乎体验感、隐私性,不喜欢被推销
+
+## 标题方案
+
+主推:**关于我的一人一馆,一篇讲清楚**
+备选:
+- 深圳宝安|一人一馆,只做一对一的普拉提工作室
+- 一人一馆是什么体验?关于课程和服务,全部告诉你
+- 我的普拉提工作室,没有销售只有专注
+
+## 正文结构(图文帖,建议 8-10 张图)
+
+### 图 1:封面
+- 馆内全景或器械特写,文字叠加标题
+- 视觉要求:干净、有质感、光线好
+
+### 图 2:品牌理念
+> Focus Core — 专注核心
+> 一人一馆,一个时段只服务一位你
+> 没有前台、没有销售、没有推销
+> 只有教练和你,专注在每一次呼吸和运动里
+
+### 图 3:关于我/教练介绍
+> 你好,我是 Focus Core 的馆主
+> STOTT PILATES 斯多特认证高级教练
+> 从业 X 年,累计服务 X+ 位学员
+> 我选择一人一馆,是因为…(真实原因/故事)
+
+### 图 4:器械与空间
+> 全套斯多特器械
+> 凯迪拉克床 / 核心床 / 稳踏椅 / 万能椅
+> 每一台器械都是为私教课量身配置
+> (配器械实拍图)
+
+### 图 5:我能帮你解决什么
+> ✅ 骨盆前倾 / 圆肩驼背 / 富贵包
+> ✅ 产后骨盆修复 / 腹直肌分离
+> ✅ 久坐腰痛 / 肩颈僵硬
+> ✅ 核心激活 / 运动表现提升
+> 私教的好处:根据你的身体状况定制每一节课
+
+### 图 6:关于课程
+> 只做 1 对 1 私教
+> 每节课 60 分钟,包含评估+训练+拉伸
+> 12 节课建立运动模式,体态明显改善
+> 36 节课深度强化,效果稳定持久
+> 建议频率:每周 2-3 次
+
+### 图 7:关于价格
+> 没有储值卡,没有大课包
+> 没有销售套路
+> 按需购买,12节/36节课包
+> 体验课 XX 元/节,欢迎先来感受
+> (具体价格根据实际填写)
+
+### 图 8:关于体验
+> 📍 深圳宝安坪洲地铁站步行3分钟
+> 一人一馆,独享空间,完全私密
+> 提供更衣室和基础洗护
+> 课后可以坐一坐,喝杯水,不急着走
+> (配空间细节图)
+
+### 图 9(可选):学员变化
+> 学员 X 节课对比(征得同意后展示)
+> 或学员的文字反馈截图
+
+### 图 10(可选):预约方式
+> 想体验可以直接私信我 💬
+> 或留言你想改善的问题,我帮你看看
+
+## 正文文案
+
+```
+Focus Core | 专注核心
+
+一个人的馆,只为一个人服务。
+
+我是 Focus Core 的馆主,STOTT PILATES 斯多特认证教练。选择做一人一馆,是因为我相信好的私教课应该是——安静、专注、完全属于你的。
+
+这里没有前台,没有销售,没有推销。
+只有教练和你,专注在每一次呼吸和运动里。
+
+▫️ 我能帮你
+骨盆前倾 / 圆肩驼背 / 富贵包 / 产后修复 / 久坐腰痛
+根据你的身体状况,定制每一节课的内容。
+
+▫️ 关于课程
+只做 1v1 私教,每节课 60 分钟
+12节课建立运动模式,体态会有明显变化
+36节课深度强化,让改变稳定持久
+建议每周 2-3 次
+
+▫️ 关于价格
+没有储值卡,没有大课包,没有套路
+体验后根据自己情况理性购买即可
+
+▫️ 关于这里
+📍 深圳宝安,坪洲地铁站步行3分钟
+一个时段只接待一位,完全私密
+提供更衣室和基础洗护
+
+想来体验,可以直接私信我 💬
+或者留言你想改善的问题,我来帮你看看。
+```
+
+## 话题标签
+
+`#普拉提` `#普拉提私教` `#一人一馆` `#深圳普拉提` `#宝安普拉提` `#坪洲普拉提` `#体态矫正` `#普拉提工作室` `#深圳` `#私教课`
+
+## 发布建议
+
+1. **图片质量是关键**:封面决定点击率,馆内实拍要有光线和质感
+2. **发布后置顶**:这篇帖子会长期吸引搜索流量
+3. **评论区及时回复**:有人咨询预约一定第一时间回
+4. **可定期更新**:有了学员对比图后补充进去
+
+## 相关页面
+
+- [[wiki/entities/and-her-pilates]] — 参考标杆
+- [[wiki/entities/focus-core]] — 场馆信息
+- [[wiki/topics/普拉提一人一馆-内容矩阵策划]] — 整体内容策略
diff --git a/wiki/meta/index.md b/wiki/meta/index.md
index c0cdd44..eab6e4d 100644
--- a/wiki/meta/index.md
+++ b/wiki/meta/index.md
@@ -1,7 +1,7 @@
---
type: meta
created: 2026-04-15
-updated: 2026-04-16
+updated: 2026-04-19
---
# Wiki Index
@@ -14,11 +14,13 @@ updated: 2026-04-16
- [[wiki/sources/xhs-普拉提引流-top5爆款]] — 小红书「普拉提引流」Top5 爆款笔记原始采集(472~203赞)
- [[wiki/sources/xhs-三公里社群渗透方法论]] — 「如何让你的馆在三公里内所熟知」爆款拆解:社区渗透三步法(197赞/241藏)
- [[wiki/sources/xhs-普拉提IP打造-案例拆解法]] — 「普拉提ip难做❓看看她是怎么做的❓」案例拆解型爆款分析(185赞/139藏,收藏率75%)
+- [[wiki/sources/xhs-普拉提私教-竞品爆款分析]] — 「普拉提私教」「一人一馆」赛道竞品爆款数据分析(60+笔记,含5种标题公式)
## Topics
- [[wiki/topics/普拉提场馆引流-爆款逻辑]] — 5 篇爆款的标题公式、正文结构、标签策略、评论区规律拆解
+- [[wiki/topics/普拉提一人一馆-内容矩阵策划]] — 4:2:1内容矩阵(流量款/信任款/人设款),每周发布节奏,标签策略
## Entities
@@ -26,8 +28,11 @@ updated: 2026-04-16
- [[wiki/entities/focus-core]] — Focus Core 普拉提工作室:身份、地址、特色、目标客户、内容定位
- [[wiki/entities/贝贝聊IP]] — 小红书IP打造/自媒体运营博主,「案例拆解」内容模型代表
- [[wiki/entities/cathy-普拉提]] — 普拉提博主,被贝贝聊IP拆解的起号案例
+- [[wiki/entities/and-her-pilates]] — AND HER PILATES:武汉普拉提工作室,品牌介绍帖标杆(1163赞/1011藏/74评)
+- [[wiki/entities/放羊的杨]] — 放羊的杨-:一人一馆赛道标杆博主(1.19万粉/24.4万获赞),Vlog日常+创业故事
## Ideas
- [[wiki/ideas/案例拆解内容模型]] — 基于贝贝聊IP帖子提炼的「第三方博主拆解」创作框架,附6张卡片模板和标题公式
+- [[wiki/ideas/品牌介绍帖-focus-core]] — Focus Core 品牌介绍帖完整策划:标题方案、10张图结构、正文文案、标签
diff --git a/wiki/meta/log.md b/wiki/meta/log.md
index 0411ffe..31c092f 100644
--- a/wiki/meta/log.md
+++ b/wiki/meta/log.md
@@ -1,13 +1,29 @@
---
type: meta
created: 2026-04-15
-updated: 2026-04-16
+updated: 2026-04-19
---
# Wiki Log
操作日志,按时间倒序。每条以 `## [日期] 动作 | 标题` 格式记录。
+## [2026-04-19] ingest | 普拉提私教赛道竞品爆款分析+内容矩阵策划
+
+搜索「普拉提私教」「普拉提体态矫正前后对比」「一人一馆 普拉提」三组关键词,采集约60条笔记。
+分析5种内容类型的数据表现,提炼6种标题公式,总结标签策略和内容形式偏好。
+详细拆解 AND HER PILATES 品牌介绍爆款帖(1163赞/1011藏/74评)的结构和评论区信号。
+分析「放羊的杨-」一人一馆标杆博主(1.19万粉/24.4万获赞)的内容矩阵。
+
+创建:
+- source 页:xhs-普拉提私教-竞品爆款分析.md
+- entity 页:and-her-pilates.md(武汉,品牌介绍帖标杆)
+- entity 页:放羊的杨.md(一人一馆Vlog标杆)
+- topic 页:普拉提一人一馆-内容矩阵策划.md(4:2:1模型+每周发布节奏)
+- idea 页:品牌介绍帖-focus-core.md(完整帖子策划:标题、10张图结构、正文文案、标签)
+
+更新 index.md
+
## [2026-04-16] lint | 修复7处缺陷
- 创建 wiki/meta/ 目录,将 index.md 和 log.md 移入
- 补全 index.md、log.md 缺失的 created/updated 字段
diff --git a/wiki/raw/xhs-产后恢复引流帖-v2.md b/wiki/raw/xhs-产后恢复引流帖-v2.md
new file mode 100644
index 0000000..66a02a4
--- /dev/null
+++ b/wiki/raw/xhs-产后恢复引流帖-v2.md
@@ -0,0 +1,135 @@
+---
+type: raw
+created: 2026-04-18
+tags: [产后恢复, 普拉提, stott, 引流帖, 小红书]
+status: optimized
+---
+
+# 产后恢复引流帖 v2(优化稿)
+
+> 来源:基于馆主原始草稿,经 wiki 爆款逻辑 + 笔记分析器双重优化
+> 分析日期:2026-04-18
+
+---
+
+## 分析摘要
+
+| 维度 | 评分 | 核心问题 |
+| ---------- | ------ | ---------------------------------- |
+| 关键词布局 | 8/10 | 核心词覆盖好,缺少泛流量标签 |
+| 标题吸引力 | 7.5/10 | 对话体真实感强,但"核心空了"偏专业 |
+| 敏感风险 | 🟡低危 | "漏尿"+"统计数据"需注意 |
+| 商业自然度 | 7/10 | 评估段落像课程介绍PPT,需故事化 |
+| 评论触发 | 5/10 | **最大短板**——内容太完整,无留白 |
+| 收藏价值 | 8/10 | 三问题科普+解决路径,信息密度够 |
+
+### 关键优化动作
+
+1. **增加自查互动**——加入腹直肌自测动作,引导评论
+2. **评估段落故事化**——用真实客户片段替代流程列表
+3. **结尾利他钩子**——"私信发你自查清单"替代直接引流
+4. **精简篇幅**——从800字压缩到600字以内
+5. **补充泛流量标签**——#宝妈日常 #女性健康 #产后运动
+
+---
+
+## 最终优化稿
+
+🤱 "教练,我生完一年了,打个喷嚏还是会漏…"
+
+来找我的产后妈妈,十个有八个说过类似的话
+
+她们的故事几乎一样——
+肚子看着回去了,人也能跑了
+但身体就是「空了一块」,撑不住
+
+久站腰酸、抱娃手废
+弯腰捡东西腰就闪到
+蹦一下漏一点(妈妈们懂的😭)
+肚子松松垮垮,怎么练都收不紧
+
+不是不努力——瑜伽、跑步、keep都试了
+但这三个问题还是没好 ↓
+
+产后核心的三个「隐形损伤」
+
+❶ 腹直肌分离
+孕期腹部被撑开,左右腹直肌从中间分开
+生完不会自动合回去
+普通卷腹、仰卧起坐?反而让分离更严重
+
+❷ 盆底肌松弛
+孕期盆底肌承受了巨大压力
+产后咳嗽漏尿、跳绳漏尿,不是矫情
+是盆底肌在求救
+
+❸ 腰椎不稳
+骨盆前倾 + 腹部失活 = 核心兜不住脊柱
+久坐久站就腰痛,抱娃更明显
+
+这三件事大多数妈妈同时中招
+而且不是「练多了就好」——练错了反而更严重
+
+你可以先自测:平躺放松,手指放肚脐上方,微微抬头——指尖能陷进去超过两指宽,大概率有分离。测完来评论区说说你的情况?
+
+普拉提为什么能解这个?
+
+因为它从最深层开始——
+先激活盆底肌 → 再唤醒腹横肌 → 最后重建整体稳定
+
+不是让你出汗、让你瘦
+是从里面一层一层重新稳起来
+
+但关键是——不是所有教练都能带产后
+
+为什么我说,不是所有普拉提教练都能带产后?
+
+市面上3天拿证、7天上岗的培训太多了
+大部分只教动作,不教「为什么做这个动作」
+
+我的认证体系是 STOTT PILATES(斯多特)
+全球四大普拉提体系之一
+它的特点是以现代解剖学和康复医学为基础
+不只是教你摆姿势,而是要求教练能做身体评估、能设计个性化方案
+
+✅ 系统学过解剖学、生物力学
+✅ 腹直肌分离几指、盆底肌什么分级——评估完才决定怎么练
+✅ 证书编号官网可查,造不了假
+
+产后恢复涉及盆底、脊柱、腹壁重建
+这件事,值得你找一个受过系统训练的人来带
+
+💬 来我这里的妈妈,第一次都不是来训练的
+
+上周有个妈妈,生完两年了,练了一年多瑜伽
+来了一评估——腹直肌分离还有2.5指,盆底肌几乎激活不了
+
+我们没有上来就练
+而是从呼吸模式开始,重新教她的身体「怎么发力」
+
+每个人起点不同,方案就不同
+没有标准课程,只有适合你现在状态的那一个方案
+
+这才是1对1的意义
+
+📍 深圳宝安 · 坪洲站步行2分钟
+一人一时段 · 私密安静 · 停车方便
+不推销、不办年卡 🤍
+
+你是产后多久?现在最困扰的是什么问题?评论区聊聊👇
+
+#产后恢复 #盆底肌修复 #腹直肌分离 #产后普拉提 #深圳产后恢复 #STOTT普拉提 #斯多特认证 #宝安普拉提 #普拉提私教 #核心修复 #产后漏尿 #产后体态 #坪洲 #深圳宝妈 #一对一私教 #产后康复 #盆底肌训练 #深圳普拉提 #宝妈日常 #女性健康 #产后运动
+
+---
+
+## 与原稿对比
+
+| 改动点 | 原稿 | 优化稿 | 依据 |
+| -------- | ------------------ | ---------------------------------- | --------------------------------- |
+| 标题 | "核心还是空的" | "打个喷嚏还是会漏" | 症状更通俗,搜索覆盖更广 |
+| 自查互动 | 无 | 加入腹直肌自测+评论引导 | wiki规律:干货完整→评论少,需留白 |
+| 评估段落 | 4个箭头流程列表 | 真实客户故事(生完两年+分离2.5指) | 降低PPT感,提升真人分享感 |
+| 结尾钩子 | "私信我产后两个字" | "私信发你自查清单"+开放提问 | 利他前置,给私信一个理由 |
+| 篇幅 | ~800字 | ~600字 | 小红书最佳完读长度400-600字 |
+| 标签 | 18个 | 21个,补充3个泛流量标签 | 拉宽非精准流量入口 |
+| 敏感处理 | "十个有八个" | 保留但建议发布时观察 | 无来源统计有审核风险 |
diff --git a/wiki/raw/普拉提引流调研报告.md b/wiki/raw/普拉提引流调研报告.md
new file mode 100644
index 0000000..6e8b8d2
--- /dev/null
+++ b/wiki/raw/普拉提引流调研报告.md
@@ -0,0 +1,168 @@
+---
+🎯 普拉提一人一馆 · 小红书获客内容策划报告
+---
+
+一、赛道数据概览
+
+我分析了「普拉提私教」「普拉提体态矫正」「一人一馆」三个关键词下的热门笔记,核心发现:
+
+┌──────────────────┬──────────────┬────────────┬────────────────────────┐
+│ 内容类型 │ 典型爆款点赞 │ 收藏量 │ 特点 │
+├──────────────────┼──────────────┼────────────┼────────────────────────┤
+│ 体态改善教学 │ 2000-4400+ │ 2000-4700+ │ 赛道最大流量池 │
+├──────────────────┼──────────────┼────────────┼────────────────────────┤
+│ 工作室品牌介绍 │ 1000+ │ 1000+ │ 精准获客,评论全是咨询 │
+├──────────────────┼──────────────┼────────────┼────────────────────────┤
+│ 学员前后对比 │ 50-500 │ 12-50 │ 引发讨论+信任背书 │
+├──────────────────┼──────────────┼────────────┼────────────────────────┤
+│ 私教课堂实录 │ 200-500 │ 400-490 │ 建立专业感 │
+├──────────────────┼──────────────┼────────────┼────────────────────────┤
+│ 一人一馆日常Vlog │ 60-330 │ 20-140 │ 建立人设+情感连接 │
+└──────────────────┴──────────────┴────────────┴────────────────────────┘
+
+---
+
+二、竞品博主分析
+
+🌟 「放羊的杨-」— 一人一馆标杆
+
+- 粉丝:1.19万 | 获赞与收藏:24.4万
+- IP定位:游走50+国的旅行者 + 普拉提从业者
+- 内容矩阵:Vlog日常(一天上5节/8节的区别)、创业故事(第三年回顾)、教学分享、旅行穿搭
+- 启示:人设先行,有温度的生活感比纯教学更圈粉
+
+🌟 「欢欢」— 教学类爆款制造机
+
+- 爆款:「美背普拉提|纠正头前引+富贵包+驼背」4397赞, 4670收藏
+- 爆款:「4组肩胛进阶训练」218赞, 197收藏
+- 启示:体态问题 + 具体动作 + emoji标记 = 高收藏
+
+🌟 「AND HER PILATES」— 品牌获客范本
+
+- 爆款:「关于课程与价格,服务与体验,一篇讲清楚!」1163赞, 1011收藏, 74评论
+- 评论区清一色「怎么预约体验课」「想了解价格」→ 精准客资
+- 启示:透明+专业+氛围感 = 最强获客帖
+
+---
+
+三、内容矩阵规划(每周7天发布计划)
+
+根据分析,建议你的内容按 4:2:1 比例分配:
+
+🔴 A类 · 流量款(4篇/周)— 拉新曝光
+
+▎ 目标:触达目标人群,获取搜索流量
+
+选题方向:
+
+1. 体态问题解决方案(赛道最大流量池)
+ - 「3个动作改善骨盆前倾|普拉提私教教学」
+ - 「圆肩驼背?一节课的改善思路」
+ - 「告别富贵包|颈椎正位训练」
+ - 「小腿外翻/X型腿|这样练真的有变化」
+ - 「久坐族必练!腰痛缓解3个动作」
+
+2. 产后/办公室人群痛点
+ - 「产后骨盆修复|真实学员6节课对比」
+ - 「上班族肩颈僵硬?普拉提拯救低头族」
+ - 「妈妈也要好体态!产后腹直肌修复」
+
+🟡 B类 · 信任款(2篇/周)— 转化意向
+
+▎ 目标:建立专业信任,激发咨询欲
+
+选题方向:
+
+1. 学员前后对比/故事
+ - 「10节课的变化|学员体态对比记录」
+ - 「从不敢穿吊带到自信露肩|学员故事」
+ - 「坚持12节课后她说了这样一句话…」
+
+2. 专业知识科普
+ - 「普拉提私教和团课到底差在哪?」
+ - 「第一次上普拉提私教需要准备什么?」
+ - 「普拉提为什么要坚持至少12节?」
+
+3. 工作室/服务介绍
+ - 「关于我的课程与价格,一篇讲清楚」(参考AND HER爆款)
+ - 「一人一馆体验课实录|60分钟都在做什么」
+
+🟢 C类 · 人设款(1篇/周)— 建立情感连接
+
+▎ 目标:让粉丝记住你这个人,而不只是"一个普拉提号"
+
+选题方向:
+
+1. 一人一馆日常Vlog
+ - 「Vlog|一人一馆的一天」
+ - 「一人一馆第X年|聊聊心里话」
+ - 「周末上完最后一节课的碎碎念」
+
+2. 创业故事/成长
+ - 「为什么选择一人一馆?」
+ - 「从学员到教练|我的普拉提故事」
+ - 「一个人开馆最难的不是没客户,是…」
+
+---
+
+四、爆款标题公式
+
+根据高赞笔记总结的5种标题模型:
+
+┌────────────────────┬──────────────────────────────────┬────────┐
+│ 公式 │ 示例 │ 适用 │
+├────────────────────┼──────────────────────────────────┼────────┤
+│ 痛点+数量+解决方案 │ 「3个动作改善骨盆前倾」 │ 教学类 │
+├────────────────────┼──────────────────────────────────┼────────┤
+│ 前后对比+数字 │ 「10节课的变化|体态对比」 │ 案例类 │
+├────────────────────┼──────────────────────────────────┼────────┤
+│ 疑问句引好奇 │ 「这钱花的值吗?15节私教效果」 │ 对比类 │
+├────────────────────┼──────────────────────────────────┼────────┤
+│ 场景+emoji │ 「美背🩵普拉提|纠正圆肩驼背」 │ 教学类 │
+├────────────────────┼──────────────────────────────────┼────────┤
+│ 反差/情绪 │ 「谁懂啊‼️这才是腹部炸裂的动作」 │ 流量类 │
+└────────────────────┴──────────────────────────────────┴────────┘
+
+---
+
+五、推荐话题标签
+
+核心标签(每篇必带):
+
+- #普拉提 #普拉提私教 #一人一馆
+
+流量标签(轮换使用):
+
+- #体态矫正 #圆肩驼背 #骨盆前倾 #富贵包
+- #产后修复 #腹直肌分离
+- #私教课 #普拉提工作室
+
+地域标签(关键!本地获客):
+
+- #你的城市名 #城市名普拉提 #城市名+区域名
+
+▎ ⚠️ 重要提醒:地域标签是本地生活获客的核心,一定要带!
+
+---
+
+六、具体行动建议
+
+1. 先发 1 篇品牌介绍帖(参考 AND HER 的结构)
+ - 品牌理念 → 器械/认证 → 课程说明 → 价格透明 → 服务细节 → 预约方式
+ - 这篇是"店面门面",长期吸引咨询
+
+2. 前两周集中发体态改善教学
+ - 先积累基础流量和关注
+ - 圆肩、骨盆前倾、富贵包是最高频搜索词
+
+3. 每上完课就拍学员对比照(征得同意)
+ - 前后对比是最强信任素材
+ - 建立长期素材库
+
+4. 视频 > 图文
+ - 搜索结果中视频笔记占比 60%+,且高赞笔记大多是视频
+ - 教学动作用视频展示效果远好于图文
+
+5. 评论区互动引导私信
+ - 在笔记末尾引导「想体验私聊我」
+ - 评论区有咨询及时回复
diff --git a/wiki/sources/xhs-普拉提私教-竞品爆款分析.md b/wiki/sources/xhs-普拉提私教-竞品爆款分析.md
new file mode 100644
index 0000000..95c6a18
--- /dev/null
+++ b/wiki/sources/xhs-普拉提私教-竞品爆款分析.md
@@ -0,0 +1,101 @@
+---
+type: source
+created: 2026-04-19
+updated: 2026-04-19
+tags: [普拉提, 竞品分析, 爆款数据, 小红书运营, 一人一馆]
+sources: []
+---
+
+# 小红书「普拉提私教」竞品爆款分析
+
+采集时间:2026-04-19
+搜索关键词:「普拉提私教」「普拉提体态矫正前后对比」「一人一馆 普拉提」
+共采集约 60 条笔记,以下为数据提炼。
+
+---
+
+## 一、赛道数据概览
+
+| 内容类型 | 典型爆款点赞 | 收藏量 | 赞藏比 | 特点 |
+|---------|------------|--------|--------|------|
+| 体态改善教学 | 2000-4400+ | 2000-4700+ | ~1:1 | 赛道最大流量池,搜索流量为主 |
+| 工作室品牌介绍 | 1000+ | 1000+ | ~1:0.87 | 精准获客,评论全是咨询 |
+| 学员前后对比 | 50-500 | 12-50 | ~1:0.3 | 引发讨论+信任背书 |
+| 私教课堂实录 | 200-500 | 400-490 | ~1:1 | 建立专业感,高收藏 |
+| 一人一馆日常Vlog | 60-330 | 20-140 | ~1:0.4 | 人设+情感连接,评论互动强 |
+
+## 二、高赞笔记清单
+
+### 体态教学类(流量天花板)
+
+| 标题 | 博主 | 赞 | 藏 | 评 | 类型 |
+|------|------|---|---|---|------|
+| 美背普拉提|纠正头前引+富贵包+驼背 | 欢欢 | 4397 | 4670 | 59 | 视频 |
+| Reformer 5个动作改善圆肩驼背 | pilateswithannabel | 2487 | 2945 | 14 | 视频 |
+| 困扰多年的骨盆前倾终于改善了(口令版) | 只只知知Myra | 2116 | 2225 | 14 | 视频 |
+| 普拉提私教 0基础X型腿足外翻调整思路 | may练普拉提 | 2023 | 2146 | 35 | 视频 |
+| 开始普拉提的正确姿势和方法|颈椎正位 | Liviana | 1254 | 1495 | 4 | 视频 |
+
+### 品牌/获客类(精准转化)
+
+| 标题 | 博主 | 赞 | 藏 | 评 | 类型 |
+|------|------|---|---|---|------|
+| 关于课程与价格,服务与体验,一篇讲清楚! | AND HER PILATES | 1163 | 1011 | 74 | 图文 |
+| 做一家专业的普拉提工作室!在重庆光环 | 欢欢 | 430 | 353 | 36 | 图文 |
+| 普拉提场馆IP打造 拓客转化太香了 | 能量学姐 | 203 | 158 | 0 | 图文 |
+| 一人一馆|适合i人的普拉提馆 | RUI PILATES | 242 | 186 | 59 | 图文 |
+
+### 一人一馆日常类(人设建设)
+
+| 标题 | 博主 | 赞 | 藏 | 评 | 类型 |
+|------|------|---|---|---|------|
+| 没有30+创业 也没有月入10万 | 放羊的杨- | 331 | 141 | 59 | 视频 |
+| 小馆的高客单本质:永远去解决更复杂的问题 | SUMMER头子 | 191 | 132 | 5 | 视频 |
+| 聊聊我一人一馆的第三年 | 放羊的杨- | 119 | 29 | 17 | 视频 |
+| 一人一馆终究还是迎来了闭店潮! | 教普拉提的小A | 94 | 45 | 26 | 视频 |
+| 一人一馆的弊端|每种选择都要有所取舍 | 陈玲敏Alita | 222 | 139 | 26 | 图文 |
+
+### 课堂实录/教学分享类
+
+| 标题 | 博主 | 赞 | 藏 | 评 | 类型 |
+|------|------|---|---|---|------|
+| 记录一节完整的普拉提私教课程 | 云云 | 496 | 491 | 5 | 视频 |
+| 普拉提教练vlog:给脊柱一个机会让它呼吸 | 黑小米 | 397 | 486 | 8 | 视频 |
+| 普拉提私教体验课实录|原来体验课是这样的 | ZONE PILATES | 244 | 173 | 7 | 视频 |
+| 国际认证教练教你三个动作改善骨盆前倾 | Yori应 | 265 | 282 | 2 | 视频 |
+| 普拉提教学 手把手教你简单有效的辅助方法 | 杜鹏 Allen | 143 | 147 | 13 | 视频 |
+
+## 三、爆款标题公式总结
+
+| 公式 | 示例 | 适用场景 |
+|------|------|---------|
+| 痛点+数量+解决方案 | 「3个动作改善骨盆前倾」 | 教学类 |
+| 前后对比+数字 | 「10节课的变化|体态对比」 | 案例类 |
+| 疑问句引好奇 | 「这钱花的值吗?15节私教效果」 | 对比类 |
+| 场景+emoji | 「美背🩵普拉提|纠正圆肩驼背」 | 教学类 |
+| 反差/情绪 | 「谁懂啊‼️这才是腹部炸裂的动作」 | 流量类 |
+| 一句话讲清楚 | 「关于课程与价格,一篇讲清楚!」 | 品牌介绍类 |
+
+## 四、内容形式偏好
+
+- 视频笔记占比约 **60%+**,且高赞笔记大多是视频
+- 体态教学类几乎全部是视频(动作展示需要动态)
+- 品牌介绍类以图文为主(信息密度高,适合反复查看)
+- 一人一馆日常以 Vlog 为主(人设感强)
+
+## 五、话题标签频率
+
+高频标签:`#普拉提` `#普拉提私教` `#体态矫正` `#圆肩驼背` `#骨盆前倾`
+中频标签:`#普拉提工作室` `#富贵包` `#产后修复` `#一人一馆`
+地域标签:几乎所有获客型笔记都带城市+区域标签
+
+## 六、评论区信号(品牌介绍帖)
+
+AND HER PILATES 的「关于课程与价格」帖评论区典型内容:
+- 「请问怎么预约体验课?」
+- 「后台咨询了体验课,麻烦回复一下」
+- 「想了解,感觉环境很喜欢」
+- 「环境很美,价格应该也不便宜吧」
+- 「写的又详细又中肯」
+
+→ **品牌介绍帖是最直接的获客工具**,评论区就是客资池。
diff --git a/wiki/topics/普拉提一人一馆-内容矩阵策划.md b/wiki/topics/普拉提一人一馆-内容矩阵策划.md
new file mode 100644
index 0000000..0d02df1
--- /dev/null
+++ b/wiki/topics/普拉提一人一馆-内容矩阵策划.md
@@ -0,0 +1,95 @@
+---
+type: topic
+created: 2026-04-19
+updated: 2026-04-19
+tags: [普拉提, 内容策划, 小红书运营, 获客, 一人一馆]
+sources: [wiki/sources/xhs-普拉提私教-竞品爆款分析, wiki/sources/xhs-普拉提引流-top5爆款]
+---
+
+# 普拉提一人一馆 · 小红书内容矩阵策划
+
+基于 2026-04-19 竞品爆款分析,为 Focus Core 制定的内容发布策略。
+
+---
+
+## 一、内容矩阵 4:2:1 模型
+
+每周 7 篇,按流量款:信任款:人设款 = 4:2:1 分配。
+
+### A类 · 流量款(4篇/周)— 拉新曝光
+
+| 选题方向 | 示例标题 | 参考爆款 |
+|---------|---------|---------|
+| 体态问题解决方案 | 3个动作改善骨盆前倾|普拉提私教教学 | 欢欢 4397赞 |
+| 圆肩驼背改善 | 告别圆肩驼背|Reformer 美背训练 | pilateswithannabel 2487赞 |
+| 产后/办公室痛点 | 久坐族肩颈僵硬?普拉提拯救低头族 | Liviana 1254赞 |
+| 局部问题针对 | X型腿/足外翻?这样练真的有变化 | may练普拉提 2023赞 |
+
+**关键要素**:
+- 视频为主(动作展示需要动态)
+- 标题带数字+具体问题
+- 高搜索词:骨盆前倾、圆肩驼背、富贵包、产后修复
+
+### B类 · 信任款(2篇/周)— 转化意向
+
+| 选题方向 | 示例标题 | 参考 |
+|---------|---------|------|
+| 学员前后对比 | 10节课的变化|学员体态对比记录 | 前后对比类笔记 |
+| 品牌/服务介绍 | 关于我的课程与价格,一篇讲清楚 | AND HER 1163赞 |
+| 知识科普 | 普拉提私教和团课到底差在哪? | — |
+| 体验课实录 | 一人一馆体验课实录|60分钟都在做什么 | ZONE PILATES 244赞 |
+
+**关键要素**:
+- 图文为主(信息密度高)
+- 学员案例需征得同意
+- 品牌介绍帖是长期获客工具
+
+### C类 · 人设款(1篇/周)— 情感连接
+
+| 选题方向 | 示例标题 | 参考 |
+|---------|---------|------|
+| 日常Vlog | 一人一馆的一天 | 放羊的杨- 系列 |
+| 创业故事 | 为什么选择一人一馆? | 放羊的杨- 331赞 |
+| 心里话 | 一个人开馆最难的不是没客户,是… | 一人一馆弊端帖 222赞 |
+
+**关键要素**:
+- 视频 Vlog 为主
+- 展示真实生活状态
+- 建立「专业之外」的人设维度
+
+---
+
+## 二、话题标签策略
+
+### 每篇必带(核心标签)
+`#普拉提` `#普拉提私教` `#一人一馆`
+
+### 轮换使用(流量标签)
+- 体态类:`#体态矫正` `#圆肩驼背` `#骨盆前倾` `#富贵包`
+- 人群类:`#产后修复` `#腹直肌分离` `#上班族`
+- 业态类:`#私教课` `#普拉提工作室`
+
+### 必带(地域标签 — 本地获客核心)
+`#深圳普拉提` `#宝安普拉提` `#坪洲普拉提` `#深圳` `#宝安`
+
+---
+
+## 三、发布节奏建议
+
+| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
+|---|---|---|---|---|---|---|
+| C人设 | A流量 | B信任 | A流量 | A流量 | B信任 | A流量 |
+
+- 工作日发布教学类(上班族刷小红书高峰)
+- 周末发人设类(用户有时间看Vlog)
+- 品牌介绍帖择时发布后置顶
+
+---
+
+## 相关页面
+
+- [[wiki/sources/xhs-普拉提私教-竞品爆款分析]] — 竞品数据来源
+- [[wiki/entities/focus-core]] — 场馆信息
+- [[wiki/entities/and-her-pilates]] — 品牌介绍帖标杆
+- [[wiki/entities/放羊的杨]] — 一人一馆日常标杆
+- [[wiki/ideas/品牌介绍帖-focus-core]] — 首篇品牌介绍帖策划