Community程式設計與開發github.com

mattpocock/wayfinder

規劃一個超過單次代理工作階段處理範圍的大型工作,將其轉化為問題追蹤器上共享的決策票據地圖,並逐一解決,直到通往目的地的路線清晰為止。

wayfinder 是什麼?

Wayfinder 是一個 AI 代理技能,專門處理「過於龐大,無法在單一代理工作階段內完成」的模糊構想。它不是直接衝向目標,而是透過在儲存庫的問題追蹤器上繪製一張「共享地圖」,將大型任務拆解為多個獨立的「決策票據」。每個票據都代表一個需要做出決策或進行調查的具體問題,而不是單純的待辦事項。此技能支援 GitHub Issues、Linear 等問題追蹤器,並透過標籤(如 `wayfinder:map`)和原生依賴關係來管理地圖、票據及其阻斷狀態。工作流程分為「繪製地圖」與「逐步解決地圖」兩個階段,前者專注於釐清範疇、繪製初始路線和創建第一個可操作的票據;後者則從「前沿」(未被阻斷且未被認領的開放票據)中選取並解決票據,每次只解決一個(研究票據除外),並在解決過程中動態更新地圖,例如將「未指定」的迷霧區域逐步轉換為新的具體票據,或將超出範疇的項目歸類為「超出範疇」。Wayfinder 的核心價值在於提供一個結構化、可並行協作且能跨越多次工作階段的規劃框架,有效管理複雜度與不確定性。

相容平台~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 的新對話。

說明文件

一個模糊的構想降臨了,大到一個代理工作階段裝不下,而且迷霧重重:從這裡到目的地的路徑還看不見。Wayfinding 就是關於找到那條路,而不是埋頭衝向目的地。這個技能將路線繪製成儲存庫問題追蹤器上的一張共享地圖,然後逐一處理其決策票據(售票內容是「有待決定的問題」,而不是「待執行的建構片段」),直到路線清晰為止。

目的地依每次任務而異,為其命名是繪製地圖的第一步:它塑造了每一張票據。目的地可能是一份待交接、待迭代的規格,一個要在規劃開始前鎖定的決策,或是一個原地進行、如資料結構遷移的變更。地圖是領域中立的:工程工作、課程內容,任何符合此形式的東西都適用。

規劃,而非執行

Wayfinder 預設為規劃工具:每個票據解決一個決策,而當路線清晰、無需再做任何決定即可著手進行時,地圖即算完成。直接動手做的衝動,通常是你已到達地圖邊緣、該進行交接的信號。任務可以在其備註中覆寫此設定,將執行本身帶入地圖中,但若無此設定,請產出決策,而非可交付成果。

用名稱來指代

每張地圖和每個票據都是一個 Issue,因此它有一個名稱:它的標題。在所有人類閱讀的內容(敘述、地圖的「至今作出的決策」)中,都應使用該名稱來指代,絕對不能只用編號、ID 或短碼。一串 #42, #43, #44 難以閱讀;名稱則一目瞭然。ID 和 URL 並未消失;名稱包含了其連結,但它們是在名稱之內的,不能取代名稱。

地圖

地圖是此儲存庫問題追蹤器上的一個 Issue,帶有 wayfinder:map 標籤,是規範性的產物。它的票據是地圖的子 Issue。

地圖是索引,而非儲存庫。它列出已做出的決策,並指向包含其細節的票據;一個決策只存在於一個地方,也就是它的票據中,因此地圖絕不重述,只摘要並連結它。

地圖、其子票據、阻斷關係以及前沿查詢的實際存放位置是取決於追蹤器的。問題追蹤器應該已經提供給你了。如果沒有,請告訴使用者執行 /setup-matt-pocock-skills。查閱追蹤器文件中「Wayfinding 操作」一節,了解此儲存庫如何表達這些項目。如果未提供任何追蹤器,則預設使用本地 Markdown 追蹤器。

地圖內容

整張地圖的低解析度檢視,每個工作階段載入一次。不列出開放的票據:它們是透過查詢找到的開放子 Issue。

## 目的地

