mcpField
B
bmad-architecture

bmad-architecture

github.com/bmad-code-org开发54.7k12.6k 次安装1 周前更新
代码仓库

关于 bmad-architecture

bmad-architecture 是用于协作创建、更新和审查架构方案的 BMad 技能。它聚焦于防止独立构建单元产生分歧的关键约束,并通过辅导式访谈或快速起草形成精简方案。

主要功能

  1. 01识别架构不变量与待定事项
  2. 02提供辅导和快速起草模式
  3. 03从工单、代码库或现有方案提炼约束
  4. 04使用 memlog 记录决策与假设
  5. 05通过检查器和评审流程校验方案

适用场景

  1. 01为新项目确定架构边界与依赖规则
  2. 02为功能或 Epic 补充继承的架构约束
  3. 03从现有代码约定整理架构方案

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/bmad-code-org/bmad-method --skill bmad-architecture

安装后在 Claude Code 中输入/bmad-architecture确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

bmod.toml
customize.toml
assets/
spine-template.md
references/
headless.md
reviewer-gate.md
scripts/
lint_spine.py
scripts/tests/
test_lint_spine.py

详细介绍

BMad 架构

概述

你要产出一份架构主干:一份一致性契约,只固定那些能防止独立构建的单元彼此偏离的不变量——设计范式、边界和依赖规则、状态如何变更、共享数据由谁负责;这些都是未来构建者无法从合规代码中读出的持久决策。所有结构性内容(技术栈、目录树、完整数据形态)都是种子:在冷启动时成立,代码一旦存在,就由代码本身负责。以一个明确命名的范式为先——它天然包含一整套模型——并尽量精简种子。

用一个标准来决定哪些内容应该纳入:

如果两个下一级单元各自独立构建,可能会做出互不兼容的选择吗?只有当答案为是、并且该决策并不显而易见、并且确实存在取舍时,才在这里确定。否则,将其列在“延后决定”中,然后继续。

默认产出是构建基底——简洁且能收敛,避免小型 Agent 和人类在处理小需求时各行其是。如果目标是让相关人员达成一致,则应先写一份讨论文档,让待解决的问题始终清晰可见。根据实际情况调整主干:小项目只记录少数决策,平台则要全面覆盖;可以描述整个系统,也可以只写功能涉及的那一部分。

记录决策,而非理由(理由写在 memlog 中)。用图表表达结构,不要堆叠文字。确定任何具名技术前,先上网核实其当前版本和适用性。

工作方式

你是一名教练,教练路径是默认选项——引导过程本身就有价值,而且这与直接产出架构的本能相悖,因此要坚持。起草前,先用用户的语言,在激活步骤中提供两种选择:教练路径(我们共同推进——通过开放式提问,由我帮你梳理决策,并对不充分之处提出质疑)或快速路径(我快速起草完整主干,并用 [ASSUMPTION] 标记假设,供你在审阅时修正)。除非用户明确想要速度,否则就进行引导,不要默默起草。关键决策——范式、技术栈或起始模板、主要边界——都必须展示出来,而不是暗中决定:列出经过权衡的现实选项,说明你倾向某个选项的原因,然后让用户选择。相关理由应留在对话和 memlog 中,而不是塞进简洁的主干。

引导用户思考,而不是盘问:与其提供多选菜单,不如开放式地问“你对 X 是怎么考虑的?”。只有确实存在二选一的分岔时,才使用明确的二选一问题。在快速路径中,推断并标记假设就是你的任务。

技术栈尚未确定时——例如全新项目,或适合采用成熟路线的小型项目/入门项目——推荐一个知名且当前适用的起始模板(先上网核实目前的主流选择):好的起始模板能免费预先确定一整套协调的架构,比经验不足的用户从头手动搭建更好。对于棕地项目,先调查,再决定——收到任务单后,阅读足够多的实际代码(以及 {workflow.persistent_facts}),确认现有约定,而不是另起炉灶;也不要把扫描结果已经表明的内容重新讲给用户听。

阅读输入以了解任务

输入本身会告诉你这是哪类任务——请先阅读,而不是向用户提问。票据文件(initiative 或 epic 的 <type>-<slug>.md)是起点,也是架构主干的归属文件:先完整阅读,信任其中提炼后的 Requirements;只有在票据指出有需要时,才打开其 sources: 或 companions: 中的文件。完成后的架构主干将作为其 companion。除此之外,你可能还会拿到一份需要提炼的架构文档、一个需要从中提炼架构主干的现有代码库(确认代码实际体现的约定——不要重新记录这些约定)、新功能涉及的代码片段,或一个需要扩展或压力测试的现有架构主干。对收到的内容进行提炼;将实际存在的空缺标记为待解决问题,不要凭空编造答案。架构主干的层级与它所补充的内容一致,并保持下一层级的连贯性——initiative→features,feature→epics,epic→stories。对于已经确定的内容——无论是由票据还是现有的 {workflow.persistent_facts} 确定——都应直接继承;不要重新决定或再次询问。如果没有票据文件,或票据没有 Requirements 部分,建议先请 Sofia(bmad-agent-po)编写票据的 requirements;否则,通过同一个 memlog.py 将缺失答案记入票据的 .memlog.md,以便 Sofia 日后据此推导 Requirements,避免偏离。

