daily-content-curator
每日个人内容选题与轻量创作 — 跨 BestBlogs + Twitter 两个数据源,基于个人偏好筛选 30 个选题,生成互动建议和多平台适配内容。适用场景:(1) 生成今天的选题清单,(2) 筛选值得转发评论的内容,(3) 生成快速评论和转发文案,(4) 生成 300-500 字的分享帖,(5) 多平台内容适配,(6) 每日内容灵感。触发短语:'今天聊什么', '选题', '每日筛选', '内容推荐', '生成选题', 'daily curation', 'what to post', '今日推荐', '帮我筛选', '有什么值得聊', '内容筛选', 'curate content', '早间选题', '推荐转发', '个性化推荐', '今天发什么', '找选题', 'topic ideas', '互动建议', '转发推荐'
分类
内容创作安装
下载并解压到你的 skills 目录
复制命令,发送给 OpenClaw 自动安装:
每日内容选题与轻量创作 (Daily Content Curator)
跨 BestBlogs + Twitter (XGo) 两个数据源,基于个人兴趣偏好筛选 30 个选题,按「值得深入」「适合互动」「可以快评」三个维度分层,并生成多平台适配的轻量创作内容。
核心原则: 选题和创作服务于两个目标——个人表达(记录真实进展、分享可复用经验)和读者价值(帮读者快速理解并可直接行动)。好内容是这两个目标对齐的自然结果,不刻意追求流量。
完整 API 参数详情见 references/api_reference.md。
创作范例与平台适配详见 references/content-creation-guide.md。
认证
本 skill 需要两组 API Key:
| 环境变量 | 用途 |
|---|---|
BESTBLOGS_API_KEY | BestBlogs OpenAPI 密钥 |
XGO_API_KEY | XGo 开放接口密钥 |
-H "X-API-KEY: $BESTBLOGS_API_KEY" # BestBlogs
-H "X-API-KEY: $XGO_API_KEY" # XGo若任一 Key 未设置,提示用户配置。单个 Key 缺失时,仅从另一数据源筛选并告知用户。
BestBlogs 接口:https://api.bestblogs.dev
XGo 接口:https://api.xgo.ing
工作流概览
- [ ] 阶段零: 加载风格画像 + 历史记录
- [ ] 阶段一: 并行拉取数据(BestBlogs 7 请求 + XGo 3 请求)
- [ ] 阶段二: 统一格式 + 去重 + 话题聚合
- [ ] 阶段三: 多维度评分 + 选题分类
- [ ] 阶段四: 输出选题清单(30 个选题 + 互动建议)
- [ ] 阶段五: 生成轻量创作内容 ⚠️ 需用户选择
- [ ] 阶段六: 保存记录 + 同步 workspace阶段零:加载上下文
风格画像(必须加载)
读取 contents/style-profile.md,提取关键约束用于阶段三评分和阶段五创作。
所有创作输出必须通过 style-profile.md 中的生成前/生成后检查清单。
历史筛选记录
读取最近 3 天的 contents/daily-curation/YYYY-MM-DD/curation.md(不存在则跳过),提取已推荐内容的标题和 URL 构建去重集合。
内容策略画像(可选)
尝试读取 contents/content-strategy.md(由 content-analytics 生成),存在则叠加话题权重和来源偏好。
阶段一:并行拉取数据
BestBlogs 数据源(7 个请求)
时间范围默认 1d,客户端按 publishTimeStamp 过滤近 12 小时(早间)或 8 小时(晚间)。
# 1-4. 文章(AI / 编程 / 商业科技 / 产品设计,各 pageSize:100)
curl -s -X POST https://api.bestblogs.dev/openapi/v1/resource/list \
-H "Content-Type: application/json" -H "X-API-KEY: $BESTBLOGS_API_KEY" \
-d '{"currentPage":1,"timeFilter":"1d","sortType":"score_desc","userLanguage":"zh_CN","pageSize":100,"type":"ARTICLE","category":"Artificial_Intelligence"}'
# category 依次替换: Programming_Technology, Business_Tech, Product_Development
# 5. 播客(pageSize:50)
curl -s -X POST https://api.bestblogs.dev/openapi/v1/resource/list \
-H "Content-Type: application/json" -H "X-API-KEY: $BESTBLOGS_API_KEY" \
-d '{"currentPage":1,"timeFilter":"1d","sortType":"score_desc","userLanguage":"zh_CN","pageSize":50,"type":"PODCAST"}'
# 6. 视频(pageSize:50)
# 同上,type 替换为 VIDEO
# 7. BestBlogs 推文
curl -s -X POST https://api.bestblogs.dev/openapi/v1/tweet/list \
-H "Content-Type: application/json" -H "X-API-KEY: $BESTBLOGS_API_KEY" \
-d '{"currentPage":1,"timeFilter":"1d","sortType":"score_desc","userLanguage":"zh_CN","pageSize":100,"language":"all"}'XGo 数据源(3 个请求)
# 8-9. 关注者推文(2 页,各 pageSize:50)
curl -s -X POST https://api.xgo.ing/openapi/v1/tweet/list \
-H "Content-Type: application/json" -H "X-API-KEY: $XGO_API_KEY" \
-d '{"queryType":"following","timeRange":"LAST_24H","sortType":"influence","tweetType":"NO_RETWEET","currentPage":1,"pageSize":50}'
# currentPage:2 同上
# 10. 推荐推文
curl -s -X POST https://api.xgo.ing/openapi/v1/tweet/list \
-H "Content-Type: application/json" -H "X-API-KEY: $XGO_API_KEY" \
-d '{"queryType":"recommendation","timeRange":"LAST_24H","sortType":"influence","tweetType":"NO_RETWEET","currentPage":1,"pageSize":50}'所有 10 个请求并行执行。 必须显式传递 sortType。
客户端过滤:BestBlogs 保留 score >= 75,XGo 保留 influenceScore >= 40。
阶段二:统一格式 + 去重 + 话题聚合
2.1 统一格式
将两个数据源映射为通用结构。字段映射详见 references/api_reference.md。
关键映射:
oneSentenceSummary → summary, readUrl 优先于 url, score 直接使用influenceScore 按对数归一化 min(100, 20 * log2(influenceScore + 1))2.2 去重
2.3 话题聚合
将讨论同一话题的内容归为话题簇,不再只保留评分最高的一条。
聚合信号(满足任一即归为同一话题):
话题簇结构:
topic: 话题名称mainContent: 评分最高的内容relatedDiscussions: 同话题的其他来源,每条记录 {author, viewpoint, url}heatLevel: hot(3+ 来源讨论)/ warm(2 来源)/ niche(单一来源但质量高)阶段三:多维度评分 + 选题分类
评分体系(5 个维度,共 100 分)
3.1 基础质量(30%)
直接使用数据源评分,XGo 推文用对数归一化。
3.2 个人兴趣匹配(25%)
高兴趣(+20-25): AI Agent/Coding, Claude Code, MCP, LLM 应用, Prompt Engineering, 分布式系统
中兴趣(+12-18): 产品设计, 开发者工具, 独立开发, 创业/SaaS, 内容创作, React/Next.js
低兴趣(+5-8): 其他前端框架, 移动开发, Web3, 纯资讯
若能访问 gino-bot/USER.md,用其技术栈和关注领域覆盖默认配置。
3.3 读者共鸣潜力(20%)
评估内容发出后对读者的价值,基于可观测信号:
注意:读者共鸣不等于迎合情绪。符合 style-profile 的原则——分享心态优先,帮助读者快速理解并可直接行动。
3.4 互动潜力(15%)
基于可观测信号评估互动价值:
3.5 时效性 + 多样性(10%)
选题分类
基于综合分和内容特征分为三类,分类不完全依赖分数阈值:
| 分类 | 数量 | 分类信号 |
|---|---|---|
| 🔥 值得深入 | 8-10 | 综合分高 + 兴趣匹配高 + 有深度值得展开 |
| 💬 适合互动 | 10-12 | 话题簇有多方讨论,或个人可贡献独特视角,或内容有趣/反直觉 |
| ⚡ 可以快评 | 8-10 | 信息密度高但一两句话可以说清,适合金句或快速分享 |
注意: 一个低分但争议性强、有讨论价值的内容应该进「适合互动」而非被过滤掉。分类看内容特征,不只看分数。
阶段四:输出选题清单
输出格式
# 📋 每日选题 | YYYY-MM-DD
> 从 BestBlogs N 篇 + XGo M 条中筛选,共 30 个选题
---
## 🔥 值得深入(N 个)
### 1. 话题名称
- **来源**: [标题](url) | 作者 | 来源名
- **核心内容**: 2-3 句概括
- **相关讨论**:
- @作者A: 观点概括 [链接](url)
- @作者B: 不同看法 [链接](url)
- **各方观点**: 简要对比
- **为什么值得深入**: 与个人实践的关联 + 对读者的价值
- **推荐分**: 95 | **兴趣**: AI Coding | **读者价值**: 含可复用工作流
---
## 💬 适合互动(N 个)
### 11. 话题名称
- **推荐互动**: 🔁 转发并评论 / 💬 回复 / 引用转发
- **来源**: [内容](url) | @作者名
- **核心内容**: 1-2 句
- **讨论背景**: 为什么有讨论价值
- **互动角度**: 从什么角度切入(基于个人经验)
- **推荐分**: 82 | **互动潜力**: 高
---
## ⚡ 可以快评(N 个)
### 23. 话题名称
- **来源**: [内容](url) | 作者
- **一句话**: 核心信息点
- **快评角度**: 可以从什么方向点评
- **推荐分**: 72输出完整性与准确性规则
readUrl 优先于 url(BestBlogs 内容)@作者名,播客/视频标注时长阶段五:轻量创作 ⚠️ 需用户选择
输出选题清单后,等待用户选择选题编号和创作类型。
创作类型
| 类型 | 字数 | 适用场景 |
|---|---|---|
| 快评 | 1-2 句 | 转发评论、金句提炼、快速洞察 |
| 分享帖 | 300-500 字 | 详细分享、经验探讨、观点输出 |
不做长文创作。长文需先 deep-reading 深入阅读 + 个人参与思考,再 content-synthesizer 产出。
创作流程
contents/style-profile.md 的平台适配策略references/content-creation-guide.md 中的范例和反例创作核心约束
来自 style-profile.md,每次创作必须遵守:
读者意识: 创作时除了表达自己的真实想法,还要思考——读者看到这条内容后能获得什么?是一个可以马上用的方法,一个新的看问题的角度,还是一个值得思考的问题?
平台适配详细策略和正反例详见 references/content-creation-guide.md。
阶段六:保存记录
contents/daily-curation/YYYY-MM-DD/
curation.md / curation-am.md / curation-pm.mdmkdir -p contents/daily-curation/YYYY-MM-DDDaily Workspace 集成
mkdir -p contents/tmp/workspace/YYYY-MM-DD/article-details contents/tmp/workspace/YYYY-MM-DD/tweet-details写入 raw-articles.md 和 raw-tweets.md(列表级基础信息,不含全文)。
参数调整
| 用户表述 | 调整 |
|---|---|
| "早间" / "早上" | BestBlogs timeFilter: "1d" + XGo LAST_24H |
| "晚间" / "下午" | 客户端过滤近 8 小时 |
| "本周" / "这周" | BestBlogs 1w + XGo WEEK |
| "只看 AI/文章/推文" | 限制数据源/分类 |
| "精简一些" | 缩减到 15-20 个选题 |
| "帮我写 #N" / "转发 #N" | 进入阶段五,生成快评 |
| "详细聊 #N" | 生成 300-500 字分享帖 |
与其他 Skill 的协作
职责边界
| 对比 Skill | 本 skill | 对比 skill | 关键区别 |
|---|---|---|---|
| bestblogs-daily-digest | 个人选题+轻量创作 | BestBlogs 订阅者简报 | 个人创作 vs 产品用户 |
| content-synthesizer | 快评/短帖 | 深度内容转化 | 快评 vs 长文 |
| deep-reading | 广度筛选 | 单篇深入分析 | 筛选 vs 分析 |
下游衔接
| 下游 Skill | 衔接方式 |
|---|---|
| reading-workflow | 「值得深入」选题 → 加载阅读 |
| deep-reading | 用户选择某选题 → 深度分析 |
| content-synthesizer | 深入阅读后 → 产出长文 |
| post-to-x / x-actions | 快评/分享帖 → 发布/互动 |
错误处理
重要: 始终先检查 response.success 再处理 response.data。
BestBlogs API
401: 检查 BESTBLOGS_API_KEY400: 参数值不合法500: 重试一次data 为空: 建议扩大时间范围XGo API
401 (AUTH_001/002/003): 检查 XGO_API_KEY403 (AUTH_004): 需要 Plus/Pro 会员429 (xgo-0010): 等待 10 秒重试xgo-0012: 功能级会员限制xgo-9005: 操作不允许单数据源失败
任一数据源失败时从另一源筛选并告知用户。单个分类请求失败不影响整体。