Beads `bd mol` 分子工作流命令全指南:用 Proto 模板编排 Agent 的 DAG 任务

发布时间:2026/9/12 4:46:45
Beads `bd mol` 分子工作流命令全指南:用 Proto 模板编排 Agent 的 DAG 任务 Beadsbd mol分子工作流命令全指南用 Proto 模板编排 Agent 的 DAG 任务【免费下载链接】beadsBeads - A memory upgrade for your coding agent项目地址: https://gitcode.com/GitHub_Trending/beads1/beadsBeadsbd是一款为编码 Agent 提供记忆升级的开源命令行工具而bd mol是其核心的分子Molecule工作流引擎——它将化学隐喻Proto 模板、液态 mol、气态 wisp、键合、蒸馏引入任务编排让 Agent 能够从可复用的模板中批量生成真实 Issue 的 DAG有向无环图工作流。读完本文你将掌握bd mol全部 14 个命令的用法、相变语义、动态键合与变量替换机制并能基于公式formula文件搭建持久化功能开发与临时巡检/发布两套完整的 Agent 工作流。分子隐喻Proto、Molecule、Wisp 与相变模型bd mol的整套设计建立在一个自洽的化学隐喻之上见 cmd/bd/mol.go 中的术语表概念含义存储形态Proto原型未实例化的模板带template标签的 epic定义一份可复用的工作 DAG只读模板存放于molecules.jsonl目录Molecule分子由 Proto 孵化spawn出的真实 Issue 集合主数据库中的正式 Issue 树Wisp气态Ephemeraltrue的临时分子仅存本地、不随 git 同步主数据库的 wisp 表Mol液态Ephemeralfalse的持久分子存放在.beads/并随 git 同步主数据库正式 Issue 表Bond键合将 Proto 或分子组合成复合体compound依赖边dependencyDistill蒸馏从临时 epic 反向提取可复用的 Proto.formula.json文件相变路径贯穿整个生命周期Proto固态→ pour浇铸→ Mol液态、Proto固态→ wisp升华→ Wisp气态而squash凝华成 digest与burn彻底蒸发则构成气态的两种终态。从源码看MoleculeLabel直接复用了BeadsTemplateLabelcmd/bd/mol.go说明分子与模板在标签层面是同一套机制MoleculeSubgraph也仅是TemplateSubgraph的别名——分子的结构就是带工作流语义的模板图。命令总览与别名bd mol [flags]别名protomolecule致敬《苍穹浩瀚》The Expanse 的粉丝彩蛋见 cmd/bd/mol.go。bd mol的子命令共有 14 个命令用途相态语义show展示 Proto/分子结构与变量结构查看pour将 Proto 实例化为持久 mol液态固态 → 液态wisp将 Proto 实例化为临时 wisp气态固态 → 气态bond多态组合protoproto、protomol、molmol键合squash将分子压缩为 digest 摘要气态 → 凝华burn无痕销毁 wisp气态 → 蒸发distill从临时 epic 提取 Proto反向工程current/progress展示工作流当前位置 / 进度统计导航ready发现 gate 已关闭、可恢复的分子恢复调度stale检测已完成但仍未关闭的分子清理扫描last-activity查看分子最近活动时间戳健康监测seed校验公式可访问、可烹饪健康检查公式Formula与分子的分层加载bd mol的 Proto 既可以来自数据库中的模板也可以来自公式文件formula。使用bd formula list可以列出当前可用的公式。在 examples/formulas/release.formula.toml 中可以看到一个标准的发布工作流公式formula release description Standard release workflow: bump version, test, tag, publish. version 1 type workflow [vars.version] description Release version (e.g. 1.2.0) required true pattern ^\\d\\.\\d\\.\\d$ [[steps]] id bump-version title Bump version to {{version}} description Update version strings in source files and package manifests. [[steps]] id changelog title Update CHANGELOG needs [bump-version] description Add release notes for {{version}}. Summarize changes since last release.关键点公式中的{{version}}就是spawn 时被--var替换的变量占位符needs字段声明步骤间的依赖从而构成 DAG。分子目录molecules.jsonl的加载遵循分层优先级internal/molecules/molecules.go内置分子随二进制发布 城镇级$GT_ROOT/.beads/molecules.jsonl检测到 GT_ROOT 编排器时 用户级~/.beads/molecules.jsonl 项目级.beads/molecules.jsonl后加载的同 ID 分子覆盖先加载的。加载时每个条目都会被强制标记IsTemplatetrue并以mol-*命名空间批量写入跳过前缀校验且模板是只读的——对模板的变更会被拒绝。公式中的phase字段internal/formula/types.go用于推荐实例化相态vapor表示推荐用wisp此时若用pour会收到警告liquid表示推荐用pour。同结构中的pour字段则控制步骤是否物化为独立子 Issuetrue 时每步都是带依赖跟踪的数据库行适合发布等关键低频工作false 时仅创建根 Issue。pour浇铸持久化工作液态bd mol pour proto-id [flags]pour如同将熔融金属浇入模具从 Proto 创建持久化mol——它存于.beads/永久存储并随 git 同步。相变路径Proto固态→ pour → Mol液态。标志说明--assignee string将根 Issue 指派给指定 Agent/用户--attach stringsspawn 后附加的 Proto可重复--attach-type string附加的键合类型sequential/parallel/conditional默认 sequential--dry-run预览将要创建的内容--var stringArray变量替换keyvaluebd mol pour mol-feature --var nameauth # 持久化功能开发 bd mol pour mol-review --var pr123 # 持久化代码评审何时用 pour液态需要审计轨迹的持久工作——跨多个会话的功能实现、之后可能需要回溯的工作、任何值得留在 git 历史里的内容。从实现上看spawnMolecule最终调用cloneSubgraphcmd/bd/mol.go将Ephemeralfalse传入CloneOptions由模板子图克隆为真实 Issue 集合并支持自定义前缀默认bd-hobo。wisp升华临时工作气态bd mol wisp [proto-id] [flags]wisp创建Ephemeraltrue的临时分子存储在本地主数据库但不同步到 git通过dolt_ignore排除。相变路径Proto固态→ Wisp气态。标志说明--dry-run预览将要创建的内容--root-only仅创建根 Issue不创建子步骤 Issue--var stringArray变量替换keyvaluebd mol wisp beads-release --var version1.0 # 发布工作流一次性执行 bd mol wisp mol-my-workflow # 临时运维循环 bd mol wisp list # 列出所有 wisp bd mol wisp gc # 垃圾回收旧 wisp何时用 wisp气态无需审计价值的运维工作——发布工作流一次性执行、运维循环与周期性任务、健康检查与诊断。也可以直接bd create --ephemeral创建。子命令create / list / gcbd mol wisp的完整生命周期文档中给出创建bd mol wisp proto或bd create --ephemeral执行普通bd操作即可作用于 wisp Issue凝华bd mol squash id清除 Ephemeral 标志升级为持久或销毁bd mol burn id无痕删除不产生 digestbd mol wisp create升华固态→气态bd mol wisp create proto-id [flags]bd mol wisp create mol-patrol # 临时巡检循环 bd mol wisp create mol-health-check # 一次性健康检查 bd mol wisp create mol-diagnostics --var targetdb # 诊断运行bd mol wisp list列出当前上下文中的全部 wisp--all包含已关闭的--type可按 Issue 类型过滤如 agent、task、patrol。输出包含 ID、标题、状态open/in_progress/closed、创建时间、更新时间。超过 24 小时未更新的视为旧 wisp。bd mol wisp gc垃圾回收bd mol wisp gc [flags]标志说明--age string遗弃 wisp 的年龄阈值默认1h--all同时清理超过阈值但已关闭的 wisp--closed删除所有已关闭的 wisp忽略 --age 阈值--dry-run预览将被清理的内容--exclude-type strings排除指定类型的 wisp逗号分隔如agent,rig-f, --force实际删除默认仅预览bd mol wisp gc # 清理遗弃 wisp默认 1h 阈值 bd mol wisp gc --age 24h # 自定义年龄阈值 bd mol wisp gc --closed --force # 删除所有已关闭的 wisp bd mol wisp gc --closed --force --exclude-type mol # 除 mol 类型外全部删除gc 基于时间做清理适合临时 wisp若要检测因阻塞其他工作而产生的图压力式陈旧应使用bd mol stale。注意被 gc 的 wisp 不会生成 digest若想保留摘要请先bd mol squash。bond多态键合与复合分子bd mol bond A B [flags]别名fart又一个彩蛋分子可以产生气体见 cmd/bd/mol_bond.go。bond是多态操作依据操作数类型走不同的组合路径cmd/bd/mol_bond.go 中的 switch 分支操作数组合结果formula formula两者先 cook产出复合 Protoformula protocook 公式产出复合 Protoformula molcook 公式spawn 后附加到分子proto proto复合 Proto可复用模板proto molspawn Proto 并附加到分子mol protospawn Proto 并附加到分子mol mol合并为复合分子公式名如mol-polecat-arm会被内联 cook 为临时 Proto无需在数据库中预存 cook 好的 proto 珠子cmd/bd/mol_bond.go。键合类型类型语义底层依赖边sequential默认B 在 A 完成后运行DepBlocksparallelB 与 A 并行DepParentChild组织性无阻塞conditional仅当 A 失败时 B 运行DepConditionalBlocks这些常量定义在 internal/types/types.goBondTypeSequential sequential、BondTypeParallel parallel、BondTypeConditional conditional、BondTypeRoot root。从实现看compound proto 会创建一个带MoleculeLabel的复合根 Issue其BondedFrom字段记录来源与键合类型并通过AddDependency建立父子与阻塞依赖molmol合并前还会执行wouldCreateCycle的 BFS 环检测GH#2719防止产生传递性依赖环。相态控制与动态键合默认相态跟随目标附加到持久 molEphemeralfalse→ spawn 为持久附加到临时 wispEphemeraltrue→ spawn 为临时。可用两个标志强制覆盖--pour强制 spawn 为液态持久Ephemeralfalse--ephemeral强制 spawn 为气态临时Ephemeraltrue通过 dolt_ignore 排除在 Dolt 同步之外动态键合圣诞挂饰模式 Christmas Ornament pattern使用--ref指定带变量替换的自定义子引用生成parent.child-ref形式的可读 ID取代随机哈希bd mol bond mol-worker-arm bd-patrol --ref arm-{{worker_name}} --var worker_nameace # 生成bd-patrol.arm-ace及其子节点如 bd-patrol.arm-ace.capture完整标志表标志说明--as string复合 Proto 的自定义标题仅 protoproto--dry-run预览将要创建的内容--ephemeral强制 spawn 为气态Ephemeraltrue--pour强制 spawn 为液态Ephemeralfalse--ref string自定义子引用支持{{var}}替换如arm-{{polecat_name}}--type string键合类型sequential/parallel/conditional默认 sequential--var stringArrayspawn 的 Proto 变量替换keyvalue注意--ephemeral与--pour互斥cmd/bd/mol_bond.go且键合类型必须是三者之一。典型场景bd mol bond mol-feature mol-deploy # 复合 Proto bd mol bond mol-feature mol-deploy --type parallel # 并行执行 bd mol bond mol-feature bd-abc123 # 附加 Proto 到分子 bd mol bond bd-abc123 bd-def456 # 合并两个分子 bd mol bond mol-critical-bug wisp-patrol --pour # 巡检中发现重要 bug → 持久化 bd mol bond mol-temp-check bd-feature --ephemeral # 持久功能上的临时诊断 bd mol bond mol-arm bd-patrol --ref arm-{{name}} --var nameace # 动态子 IDshow查看分子结构与并行分析bd mol show molecule-id [flags]-p, --parallel 显示并行步骤分析普通模式输出分子的标题、ID、步骤数、变量{{var}}列表与树状结构对复合分子还会展示Bonded from:键合谱系每个来源 ID 及其键合类型conditional显示为on-failure。--parallel模式-p会做完整的并行性分析cmd/bd/mol_show.go就绪步骤无未关闭阻塞依赖、可直接启动的步骤并行组同一阻塞深度、互不阻塞的步骤聚合为group-N可并发执行每个步骤标注ready/blocked/in_progress/completed并列出needs:阻塞它的步骤bd mol show bd-patrol --parallel实现上analyzeMoleculeParallel会处理DepBlocks、DepConditionalBlocks以及带 metadata 的DepWaitsForgate 依赖含 any/all children 语义并递归计算阻塞深度来划分并行组。current定位你在工作流中的位置bd mol current [molecule-id] [flags]--for string 显示指定 Agent/负责人的分子 --limit int 最大显示步骤数0 自动超过阈值显示摘要 --range string 显示指定步骤区间如 1-50、100-150带molecule-id时显示该分子的状态不带时从当前 Agent 名下的 in_progress Issue推断找不到则回退到 hooked 分子的 blocks 依赖见 cmd/bd/mol_current.go。输出中每一步带状态指示指示含义[done]步骤已完成closed[current]步骤进行中in_progress你在这里[ready]步骤可启动未被阻塞[blocked]步骤被依赖阻塞[pending]步骤等待中大分子100 步自动显示摘要阈值常量LargeMoleculeThreshold 100cmd/bd/mol_current.go并提示改用分页视图bd mol current id --limit 50 # 显示前 50 步 bd mol current id --range 100-150 # 显示第 100-150 步current还会给出下一步建议bd update step-id --claim认领就绪步骤。配套的AdvanceToNextStep机制cmd/bd/mol_current.go支持关闭一个步骤后自动推进到下一个就绪步骤autoClaim时通过ClaimStepIfOpen的乐观并发控制防止多 Agent 抢占同一步骤TOCTOU 防护并且分子全部完成后会提示bd mol squash。progress高效进度统计bd mol progress [molecule-id] [flags]progress使用索引查询统计进度无需加载全部步骤适合百万级步骤的超大分子cmd/bd/mol_port.go 中的GetMoleculeProgress仅遍历直接子节点计数。不传 ID 时显示你正在处理的所有分子的进度。输出包含Progress已完成 / 总数百分比Current step进行中的步骤如有Rate基于关闭时间的步骤数/小时ETA预计完成时间bd mol progress bd-hanoi-xyzsquash凝华为 digest 摘要bd mol squash molecule-id [flags]--dry-run 预览将要被压缩的内容 --keep-children 压缩后不删除临时子节点 --summary string Agent 提供的摘要绕过自动生成squash将分子所有临时子 IssueEphemeraltrue压缩为单个持久 digest Issue并默认删除或--keep-children保留子 wisp。操作序列cmd/bd/mol_squash.go加载分子及其全部子节点仅筛选 wispEphemeraltrue生成 digest工作摘要创建永久 digest IssueEphemeralfalseStatusclosed清除子节点 Wisp 标志提升为持久或删除它们若根节点本身是 wisp则自动关闭根节点并清除其 ephemeral 标志WispSquashtrueAgent 集成--summary允许调用方 Agent编排器 worker、Claude Code 等提供 AI 生成的智能摘要让bd保持为纯工具不带--summary时使用子 Issue 内容的简单拼接generateDigest生成 Molecule Execution Summary含完成统计、每步状态、描述前 200 字符与关闭原因。bd mol squash bd-abc123 # 压缩并提升子节点 bd mol squash bd-abc123 --dry-run # 预览 bd mol squash bd-abc123 --keep-children # 保留 wisp bd mol squash bd-abc123 --summary Agent-generated summary of work done这正是 wisp 工作流的收尾spawn 创建 wisp → 执行 → squash 将痕迹压缩为结果digest。burn无痕销毁分子bd mol burn molecule-id [molecule-id...] [flags]--dry-run 预览将被删除的内容 --force 跳过确认提示与 squash删除前创建永久 digest不同burn彻底删除、不留痕迹cmd/bd/mol_burn.go。适用场景被遗弃的巡检循环崩溃或失败的工作流不想保留的测试/调试分子删除方式依相态而异cmd/bd/mol_burn.gowisp临时→ 直接删除mol持久→ 级联删除同步到远端。wisp 的批量删除在单个事务内原子完成任一步失败即回滚防止部分删除持久分子则逐个加载子图后批量删除。bd mol burn bd-abc123 # 无痕删除分子 bd mol burn bd-abc123 --dry-run # 预览 bd mol burn bd-abc123 --force # 跳过确认 bd mol burn bd-a1 bd-b2 bd-c3 # 批量删除多个 wisp⚠️CAUTION这是破坏性操作分子数据将永久丢失。想保留摘要请改用bd mol squash。distill从临时 epic 反向提取公式bd mol distill epic-id [formula-name] [flags]--dry-run 预览将要创建的内容 --output string 公式文件的输出目录 --var stringArray 用 {{variable}} 占位符替换具体值variablevaluedistill是pour的逆操作molecule → formula而非 formula → molecule。流程docs/cli-reference/mol.md 与源码注释一致加载现有 epic 及其全部子节点 → 将结构转换为.formula.json文件 → 通过--var将具体值替换为{{variable}}占位符。典型场景团队自然生长出好的工作流并想复用、把隐性知识固化为可执行模板、为类似未来工作创建起点。变量语法两种写法均支持工具会自动检测哪边是具体值--var branchfeature-auth # Spawn 风格variablevalue推荐 --var feature-authbranch # 替换风格valuevariable输出位置首个可写者优先resolved-beads-dir/formulas/项目级默认checkout-root/.beads/formulas/仓库本地公式~/.beads/formulas/用户级项目不可写时bd mol distill bd-o5xe my-workflow bd mol distill bd-abc release-workflow --var feature_nameauth-refactorready / stale / last-activity / seed调度与健康监测bd mol ready --gated—— 发现可恢复分子bd mol ready --gated [flags]发现等待在 gate 步骤处的分子满足以下全部条件docs/cli-reference/mol.md分子有 gate bead 阻塞某步骤gate bead 现已关闭条件满足被阻塞的步骤现在可以继续当前没有任何 Agent hook 住该分子这实现了无需显式 waiter 追踪的发现式恢复——patrol 系统正是用它来发现并派发 gate-ready 分子bd mol ready --gated # 找出所有 gate-ready 分子 bd mol ready --gated --json # JSON 输出供自动化使用bd mol stale—— 检测已完工但未关闭的分子bd mol stale [flags]--all 包含 0 个子节点的分子 --blocking 仅显示阻塞其他工作的分子 --unassigned 仅显示未指派的分子分子判定为 stale 的条件docs/cli-reference/mol.md所有子节点均已关闭Completed Total根 Issue 仍为打开状态可选--unassigned未指派给任何人可选--blocking正在阻塞其他工作bd mol stale # 列出所有 stale 分子 bd mol stale --json # 机器可读输出 bd mol stale --blocking # 仅显示阻塞其他工作的 bd mol stale --unassigned # 仅显示未指派的 bd mol stale --all # 包含 0 子节点的分子bd mol last-activity—— 最近活动时间戳bd mol last-activity molecule-id [flags]返回分子中任何步骤最近一次变更的时间戳用于快速发现停滞或卡死的分子。活动来源cmd/bd/mol_port.go来源含义step_closed某步骤被关闭step_updated某步骤被更新认领、编辑等molecule_updated分子根节点本身被更新bd mol last-activity hq-wisp-0laki bd mol last-activity hq-wisp-0laki --json实现上比较所有子节点的UpdatedAt与ClosedAt取最新值并标注来源若无子节点则回退为根节点的molecule_updated。bd mol seed—— 校验公式可烹饪bd mol seed formula-name [flags]--var stringArray 用于条件过滤的变量替换keyvalueseed检查公式搜索路径确保公式存在且可加载——在尝试从公式 spawn 工作前做系统健康验证。公式搜索路径按序检查resolved-beads-dir/formulas/当前活动项目checkout-root/.beads/formulas/仓库本地公式~/.beads/formulas/用户级$GT_ROOT/.beads/formulas/共享工作区根若设置了 GT_ROOTbd mol seed mol-feature # 校验特定公式 bd mol seed mol-review --var nametest # 带变量替换校验综合实战一条完整的分子工作流把上述命令串成 Agent 可落地的端到端流程1. 准备工作用bd formula list确认公式可见bd mol seed mol-feature校验可烹饪。2. 选择相态并孵化bd mol pour mol-feature --var nameauth # 持久功能开发跨会话、要审计轨迹 bd mol wisp beads-release --var version1.0 # 临时发布一次性、无审计价值3. 执行期间导航bd mol current查看当前位置与[ready]步骤bd update step-id --claim认领bd mol show bd-patrol --parallel找出可并行执行的步骤组。4. 动态组合巡检中发现重要 bug用--pour键合为持久需要临时诊断用--ephemeral需要可读 ID 用--refbd mol bond mol-critical-bug wisp-patrol --pour bd mol bond mol-temp-check bd-feature --ephemeral bd mol bond mol-arm bd-patrol --ref arm-{{name}} --var nameace5. 收尾wisp 完成后用bd mol squash id --summary ...凝华为 digestAgent 提供摘要确定无价值的用bd mol burn id --force无痕销毁用bd mol wisp gc --closed --force回收 wisp 膨胀。6. 沉淀复用团队自然跑出好流程后bd mol distill epic-id my-workflow把隐性知识固化为公式文件。7. 运维巡检bd mol ready --gated发现可恢复的 gate 分子bd mol stale清理已完成未关闭的分子bd mol last-activity监控卡死工作流。相关资源命令入口与术语 cmd/bd/mol.go分子目录分层加载 internal/molecules/molecules.go键合实现与环检测 cmd/bd/mol_bond.go键合类型常量 internal/types/types.go公式 Schemaphase/pour 字段 internal/formula/types.go公式示例 examples/formulas/release.formula.toml集成测试嵌入式/代理服务器双模式 cmd/bd/mol_embedded_test.go、cmd/bd/mol_proxied_server.go【免费下载链接】beadsBeads - A memory upgrade for your coding agent项目地址: https://gitcode.com/GitHub_Trending/beads1/beads创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考