Community编程与开发github.com

mattpocock/wayfinder

将大型工作任务(超出单个Agent会话承载能力)规划为共享决策地图,在问题追踪器中逐步解决决策工单,直至通往目标的道路清晰可见。

wayfinder 是什么?

Wayfinder 是一种针对大型、复杂工作的规划技能,当工作范围跨越多个 AI Agent 会话时尤其有用。它帮助用户将一个模糊的、过于庞大的初始想法,转化为一个在问题追踪器(如 GitHub Issues)上协作的**共享地图**。该技能的核心理念是“规划而非执行”:它通过创建一系列**决策工单**来工作。每个工单都聚焦于一个需要解决的特定问题或决策(例如研究、原型验证或关键对话),而不是一个需要构建的功能点。这种方式将庞大的、模糊的任务拆解为一组可管理、可逐步推进的决策点。 该技能支持所有主流的 AI Agent 平台(如 Claude Code, Cursor, Codex 等),并且与追踪器无关,可以适配不同的追踪器后端(如 GitHub Issues, Linear 等)。其工作流程分为两个阶段:“绘制地图”和“执行工单”。在“绘制地图”阶段,Agent 与用户协作,通过对话确定最终目标(Destination),绘制初始的决策地图,并在“战争迷雾”(Not yet specified)中记录暂时无法精确描述的问题。在“执行工单”阶段,Agent 依次选择并解决产生于地图上的决策工单。每解决一个工单,就会根据新获得的信息更新地图,向前推进“前线”(Frontier),并可能将“战争迷雾”中的新发现转化为新的工单。最终,当所有工单都关闭,且地图的“决策总结”记录了一条清晰的路径,该大任务才算规划完成,准备交付给人类或其他 Agent 去执行。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mattpocock/skills/tree/main/skills/engineering/wayfinder

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

一个模糊的想法已经出现,它过于庞大以至于单个 Agent 会话无法承载,并且笼罩在迷雾之中:从此处到目的地的路径尚不可见。Wayfinding 就是关于找到这条路径,而不是奔向目的地。本技能将路径绘制为仓库问题追踪器上的一张共享地图,然后逐一处理其决策工单(这些问题解决的是一个决策,而不是构建的执行片段),直到路径清晰为止。

每项工作的目的地各不相同,给其命名是绘制地图的首要行动:它会塑造每个工单。它可能是一项需要移交并迭代的规范、一个在规划开始前需要锁定的决策、或者一个就地完成的变更(如数据结构迁移)。该地图无视领域(Domain-Agnostic):无论是工程工作、课程内容,还是其他任何符合此形式的工作,均可适用。

计划,而非执行

Wayfinder 默认是规划性质的:每个工单解决一个决策,当地图上的路径清晰、在有人去执行具体工作之前没有需要决定的事项时,地图即完成。那种想要直接去“做”工作的冲动,通常意味着你已经到达了地图的边缘,该将其移交出去了。一项工作可以在其**笔记(Notes)**中覆盖此默认行为,将执行阶段的工作也纳入地图本身;但如果没有特别说明,请产出决策,而非交付物。

引用名称

每个地图和工单都是一个 Issue,因此它有一个名称:它的标题。在人类阅读的所有内容(叙事、地图的“已决定事项”部分)中,请通过这个名称来引用它,永远不要只使用裸 ID、编号或短标识符。一串 #42, #43, #44 是难以阅读的;而名称则一目了然。ID 和 URL 并没有消失;一个名称包裹着它的链接,但它们应该在名称的内部,而不是代替名称。

地图

地图是此仓库问题追踪器上的一个 Issue,标记为 wayfinder:map,是规范性的制品(Canonical Artifact)。它的所有工单都是地图的子 Issue。

地图是一个索引,而非存储仓库。它列出已做出的决策,并指向包含其细节的工单;一个决策只存在于一个地方,即它的工单中,因此地图绝不重复陈述它,只给出要点和链接。

