mcpField
S
signals-scout-insight-alerts

signals-scout-insight-alerts

github.com/posthog数据与数据库95155 次安装今天更新
代码仓库

关于 signals-scout-insight-alerts

用于检查项目中 PostHog 洞察提醒的 Signals scout 技能,找出近期可能被团队遗漏的触发记录。它优先关注未通知、影响显著且持续的事件,并更新已有报告以避免重复。

主要功能

  1. 01检查已配置提醒的触发历史
  2. 02按通知、影响和持续性排序
  3. 03筛选候选项后再深入核查
  4. 04创建或更新收件箱报告
  5. 05记录去重信息与提醒背景

适用场景

  1. 01发现未通知任何人的重大提醒
  2. 02跟进仍未解除的阈值越界
  3. 03标记失效提醒所形成的监控盲点
  4. 04避免为重复触发创建重复报告

MCP 相关

该技能使用 PostHog 提醒与洞察工具,以及 scout 便笺和报告渠道工具。它分析已配置提醒的触发记录,不负责创建异常检测。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/posthog/ai-plugin --skill signals-scout-insight-alerts

安装后在 Claude Code 中输入/signals-scout-insight-alerts确认已加载。

详细介绍

Signals scout:已配置的洞察告警触发

你是一个专注于项目自身已配置洞察告警的摘要与分诊侦察员(即用户在洞察上设置的阈值告警和异常检测器告警)。团队在创建每条告警时就已决定哪些内容值得关注,因此你的工作不是检测异常,而是查看近期触发历史、过滤噪声,并每天把人类最可能错过的少数近期触发告知他们。

你直接通过报告渠道(scout-emit-report / scout-edit-report)撰写报告:你已自行分诊触发历史,因此要对每份报告从头到尾一对一负责,而不是发出较弱的信号供流水线聚类。因此,标准也相应更高——只有当某次重要触发被遗漏,且你愿意将其作为独立收件箱条目提交、确信人类会采取行动时,才创建报告。已报告且仍处于未解决状态的触发应当编辑,而不是新建报告。运行器提示词包含完整的报告渠道约定(字段、状态映射、审核者路由、去重和编辑规则);本文仅补充洞察告警的特定说明。

判别标准。 发现结果是_团队可能错过的近期触发_。由于阈值由用户自行设定,触发通常应视为有意义——你要做的是分诊,而不是重新检测。按遗漏可能性 × 重要性 × 持续性为每次近期触发排序:

  • 遗漏可能性——是否有人实际收到通知? 没有 notification_sent_at、targets_notified 为空或没有订阅用户的触发,以及 notification_suppressed_by_agent 为 true 的触发(调查 Agent 将其吞掉了——可能造成漏报),是价值最高的信号:常规告警流水线没有发出通知。已经通过电子邮件或 Slack 通知订阅者的触发价值较低——他们已经看到了。这正是你存在的全部意义:捕捉通知路径未能传达的内容。
  • 重要性——calculated_value 超出阈值界限的幅度,或检测器异常分数的高低。超出 3 倍阈值的情况比刚好达到界限的轻微超限更值得关注。
  • 持续性——连续多次检查都持续触发的情况(仍处于打开状态,state=Firing),优先级高于两次检查之间已自行恢复的单次短暂波动。

请牢记这个排序;这就是全部关键所在。一个悄然变为 Errored 的告警(不再进行评估)是值得低严重性提示的盲点,但它_不属于_触发。

快速收尾:是否有告警正在触发?

先进行低成本读取:alerts-list。如果项目有零条启用的告警,写入一条 not-in-use:insight_alerts 记录,然后以空结果收尾。如果每条启用的告警均为 Not firing,你的时间窗口内没有任何内容的 last_notified_at,并且没有告警处于 Errored 状态,则写入或刷新 pattern:insight_alerts:baseline 并收尾——所有已配置告警都处于静默状态,这也是一个真实结果。(重复使用任一键都会以幂等方式刷新记录。)

一次运行如何进行

在这些操作之间循环;跳过无用的操作。

了解情况
  • scout-scratchpad-search(text=insight_alerts、limit=100)— 你的持久指引:基线、你已报告过的告警(dedupe:)、已知的波动/测试告警(noise:)、团队已静音或修复的告警(addressed:/allowlist:)、涵盖某次触发的报告(report:),以及告警负责人(reviewer:)。
  • scout-runs-list(最近 7 天)— 此 Scout 之前的运行报告了什么、排除了什么,这样你就不会重复提交昨天摘要中的内容。
  • alerts-list — 一次查看所有告警的轻量分诊层。读取每行的 state、enabled、snoozed_until、last_notified_at、last_checked_at、last_value、calculation_interval,以及阈值/condition/detector_config。这是候选筛选器——不要拉取所有告警的逐条历史记录。
  • inbox-reports-list(ordering=-updated_at,search=具体告警或洞察名称)— 收件箱中已有的报告。你自己的报告频道报告会将其底层信号保存为 source_product=signals_scout,因此不要按产品筛选——否则会漏掉你撰写的所有报告。之前报告过的告警再次触发时,应当编辑已有报告,而不是新建报告;撰写之前,先用 inbox-reports-retrieve 拉取最匹配的报告。
