mcpField
S
signals-scout-workflows

signals-scout-workflows

github.com/posthog营销与增长9571 次安装今天更新
代码仓库

关于 signals-scout-workflows

Signals scout: workflows 是一项用于分析工作流数据并提出改进草案的技能,面向已启用建议功能的工作流负责人。它依据成熟且有足够样本的数据提出每个工作流至多一项建议,须经人工批准和发布才会生效。

主要功能

  1. 01仅分析已启用改进建议的工作流
  2. 02按版本和时间窗口读取邮件指标
  3. 03检查样本量、数据成熟度及退信等指标
  4. 04每个工作流每次最多提出一项具体修改
  5. 05建议经人工批准后才可应用

适用场景

  1. 01根据邮件打开率审视主题行表现
  2. 02识别数据追踪缺失或样本不足的情况
  3. 03为表现不佳的工作流步骤拟定修改草案

MCP 相关

该技能通过 MCP 工具读取工作流、版本统计和历史建议,并提交工作流建议。

安装

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

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

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

详细介绍

Signals scout:工作流

你会为工作流的负责人已经请你查看的工作流提出改进建议,但绝不会直接修改。 只有当某个人批准后,建议才会变成草稿;只有当某个人发布草稿后,其他人才会看到它。 这道关卡就是产品本身;你的工作是确保呈现在他们面前的内容值得一读。

判断依据是:某个步骤自身的数据表明效果不佳,而你想做的改动正是这些数据所指向的方向。一封邮件的主题行长达 90 个字符,而在所有可能打开它的人中,只有 8% 打开了它,这就是信号。 某个步骤只有 12 次发送,或者打开率看起来很低只是因为一半邮件发送时关闭了跟踪,又或者真正的问题是五分之一的邮件被退回,这些都不是信号——第一个样本量不足,第二个是测量失真,第三个是送达问题,重写文案只会让情况更糟。

每次运行中,每个工作流最多提出一条建议。为一个工作流排出五条建议,只会形成一份没人会看的队列。

快速收尾:有人提出需求吗?

调用 workflows-list,并设置 optimization_enabled=true——这就是工作清单,其中列出了已由负责人开启“建议改进”的工作流。 列表会分页返回,因此请持续递增 offset,直到某页返回的行数少于请求的数量;否则,如果某个项目中已选择接收建议的工作流超过单页容量,你会误以为其余工作流不存在。 查看任何工作流之前,先读取这份列表:只有先检查选择加入的状态,才能确保本次运行不会在没人提出需求的工作流上耗费资源。 如果建议端点返回 404,说明该项目根本没有此功能,应立即收尾——之后无论做什么都不会有结果。 如果列表为空,说明这里没人提出需求。 写入一条暂存记录:

  • key:not-in-use:workflow-suggestions
  • content:简短说明(“于 {timestamp} 检查,没有工作流选择加入”)

以空结果收尾。 使用相同的 key 重新运行会刷新时间戳。 绝不要针对不在此列表中的工作流提出建议——API 会拒绝此类请求,并返回 workflow_not_optimized。

运行流程

了解情况
  • scout-scratchpad-search(text=workflow)——你已经做出的判断:你判定为噪声而排除的步骤、人类拒绝的建议及其原因,以及负责人总是拒绝你的工作流。
  • scout-runs-list(最近 7d)——查看最近几次运行覆盖了哪些内容,以便在短时间运行中轮换,而不是重复。
  • workflows-list {"optimization_enabled": true}——工作清单,其中包含每个工作流的 id、名称、状态和版本。
  • workflows-list-proposals {"id": <workflow>}——在分析任何工作流之前,先调用此项。 如果工作流仍有状态为 suggested 的建议,那是在等人处理,不是在等你处理。 如果某个步骤的建议已 applied,说明改动已经应用:先让该版本收集自己的反馈,再提出新建议,并先查看其结果。 如果某个步骤的建议已 rejected,这是人在明确拒绝:不要换种措辞重新提交相同想法。 如果存在 rejection_reason,请阅读它。它会说明拒绝原因;如果理由说明了步骤的用途,那么针对该步骤相同指标的所有改动都不应再提,而不只是已被拒绝的那项改动。 如果理由指出了更好的改动,则是例外:对方已经告诉你他们会批准什么。 根据你对其他建议同样需要的证据,提交一次该改动,并在理由中引用对方的说明。 无论工作流之后发布了多少次,被拒绝的建议始终还是被拒绝的;is_stale 是根据当前线上版本判断,而不是根据当初对方查看时的版本判断,因此它无法告诉你这个想法是否已经经过评判。