<到達此地圖終點的樣貌:此任務所要找到的規格、決策或變更。一兩行即可;每個工作階段在選擇票據前都會以此為方向。>

## 備註

<領域;每個工作階段都應查閱的技能;此任務的慣用偏好>

## 至今作出的決策

<!-- 索引:每個已關閉票據一行,足以判斷相關性,然後點擊連結查看票據的詳細答案 -->

- [<已關閉票據的標題>](連結): <一行摘要答案>

## 尚未指定

<!-- 參見「戰爭迷霧」:範圍內但尚無法開出票據的迷霧;隨著前沿推進而逐漸成形 -->

## 超出範疇

<!-- 參見「超出範疇」:被判定在此目的地之外的工作;已關閉,永不轉為票據 -->

票據

每個票據都是地圖的子 Issue;追蹤器的 Issue ID 即為其身份。其內容就是問題,其大小應適合一個 10 萬 Token 的代理工作階段:

## 問題

<此票據所要解決的決策或調查>

每個票據都帶有一個 wayfinder:<類型> 標籤,類型為 research、prototype、grilling、task(參見票據類型)。

一個工作階段認領一個票據的方式是,在進行任何工作之前,先將其指派給負責推進地圖的開發人員,以便其他並行的工作階段可以跳過它。該指派者就是認領行為:一個開放且未分派的票據即為未被認領。

阻斷關係使用追蹤器的原生依賴關係:這至關重要,因為它可以在追蹤器自己的使用者介面中視覺化呈現前沿,讓人類無需打開地圖就能看到哪些票據可以領取。只有當追蹤器缺乏原生阻斷功能時,才退而使用內容慣例。當所有阻斷某張票據的票據都已關閉時,該票據即為未受阻斷;前沿就是那些開放、未受阻斷且未被認領的子票據,即已知領域的邊緣。

答案不是內容的一部分;它在解決時才被記錄(參見逐步解決地圖)。在解決某張票據時建立的資產,應從該 Issue 連結,而非貼入內容中。

票據類型

每個票據要不是 HITL(需人參與,與能為自己發言的人類一起處理),就是 AFK,由代理獨自處理。HITL 票據只能透過即時交流解決;代理絕不能代替人類方發言(一個自問自答的 grilling 代理就已違反此原則)。

  • 研究(Research)(AFK):閱讀文件、第三方 API 或本地資源(如知識庫),以找出某個決策所依賴的事實。由一個呼叫「research」Skill 工具的子代理解決。當需要當前工作目錄以外的知識時使用。
  • 原型(Prototype)(HITL):透過製作一個廉價、粗略、具體的工件以供反饋,來提升討論的精確度(大綱、粗略草稿、骨架或 UI/邏輯程式碼)。透過呼叫「prototype」Skill 工具來執行。將原型作為資產連結。當「應該長什麼樣子」或「應該如何運作」是關鍵問題時使用。
  • 盤問(Grilling)(HITL):對話。預設情況。務必呼叫 Skill 工具兩次,分別用於「grilling」和「domain-modeling」。
  • 任務(Task)(HITL 或 AFK):在做出決策之前必須完成的手動工作:無需決定、建立原型或研究,但討論因此受阻。例如註冊服務以便評估其 API、佈建存取權限、移動資料以便檢視其結構。這是唯一一種執行而非決定的類型,它之所以能存在,是因為它能解除決策的阻斷,而不是因為它能直接交付目的地。代理可以獨自處理的部分(AFK)就由代理驅動;否則,它會交給人類一份精確的檢查清單(HITL)。當工作完成時即解決;答案中應記錄完成了什麼,以及後續票據依賴的任何衍生事實(憑證位置、新 URL、行數等)。

戰爭迷霧

地圖是刻意不完整的:不要繪製你還看不清的東西。在當前活躍的票據之外,存在著戰爭迷霧:你察覺到即將到來,但還無法確定的決策和調查,因為它們取決於仍在開放的問題。解決一個票據會驅散它前方的迷霧,讓那些現在可以具體描述的內容逐個轉變為新的票據,直到通往目的地的路線清晰,且沒有任何票據留下為止。