**地图、其子工单、阻塞关系以及前线查询的物理位置取决于追踪器类型。**问题追踪器应该已经提供给了你。如果没有,请告知用户运行 /setup-matt-pocock-skills。请查阅追踪器文档中的“Wayfinding 操作”部分,了解此仓库如何表达这些内容。如果未提供任何追踪器,则默认使用本地 Markdown 追踪器。

地图正文

整个地图的低分辨率视图(Low Resolution),每次会话加载一次。开放的工单不会被列出:它们是通过查询找到的开放子 Issue。

## 目的地

<到达此地图终点时的情景:此工作要找到通往的规范、决策或变更。一两行;每次会话在开始选择工单前都会参考此信息。>

## 笔记

<领域;每次会话都应查阅的技能;此工作的固定偏好>

## 已决定事项

<!-- 索引:每个已关闭工单一行,足以判断其相关性,然后通过链接查看该工单的细节 -->

- [<已关闭工单标题>](链接): <答案的一句话要点>

## 尚未明确

<!-- 参见“战争迷雾”:范围内的迷雾,尚无法创建工单;随着前线推进而渐次明确 -->

## 超出范围

<!-- 参见“超出范围”:被判定为超出此工作目的地的任务;已关闭,不再渐次明确 -->

工单

每个工单都是地图的一个子 Issue;追踪器的 Issue ID 是其标识。其正文是问题本身,大小限制为一次 100K token 的 Agent 会话能处理的程度:

## 问题

<此工单要解决的决策或调查>

每个工单都带有一个 wayfinder:<type> 标签,类型为 research、prototype、grilling 或 task(参见工单类型)。

一个会话通过认领一个工单来开始解决它:在任何工作之前,先将工单分配给驱动地图的开发者,这样并发的会话就会跳过它。这个被分配的人就是认领者:一个开放的、未分配的工单就是未被认领的。

阻塞关系使用追踪器原生的依赖关系:这一点至关重要,因为它会在视觉上于追踪器自己的 UI 中呈现前线,让人无需打开地图就能看到哪些工单是可供领取的。只有当追踪器缺少原生阻塞功能时,才会退回到使用正文中的约定格式。当一个工单的所有阻塞工单都已关闭时,该工单便是未被阻塞的;前线就是那些开放的、未被阻塞的、未被认领的子工单,即已知领域的边缘。

答案不是工单正文的一部分;它在关闭工单时被记录(参见执行地图)。在解决工单过程中创建的资产,通过链接从 Issue 中引用,而不是粘贴到 Issue 中。

工单类型

每个工单要么是 HITL(Human In The Loop,与能为自己代言的人类一起工作),要么是 AFK(Away From Keyboard,由 Agent 独立驱动)。一个 HITL 工单只能通过这种实时的交流来解决;Agent 永远不能代表人类的那一方(一个自己回答自己问题的审问型工单就破坏了此规则)。

  • 研究型 (AFK):阅读文档、第三方 API 或本地资源(如知识库)来揭示某个决策所依赖的事实。由调用“research”技能的次级 Agent(Subagent)解决。当需要当前工作目录之外的知识时使用。
  • 原型型 (HITL):通过制作廉价、粗略、具体的制品(如大纲、草稿、代码桩或 UI/逻辑代码)来提高讨论的保真度,方法是调用“prototype”技能。将原型作为资产链接。当“它应该看起来什么样”或“它应该表现成什么样”是关键问题时使用。
  • 审问型 (HITL):对话。默认类型。始终调用“grilling”和“domain-modeling”技能两次。
  • 任务型 (HITL 或 AFK):在做出决策之前必须执行的体力工作:无需决定、原型或调研,但讨论被其阻塞直至完成。例如:注册一个服务以便评估其 API、配置访问权限、移动数据以便查看其结构。这是唯一一个执行而非决策的类型,它通过解除决策的阻塞来获得其在地图上的位置,而不是通过交付最终目的地。Agent 在其能力范围内独立驱动(AFK);否则,它会交给人类一个精确的检查清单(HITL)。当工作完成时,工单被解决;答案记录所完成的工作以及后续工单所依赖的任何结果事实(如凭据位置、新 URL、行数)。