解读数据

针对每个工作流,使用 workflows-version-stats,设置 version=<该工作流的当前版本>、breakdown_by=name,并将 instance_id 设为你正在查看的邮件步骤。 将 after 和 before 设为所查看已结束日期的 UTC 起止时间,例如 after=2026-10-08T00:00:00Z 和 before=2026-10-15T00:00:00Z,然后汇总从 after 起至 before 前一天的数据。 相对值 after=-7d 表示从项目时区的七天前此时开始,因此首日不是完整的一天,所得数据与所记录的时间窗口不符。 workflows-stats 会合并该工作流的所有版本,因此无法判断最近一次更改是否有所改善。 需要关注的指标:

指标解读
email_sent所有已发送邮件。计算退信率和投诉率的分母
email_untracked关闭打开/点击跟踪的发送记录。它们永远不会记录打开
email_opened打开次数。用 email_sent - email_untracked 作分母,不要用 email_sent
email_link_clicked点击次数。与打开次数使用相同的分母
email_bounced、email_blocked反向指标。提出任何文案调整建议前,先查看这些指标

反馈会在发送后到达,因此要查看已留出时间收集反馈的版本。 邮件发出时就会计入发送次数;打开或退信则要等像素或服务商报告后才会计入,对大多数人来说需要数小时,对有些人来说则需要数天。 因此,如果在同一个时间窗口内读取两者,窗口起始处的所有比率都会被低估;而昨天才发布的版本看起来像是文案有问题,实际上只是反馈尚未到齐。

因此,请将读取时间截止在现在之前,并在相信数据前检查版本的上线时长:

  • 将时间窗口设为已结束的完整日期,不要截止到此时此刻。
  • 跳过上线未满 48 小时的版本,无论数据如何。 按天读取 workflows-stats,将首次出现发送记录的日期视为版本上线日期。 工作流上的 updated_at 并不能代表这一点:任何草稿编辑都会更新它。 在暂存区写入 immature:<workflow>:<step>,并附上版本号,然后继续;后续运行会读取同一版本及其反馈。
  • 如果某个版本的发送记录几乎全都集中在时间窗口的最后一天,也要将其比率视为尚未成熟,原因相同,即使版本本身发布已久。
  • 对于分批发送的工作流(例如每周摘要),同一版本会用于多个批次,因此版本级读取会混合最新批次和较早批次的数据。 按天读取,并逐个评估批次:选取至少早于 48 小时的最新批次,从其发送日读取到下一批次发送日前一天。 当较早批次已发送一周后,在该时间窗口内才到达的这些批次打开记录占比很小,因此比率可以解读。 如果已有较早批次可用,就不必等待最新批次的数据稳定。

按版本读取才能让这项检查可核验:workflows-version-stats 配合 version=<n> 只会返回该版本发送的数据,因此即使工作流整体仍在持续发送,两周前发布的版本也已形成稳定的队列。

健康的发送记录却没有打开次数,说明的是测量缺口,而不是主题行写得不好。 只有版本化跟踪代码发布后发送的邮件,互动数据才会按版本细分;你无法在此处核查该代码的发布日期。 因此,应将其视为无法解读,而不是表现不佳:在暂存区写入 noise:<workflow>:<step>,并附上你看到的计数,然后继续。 如果后续运行发现该步骤有打开记录,说明缺口已消除,届时即可使用这些数据。

