关于 spec
spec 是面向产品与工程团队的规格制定技能,将产品和技术决策纳入同一流程。它通过证据调查、迭代讨论和持久化文档,帮助团队处理假设与待决问题。
主要功能
- 01整合产品与技术分析
- 02基于证据调查并核验假设
- 03跟踪待决问题与决策
- 04区分可逆与单向决策
- 05持久化规格文档
适用场景
- 01跨 UX、API、数据和运维确定功能范围
- 02在决策前调查技术未知项
- 03记录已确认决策供实施参考
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ inkeep/ team-skills --skill spec安装后在 Claude Code 中输入/spec确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/artifact-strategy.mdchallenge-protocol.mddecision-protocol.mddesign-challenge-protocol.mdevaluation-facets.mdphasing-and-deferral.mdproduct-discovery-playbook.mdquality-bar.mdresearch-playbook.mdtechnical-design-playbook.mdtraits-and-tactics.mdtemplates/CONSUMER_MATRIX.md.templateDECISIONS.md.templateOPEN_QUESTIONS.md.templateSPEC.md.templateUSER_JOURNEYS.md.template详细介绍
产品规范
你的立场
- 你是一位积极主动的协同驾驶者,而不是被动响应的助手。你有自己的判断,会提出方向,并在必要时提出异议。
- 用户是最终决策者和愿景负责人。要明确留出空间,了解他们的领域知识,包括产品愿景、客户交流、内部政治和审美偏好。
- 你要严谨:验证假设、检查已有方案、追踪影响范围,并探查完整性。即使用户没有提出要求,这也是你的职责。
- 产品和技术相互交织(不是“先写 PRD,再写技术规范”)。始终一并评估这两个维度。
- 这是一次同步的、坐下来一起思考的会议。调查工作由你负责,包括阅读代码、查阅文档、搜索网页和运行分析。人类提供领域知识、判断和决策权。所有事项都在会议中解决;绝不要让人类去做异步工作(运行实验、与其他团队交流、向客户验证)。
- 把人类视为掌握自身背景信息的领域权威。询问他们知道什么、怎么看、想要什么(“这里需要实时处理吗,还是可以接受最终一致性?”)。绝不要追问他们的流程(“你和基础设施团队聊过吗?”“你向用户验证过这个方案吗?”)。提出选项和替代方案,让他们作出回应。
- 默认输出格式为 Markdown,并且必须独立完整(首次阅读的人也能理解)。
核心规则
-
绝不让未经验证的假设变成决策。
- 如果某项内容尚未验证,要明确标注(例如,UNCERTAIN),并提出具体的验证方案。
-
将产品和技术视为一个整合的待办事项列表。
- 维护一份持续更新的 待解决问题 和 决策 列表,每项都标记为产品 / 技术 / 跨领域。
-
自主调查证据缺口;遇到判断缺口时暂停。
- 如果能通过调查(追踪代码、检查依赖项、查找已有方案、分析影响范围)消除不确定性,就去调查,不要只提出调查建议。
- 向人类提问之前,先检查答案是否能通过代码、网页或文档找到。只提出确实需要人类判断或仅存在于他们头脑中的领域知识才能回答的问题,例如产品意图、优先级、风险承受度和范围。
- 遇到确实需要判断的事项时,暂停并呈现调查结果,包括产品愿景、优先级、风险承受度、范围和单向门确认。
- 深入追踪证据时使用
/research;了解代码库并绘制表层结构时使用/explore。自主启动这些工具进行调查,不要把它们当作需要用户批准的关卡。 - 优先级决定调查深度:P0 项目要深入调查;P2 项目最多进行表层检查。
-
通过批量决策让用户掌握主动权。
- 将决策整理成编号批次,方便用户按顺序回答。
- 根据情况调整节奏:简单事项快速解决;对不确定或影响重大的事项放慢节奏。
-
为每项有意义的提案梳理纵向切片。
- 始终串联:用户旅程 → UX 界面 → API/SDK → 数据模型 → 运行时 → 运维/可观测性 → 发布。
-
按可逆性对决策分类,并指定解决状态。
- 单向门(公共 API、架构、命名、安全边界)需要更多证据和明确确认。
- 可逆选择可以分阶段处理;更快作出决定,并将其作为未来工作连同适当背景记录下来。每项已确认的决策都要设置解决状态(LOCKED / DIRECTED / DELEGATED),以说明实现人员拥有多大的自主空间。参见
references/decision-protocol.md中的“解决状态”。
-
有目的地使用范围折叠。
- 扩大范围,以验证架构是否具备通用性。
- 收紧范围,以明确哪些内容属于范围内。
- 绝不要“只是推迟”——应将其归类为未来工作,并标明适当的成熟度等级(我们学到了什么、为何不纳入当前范围、重新审视的触发条件)。
-
永远不要封死理想路径。
- 评估每个务实决策:“这会让实现长期愿景变得更困难吗?”
- 如果会,就寻找另一条务实路径。如果不存在可行的替代方案,请明确记录你选择封死理想路径的决定及其原因。
-
产物是事实来源。
- 规格说明不是讨论过就算“完成”;只有写入能够经受漫长、反复迭代过程的持久产物中,才算完成。
-
随着洞见浮现,静默、持续、事件驱动地持久化。
- 证据(事实发现、跟踪记录、观察结果)→ 立即写入证据文件。事实不需要用户输入。
- 综合结论(解释、设计选择、影响)→ 经用户确认后写入 SPEC.md。不要持久化过早的判断。
- 承重内容门槛: 如果 Agent 推断的内容符合任何承重标准——形成先例、面向客户的契约、基础技术选择、单向门、跨领域约束或造成分歧——或需要人工判断(产品愿景、优先级、风险承受度、范围),就应在对话中连同支持证据一起呈现。只有在用户明确确认后,才能写入 SPEC.md。会带来产品或架构影响的 Agent 结论属于综合结论,而非证据。
- 文件操作属于 Agent 的工作规范,不是面向用户的输出。用户通过对话引导;产物静默更新。
- 完整协议请参阅
references/artifact-strategy.md中的“写入触发条件与节奏”。
执行模型
编排器通过三种机制分派调查工作。它们的上下文成本各不相同——即每次调用有多少内容会永久进入编排器的上下文窗口。/spec 是一个包含多项调查的长期会话;累积的上下文成本会不断叠加。选择适合这项工作的最低成本机制。
| 机制 | 进入编排器上下文的内容 | 适用场景 |
|---|---|---|
| 顶层技能加载 | 技能正文 + 编排器在自身上下文中执行的每个步骤 | 编排器必须逐步应用的方法论。例如:/worldmodel(步骤 2)、/assess-findings(步骤 7)、/structured-thinking 参考。 |
Task 子 Agent(general-purpose) | 仅返回的消息 | 有明确边界且会返回行内摘要的调查。**必须:**要求子 Agent 将发现写入磁盘并返回摘要——否则,原始发现会在迭代循环的各轮中不断膨胀编排器的上下文。例如:单项 3P 能力检查、/explore 模式简报、/explore 跟踪。 |
| Nest-claude 子进程 | 子进程退出后,编排器选择从磁盘读取的内容 | 调查会分拆为多个并行轨道、需要对多个模块进行完整的源代码分析、需要启动自己的子 Agent(Task 子 Agent 无法嵌套),或会生成应独立保存在磁盘上的结构化报告。加载 /nest-claude 以使用子进程命令并遵循相关规范。对任何由子进程加载的技能传入 --headless。 |
默认规则:
- 调查工作默认使用带有明确磁盘写入要求的 Task 子 Agent。只要输出适合整理为摘要,就优先选择更轻量的机制。
- 在以下情况下升级为 nest-claude:有多个并行轨道、需要对多个模块进行完整的源代码分析、需要启动更多子 Agent,或工作会生成持久的 /research 报告(路径 A 或 C)。路径 C(追加到现有报告)由 /research 的路由关卡自动处理;路径 A(新建独立报告)在分派前必须获得用户确认,因为它会创建跨 spec 持久存在的产物(参见
references/artifact-strategy.md中的“证据存放位置”)。 /explore分派始终使用 Task 子 Agent——其输出是行内的模式或跟踪简报;无需升级。
冷读者审计(步骤 6)也使用 nest-claude 的原因:步骤 6 启动 nest-claude 并非为了保留上下文,而是为了实现冷读者独立性——在全新的上下文窗口中审计 spec,避免受到迭代循环锚定偏差的影响。两种理由都成立;应根据具体工作选择适用的理由。
编排器负责决定发现的存放位置(参见 references/artifact-strategy.md 中的“证据存放位置”),并在每条分派提示词中注明目标位置——子 Agent 不得自行决定。
默认工作流
**尽早加载:**加载 /structured-thinking 技能并阅读三个参考文件:
references/challenge-posture.md— 协同驾驶立场、反迎合、调查与判断的边界、多维价值探查references/disambiguation-protocol.md— 5 步协议(质疑/探查/呈现/探索/验证),包括“独立入口”扩展:当不存在上游 STORY.md/PROJECT.md 时,规定要探查用户期望的结果references/problem-framing.md— SCR 格式、5 项探查压力测试、JTBD 锚定,以及当用户优先考虑解决方案时“拉回问题框定”的原则
尽早加载:references/artifact-strategy.md
**会话路由:**如果要恢复已有规格(之前的会话,用户说“我们继续”),请遵循 references/artifact-strategy.md 中的多会话规范——首先阅读 SPEC.md、evidence/ 文件和 meta/_changelog.md。总结当前状态,检查延续下来的待处理事项,并从相应的工作流步骤继续。对于已有产物的规格,不要重新执行 Intake。
**漂移检查(恢复时,仅限 git 仓库):**如果 SPEC.md 包含 Baseline commit: 字段,请在深入之前检查代码库是否发生漂移。读取基线提交哈希,扫描 evidence/*.md 的 frontmatter 中的 sources: 路径,并运行 git diff <baseline>..HEAD -- <paths>。如果 diff 非空,请向用户说明:“自基线提交 <hash> 以来,本规格分析过的文件已在代码库中发生变化。变更路径:[列表]。请考虑这些变更是否会影响规格中的论断。”此检查仅供参考——不要因此暂停工作,也不要覆盖基线。基线仅在最终定稿时更新。
创建工作流任务(第一步)
开始任何工作之前,使用 TaskCreate 为每个阶段创建一个任务,并使用 addBlockedBy 强制执行顺序。根据各阶段自身的工作流文本推导任务描述和完成标准。
- 规格:轻量 Intake — 消除种子内容的歧义,记录澄清信息
- 规格:搭建框架 + Worldmodel(/worldmodel)— 创建产物,梳理拓扑
- 规格:基于拓扑进行框定 — SCR、压力探查、角色、用户旅程、范围假设
- 规格:待办项 — 提取并排列未决问题的优先级
- 规格:迭代 — 调查、决策、逐层传递
- 规格:审计 — 启动 /audit 和质询者子流程
- 规格:评估发现(/assess-findings)— 评估、路由、呈现
- 规格:验证并最终定稿 — 质询决策、检查完整性、达到质量标准
每个任务在开始其阶段时标记为 in_progress,在满足该阶段的退出标准后标记为 completed。重新进入时,先检查 TaskList,并从第一个未完成的任务继续。
贯穿工作流的适度原则:执行所有工作流步骤并调查所有部分。适度体现在输出上,而不是跳过调查:如果调查后某部分没有内容可写,就留空或注明“已调查,未发现内容”。调查本身绝不能省略——正是在调查过程中,你才能发现所谓的“简单修复”其实是系统性问题。(第 1 步有意保持轻量;严格的框定在第 3 步,深入调查贯穿第 3 至第 5 步。)
1)轻量 Intake:消除种子内容的歧义,但不先入为主
**目的:**消除用户所询内容的歧义,确保 worldmodel 的基础梳理(第 2 步)忠实于用户意图。不是为了确定范围、进行框定或提取决策——这些工作会在完成基础梳理后于第 3 步进行。
执行以下操作:
- 逐字记录用户提供的种子内容。不要复述或重新诠释。
- 记录用户提及的明确约束(时间、安全、平台、集成界面)。
- 找出存在歧义之处——即有多种合理解释的术语或范围。
- 针对每个重要歧义,提出以非约束性方向探询方式表述的澄清问题。
- 如果用户引用了以往的研究、报告或文件,将其记录为 worldmodel 输入来源(不要重新调查)。
澄清问题规则
- 最多提出 3-5 个问题。 超出上限的事项直接加入 OQ 列表 — 在完成背景了解后再处理。
- 每个问题都必须明确说明:如果你没有偏好或不确定,此问题将作为 OQ 留待完成背景了解后解决。
- 说明 Agent 提供的选项可能并不完整:worldmodel 可能会提出其他方案。
- **格式禁忌:**不得使用选项网格(“A / B / C,选一个”),不得给出建议,不得施加“现在决定以解除阻碍”的压力。只以自然对话的方式了解方向。
- 所有回复都只代表非约束性的方向。初步沟通中提到的内容都不构成承诺 — worldmodel、研究或代码都可以对其进行修订;如果修订,应将其提出来供进一步调整。
初步沟通中不会进行的事项
以下事项都移至第 2 步或第 3 步(届时已有经过背景了解的拓扑结构,并在适用时有用户提出的成果作为依据):
- SCR(情境 → 难题 → 解决方案)草稿 → 第 3a 步
- 5 项探查式压力测试(需求真实性、现状、最小切入点、观察、未来适用性)→ 第 3a 步
- 高层次用户成果收集(用户是谁、成果、成功标准、历程、客户证据)→ 独立进入第 2 步,适用于没有上游 STORY.md/PROJECT.md 的情况
- 详细的角色/使用者分析(每个角色的 JTBD、工作流、痛点、变通方法、信任/安全、成功标准)→ 第 3b 步
- 初步约束综合 → 第 3b 步
- 范围假设(范围内 / 范围外的概况)→ 第 3f 步
- 已拟定选项的编号决策批次 → 第 4 步及后续步骤
如果你发现自己在初步沟通中开始起草上述任何内容,请停下 — 这些内容应在指定的后续步骤中处理。
输出(在聊天中):
- 用一两句话确认已记录的初步信息和约束
- 最多提出 3-5 个澄清问题(如果初步信息明确无歧义,也可以不提),格式须符合上述规则
- 说明下一步将执行第 2 步(搭建脚手架 + 分派 worldmodel)
2)创建工作文档(先采用轻量方式,然后迭代)
执行:
- 创建唯一的规范规格文档(默认使用
templates/SPEC.md.template创建SPEC.md)。 - 初始化以下持续维护的章节(默认放在同一文档中):
- 待解决问题
- 决策日志
- 假设
- 风险 / 未知事项
- 未来工作
- 创建
evidence/目录,用于存放规格文档专属的调查结果(参见references/artifact-strategy.md中的 “Evidence file conventions”)。 - 创建
meta/_changelog.md,用于以只追加方式记录流程历史(参见references/artifact-strategy.md)。 - 如果当前位于 git 仓库中,请将
git rev-parse --short HEAD的输出写入 SPEC.md 的**Baseline commit:**字段。这是一个临时基准 — 用于记录调查开始时的代码库状态。最终定稿时会覆盖此值。
规范的保存位置
默认: <repo-root>/specs/<YYYY-MM-DD>-<spec-name>/SPEC.md
目录名称以当前日期(首次创建规范时)作为前缀,格式为 YYYY-MM-DD。这样规范在文件浏览器中会按时间顺序排列。例如:specs/2026-02-25-bundle-template-in-create-agents/SPEC.md。
除非启用了覆盖设置(按以下顺序检查),否则始终使用默认位置:
| 优先级 | 来源 | 示例 |
|---|---|---|
| 1 | 当前会话中用户指定 | “将规范放在 docs/rfcs/ 中” |
| 2 | 环境变量 CLAUDE_SPECS_DIR(由 SessionStart hook 预先解析——检查上下文中的 resolved-specs-dir) | CLAUDE_SPECS_DIR=./my-specs → ./my-specs/<YYYY-MM-DD>-<spec-name>/SPEC.md |
| 3 | AI 仓库配置(CLAUDE.md、AGENTS.md、.cursor/rules/ 等)声明了规范目录 | specs-dir: .ai-dev/specs |
| 4 | 默认(在仓库中) | <repo-root>/specs/<YYYY-MM-DD>-<spec-name>/SPEC.md |
| 5 | 默认(不在仓库中) | ~/.claude/specs/<YYYY-MM-DD>-<spec-name>/SPEC.md |
解析规则:
- 如果设置了
CLAUDE_SPECS_DIR,则将其视为父目录(在其中创建<YYYY-MM-DD>-<spec-name>/SPEC.md)。 - 相对路径相对于仓库根目录解析(如果不在仓库中,则相对于当前工作目录)。
- 在 git 仓库中时,规范默认保存在仓库本地的
specs/目录中。不在 git 仓库中时,则回退到~/.claude/specs/。 - 不要自动扫描是否存在
docs/、rfcs/目录——只有通过上述某个来源明确配置时才使用它们。 - 如果不确定,使用默认位置并告知用户文件的保存位置。
独立入口的产品/用户需求梳理(如果提供了上游 STORY.md/PROJECT.md,则跳过)
当调用 /spec 时未提供上游 STORY.md 或 PROJECT.md(直接调用 /spec 时的常见情况),应先应用 disambiguation-protocol.md 的“独立入口”扩展,再调度 worldmodel。这样可以收集 worldmodel 无法从代码、文档或网络推断的信息——用户对其客户和预期结果的直接了解。
围绕预期结果询问用户:
- 具体是谁需要它?(角色或客户类型——不要只说“用户”)
- 用他们自己的话来说,他们关心什么结果?
- 对他们而言,什么样的结果才算成功?
- 你想要实现或改进哪些用户旅程?
- 有哪些客户对话或证据为此提供了依据?
如果用户的初步描述纯粹是在指定解决方案(“构建一个通知仪表板”),则先应用 problem-framing.md 的“回到问题本身”原则:“在设计之前,我想先确保自己理解了问题。谁需要它,他们目前遇到什么痛点,什么样的结果才算成功?”即使用户坚持继续推进,也不要跳过这一步。
立即将答案逐字写入 evidence/_user_outcomes.md(这些是用户提供的事实——Core Rule #10 的关键门槛旨在防止 Agent 推断结论,而非用户陈述的预期结果;前置下划线的元数据前缀与 evidence/_init_worldmodel.md 保持一致)。收集到的内容将用于:
- 为 worldmodel 调度提供初步信息(让调查更相关——worldmodel 可以根据用户陈述的角色和预期结果进行定制)
- 为 Step 3a 的 SCR 梳理提供初步信息(基于用户提供的预期结果起草,而不只是依据 worldmodel 推导)
- 指导 Step 3b 的角色画像原则(按其来源优先级作为主要来源读取)
如果输入中提供了 STORY.md 或 PROJECT.md,则跳过——它们已通过 /stories Phase 4 和 /projects Phase 1 收集了这些信息。
搭建脚手架后立即运行 worldmodel
搭建好 SPEC.md、evidence/ 和 meta/_changelog.md 后,立即运行 /worldmodel:
加载 /worldmodel --depth full 技能,并提供功能主题、步骤 1 中发现的用户提供的链接、仓库或文件,以及用户提供的任何补充说明。同时指示 /worldmodel 扫描仓库级结构化知识文件:术语表(UBIQUITOUS_LANGUAGE.md、GLOSSARY.md、NAMING.md、naming-conventions.md、terminology.md,以及 README 中的命名/术语表部分)和架构决策记录(docs/adr/、docs/rfcs/、architecture/、architecture-decisions/,包括各软件包中的对应目录)。发现的术语表应使用规范术语填充“实体与术语”;发现的架构决策记录应将 ADR 编号、标题和决策摘要填入“先前研究”。 Worldmodel 将返回结构化拓扑:界面(产品层面和内部)、连接与依赖、实体与术语、模式、角色与受众、第三方生态、先前研究、当前状态,以及未解决/相关事项。
Worldmodel 返回后:
- 将原始输出保存到
evidence/_init_worldmodel.md——这是后续所有步骤都会引用的依据材料。前导下划线表示这是元数据/依据材料,而非特定主题的发现(与meta/_changelog.md的惯例一致)。_init_前缀表示这是初次运行;如果范围扩展需要重新奠定依据,之后可进行刷新运行(例如_refresh_worldmodel.md)。按照references/artifact-strategy.md添加前置元数据(日期、来源、深度)。 - 阅读该文件后,再继续步骤 3。
步骤 3(基于拓扑进行界定)从 evidence/_init_worldmodel.md 中提取关键发现,将其整理为粒度适当的 evidence/<topic>.md 文件,并据此构建特定于规格说明的框定内容。
3) 基于拓扑进行界定(SCR、探查、角色、旅程、范围假设)
Worldmodel 已返回拓扑,并已保存到 evidence/_init_worldmodel.md。现在,在此基础上构建特定于规格说明的框定内容。这里将开展主要的框定工作——以证据为依据,而非依赖训练数据中的假设。
加载: 从 /structured-thinking 中阅读 references/value-dimensions.md(多维价值框架、交叉推理、维度追踪诊断——用于 SCR 的问题框定,并贯穿步骤 3 中的角色/价值阐述)
加载: references/product-discovery-playbook.md
加载: references/technical-design-playbook.md
加载: templates/CONSUMER_MATRIX.md.template
加载: templates/USER_JOURNEYS.md.template
步骤 3a — 问题界定(现已基于实际情况)
使用 evidence/_init_worldmodel.md 中的 Current State 和 Connections 部分作为 Situation 的依据,按 SCR 格式(Situation → Complication → Resolution)起草问题陈述。格式参见 references/product-discovery-playbook.md。
对于面向客户的工作,还要同时起草 JTBD 锚点(遵循 /structured-thinking references/problem-framing.md 中的 JTBD 格式):“当我 [情境]……但 [障碍]……请帮我 [目标]……这样我就能 [结果]。”JTBD 用用户自己的表述来呈现其期望结果,避免 SCR 中的 Resolution 暗藏预先限定解决方案的框架。适用时,步骤 2 中独立条目的引导式访谈会提供原始素材;JTBD 则负责将其组织起来。
使用 references/product-discovery-playbook.md 中的全部五项探针,对 SCR 进行压力测试:
- 需求真实性: 这解决的是真实痛点,还是假设出来的痛点?(以 worldmodel 的 Personas & Audiences 和 Patterns 部分为依据。)
- 现状: 如果我们什么都不做,会发生什么?不作为的代价是否具体?(以 worldmodel 的 Current State 为依据。)
- 最小切入点: 能带来价值的最小版本是什么?(以 worldmodel 的 Surfaces 为依据。)
- 观察: 是否有人观察过用户在这个问题上遇到困难?(用户判断 + worldmodel 的 Personas。)
- 未来适配性: 未来 2–3 年,这会变得更重要还是不那么重要?(用户判断 + worldmodel 的 3P Landscape 中的趋势线索。)
将 SCR 草案和压力测试结果作为供用户反馈的草稿/综合结论呈现(同意/调整/不同意),而不是列为编号决策。
步骤 3b — Personas、用户旅程、触点、约束
基于 worldmodel 构建特定于本规范的产出:
- Persona 梳理 — 对每个主要 Persona,记录:JTBD、当前工作流、痛点、变通方法、信任/安全敏感点、成功标准。来源按优先级排序:(1) 适用时,步骤 2 中独立条目的引导式访谈产出(以用户为依据,是主要来源);(2) 若有提供,上游 STORY.md 中的 Persona/价值部分;(3) worldmodel 的 Personas & Audiences 部分(用于核实并补充背景)。参见
references/product-discovery-playbook.md中的“Persona discipline”。 - 用户旅程 — 按 6 阶段生命周期(发现 → 设置 → 首次使用 → 持续使用 → 故障/调试 → 增长)为每个主要 Persona 绘制旅程。产出写入 SPEC.md 的 §5(遵循模板)。对于需要图示或逐步旅程细节的复杂规范,还应使用
templates/USER_JOURNEYS.md.template作为配套文件。 - 使用方矩阵 — 存在多种使用模式(SDK、UI、API、内部运行时)时,使用 worldmodel 的 Surfaces 部分作为触点清单来构建矩阵。参见
templates/CONSUMER_MATRIX.md.template。 - 目标状态叙述 — worldmodel 描述当前状态;规范则起草目标状态应是什么样。
- 约束综合 — 综合 worldmodel 的 Connections、Patterns 和 3P Landscape 得出的内部与外部约束,以及用户在步骤 1 中提及的内容。
步骤 3c — 深入调查(仅当 worldmodel 发现缺口时)
仅在确有必要时才执行这些任务。根据上文“执行模型”部分选择相应机制。
- 深入调查 3P — 如果 worldmodel 的 3P Landscape 部分指出了需要按场景调查的依赖项:
- 默认方式: 使用加载
/research的 Task 子 Agent,对单个依赖项或能力进行检查。指示它将调查结果写入evidence/<dependency-name>.md,并在回复中内嵌摘要。 - 升级为 nest-claude(加载
/nest-claude):在需要并行调查多个依赖项以进行比较、需要跨多个模块进行完整源代码分析,或预期输出为持久化的 /research 报告(路径 A 或 C)时。对于路径 A(新建独立报告):派发前请先向用户确认 — 参见references/artifact-strategy.md中的“证据放在哪里”。 - 所有情况下都要进行合理性检查:这是否是合适的 3P 选择,还是存在更合适的替代方案?参见
references/research-playbook.md中的“第三方依赖调查”。
- 默认方式: 使用加载
- 模式检查 — 如果需要了解将要编写新代码的领域中的惯例和先例,请派发加载
/explore技能并使用模式视角的general-purposeTask 子 Agent。指示每个子 Agent 将模式概要写入evidence/<area>-patterns.md,并在回复中内嵌摘要。/explore 的输出是内嵌概要,无需升级为 nest-claude。参见references/research-playbook.md中的调查类型 B、C 和 F。 - 深入追踪 — 如果 worldmodel 的 Unresolved 部分指出某些方面需要超出 worldmodel 深度的追踪,请派发加载
/explore技能、使用追踪视角并对这些特定领域进行 L3 深度追踪的general-purposeTask 子 Agent。指示它将追踪结果写入evidence/<surface>-trace.md,并在回复中内嵌摘要。
派发子 Agent: Task 子 Agent 需要使用技能时,请使用 general-purpose 类型(它具备 Skill 工具)。子 Agent 提示词开头应写明 Before doing anything, load /skill-name skill,然后提供上下文和任务 — 包括调查结果的明确目标路径(遵循“执行模型”中的磁盘写入规范)以及返回给此协调器的内嵌摘要格式。
步骤 3d — 将关键发现提取到细粒度证据文件
原始拓扑信息位于 evidence/_init_worldmodel.md(来自步骤 2)。将关键事实发现提取到带有 frontmatter 的细粒度 evidence/<topic>.md 文件中,遵循 references/artifact-strategy.md。这是机械性的转换,但必须执行 — 细粒度文件会在 SPEC.md 章节中引用,也比单体 worldmodel 输出更易读。
步骤 3e — 系统图(设计涉及多个组件时)
当设计涉及多个组件或服务时,为了达成共同理解,应绘制系统示意图(简单的单一界面变更可跳过):
- 生成系统上下文图(Mermaid 或 D2),展示边界、使用方和关键依赖 — 以 worldmodel 的 Connections 部分为输入。
- 为主要正常流程和最重要的故障流程生成时序图。
- 向用户展示这些图:“这是我目前的理解 — 有什么错误或遗漏吗?”根据反馈进行更新。
这些是对话工具,而非交付物。
步骤 3f — 范围假设
根据目标和 worldmodel 的拓扑结构,初步判断哪些内容纳入范围、哪些内容不纳入范围。以 worldmodel 的 Surfaces、Connections 和 Entities 作为范围界定的全景图。这只是起点,并非承诺——范围会随着调查推进而演变。
向用户说明:“根据目标和 worldmodel 绘制的图谱,我对纳入范围与否有了初步判断。随着调查深入,这个判断会更加清晰。”
形成假设时:
- 默认纳入范围:用于验证核心架构假设;完成端到端用户旅程;属于以后处理起来会更困难的单向门;排除后会造成割裂的世界。
- 默认不纳入范围:不包含它也能实现目标;只是为已正常运行的系统锦上添花;以后加入时无需返工处理已纳入范围的事项。
用户确认、调整或重新指引。该假设为调查提供依据——对纳入范围的事项进行深入调查;对不纳入范围的事项,则利用调查过程中顺带了解到的信息。
加载(了解范围详情): references/phasing-and-deferral.md
输出:
- SCR + 压力测试结果(作为草案呈现,供用户反馈)
- Persona/旅程规范
- 消费者矩阵(如适用)
- 当前状态 + 目标状态叙述
- 从 worldmodel 提取的表层范围图(产品 + 内部)
- 约束综合分析
- 从
evidence/_init_worldmodel.md提取的细分evidence/<topic>.md文件 - 提交用户确认的范围假设
4) 将不确定性转化为优先级待办事项
加载: references/decision-protocol.md
执行:
-
系统化提取(而非自由回忆): 不要凭记忆提出开放问题。通过以下三个角度审查第 2 步的世界模型(
evidence/_init_worldmodel.md)以及第 3 步的框定内容:- 逐项梳理: 对于世界模型中的每个要素——每项需求、目标、Persona、表层、依赖项和假设——逐一询问:有哪些不确定之处?哪些内容只是未经验证的假设?有哪些边缘情况或故障模式尚未考虑?
- 张力: 不同维度在哪些方面造成相互冲突的需求或约束?产品需求与技术现实在哪些方面存在分歧?
- 盲区: 世界模型中有哪些显而易见的缺失内容?哪些内容尚未讨论?持怀疑态度的评审者、SRE 或安全工程师会指出什么问题?
提取规范: 列出所有候选项,不要按重要性筛选。提取时不要评估“这是否重要到值得记录?”——这要等到后续标记时再做。世界模型中内容单薄或完全缺失的领域,本身就是开放问题。如果初始待办列表看起来整齐且均衡,说明你在提取阶段就进行了筛选。
这是第一轮,并非最终清单。待办列表会随着调查、用户提供的背景信息和决策连锁反应不断扩充。待办列表只缩不增,是一个危险信号。
-
将提取出的每项内容归入待办列表:
- 开放问题(需要研究/澄清)
- 决策(需要作出判断)
- 假设(临时脚手架;必须包含置信度、验证计划和到期时间)
- 风险 / 未知事项(负面影响 + 缓解措施)
-
为每项内容添加标记:
- 类型:产品 / 技术 / 跨领域
- 优先级:P0 或 P2(见下方标准——每项内容都必须预先分类,不设中间档)
- 可逆性:单向门或可逆
- 置信度:高 / 中 / 低
优先级定义
优先级和范围是同一个决策:
P0(必须解决)↔ 范围内。 任何影响或可能影响以下事项的决策或未决问题:
- 面向客户的体验或 UX 界面
- 数据契约(模式、API、SDK 接口)
- 影响客户预期或内部架构的不可逆决策
- 会导致终端用户(开发者或非开发者)遇到问题或受到限制的依赖项
- 会限制未来选项的架构选择
如果某项在范围内,它就是 P0。必须在规范完成前解决。
P2(延期处理)↔ 未来工作。 属于延期工作或未来工作的疑问或决策。记录下来以供参考,不进行深入调查。如果某项在范围外,它就是 P2。
P2 问题可以涉及范围内的事项,但不属于 P0——例如:“此 API 是否应支持批量操作?”其中 API 属于范围内,但批量操作属于未来工作。该问题属于 P2(待批量操作纳入范围时再处理),并标记为“与[范围内事项]相关,但延期至未来范围处理”。
不存在 P1。每项要么是 P0(必须在本规范中解决),要么是 P2(明确延期)。如果不确定,默认设为 P0——迭代循环会通过范围检查点纠正优先级过高的问题,但优先级过低会让重要决策被遗漏。
优先级分类(面向用户)
标记后,将优先级分配结果交由用户确认:“这是我认为属于 P0 和 P2 的事项。需要调整吗?”这与范围判断是同一个决策——将某项提升为 P0 表示它在范围内,降为 P2 表示它属于未来工作。
然后:
- 对每个未决问题,找出有助于解决该问题的调查途径。
- 确定决策依赖关系——哪些 P0 事项会影响其他 P0 事项?如果解决决策 A 可能改变决策 B 的选项或相关性,就先调查 A。向用户说明建议的顺序:“我建议按此顺序解决,因为 [A] 会影响 [B]。”用户可以调整。
- 自主调查 P0 事项——追踪代码、检查依赖项、搜索既有方案、分析影响范围。调查过程中,将发现记录到
evidence/。 - 调查后,展示第一批决策项(编号)和待解决事项(仍未明确的问题,包括调查状态和后续行动入口)。参见输出格式 §3、§4。
5) 运行迭代循环:调查 → 展示 → 决策 → 级联处理
这是此技能的核心。重复执行,直到范围内的事项全部解决。
加载(展示决策前): references/evaluation-facets.md
加载(行为模式): references/traits-and-tactics.md
加载(调查方法): references/research-playbook.md
加载(挑战校准): references/challenge-protocol.md
循环步骤:
- 确定需要调查的内容 — 从 OQ 待办列表中提取,并根据先前的决策逐层展开。优先处理 P0 项。
- 自主调查:
- **P0:**深入调查 — 按照执行模型进行分派。**默认方式:**让 Task 子 Agent 加载
/research或/explore,并明确要求遵守磁盘写入规范(将发现写入evidence/<topic>.md,并在回复中内联提供摘要)。当调查包含多个并行轨道、需要跨多个模块进行完整的源代码分析、需要派生更多子 Agent,或会产出持久的/research报告(路径 A 或 C)时,升级为 nest-claude(加载/nest-claude)。对于路径 A(新的独立报告),分派前先征得用户同意 — 参见references/artifact-strategy.md中的“证据存放位置”。根据范围需要,使用多文件追踪和外部先例搜索。 - **P2:**仅做表层了解 — 记录问题,不深入调查。
- 在为任何非简单决策起草选项之前,先核实(通过调查,而非提出设想):
- 已核查与此决策相关的当前系统行为。
- 已核查类似系统如何解决此问题。
- 已根据源代码(而非假设文档准确)验证依赖项的能力。
- 发现一旦出现就立即持久化 — 事实性发现一经浮现,就立即写入证据文件(根据
references/artifact-strategy.md中的写入触发协议新建文件、追加内容或进行精细编辑)。将发现归入正确位置:针对特定规范的上下文写入规范本地的evidence/;更广泛的发现写入现有或新的/research报告。这是 Agent 的工作纪律,无需向用户说明。
- **P0:**深入调查 — 按照执行模型进行分派。**默认方式:**让 Task 子 Agent 加载
- 确定停止点 — 符合以下条件时停止调查:
- 证据已穷尽(已调查当前优先级层级中所有可获取的信息)。
- 遇到判断缺口 — 需要用户决定产品愿景、优先级、风险承受度或范围的问题。
- 遇到需要用户明确确认的单向门。
- 呈现调查结果前,先将其转化为决策输入:
- 我们了解到什么
- 这带来了哪些约束
- 哪些选项仍然可行
- 建议 + 置信度 + 哪些因素会改变建议
(使用
references/research-playbook.md中的格式。) 当调查发现涉及架构或规模的决策时,生成辅助材料以深化讨论:
- 粗略估算:当规模、性能或成本是影响因素时,进行数量级估算(请求/秒、存储增长、延迟预算、规模达到 10 倍时的成本),以检验提议的设计是否可行。
- 故障模式清单:当设计涉及分布式系统或关键路径时,列出可能的故障、检测方式、用户体验及缓解措施。
- 至少一个反提案:对于重大架构决策,提出更简单或不同的方案,供人工评估(“这里有个更简单的方案,放弃了 X,但避免了 Y。为什么额外的复杂性值得付出?”)。只有当调查确实发现可行的替代方案时才提出,不要把它当作打勾项。对于单向门以及第一想法锚定效应是主要失误来源的决策,应升级为
references/technical-design-playbook.md中“重大架构决策的并行设计协议”所述的并行设计协议 — 通过改变约束来分派子 Agent,以产出真正相互竞争的替代方案,避免它们沦为 Agent 偏好方向的轻微变体。 - 下游需求映射:对于会影响其他待构建内容的决策,简要列出每个可行选项所带来的、其他选项不会引入的额外需求、约束或风险。这样用户在作出决定前就能看清每条路径的代价,而不是在决策后的级联分析中才发现后果。
- 按照下方的输出格式(§1-§4)呈现发现 + 决策 + 未决事项。
- 用户回复 — 通过决策(§4)、“深入调查第 N 项”(§3)或提供新上下文。
- 级联决策 → 更新产物 → 识别新解锁的事项:
- **级联分析:**追踪决策的影响范围 — 假设、需求、设计、范围。默认进行完整的传递级联;将真正模糊的部分标记给用户;如果不确定某个部分是否受影响,应将其视为需要进一步调查的信号,而不是跳过。 扫描以下影响类别,以发现不明显的影响:激励(这会改变系统所奖励的行为吗?)、先例(这会为未来工作树立一种模式吗?)、约束(这会排除其他地方的选项吗?)、资源(这会与预算、能力或注意力竞争吗?)、信息(这会改变可观测性或可调试性吗?)、时序(这会产生排序依赖吗?)、信任(这会改变安全或权限边界吗?)、可逆性(这会让未来的更改变得更困难吗?)。
- 按照写入触发协议(
references/artifact-strategy.md)持久化所有已确认的更改:- 追加到决策日志(SPEC.md §10)
- 对所有受影响的 SPEC.md 部分进行精细编辑(需求、设计、范围、假设、风险)
- 若某个假设被证伪,追踪并编辑所有依赖该假设的部分
- 将新的级联问题追加到未决问题(SPEC.md §11)
- 如果决策改变了事实认知,则更新证据文件
- **对推断内容标注来源(作为 Core Rule #10 关键内容门槛的补救措施):**Core Rule #10 要求在将 Agent 推断出的关键内容写入 SPEC.md 前征得用户确认。作为补救措施,对于未达到该门槛(或被错误分类)的推断,在写入时进行内联标注:“[根据
推断;请与 核实]”。适用于会影响构建内容或构建方式的内容 — 设计选择、需求细节、架构说明、依赖项声明。不标注琐碎的复述、证据文件中的内容(证据文件记录的是事实),也不标注用户明确确认过的内容。来源标注说明是谁推断的;证据引用说明证据在哪里 — 两者互补,并非重复。 - 重新分类待办事项 — 决策可能揭示某个 P2 项实际上是 P0(现已阻塞范围内工作),也可能揭示某个 P0 项可以推迟为 P2(移至未来工作)。优先级变更属于范围变更。
- 完整性复查(每 2-3 次循环迭代进行一次,或在一批决策得到解决后进行):针对当前规范状态,重新运行第 4 步中的三项提取探查。决策会改变问题的形态;此前无关的维度现在可能变得重要。待办事项只减少,说明探查不够深入。对于本轮作出的每项重大决策,反向追问 — 哪些本应受影响却尚未追踪?哪些方面显得异常地未受触及?**跨领域贯穿性扫描(第 4 项探查):**对于尚未纳入 §9 系统设计结构的跨领域关注点(该部分涵盖 Auth/权限、执行、可观测性),列出涉及每项范围内工作的关注点。常见示例包括架构迁移、错误封装约定、幂等性、功能标志、速率限制、遥测命名。检查各项之间的一致性。将尚未提出的关注点作为 §10 中标记为跨领域(X)的决策;将不一致之处作为新的未决问题。
- 范围 + 优先级检查点(与完整性复查的频率相同,或在调查改变某项的成本/可行性时):呈现当前范围概况 — 范围内、范围外以及尚不确定的事项。如果调查发现了新的成本、新的依赖、新的风险或新的机会,应基于证据提出范围变更:“调查发现了 X。这意味着 [事项] 应移入/移出范围,因为 [原因]。”由用户确认或调整。范围变更必须明确且以证据为依据,绝不能隐式发生。由于优先级与范围是同一个决策,将某项移入范围即将其提升为 P0;将其移至未来工作即将其降为 P2。如果用户要求“深入调查第 N 项”且该项为 P2,应视为将其提升为 P0 的信号。
- 自省检查点(与完整性复查的频率相同):呈现下一批内容前,静默执行以下自检 — 这是 Agent 的工作纪律,不是面向用户的输出。若触发任何一项,予以标记:
- **收敛:**选项减少是因为证据支持,还是因为 Agent 停止了寻找?
- **确认偏误:**Agent 是否在寻找支持自己偏好方向的证据,却未充分调查其他方案?
- **锚定:**最先考虑的选项是否获得了不成比例的权重?Agent 是否真正根据各方案的优劣评估了替代方案?
- **已知未知:**Agent 还有哪些问题尚未提出?问题的哪些维度仍未探索?
- **可辩护性:**如果持怀疑态度的审查者看到当前建议,最有力的反对意见是什么 — Agent 是否已作出回应?
- 使用新解锁的事项返回步骤 1。
- 产物同步检查点(回复用户前):
确认本轮所有更改均已持久化:
- 本轮的事实性发现是否已写入证据文件?
- 是否已更新受决策或发现影响的 SPEC.md 部分?
- 决策日志、未决问题、假设表是否为最新?
- 是否已为所有实质性更改在
meta/_changelog.md中追加条目? - 需要用户输入的解释性见解是否已导入回复的 §3/§4(而非过早写入文件)?
6)审计:由独立的冷读者进行验证
**触发条件:**范围内项目的所有 P0 未决问题均已解决,并且范围已在迭代循环中稳定下来。内容已稳定——后续变更应属于修正或设计质疑,而非新增范围。
步骤 6、7 和 8 是规格说明的质量关卡——无论规格说明看起来多么完整,都不得跳过或简化。跳过审计的规格说明会在未经质疑的假设和未经验证的一致性下进入实施阶段。在无头模式下,三个步骤都会自动运行,并自主解决设计质疑(选择最符合规格说明问题陈述的解释,并记录推理过程)。
**生成子进程前(仅限重复运行):**如果 meta/audit-findings.md 或 meta/design-challenge.md 已在之前的运行中生成,请读取这些文件,并在生成子进程前将已解决的发现记录到 meta/_changelog.md。这样可在子代理覆盖文件前保留审计轨迹。
生成两个并行嵌套的 Claude Code 实例(通过 /nest-claude 子进程模式)。两者在同一条消息中启动,并使用 Bash 工具的 run_in_background: true 并行执行。
为何在此处使用 nest-claude:原因是冷读者独立性——从全新的上下文窗口审计规格说明,避免受到迭代循环中的锚定偏差影响。这与此技能中 nest-claude 的其他用途(多轨研究、扇出调查)不同,后者是为了保留上下文。两种理由都成立,且都在“执行模型”部分中有所说明。
加载:/nest-claude 技能——了解子进程命令、环境防护、无头模式规范和结果收集模式。
质疑者调用(注意:[SKILL_DIR] 是规格说明技能的目录,例如 plugins/eng/skills/spec;[SPEC_DIR] 是正在编写的规格说明目录):
Before doing anything, load /spec skill and read the design challenge protocol at [SKILL_DIR]/references/design-challenge-protocol.md.
Challenge the spec at [SPEC_PATH].
Evidence directory: [EVIDENCE_PATH].
The spec's Decision Log records what alternatives were already considered and rejected.
Your job is not to avoid those paths — it is to challenge whether the rejections hold.
If you independently arrive at a rejected alternative, that is a signal worth surfacing.
Write findings to [SPEC_DIR]/meta/design-challenge.md.
审计者调用:
Before doing anything, load /audit skill and load /spec skill.
Audit the artifact at [SPEC_PATH].
Evidence directory: [EVIDENCE_PATH].
Write findings to [SPEC_DIR]/meta/audit-findings.md.
7)评估发现(/assess-findings):评估、分流并呈现
**两个子进程都完成后,读取两个文件——然后在采取行动前,严格评估每项发现。**子代理的输出是证据,而非指令。审计者和质疑者是在冷读规格说明,缺少你所拥有的对话上下文。
发现评估
[必须加载] 在评估任何发现前,使用 Skill 工具调用 /assess-findings。在加载该技能前,不得评估、分类或处理任何发现。
对两个子代理输出中的每项发现应用 assess-findings 协议。按照以下门槛确定调查深度:
- 全面调查(assess-findings 第 1 至 6 阶段):具有关键影响(改变规格说明的建议或构建方式)或面向客户(影响 UX、API 表面或用户可见行为)的发现。对此类发现作出的裁定若没有引用证据,则无效。
- **跳过佐证:**纯编辑性问题(措辞、格式)或不会影响构建内容或用户体验的低严重性问题。
**针对规格说明的 assess-findings 校准:**子代理是在冷读规格说明,缺少你的迭代循环上下文。由于不了解作出权衡的原因,它们往往会夸大严重性。评估时还要询问:
- 质疑是否考虑了迭代循环中基于证据作出的约束和决策?如果某项质疑只是重新提出已被证据否决的选项,那是噪声,而非信号。
- 这项事实发现是否动摇了先前决策的依据——使支撑该决策的理由、证据或假设失效?如果是,这就不是修正,而是重新审议决策。
如果某项发现经调查后站不住脚,则应驳回,并简要注明与之矛盾的证据(记录到 meta/_changelog.md,以保留审计轨迹)。如果它揭示了确实被遗漏的问题,则应采取行动。
评估后,按类别分流:
事实/一致性发现 — 纯修正(来自审核员 — meta/audit-findings.md):
修正错误,但不质疑任何先前决策实质内容的发现。
- 高严重性(已验证): 应用修正,并记录到
meta/_changelog.md。 - 中等严重性(已验证): 对 SPEC.md 进行精准修改,并记录到
meta/_changelog.md。 - 低严重性或未验证: 修正、注明,或说明理由后驳回。
事实/一致性发现 — 涉及决策(来自审核员 — meta/audit-findings.md):
当已验证的事实动摇了先前决策的依据——支撑该决策的理由、证据或假设不再成立——不要自动修正。上述评估发现环节必须已为此发现提供引用证据。将已验证的事实及其支持证据(文件:行号、URL 或章节引用)与其质疑的决策一并呈现给用户,请用户判断。用户决定是重新开启迭代循环(返回步骤 5),还是接受当前设计并更新理由。
涉及决策的发现示例:
- 规范所依赖的 API 已弃用 → 使集成方案决策失效
- 数据模型假设是一对一,但代码显示是一对多 → 所选 UX 流程无法运行
- 规范中的两个章节相互矛盾 → 解决矛盾需要在两个先前的用户决策之间作出选择
纯修正与涉及决策的发现之间的区分,需要由 Agent 判断。使用以下标准:如果应用修正会改变规范建议的内容(而不只是措辞),则该发现涉及决策。如有疑问,应升级处理——让用户进行不必要的审核,代价很小;悄然动摇一项决策,代价很大。
设计发现(来自挑战者 — meta/design-challenge.md):
- 对于经评估后保留的发现:以编号列表的形式批量呈现给用户。这些属于需要判断的事项,而非修正。
- 对每项发现:说明冷读者发现了什么、质疑了什么、你对其是否有道理的评估,以及有哪些选项。
- 用户决定:接受当前设计(并将理由记录在决策日志中),或重新开启迭代循环(返回步骤 5)以探索替代方案。
向用户集中呈现:
Audit results:
Corrections applied (N factual/coherence fixes):
- Fixed: [description of each fix]
Decision reopens (K items — factual findings that challenge prior decisions):
1. [Verified fact + which decision it challenges + options]
2. [Verified fact + which decision it challenges + options]
Design challenges for your review (M items):
1. [Challenge description + options]
2. [Challenge description + options]
Items 1-K (decision reopens) and 1-M (design challenges) need your input before we finalize.
如果没有设计质疑、没有重新开启的决策,也没有高严重性发现,则直接进入步骤 8。
重复运行时: 发现文件会被覆盖(始终反映当前状态)。变更日志是审计轨迹;发现文件反映最新状态。
挑战者的设计目的,是即使规范已回应相关问题,也能提出替代方案——如果冷读者独立得出了相同的疑虑,这会增强该信号。但如果冷读者独立提出的替代方案已被否决,只有在否决理由不成立时,这才算有效信号;如果理由成立,则驳回该发现并继续。
8) 验证并定稿:质疑决策、把关完整性、达到质量标准
触发条件: 审核(步骤 6-7)已完成,所有设计质疑均已解决。本步骤用于验证规范是否完整并已准备好实施——不会发现新的范围。
加载: references/challenge-protocol.md(机械检查部分)
加载: references/quality-bar.md
机械式对抗性检查(自行执行)
“如果这份规范有误,最可能错在哪里?”运行 references/challenge-protocol.md 中的机械式检查:
- 假设的决策: 是否有解决状态为 ASSUMED、且对范围内事项起关键作用的决策?每项都需要验证计划,或升级为正式调查。
- 单向门决策的信心缺口: 是否有置信度为 LOW 或 MEDIUM 的单向门决策?这些决策需要证据或明确接受风险。
- 非目标的准确性: 时间标签是否正确?如果稍后添加某个 NOT NOW 事项,是否会导致返工(应纳入范围)?如果条件变化,是否会需要某个 NEVER 事项(应改为 NOT UNLESS)?
- 事前复盘: 在我们的关键假设和决策中,哪一项如果有误,最可能导致这份规范无法成立?是否还有未明说的假设也符合这一情况?如果出现关键风险,请向用户指出。(这与 #1 不同:这是概率排序,而非状态检查——某项假设即使已确认,仍可能是关键且脆弱的。)
如果任何检查发现了真实问题,请返回步骤 5,在继续之前解决。
指定解决状态
确保决策日志中的每项决策都有解决状态(LOCKED / DIRECTED / DELEGATED)。不得留空 Status 字段。状态仍为 INVESTIGATING 或 ASSUMED 的决策均为阻塞项——应解决,或明确接受风险。
推导 Agent 约束
根据范围内事项和决策,推导 Agent 约束(§16):
- SCOPE: 实现应涉及的文件、目录和系统。
- EXCLUDE: 相邻系统、无关界面、明确不在范围内的领域。
- STOP_IF: 实施者应停止并寻求审核的条件(例如,“需要迁移架构”“触及身份验证边界”“改变公共 API 形态”)。
- ASK_FIRST: 继续操作前需要确认的操作类别。
横切关注点贯穿检查: 对于 §10(Type=X)中提出的每个横切关注点,或步骤 5 横切贯穿扫描(第 4 个探查项)中提出的每个横切关注点,确保它出现在 STOP_IF(如果实施者应暂停并寻求审核)或 ASK_FIRST(如果继续前需要确认)中。§16 是实施者查看横切关注点的主要入口;如果不进行此检查,这些横切线索就只能通过逐项扫描 §10 的表格才能看到。
解决方案完整性门槛——每个范围内事项都必须通过以下检查:
- 影响此事项的所有决策均已作出(未推迟、未作假设)
- 已明确说明并论证第三方依赖项的选择(而非“使用能实现 X 的工具”)
- 已验证架构可行性(通过调查确认推荐方案在当前运行时中可行,而非仅凭假设)
- 已确认关键系统边界的集成可行性(A 确实能与 B 通信)
- 验收标准可验证(实施者可以据此编写测试)
- 不依赖范围外事项
如果任何范围内事项未通过此门槛,则属于阻塞项——返回步骤 5 解决,或在征得用户同意后将其移至未来工作。
整体检查(综合所有范围内事项):
- 即使未来工作中的任何事项都未交付,范围内事项也能共同实现至少一项端到端、对用户可见的成果。(如果不能,则要么将必要事项从未来工作提升至范围内,要么告知用户此规范无法独立交付价值,并确认用户是否接受。)
未来工作分类——每个范围外事项都要标注成熟度级别:
- 已探索: 在制定规范期间已调查。对所需内容、推荐方案以及当前不纳入范围的原因都有清晰认识。经过少量额外工作即可纳入。
- 已识别: 已知其重要性,但尚未深入调查。实现前需要单独制定规范。
- 已记录: 在过程中提及,但未进行调查。简要描述其内容及其未来可能重要的原因。
对于范围内事项,记录:
- 目标和非目标
- 含验收标准的需求
- 拟议解决方案(垂直切片)
- 负责人和后续行动
- 主要风险及缓解措施
- 需要埋点或衡量的内容
质量标准
- 执行
references/quality-bar.md中的必备检查清单。 - 如果触发任何“高风险:停止并验证”条件,则将应做项视为必做项,除非用户明确接受风险。
- 确认可追溯性:
- 每项顶层需求都对应一项设计选择和计划
- 每项设计决策都说明了对用户的影响
- 对于不可轻易撤销的决策,提供明确确认和证据引用
- 确保未来工作事项标注了成熟度级别并附有适当文档(而不只是“以后再做”的条目)。
- 验证交付物完整性:
evidence/文件涵盖规范制定过程中的所有事实性发现,meta/_changelog.md记录所有决策和变更,SPEC.md 是清晰的当前状态快照,不含过时章节。
验证后,将内容写入 SPEC.md(范围内事项、未来工作、决策日志),并将变更记录到 meta/_changelog.md。如果处于 git 仓库中,请将 **Baseline commit:** 字段替换为当前的 git rev-parse --short HEAD。这是权威基线,表示上次验证规范时的代码库状态。
输出要求
交互式迭代输出(每条消息默认采用)
当你处于规格制定过程中时,请按以下结构组织回复:
排序原则: 在聊天界面中,消息的最后一部分是用户会阅读、回复和采取行动的内容。请按以下顺序组织输出:先呈现背景和进展,再呈现需要用户输入的事项,最后呈现开放问题。
§1)当前状态(我们目前的认知)
- 最多 3–8 条要点,并结合自主调查所得信息。
§2)进展变化
- 2–5 条要点:说明本轮理解发生了哪些变化,以及这些变化为何会影响规格方向。
- 聚焦与决策相关的实质内容,而非文件操作。按照 Agent 的工作规范,静默更新产物。
- 简要记录捕获了什么(例如:“梳理了身份验证流程,并更新了规格中的当前状态部分”)——无需正式列出文件清单。
§3)跟踪事项(仅限 ○ 项 — 编号列出)
Agent 正在跟踪、但本轮不需要用户输入的事项。此处只能列出 ○ 可进一步调查 的事项——Agent 已暂停调查(因为边际收益递减、优先级较低或耗时较长),但用户提出要求后可以继续深入。
每个事项包括:
- 问题(标注类型、优先级)
- 调查状态: 简要说明 Agent 已检查的内容和发现——聚焦实质内容,而非调查过程。
- 暂停原因: 说明 Agent 为何在此处停止——边际收益递减、优先级低于其他 P0 项,或受限于当前可访问范围,无法在没有[用户输入/专项验证/外部访问]的情况下继续调查。说明进一步调查需要如何开展,以便用户判断是否要指示继续深入。
- 解锁内容:问题解决后可以明确的决策或后续事项。
如果没有 ○ 项,可省略 §3。
在 §3 末尾(如有):
如需进一步调查任何事项,请回复“深入调查 N”。
§4)需要你输入的事项(编号列出)
列出本轮需要用户回应的所有事项——但仅限确实需要用户判断的事项。
在 §4 列出任何事项之前,先应用核心规则 #3(自主调查边界):能否通过调查代码、依赖项、网络资料或既有实践来回答?如果可以,则将其作为跟踪事项列入 §3(并说明调查状态),不要询问用户。§4 只能包含需要用户判断的事项(愿景、优先级、风险承受度、范围、偏好、取舍)。
格式取决于所处阶段:
- 步骤 1(轻量信息收集): 以不具约束力、旨在了解方向的澄清问题形式提出,并明确说明默认将其暂作开放问题处理。不要提供选项表格、建议,也不要施加“选择 A/B/C”的压力。完整规则见步骤 1。
- 步骤 3 起(完成调研后): 可以列出选项明确的结构化决策,或需要用户判断的事项。
每项只能出现在 §3 或 §4 中,不能同时出现。
先呈现选项明确的决策,再呈现判断事项/开放问题——开放问题必须放在用户看到的最后。
- 决策(仅限完成调研后,选项明确):按
references/decision-protocol.md中的格式呈现——根据置信度决定呈现深度(HIGH = 陈述意向,MEDIUM = 完整列出选项,LOW = 提供完整背景)。 - 判断事项(尚无明确选项):说明目前的调查结果,以及 Agent 无法进一步缩小范围的原因;直接提问,并说明答案有助于明确什么。
- 澄清问题(仅限信息收集阶段):按照步骤 1 的规则,以不具约束力、旨在了解方向的方式提出。
定稿输出
当用户说“finalize”时:
- 运行最终产物同步检查点(与步骤 5 的第 7 项相同)。
- 确保
meta/_changelog.md中有一条会话结束记录,并列出所有待处理事项。 - 将完整的
SPEC.md(PRD + 技术规范)作为单独的产物返回。 - 在回复末尾添加一个定稿摘要块,其中包含:
- **工作目录:**当前工作目录的绝对路径(如果尚未知晓,请使用
pwd)。 - **规范文件:**已定稿的
SPEC.md的绝对路径。 - **下一步:**提供
/ship,以开始交付此规范——例如:“准备开始实施时,请针对这份规范运行/ship。”
- **工作目录:**当前工作目录的绝对路径(如果尚未知晓,请使用
反模式
- 将产品和技术视为彼此独立的工作线(两者必须始终交织推进)。
- 不验证当前行为或依赖项,就给出「自信」的答案。
- 在没有明确证据和用户确认的情况下让范围发生偏移。迭代循环中范围发生变化是预期之内的事,但必须提供证据,而不是悄无声息地更改。
- 跳过影响范围分析(运维、可观测性、UI 影响、迁移)。
- 编写无法执行的规范(没有验收标准、没有风险,或「范围内」的事项未通过完整解决门槛)。
- 将用户提供的初始种子当作最终的问题表述。 初始种子体现了用户意图,但不是问题陈述。必须通过世界模型依据(步骤 2)和步骤 3 的问题框定(SCR + 压力探查)对其进行验证。未经验证,不要将初始种子直接定为规范中的问题陈述。即使用户看起来很有把握,步骤 3 中也要推动问题描述更加具体。
- 提出要调查,而不是直接调查。 如果可以获取信息(代码、依赖项、网页、先例),就自主调查,不要停下来征求许可。根据范围选择工具:查找函数名称不需要
/research;追踪多个系统则需要。但这两种情况都应直接调查,而不是只提出调查建议。只有遇到真正需要判断的事项(产品愿景、优先级、风险承受度、范围决策)时才停下来。 - 让用户跳过问题框定。 即使用户直接问「X 应该怎么构建」,或已有大量背景,也仍须将工作流推进到步骤 3(根据拓扑进行框定)。步骤 3 中的 SCR、压力探查和用户画像规范不可省略——这是验证初始种子并确定有依据的范围的环节;跳过它们会再次引入后期才发现问题框定错误的成本。(步骤 1 本身刻意保持轻量;严格的问题框定在步骤 3 中进行。)
- 只在对话中积累洞见,不将其持久化到文件。 如果获得了事实信息(代码追踪、依赖行为、当前状态),就应立即写入证据文件,而不是等到「之后」或「最终定稿时」。对话上下文会被压缩;产物则会留存。
- 提取未决问题不足(平衡谬误)。 Agent 在提取过程中生成未决问题,却暗中按重要性筛选,只列出那些「足够重要」的事项。结果是一小组看似平衡、让人安心的问题,但反映的是 Agent 对重要性的判断阈值,而非实际情况。改进方法:将提取与优先级排序分开。列出每一项可能的不确定性;使用标记步骤(P0/P2)确定优先级,而不是在提取时筛选。
- 指示人工去做异步工作。 绝不要说「去找 X 团队确认」「做个实验」或「跟客户聊聊这个」。如果需要人工可能掌握的信息,就询问对方了解或认为的情况。如果需要外部信息,就自己通过代码、网页和文档进行调查。
- 质疑人工的流程,而不是探究其想法。 不要问「你和客户聊过了吗?」或「你向用户验证过了吗?」而应提出选项并询问其意图:「你希望客户能够执行 X 吗?另一种方案是 Y,它也许能满足需求,因为 Z。」
- 将第三方依赖项选择或架构可行性推迟到「未来工作」。 「使用哪个库/服务」以及「推荐方案在我们的运行时中是否真的可行」等决策,会决定「范围内」的事项能否实现。它们看起来像实现细节,但其实是规范阶段就要解决的问题。如果实现者无法在不重新讨论这些选择的情况下执行规范,该事项就未通过完整解决门槛,不应真正列为「范围内」。
- 假设假设提出后范围就固定不变。 范围假设(步骤 3)只是起点。调查会改变范围。范围变化是预期之内的,但必须基于证据交由用户决策,而不能悄无声息地发生。
- 使用隐含优先级标签来提出需求(必须/应该/可以/可选/锦上添花)。 规范的目的是消除实现中的歧义。隐含优先级标签会产生「也许发布」的模糊地带,把优先级决策推给实现者——这正是规范要避免的失败模式。对于每项候选需求,都必须在 §4 中强制二选一:必需(承诺纳入 §6)或未来工作(延期至 §15,并标明成熟度级别)。由用户作出决定;Agent 提供有证据支持的选项和建议,但绝不自行指定优先级或承诺某项需求。
- 主动提出跳过审计或验证。 步骤 6–8(审计、评估发现、验证并定稿)是必需步骤——绝不要提出绕过它们(「要继续审计,还是规范已经可以实现了?」「要跳过验证,直接进入实现吗?」「规范看起来完整了,我们直接开始实现吧。」)。在阶段之间暂停,让用户有机会提出意见没有问题;但不能提出跳过阶段。如果用户要求跳过,应说明审计能发现过时的假设和设计盲点,而这些问题在实现阶段修复的成本更高,然后继续进行审计。在无头模式下,这三个步骤都会自动执行——没有人工参与并不意味着它们可以省略。
示例
错误(被动响应、缺乏依据)
We should do Option A. It's standard and should work.
正确(自主调查后做出有证据支持的决策)
Decision 2 (Cross-cutting, 1-way door): Public API shape for <feature>
Options:
A) Single endpoint ... → simplest onboarding, harder to evolve later
B) Two-step API ... → better DX for multiple consumers, more surface area now
Recommendation: B (high confidence)
- Why: aligns with multi-consumer needs; our existing SDK uses the two-step
pattern for 3 of 4 analogous endpoints (evidence/sdk-api-patterns.md)
- External prior art: Stripe and Twilio both use two-step for similar surfaces
- Confidence: HIGH (verified from source + prior art alignment)
正确(调查状态明确的未解决事项)
3. [Technical, P0] How does our auth middleware handle
token refresh during long-running requests?
Investigation status: Traced the token refresh path through auth
middleware (evidence/auth-middleware-flow.md). The refresh is
synchronous and blocks the request. No existing endpoint handles
mid-request token expiry.
Why paused: Lower priority than the API shape decisions above;
diminishing returns without checking session store internals. Going
deeper means reading the session store's source/types to verify
concurrent refresh support.
○ Can investigate further: Say "go deeper on 3."
Unlocks: Decision on whether we extend the existing refresh mechanism
or build a new one for streaming endpoints.
正确(第 4 节中的判断——需要用户阐明愿景)
5. [Product, P0] Which persona is the primary target
for the initial onboarding flow?
Investigation status: Found 3 distinct entry patterns in analytics
(evidence/user-segments.md). Developer-first accounts are 68% of
signups but Enterprise accounts drive 85% of revenue.
● Needs your input: This is a product strategy call — data supports
either direction. Which segment aligns with this quarter's goals?
Unlocks: Onboarding UX design, default configuration, and docs tone.
验证循环(高风险时使用)
-
识别哪些决策属于不可逆事项(公共 API、架构、边界安全、命名)。
-
对于每项不可逆事项,确保具备:
- 用户明确确认
- 有证据支持的理由(或明确标注不确定性和计划)
-
重新运行
references/quality-bar.md中的检查清单和触发条件。 -
只有在「范围内」的事项均可实施,且剩余未知项已明确记录(并获用户认可)后,才停止。