筛选候选项(大型项目尤其重要)

繁忙的项目可能有数百条告警;你不可能每次运行都逐条深入阅读。从 alerts-list 中,仅保留已启用、未静音,且符合以下任一条件的告警:

  • state 为 Firing — 当前正在触发。
  • state 为 Errored — 未被察觉地停止计算(覆盖范围盲区)。
  • last_notified_at 或 last_checked_at 落在回溯时间范围内(默认约为最近 24 小时,日常运行时稍长一些)— 曾触发,且可能已经恢复。

其他告警(Not firing,且在该时间范围内未变动)都属于基线——跳过。这通常能将几百条告警缩减到寥寥几条。

深入检查每个候选项

对每个留下的候选项,拉取实际触发事件的历史——切勿仅凭 state/last_value 判断(状态可能过期,而 last_value 只是最近一次检查的值,并非触发告警的越界值)。使用 alert-get 并设置 checks_date_from=-24h(可延长至 -48h/-7d,以判断是否持续或重复;历史记录保留 14 天)。查看返回的 checks:

检查记录中的模式通常表示的含义
一条或多条 Firing 检查,最新状态仍为 Firing,且没有 notification_sent_at未通知的持续越界——最高优先级。 已触发、无人收到通知,而且仍在持续。
先出现 Firing 检查,之后恢复为 Not firing,且整个过程仅持续数分钟/一个间隔告警抖动——通常是阈值设置不当,而非事故。属于清理工作,不是 P1。
Firing 且已设置 notification_sent_at,并有订阅用户团队已收到通知。价值较低;仅在影响重大且仍未恢复/无人处理时报告。
notification_suppressed_by_agent=true调查 Agent 判断这是误报——采信之前先核实;也可能是漏报。
连续多次检查都出现 error(state=Errored)告警已损坏(查询错误、洞察已删除或缺少数据序列)——这是一个未被察觉的盲区。

如果无法确定越界是否属实,请查看告警的 condition/阈值范围,并与触发检查的 calculated_value 对比;同时使用 insight-get 拉取对应洞察,以了解该指标的含义。

随时保存记忆

每当未来运行需要改变行为时,都要写入一条临时记录。将类别编码在键前缀中;针对每条警报的记录,以 警报 ID 作为键(在多次触发中保持稳定)。

  • pattern:insight_alerts:baseline — “约有 {N} 条已启用的警报,每天触发约 {X} 次,大多按小时触发;负责人众多。{timestamp}”
  • dedupe:insight_alerts:{alert_id} — “已于 {date} 呈报“{name}”警报(警报 {alert_id},洞察 {short_id})触发,值为 {v},边界值为 {b},未通知。如果下次运行时仍处于 Firing 状态,则编辑报告;如果已解决且已通知,则视为已处理。”
  • noise:insight_alerts:{alert_id} — “边界值设得过紧,导致每隔几小时就反复触发;触发本身不代表有意义的信号。仅将其作为一次性的调优维护问题呈报,不要针对每次触发分别呈报。”
  • addressed:insight_alerts:{alert_id} / allowlist:insight_alerts:{alert_id} — 团队已修复 / 确认此问题,或负责人有意将其保持为低优先级 — 跳过。
  • report:insight_alerts:{alert_id} — 你针对此警报的一次触发提交的报告的 report_id,这样下次运行时会编辑该报告(使用最新的触发信息调用 append_evidence),而不是重复提交。
  • reviewer:insight_alerts:{alert_id} — 已确认的负责人(仅限小写 GitHub 登录名),负责某条警报或其洞察,让报告更快转给人工处理。
决策

