triage
将问题和外部 PR 按照分诊角色状态机流转,进行分类、验证,必要时深入追问,并撰写智能体可直接使用的简报。
Triage 技能:用状态机管理 Issue 与外部 PR 的分诊流程
技能概述
Triage 是一个面向开源项目维护者的 Claude 技能,它把 issue 和外部 PR 放进一套由"分类角色 + 状态角色"组成的小型状态机里,逐条评估、验证、追问,必要时打磨成一份 agent 可直接执行的简报。
适用场景
-
Issue 列表堆积,需要快速判断优先级。 维护者用一句话描述诉求(例如"给我看看有哪些需要我处理的"),技能会查询 issue tracker,按"从未分诊""正在评估""等待提问者回复但有新动态"分成三组,每组标出 [PR] 或 [issue]、数量、一句话摘要,从最旧的开始排。维护者再挑具体条目深入。
-
判断某个 issue 能不能交给后台 agent 无人值守完成。 技能会读完整条 issue(正文、评论、标签、作者、时间,PR 还要读 diff),检索代码库确认需求是否已经实现、是否与
.out-of-scope/里既往拒绝过的需求重复,然后给出分类与状态建议并说明理由。确认可行后写成 agent brief,标记为 ready-for-agent。 -
外部 PR 分流。 如果仓库把外部 PR 当作请求入口,PR 会被当作"附带代码的 issue"走同一套角色和状态机。技能会实际检出代码、跑相关测试或命令,确认 diff 是否真的做到了它声称的事,再决定下一步。
核心功能
-
两分类 + 五状态的标签体系。 分类角色是
bug(有东西坏了)和enhancement(新功能或改进);状态角色是needs-triage(待维护者评估)、needs-info(等待报告者补充信息)、ready-for-agent(已完整描述,可交给 AFK agent)、ready-for-human(需要人类实现)、wontfix(不予处理)。每条分诊过的 issue 应当恰好携带一个分类角色和一个状态角色;如果状态角色互相冲突,技能会先标记出来并询问维护者,不会擅自处理。 -
先验证,再打磨,最后落状态。 技能不会跳过验证直接打标签:bug 要按报告者的步骤复现,PR 要检出并跑测试,然后如实报告"已确认(附代码路径)""未能复现""信息不足"三种结果。信息不足本身就是强 needs-info 信号。需求还比较粗糙时,技能会调用 grilling 和 domain-modeling 两个技能,一轮一轮提问把需求问清楚,并把敲定的领域术语同步更新到
CONTEXT.md和 ADR 里。 -
可追溯的结论输出。 落到 ready-for-agent 时附上 agent brief;落到 ready-for-human 时用同样结构,但注明为何不能委托(需要判断力、外部权限、设计决策或人工测试);落到 needs-info 时发一份 Triage Notes,把已经确认的结论和还需要提问者回答的具体问题分开列出,避免工作成果丢失。所有发到 issue tracker 的评论都会带上"本次内容由 AI 在分诊过程中生成"的声明。
常见问题
Triage 技能是做什么的?
它把 issue 和外部 PR 沿一套固定的状态机推进:先归类为 bug 或 enhancement,再进入某个状态角色,最终产出可执行的结论——要么是一份 agent 简报,要么是给报告者的追问清单,要么是关闭并说明理由。核心目的是让维护者不必每条都从头读起。
它能自动处理 issue 吗,还是需要人工确认?
需要人工确认。这个技能被设计为只能由维护者手动调用(disable-model-invocation),不会自己触发。推荐分类和状态、应用标签、发评论、关闭 issue 之前都会先说明将要做什么;状态流转看起来不寻常时也会先问过维护者。维护者也可以直接指定"把 #42 移到 ready-for-agent",技能会跳过打磨环节直接执行。
needs-triage、needs-info、ready-for-agent 这些状态是什么意思?
needs-triage 是维护者需要评估;needs-info 是卡在报告者那边等补充信息;ready-for-agent 是描述完整、可以交给无人值守的 agent;ready-for-human 是需要人类来实现或合并;wontfix 是不会处理。正常流转是未标注 → needs-triage → 其余四者之一,报告者回复后 needs-info 会回到 needs-triage。
一个 issue 可以同时有两个状态标签吗?
不可以。状态角色应当恰好一个。如果发现冲突,技能会先标记并询问维护者,而不是自行挑选一个。
外部 PR 也会被分诊吗,内部成员的 PR 呢?
外部 PR 在仓库把它当作请求入口时会纳入分诊,使用与 issue 相同的角色和状态。但发现视图只暴露外部 PR——协作者正在推进的 PR 不算分诊工作。这个过滤只作用于发现环节:维护者明确点名某个 PR 时,无论作者是谁都会被分诊。
分诊时会不会重复问已经回答过的问题?
不会。技能会先解析 issue 上此前的 triage notes,检查报告者是否已经回答了待办问题,再给出更新后的全貌,不会重新问已经解决的问题。
如果某个需求已经实现过了,技能会怎么处理?
归类为"已实现"的 wontfix:关闭 issue 并在评论中指向代码中的实现位置。这种情况不会写入 .out-of-scope/——那个知识库只记录被拒绝的需求,不记录已经建好的功能。如果是被拒绝的增强需求,则会写入 .out-of-scope/ 并从评论链接过去;被拒绝的 bug 则给出解释后直接关闭。
用这个技能需要什么前置配置?
需要一份标签映射,把技能里的规范角色名对应到你的 issue tracker 实际使用的标签字符串。如果你还没有这份映射,需要先运行 /setup-matt-pocock-skills。此外技能会读取 AGENT-BRIEF.md(如何写持久化简报)和 OUT-OF-SCOPE.md(.out-of-scope/ 知识库的工作方式)作为参考文档。