name: wayfinder description: "将超过一次 Agent 会话容量的大型工作,在工单系统中规划为共享决策地图,逐项解决,直到通往目标的路径清楚。" disable-model-invocation: true
先澄清大型工作的未知决策
当一个想法大到无法在一场讨论里讲清,wayfinder 用共享地图和决策工单推进探索。它默认交付决定,不交付产品。
还不清楚 Skill、Agent、安装和调用?先读 从零开始的6节入门课。
先把必要的概念讲清楚
当一项想法有很多相互依赖的未知、一次会话无法解决时,先建立决策地图。这课训练你推进认知上的未知,而不是用一张复杂看板冒充开发进度。
下面是老师补充的入门说明;原作者的要求保留在中英对照正文中。所有例子均为帮助理解而构造的教学情境。
frontier|当前可推进的事项集合
任务存在先后依赖时,前置条件已满足、现在能处理的那些事项。先决定是否登录,才能决定收藏记录如何归属用户;配色可能不受这个决定影响,可以先讨论。前沿不是所有未完成事项,更不是凭直觉挑一个开始做。
issue / ticket|问题或任务工单
跟踪一项需求、缺陷、调查或实施任务的记录,通常有标题、正文、状态和引用。issue 和 ticket 在这些文档里经常都指工单,具体含义由上下文决定。工单写着“已完成”只是状态声明,还需要相应证据支持。
spec / specification|规格说明
把要解决的问题、预期行为、约束和验收依据写明确的文档。它比“做个好用的学习网站”具体:例如登录用户能收藏课程,刷新后仍保留,重复收藏不会多出记录。它不必规定每个内部函数怎么写,但应让实现者和验收者对同一结果达成一致。
prototype|用来回答问题的原型
成本低、范围小、可观察的试验产物,目的在于消除某个未知,例如比较逐段中英对照是否易读。它可以是界面、算法或粗稿。能运行不等于具备生产所需的权限、容错和维护条件;应带走试验所得的决定与证据。
context|Agent 当前可用的上下文
模型这一轮实际能使用的请求、对话、指令和已读文件内容。它不是电脑上所有资料,也不是永久记忆。文件存在但没被读到,就不一定参与推理。交接文档应指明当前目标、进度、关键证据位置和下一步,让新会话能够恢复必要背景。
context pointer|上下文资料指引
告诉 Agent 在什么条件下去读哪份材料的短指引。例如“新增或修改数据写入时,先读权限规则文档”。它同时承担地址与触发条件两项作用。只有“见文档”太模糊,可能找不到或不知道何时需要;一股脑放入所有内容又会占用上下文。
读原文,理解每一步为什么这样做
左右内容按小节对应;窄屏先中文、后英文。两种语言均完整展示,对应讲解紧接在小节之后。译文传达原文要求;老师讲解补充概念、原因、例子与适用边界。
name: wayfinder description: Plan a huge chunk of work (more than one agent session can hold) as a shared map of decision tickets on your issue tracker, and resolve them one at a time until the way to the destination is clear. disable-model-invocation: true
一个想法太大,一次会话装不下,而且通往目标的路线尚不清楚。wayfinder 先寻找路线,在项目工单系统建立共同决策地图,再逐张解决决策工单,直到路径明确。这些工单回答问题、形成决定,并非直接实现产品的小任务。
首先命名本次目的地。它可能是一份可交接的规格、规划之前必须锁定的选择,或某项原地变化,如数据结构迁移。目的地决定各工单的方向。方法也适用于课程或其他同类规划。
A loose idea has arrived, too big for one agent session, and wrapped in fog: the way from here to the destination isn't visible yet. Wayfinding is about finding that way, not charging at the destination. This skill charts the way as a shared map on the repo's issue tracker, then works its decision tickets (questions whose resolution is a decision, not slices of a build to execute) one at a time until the route is clear.
The destination varies per effort, and naming it is the first act of charting: it shapes every ticket. It might be a spec to hand off and iterate on, a decision to lock before planning starts, or a change made in place like a data-structure migration. The map is domain-agnostic: engineering work, course content, whatever fits the shape.
默认先规划
默认每张工单解决一个决定;当没有阻止后续执行的未知时,地图完成。感到“现在可以直接动手”往往说明到达地图边缘,该交接了。
可以在本次 Notes 中明确改变安排,让执行也进入地图;没有这种约定时,产出决定,不直接交付目的地成果。
Plan, don't do
Wayfinder is planning by default: each ticket resolves a decision, and the map is done when the way is clear, with nothing left to decide before someone goes and does the thing. The pull to just do the work is usually the signal you've reached the edge of the map and it's time to hand off. An effort can override this in its Notes, carrying execution into the map itself, but absent that, produce decisions, not deliverables.
地图阶段产出决定,而非正式功能
例如要做 AI 学习导师,你可能尚不清楚怎样判断掌握、哪些反馈由模型生成、哪些记录允许保存。此时直接拆“开发数据库、开发页面”,相当于把未知伪装成已确认要求。
决策工单用于回答一个问题:可以研究资料、做小原型或盘问用户。它完成时应留下答案、依据和对其他决定的影响,不以代码行数衡量。
作者强调规划阶段不直接交付,是为避免尚未确定方向就大规模实现。非常小且清楚的事情,不必强行套用整张地图。
面向人使用可读名称
地图和工单都有标题。对用户讲述、在已确定决定索引中引用时,都用名称作链接,不只展示编号或 slug。编号和网址仍存在,但放在有意义的名称背后,让人能直接理解。
Refer by name
Every map and ticket is an issue, so it has a name: its title. In everything the human reads (narration, the map's Decisions-so-far), refer to it by that name, never by a bare id, number, or slug. A wall of #42, #43, #44 is illegible; names read at a glance. The id and URL don't vanish; a name wraps its link, but they ride inside the name, never stand in for it.
地图
地图是一张带 wayfinder:map 标签的总工单,决策条目是其子工单。这张总工单是正式入口。
地图是索引,不是存放全部细节的地方。每项决定的详细内容只放在对应子工单,总图只写一句概要和链接。
具体怎样保存子工单、依赖和查询可开工任务,取决于配置的工单系统。没有说明时告诉用户运行 setup,并查阅其 Wayfinding operations 部分;尚无系统时,原文默认采用本地 Markdown。
The Map
The map is a single issue on this repo's issue tracker, labelled wayfinder:map, the canonical artifact. Its tickets are child issues of the map.
The map is an index, not a store. It lists the decisions made and points at the tickets that hold their detail; a decision lives in exactly one place, its ticket, so the map never restates it, only gists it and links.
Where the map, its child tickets, blocking, and frontier queries physically live is tracker-specific. The issue tracker should have been provided to you. If not, tell the user to run /setup-matt-pocock-skills. Consult the tracker doc's "Wayfinding operations" section for how this repo expresses them. If no tracker has been provided, default to the local-markdown tracker.
地图正文
每次会话只先加载低细节的整体图。不在正文罗列未完成工单,它们通过查询打开的子工单获得。
## Destination
[一两句话说明本次最终要明确什么规格、决定或变化。]
## Notes
[领域、每次要查阅的技能、长期偏好。]
## Decisions so far
- [已经关闭的工单标题](链接):[一句答案概要]。
## Not yet specified
[在范围内,但还不能准确表述的问题。]
## Out of scope
[已明确不属于本次目标的工作。]
The map body
The whole map at low resolution, loaded once per session. Open tickets are not listed: they are open child issues, found by query.
## 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 -->
地图正文是导航,不是复制全部研究资料
Destination 说明最终想达到什么;Decisions so far 保存已经确定的方向;Not yet specified 标出未知;Out of scope 排除不做的内容。相关研究与原型通过链接引用。
**例子:**终点是帮助用户阅读并解释技能;已决定中英并列;尚未决定是否保存作答记录;范围外是自动给孩子做能力评级。这样下一会话不用从长聊天猜目标。
名字要让人识别“哪个决定”,而不只剩一串 issue 编号。编号用于唯一引用,清楚标题用于理解,两者相互补充。
决策工单
每项是地图的子工单,以平台编号为身份。正文写一个规模适合一次 100K token 会话的问题:
## Question
[本工单要解决的决定或调查问题。]
按类型添加 wayfinder:research、wayfinder:prototype、wayfinder:grilling 或 wayfinder:task。
工作前先分配给负责推进地图的开发者,表示已领取;并行会话看到已分配就跳过。打开且未分配的工单表示无人领取。
优先使用平台原生阻塞关系,使用户在界面中直接看见可领取事项。平台没有此能力才回退到正文约定。前置工单全部关闭即解除阻塞;当前前沿是仍打开、已解除阻塞、且未被领取的子工单。
答案不直接混进问题正文,而在解决时记录。过程中产生的材料由工单链接,不整份粘贴。
Tickets
Each ticket is a child issue of the map; the tracker's issue id is its identity. Its body is the question, sized to one 100K token agent session:
## Question
<the decision or investigation this ticket resolves>
Each ticket carries a wayfinder:<type> label, one of research, prototype, grilling, task (see Ticket Types).
A session claims a ticket by assigning it to the dev driving the map, first, before any work, so concurrent sessions skip it. That assignee is the claim: an open, unassigned ticket is unclaimed.
Blocking uses the tracker's native dependency relationship: essential because it renders the frontier visually in the tracker's own UI, so the human sees what's takeable without opening the map. Only a tracker that lacks native blocking falls back to a body convention. A ticket is unblocked when every ticket blocking it is closed; the frontier is the open, unblocked, unclaimed children, the edge of the known.
The answer isn't part of the body; it's recorded on resolution (see Work through the map). Assets created while resolving a ticket are linked from the issue, not pasted in.
工单类型
每项还区分 HITL 与 AFK。HITL 需要与人实时交流,人的选择由人表达,Agent 不代替用户回答自己的问题。AFK 则由 Agent 独立推进。
- Research,AFK:读取文档、第三方 API 或知识库,提供决定所缺的事实。由调用 research 的子 Agent 解决,适用于当前目录之外的知识需求。
- Prototype,HITL:制作便宜、粗略但具体的提纲、草稿、结构或界面逻辑供人判断。调用 prototype,并链接产物。适合“应该什么样、怎样表现”的疑问。
- Grilling,HITL:通过对话澄清,是默认类型。分别加载 grilling 和 domain-modeling。
- Task,HITL 或 AFK:决定之前必须完成的操作,本身没有待研究或选择的问题。例如注册服务以便评估 API、获得访问、搬数据以查看形态。它是实际动手的一类,但存在理由是解除决策阻塞,不是顺便把产品做完。能自动完成就由 Agent 做,否则给人准确清单;完成后记录操作及后续需要的事实,如凭据位置、网址、行数。
Ticket Types
Every ticket is either HITL (human in the loop, worked with a human who speaks for themselves) or AFK, driven by the agent alone. A HITL ticket only resolves through that live exchange; the agent never stands in for the human's side of it (a grilling agent that answers its own questions has broken this).
- Research (AFK): Reading documentation, third-party APIs, or local resources like knowledge bases to surface a fact a decision waits on. Resolved by a subagent that calls the Skill tool with "research". Use when knowledge outside the current working directory is required.
- Prototype (HITL): Raise the fidelity of the discussion by making a cheap, rough, concrete artifact to react to (an outline, a rough take, a stub, or UI/logic code) by calling the Skill tool with "prototype". Links the prototype as an asset. Use when "how should it look" or "how should it behave" is the key question.
- Grilling (HITL): Conversation. The default case. Always call the Skill tool twice, for "grilling" and "domain-modeling".
- Task (HITL or AFK): Manual work that must happen before a decision can be made: nothing to decide, prototype, or research, but the discussion is blocked until it's done. Signing up for a service so its API can be judged, provisioning access, moving data so its shape can be seen. This is the one type that does rather than decides, and it earns its place by unblocking a decision, not by delivering the destination. The agent drives it alone where it can (AFK); otherwise it hands the human a precise checklist (HITL). Resolved when the work is done; the answer records what was done and any resulting facts (credentials location, new URLs, row counts) later tickets depend on.
不知道答案的原因不同,调查方法也不同
Research 用于需要外部知识;Prototype 用于必须看到或运行才判断;Grilling 用于明确人的目标与取舍;Task 用于完成某个现实前置动作。不要把所有问题都交给搜索,或把所有问题都退给用户。
例如接口支不支持流式输出,要查官方资料;两种阅读布局谁更方便,要做原型体验;是否公开笔记由你决定;开通某个权限可能是实际操作任务。
工单类型帮助选择下一步,但不是要求四类全部齐全。每项调查都应有一个清楚问题,结束后有足以推进的答案。
尚未看清的区域
地图刻意不画满。现在的问题解决后,才可能看清后面的选择,这些尚未清楚的区域称为 fog of war。
Not yet specified 保存预计会遇到、但还不能准确表述的范围内问题。随着认识增加,把能表述的内容转成新工单,并从模糊区域移除。
判断是否可以建工单,看能否准确提出问题,不是看现在能否回答。 问题已经明确,即使被阻塞,也可以建工单。问题本身还含糊,则先保留在未明确部分。不要预先把大片未知机械拆成工单大小;以后它可能变成多张,也可能发现无需处理。
这里不重复已经确定的决定、已有工单或范围外工作。
Fog of war
The map is deliberately incomplete: don't chart what you can't yet see. Beyond the live tickets lies the fog of war: the dim view of decisions and investigations you can tell are coming but can't yet pin down, because they hang on questions still open. Resolving a ticket clears the fog ahead of it, graduating whatever's now specifiable into fresh tickets, one at a time, until the way to the destination is clear and no tickets remain.
The map's Not yet specified section is where that dim view is written down: the suspected question, the area to revisit later. It's the undiscovered frontier toward the destination: everything here is in scope, just not sharp enough to ticket. Write as loosely or as fully as the view allows; it doubles as a signpost for collaborators reading where the effort is headed.
Fog or ticket? The test is whether you can state the question precisely now, not whether you can answer it now.
- Ticket when the question is already sharp, even if it's blocked and you can't act on it yet.
- Not yet specified when you can't yet phrase it that sharply. Don't pre-slice the fog into ticket-sized pieces: it's coarser than a ticket, and one patch may graduate into several tickets, or none, once the frontier reaches it.
Not yet specified excludes what's already decided (Decisions so far), what's already a live ticket, and what's out of scope (the next section).
不必预先知道整条路,但要知道现在能推进哪里
战争迷雾比喻目前还不了解的区域。某些后续问题必须等前面的答案出现才有意义,所以地图允许渐进补充,而不是一开始就写出假装完整的百步计划。
例如只有决定保存用户作答,才需要继续讨论保存期限与跨设备访问。新决定也可能让旧工单失效,应修改关系,而不是为了维护计划的整齐继续做无用工作。
前沿是已具备前置条件的事项集合。并行处理相互独立的调查可以提速,但未知依赖仍应诚实等待。
“还没答案”和“还不知道应该问什么”是两种状态
假设你要建设 AI 导师网站。已经能问“课程版权是否允许公开展示”,但还没有答案,这是可建立的研究工单。至于“以后是否支持学校场景”还没有明确用户、目标和范围,可能先作为模糊区域。
不过,如果这次目的地只是个人学习版,那么学校场景应放到范围外,而不是模糊区。范围外不会随着进展自动被加进来,否则项目越做越大。
地图像目录,子工单存实际决定。每次先读目录,选择相关问题,再打开完整材料,这就是按需要增加细节。只看目录一句摘要就开始实现,容易遗漏决定条件,所以最终还要汇总成规格。
HITL 表示必须由人给出判断。Agent 可以整理方案和理由,却不能自己扮演用户作选择。AFK 研究则适合独立查事实。
平台的分配标记帮助协调,不天然保证所有并发写入都没有冲突。100K 也是原文安排的规模,不是所有模型的统一限额。学习重点是让每个会话有明确问题、足够背景和可记录的答案。
本次范围之外
目的地决定范围。范围外的工作不是尚未看清,而是本次不做,应单列 Out of scope。它不会随着前沿推进而自动成为工单,只有重新定义目的地后,才作为新的工作再考虑。
如果现有工单后来发现超出目的地,关闭它,使其明确退出待做集合。在范围外部分写一句概要、理由和链接,不加入已走过路线的 Decisions so far,因为划定范围不是路线上的已解决决定。
Out of scope
Fog only ever gathers toward the destination. The destination fixes the scope, so work beyond it is out of scope: it isn't fog, and it doesn't belong in Not yet specified. It gets its own Out of scope section on the map: work you've consciously ruled out of this effort. Scope, not sharpness, lands it here.
Out-of-scope work never graduates (the frontier stops at the destination), so it returns only if the destination is redrawn, and then as a fresh effort, not a resumption.
Ruling something out of scope is a scoping act, not a step on the route. When a ticket that already exists turns out to sit past the destination (mis-scoped in while charting, or exposed by a resolution), close it (a closed ticket is unambiguously off the frontier) and leave one line in the Out of scope section: the gist plus why it's out of scope, linking the closed ticket. It stays out of Decisions so far, which records the route actually walked; a scope boundary isn't a step on it.
调用方式
创建地图与继续地图两种模式。除研究工单外,每次会话不解决超过一张工单。
Invocation
Two modes. Either way, never resolve more than one ticket per session, with the exception of research tickets.
建立地图
- 分别加载 grilling 和 domain-modeling,先明确目的地,让范围确定。
- 再广度优先地讨论,先扫视所有方向,找出未决事项和当前可采取的第一步,不在一个分支过早深入。如果路径已经清楚、工作一次会话足够,则无需地图,停下询问接下来怎样推进。
- 创建地图,填写目的地和 Notes,已决索引先留空,模糊区域写入 Not yet specified。
- 创建现在能准确描述的子工单,再进行第二轮建立依赖,因为要先有真实编号才能互相引用。未能描述的仍留在模糊区域。
- 对新建的每个研究工单,启动调用 research 的子 Agent 并行调查,将发现保存到临时
research/<name>分支,并从工单引用。 - 到此结束。建图本身就是本会话的工作,不继续亲自解决决策条目。
Chart the map
User invokes with a loose idea.
- Name the destination. Call the Skill tool twice, for "grilling" and "domain-modeling", to pin down what this map is finding its way to: the spec, decision, or change. The destination fixes the scope, so it's settled first.
- Map the frontier. Grill again, breadth-first this time: fan out across the whole space rather than deep on any one thread, surfacing the open decisions and the first steps takeable now. If this surfaces no fog (the way to the destination is already clear, the whole journey small enough for one session), you don't need a map. Stop and ask the user how they'd like to proceed.
- Create the map (label
wayfinder:map): Destination and Notes filled in, Decisions-so-far empty, the fog sketched into Not yet specified. - Create the tickets you can specify now as child issues of the map, then wire blocking edges in a second pass (issues need ids before they can reference each other). Wiring sorts them into the frontier and the blocked; everything you can't yet specify stays in the fog: the Not yet specified section.
- Fire the research subagents. For each
researchticket you just created, spin up a subagent that calls the Skill tool with "research" to resolve it in parallel, capturing its findings on a throwawayresearch/<name>branch with a context pointer from the ticket. - Stop: charting is one session's work; it hand-resolves nothing.
继续地图
用户给地图网址或编号,可以指定工单;未指定时由 Agent 选下一项。
- 读取整体地图,不一次读取所有工单正文。
- 指定工单就采用它;否则按顺序取当前可领取项。开始前先分配给自己。
- 按需放大细节,读取相关或已关闭工单的完整内容,加载 Notes 指定的技能。不确定时采用 grilling 与 domain-modeling。
- 发布解决说明评论,关闭工单,并在地图已决索引追加概要链接。
- 创建新发现的问题,再建立依赖。将已经明确的模糊区域移成工单,避免双处重复。若发现工作超出目的地,按范围外处理;其他因此失效的条目更新或删除。
用户可能并行推进不同已解除阻塞的工单,应考虑其他会话也在同时编辑任务系统。
Work through the map
User invokes with a map (URL or number). A ticket is optional: without one, you pick the next decision, not the user.
- Load the map: the low-res view, not every ticket body.
- Choose the ticket. If the user named one, use it. Otherwise take the first frontier ticket in order. Claim it: assign it to yourself before any work.
- Resolve it. Zoom as needed: fetch the full body of any related or closed ticket on demand; call the Skill tool for whichever skills the
## Notesblock names. If in doubt, call the Skill tool twice, for "grilling" and "domain-modeling". - Record the resolution: post the answer as a resolution comment, close the issue, and append a context pointer to the map's Decisions-so-far.
- Add newly-surfaced tickets (create-then-wire); graduate any fog the answer has made specifiable, clearing each graduated patch from Not yet specified so it lives only as its new ticket. If the answer reveals that a ticket (this one or another) sits beyond the destination, rule it out of scope rather than resolving it on the route. If the decision invalidates other parts of the map, update or delete those tickets.
The user may run unblocked tickets in parallel, so expect other sessions to be editing the tracker concurrently.
从地图交到规格时,别丢掉决策依据
逐项处理后,记录答案与理由、更新阻塞关系,并交接。地图清晰时,再通过 to-spec 综合为实施依据;直接拿一堆调查链接让 implement 猜最终需求,会漏掉关键取舍。
某项研究显示一个方案不可行,也可能是高价值进展;它缩小了选择范围。完成标准不是每张工单都显示成功,而是通往目标的路径已经足够清楚。
对你而言,本课可以用在大范围 AI 项目早期。它不能保证不会返工,但能让“还不知道什么”明确可见,减少未经确认的隐含决定。
先作答,再看参考思路
用自己的话说明:它解决什么问题,完成后会留下什么?
请各用一句话回答。若它只做规划或解释,不要把“已开发”“已部署”写成产物。
“暂时不知道答案”和“暂时不能准确提出问题”应怎样区分?
我已思考,查看参考思路
前者可创建明确问题的工单并标依赖;后者放待明确区。范围之外则另列,不能随前沿推进自动进入本轮。
原文中哪条要求在你的环境下可能不成立?
说出具体一句及其前提,例如工具不可用、资料缺失、已有项目约定冲突,或它只是作者偏好。把你的答案带回课堂,我们据此继续讨论。
把方法放进一个具体情境
教学案例:规划“终身 AI 健康助手”时,数据来源、用户角色和信息边界可能互相依赖。可以先探索数据能否获得;但不要把“未来做全球医疗平台”写成当前地图必解的迷雾。
边界与容易误读的地方
这是成本较高的规划方式。一个已经清楚的小功能不值得建地图;地图全部关闭也不表示软件已经开发完成。
讨论后再实践:先判断上述情境是否适用,再选择真实任务。现在无需安装、运行命令或修改现有项目。