战争迷雾

地图是故意不完整的:不要绘制你还看不到的东西。在活跃的工单之外是战争迷雾:你能判断出即将到来但尚无法确定具体内容的决策和调查,因为它们取决于尚未解决的问题。解决一个工单会清除其前方的迷雾,将现在可以明确化的内容逐条转化为新的工单,直到通往目的地的道路清晰,且没有剩余工单为止。

地图的尚未明确部分就是用来记录这种模糊视图的:提出的问题、以后需要再回头看的区域。它是朝向目的地的未被发现的前线:这里的一切都处于范围内,只是还不够清晰到可以创建工单。根据你能看到的程度,写得松散或详细均可;它同时也是为协作者提供的路标,让他们了解工作的方向。

战争迷雾还是工单? 判断标准是你现在是否能精确陈述该问题,而不是你现在是否能回答它。

  • 创建工单的条件: 问题已经清晰,即使它被阻塞,暂时无法采取行动。
  • 放入“尚未明确”的条件: 你暂时还无法如此精确地表述它。不要预先将迷雾切成工单大小的碎片:它比工单更粗略,一旦前线触及它,一片迷雾可能渐次明确为几个工单,也可能一个都没有。

“尚未明确” 排除了那些已经决定的内容(已决定事项)、已经是活跃工单的内容以及超出范围的内容(下一节)。

超出范围

迷雾只会朝向目的地聚集。目的地确定了范围,因此超出目的地的任务属于超出范围:它不是迷雾,也不属于尚未明确。它在地图上拥有自己的超出范围部分:你有意识地判断出不属于此工作的任务。将其归入此处的是范围,而非清晰度。

超出范围的任务永远不会渐次明确(前线止步于目的地),因此它们只有在目的地被重新绘制时才会回来,并且是作为一项新工作,而非恢复。

将某些任务判定为超出范围是一个划定范围的行为,而不是路径上的一步。当一个已存在的工单恰好位于目的地之外时(在绘制地图时错误地划入范围内,或因解决一个工单而暴露出来),请关闭它(一个已关闭的工单明确地不在前线上),并在超出范围部分留下一行文字:要点以及它超出范围的原因,并链接该已关闭的工单。不要将其放在已决定事项中,因为后者记录的是实际走过的路径;范围边界不是路径上的一步。

调用方式

两种模式。无论如何,每次会话最多只能解决一个工单,研究型工单除外。

绘制地图

用户带着一个模糊想法进行调用。

  1. 为目的地命名。 调用“grilling”和“domain-modeling”技能两次,以确定此地图要通往的目标:规范、决策或变更。目的地确定了范围,因此要首先确定下来。
  2. 绘制前线。 再次进行审问,这次是广度优先:在整个空间上展开,而不是深入任何一个线程,以发现开放的决策和当前可以采取的第一步行动。如果这没有发现任何迷雾(通往目的地的道路已经清晰,整个旅程小到足以在单个会话内完成),那么你不需要地图。停下来询问用户希望如何继续。
  3. 创建地图(标签 wayfinder:map):填写好目的地和笔记,已决定事项为空,将迷雾的轮廓写入尚未明确。
  4. 创建你现在可以明确的工单,作为地图的子 Issue,然后在第二轮中建立阻塞关系(Issue 需要先有 ID,才能互相引用)。建立阻塞关系能将工单排序为前线和被阻塞两类;现在还不能明确的一切都留在迷雾中:即尚未明确部分。
  5. 触发研究型次级 Agent。 对于你刚刚创建的每个 research 工单,启动一个调用“research”技能的次级 Agent 来并行解决它,将其发现捕获在一个临时的 research/<name> 分支上,并从工单附加一个上下文指针。
  6. 停止:绘制地图是一次会话的工作;它不会手动解决任何问题。

