脉冲

pulse
分类数据
作者Alireza Rezvani
许可MIT
评分4.30/5
使用4.4K

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=newsort=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 生成)。

格式:

markdown
# [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)
构建模式: 路径 B(直接转换)。如果规格与实现之间出现偏差,请使用
/cs:grill-with-docs` 重新审查。