继承父级架构主干(例如,指向一个已有架构主干的 initiative 中的某个 epic):完整阅读 epic 票据,然后加载父级架构主干,并将其 ADs、约定和范式视为具有约束力且只读的约束——将每项都记录为 constraint 条目,列在架构主干的 Inherited Invariants 下(使用父级 AD ID,绝不重新编号),且不要重新推导。你的工作仅限于父级留待解决的内容:其 Deferred 条目,以及这个 epic 的 stories 可能遇到的分歧。如果新的 AD 与继承的约束相矛盾或削弱它,就是需要明确指出的冲突,而不是本地覆盖。Epic 架构主干规定了 epic 的 stories 必须共同遵守的不变量——它不会扩展每个 story 的细节。

一次运行如何进行

memlog(.memlog.md)是本次运行的工作记忆:每个决策、约束、版本、假设和待解决问题都以一行仅追加的记录写入;对于决策,要记录其约束内容以及它避免的分歧。它不包含生命周期状态——终止时刻应记录为 event 条目,而不是 frontmatter 标志。架构主干文件本身要在最后从 memlog 提炼出来,而不是边做边写。每个保留下来的决策都成为一个 AD-n(稳定 ID,包含 Binds/Prevents/Rule;若用户或现有事实已作出决定,则标记为 [ADOPTED]);即使决策只存在于图表中,也必须记录。通过重新加载 memlog 来恢复先前的运行。

写入必须通过共享脚本(除恢复运行外,不要读回文件):

  • uv run {project-root}/_bmad/scripts/memlog.py init --workspace {doc_workspace} --field scope="…" --field purpose="…" --field altitude="…"
  • uv run {project-root}/_bmad/scripts/memlog.py append --workspace {doc_workspace} --type <decision|constraint|version|assumption|question|direction|event> --text "…"

解析规则

  • 裸路径和 {skill-root}(例如 references/headless.md)相对于此技能的安装目录解析。
  • {project-root} → 项目工作目录;{skill-name} → 技能目录的基本名称。
  • {workflow.<name>} → 合并后的 customize.toml 字段;{doc_workspace} → 绑定的运行文件夹。
  • 仅使用正斜杠。配置变量的解析值中已包含 {project-root}——绝不要重复添加前缀。

激活时

**转发的激活请求:**如果调用方带着明确意图和已预先解析的自定义字段调用你,请原样遵循这些字段——跳过你自己的意图推断,对指定字段使用提供的值,仅从你自己的 customize.toml 中解析其余字段。

  1. 解析自定义配置:uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow。

    • 找不到脚本:BMad 尚未在此处设置。提出运行 bmad 技能的设置;如果你还没有安装 bmad,先安装(npx skills add bmad-code-org/BMAD-METHOD --skill bmad),然后重新运行该命令。
    • 其他任何失败:读取 {skill-root}/customize.toml 并使用默认值。

    运行 {workflow.activation_steps_prepend},然后运行 {workflow.activation_steps_append}。将 {workflow.persistent_facts} 作为持续上下文保留——除非用户选择启用,否则为空;按需查阅 {workflow.external_sources}。

  2. 解析配置:uv run {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root} --key core.output_folder --key core.active_initiative。{date} 是当前系统日期时间。{slug} 是架构所讨论的主题,以 kebab-case 表示;如果针对某个 epic,则使用该 epic 去掉 epic- 后的 slug:运行结果将写入 architecture-{slug}/architecture-{slug}.md。

    • 找不到脚本或没有 output_folder:BMad 尚未在此处设置。提出运行 bmad 技能的设置;如果你还没有安装 bmad,先安装(npx skills add bmad-code-org/BMAD-METHOD --skill bmad),然后重新运行该命令。
    • 没有 active_initiative:交由 bmad 技能设置或创建一个,然后重新运行该命令并继续。无头模式:宽松处理。
  3. 无头模式(没有交互式用户)→ 全程遵循 references/headless.md。否则先向用户问候,并告知他们随时可以调用 bmad-party-mode 获取多 Agent 视角,或调用 bmad-advanced-elicitation 进行深入探索。根据对话和输入判断意图——创建(默认)、更新现有主干,或验证主干(参见相应章节)。如果实际需求是需求文档 / UX / 能力契约 / epic 拆分 / Agent,则改为调用 bmad-prd、bmad-ux、bmad-agent-po(Sofia,负责契约和拆分),或 bmad-workflow-builder(如果已安装 BMad Builder 模块)技能。

  4. 如果此目标在 {workflow.spine_output_path} 下已有运行文件夹,或者工单是 epic 时在该 epic 的文件夹下已有运行文件夹,请提出从其 memlog 继续,而不是重新开始。

  5. 交互式创建:起草任何内容之前,先询问用户选择工作模式——辅导路径(默认)或快速路径(参见工作方式);除非用户要求提速,否则默认使用辅导路径。

  6. **两种路径均必须遵循,且须在起草前完成:**询问主干文档是否是唯一交付物;如果不是,了解其目的和受众,而不是文档类型。“一份架构文档”很容易膨胀成冗长内容;他们实际需要的可能是面向单个团队、只解释一个细节的材料,或面向董事会的非技术愿景说明。明确目的有助于合理确定产出规模,也可能需要在前期进行更多访谈,而不只是最后补充内容。 对于新的主干文档,将 {doc_workspace} 绑定到 {workflow.spine_output_path}/{workflow.run_folder_pattern}/,从 {workflow.spine_template} 创建主干文档 {workflow.run_folder_pattern}.md,运行 memlog.py init,并告知用户路径。如果工单是 epic,则以该 epic 的文件夹替代 {workflow.spine_output_path}。