执行地图

用户通过提供地图(URL 或编号)进行调用。一个工单是可选的:如果没有指定,你会选择下一个决策,而不是用户。

  1. 加载地图:低分辨率视图,而非每个工单的正文。
  2. 选择工单。 如果用户指定了一个,则使用它。否则,按顺序选择第一个前线工单。认领它:在进行任何工作之前,先将它分配给自己。
  3. 解决它。 按需深入查看(Zoom):按需获取任何相关或已关闭工单的完整正文;为## 笔记块中命名的任何技能调用对应技能。如果有疑问,调用“grilling”和“domain-modeling”技能两次。
  4. 记录解决方案: 将答案作为解决方案评论发布,关闭该 Issue,并在地图的已决定事项中添加一个上下文指针。
  5. 新增浮现的工单(先创建后建立连接);将答案使其明确化的任何迷雾从尚未明确中移除并转为新的工单,移动时,要将每个已明确化的迷雾补丁从尚未明确部分中清除,使其只作为新工单存在。如果答案揭示某个工单(本工单或其他工单)位于目的地之外,则将其判定为超出范围,而不是将其作为路径的一部分来解决。如果该决定使地图的其他部分无效,则更新或删除这些工单。

用户可以并行执行未被阻塞的工单,因此要预期其他会话同时在编辑追踪器。

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

mattpocock/ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

mattpocock/caveman

Ultra-compressed communication mode. Cuts token usage ~75% by dropping filler, articles, and pleasantries while keeping full technical accuracy. Use when user says "caveman mode", "talk like caveman", "use caveman", "less tokens", "be brief", or invokes /caveman.

mattpocock/claude-handoff

Hand the current conversation off to a fresh background agent that picks up the work immediately.

mattpocock/codebase-design

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

mattpocock/design-an-interface

Generate multiple radically different interface designs for a module using parallel sub-agents. Use when user wants to design an API, explore interface options, compare module shapes, or mentions "design it twice".

mattpocock/diagnose

Disciplined diagnosis loop for hard bugs and performance regressions. Reproduce → minimise → hypothesise → instrument → fix → regression-test. Use when user says "diagnose this" / "debug this", reports a bug, says something is broken/throwing/failing, or describes a performance regression.

mattpocock/diagnosing-bugs

Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.

mattpocock/domain-modeling

Build and sharpen a project's domain model. Use when the user wants to pin down domain terminology or a ubiquitous language, record an architectural decision, or when another skill needs to maintain the domain model.

mattpocock/edit-article

Edit and improve articles by restructuring sections, improving clarity, and tightening prose. Use when user wants to edit, revise, or improve an article draft.

mattpocock/git-guardrails-claude-code

Set up Claude Code hooks to block dangerous git commands (push, reset --hard, clean, branch -D, etc.) before they execute. Use when user wants to prevent destructive git operations, add git safety hooks, or block git push/reset in Claude Code.

mattpocock/grilling

Grill the user relentlessly about a plan or design. Use when the user wants to stress-test a plan before building, or uses any 'grill' trigger phrases.

mattpocock/grill-me

Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me".

mattpocock/grill-with-docs

Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.

mattpocock/handoff

Compact the current conversation into a handoff document for another agent to pick up.

mattpocock/implement

Implement a piece of work based on a PRD or set of issues.

mattpocock/implement-spec

Implement a specification in code.

mattpocock/improve-codebase-architecture

Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.

mattpocock/loop-me

Grill me about specs for the workflows I want to build, within this workspace.

mattpocock/migrate-to-shoehorn

Migrate test files from `as` type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace `as` in tests, or needs partial test data.

mattpocock/obsidian-vault

Search, create, and manage notes in the Obsidian vault with wikilinks and index notes. Use when user wants to find, create, or organize notes in Obsidian.

相关技能