Install
$ agentstack add skill-ejjcc-agent-skills-daily-digest ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Daily Digest — 每日信息精选推送
从 19 个 RSS 源中筛选最值得深读的内容,推送到飞书。只在有"值得中断"的内容时才推送,避免推送疲劳。
触发方式
/daily-digest— 默认筛选/daily-digest— 带运行时指令,例如:/daily-digest 重点关注 LangGraph→ 筛选时优先匹配该话题/daily-digest 只看 AI Agent 方向→ 收窄范围/daily-digest 把 XX 新闻置顶→ 指定话题作为精选第一条- 定时触发(通过 cron 或 /schedule)
如有运行时指令,在 Step 2 筛选时将其作为额外的优先级信号。
配置
运行前先读取本地配置文件 ~/.claude/skills/daily-digest/config.local.json:
{
"push_target": {
"user_id": "ou_xxx",
"chat_ids": {
"test": ["oc_test_group"],
"prod": ["oc_prod_group"]
}
},
"user_profile": {
"name": "用户名",
"interests": ["AI Agent", "LLM 应用开发"],
"language": "zh-CN",
"current_research": ["DeerFlow"]
}
}
首次使用时如果该文件不存在,提示用户创建并填写自己的 userid 和 chatid,然后终止。
配置项说明:
push_target.user_id— 飞书个人推送目标(ou_开头)push_target.chat_ids.test— 测试群(调试时推送到这里)push_target.chat_ids.prod— 正式群(确认无误后推送到这里)- 默认推送到
prod群。加--test或运行时指令包含"测试"时推送到test群 user_profile.interests— 用户关注方向,影响筛选优先级user_profile.language— 语言偏好。zh-CN(默认)时优先推荐中文源,英文内容仅在特别重大时才选入,卡片全部用中文。en时不限语言user_profile.current_research— 当前研究方向,影响画像关联- RSS 源: 见
scripts/prefetch.py中的 FEEDS 字典 - 用户画像补充: 执行筛选前,也读取
~/.claude/projects/*/memory/中的 user 类型记忆文件
工作流
Step 1: 拉取 RSS 源
python3 ~/.claude/skills/daily-digest/scripts/prefetch.py
脚本输出 JSON 到 stdout,格式:
{
"fetched_at": "...",
"total": 120,
"articles": [
{"source": "...", "title": "...", "link": "...", "date": "...", "summary": "..."},
...
],
"github_trending": [
{"repo": "owner/name", "description": "...", "language": "Python", "total_stars": "1234", "today_stars": "567"},
...
]
}
github_trending 是独立板块,取 top 3 展示,不参与文章筛选流程。
Step 1.5: 数据评估与补充
检查 prefetch 结果,发现并补救数据缺口:
- 源健康检查 — 统计每个源返回的文章数。如果某个 AI 类源返回 0 篇,按三级降级补充:
- Level 1: web search 搜
{源名} 最新补充 - Level 2: 如果搜索结果太泛,直接 WebFetch 该源的网站首页
- Level 3: 放弃该源,记录到步骤日志
- 热点探测 — 如果同一事件/关键词出现在 3+ 个不同源中,说明是重大事件。对该事件执行一次 WebFetch 抓取原文,获取更完整的上下文用于后续筛选
- 候选充实 — 对初筛后最有潜力的 3-5 篇候选文章,如果 RSS 摘要太短( "3 天前推送过 LiteLLM 供应链攻击事件,本文是后续:攻击者身份已确认..."
历史保留 14 天后自动清理。记录文件 push_history.json 在 skill 目录下自动生成,不随 skill 分发。
测试模式不记录历史:推送到 test 群时(--test 或运行时指令含"测试"),跳过 dedup.py record,避免测试数据污染去重历史。
2e: 优先信号
同等质量下的优先级因素:
- 源更新频率(月更 > 周更 > 日更) — 低频源已做过筛选,文章质量更高。日更源之间:量子位 > 机器之心 > 新智元
- 用户兴趣 —
config.local.json的interests+ memory 中的 user 类型记忆。画像匹配度高的文章应加分,不能因为"用户已经知道"而排除。用户深度使用某工具 ≠ 不想看相关趋势分析,实践视角和行业分析是不同维度。"用户已了解"不是排除理由,"文章没有新信息"才是 - 来源多样性 — 1-3 篇精选尽量来自不同源
2f: 排除项
- 纯营销/PR 稿、产品更新日志(除非重大版本)
- 和 AI/技术完全无关的内容(汽车、地产、健身、餐饮等)
- "又一个 X" — 同质化项目/产品(除非有本质差异)
注意区分两种"无关": 和 AI 完全无关的内容(排除)vs AI 领域但不在用户具体方向的重大事件(保留)。用户关注 AI Agent / 开发工具链,但 AI 行业的重大事件(产品发布/关停、行业格局变化)即使不在具体方向内,也能拓宽赛道认知,应作为候选保留。
标题夸张但涉及重大事件的文章,先验证内容再决定是否排除。
Step 3: 构建飞书消息卡片
将精选结果和筛选日志构建为飞书 Interactive Card JSON,写入 /tmp/dailydigestcard.json。
必须使用 JSON 2.0(schema: "2.0" + body.elements),否则 markdown 的 ### 标题不会渲染。
卡片骨架:
{
"schema": "2.0",
"config": { "wide_screen_mode": true, "enable_forward": true, "update_multi": true },
"header": {
"title": { "tag": "plain_text", "content": "AI Trending (YYYY-MM-DD)" },
"subtitle": { "tag": "plain_text", "content": "{feeds_count} sources · {total} articles · {repos_count} repos" },
"template": "wathet"
},
"body": {
"elements": [
{ "tag": "collapsible_panel", "expanded": false, "header": { "title": { "tag": "plain_text", "text_color": "grey", "text_size": "notation", "content": "筛选过程" }, "icon": { "tag": "standard_icon", "token": "right_outlined", "color": "grey" }, "icon_position": "right", "icon_expanded_angle": 90 }, "border": { "color": "grey-300", "corner_radius": "6px" }, "vertical_spacing": "2px", "elements": ["... 日志 div 列表 ..."] },
{ "tag": "markdown", "content": "... 见下方模板 ..." }
]
}
}
Markdown 内容模板
一整个 markdown 元素,用 ### 做板块标题(JSON 2.0 下渲染为大字):
### 📌 精选文章
**[文章标题](verified_url)** 第一句说这篇讲了什么。第二句说核心发现或方法。第三句说为什么和你相关。
> 来源 · 日期 · Actionable
**[文章标题](verified_url)** 第一句说这篇讲了什么。第二句说核心发现或方法。
> 来源 · 日期 · Novel
**[文章标题](verified_url)** 第一句说这篇讲了什么。第二句说改变了什么认知。
> 来源 · 日期 · Insightful
---
### 🔥 GitHub Trending
- **[owner/repo](url)** ⭐ 总星标 (+今日新增)
一句话中文描述。语言。
---
*by {harness} · {model}*
签名中 {harness} 和 {model} 从当前运行环境获取,不写死。
关键规则
- JSON 2.0 不支持
note元素 — 用 markdown 斜体*text*替代 - 标签颜色:
blue= Actionable,green= Novel,purple= Insightful
Step 4: 推送到飞书
从 config.local.json 读取推送目标:
lark-cli im +messages-send \
--as bot \
--chat-id {chat_id} \
--msg-type interactive \
--content "$(cat /tmp/daily_digest_card.json)"
注意事项
- prefetch 脚本只用 Python 标准库,不需要额外安装依赖
- 每个源最多取 10 篇,总量控制在 ~190 篇以内,避免 token 爆炸
- 7 天窗口覆盖周刊类源
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: ejjcc
- Source: ejjcc/agent-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.