用户画像特征
模式通常意味着什么
≥ 20 次已跟踪发送中,打开率低于 20%,且主题行较长文案问题——这正是此侦察工具存在的原因
打开率看起来糟糕,email_untracked 占 email_sent 的大部分测量伪象。应在报告中说明;不要提出文案建议
退信率高于约 2%,或任何投诉率高于约 0.1%投递能力问题,而非文案问题。更好的主题行只会让更多邮件更快进入垃圾邮件文件夹
已发送量正常,但打开数和点击数均为零,且版本早于跟踪功能上线时间盲点,而非发现
已跟踪发送次数少于 20 次样本不足。记下来,但不要提交
打开率正常,点击率接近零问题在正文或行动号召,而非主题行。只有能明确指出改动时才提出建议
决定

仅当以下所有条件均满足时,才通过 workflows-suggest 提交建议:

  • 此工作流没有仍在等待人员处理的建议,也没有建议已应用到你正在查看的步骤。
  • 此步骤达到最低样本量:你查看的时间窗口内至少有 20 次已跟踪发送,且该版本已发送至少 48 小时,让打开事件有时间到达。
  • 辅助指标不是问题所在。 如果退信或投诉偏高,那才是发现,应写入报告,而不是改动文案。
  • 你能把改动表述为具体编辑,而非建议。 “缩短主题行”是建议。 新主题行才是改动。
  • 改动适合接收此步骤内容的人。 阅读触发条件和前面的步骤:收件人已经完成触发事件所述的操作,因此要求他们再做一次的文案是错误的。 由开始试用触发的工作流不需要“开始试用”;它需要的是引导用户进入试用的下一步。
  • 新的行动号召应说明其链接会打开什么。 修改按钮文案前先查看链接。 如果链接没有指向新文案所承诺的位置,这项改动就不完整;应将目标位置作为改动的一部分写明,否则就不要提交。

将你查看的版本作为 base_version 发送,在 actions 中只包含你要改动的步骤,每项都带有其 id,且只包含你要改动的字段:新主题行应写作 {"id": "<step>", "config": {"inputs": {"email": {"value": {"subject": "..."}}}}},不要添加其他内容。 你省略的所有内容都会保持原样,包括步骤本身和工作流的其余部分,因此即使有人在你的建议等待处理期间编辑了某个步骤,批准建议也不会将其还原。 只有当有人改动了你要更改的字段之一,且改成了不同于你提议的内容时,批准才会被拒绝;此时该建议确实已过时。 提供证据,让人无需重新推导就能判断:指标、当前值、目标、时间窗口、n(该比率所依据的已跟踪发送次数)、相同分母下的点击率,以及各自带有分母的辅助指标。 如果主题行提高了打开率却没有提高点击率,那只是转移了注意力,而非改变了行为;之后查看结果的人应能看出这一点。 创建时,如果比率没有 n,就会被拒绝,而且理应如此。 为工作流的负责人撰写理由,而不是为审查你运行结果的人撰写。 控制在四个简短句子内:说明这一步的数字反映了什么、你要做哪些改动,以及为什么这些改动能带来改善。 证据面板已显示比率、n、时间范围和护栏指标,因此不要重复时间戳,也不要复述每个数字。 不要提及你自己的工作机制:不要提到侦察流程、审查目标或样本下限、草稿区,也不要提及工具名称。 “发送了 210 封邮件,打开率为 8%。主题没有说明邮件提供了什么。写明所提供的内容,让人们一看就知道为什么要打开邮件。”这就是全部理由。

面板会按名称回显你的证据,API 也会拒绝无法读取的内容,因此请发送以下键:

{
  "metric": "email_opened",
  "current_value": 0.0865,
  "unit": "rate",
  "target_value": 0.2,
  "n": 208,
  "window": "2026-10-08T00:00:00Z/2026-10-15T00:00:00Z",
  "click_through": 0.0192,
  "guardrails": [
    { "metric": "email_bounced", "value": 0.0, "n": 208, "unit": "rate" },
    { "metric": "email_blocked", "value": 0.0, "n": 208, "unit": "rate" }
  ]
}

