Ask Navigator 是做什么的?
Ask-navigator 是 Shipyard 的导航仪:它将包裹在迷雾中的目标(从起点到终点的路径尚不可见)绘制成一个决策工单地图,存储在仓库的问题追踪器中,然后每个会话处理一个前沿工单,直至路线清晰。它产生的是决策,而非交付物:路线清晰后它即移交,不会动手构建。交付属于 /oh-my-claudecode:launch。
角色契约。 船长(人类)签署目标(W1)和地图(W2);导航员起草其他所有内容,并且绝不回答属于船长的问题 —— 在审讯会议中,代理回答了自己的问题,这已经破坏了角色,而不仅仅是流程。事实是导航员的工作;决策是船长的。
迷雾测试。 当以下任一答案为“否”时,表示目标存在迷雾:
- 问题1 —— 目标能否用一句话陈述清楚:该目标要达成的规格、决策或变更?
- 问题2 —— 当前能否精确陈述前三个决策,即使它们都还无法回答?
两个都是“是” → 无需地图;运行 /oh-my-claudecode:launch(其迷雾门仅在答案为“否”时将目标导向此处)。任一为“否” → 先绘制地图。ask-navigator 也可以直接调用:传入一个粗略的想法、由 launch 的迷雾门传递的遗留问题,或不传入参数以继续打开的地图。
地图主页
地图是仓库问题追踪器上标记为 navigator:map 的单个问题;其决策工单是该地图的子问题。追踪器应由 /oh-my-claudecode:drydock 记录;如果未记录,则询问一次(GitHub / GitLab / 本地 Markdown),并将答案记录在地图的 Notes 中。
- 基于追踪器(GitHub、GitLab 或已记录的追踪器):一个地图问题,每个工单一个子问题,使用原生阻塞/子任务关系。并发会话和追踪器自身的 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;创建子工单;在第二轮中配置阻塞边(工单需要 ID 后才能相互引用)。所有尚不够清晰以致无法创建工单的内容,放在尚未指定中。 - 启动研究子代理。 对于刚创建的每个
research工单,生成一个后台子代理并行解析(参见工单类型),将发现捕获到工单可以链接的位置。 - 停止,并给出会话结束指针:地图链接、前沿上有多少工单,以及“下一会话,运行
/oh-my-claudecode:ask-navigator以处理下一个决策。”
推进地图
通过一个地图(链接或编号)或不传入参数(继续当前打开的地图)调用。工单是可选的:如果不传入,则取下一个前沿工单,而非需要船长选择的工单。
- 加载地图:低分辨率视图,绝不加载每个工单的完整正文。按需缩放查看工单的完整内容。
- 先声明,再工作:首先将工单分配给船长(追踪器)或设置
Claimed-by(本地),以便并发会话跳过它。一个打开但未声明的工单是未声明的。如果无法分配(权限问题、无句柄),则在工单评论中记录声明。 - 根据其类型解析(参见工单类型)。根据需要缩放;每当解析需要船长输入时,使用“deep-interview”技能工具调用。
- 记录决议:将答案发布为决议评论/部分,关闭工单(标记为已完成;判定超出目标范围的工单关闭为“未计划”),并在地图的截至目前决策中添加一行 ——
[<工单标题>](链接): <一行摘要>。 - 推进前沿:将使答案变得可指定的迷雾升级(从尚未指定中移除,创建新工单,配置边);如果答案显示某个工单位于目标范围之外,则关闭它并在范围外中留一行;更新或删除被决议无效化的工单。
- 沉淀(参见沉淀)。
- 每次只处理一个工单后停止。 每次会话一个决议是节奏 —— 这是上下文窗口预算,而非策略。会话结束指针命名刚刚解析的内容以及当前前沿的内容。
工单类型
每个工单是 HITL(与船长一起工作,船长代表自己发言)或 AFK(由导航员独自驱动)。HITL 工单仅通过实时交流解决;代理绝不得代表船长一方。
| 类型 | 模式 | 解决方式 | 使用场景 |
|---|---|---|---|
research | AFK | 后台子代理:针对主要来源(官方文档、源代码、规格)进行调查,将带引用的 Markdown 文件放置在 docs/research/<工单缩写>.md(如果仓库已有现有笔记约定则遵循该约定),从工单链接该文件 | 决策需要当前工作目录之外的知识 |
loft | HITL | 使用“loft”技能工具调用:一个一次性工件回答工单的问题 —— 一个可运行的 shell 中的纯逻辑模块,或一个路由下的结构不同的 UI 变体;船长做出反应,答案归入决议,工件保留在 loft/<名称> 分支上 | 问题精确但散文无法解决 —— 需要看到或点击,而非描述 |
grilling | HITL | 使用“deep-interview”技能工具调用;船长每轮做出决定 | 对话就是决议 —— 默认情况 |
task | HITL 或 AFK | 导航员能独立完成的部分由其独自驱动;否则给船长提供精确的检查清单 | 需要手动操作以解锁决策(注册服务、配置访问权限、移动数据以便查看其结构)—— 它通过解锁决策来获得位置,而非通过交付目标 |
答案绝不是工单正文的一部分;答案在解决时记录。解决过程中创建的资产从工单链接,而非粘贴到工单中。
地图正文
## 目标
<到达此地图终点时的情况:该目标要达成的规格、决策或变更。一到两行;每个会话在选择工单前都会以此为导向。>
## 备注
<领域;每个会话应查阅的技能;长期偏好;推迟的 drydock --check 发现(原样);已解析的 documentLanguage 标签;本地模式的追踪器模式注意事项>
## 截至目前决策
<!-- 索引:每个已关闭工单一行,足以判断相关性,然后放大链接查看工单所持有的细节 -->
- [<已关闭工单标题>](链接): <答案的一行摘要>
## 尚未指定
<!-- 范围内的但尚无法创建工单的迷雾;随前沿推进而升级 -->
## 范围外
<!-- 被判定超出目标范围的工作;已关闭,永远不会升级 -->
迷雾还是工单? 判断标准是你现在是否能精确陈述问题,而非你现在是否能回答它。当问题已经清晰时创建工单,即使它被阻塞。当你无法如此精确地表述时,则属于尚未指定 —— 不要将迷雾预切为工单大小的碎片;一块迷雾可能升级为若干个工单,也可能无需升级。范围外是一种范围界定行为,而非路线上的步骤:范围,而非清晰度,将工作放置在那里,并且只有目标被重新绘制时才会返回。
沉淀
决议一经确定便立即落地到 Shipyard 的纸质记录中 —— 与 launch 的 Phase 1 使用相同的槽位:
- 决议所确定或精确化的术语 →
CONTEXT.md术语表(一个条目:定义、边界、已解决的模糊点) - 满足 ADR 测试标准的决策(难以撤销、脱离上下文令人惊讶、涉及真实权衡) →
docs/adr/NNNN-<缩写>.md - 业务规则或背景事实 →
docs/business/(每个业务问题一篇文章)
当船坞尚未铺设(船长在制图时拒绝了 drydock)时,推迟,不要跳过:在Deferred sediment标题下的地图 Notes 中将每个待落地项记录为一行。后续的 /oh-my-claudecode:launch 执行的船坞门将未铺设的表面视为发现,而推迟的行则准确告知它应首先落地哪些内容。
退出 —— 移交,不构建
当没有未关闭的工单且尚未指定为空时,地图完成。然后:
- 将截至目前决策折叠为任务简报:目标、范围边界、非目标 —— 由于路线现在清晰,因此现在可以编写。将其写入
.omc/wayfinder/<map-slug>/brief.md,以便移交传递指针而非内容。 - 推荐:“路线已清晰。使用
.omc/wayfinder/<map-slug>/brief.md中的简报运行/oh-my-claudecode:launch。” 地图作为目标的日志保留;launch 的船坞门从那时起拥有所有检查权。 - 默认入口是 launch Phase 1(纸质记录已经完成一半;其前沿清除迅速)。仅当决策已读起来像一份规格时,才可能草拟规格,并通过提供规格路径使 launch 进入 Phase 2。
范围和非目标
- 无守护进程、无模式、无常驻行为、无运行时状态机:地图是普通的追踪器问题或仓库文件。
- 以迷雾形式到达的传入请求由港口路由:由
/oh-my-claudecode:harbor移交的模糊问题与任何粗略想法一样进行制图,并以原始线程和任何已签署的决策链接作为素材。 - 绝不更改团队生命周期、任务状态或运行时状态;绝不发布交付工单 —— 垂直切片构建工单属于 launch 的 C3,导航员不得将迷雾预切为它们。
- 绝不执行超出记录范围的任何决策。唯一的例外是
task工单,它仅执行解锁决策所需的工作。 - 地图的“截至目前决策”是一个索引;一个决策只存在于一个地方,即其工单。
完成定义
制图会话以船长签署的地图和已启动的研究工单结束。工作会话以恰好一个决议被记录、前沿得到推进,以及发出会话结束指针而结束。目标在路线清晰、任务简报已交到船长手中,并推荐了 /oh-my-claudecode:launch 时结束 —— 导航员代表船长做出的每个决策都可以通过一个指向记录位置的指针来回答。