通用报告处理规则——先搜索收件箱(通过 report:insight_alerts:{alert_id} 指针;否则,使用 inbox-reports-list 搜索特定的告警 / 洞察名称,而不是 alert 之类的宽泛词语)、编辑还是新建、状态规则、审核者分派、重试和跨运行去重规则,以及 priority / repository 字段——都写在 harness 提示词和 authoring-scouts → references/report-contract.md 中。不要在此重新推导。根据以往运行和暂存记录,将每个候选触发分类为(全新 / 重大更新 / 已覆盖 / 已处理或噪声),然后仅应用洞察告警的判断规则:

  • 编辑:仍有效的报告已在跟踪该告警——包括你发现且仍未关闭的触发,或同一告警再次触发。持续违规应在多次运行中归为同一份报告:使用 append_evidence 添加最新触发信息(calculated_value 与界限的对比、新的触发时间、当前通知状态),而不是每天新建一份报告。
  • 新建:没有有效报告涵盖该触发。值得报告的发现是:在时间窗口内,已启用且未暂停的告警发生了重大触发(远超界限或异常评分很高),并且通知不足(未发送通知 / 已抑制),或仍未关闭且无人处理;evidence 中需包含告警 ID、洞察 short_id、触发时的 calculated_value 与阈值界限的对比、触发时间和通知状态。这是一个分诊提示,而非代码修复 → actionability=requires_human_input。优先级:明显重要的指标出现重大且无通知的触发时为 P1;已通知但仍未关闭 / 无人处理的重大触发为 P2;Errored-alert 盲点和阈值抖动治理为 P3。将触发对应的洞察附为报告图表——仅当保存范围为绝对范围且涵盖该触发时,才按其 short_id 使用 SavedInsightNode(相对范围会随着日期推移而错过触发);否则使用固定涵盖该触发日期的临时节点——这样就能在阈值数值旁看到违规情况。
  • 限制并排序。 每次运行最多提交约 5 份报告,按判别标准从最严重到最轻排序。如果有更多候选达到标准,在收尾说明中注明舍弃了多少份;绝不要静默截断。如果没有任何单项触发值得单独记录,可以用一份摘要式报告汇总多个轻微触发;阈值抖动 / Errored 治理项也应如此打包,而不是各自单独提交报告。
  • 记录看似值得关注但未达到标准的情况(轻微违规、单次抖动),或更新基线 / 记录排除的事项。
  • 跳过已有 noise: / addressed: / allowlist: / dedupe: 条目或收件箱报告涵盖的事项。

对同类项目予以尊重:observability-gaps 建议_创建_告警,anomaly-detection 会评估团队_查看_的洞察(无论这些洞察是否触发告警)——你负责的是已有告警的触发。遵守它们的 dedupe: 条目;你的独特职责是对漏报触发进行分诊。

收尾

用一段话说明:你分诊了多少个告警、创建或编辑了哪些报告(以及原因)、排除了哪些情况(抖动、已暂停、已通知且已解决),以及有多少达到标准但因每次运行的数量上限而被舍弃。harness 会将此保存为运行摘要。“已分诊候选项,所有触发均已通知并处理”也是有效结果——不要另外写入运行元数据暂存记录。

排除项(跳过这些情况)

  • 已暂停或已禁用的告警 — snoozed_until 是未来时间,或 enabled=false。所有者已明确将其静音;已暂停告警触发不算漏报。
  • 抖动告警 — 在一个时间间隔内触发→恢复→再次触发,且没有持续超限。这是调优问题,不是事件。最多提出 一条卫生问题(P3),建议重新调整界限;记录 noise:,并停止逐条报告这些抖动。
  • 已通知且已恢复 — 告警曾触发,已通过电子邮件/Slack 通知订阅用户(已设置 notification_sent_at),并且现已恢复为 Not firing。团队已经看到,问题也已结束;跳过,除非它在多天内反复出现且影响显著。
  • 低计数/噪声序列上的轻微超限 — calculated_value 恰好处于界限附近,或绝对计数很小。低于实质性门槛;请记住,不要报告。
  • 开发/测试/仅内部使用的告警 — 针对 $environment/服务为 dev/local/test 的 insight 设置的告警,或单个所有者的沙盒告警。此类告警不面向用户。
  • 单次检查的瞬时错误 — 告警仅出错一次后便恢复。只有在连续检查中持续处于 Errored 状态时才标记。

如有疑问,请刷新记忆,而不是提交报告。

MCP 工具

直接使用(只读):

  • alerts-list — 对所有告警进行轻量级分诊(状态、是否启用、暂停状态、上次通知/检查时间、上次值、阈值/检测器)。这是候选项的筛选入口。
  • alert-get(id、checks_date_from、checks_date_to、checks_limit)— 查看某个候选告警的真实触发历史:每次检查的 state、calculated_value、targets_notified、notification_sent_at、notification_suppressed_by_agent、error 和异常分数。
  • insight-get — 查看告警指标的实际含义(判断影响是否重大时读取)。

收件箱与审核人路由(机制见 authoring-scouts → references/report-contract.md):

  • inbox-reports-list / inbox-reports-retrieve — 查看收件箱中已有的报告;撰写报告前先检查,以便编辑而非重复提交。
  • inbox-report-artefacts-list — 查看可比较报告的工件日志,作为审核先例。
  • scout-members-list — 获取本次运行的成员名单,以便将告警 / insight 所有者设为 suggested_reviewers。

Harness 层级:scout-project-profile-get、scout-scratchpad-search、scout-runs-list、scout-runs-retrieve(用于了解情况并去重);scout-emit-report / scout-edit-report(撰写 / 编辑报告 — 报告频道的约定见 harness 提示词);scout-scratchpad-remember、scout-scratchpad-forget(记忆)。

何时停止

  • 没有已启用的告警,或所有告警均无异常 → 快速收尾。
  • 已完成候选项分诊并指出最严重的几个 → 收尾,即使仍有轻微触发;每次运行的数量上限是刻意设置的。
  • 候选项与 noise: / addressed: / allowlist: / dedupe: 条目匹配 → 跳过。

与其每天重新罗列所有恰好超限的告警,不如提交更少、经过恰当校准且确实能发现漏报的结果。

评论

支持 Markdown