关于 bmad-parallel-plan
bmad-parallel-plan 将线性待办列表整理为考虑依赖关系的并行开发批次,供 BMAD 规划流程使用。它检查文件范围与架构冲突,并给出合并方案;实际开发由外部工具或人员执行。
主要功能
- 01按依赖关系划分开发批次
- 02检查文件范围与语义冲突
- 03遵守可配置的并行数量上限
- 04建议分支与合并顺序
- 05验证或更新现有计划
适用场景
- 01为待开发故事规划并行工作
- 02在故事或范围变更后重新规划
- 03检查现有批次计划是否偏离
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aj-geddes/ claude-code-bmad-skills --skill bmad-parallel-plan安装后在 Claude Code 中输入/bmad-parallel-plan确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
REFERENCE.mdscripts/build-dependency-graph.pyplan-parallel-waves.pytemplates/parallelization-plan.template.md详细介绍
BMAD 并行计划
将线性待办列表转换为波次,让各项故事能够同时开发且互不冲突,然后准确说明如何将它们合并回来。此技能会生成一份计划。外部开发工具负责执行计划。
角色风格: Winston(架构师)负责推理隔离;工作流负责计算。
范围(请先阅读)
- 此技能只规划并发。它绝不会创建 worktree、运行开发 Agent、编写应用代码、运行测试、执行 lint 或运行
git。 - 输入为规划产物。唯一输出是
parallelization-plan.md(另可选生成dependency-graph.json/waves.json以便追溯)。 - 分支名称和合并顺序仅为建议,由开发工具或人工执行。
输入
| 产物 | 路径(位于输出文件夹下) | 用途 |
|---|---|---|
| Sprint 状态 | sprint-status.yaml | 故事 ID、史诗、状态、依赖列表 |
| 就绪故事 | stories/{epic}.{story}.{slug}.story.md | 负责的文件/模块范围 + 依赖映射 |
| 架构 | architecture.md | 防止语义冲突(边界、共享模块) |
| 配置 | userConfig.maxParallel(默认值为 3) | 波次宽度上限 |
只有状态为 ready-for-dev(或更后续状态)的故事才有资格进入波次。
四个步骤
-
依靠架构确保语义安全。 阅读
architecture.md。架构是实现并行安全的关键:清晰的模块边界意味着两个涉及不同组件的故事不会产生隐藏的语义冲突,即使涉及不同文件也一样。记录任何共享/跨领域模块(身份验证、配置、数据库架构、共享类型);涉及这些模块的故事冲突风险较高,通常不适合并行。 -
阅读每个故事的负责文件/模块范围。 每个就绪故事都会声明它可能修改的明确路径列表。收集
{story_id -> [paths]}。范围缺失或为空属于规划阻塞项——请标记;不要猜测。 -
构建依赖 DAG,然后进行拓扑排序以生成波次。 边来自以下三类冲突(参见 REFERENCE.md):
- 顺序边——史诗顺序(同一史诗中的故事通常按顺序进行)以及每个故事明确的依赖映射(
depends_on)。 - 文件范围边——任何两个负责的文件/模块范围有交集的故事不得位于同一波次(无向冲突,按故事 ID 从低到高处理)。
- 语义边——两个故事都涉及步骤 1 中的共享/跨领域模块。
进行拓扑排序:波次 N 包含所有依赖项已由波次
< N满足,且两两文件范围不重叠、语义上彼此安全的故事。每个波次最多包含maxParallel个故事;超出上限的故事顺延至下一波次(按 ID 从低到高)。 - 顺序边——史诗顺序(同一史诗中的故事通常按顺序进行)以及每个故事明确的依赖映射(
-
生成
parallelization-plan.md。 对每个波次,列出状态为 ready-for-dev 的故事;为每个故事提供独立的git-worktree分支名称及其互不重叠的文件范围。然后给出有序合并顺序:按故事 ID 从低到高合并至integration分支,设置集成审查检查点,然后创建单个 PRintegration -> main。
三种意图
- Create——根据当前待办列表创建首个波次计划。
- Update——在添加、完成或重新界定故事范围后重新规划(重新计算 DAG;排除
done状态的故事,并对其余故事重新排序)。 - Validate——重新检查现有计划:确认每个波次的文件范围仍互不重叠、依赖均已满足且未超出
maxParallel;报告偏差。
说明意图,然后继续。
运行辅助脚本
两个脚本都是确定性的,只读操作。通过 ${CLAUDE_PLUGIN_ROOT} 解析路径。
# 1) Build the dependency DAG (edges + conflict class) from status + story scopes
python3 "${CLAUDE_PLUGIN_ROOT}/skills/bmad-parallel-plan/scripts/build-dependency-graph.py" \
--status "<output>/sprint-status.yaml" \
--stories "<output>/stories" \
--out "<output>/dependency-graph.json"
# 2) Topologically sort into capped waves
python3 "${CLAUDE_PLUGIN_ROOT}/skills/bmad-parallel-plan/scripts/plan-parallel-waves.py" \
--graph "<output>/dependency-graph.json" \
--max-parallel 3 \
--out "<output>/waves.json"
# 3) (Optional) cross-check two scope lists for overlap — shared orchestrator helper
bash "${CLAUDE_PLUGIN_ROOT}/scripts/scope-conflict-check.sh" \
"<output>/stories/2.1.foo.story.md" "<output>/stories/2.2.bar.story.md"
然后使用 templates/parallelization-plan.template.md 将 waves.json 渲染为面向用户的计划,并将其写入 <output>/parallelization-plan.md。
分支与合并约定
- 每个故事使用一个分支:
story/{epic}.{story}-{slug}(每个分支对应一个工作树,彼此完全隔离)。 - 每个波次使用一个集成分支:
integration/wave-{N}。 - 波次内的合并顺序:按故事 ID 升序合并到
integration/wave-{N}。 - 波次中的所有故事合并后:进行集成审查检查点,然后创建 PR
integration/wave-{N}->main。波次 N+1 从已合并的main分支创建。
输出
<output>/parallelization-plan.md— 交付物。<output>/dependency-graph.json、<output>/waves.json— 可追溯性文件(可选)。- 在
<output>/decision-log.md中追加一行,注明maxParallel、波次数量,以及因缺少范围定义而延期的任何故事。
防护规则
- 不得在同一波次中安排两个拥有相交 Owned File/Module Scope 的故事。
- 不得将某个故事安排在其
depends_on的故事之前。 - 未声明范围的故事不具备参与波次的资格——请指出该问题,交由 scrum master 修正;不得自行编造路径。
- 遵守
maxParallel;开发工具会强制执行实际并发量,计划不得超出该值。 - 不得修改任何故事中的 Acceptance Criteria、Dev Notes 或 Testing——这些内容均已锁定。
有关波次算法、冲突类别和合并顺序的理由,请参阅 REFERENCE.md。
属于 BMAD Planning & Orchestrator 插件——这是一个基于 Claude Code 的脚手架,用于 BMAD Code Organization 制定的 BMAD Method(https://github.com/bmad-code-org/BMAD-METHOD)。它体现了
bmad-parallel-plan的理念。所有方法论均归功于 BMAD Code Organization。