PM Daily Brief
为 AI 产品经理生成每日情报简报。目标读者: 你自己。目标用途: 30 分钟内吸收当天产品/技术/趋势信号,辅助产品决策。
触发与定位
用户每天手动调一次。每次都生成"当天"的报告(以系统当前日期为准,从 CLAUDE.md 注入或 date 命令获取)。
不是通用新闻聚合器。是给一个正在做 AI 产品的 PM 看的精炼简报 — 信号优先,噪音少。
输出语境
报告是写给单一用户(你自己)看的私人备忘,不是发布物。可以:
- 直接用真实产品名/项目名(
[Project-A]这种占位是 sample 公开版才用) - 在
🎯 今天具体动作字段里 reference 用户具体文件路径或 repo - 在观察段里 reference 用户在做什么
仅当用户表示要分享报告(推 GitHub / 发同事)时, 用 sed 批量脱敏成占位符。
工作流
按顺序执行下列步骤。每步给用户一行进度更新(如"抓取 ProductHunt..."),保持简短。
Step 1: 确认日期与输出路径
- 日期: 优先用 CLAUDE.md 注入的
currentDate,fallback 到date +%Y-%m-%d(bash,跨平台)。Windows-only 环境也可用 PowerShellGet-Date -Format yyyy-MM-dd。若两者差超过 12 小时(跨午夜调用), 显式问用户用哪个日期。 - 输出:
D:\hrdai\daily-input\YYYY-MM-DD.md - 覆盖策略: 文件已存在直接覆盖, 不要问用户、不要 diff (用户每天调一次, 同日重跑就是想要新版本)。Step 8 汇报时若覆盖了同日旧版, 一句话提示"(覆盖了 N 分钟前的同日报告)"。
记录 START_TS=$(date +%s),Step 8 计算抓取耗时。
Step 2: 抓取三源(WebFetch 优先,多 URL 重试)
默认用 WebFetch,不要用 /browse。 实测 (2026-05-06):
- ProductHunt 首页被 Cloudflare 挡 403,headless browser 进不去。WebFetch 走 leaderboard URL 可绕过。
- GitHub Trending 用 browse 抓回的 text 99% 是导航菜单噪音。WebFetch 输出干净 10 倍。
- HN 两种都行,WebFetch 更快。
并行抓三源(同一回合发三个 WebFetch 调用):
- ProductHunt 当日 leaderboard
- URL:
https://www.producthunt.com/leaderboard/daily/YYYY/M/D(注意月份不补零, e.g./2026/5/6) - prompt 要求: 每个产品返回名称、tagline、upvotes、tags、PH 链接、产品官网链接(从详情页抓), top 20。
- URL:
- GitHub Trending (daily)
- URL:
https://github.com/trending?since=daily - prompt 要求: 每个 repo 返回 owner/repo、完整 GitHub URL、描述、语言、总 stars、当日 stars。明确要求"不要包含导航菜单或语言选择器" — 否则 WebFetch 也可能塞导航。Top 25。
- URL:
- Hacker News 首页
- URL:
https://news.ycombinator.com/ - prompt 要求: 标题、分数、评论数、外链 URL、域名、HN 讨论页 URL。Top 30。
- URL:
Fallback (按顺序试,/browse 已确认无效不再用):
| 源 | 主路径 | Fallback 1 | Fallback 2 |
|---|---|---|---|
| PH | /leaderboard/daily/Y/M/D | homepage / | 前一日 leaderboard (慢一天数据 > 没数据) |
| GH | /trending?since=daily | /trending (无 since) | /trending?since=weekly (退一档) |
| HN | / | /news?p=1 | /newest |
任一源最终全失败,报告头部标"⚠️ X 源抓取失败 (尝试: 主+fallback1+fallback2)",绝不编造条目。
WebFetch quota 注意: 三源并行 + Step 4 的 1-2 次 deep-read fetch + 偶尔 Step 4.5 WebSearch ≈ 5-7 次 net call。日内多次跑可能撞限额。撞了直接跳过补充, 用已抓数据出报告。
Step 2.5: 读用户上下文(主题加权依据)
抓完三源后, 在过滤前先建 用户兴趣画像, 让本日报告偏向用户实际在做的方向。
读两类来源:
-
最近 3-5 份 daily brief:
Glob D:\hrdai\daily-input\*.md, 取最近 5 个(按文件名日期排), Grep 它们的## 🌟 Top 3-5 深读段标题 +## 🔭 今日观察段。- 提炼: 哪些主题连续多日上 Top? (e.g. agent 经济、context 工程、voice agent)
- 提炼: 用户最近反复出现的关键词?
-
项目根快扫:
Glob D:\hrdai\*.{md,html}(限制根目录, 不递归, 不读.claude/.git/node_modules/)。识别用户在做什么产品。- 文件名/目录名带
competitive-report/battlecard/competitor→ 用户在做该方向竞品研究, 该垂直加权 - 文件名/目录名暗示产品代号 → 读对应
README.md第一段 + tagline 提取产品定位 - 看
CLAUDE.md注入的项目描述
- 文件名/目录名带
不要扫描敏感目录 (.git/, .env, credentials)。如果 Glob 误中, 跳过不读。
第一次跑 (daily-input/ 还没历史) 跳过来源 1, 只用项目文件。
输出: 维护一个 加权列表, 类似:
high-weight: ["团队管理AI", "HR tech", "agent 经济", "context 工程"]
mid-weight: ["voice agent", "video gen", "Skills/插件分发"]
该列表必须显式写到报告 header(模板里 用户画像加权: 那行), 让用户看到 skill 推断出的画像, 错了能反馈。
怎么用: 在 Step 3 AI 判定时, 命中 high-weight 主题的边缘条目倾向纳入; 在 Step 4 Top N 选品时, 同分情况优先 high-weight; 在 Step 5 全列表 triage tag 时, 命中 high-weight 默认 [跟进]。
不要做的事:
- 不要让加权完全决定选品 — 突破性的非加权信号 (如新模型发布) 必须保留。加权是 tie-breaker, 不是 filter。
- 不要每天都强行塞 high-weight 主题。当天没相关条目就不塞, 不要硬找。
Step 3: AI 过滤与分类
把所有条目过一遍,分三桶:
- 🤖 AI 核心: LLM、agent、RAG、embedding、diffusion、TTS/STT、CV/多模态、AI infra/eval、prompt 工具、AI 应用层(代码助手、设计、写作、客服、search、教育...)、AI 框架/SDK、推理引擎、向量库、AI 硬件
- 🌶️ 高热度非 AI: 不属于 AI 但单源排名 Top 3 或跨源出现 — 用户要求"很火的其他东西也带"
- 丢弃: 中低热度的非 AI 条目
判定不确定时倾向纳入(漏比错严重)。AI 判定基于描述语义,不只关键词 — 比如一个"chrome extension for X"如果 X 是 AI 用例,算 AI。
Step 4: Top 3-5 深读
从三桶里挑 3 到 5 条最值得 PM 关注 的(优先 AI 核心 + Step 2.5 high-weight 主题, 看产品差异化/技术新颖度/赛道动向, 不只看热度)。
硬约束: **凑不出 5 条强的就只写 3 条, 不要为补位降标准。**今天可能就是只有 2-3 个真信号, 那就 3 条; 偶尔信号特别多也可以 4-5。第 4、5 条的 PM takeaway 写不出洞见时, 直接把它降级到全列表去, 不要硬凑泛话。
每条提炼 5 个字段(🎯 今天具体动作 凑不出就空着, 不要硬写"持续关注"这种废话):
- 是什么 (1-2 句, PM 视角不是开发者视角)
- 差异化 (vs 现有方案有什么新)
- 技术/打法 (用了什么模型、架构、商业模式)
- PM takeaway (对你做 AI 产品的启发 — 一句话, 可以是条件式 "如果 ... 则 ...")
- 🎯 今天具体动作 (1-2 小时内能做完的下一步; 例: "拆 X 的 README + 通信协议", "把 Y 写成 Skill 上 GitHub 看一周 star")。写不出具体动作就省略此字段。
- 延伸 (可选, cross-source 对照, 不每条都要)
抓取策略 — 不要每个 Top 5 都 fetch 原文:
- 默认基于已有 tagline + 描述 + 行业知识写。20 字 tagline + PM 知识足够支撑前 4 个字段。
- 只对 1-2 个真正高价值的条目用 WebFetch 补充原文。判定标准: HN 高分长文 (>300pts 且非简短公告)、有清晰长 URL 的 manifesto/技术博客、引出大趋势的政策/事件类。
- 产品官网/PH/GH README 通常不必 fetch — tagline + tag 足够,fetch 多了拖时间且收益边际递减。
链接规范: 标题用产品官网链接 (Step 2 已要求 PH 抓时带), 旁边括号里给来源标记 (PH ▲527, 当日榜首)。HN 类目链接给原文 URL,PH 给产品官网,GH 给 repo URL。让 PM 一跳到位,不再多一层 PH/HN 详情页。
自主补充(WebSearch): 仅当某条目引出值得跟进的更大趋势(新模型、新范式、政策事件),且原始信息不足时,用 WebSearch 补 1 条上下文加到"延伸"字段。保持信噪比 — 一个报告里"延伸"出现 2-3 次就够,不要每条都补。
Step 4.5: TL;DR 提炼 (60 秒摘要)
写 Top 3-5 之后、之前的 header 之后,产出 TL;DR 段:
- 🚀 机会 (一句话, 跟用户做的事最相关的最强信号)
- ⚠️ 风险 (一句话, 该警觉的对手/技术/政策, 强调威胁性而非机会)
- 🌊 趋势 (一句话, 跨源浮出的最强 pattern, 通常 Step 5 观察段第一段的 punchline)
为什么必须有: PM 喝咖啡时间内就该知道今天有没有大事。3 行 60 秒读完, 决定要不要往下读全文。如果 TL;DR 写不出"风险"项, 想想是不是真的没风险还是没认真找 — 大多数日子都有。
Step 5: 全列表加 triage tag
每条全列表点评开头加方括号 tag, 让 PM 10 秒扫完决定看哪条:
[跟进]— 命中 high-weight 加权 + 信号强 / 直接竞品 / 该立项跟踪[关注]— 相关但非急, 知道有这事就行[噪音]— 列出供完整性, 但可跳
判定原则:
- 加权 high-weight 命中 + 单源 Top 3 =
[跟进] - 加权 mid-weight 或非加权但技术新颖 =
[关注] - 非 AI / 工具类 / 主题分散 =
[噪音]
每个全列表段(PH / GH / HN)的 [跟进] 应当 ≤ 5 条 — 跟进太多等于没跟进。
Step 6: 今日观察(综合段)
报告末尾写一段 150-300 字的"今日观察":
- 跨产品的共性 pattern (e.g. "今天三个 agent 框架同时上榜,都在解决 tool-use 可靠性")
- 新涌现的赛道或技术信号
- 你(AI PM)应该警觉/兴奋的点
写法: 3 段, 每段开头一句 punchline (粗体), 后接 2 句证据 + 1 句对用户产品的影响。不要 4 段, 4 段开始稀释。
这段是整篇最有价值的部分。宁可少写两个产品也要把这段写好。基于真实数据,不要空泛 ("AI 在加速"这种废话不要)。
附带高权重信号(可选子段): 加权 high-weight 命中但没进 Top 5 的、值得单提一下的, 1-2 条。例: 直撞用户竞品调研的小 PH 产品。注意命名: 这是"高价值但落选"的单提, 与全列表 [噪音] tag(低价值条目)是相反含义。
Step 7: 写 Markdown 文件
写入 D:\hrdai\daily-input\YYYY-MM-DD.md,严格按 输出模板 结构。
Step 8: 生成 PDF (用 gstack make-pdf)
直接调 gstack make-pdf 二进制 (skill 调用太慢, 直接 bash)。
自检测路径 (避免硬编码用户名):
# bash / git bash on Windows
USER_HOME_WIN="$(cygpath -w "$HOME" 2>/dev/null || echo "$USERPROFILE")"
P="$HOME/.claude/skills/gstack/make-pdf/dist/pdf"
export BROWSE_BIN="${USER_HOME_WIN}\\.claude\\skills\\gstack\\browse\\dist\\browse.exe"
DATE="2026-05-06" # replace with $TODAY
"$P" generate \
"D:/hrdai/daily-input/${DATE}.md" \
"D:/hrdai/daily-input/${DATE}.pdf" \
--title "AI PM Daily Brief — ${DATE}" \
--author "AI PM" \
--date "${DATE}" \
--no-confidential
PowerShell 等价命令 (在 PS 跑):
$P = "$HOME\.claude\skills\gstack\make-pdf\dist\pdf.exe"
$env:BROWSE_BIN = "$HOME\.claude\skills\gstack\browse\dist\browse.exe"
$DATE = "2026-05-06"
& $P generate `
"D:/hrdai/daily-input/${DATE}.md" `
"D:/hrdai/daily-input/${DATE}.pdf" `
--title "AI PM Daily Brief — ${DATE}" `
--author "AI PM" `
--date $DATE `
--no-confidential
Windows 踩坑 (实测 2026-05-06):
- 必须用
.exe:BROWSE_BIN指向browse.exe,不能是裸browse(虽然文件存在,make-pdf 的which browse找不到)。用反斜杠 Windows 路径。 - 位置参数顺序:
generate <input> <output> --flags。flag 放后面,否则--date YYYY-MM-DD会吞掉位置参数。 --no-confidentialflag: 需要 make-pdf ≥ 2026-05 版。老版没此 flag 会报错, 升级 gstack 或去掉 flag (会带 CONFIDENTIAL 角标)。
设置:
--no-confidential去掉默认 CONFIDENTIAL 角标(简报不需要)- 不加
--cover不加--watermark(简报直入正文) - 默认已有页码 + running header,够用
失败处理: 报告"PDF 生成失败,md 已就绪",不要阻塞 md 交付。常见失败:
browse binary not found→ 检查 BROWSE_BIN env 是否设了.exe后缀input file not found(但其实是 output 路径) → flag 顺序错,改成generate input output --flagsunknown flag --no-confidential→ make-pdf 版本太老,gstack-upgrade或去掉该 flag
Step 9: 汇报
END_TS=$(date +%s)
ELAPSED=$(( END_TS - START_TS ))
给用户终端汇报:
- md 路径 + pdf 路径(若成功)
- 三源抓取数 + 抓取耗时(如"PH 20 / GH 25 / HN 30, 共 2m 18s")
- 入选