wayfinder
把一大块工作——超过单个 agent 会话所能容纳的量——规划成 issue 跟踪器上一张共享的决策工单地图,并逐个解决它们,直到通往目的地的道路清晰可见。
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
把一大块工作——超过单个 agent 会话所能容纳的量——规划成 issue 跟踪器上一张共享的决策工单地图,并逐个解决它们,直到通往目的地的道路清晰可见。
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional SOC
使用并行子代理为一个模块生成多个截然不同的接口设计。当用户想设计 API、探索接口方案、对比模块形态,或提到 "design it twice" 时使用。
交互式 QA 会话,用户以对话方式报告 bug 或问题,代理负责提交 GitHub issue。会在后台探索代码库以获取上下文和领域语言。当用户想报告 bug、做 QA、以对话方式提交 issue,或提到 "QA session" 时使用。
通过用户访谈创建一份带有微小提交(tiny commits)的详细重构计划,然后将其作为 GitHub issue 提交。当用户想规划一次重构、创建重构 RFC,或将一次重构拆分为安全的增量步骤时使用。
从当前对话中提炼出一份 DDD 风格的通用语言(ubiquitous language)术语表,标记歧义并提出规范术语。保存到 UBIQUITOUS_LANGUAGE.md。当用户想定义领域术语、构建术语表、固化用词、创建通用语言,或提到 "domain model" 或 "DDD" 时使用。
询问哪个技能或流程适合你当前的处境。它是本仓库中各技能的路由器。
从两个轴向审查某个固定点(commit、branch、tag 或 merge-base)以来的变更——Standards(代码是否遵循本仓库记录的编码规范?)和 Spec(代码是否符合源起的 issue/PRD 的要求?)。在并行子智能体中运行两项审查,并把它们并排报告。当用户想审查一个分支、一个 PR、进行中的变更,或要求 "review since X" 时使用。
| name | wayfinder |
| description | 把一大块工作——超过单个 agent 会话所能容纳的量——规划成 issue 跟踪器上一张共享的决策工单地图,并逐个解决它们,直到通往目的地的道路清晰可见。 |
| disable-model-invocation | true |
一个粗略的想法到来了——大到一个 agent 会话装不下,且笼罩在迷雾中:从此处通往目的地的道路尚不可见。寻路关乎找到那条路,而不是径直冲向目的地。这个技能把道路绘制成仓库 issue 跟踪器上的一张共享地图,然后逐个处理它的决策工单——那些其解决结果是一个决策、而不是一次构建中待执行的切片的问题——直到路线清晰。
目的地因每项工作而异,为它命名是绘图的第一步——它塑造每一张工单。它可能是一份要移交并迭代的规格说明、一个要在规划开始前锁定的决策,或者一次就地做出的改动,比如一次数据结构迁移。这张地图与领域无关——工程工作、课程内容,凡是契合这种形态的都行。
Wayfinder 默认是规划:每张工单解决一个决策,当道路清晰时地图即完成——在有人去做那件事之前,没有什么剩下要决定的了。想要直接干活的那股拉力,通常正是你已到达地图边缘、该移交了的信号。一项工作可以在它的 Notes 中覆盖这一点——把执行带进地图本身——但在没有这样做的情况下,产出的是决策,而非交付物。
每张地图和工单都是一个 issue,所以它有一个名称——它的标题。在人所阅读的一切中——叙述、地图的 Decisions-so-far——都以那个名称指代它,绝不用一个裸的 id、编号或 slug。一堵 #42, #43, #44 的墙无法辨读;名称一眼即读。id 和 URL 不会消失——名称包裹着它的链接——但它们藏在名称内部,绝不取代名称。
地图是本仓库 issue 跟踪器上的单个 issue,标注 wayfinder:map——那件标准产物。它的工单是地图的子 issue。
地图是一个索引,不是一个存储库。它列出已做出的决策,并指向持有其细节的工单;一个决策恰好存在于一个地方——它的工单——所以地图从不复述它,只给出要点并链接。
地图、它的子工单、阻塞以及前沿查询在物理上存放于何处,是特定于跟踪器的。 issue 跟踪器应该已经提供给你了——如果没有,运行 /setup-matt-pocock-skills。查阅跟踪器文档的"Wayfinding operations"小节,了解本仓库如何表达它们。如果没有提供跟踪器,就默认使用本地 markdown 跟踪器。
整张地图的低分辨率版本,每个会话加载一次。未关闭的工单不被列出——它们是未关闭的子 issue,通过查询找到。
## Destination
<what reaching the end of this map looks like — the spec, decision, or change this effort is finding its way to. One or two lines; every session orients to it before choosing a ticket.>
## Notes
<domain; skills every session should consult; standing preferences for this effort>
## Decisions so far
<!-- the index — one line per closed ticket: enough to judge relevance, then zoom the link for the detail the ticket holds -->
- [<closed ticket title>](link) — <one-line gist of the answer>
## Not yet specified
<!-- see "Fog of war": in-scope fog you can't ticket yet; graduates as the frontier advances -->
## Out of scope
<!-- see "Out of scope": work ruled beyond the destination; closed, never graduates -->
每张工单是地图的一个子 issue;跟踪器的 issue id 就是它的身份。它的正文是那个问题,大小以一个 100K token 的 agent 会话为准:
## Question
<the decision or investigation this ticket resolves>
每张工单带有一个 wayfinder:<type> 标签——research、prototype、grilling、task 之一(见 Ticket Types)。
一个会话通过把工单指派给驱动地图的开发者来认领它,这要最先做、在任何工作之前,这样并发的会话就会跳过它。那个指派人就是认领:一个未关闭、未指派的工单即未认领。
阻塞使用跟踪器的原生依赖关系——这至关重要,因为它在跟踪器自己的 UI 中可视化地渲染出前沿,所以人不用打开地图就能看到什么是可取的。只有缺乏原生阻塞的跟踪器才回退到正文约定。当阻塞它的每张工单都关闭时,一张工单即解除阻塞;前沿是那些未关闭、未阻塞、未认领的子项——已知的边缘。
答案不是正文的一部分——它在解决时记录(见 Work through the map)。解决一张工单时创建的资产从 issue 链接出去,而不是粘贴进来。
每张工单要么是 HITL——human in the loop,与一个为自己发声的人一起处理——要么是 AFK,由 agent 独自驱动。一张 HITL 工单只有通过那场实时交流才能解决;agent 绝不代替人的那一方(一个自问自答的 grilling agent 就破坏了这一点)。
/research 子 agent 解决。当需要当前工作目录之外的知识时使用。地图是刻意不完整的:不要绘制你还看不见的东西。在活跃的工单之外躺着战争迷雾——对那些你能感觉到即将到来、但还无法钉住的决策和调查的朦胧视野,因为它们悬于仍未关闭的问题之上。解决一张工单会清除它前方的迷雾,把如今可界定的东西升格为新鲜的工单——一次一个,直到通往目的地的道路清晰、没有工单剩下。
地图的 Not yet specified 小节就是那个朦胧视野被写下来的地方:疑似的问题、稍后要重访的区域。它是朝向目的地的、尚未被发现的前沿——这里的一切都在范围内,只是还不够锐利到能开工单。视野允许多松就写多松、多满就写多满;它同时充当一个路标,供阅读这项工作走向何方的协作者参考。
迷雾还是工单? 判据在于你现在能否精确地陈述这个问题——而不是你现在能否回答它。
Not yet specified 不包括已经决定的(Decisions so far)、已经是活跃工单的,以及超出范围的(下一小节)。
迷雾只会朝向目的地聚集。目的地固定了范围,所以在它之外的工作是超出范围的——它不是迷雾,也不属于 Not yet specified。它在地图上有自己的 Out of scope 小节:你有意识地排除出这项工作之外的工作。落到这里靠的是范围,而不是锐利度。
超出范围的工作绝不升格——前沿在目的地处停止——所以它只有在目的地被重画时才回来,而且那时是作为一项全新的工作,而不是一次续接。
把某件事判为超出范围是一个界定范围的动作,而不是路线上的一步。当一张已经存在的工单结果发现坐落在目的地之外——绘图时误纳进来,或被一次解决所暴露——就关闭它(一张关闭的工单毫不含糊地不在前沿上),并在 Out of scope 小节留一行:要点加上它为何超出范围,链接那张关闭的工单。它不进 Decisions so far,后者记录的是实际走过的路线——一条范围边界不是路线上的一步。
两种模式。无论哪种方式,每个会话解决的工单绝不超过一张——research 工单除外。
用户带着一个粗略的想法调用。
/grilling 和 /domain-modeling 会话,钉住这张地图正在寻路通向什么——那份规格说明、决策或改动。目的地固定了范围,所以它最先敲定。wayfinder:map):填好 Destination 和 Notes,Decisions-so-far 为空,迷雾勾勒进 Not yet specified。research 工单,启动一个 /research 子 agent 并行解决它,把它的发现捕获到一个用完即弃的 research/<name> 分支上,并从工单留一个上下文指针。用户带着一张地图(URL 或编号)调用。工单是可选的——没有它,就由你、而不是用户,来挑下一个决策。
## Notes 块所指名的技能。如有疑问,用 /grilling 和 /domain-modeling。用户可能并行处理未阻塞的工单,所以要预料到其他会话在并发地编辑跟踪器。