地圖的尚未指定區塊就是用來記錄那片模糊視野的地方:可疑的問題,日後需要再回頭審視的區域。它是朝著目的地前進的未發現前沿:這裡的一切都在範疇內,只是還不夠清晰到可以開出票據。根據視野的清晰度,可以寫得鬆散或詳細;它同時也為閱讀此任務進度的協作者提供了路標。

迷霧還是票據? 判斷標準是你現在是否能精確陳述問題,而不是你現在是否能回答它。

  • 開票時機是當問題已經很明確時,即使它受阻而無法立即處理。
  • 尚未指定時機是當你還無法如此精確地描述問題時。不要預先將迷霧切成票據般的大小:它比票據更粗糙,而且當前沿抵達時,一塊迷霧可能會分化成好幾個票據,也可能一個都沒有。

尚未指定區塊排除已經決定(「至今作出的決策」)、已經是活躍票據,以及超出範疇(下一節)的項目。

超出範疇

迷霧只會朝向目的地聚集。目的地界定了範疇,因此超出範疇的工作並非迷霧,不應歸入尚未指定。它在地圖上應有自己專屬的超出範疇區塊:那些你有意識地排除在此任務之外的工作。是範疇,而非清晰度,將其歸類於此。

超出範疇的工作永遠不會轉為票據(前沿止步於目的地),因此它只有在目的地被重新定義時才會回來,而且那時它會是一個全新的任務,而非重啟。

將某事物判定為超出範疇是一個界定範疇的行為,而不是路線上的步驟。當一張已存在的票據後來被發現處於目的地之外時(在繪圖時錯誤地納入,或因解決其他票據而被揭露),關閉它(已關閉的票據明確地不在前沿上),並在超出範疇區塊中留下一行:摘要加上為何超出範疇,並連結該已關閉的票據。它不應留在至今作出的決策中,因為那裡記錄的是實際走過的路線;範疇邊界不是路線上的步驟。

調用

兩種模式。無論哪種,每個工作階段絕不解決超過一個票據,研究票據除外。

繪製地圖

使用者帶著一個模糊構想調用。

  1. 為目的地命名。 呼叫 Skill 工具兩次,分別用於「grilling」和「domain-modeling」,以確定此地在圖要找到什麼:是規格、決策還是變更。目的地界定了範疇,因此需首先確定。
  2. 繪製前沿。 再次盤問,這次是廣度優先:在整個空間中展開而非深入任何一個線索,找出開放的決策以及現在就可以採取的初步步驟。如果這沒有浮現任何迷霧(通往目的地的路線已經清晰,整個旅程小到一個工作階段即可完成),那麼你不需要地圖。停下來詢問使用者希望如何進行。
  3. 創建地圖(標籤 wayfinder:map):填入目的地和備註,至今作出的決策為空,將迷霧草擬到尚未指定區塊。
  4. 創建你現在就能具體描述的票據作為地圖的子 Issue,然後在第二輪中建立阻斷關係邊緣(Issue 需要先有 ID 才能互相參照)。建立關係會將它們分類到前沿和受阻狀態;所有你尚無法具體描述的項目則留在迷霧中:也就是尚未指定區塊。
  5. 啟動研究子代理。 對於你剛才創建的每一個 research 票據,啟動一個子代理,呼叫「research」Skill 工具來並行解決它,並將其發現結果記錄在一個臨時的 research/<名稱> 分支上,並從該票據附加一個上下文指標。
  6. 停止:繪圖是一個工作階段的工作;它不會手動解決任何東西。

逐步解決地圖

使用者透過一個地圖(URL 或編號)調用。可以選擇一個票據:如果沒有指定,你選擇下一個決策,而不是由使用者選擇。

  1. 載入地圖:低解析度檢視,而不是每個票據的完整內容。
  2. 選擇票據。如果使用者指定了,就使用它。否則,依序選取第一個前沿票據。認領它:在任何工作開始之前,先將其指派給你自己。
  3. 解決它。按需放大細節:按需擷取任何相關或已關閉票據的完整內容;呼叫 Skill 工具使用 ## 備註 區塊中提到的任何技能。如果不確定,請呼叫 Skill 工具兩次,分別用於「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.

相關技能