脉冲
Pulse — 多源时效性研究
> 可移植性: 同时适用于 Claude Code CLI 和 Claude.ai。可选的 X/Twitter 阶段需要浏览器自动化,如果不可用将自动跳过。
这是一个面向时效性的研究技能,旨在综合 Reddit、Hacker News、公开网页以及(可选的)X/Twitter 在可配置时间窗口内关于某个话题的讨论。输出结果是一份包含引用、参与度信号和跨平台模式分析的连贯简报。该技能捕捉的是当前的对话,而非权威的参考资料。
调用方式
显式触发词:
- "pulse on [topic]"
- "what's happening with [topic]"
- "what are people saying about [topic]"
- "current conversation about [topic]"
- "take the pulse of [topic]"
- "trending: [topic]"
- "find me info on [topic]"
同时也涵盖:具有时效性特征的竞争对手研究、趋势发现、工具对比、受众情绪分析。
Agent 完整性规则 (Research-Pack 约定)
以下规则在整个运行过程中适用。它们继承自 research-pack 约定,并由 PR #657 的跨技能一致性审计锁定。
- 执行纪律。 阶段 1-3 并行运行(Reddit + HN + Web 相互独立)。在每个阶段内部,仅限顺序调用。每个平台每秒限速 1 次请求 (1 q/sec)。 在同一阶段进行下一次调用前,必须确认已收到响应。
- 来源纪律。 仅引用本次会话工具调用返回的来源。训练知识需标记为
[Background — not from search],且不计入主要发现数量。
- 三项计数追踪。 已发送查询数 / 已接收(显示)来源数 / 已引用来源数。在综合分析部分的审计日志中内联显示。使用
scripts/citation_tracker.py进行确定性计数。
- 重试策略。 失败 $\rightarrow$ 等待 3 秒 $\rightarrow$ 重试一次 $\rightarrow$ 记录日志。所有来源连续失败 3 次后: 停止,提醒用户,分享已收集的内容。绝不交付空文件。
- 方案层级检测。 Reddit + HN 是无需认证的公共 JSON API(按 IP 限速,而非按方案限速)。在可用时从响应头中显示限速信号;否则优雅降级。
详见 references/research_pack_conventions.md 的标准定义和 references/parallel_execution_discipline.md 的限速原理解析。
阶段 0:强制引导输入 (2–4 个强制性问题)
(问题需逐一提出)依赖顺序。每个问题都包含明确的“提问原因”。停止条件:最多 4 个问题。
Q1(根问题)— 主题具体度
> 主题是什么?请用 1-2 句话具体描述。如果只说“AI”或“技术”,你将得到一份模糊的概览;如果说“小团队的自托管 LLM 部署”或“企业工程组织对 Claude Code 的采用情况”,你将得到一个有用的答案。
>
> *提问原因:* 具体程度决定了搜索质量。模糊的主题会产生模糊的简报。如果你的主题太宽泛,我宁愿现在将其缩小,也不愿在噪音上浪费搜索预算。
拒绝模糊。 如果用户回答“AI”,请反问一次:“关于 AI 的哪个方面——采用情况、安全性、能力、监管还是对比?请选择一个角度。”如果用户在一次反问后仍不愿缩小范围,则在交付时明确标注“主题模糊——仅为概览级别,缺乏深度”。
Q2(依赖于 Q1)— 角度
> 哪个角度最重要?请选择其一:
>
> 1. 趋势 (Trend) — 哪些在加速或减速
> 2. 情绪 (Sentiment) — 人们对此的感受
> 3. 问题 (Problems) — 痛点和抱怨
> 4. 机会 (Opportunities) — 缺口和未满足的需求
> 5. 对比 (Comparison) — 与替代方案的比较
>
> *提问原因:* 角度决定了哪些来源权重更高(Reddit 侧重情绪,HN 侧重技术评论,Web 侧重趋势覆盖),以及我如何对综合结果进行排序。
强制选择。推荐默认值: 趋势(除非主题显然需要其他角度)。
Q3(必问)— 时间窗口
> 时间窗口:7 / 14 / 30 / 60 / 90 天?默认为 30 天。
>
> *提问原因:* 7 天可以捕捉突发讨论;90 天可以捕捉持续的叙事转变。请根据新闻的时效性要求进行选择。
强制选择并提供默认值。
Q4(依赖于 Q1)— 平台范围
> 需要跳过任何平台吗?默认情况下,我会覆盖 Reddit + Hacker News + 开放网络,如果浏览器自动化可用,还会包括 X/Twitter。请跳过你不关心的平台。
>
> *提问原因:* 跳过平台可以节省搜索预算。Reddit 主导情绪,HN 主导技术评论,Web 主导广度,X 主导突发讨论。请跳过与你的角度不匹配的平台。
仅在 Q1 + Q2 表明某些平台明显不适用时询问(例如:消费者情绪主题 $\rightarrow$ HN 作用较小)。否则默认选择“所有平台”。
停止条件: 在 Q4 之后(或因依赖关系提前跳过),确认并开始第一阶段。最多 4 个问题,绝不合并提问。
预检 (Pre-flight)
在任何阶段启动前:
1. 计算时间窗口:运行 scripts/time_window_calculator.py --window <Nd>。获取用于 HN created_at_i> 的 Unix 时间戳,以及用于 Reddit t= 参数的值(hour|day|week|month|year|all)。
2. 生成输出 Slug:运行 scripts/topic_slug_generator.py --topic "<topic>" --date $(date +%Y-%m-%d)。检测 ${RESEARCH_DIR}/pulse/<slug>-<date>.md 是否已存在;如果存在,则添加 -v2 后缀或警告用户。
3. 启动三计数审计日志:运行 scripts/citation_tracker.py --action start --session pulse-<date>-<slug>。该文件位于 ~/.pulse_sessions/<session>.json,在整个运行过程中持续存在。
第一阶段:Reddit(与 HN + Web 并行)
API: reddit.com/search.json(无需认证,公开 JSON)。
查询(Reddit 内部顺序执行,1 次/秒):
1. sort=top&t=<window>&q=<topic> — 窗口期内的热门帖子
2. sort=new&t=<window>&q=<topic> — 窗口期内的新帖子(捕捉突发信号)
3. 针对得分最高的前 3-5 个帖子:获取评论 JSON (<post-url>.json?limit=top)
或前 10-20 条评论。
请求头 / 速率限制。 Reddit 根据 IP 而非方案进行速率限制。请将频率限制在 1 次请求/秒。如果响应包含 X-Ratelimit-Remaining: 0 或返回 429 错误,请等待 3 秒并重试一次。如果仍然失败,请回退至 subreddit 限制搜索 (r/<topic-subreddit>/search.json) 或使用 ?raw_json=1。
记录每次查询: citation_tracker.py --action record_sent --session NAME --query "..."。
记录接收数量: citation_tracker.py --action record_received --session NAME --count N。
第二阶段:Hacker News(与 Reddit + Web 并行)
API: Algolia HN 搜索 (hn.algolia.com/api/v1/)。
查询(HN 内部顺序执行,1 次请求/秒):
1. search?query=<topic>&numericFilters=created_at_i><timestamp>&tags=story — 时间窗内的文章
2. search?query=<topic>&numericFilters=created_at_i><timestamp>&tags=comment — 时间窗内的评论(捕捉讨论信号)
失败处理。 如果 HN 返回为空:扩大查询范围(删除不常用的名词);如果仍然为空,作为最后手段删除时间戳过滤器,并将结果标记为“超出时间窗”。
HN 偏差说明。 HN 偏向技术/开发者。在综合分析中需体现这一点:“HN 的观点倾向于实现导向;消费端情绪在此可能代表性不足。”
第三阶段:网页搜索(与 Reddit + HN 并行)
工具: 可用的网页搜索 + 抓取(例如 WebSearch + WebFetch)。
查询策略(Web 内部顺序执行,1 次请求/秒):
1. 可信出版商 — "<topic>" site:nytimes.com OR site:wsj.com OR site:wired.com OR site:theverge.com OR site:techcrunch.com after:<date>
2. 近期评论 — "<topic>" review <year> 或 "<topic>" "honest review" after:<date>
3. 真实观点来源 — "<topic>" problems OR complaints OR "worth it" after:<date>
每个查询抓取前 3-5 个 URL。在正文处截断,跳过 Cookie/导航标记。
引用纪律。 Web 部分的每项主张必须追溯到抓取的 URL。不要仅凭摘要引用;必须先进行抓取。
第四阶段:X/Twitter(顺序执行,可选)
最后运行。原因:
- 最容易失败 / 需要浏览器自动化
- X 的内容与 Reddit/HN 重叠度高 —— 因此它提供的是增量信息,而非主要信号
接口(按优先级排序):
1. 如果测试框架中可用,优先使用 Grok
2. 如果已认证,使用 X API
3. 如果测试框架支持,使用 浏览器自动化(如带有 playwright 的 Claude Code CLI 或类似工具)
4. 如果以上均不可用,则 跳过并注明
记录行为:
> 如果跳过第四阶段:保留二级标题 ## X/Twitter,正文写为 Skipped — [reason: no browser automation / no Grok / no X API]。不要伪造数据。
综合分析(跨平台模式)
在第一至第四阶段完成(或第四阶段跳过)后,生成综合分析:
1. 共识信号 — 3 个或更多平台达成一致的点(置信度最高)。每个点需标注引用的来源 URL。
2. 争议信号 — 各平台观点不一致的点。注明谁说了什么。
3. 痛点 — 跨来源重复出现的抱怨(尤其是 Reddit + Web)。
4. 兴奋信号 — 重复出现的积极情绪(尤其是 HN + X,如果可用)。
5. 新兴趋势 — 在最新帖子中首次出现但在旧帖子中缺失的内容(对比 sort=new 与 sort=top)。
6. 缺失项 — 预期会出现但明显缺失的内容。
对于每种模式,引用支持该结论的来源 URL。每次引用使用 citation_tracker.py --action record_cited --session NAME --url "..."。
检测启发式方法请参考 references/cross_platform_synthesis.md。
输出
保存至文件并粘贴在聊天窗口中:
文件: ${RESEARCH_DIR}/pulse/<topic-slug>-<YYYY-MM-DD>.md(路径由 topic_slug_generator.py 生成)。
格式:
# [TOPIC] — Pulse (过去 [N] 天)
*生成日期: [DATE] | 视角: [Q2 选项]*
TL;DR
[最多 2-3 句话]
Reddit
热门帖子
- [标题] (r/sub) — [分数, 评论数] — [摘要] — [URL]
Reddit 观点
[叙述性段落]
Hacker News
值得关注的故事
- [标题] — [分数, 评论数] — [摘要] — [URL]
HN 观点
[叙述性段落;注意 HN 的技术/构建者偏好]
Web
关键来源
- [标题] ([出版物]) — [核心观点] — [URL]
Web 观点
[叙述性段落]
X/Twitter (若可用)
[清理后的响应,保留账号/引用]
[或: "跳过 — [原因]"]
跨平台模式
[各来源中置信度最高的信号]
关键结论
- [3-5 个要点]
内容切入点 (若适用)
[由数据支持的 2-3 个具体切入点]
---
*审计:* 发送查询数: N (Reddit: a, HN: b, Web: c, X: d|跳过)。
接收来源数: M。引用来源数: K。训练知识: 0 ([背景] 不计入总数)。
错误处理
| 故障 | 行为 |
|---|---|
| 主题过于模糊 (Q1) | 拒绝开始。重新询问 Q1 一次并提供示例。在一次推回后,带上“主题模糊”的警告交付结果。 |
| Reddit 屏蔽 / 频率限制 | 尝试 ?raw_json=1 或回退到 subreddit 限制搜索。遵守 3 秒重试机制。 |
| HN 返回为空 | 扩大查询范围,最后手段是取消时间戳过滤,并将结果标记为“超出时间窗口”。 |
| Web 搜索无有用结果 | 在输出中注明;不要伪造来源。 |
| 浏览器自动化不可用 | 跳过阶段 4 并记录说明。 |
| WebFetch 超时 | 使用已加载的内容,将该来源标记为“截断”。 |
| 跨来源连续 3 次失败 | 停止。返回已收集的内容并明确标注“提前停止”。不要交付空文件。 |
| 所有来源均失败 | 返回带有诊断信息的错误。不要交付空文件。 |
工具链
| 脚本 | 角色 |
|---|---|
| scripts/time_window_calculator.py | 根据时间窗口字符串(30d, 7d 等)计算 Unix 时间戳 + Reddit t= 参数。基于 datetime.now() 的确定性计算。 |
| scripts/citation_tracker.py | 基于 JSON 的三项计数审计日志(发送/接收/引用),路径为 ~/.pulse_sessions/<session>.json。 |
| scripts/topic_slug_generator.py | 生成文件系统安全的 slug + 输出路径的重复日期检测。 |
参考资料
references/research_pack_conventions.md— Agent 完整性规则准则(7+ 来源:Google SRE, Reddit API 文档, Algolia HN 文档, 指数退避文献, 引用规范)
references/cross_platform_synthesis.md— 跨平台的共识/争议/痛点检测(7+ 来源)
references/parallel_execution_discipline.md— 1 q/sec 原理 + 计划层级信号(7+ 来源)
应拒绝的反模式
- 在用户确认主题具体化 (Q1) 之前开始任何搜索
- 批量询问引导问题,而非一次问一个
- 使用无法在 API 变更后生存的硬编码 URL(注意格式,解释可能会演进)
- 在技能主体中引用具体的人物/品牌
- 与单一的 X/Twitter 接口强耦合
- 来源失败时缺乏回退行为
- 在不解释工具功能的情况下直接说“使用 [特定工具]”
- 将训练知识计入引用计数
- 为了填满章节而伪造来源
---
版本: 1.0.0
来源规范: [megaprompts/01-pulse-]
megaprompt.md](../../../../megaprompts/01-pulse-megaprompt.md)/cs:grill-with-docs` 重新审查。
构建模式: 路径 B(直接转换)。如果规格与实现之间出现偏差,请使用