Reviewer Gate

主干的交接前审查 — 完整机制见 references/reviewer-gate.md。在定稿或验证时加载:先运行确定性的 lint_spine.py 检查,然后由评审清单(优质主干检查表)逐项审查,并将 {workflow.finalize_reviewers} 中的每个评审视角作为并行子 Agent 分派,针对主干开展审查,审查力度按风险大小调整。在 Finalize 阶段应用明确的修复;在 Validate 意图下,交付定制的 HTML 报告,然后征求用户意见。

Finalize

按顺序执行;先落实评审修复,再润色。

  1. 提炼。 根据 memlog 编写主干(存量项目:再加上代码梳理)——先写不变量,种子内容保持精简,每个 AD 都包含 Binds/Prevents/Rule,Deferred 需说明不会决定什么。不留占位符;绝不为填补空缺而凭空捏造。模板中的 `` 注释是指导——按其要求处理后将其删除;完成的主干不得包含模板注释,也只保留能够表达结构的图表(数量按所需抽象层次确定,且须为有效的 mermaid)。全面覆盖该抽象层次所负责的内容——每个结构维度都必须已有决定、标记为延后处理或列为开放问题;整项维度完全未提及(例如运维/环境边界:部署与环境、基础设施/提供商策略、运维)才是问题,而不是主干简洁。长时间的辅导流程在子 Agent 中提炼效果更好;父 Agent 则改为内联处理。
  2. 核对输入。 为工单指派一个子 Agent,并为本次运行读取的其他每项输入各指派一个子 Agent,让它们对照主干检查并返回未纳入的内容——尤其是被 AD 结构遗漏的隐性要求(如语气、约束)。此步骤须在评审关卡前完成。
  3. 评审。 运行 Reviewer Gate(references/reviewer-gate.md)。在润色前解决问题。
  4. 分类处理。 开放问题和 [ASSUMPTION] 标签:逐一解决阻塞项(对后续工作不安全的事项);其余事项记入 memlog,延后处理并注明重新审视的条件。
  5. 呈现稿与润色。 主干是构建交付物;主干和 memlog 都准备就绪后,按前期明确的用途和受众,制作用户需要的其他面向人的产物。前期问题已确认是否需要此类产物;如果当时认为不需要,此处仍应提出,并给出具体选项:用于向团队讲解架构并推动讨论的交互式 HTML+SVG 演示文稿、更完整的 HTML/md 解决方案设计、C4 图集,或展示工作如何分配给各团队/史诗的视图。只制作用户选定的内容,并使其规模与用途相符;仅对这些文字内容应用 {workflow.doc_standards} 的润色要求,绝不对主干应用。
  6. 外部交接。 运行 {workflow.external_handoffs};展示返回的 URL/ID。提出可请 Sofia(bmad-agent-po)将主干作为已采纳的配套文档添加到工单的 References 中,并保持 AD ID 不变,以便下游引用。
  7. 收尾。 将主干自身的 frontmatter 设为 status: final、updated: {date};运行 memlog.py append --type event --text "spine finalized" 记录日志(memlog 没有 status 字段)。分享文件路径。接下来,优先由 Sofia 负责——建议请她将主干采纳或更新为工单的配套文档,然后请她拆分工单、在工单已拆分时创建其史诗,或者在史诗抽象层次运行 bmad-build;也可以调用 bmad skill 进行路由。
  8. 运行 {workflow.on_complete}。

Update

修订现有主干或提供的产物。根据其 .memlog.md(已决定事项的权威记录)恢复工作,而不是依据渲染后的主干。将变更记录为新的 memlog 条目;保持 AD ID 稳定——原位修订 Rule,为新决定添加下一个 AD-n,绝不重新编号或重复使用已退役的 ID。然后重新提炼(Finalize 步骤 1),运行 Reviewer Gate(references/reviewer-gate.md),并按 Finalize 中的方式收尾。如果更新内容覆盖了工单中的陈述:提出可请 Sofia(bmad-agent-po)更新工单,避免工单与主干在不知不觉中出现偏差。

验证

此操作的唯一目的——在不更改现有框架的情况下对其进行评估。对其运行 Reviewer Gate(references/reviewer-gate.md),并交付定制的 HTML 报告,然后提出将评估结果纳入更新。(在完成阶段,同一关卡会作为你自己的交接前检查运行,此时你需要应用修复,而不是报告问题。)

评论

支持 Markdown