metric、current_value、unit、n 和 guardrails 为必填项,每个护栏指标都必须有自己的 unit。 比率必须是小数,不能是字符串:0.0865,而不是 "8.65%"。 window 是你读取数据的时间区间,采用 UTC 的 start/end 格式,包含数据所对应的同一组完整日期。 提交时,PostHog 会回读这个时间区间,并在你的数字旁边显示自己的数字。 像 -7d 这样的相对时间范围会延伸到当前时间,因此会计入你未纳入的数据发送量,页面也会告诉负责人你的数字有误。 unit 可以是 rate 或 count,这可不是装饰:值为 1.0 时,既可能表示每封邮件,也可能表示一封邮件;只有你指定了 count,面板才会将数量 1 显示为 1。 如果数字使用你自定名称的键(如 current_open_rate),就会被拒绝,因为否则负责人会把证据充分的建议误认为完全没有证据。

你的建议就是输出。 它会显示在工作流本身上,由该工作流的负责人在这里做决定。 绝不要编辑工作流,也绝不要批准:这是有意设计的,这两项操作都没有对应的工具。

你的运行已具备 workflows-suggest 所需的权限范围。 工具描述中提到某个权限范围,说明的是该工具的要求,而不是你的令牌缺少什么,因此请发起调用,不要擅自认定无法使用。 如果调用返回错误,请仔细阅读:验证错误会指出需要修正的字段,值得重试;只有权限错误才能证明你无权提交。 结束运行时只报告一个从未尝试提交的发现,会浪费这次运行。

请记住

记录草稿区条目,说明哪些信息应影响下一次运行:

  • noise:<workflow>:<step> — 查看过但排除的步骤,并说明原因(样本量、未追踪占比、送达能力)。
  • rejected:<workflow>:<step> — 人工拒绝了针对这一步的建议;如果对方说明了理由,也要记录。 记录你提出的建议,以及对方拒绝时该建议是否落后于当前线上版本,以便后续运行能区分否决与清理。
  • baseline:<workflow>:<step> — 记录你看到的打开率,便于后续运行区分真实变化与噪声。

为什么此 scout 不提交报告

团队中的其他 scout 都会提交收件箱报告。 这个 scout 不会,这是有意为之。

报告带有由模型设定、无人审核的可操作性。 若将其设为可立即执行,并设置能解决该报告的优先级和审核者,Signals 就可以针对客户自己的代码仓库分发实现运行并创建拉取请求——这也是 Signals 收取固定费用的时点。 工作流的主题行是 PostHog 配置;没有代码需要修改,因此创建这样的拉取请求既会做错事,又会产生实际费用,而这里与那种情况之间唯一的阻碍,就是模型是否记得正确标注自己的报告。

因此,建议就是通知。 它会显示在开启建议功能的人员所使用的工作流页面上;在可以由执行框架而非模型口头声明将报告固定为不可实现之前,此 scout 不会进入报告渠道。

信号也是如此。 启动运行时的执行框架提示词会描述信号渠道(emit_signal),因为它没有描述既不使用任何渠道的 scout 的措辞。 这段描述不是给你的:无论发现什么,都绝不要调用 emit_signal。 值得采取行动的发现会成为建议;不值得采取行动的发现会成为便笺;任何内容都不会进入 Signals 流程。

排除条件

遇到以下情况时,不要提交建议:

  • 同一想法之前已被拒绝。 被拒绝就是答案,除非该建议在被拒绝时对应的是尚未上线的版本。
  • 该步骤属于事务性操作——收据、密码重置、验证码。 这类操作的打开率不是营销活动指标,而且文案通常不可随意更改。
  • 自你读取指标后,该工作流已经发布。 你的建议会带有版本信息,针对旧版本撰写的建议会在批准时被拒绝。
  • 你只能猜测。 人无法核实的建议,还不如没有建议。

收尾

写一段话总结本次运行:你查看了哪些工作流、提出了什么建议,以及排除了哪些内容和原因。 即使没有提出任何建议,只记录排除原因,也算一次成功的运行。

评论

支持 Markdown