wow-digest
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinesewow-digest
wow-digest
Purpose
用途
Pull last 24h of newsletters (email) and Telegram channel posts, filter noise,
score survivors for genuine surprise against the user's focus and recent research,
and append 3-7 WOW items to today's daily note.
拉取过去24小时的新闻通讯(邮件)和Telegram频道帖子,过滤无效信息,根据用户的关注重点和近期研究对筛选后的内容进行“惊喜度”评分,最终将3-7条WOW级内容追加至今日的每日笔记中。
Workflow
工作流程
- Run to pull and normalize candidates from all sources
scripts/ingest.py - Run to fetch full content for link-only newsletters (LinkedIn, beehiiv, Substack)
scripts/enrich.py - Run to drop obvious noise (marketing, payments, greetings)
scripts/salience_filter.py - Run on filtered candidates to score and select WOW items
scripts/wow_score.py - Append selected items to today's daily note under
## Reading - Save raw candidates to for replay
.wow-eval/candidates/YYYYMMDD.jsonl - Archive processed newsletter emails via GWS
- During eval phase: run to collect human verdicts
scripts/feedback.py
- 运行 从所有来源拉取并标准化候选内容
scripts/ingest.py - 运行 为仅含链接的新闻通讯(LinkedIn、beehiiv、Substack)获取完整内容
scripts/enrich.py - 运行 剔除明显无效信息(营销内容、付费通知、问候语等)
scripts/salience_filter.py - 对筛选后的候选内容运行 进行评分并选出WOW级内容
scripts/wow_score.py - 将选中的内容追加至今日每日笔记的 部分下
## Reading - 将原始候选内容保存至 以便复现
.wow-eval/candidates/YYYYMMDD.jsonl - 通过GWS归档已处理的新闻通讯邮件
- 评估阶段:运行 收集人工反馈
scripts/feedback.py
Manual run
手动运行
bash
python3 scripts/ingest.py --days 1 --output /tmp/wow-candidates.jsonl
python3 scripts/enrich.py --input /tmp/wow-candidates.jsonl --output /tmp/wow-enriched.jsonl
python3 scripts/salience_filter.py --input /tmp/wow-enriched.jsonl --output /tmp/wow-filtered.jsonl
python3 scripts/wow_score.py --input /tmp/wow-filtered.jsonl --output /tmp/wow-selected.jsonbash
python3 scripts/ingest.py --days 1 --output /tmp/wow-candidates.jsonl
python3 scripts/enrich.py --input /tmp/wow-candidates.jsonl --output /tmp/wow-enriched.jsonl
python3 scripts/salience_filter.py --input /tmp/wow-enriched.jsonl --output /tmp/wow-filtered.jsonl
python3 scripts/wow_score.py --input /tmp/wow-filtered.jsonl --output /tmp/wow-selected.jsonThen the skill appends to daily note and archives emails
随后该工具会将内容追加至每日笔记并归档邮件
undefinedundefinedDry-Run Mode
试运行模式
When the user says or "preview the digest", run the full pipeline but:
/wow-digest --dry-run- Do NOT append to daily note
- Do NOT archive emails
- Instead, print the selected items with scores and hooks directly in the conversation
This lets the user preview what would be appended without side effects.
当用户输入 或“预览摘要”时,运行完整流程但:
/wow-digest --dry-run- 不追加至每日笔记
- 不归档邮件
- 直接在对话中打印选中的内容及其评分和钩子信息
这样用户可以预览将要追加的内容,且不会产生任何副作用。
Context Sourcing
上下文来源
The scoring prompt uses three context signals from the vault ():
~/Brains/brain/- — From
{focus}, sectionsMy Focus.md,## Current,## Base(stops at## Primary). This tells the scorer what the user cares about right now.## Nice to have - — From
{research}files (last 30 days), parsed from filenames (ai-research/*.md) andYYYYMMDD-topic.mdfrontmatter. Shows what the user has already investigated.research_topic: - — From
{recent_topics}headings (last 7 days), excludingDaily/YYYYMMDD.mdand## do. Shows recent daily note themes.## log
If these files don't exist, scoring still works but with degraded personalization.
评分提示词会使用来自存储库()的三类上下文信号:
~/Brains/brain/- — 来自
{focus}文件的My Focus.md、## Current、## Base章节(到## Primary为止)。用于告知评分工具用户当前关注的内容。## Nice to have - — 来自
{research}文件(近30天),从文件名(ai-research/*.md)和YYYYMMDD-topic.md前置元数据中解析而来。体现用户已研究的内容。research_topic: - — 来自
{recent_topics}文件的标题(近7天),排除Daily/YYYYMMDD.md和## do章节。展示近期每日笔记的主题。## log
若这些文件不存在,评分仍可进行,但个性化程度会降低。
Dedup
去重
Ingestion deduplicates against the last 7 days of using SHA-256 hashes of (case-insensitive). Same article shared to multiple channels or re-sent in a newsletter won't appear twice. Pass to to skip.
.wow-eval/candidates/*.jsonltitle|source_name--no-dedupingest.py拉取阶段会通过对 (不区分大小写)生成SHA-256哈希,与过去7天的 文件中的内容进行比对去重。同一文章在多个频道分享或在新闻通讯中重复发送不会重复出现。运行 时添加 参数可跳过去重。
title|source_name.wow-eval/candidates/*.jsonlingest.py--no-dedupConfig
配置
Edit to add/remove email patterns or Telegram channels.
Edit to tune the scoring prompt.
config/sources.yamlconfig/wow_prompt.txt编辑 以添加/移除邮件规则或Telegram频道。
编辑 以调整评分提示词。
config/sources.yamlconfig/wow_prompt.txtOutput Format
输出格式
After scoring, append to today's daily note () ABOVE the separator, below any existing content:
Daily/YYYYMMDD.md- - -markdown
undefined评分完成后,将内容追加至今日的每日笔记()中,位于 分隔符上方、已有内容下方:
Daily/YYYYMMDD.md- - -markdown
undefinedReading
Reading
- [Title] (Source) — hook explaining WHY it's surprising
- [Title] (Source) — hook ...
WOW digest · N candidates → M selected · YYYY-MM-DD
CRITICAL: Always run `date +"%Y%m%d"` to get today's date. Never assume.
If `## Reading` already exists in the daily note, append items to it rather than creating a duplicate section.- [标题] (来源) — 解释为何令人惊讶的钩子内容
- [标题] (来源) — 钩子内容 ...
WOW digest · N条候选 → M条选中 · YYYY-MM-DD
重要提示:务必运行 `date +"%Y%m%d"` 获取当日日期,绝不可主观假设。
若每日笔记中已存在 `## Reading` 章节,则将内容追加至该章节下,而非创建重复章节。Archive
归档
After appending to daily note, archive processed newsletter emails:
- Collect all values from email candidates
message_id - Run GWS batchModify to remove INBOX label
bash
gws gmail users messages batchModify \
--params '{"userId":"me"}' \
--json '{"ids":["ID1","ID2",...],"removeLabelIds":["INBOX"]}'追加至每日笔记后,归档已处理的新闻通讯邮件:
- 收集所有邮件候选内容的 值
message_id - 运行GWS batchModify 移除INBOX标签
bash
gws gmail users messages batchModify \
--params '{"userId":"me"}' \
--json '{"ids":["ID1","ID2",...],"removeLabelIds":["INBOX"]}'Eval Mode (first 2 weeks)
评估模式(前2周)
During eval phase, do NOT auto-archive. Instead:
- Run ingest + scoring as normal
- Present the selected items to the user with FULL CONTENT, not just titles. For each item show:
- Title + source
- The snippet (first 300-500 chars of actual content)
- The LLM's hook and challenged_assumption
- WOW score breakdown (relevance, surprise, bridge_value, predictability)
- Show all items in a single text block first so the user can read the content
- Then ask via AskUserQuestion: "Was this actually WOW?" with options: wow / meh / noise / already_knew
- Record feedback via
scripts/feedback.py - Show current feedback stats
- Only archive after user confirms
CRITICAL: The user CANNOT judge WOW from titles alone. Always show the snippet content.
If the snippet is empty or too short, fetch the full email body via GWS before presenting.
To check if eval mode is active:
- If has fewer than 50 entries → eval mode
.wow-eval/feedback.jsonl - If 50+ entries → auto mode (archive without asking)
评估阶段,请勿自动归档。需执行以下步骤:
- 正常运行拉取+评分流程
- 向用户展示选中的完整内容,而非仅标题。每条内容需展示:
- 标题 + 来源
- 内容片段(实际内容的前300-500字符)
- LLM生成的钩子内容和挑战假设
- WOW评分 breakdown(相关性、惊喜度、桥接价值、可预测性)
- 先将所有内容展示在一个文本块中,方便用户阅读
- 然后通过AskUserQuestion询问:“这真的是WOW级内容吗?”,选项包括:wow / meh / noise / already_knew
- 通过 记录反馈
scripts/feedback.py - 展示当前反馈统计数据
- 仅在用户确认后进行归档
重要提示:用户无法仅通过标题判断是否为WOW级内容。务必展示内容片段。
若片段为空或过短,需先通过GWS获取完整邮件正文再展示。
判断评估模式是否激活:
- 若 中的条目少于50条 → 评估模式
.wow-eval/feedback.jsonl - 若条目达到50条及以上 → 自动模式(无需询问直接归档)