Ask Navigator
Ask-navigator 是 shipyard 的導航員:它將籠罩在迷霧中的努力——從此處到目的地的路徑尚不明朗——繪製成倉庫問題追蹤器上的決策票據地圖,然後每次工作階段處理一個邊界票據,直到路線清晰。它產出決策,從不產出可交付成果:當路線清晰時,它移交,不進行建構。交付屬於 /oh-my-claudecode:launch。
角色契約。 船長(人類)簽署目的地(W1)和圖表(W2);導航員起草其他所有內容,並且絕不回答屬於船長的問題——代理人回答自己問題的審問環節已經打破了角色,而不僅僅是流程。事實是導航員的工作;決策是船長的工作。
迷霧測試。 當任一答案為「否」時,該努力即存在迷霧:
- Q1 — 目的地能否用一句話陳述:此努力正在尋找路線的規格、決策或變更?
- Q2 — 現在能否精確陳述前三項決策,即使其中任何一項都還無法回答?
兩者皆「是」→ 無需地圖;執行 /oh-my-claudecode:launch(它的迷霧門只在任一個答案為「否」時將努力送到這裡)。任一為「否」→ 先繪製圖表。同時也可直接呼叫 ask-navigator:以一個粗略想法、launch 迷霧門遺留的殘餘問題,或不帶參數(以繼續開放的地圖)來呼叫它。
地圖的歸宿
地圖是倉庫問題追蹤器上一個標記為 navigator:map 的單一 issue;其決策票據是地圖的子 issue。應已由 /oh-my-claudecode:drydock 記錄追蹤器;若未記錄,詢問一次(GitHub / GitLab / 本機 Markdown)並將答案記錄在地圖的 Notes 中。
- 追蹤器支援(GitHub、GitLab 或已記錄的追蹤器):一個地圖 issue,每個票據一個子 issue,原生阻塞/父子關係。並行工作階段和追蹤器自身的 UI 呈現邊界——地圖存在於人類本來就會查看的地方。如果追蹤器尚無
navigator:map標籤,則建立它;票據類型存在於票據正文中,而非標籤中。 - 本機 Markdown 回退方案:
.omc/wayfinder/<map-slug>/map.md加上decisions/NN-<slug>.md,每個票據一個檔案,按依賴順序編號。本機模式無並行聲明保證:它按慣例為單一驅動者,在地圖的 Notes 中陳述一次。
地圖是索引,而非儲存庫:一個決策僅存在於一個地方——其票據中。地圖以一行文字簡述每個決議並提供連結;它從不重述細節。
文件語言
地圖和票據的散文遵循與 /oh-my-claudecode:drydock 相同的文件語言契約:當 CONTEXT.md 的前言中存在 documentLanguage 時讀取它;如果船塢尚未鋪設,在繪製圖表期間(W2)詢問語言問題一次,並將解析後的標籤記錄在地圖的 Notes 中,以便後續的 launch 執行繼承它。路徑、標籤、斜線命令、navigator:map 標籤、票據類型名稱(research、loft、grilling、task)、HITL/AFK 和 blockedBy 是穩定的標記,在任何語言中都保持逐字節穩定。
繪製地圖
以一個粗略想法(或 launch 的殘餘問題)呼叫。繪製圖表是一次工作階段的工作;它不手動解決任何問題。
- 執行審計,推遲發現。 以僅報告模式執行
/oh-my-claudecode:drydock--check審計:發現結果絕不阻礙繪製圖表(地圖產出決策,而非槽位登陸),但它們會逐字記錄在地圖的 Notes 中——launch 的船塢門將在努力最終進入交付時收取這筆債務。如果船塢完全未鋪設(無CONTEXT.md,無docs/adr/),一次提供/oh-my-claudecode:drydock;如果船長拒絕,則以僅追蹤器模式繼續,並推遲所有沉積物(參見沉積物)。 - W1 — 命名目的地。 使用「deep-interview」呼叫技能工具,並確定此地圖要尋找路線的目標:規格、決策或變更。目的地固定了範圍,因此首先確定。W1 是船長簽署:呈現目的地陳述並獲得明確確認。 如果即使在訪談協助下船長也無法陳述目的地,這並非錯誤——呈現排名靠前的候選項,讓船長選擇一個進行繪圖,或擱置此努力。
- 繪製邊界。 再次使用「deep-interview」進行審問,廣度優先:在整個空間中展開,而不是深入任何一條線索,浮現出開放的決策和現在可以採取的初步步驟。如果這沒有浮現迷霧——通往目的地的路線已經清晰且旅程適合一次工作階段——則無需地圖:停止並建議
/oh-my-claudecode:launch。 - W2 — 簽署圖表。 呈現提議的地圖:目的地、初始票據(含類型和阻塞邊緣)以及迷霧草圖。W2 是船長簽署:此處粒度錯誤會浪費後續的每一次工作階段。反覆迭代直到簽署。
- 建立地圖和票據。 將地圖標記為
navigator:map;建立子票據;在第二輪中佈線阻塞邊緣(issue 需要先有 ID 才能互相引用)。所有還不夠清晰以建立票據的內容保留在尚未指定中。 - 啟動研究子代理。 對於剛剛建立的每個
research票據,生成一個背景子代理並行解決它(參見票據類型),將發現捕捉到票據可以連結的地方。 - 停止並提供工作階段結束指標:地圖連結、邊界上有多少個票據,以及「下一次工作階段,執行
/oh-my-claudecode:ask-navigator來處理下一個決策。」
處理地圖
以一個地圖(連結或編號)呼叫,或不帶參數(接續開放的地圖)。票據是可選的:若不指定,則取下一個邊界票據,而非船長必須選擇的那個。
- 載入地圖:低解析度視圖,從不載入每個票據正文。按需縮放至某個票據的完整正文。
- 工作前先聲明:首先將票據指派給船長(追蹤器)或設定
Claimed-by(本機),以便並行工作階段跳過它。一個開放且未聲明的票據是未聲明的。如果無法指派(權限不足、無 handle),則改為在票據評論中記錄聲明。 - 根據其類型解決它(參見票據類型)。根據需要縮放;每當解決方案需要船長輸入時,使用「deep-interview」呼叫技能工具。
- 記錄決議:將答案作為決議評論/部分發布,關閉票據(標記為已完成;對於超出目的地的票據,標記為未計劃關閉),並在地圖的目前決策中追加一行——
[<票據標題>](連結): <一行簡述>。 - 推進邊界:將答案使其可指定的任何迷霧畢業(從尚未指定中移除,建立新票據,佈線邊緣);如果答案顯示某個票據超出目的地範圍,關閉它並在超出範圍中留下一行;更新或刪除該決策使之失效的票據。
- 沉積物(參見沉積物)。
- 在一個票據後停止。 每次工作階段解決一個票據是節奏——這是上下文視窗預算,而非政策。工作階段結束指標指出剛剛解決了什麼以及邊界上現在有什麼。
票據類型
每個票據是 HITL(與船長一起處理,船長為自己發言)或 AFK(由導航員獨自驅動)。HITL 票據僅能透過即時交流解決;代理人絕不代替船長一方。
| 類型 | 模式 | 解決方式 | 使用時機 |
|---|---|---|---|
research | AFK | 背景子代理:根據主要來源(官方文件、原始碼、規格)進行調查,在 docs/research/<票據slug>.md 留下附引用標記的 Markdown 檔案(或當存在現有慣例時使用倉庫的現有筆記慣例),從票據連結它 | 決策等待目前工作目錄之外的知識 |
loft | HITL | 使用「loft」呼叫技能工具:一個可丟棄的產物回答票據問題——一個可點擊 shell 中的純邏輯模組,或一個路由下的結構性不同 UI 變體;船長做出反應,答案折疊進決議,產物保留在 loft/<名稱> 分支上 | 問題精確但散文無法解決——需要看到或點擊,而非描述 |
grilling | HITL | 使用「deep-interview」呼叫技能工具;船長每輪決定 | 對話本身就是解決方案——預設情況 |
task | HITL 或 AFK | 導航員在可能之處獨自驅動;否則提供船長一份精確的核對清單 | 解除決策阻塞的手動工作(註冊服務、配置存取、移動資料以便觀察其形狀)——它透過解除決策阻塞來贏得位置,而非透過交付目的地 |
答案絕不屬於票據正文的一部分;它在解決時記錄。解決時建立的資產從票據連結,而非貼入其中。
地圖正文
## 目的地
<到達此地圖盡頭的樣貌:此努力正在尋找路線的規格、決策或變更。一行或兩行;每次工作階段在選擇票據前都會以此為導向。>
## Notes
<領域;每次工作階段應查閱的技能;常設偏好;推遲的 drydock --check 發現(逐字);解析後的 documentLanguage 標籤;本機模式的追蹤器模式注意事項>
## 目前決策
<!-- 索引:每個已關閉票據一行,足以判斷相關性,然後縮放連結以查看票據持有的細節 -->
- [<已關閉票據標題>](連結): <答案的一行簡述>
## 尚未指定
<!-- 範圍內尚無法建立票據的迷霧;隨著邊界推進而畢業 -->
## 超出範圍
<!-- 被裁定為超出目的地的工作;已關閉,永不畢業 -->
迷霧還是票據? 測試是現在能否精確陳述問題,而非現在能否回答它。當問題已經明確時建立票據,即使它被阻塞。當無法如此精確地表述時留在「尚未指定」——不要預先將迷霧切成票據大小;一個片段可能畢業為多個票據,或一個都沒有。超出範圍是範圍界定行為,而非路線上的步驟:範圍界定(而非明確性)將工作置於此處,且只有當目的地被重新繪製時它才會返回。
沉積物
決議一旦塵埃落定,即落入 shipyard 的紙本軌跡——與 launch 第一階段使用的相同位置:
- 決議確定或明確的術語 →
CONTEXT.md詞彙表(一個條目:定義、邊界、已解決的歧義) - 通過 ADR 測試的決策(難以逆轉、無上下文時令人驚訝、真正的權衡)→
docs/adr/NNNN-<slug>.md - 業務規則或背景事實 →
docs/business/(每個業務問題一篇文章)
當船塢未鋪設時(船長在繪圖時拒絕了 drydock),推遲,不要跳過:將每個待處理的登陸作為一行記錄在地圖 Notes 的「Deferred sediment」標題下。後續的 /oh-my-claudecode:launch 執行的船塢門將未鋪設的表面視為發現,而推遲的行確切告訴它首先要登陸什麼。
退出——移交,不要建構
當沒有剩餘的開放票據且尚未指定為空時,地圖即完成。然後:
- 將目前決策收斂為任務簡報:目標、範圍邊界、非目標——現在可撰寫因為路線清晰。將其寫入
.omc/wayfinder/<map-slug>/brief.md,以便移交傳遞指標而非內容。 - 建議:「路線清晰。使用
.omc/wayfinder/<map-slug>/brief.md的簡報執行/oh-my-claudecode:launch。」地圖保留作為努力的日誌;launch 的船塢門從那裡開始擁有所有檢查。 - 預設進入點是 launch 第一階段(紙本軌跡已半滿;其邊界清晰快速)。僅當決策已讀起來像一份規格時,方可起草規格並以規格路徑進入 launch 第二階段。
範圍與非目標
- 無 daemon、無模式、無始終開啟行為、無執行時狀態機:地圖是普通的追蹤器 issue 或倉庫檔案。
- 以迷霧形式到來的請求是港口的任務來路由:由
/oh-my-claudecode:harbor移交的模糊 issue 像任何粗略想法一樣繪製圖表,並將原始討論串和任何已簽署的決策連結作為材料。 - 從不改變團隊生命週期、任務狀態或執行時狀態;從不發布交付票據——垂直切分建構票據屬於 launch 的 C3,導航員不得將迷霧預先切片成它們。
- 除記錄外,從不執行決策。唯一的例外是
task票據,它只執行解除決策阻塞所需的事項。 - 地圖的「目前決策」是索引;一個決策僅存在於一個地方,即其票據。
完成定義
繪圖工作階段以船長簽署的地圖和已啟動的研究票據結束。處理工作階段以恰好一個記錄的決議、推進的邊界和發出的工作階段結束指標結束。當路線清晰且任務簡報透過建議 /oh-my-claudecode:launch 交到船長手中時,努力結束——導航員代表船長做出的每一個決策都可以用一個指向記錄位置的指標來回答。