关于 authoring-scouts
此技能指导 Agent 为特定 PostHog 项目调整现有 Signals scout,或从头编写新的定时 scout。内容涵盖项目调研、提示词设计、报告输出方式及测试与配置路径。
主要功能
- 01评估项目数据与现有 scout
- 02调整规范 scout 或新建 scout
- 03选择报告输出渠道与配置路径
- 04依据模式编写 scout 提示词
- 05测试提示词、模型与推理设置
- 06设置报告检查与跨运行记忆
适用场景
- 01为项目数据定制 scout
- 02为未覆盖的数据源编写监测逻辑
- 03比较提示词或模型变体
- 04调整 scout 的运行策略与输出
MCP 相关
该技能通过 PostHog MCP 工具读取项目资料、scout 配置和收件箱,并创建或更新 scout、提示词及运行配置。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ posthog/ ai-plugin --skill authoring-scouts安装后在 Claude Code 中输入/authoring-scouts确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/dedupe-and-memory.mdlifecycle-and-testing.mdreport-checks.mdreport-contract.mdscheduled-precheck.mdscout-anatomy.mdscout-patterns.md详细介绍
编写 Signals 侦察器
侦察器是一种按计划定时唤醒的 Agent,它会查看一个 PostHog 项目,判断哪些内容确实值得展示,并将其作为报告写入 Signals 收件箱;如果没有值得展示的内容,则会结束运行,这也是一种有效结果。 PostHog 提供了一组规范侦察器(一个跨产品通用侦察器,以及针对各个产品界面的专用侦察器)。 这项技能可帮助你和你的 Agent 根据特定项目调整这些规范侦察器,或针对这组侦察器未覆盖的用途从头编写新的侦察器。
生成报告的侦察器会通过报告渠道输出:它会在 frontmatter 的 allowed_tools 中列出 emit_report / edit_report,并直接完整编写或编辑收件箱报告,一条侦察结果对应一份报告。
规范侦察器大多采用这种方式运行,所有新编写的报告生成型侦察器也都应如此——编写时请加入 allowed_tools opt-in。
输出为产品界面内容的侦察器(例如工作流页面上的建议)则不包含这两个工具;请参阅具有特定产品输出的侦察器。
输出最终_送达_何处是单独的、针对每个侦察器的配置决策:报告会进入 Signals 收件箱,同一份报告也可以同时发送到 Slack 频道或私信(在 Run posture 下配置 output_destinations)——因此,不要因为用户想在 Slack 中接收结果,就排除某个侦察器。
(历史上存在一种会发出信号的渠道——由管道整合的弱 emit-signal 发现结果——供从未选择加入新机制的侦察器使用,但该渠道已弃用:不要用它编写新的侦察器,应为旧侦察器启用新机制,而不是继续扩展旧渠道。)
侦察器是一个包含 SignalScoutConfig 的 LLMSkill。
运行框架会将正文原样作为 Agent 的系统提示词加载,并按需逐步读取其中捆绑的参考文件。
配置行决定一项技能是否为侦察器。 任何有效的技能名称都可以使用,因此 signals-scout- 前缀是可选的。
该前缀只影响一件事:协调器会对 signals-scout-* 进行 glob 匹配,为尚无配置的技能自动注册配置。
使用其他名称的技能需要在创建技能时一并创建其配置,而 scout-create 正是用于此操作的工具。
写作前的准备工作
不要脱离实际项目,抽象地编写 scout。
先以目标项目为依据——scout 的效果取决于它与所监测数据的契合度。
(scout 工具最近从 signals-scout-* 重命名为 scout-*;如果 scout-* 名称返回未知,服务可能仍以旧版 signals-scout-* 名称提供该工具——请搜索工具目录,并调用返回的名称。)
- 阅读项目。
posthog:scout-project-profile-get会返回 scout 冷启动时使用的确定性快照:正在使用的产品、包含覆盖率/突发指标的热门事件、集成,以及现有收件箱计数。 如果 scout 监测的是特定事件,请确认该事件存在,并使用posthog:read-data-schema检查其结构。 监测项目未采集的事件,scout 一开始就注定无效。 - 查看现有运行项。
posthog:scout-config-list会列出项目上所有现有 scout 及其运行计划、enabled和emit状态,还会列出每个 scout 的description(取自技能的 frontmatter),以便你无需加载正文就能了解 scout 监测的内容。 不要重复覆盖已有规范 scout 负责的范围——改造现有 scout。 - 阅读最接近的规范 scout。 它是你的模板和参考格式。
使用
posthog:skill-get {"skill_name": "signals-scout-<x>"}(按团队划分的条目)获取它,或在仓库的products/signals/skills/signals-scout-*/中阅读。 通用 scout(signals-scout-general)是宽泛场景的模板;如果你的范围属于特定领域,请选择最贴近该场景的专用 scout——使用posthog:skill-list {"search": "signals-scout"}列出当前可用的 scout(大多数产品场景都有专用 scout:错误追踪、日志、AI 可观测性、实验、功能标志、会话回放、Web 分析、调查等)。 - 浏览收件箱。
posthog:inbox-reports-list会显示实际收到的报告——调整你的 scout,让它提供有效信号,而不是制造噪声。
选择路径
这里有两个独立的决策:要构建什么,以及它要放在哪里。
要构建什么
| 情况 | 方法 |
|---|---|
| 某个规范 scout 已经很接近,但范围太广/噪声太多/缺少适用于此项目的排除条件 | 改造它——缩小范围、添加排除条件、重新调整阈值。 |
| 你想监测规范 scout 都未覆盖的场景(自定义事件、特定产品漏斗) | 从头创建 scout——以最接近的规范 scout 为脚手架,替换领域判别条件和探索模式。 |
| 你想在应用更改前比较提示词、模型或推理投入 | 私有试用——保留已保存的 scout,检查其评估标准,并通过下方的测试循环比较不同版本。 |
| 你只想更改 scout 的运行_时间_/条件 | 无需编写——只需调整配置(参见“运行状态”)。 |
| 你有针对 scout 的临时反馈、参考信息或短期上下文 | 无需编写——留下注释(参见“使用注释进行引导”)。 |
适用场景
| 路径 | 机制 | 适用场景 |
|---|---|---|
| 每个团队(常见用户路径) | 通过 posthog:scout-create 创建一个可运行的新 scout;之后通过 posthog:skill-update / -file-create 编辑其提示词或文件,并通过 posthog:scout-config-update 调整其运行时配置。 | 为单个项目定制。运行框架会在下一次 tick 时纳入该行;规范同步会保留你已编辑(“已分化”)的行。 |
| 规范版本(PostHog 贡献者) | 编辑 products/signals/skills/signals-scout-*/ 下的文件,运行 lint/build,并提交 PR。 | 为所有已加入的项目改进 scout。lazy_seed 会在下一次 tick 时将其同步到所有已加入的团队。 |
就地调整的权衡:编辑适用于你团队的规范 scout 行,会将其标记为已分化——你将不再收到该 scout 的上游改进。
如果你只需要增加一项行为,建议编写一个名称不同的新 scout(signals-scout-<your-scope>),并保留规范版本不变。
参见 references/lifecycle-and-testing.md,了解具体的 skills-store 调用、build/lint 命令,以及播种机制的工作方式。
编写 scout
首先选择类型。
references/scout-patterns.md 是一本指南,介绍 scout 常见的参考架构——异常监测、存活状态/缺失监测、零结果/未满足需求、监视列表探索/利用、跨产品关联、推荐/缺口、由数仓提供数据的来源、自定义单事件、开放文本主题、对抗/滥用集中度、外部工具/代码、状态∩代码交集、自定义问题跟踪器/工作队列、每日摘要/汇总、对预检测流进行分诊、第一人称自用/探测、周期性测量/LLM 评判、维护者/管理者、所有者范围内的手册/队列、触发器到简报的丰富化、调度器/活动、舰队元 scout/审查者——每种类型都对应一个规范 scout,或一个经过验证、可作为脚手架复制的自定义类型。
其中还强调了一个关键点:scout 可以监测 PostHog 摄取到数据仓库的任何来源,而不仅仅是分析事件(例如 Slack 频道同步、计费系统、CRM、支持收件箱),以及沙盒可访问的外部系统、其他 Agent 的输出,乃至 scout 集群本身。
如果某个内置信号来源已涵盖相关范围(GitHub 和 Linear 问题),问题跟踪器模式也会说明该来源的适用边界,以及 scout 从何处开始发挥价值。
scout 不必止步于描述修复方案:维护者/管理者模式说明了持有 write_scopes 的 scout 如何自行维护一组仪表板、告警、数仓视图或扫描器提示词,并通过分级写入机制明确哪些变更会自动应用、哪些会验证并报告,以及哪些会交由人工处理。
找到最接近的模式,然后编写正文。
遵循 references/scout-anatomy.md——其中包含 frontmatter 架构(包括每个生成报告的 scout 都必须选择加入的 allowed_tools 报告渠道;具有特定产品输出的 scout 不需要此项)、规范的正文结构(快速收尾 → 定向 → 领域判别 → 探索模式 → 保存记忆 → 决策 → 排除条件 → 收尾)、精简正文规则,以及适用于专业 scout 和通用 scout 的可直接复制骨架模板。
正文应以功能为先。 正文是一份提示词,运行时每次都会完整读取,并且在 scout 的整个生命周期中都会如此——因此正文只说明 scout 关注什么以及如何做出判断,不写其他内容。以下四类内容不应出现在正文中:
- 不写推出状态。 预览标志、抢先体验门槛、“最近更名”的工具、逐个 scout 迁移的端口。这些内容本月属实,下个月就可能误导读者,而每次运行都无法判断哪种情况适用。写明 scout 当前应遵循的行为;如果某项功能可能不可用,就说明运行时如何判断,而不是何时会推出。
- 不写待办事项。 计划中的工作、尚不存在的字段、有人打算新增的类别。运行无法据此采取行动,只会消耗令牌,并让运行误以为应该等待某项功能。
- 不写仅适用于某个项目的事实。 只在一个项目中存在的指标、仪表板、事件、 ID 或审核者。规范的 scout 会部署到每个项目,因此某个项目中的事实对几乎所有运行都不适用。提及可选产品时,应说明运行如何判断项目是否使用该产品,绝不要假设项目一定在使用。
- 不重复描述框架机制。 报告渠道约定、运行门控和收尾格式都来自框架提示词,每个报告渠道 scout 都会收到。若在正文中重复,内容可能与实际规则不一致,导致运行同时保留同一规则的两个版本。正文只保留 scout 自身领域的描述。
同样四类内容也不应出现在随附参考资料中:运行时也会读取这些资料,因此其中的推出状态或待办事项不能比正文更多。
整支 scout 队伍都会依据两份工艺参考资料进行判断——优秀 scout 的决策和记忆部分都以它们为基础,因此撰写这些部分前请先阅读:
references/report-contract.md——报告工具(scout-emit-report/scout-edit-report)、报告标准(仅当你愿意全程负责某项发现时才亲自撰写)、suggested_reviewers路由、通过report_id去重的规范(渠道并非幂等——撰写报告前,先通过原生的inbox-reports-list/inbox-reports-retrieve对照现有报告),以及已接受的注意事项:后续流水线可能会改写已撰写的标题或摘要。 这决定了你的 scout 如何判断哪些发现达到标准以及如何提交报告。references/dedupe-and-memory.md——四态分类器(全新 / 重大更新 / 已涵盖 / 已处理或无关噪声)、暂存记事本的键前缀词汇,以及跨项目噪声模式。 这决定了你的 scout 如何避免重复提交,以及如何从每次运行中学习。references/report-checks.md——scout 附加到报告上的后续检查,以便之后衡量“修复是否有效?”,而不是依赖记忆。 这决定了你的 scout 在有人采取行动后,如何跟进某项发现。
报告回顾的是过去;检查则面向未来——它是一项预期及其测试时间,通过 scout-report-check-create 写入报告。
如果你的 scout 发现的问题属于修复效果会在之后的数据中显现的类型,就为它添加检查部分。
正文中应包含三条规则,其余内容见参考资料:
- 每次都先列出报告中已有的检查项(
scout-report-check-list)。针对同一主张的待处理检查项会让新增检查变成噪声,而且一份报告最多只能有五个待处理检查项。 - 只要一个数字就能判定主张,且事件或操作序列能够提供该数字,就使用
metric_threshold。 协调器会自行测量,无需运行 scout。 - 如果无法用单个数字判定,或该数字不在事件数据中,就使用
agent——例如日志速率、效果体现在触发的实体而非数量上的修复,以及需要读取堆栈跟踪才能判断的主张。
任何 scout 最重要的设计决策,是它的信号与噪声判别器——一种低成本的画像形状读取方式,用来区分「值得调查」和「基线」。
对于错误跟踪,判别器是 count 与 distinct_users 的比值;对于 CSP,则是覆盖范围,而非原始数量。
你的新 scout 需要有自己的判别器。
请在正文顶部附近明确命名,以便每次运行都以它为依据。
(唯一的例外是:结构化输出通道上的测量型 scout不设门槛——它会对每个抽样项应用一套评分规则,而这套规则取代判别器,成为需要命名、实际试用并校准的设计重点。参见 references/scout-patterns.md 中反复出现的测量型/LLM 评审模式。)
另一个设计考量适用于指标型 scout——它会对一个具名且可复用的度量进行评分、排序或报告。该度量可以是业务指标(MRR、流失风险、使用收入、激活),也可以是每次运行时计算的运营遥测指标,用于监控或报告(每次运行成本、失败率或错误率、延迟、吞吐量)。
如果项目已有该度量的获批指标(metric-list 会显示已有指标),请在正文中注明该指标,并使用 data-catalog-metric-run 运行,以确保 scout 的数值与团队现有的报告口径一致。
运行方式(配置)
scout 的运行计划和输出行为保存在其 SignalScoutConfig 中,与技能正文分开。
对于全新 scout,请在调用 posthog:scout-create 时通过嵌套的 config 对象传入这些设置,包括在 scout 首次运行前将其创建为禁用或试运行模式。
创建 scout 来测试某个想法时,请设置 config.enabled=false,以免定时运行干扰测试。
该端点会原子化地创建技能和配置,始终让 scout 加入报告通道,并在重试相同定义时安全地重新应用配置字段。
具有特定于产品的输出的 scout 必须关闭报告通道,因此请改用 skill-create 和 scout-config-create 创建;参见具有特定于产品的输出的 Scouts。
否则,协调器会在下一个运行周期(最长约 30 分钟)自动注册一个启用的配置,并采用默认的每 24 小时运行一次的计划。
对于现有 scout,请使用 posthog:scout-config-update 调整配置(通过 -config-list 查找 id):
run_interval_minutes— 30 到 43200。 默认值为 1440(每 24 小时一次)。 提高此值可降低话多或成本高的 scout 的运行频率。run_cron_schedule:五字段 cron 表达式('30 9 * * *'、'0 9 * * 1-5'),按项目时区计算;每次运行间隔必须至少为 30 分钟。 设置后,它优先于run_interval_minutes,因此要降低使用 cron 的 scout 的运行频率,必须修改或清除 cron(设为null可恢复为滚动间隔)。 新建或编辑的计划以编辑时间为基准,等待下一个时段,而不是补跑已经错过的时段。 当运行需要落在特定的钟点时,可以使用它:例如在站会前生成摘要,或仅在工作日监控。- 定时运行会在一个时间窗口内开始,而不是精确到某一分钟。
每个 scout 在该窗口内都有固定偏移,因此每次运行的间隔保持不变。
使用 cron 的 scout 会在 cron 时间后的 20 分钟内开始,因此
0 9 * * *scout 每天都会在 9:00 到 9:20 之间的同一分钟开始。 使用间隔的 scout 会在同一个 30 分钟协调器周期内开始,last_run_at记录的是周期时间,而不是开始时间。 scout 的首次运行、手动运行、工作流运行和报告检查运行会立即开始。 解释或编写计划时,请将时间描述为一个窗口。 enabled—false会完全暂停 scout(协调器会跳过它)。precheck_query— 默认为 null:定时运行开始前执行的 HogQLSELECT查询,其中包含{since}、{now}和{interval_minutes}占位符。 如果查询没有返回行,或返回一行且只有一个值为 false 的结果(例如count()为零),则跳过运行,不会创建运行记录或沙盒。任何其他结果都会启动运行,且返回的行会进入运行提示词。查询出错也会启动运行。 只有定时运行会执行此项:手动运行、工作流运行或报告检查运行始终会启动。 如果 scout 大多数周期都无事可做,请设置此项。保存前请使用posthog:scout-config-precheck-test测试查询,因为定时检查以 scout 的执行用户身份运行,而试运行以你的身份运行。 规范 scout 可以在scout-precheck-queryfrontmatter 中提供默认值。precheck_query会覆盖该默认值,设为 null 可恢复默认值,而precheck_disabled: true会同时关闭两者。 完整步骤、占位符语义,以及如何排查没有运行记录的周期,请参阅references/scheduled-precheck.md。emit— 默认值为true:scout 会将报告直接写入收件箱。 设置emit=false(试运行),可查看普通运行的推理过程,而不将报告发布到收件箱。 私有试用会分别捕获报告和记忆;即使源 scout 已暂停或设为emit=false,也可以使用。network_access— 默认值为trusted:scout 的沙盒只能访问平台的可信域名允许列表(PostHog、GitHub、常见软件包注册表),这足以覆盖 MCP 循环和gh,但会阻止其他所有访问。 如果 scout 的技能需要读取任意外部网站,例如文档、arxiv.org 上的论文或供应商状态页面,请设为full。 此设置从 scout 的下次运行起生效,变更会记录在活动日志中。auto_pause_exempt— 默认值为false。 如果没有人互动 scout 的报告(未打开、评分或采取操作——云端 Web 收件箱会记录阅读行为;其他客户端目前还不会),系统会先发出警告,然后自动暂停它(pause_reason=ignored)——每次运行都会消耗一个沙盒 Agent,因此不应让无人使用其输出的 scout 永远运行。仅仅安静的 scout 只会被标记(pause_reason=no_output,此警告不会导致暂停),因为监控型 scout 的任务可能本来就是保持安静。-config-list会将警告显示为status=pending_pause,将暂停显示为status=paused_by_system;再次设置enabled=true会恢复 scout,并开启新的宽限期,之后系统才会再次评估。 如果 watchdog scout 的全部职责就是保持安静,请预先设置auto_pause_exempt=true,这样它甚至不会被标记为安静。write_scopes— 默认值为["notebook:write"]:scout 会读取项目,并将发现、记忆和笔记本写入项目。notebook:write可访问项目中的每个笔记本,不仅限于 scout 创建的笔记本。对于除了发现和记忆之外不应写入任何内容的 scout,请发送[](或从列表中移除此项)。与其他权限范围不同,即使运行的作者无法再解析,该权限仍会保留,并使 scout 以另一名项目成员的身份操作。 如果 scout 的职责是维护某项内容,而不只是描述会如何更改,请授予它dashboard:write、insight:write、annotation:write、alert:write、customer_task:write、llm_skill:write、warehouse_view:write、warehouse_table:write、replay_scanner:write、canvas:write或experiment:write。 此类 scout 的正文应遵循references/scout-patterns.md中的维护者/管理者模式:精选清单、写入流程(执行并记录、执行并验证后报告、交由人工处理)、每次运行的变更上限,以及列出所有已更改对象的滚动维护报告。 每个权限范围都面向整个项目,并涵盖相应类型的所有对象的更新和删除,不仅限于 scout 创建的对象;因此,只授予 scout 正文实际涉及的权限,并在正文中说明它可以更改什么以及何时可以更改。llm_skill:write是需要格外谨慎的权限:自定义 scout 本身也是存储中的技能,因此持有此权限的 scout 可以编辑同级 scout 的正文,甚至编辑自身运行所依据的正文。只有在 scout 的职责确实是维护一组技能时才授予此权限;请在正文中列出这些技能,并说明除非职责就是维护 scout,否则不得修改 scout。warehouse_view:write和warehouse_table:write是有意分开的:负责维护一组视图的 scout 不需要同时创建表。只有在 scout 同时维护两者时才授予这两个权限。replay_scanner:write允许维护扫描器。创建、复制或启用扫描器,以及更改已启用扫描器的目标、采样或模型前,scout 必须设置credit_limit。它不能清除限制、删除扫描器,也不能启动手动扫描、重试或回填。使用enabled: false停止扫描器并保留其观测结果。只有在记录明确的用户判定时才更改共享评分,因为评分会影响扫描器对后续会话的判断。customer_task:write涵盖项目中的所有 Customer analytics 任务,包括分配给其他人的任务:创建、更新(状态、截止日期、负责人)、归档和恢复已归档任务,但不包括删除。请在正文中说明 scout 负责哪些人的任务,以及是否可以重新分配任务。 Customer analytics 任务仍受customer-analytics-customer-tasks功能标志控制。未启用该功能标志的项目不提供任务工具,授予此权限也不会生效,因此不要在此类项目中授予该权限。canvas:write可访问公开空间中的所有画布,以及执行用户创建的所有画布:发布、布局、运行时状态,以及对执行用户自己画布的软删除。scout 运行无法创建画布,因为 scout 任务没有可用于存放画布的空间。请先创建画布,在正文中注明其 id,并遵循references/scout-patterns.md中的单画布维护者变体。每个已发布版本都会记录运行任务,因此版本历史会显示由哪次运行发布。experiment:write是唯一会改变终端用户所见内容的权限。它可访问项目中的所有实验:创建、编辑、复制、归档、启动、暂停、恢复、结束和重置。启动和暂停会开启或关闭关联的功能标志。scout 不能删除实验、将实验复制到其他项目、迁移旧版实验,也不能打开功能标志清理拉取请求。scout 目前无法持有feature_flag:write,因此实验启动或其功能标志开启后,scout 也无法发布变体,或更改变体、发布比例或保留组。因此,scout 可以设置草稿和结束实验,而由人员发布实验。请在正文中说明 scout 负责哪些实验,以及无需人员要求即可执行哪些生命周期变更。 只有 scout 运行的执行用户(即其作者)或项目管理员可以设置此字段,授予权限的操作会记录在活动日志中。受限范围的 API 密钥必须自身持有所授予的每项权限范围。 获得授权的 scout 会在运行提示词中获知可更改的对象,并被要求在结束时列出每项变更。授权只是权限上限:执行用户自身的权限仍适用于每个对象;如果写入被拒绝,scout 会报告拒绝情况,而不会重试。 试运行(emit: false)不会持有此授权,因此可以预览 scout,而不会让它更改任何内容。 要审核运行后的写入,请参阅working-with-scouts中的“审核 scout 的变更”:变更会记录在 scout 执行用户的活动日志下,并标记为“via MCP”,但记录行不会显示 scout 或运行的名称。 此设置从 scout 的下次运行起生效。output_destinations— 默认为无。 将 Slack 添加到现有 scout 时,请先读取output_destinations,然后发送保留所有键的完整对象。更新会替换整个对象,因此只发送slack会移除现有的webhook指针。 将slack设置为向 Slack 和收件箱发送 scout 发出的每份已呈现报告(ready或pending_input);判定器抑制的报告按设计不会发送到 Slack:指定工作区的integration_id,再指定channel(channel_id|#channel-name)或最多五个接收私信的users(member_id|@display-name),两者不能同时设置。 受限范围的 API 密钥或 OAuth 令牌除了signal_scout:write外,还需要integration:read和task:read(或相应的写入权限范围)才能设置slack;权限范围不足的凭据会收到权限错误。thread_reports: true会先以简短的引导消息发布报告,再根据摘要中的章节标签将其余内容拆分为回复,以免长报告被截断;它不会改变发现内容的发布方式。 Slack 投递会将该 scout 的所有输出直接发送过去——没有优先级筛选,也不经过审核者路由——因此适合标准已很严格的 scout,而不适合仍在校准中的话多型 scout。 报告发送到 Slack 的 scout 也不会因报告被忽略而自动暂停,因为系统无法衡量 Slack 中的消费情况。display_name:UI 中显示的 scout 名称。留空则使用根据技能名称生成的默认名称;它不会更改固定不变的skill_name。 这是此处唯一无法通过scout-create中嵌套的config设置的选项:创建后请使用-config-update设置。model:固定 scout 运行所用的模型。留空则使用集群默认值,大多数 scout 都应如此;如果 scout 的工作需要更强的模型(长时间研究)或更便宜的模型(频繁、机械化的探测),则设置此项,并在正文中说明原因。 早期访问:未加入scouts-model-config预览的项目会拒绝任何非 null 值,并提示“此项目目前无法选择 scout 模型。”因此,只有在该功能标志已开启时才建议固定模型。mcp_gateway_server_ids:此 scout 的运行可挂载的 MCP 存储服务器(按 id 指定),从成员已共享给整个团队的连接中选择。 默认值为空,即不挂载任何共享服务器。设计意图是只让团队共享的连接支持 scout 运行,这样无论谁编辑 scout,运行行为都相同;但如果项目尚未启用 MCP gateway 强制策略,启动路径仍可能挂载执行用户的个人连接,因此必要时请在运行记录中检查已挂载的服务器。 请像对待network_access一样谨慎处理:它会将第三方工具及共享连接所拥有的访问权限交给 scout,变更会记录在活动日志中,而且正文应说明 scout 使用每台服务器的用途。repositories— 默认值为[]:scout 的沙盒不包含代码检出;对于只通过 MCP 读取项目的 scout,这正合适。 对于需要分析代码的 scout,请设置["organization/repository", ...];运行开始前,其沙盒会克隆每个仓库,因此 scout 可以搜索代码树、阅读目录结构,并运行项目自身的构建、类型检查和测试,而不必每次都通过gh api获取文件。 每个 scout 最多可设置 10 个仓库,而且每个仓库都必须能通过项目的 GitHub 连接访问——无法访问的名称会在写入时被拒绝,而不会等到运行中途才以克隆失败的形式出现。 无论是否克隆,scout 的 GitHub 访问权限都保持只读,因此列出仓库只会提供可读取的代码树,不会赋予推送、评论或创建拉取请求的能力。scout 的写入权限需要单独选择加入,目前尚不可用。 多仓库 scout 获取的每个代码树都来自对应仓库的默认分支;不支持按仓库选择分支。 每个代码树都包含仓库的完整提交历史,因此技能正文可以直接针对代码树运行git log、git blame和--since,无需先进行非浅克隆。 此设置从 scout 的下次运行起生效,变更会记录在活动日志中。tags— 用于对 scout 集群分组的自由格式标签,例如["revenue", "on-call"]。每个 scout 最多设置 10 个;标签会规范化为小写 kebab-case(On Call→on-call),并自动去重。 创建时就设置标签:创建后已完成分组的 scout 无需后续编辑,而且桌面应用的 scout 列表可按标签筛选。 优先使用集群中已有的标签(-config-list会显示每个 scout 的标签),不要创建近似重复的标签——revenue和revenue-analytics会将同一组拆散。 写入会替换整个标签集合,因此请发送完整的目标列表,而不只是新增项。 使用-config-list的tags参数筛选列表(以逗号分隔,可匹配带有任意一个所列标签的 scout)。structured_output_schema— 默认为 null(关闭此通道)。 设置 JSON Schema(draft 2020-12,根节点"type": "object")来描述一条结构化记录,scout 就会在报告之外获得第三个输出通道:每次运行都会看到该 Schema,并获知要通过scout-record-output提交符合要求的记录(每次运行一条,或每个经过判定的实体一条;记录数量和时机由技能正文决定)。 服务器会根据 Schema 验证记录(每次调用要么全部成功,要么全部失败),并在项目中将其记录为$scout_structured_output事件,标量载荷键会展开为output_<key>属性——因此,判定/评分型 scout 的数据序列可以直接在洞察中制图,过去的记录也能像其他事件一样查询(按subject或run_id筛选,按output_<key>拆分)。 此通道也需要启用emit:试运行 scout 无处可写入记录,因此其scout-record-output会以安全失败方式拒绝。 如果 scout 的工作是定期进行测量(例如判定每份抽样报告为好/坏/不确定并说明原因、为账户评分、对会话分类),而不是呈现异常,请使用此项;枚举应尽量精简,并添加自由文本原因字段,让数据序列既便于拆分分析,又可供审计。 技能正文应说明采样内容、判定方式,以及每条记录应标记的subject;记录结构由 Schema 定义。 由于记录是普通事件,任何可使用事件的系统都可以据此采取行动——将工作流或 CDP 目标设置为由$scout_structured_output触发,并按你的skill_name和某个output_<key>值筛选,就能将测量型 scout 变成自动化流程的前端(把判定结果路由到频道、任务或 CRM),无需人工介入。 完整的设计说明——包括评分标准编写、以比率而非分数为导向的记录结构、评分标准版本管理、采样纪律、与报告的衔接、评分成为路由决策后的变化,以及非判定型变体(结构化提取、状态快照、合成遥测)——请参阅references/scout-patterns.md中的定期测量/LLM 判定器模式。
通过备注进行引导(无需编写)
有时你不想修改 scout,而是想_告诉它一些事情_。 这就是 scout notes 的用途:团队成员(或代表团队成员行事的 Agent)留给整个 fleet 的简短引导信息,每次运行都会将其与临时记录和运行历史一起作为先前上下文读取。 如果引导内容属于反馈、指引或有时效性的上下文,请使用备注而不是编辑:
- 对输出的反馈:“你一直标记的 staging 流量激增是已知噪声,别再报告了”。
- 指引:“本周深入调查 EU 注册漏斗——我们认为有回归问题”。
- scout 无法自行了解的上下文:“我们周二上线了新的结账流程,请将此后转化率的变化视为预期情况”。
相关工具(读取操作使用公开的 signal_scout:read 作用域;由于 scouts 会原样读取备注,写入或删除备注所需的授权与编辑 scout 技能相同——需要 llm_skill:write 作用域和技能编辑器访问权限):
posthog:scout-notes-create {"content": "...", "skill_name": "signals-scout-web-analytics"}— 使用某个 scout 的确切技能名称指定它(通过scout-config-list查看名单;该技能必须已存在,因此拼错目标会被拒绝,而不会悄悄导致无人接收),也可以省略skill_name,创建每个 scout 都能看到的通用备注。 可选设置expires_at,让限时备注(如“本周密切关注”)自动失效。skill_name: "pipeline:report-research"指定报告流水线的研究阶段,而不是任何 scout,用于指导如何研究、评估和分发根据聚类信号构建的报告(“将与计费相关的报告分发给计费团队”)。scout 直接撰写的报告不会经过该阶段,因此相关规则应写入面向所有 scout 的备注(省略skill_name),或针对单个 scout 的备注。它是唯一的pipeline:*受众;其他任何值都会被拒绝。posthog:scout-notes-list— 浏览有效备注;传入skill_name可查看指定 scout 会读取的内容。 除人工备注外,还会显示由系统生成的备注:驳回或暂缓备注、讨论问题、点赞评分备注,以及报告审核者的添加/移除记录,都会作为备注转发给相关 scout,并标记相应的origin(report_dismissal、report_discussion、report_feedback、report_reviewer_correction;直接留下的备注标记为human)。系统生成的备注会在约 30 天后自动过期。 需要注意三点:只有在提问者本身具有备注写入权限时,讨论问题或评分备注才会被转发(需具备技能编辑者权限;对于受限凭据,还需signal_scout:write和llm_skill:write);只有在操作人员对规范项目具有技能编辑者权限时,审核者变更才会被转发(审核者变更本身仍会记录在报告中);没有报告读取权限(task:read)的调用者看不到任何源自系统的备注,因为这些备注引用了报告内容。缺少某条系统生成的备注可能是上述任一原因所致。驳回备注仍保留在报告上,讨论问题仍保留在其讨论任务中,但评分备注只以转发给 scout 的备注形式存在(此外还会记录一个分析事件);因此,未能转发的评分备注就会消失。posthog:scout-notes-delete {"id": "..."}— 删除已处理或不再适用的备注。posthog:scout-run-now {"id": <config_id>, "note": "..."}:仅引导单次运行。该备注(最多 1,000 个字符)会与长期备注一起由该次运行读取,不会作为备注传递给之后的运行,因此适合用于“现在检查这个”,而不适合写成每次计划运行都会持续读取的备注。之后的运行读取历史记录时,该备注仍会显示在该次运行的元数据(run_note)中,因此应将其写成有日期的单次指示(如“仅限今天:……”),而不是长期政策。此操作需要技能编辑者权限;对于受限凭据,除基本的signal_scout:write外,还需具备llm_skill:write,与长期备注所需的两个权限范围相同(否则会返回 403;移除备注即可无备注运行),并且与任何手动调度一样会消耗一次运行额度。
scout 如何处理备注:每次运行都会在步骤 1 读取备注,并被要求让新备注明显影响调查方向,但备注仅供参考。 备注会引导注意力,但不会降低 scout 的证据标准,也不会强迫它生成报告;因此,即使备注写着“报告 X”,scout 仍会如实调查,而不会自动生成报告。 scout 会在运行摘要中说明闭环情况(它采取了哪些备注指导,以及如何执行),并将吸收的指导纳入其草稿区。
如何在备注和编辑之间选择:对于“当前项目、当前时点”的引导,以及在正式采纳前试行某项建议,备注是合适的工具;一旦引导成为永久政策(如排除条件、阈值或范围变更),就应编辑技能。反复重新留下的备注说明该编辑早该做了——将其升级为技能编辑。
备注的生命周期由人工管理:scout 从不会删除备注,因此请自行删除已处理的备注(或预先设置 expires_at),以保持信息渠道的高信噪比。
工作流触发的运行
工作流中的“Run scout”步骤会在事件触发时启动一次运行,例如出现新的 GitHub issue 或 pull request。
每次运行的提示词都会在 Your run identity 中说明它是如何启动的:triggered_by 的值为 schedule、manual、workflow 或 check(私有试运行时为 experiment)。
工作流运行还会携带 trigger_workflow_id,即触发该运行的工作流 ID。
在正文中根据该值进行分支判断(“如果 triggered_by 是 workflow …… ”),而不要根据是否存在备注来判断。
运行所看到的内容取决于步骤是否有备注:
- 有备注时,执行框架会让备注中提到的主题成为运行的首要任务。 运行会先完整处理该主题,再做其他事情:调查、作出判断、提交报告或记录拒绝该主题的原因,并写入正文要求的记忆。 该次运行可跳过 scout 的例行任务。 如果正文没有说明如何处理工作流触发的运行,该次运行就会跳过例行任务,将其留给定时任务处理。
- 没有备注时,运行会收到提示,说明它由工作流启动,且没有任何内容指明具体事件。 它会像处理定时任务那样执行正文,除非正文说明工作流触发的运行应如何处理。
如果 scout 的默认行为不合适,请在正文中编写工作流触发时的处理说明。 例如:“工作流触发运行时,还要刷新标签缓存”,或“工作流触发运行且没有备注时,只检查最近一小时”。
增量状态需要完整遍历。 跳过例行任务或提前结束的运行必须保持游标、基线和“上次扫描时间”标记不变,并且只写入与所处理主题有关的记忆。 执行框架会向每次带备注的工作流运行说明这一点。 请在正文中列出 scout 自己使用的增量键,因为只有正文知道部分遍历时哪些暂存区条目不得变动。
根据标识符编写步骤备注。
使用 pull request 编号、issue URL 或告警 ID,例如 Issue #{event.properties.issue_number}。
不要粘贴事件中的标题、正文或其他自由文本。
scout 会将备注视为不可信输入,而标识符可以让它使用自己的工具查找相关内容。
测试循环
在真正消耗一次运行前,先亲自试用侦察器。 你——编写侦察器的 Agent——拥有与侦察器运行时相同的 PostHog MCP 工具(execute-sql、read-data-schema、各产品的列表工具、scout-project-profile-get)。
最省钱、最快的迭代方式完全不需要运行侦察器:手动根据实时项目检查侦察器自身的逻辑。
确认监测的事件/实体确实存在,且其结构符合你的假设;运行判别器,检查它在_此_项目的数据中是否真的能将信号与噪声区分开来;然后运行每种探索模式的查询,看看能查出什么。
这个循环免费且即时——根据发现的情况完善正文,重新运行查询,反复迭代,直到侦察器逻辑经得起真实数据的检验。
真正的迭代就在这里发生。
有少数运行时工具无法通过这种方式试用,因此要在首次真实运行中验证。 任何需要 run_id 的工具都只能在运行内部使用,而项目尚未启用的工具,无论谁调用都会失败。
posthog:scout-lighthouse-audit 是需要提前规划的工具:它会在真实的限速浏览器中加载页面并返回实验室指标、浏览器选定的最大内容绘制元素、LCP 时间在各阶段的分布,以及按排名排列的预计节省量——这正是页面性能发现能够指出原因而非猜测原因的依据。
它需要运行的 run_id,仅限允许列表中的公开页面(浏览器不会登录任何账号,因此登录页后面的页面会报告登录屏幕的指标,而非该页面的指标),仅适用于已启用此工具的项目,并且每次运行最多可执行五次审计。调用被拒绝不会产生费用,但页面一旦加载,该次额度就会被消耗,无论结果如何;每条错误消息末尾都会显示本次运行剩余的审计次数,可据此区分调用被拒绝和预算耗尽。
因此:只有在某次运行中成功调用该工具后,才将其视为可用;切勿编写依赖它才能得出发现的正文;并将实验室证据与现场证据分开标注——一次限速冷加载可以解释某项发现,而真实用户的现场百分位数据才能证明确实存在问题。
然后检查首次真实运行的记录,确认调用及其返回内容,就像检查无法手动运行的查询一样。
私下比较不同版本
目前,rubric 和私下试用的 MCP 工具仅供工作人员使用,并且需要启用 scout-trials 功能标志。
当用户想测试现有 scout、尝试一个想法,或比较多种提示词、模型或推理力度时,请使用此流程。
试用会针对项目数据运行实际的 scout,在私下环境中记录其报告和记忆,根据一个已保存的 rubric 对其进行评估,并保存比较报告。
生成、运行 scout 和评估都会消耗模型用量;请根据用户要求的预算选择版本数量和重复次数。
- 选择来源。 对于现有 scout,通过
posthog:scout-config-list获取其配置,并使用posthog:skill-get读取其指令。 对于新想法,使用posthog:scout-create创建完整的 scout,其中包括config: {"enabled": false}和任何捆绑的files。 然后使用配置的id调用posthog:scout-trial-setup,检查准备情况并查看支持的模型和推理力度。 - 审阅并保存 rubric。 读取
posthog:scout-rubric-get。 如果需要生成,使用posthog:scout-rubric-generate,然后轮询posthog:scout-rubric-get,直到生成完成。 审阅建议和捕获的来源,选择能衡量预期任务的标准,并使用当前的revision、完整的标准列表,以及采用该次生成来源时所需的adopt_generation_id调用posthog:scout-rubric-save。 如果建议质量不佳,请直接编辑标准:启用或停用任意检查、修改其措辞、添加自定义检查,或从已保存列表中移除不需要的自定义检查或生成的检查。保留六项内置默认检查;若不需要,可将其停用;省略adopt_generation_id以保留已保存的引用。 单独生成不会保存或采用任何内容;试用开始前,已保存的 rubric 必须采用一个来源。 - 开始比较。 使用
posthog:scout-trial-start,并提供基线和用户要求的版本。比较提示词更改时,应固定模型和推理力度。 每个候选项都要提供完整的skill_body;已保存的来源不会更改。 一次比较可容纳 5–10 个提示词;请使用不同的假设,避免无故增加重复次数。 - 查看结果。 轮询
posthog:scout-trial-report,查看已保存的比较结果,包括标准证据、失败项、适用性和成本。 如果错误允许,可使用posthog:scout-trial-resume恢复中断的试用;使用posthog:scout-trial-list查找已保存的试用。 在推荐或应用候选项之前,请先阅读其分数背后的证据。
阅读 references/lifecycle-and-testing.md,了解确切的保存和采用规则、请求标识、版本输入及结果解读。
如果设置受阻或工具不可用,请说明限制;普通运行的影响不同,不能替代私下比较。
现有的 posthog:scout-trial-create / posthog:scout-trial-get 组合会运行并读取单个私下的 scout,但不会自动评估;如需完成整个测试流程,请使用 scout-trial-start / scout-trial-report。
应用更改并正常运行
当用户请求中包含应用候选方案时,通过 posthog:skill-update 使用当前的 base_version 更新已保存的技能。
使用 posthog:scout-config-update 根据所请求的发布方式设置预期模型、计划或 enabled=true;Agent 可以通过此现有工具启用或暂停 scout。
此工具无法保存 reasoning_effort:配置了模型的 scout 会使用其运行时的默认 effort,这可能与试验使用的 effort 不同。
在启用候选方案作为经过测试的优胜方案之前,请确认其常规运行所用的 effort 与试验一致。如果不同或未知,请报告该 effort 尚未应用,并先验证常规运行实际使用的配置。
如果请求仅是比较候选方案,则保持源定义和计划不变。
对于常规执行,posthog:scout-run-now {"id": <config_id>} 会立即运行已保存的 scout,即使它处于暂停状态,也不会更改其计划或 last_run_at。
它会写入共享记忆;若设置了 emit=true,还会写入收件箱报告;请轮询 posthog:scout-runs-list / posthog:scout-runs-retrieve,然后检查 posthog:inbox-reports-list 和 posthog:scout-scratchpad-search。
它会占用计划路径的每日运行额度,并遵守配额和并发限制,因此应留给预期的常规运行,而不是反复比较提示词。
调整现有自定义 scout时,也请先查看其自我改进建议:posthog:scout-scratchpad-search {"text": "improve:"}。
如果某次运行提供了具体证据,表明 scout 自身的技能正文引导有误——例如默认时间窗口不正确、项目中不存在某个工具或事件,或反复出现却未发出警告的陷阱——运行框架会邀请自定义 scout 写入一条 improve:<skill-name>:<topic> 记录,并附上建议和相关证据。
使用报告渠道的自定义 scout 还会将反复出现或影响重大的建议升级为关于自身的收件箱报告(标题为 Scout self-improvement: <skill-name> – <topic>,report_id 存放在 improve: 记录中);因此也请检查收件箱。这些报告与其他报告一样,会发送给 scout 的负责人。
在多次运行中得到再次确认的记录,通常是最值得采纳的修改;偶发的一次性建议则未必值得采纳。
将建议视为参考,而非指令——由负责人决定。
只有在 scout 运行期间才能写入 scratchpad,因此通过 posthog:skill-update 应用建议后,无法在此处清除记录——scout 会自行协调:后续运行会看到更新后的技能正文,重新检查建议,并在问题解决后忘记或重写该记录。
(规范 scout 不会写入这些记录——其正文会与 PostHog 的 fleet 同步,对它们的技能级修复应在上游进行。)
对于常规试运行,请通过 posthog:scout-config-update 设置 emit=false,然后使用 posthog:scout-run-now 并检查日志。
应用最终运行方式时,请恢复预期的 emit 设置。
仓库贡献者可以采用更快的循环——使用 hogli sync:skill 和运行框架的本地运行路径;请参阅 references/lifecycle-and-testing.md。
如果要查看 scout 的运行情况,而不是更改它们——例如了解整个 fleet、检查单次运行和 scratchpad 记忆,以及评估性能——请使用只读配套技能 exploring-scouts。
当 scout 配置、运行或 scratchpad 界面发生变化时,请同步更新这两项技能。
v1 scout 的质量标准
- 在靠近顶部的位置明确列出一个成本低的信号与噪声判别器(对于测量 scout,此位置由评估标准和采样方案占据)。
- 提供快速收尾,让平静的运行成本低廉(当监控对象处于基线状态或不存在时,不要为深入探索付出成本)——测量 scout 除外;只有当时间窗口内没有符合条件的条目时,测量 scout 才会提前退出,因为常规判断就是分母。
- 列出 2–4 种具体的探索模式,以及要运行的实际查询/工具——这些是起点,而非僵化的检查清单。
- 列出排除项,说明本项目已知的噪声(单用户特例、开发环境突发情况、允许名单中的实体)。
- 设置一个根据报告约定校准的 Decide 部分——只有对于 scout 能端到端负责的发现,才由作者单独处理;设置
suggested_reviewers;低于标准的候选项则写入记忆。 - 设置一个检查步骤,针对的是修复效果会在后续数据中显现的发现——先列出报告中尚未完成的检查,再根据能否用一个数字确定结论,选择
metric_threshold或agent。 - 以功能为中心的正文:不包含发布状态、待办事项、仅适用于本项目的事实,或提示词已涵盖的测试框架机制。
- 提供保存记忆的指引,使用 scratchpad 前缀,让 scout 每次运行后都能变得更聪明。
- 正文保持精简(将详细内容放入
references/)——每一行都是每次运行都会产生的重复 token 成本。 - 设置简洁的 frontmatter
description——用一两句话说明监控对象及其关注的模式。 每个 scout 的 description 都会一并载入调用方的 AI 插件,因此冗长的 description 会浪费 token 预算并被截断;省略全 fleet 通用的套话(报告标准、持久记忆、自包含的同级项)。