规范驱动的 Vibe Coding:BMad 实践指南
用 AI Agent 团队和结构化工件,把 Vibe Coding 从"氛围抽卡"变成可控的工程流程。
为什么 Vibe Coding 需要结构?
Vibe Coding 的核心问题是需求在聊天记录里飘着:AI 输出质量看 prompt,开发过程缺乏版本控制,团队协作几乎不可能。
解决方案不是"更好地写 prompt",而是规范先行(spec-first)——先让人和 AI 就"做什么"达成书面共识,再动手写代码。
BMad 是什么?
BMad(Build More Architect Dreams)是一个 AI 原生的敏捷开发框架,通过专用 AI Agent 团队和结构化工件,覆盖从构思到实现的完整流程。
- 全称:Breakthrough Method for Agile AI-Driven Development
- 官网:https://docs.bmad-method.org
- GitHub:https://github.com/bmad-code-org(43k+ stars)
- 定位:不只是提示词技巧,是一套完整的开发方法论
核心特性
- AI Agent 团队:内置 12+ 专用 Agent(PM、架构师、开发者、UX、QA 等)
- 规模自适应:自动根据项目复杂度调整规划深度,小项目走 Quick Flow,大项目走 Enterprise
- 结构化工件:PRD、架构文档、Epic、Story——每个文档都成为下一阶段的上下文
- 工具无关:支持 Claude Code、Cursor、Windsurf 等主流 AI 编码工具
- 可扩展:通过 BMad Builder 可以创建自定义 Agent 和 Workflow
BMad vs OpenSpec
| 维度 | BMad | OpenSpec |
|---|---|---|
| 哲学 | AI Agent 团队协作 | 人类 + AI 协作 |
| 工作流 | Phase 1-4 完整流程 | 轻量级 propose → apply |
| Agent 角色 | 多角色分工(PM/架构师/开发者) | 无 Agent 分工 |
| 复杂度适配 | 自动调整(小功能→企业系统) | 手动选择 schema |
| 学习曲线 | 较陡 | 较平缓 |
| 适用场景 | 复杂产品、平台、企业系统 | 中小型功能、Brownfield 项目 |
两者可以结合使用:BMad 管整体规划和多角色协作,OpenSpec 管单个变更的规范驱动。
核心概念
四阶段开发流程
Phase 1: Analysis → 头脑风暴、研究、问题定义(可选)
Phase 2: Planning → 创建 PRD、需求规范
Phase 3: Solutioning → 设计系统架构(BMM/Enterprise 才有)
Phase 4: Implementation → 一个 Epic 接一个 Epic,一个 Story 接一个 Story
三种规划轨道
| 轨道 | 适用场景 | 复杂度 | 产出文档 |
|---|---|---|---|
| Quick Flow | Bug 修复、简单功能 | 1-15 个 Story | Tech-spec |
| BMad Method (BMM) | 产品、平台、复杂功能 | 10-50+ 个 Story | PRD + 架构 + UX |
| Enterprise | 合规系统、多租户 | 30+ 个 Story | PRD + 架构 + 安全 + DevOps |
工件体系
BMad 的核心是每个文档成为下一阶段的上下文:
PRD → 架构文档 → Epic → Story → 代码
| 文档 | 作者 | 作用 |
|---|---|---|
| PRD | PM Agent | 做什么、给谁做、成功标准、非目标 |
| 架构文档 | 架构师 Agent | 技术选型、数据结构、边缘情况 |
| Epic | PM Agent | 一组相关的 Story |
| Story | Scrum Master Agent | 可执行的实现单元 + 验收标准 |
| Tech-spec | 开发者 Agent | 实施计划 + 任务拆解 |
内置 Agent
BMad 提供 12+ 专用 Agent:
| Agent | 职责 |
|---|---|
| PM | 创建 PRD、Epic、Story |
| 架构师 | 设计系统架构 |
| 开发者 | 实现代码、代码审查 |
| UX | 用户体验设计 |
| QA | 质量保证、测试策略 |
| 分析师 | 生成项目背景 |
| Scrum Master | Sprint 规划和跟踪 |
目录结构
BMad 推荐的标准项目结构:
/project-root
/00_docs ← 事实来源
/features ← 按功能组织的规范
/architecture ← 系统文档
/01_plans ← 执行计划
/active ← 当前进行中
/completed ← 已完成
/02_archive ← 归档的规范
/src ← 实现代码
工作流命令
Quick Flow(简单项目)
| 命令 | Agent | 用途 |
|---|---|---|
/quick-spec |
开发者 | 分析代码库,产出技术规范 |
/dev-story |
开发者 | 实现单个 Story |
/code-review |
开发者 | 验证实现质量 |
BMM 完整流程(复杂项目)
| 命令 | Agent | 用途 |
|---|---|---|
/product-brief |
分析师 | 定义问题、用户、MVP 范围 |
/create-prd |
PM | 创建完整需求文档 |
/create-architecture |
架构师 | 技术决策和系统设计 |
/create-epics-and-stories |
PM | 拆分为 Epic 和 Story |
/sprint-planning |
Scrum Master | 初始化 Sprint 跟踪 |
/create-story |
Scrum Master | 准备下一个 Story |
/dev-story |
开发者 | 实现 Story |
/code-review |
QA | 验证实现质量 |
核心辅助命令
| 命令 | 用途 |
|---|---|
bmad-help |
智能向导——任何时候都可以问"下一步做什么" |
bmad-quick-dev |
统一快速流程:意图澄清 → 规划 → 实现 → 审查 → 交付 |
bmad-investigate |
取证式调查,产出分级证据 |
完整示例:构建一个笔记应用
Step 1: 启动 Quick Flow
# 告诉 BMad 你的想法
npx bmad-method
# 选择 Quick Flow 开始
Step 2: 创建 Tech-spec
/quick-spec 构建一个笔记应用,支持创建、编辑、删除笔记
BMad 会:
- 理解意图——通过对话澄清模糊需求
- 调查代码——检查现有代码库(如有)
- 生成 Tech-spec——包含完整实现计划
Step 3: Tech-spec 示例
# 笔记应用 Tech-spec
## 概述
用户需要一个本地笔记应用,支持创建、编辑、删除笔记。
## 用户故事
### Story: 创建笔记
- **作为** 笔记应用用户
- **我想要** 创建新笔记
- **以便于** 记录我的想法
#### 验收标准
- **GIVEN** 用户在笔记列表页面
- **WHEN** 用户点击"新建笔记"按钮
- **THEN** 创建空白笔记并打开编辑界面
- **AND** 笔记标题默认为"新笔记"
- **AND** 自动保存已启用
### Story: 编辑笔记
- **作为** 笔记应用用户
- **我想要** 编辑已有笔记
- **以便于** 更新我的想法
#### 验收标准
- **GIVEN** 用户已有一篇笔记
- **WHEN** 用户点击笔记进入编辑页面
- **THEN** 显示笔记当前内容
- **AND** 编辑后自动保存(防抖 1 秒)
### Story: 删除笔记
- **作为** 笔记应用用户
- **我想要** 删除不需要的笔记
- **以便于** 保持笔记列表整洁
#### 验收标准
- **GIVEN** 用户在笔记列表页面
- **WHEN** 用户点击删除按钮并确认
- **THEN** 笔记从列表中移除
- **AND** 本地存储同步更新
## 技术方案
### 技术栈
- **前端**:React + TypeScript
- **存储**:localStorage(IndexedDB 扩展)
- **样式**:Tailwind CSS
### 目录结构
```
src/
├── components/
│ ├── NoteList.tsx # 笔记列表组件
│ ├── NoteEditor.tsx # 编辑器组件
│ └── DeleteConfirm.tsx # 删除确认弹窗
├── hooks/
│ ├── useNotes.ts # 笔记 CRUD 操作
│ └── useAutoSave.ts # 自动保存逻辑
├── types/
│ └── note.ts # 类型定义
└── App.tsx # 入口
```
## 实施任务
### 任务 1: 项目初始化
- [ ] 创建 React + TypeScript 项目
- [ ] 安装 Tailwind CSS
- [ ] 配置 ESLint + Prettier
### 任务 2: 类型定义
- [ ] 创建 `src/types/note.ts`
- [ ] 定义 Note 接口(id, title, content, createdAt, updatedAt)
### 任务 3: 存储层
- [ ] 实现 `useNotes` Hook
- [ ] CRUD 操作挂接 localStorage
- [ ] 实现 useAutoSave 防抖
### 任务 4: 组件
- [ ] 实现 NoteList 组件
- [ ] 实现 NoteEditor 组件
- [ ] 实现 DeleteConfirm 弹窗
### 任务 5: 集成
- [ ] App.tsx 组装所有组件
- [ ] 路由:列表页 / 编辑页
Step 4: 实现与审查
/dev-story story-1 # 实现第一个 Story
/code-review # 审查代码质量
# 重复直到所有 Story 完成
关键原则
1. 文档是资产,代码是负债
BMad 有一个核心理念:代码是负债,规范是资产。改动代码成本高,改动规范成本低。
| 层次 | Bug 修复成本 | 时间 |
|---|---|---|
| Prompt | $0.01 | 1 分钟 |
| 规范 | $0.10 | 5-10 分钟 |
| 代码 | $1.00 | 30-60 分钟 |
2. 每个文档驱动下一个
PRD → 架构文档 → Epic → Story → 代码
PRD 告诉架构师什么约束重要。架构文档告诉开发者遵循什么模式。Story 提供完整的上下文。
3. 规模自适应
BMad 会根据项目规模自动调整流程:
- 小功能:走 Quick Flow,2-3 个文档就够了
- 复杂产品:走 BMM,PRD + 架构 + Epic + Story
- 企业系统:走 Enterprise,加上安全和 DevOps
4. 人类只在高价值时刻介入
Quick Flow 的设计哲学:把人类介入点减少到最小。
人类参与的时机:
- 意图澄清——把模糊的需求压缩成一个清晰目标
- 规范审批——确认理解是正确的
- 最终审查——验收最终产物
中间过程由 AI Agent 自主执行。
多角色如何协调?
BMad 的多角色协调核心是文档驱动,不是直接调用。Agent 之间不直接通信,而是通过共享的规范文档传递上下文。
协调流程
PM Agent 架构师 Agent
│ │
├─ 创建 PRD ─────────────────→│ 读取 PRD 作为约束
│ │
│ 生成 architecture.md
│ │
│←───────────────────────────┤
│
PM Agent / Scrum Master
│
├─ 读取 PRD + architecture ──→ 生成 Epic 和 Story
│ Story 继承所有上游约束
│
开发者 Agent
│
├─ 读取 Story ──────────────→ 实现代码
│ (Story 包含 PRD + 架构的完整上下文)
│
QA Agent
│
├─ 读取 Story 的验收标准 ───→ 验证代码是否符合
关键机制
| 机制 | 说明 |
|---|---|
| 上下文继承 | Story 文件自动继承 PRD 和架构的约束。开发者不需要重新理解产品意图,Story 里已经写清楚了 |
| 无直接调用 | Agent 之间不直接通信。通过文件系统中共享的文档协调——文档写好了,开发者就能拿到完整上下文 |
| Party Mode | 可以把多个 Agent 拉进同一个会话,让他们同时讨论、协作。适合复杂决策需要多方输入的场景 |
| bmad-help | 任何时候可以问"下一步做什么",智能向导会告诉你应该调用哪个 Agent、应该读取什么文档 |
具体例子:构建一个电商后台
Step 1: PM 创建 PRD
# 电商后台 PRD
## 目标
团队需要一个电商后台系统,管理商品、订单、用户。
## 用户角色
- 管理员:管理商品、查看订单
- 运营:管理库存、查看报表
## 成功标准
- 管理员可以在 3 分钟内完成商品上架
- 系统支持日均 1000 订单处理
## 非目标
- 不需要支付集成(第三方负责)
- 不需要移动端支持
Step 2: 架构师读取 PRD,生成架构文档
# 电商后台架构
## 技术选型
- 后端:Node.js + Express
- 数据库:PostgreSQL
- 前端:React + Ant Design
## 约束(来自 PRD)
- 需要支持日均 1000 订单 → 数据库需要索引优化
- 管理员快速上架 → 后台需要支持富文本编辑器
- 多角色 → RBAC 权限模型
Step 3: Scrum Master 读取 PRD + 架构,拆分为 Epic
# Epic 1: 商品管理
## 包含 Stories
- story-01: 管理员登录
- story-02: 商品列表
- story-03: 商品上架
- story-04: 商品编辑
## 技术约束(继承自架构)
- 使用 React + Ant Design
- 使用 RBAC 权限模型
Step 4: 开发者读取 Story,实现代码
# story-03: 商品上架
## 上下文继承
- 用户角色:管理员(来自 PRD)
- 技术栈:React + Ant Design(来自架构)
- 权限:需要管理员角色(来自架构 RBAC)
## 验收标准
- **GIVEN** 管理员已登录
- **WHEN** 填写商品信息并提交
- **THEN** 商品出现在商品列表
- **AND** 数据库写入成功
## 实施任务
- [ ] 创建 ProductForm 组件
- [ ] 调用 POST /api/products
- [ ] 成功后跳转到商品列表
开发者不需要重新问"商品上架需要哪些权限"——Story 里已经写了。
Step 5: QA 读取 Story 验收标准,验证代码
# story-03 验收检查
## 需要验证
1. 商品表单字段完整(名称、价格、库存、描述)
2. 提交后数据库有对应记录
3. 非管理员用户无法访问上架页面(权限验证)
4. 表单提交有防抖,防止重复提交
Party Mode:多 Agent 协作讨论
当某个决策需要多个角色的视角时,可以用 Party Mode 把他们拉到一起:
用户:我想把订单处理速度提升 10 倍,怎么改?
架构师 Agent:需要引入消息队列和异步处理
PM Agent:这会改变订单确认的流程,需要告知用户吗?
QA Agent:异步处理会导致测试复杂度上升,需要增加集成测试
→ 最终决策:分阶段实施,先做队列,再做异步
协调总结
| 问题 | BMad 的解法 |
|---|---|
| Agent A 怎么知道 B 做了什么? | 通过文档继承——Story 包含完整上游上下文 |
| 开发者需要重新理解 PRD 吗? | 不需要,Story 已经继承了一切 |
| 多个 Agent 意见冲突怎么办? | Party Mode,拉到一起讨论 |
| 不知道下一步该调用谁? | bmad-help 告诉你 |
安装
# 标准安装
npx bmad-method install
# 非交互式 CI/CD
npx bmad-method install --yes --modules bmm --tools claude-code
# 前置要求
# - Node.js v20+
# - Python 3.10+
# - uv
与 OpenSpec 的对比选择
| 场景 | 推荐 |
|---|---|
| 小团队,简单功能迭代 | OpenSpec |
| 复杂产品,多角色协作 | BMad |
| 已有代码库的功能增强 | OpenSpec(Brownfield) |
| 从零构建新产品 | BMad |
| 需要 AI Agent 团队 | BMad |
| 快速原型验证 | OpenSpec |
两者并不互斥——可以在 BMad 管理整体规划和 Epic 拆分,在 OpenSpec 管理单个 Story 的规范。
参考资源
- 官网:https://docs.bmad-method.org
- GitHub:https://github.com/bmad-code-org
- BMad Builder:创建自定义 Agent 和 Workflow
- Quick Dev:https://docs.bmad-method.org/explanation/quick-dev/
- RFC 2119:关键词含义(SHALL/MUST/SHOULD/MAY)