news 2026/9/13 18:38:28

Beads 边界指南:AI Agent 何时使用 bd 持久化 Issue 跟踪,何时使用 TodoWrite

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Beads 边界指南:AI Agent 何时使用 bd 持久化 Issue 跟踪,何时使用 TodoWrite

Beads 边界指南:AI Agent 何时使用 bd 持久化 Issue 跟踪,何时使用 TodoWrite

【免费下载链接】beadsBeads - A memory upgrade for your coding agent项目地址: https://gitcode.com/GitHub_Trending/beads1/beads

导读

本文是 Beads 项目为编码 Agent 提供的一份操作性决策参考,核心回答一个问题:一项任务到底该交给 bd(基于 Dolt 的持久化 issue 跟踪)管理,还是放进会话内的 TodoWrite 清单?两者并非竞争关系,而是服务于不同时间尺度与复杂度的工作。读完本文,你将掌握一套可立即执行的判定启发式(2 周测试、转换信号、决策矩阵),理解 bd 与 TodoWrite 的互补集成模式,并能在真实工作流中识别"复杂性涌现"的转换时刻,避免最常见的六类误用。本文同时结合仓库源码与技能包文件,给出每条结论的实现级依据。

核心问题:你会不会在两周后回来继续?

BOUNDARIES.md 给出的判定起点是一个极其简洁的问题:

"Could I resume this work after 2 weeks away?"(离开两周后,我还能接续这项工作吗?)

  • 如果 bd 能帮你恢复上下文 →用 bd
  • 如果"扫一眼 Markdown 就能接上" →TodoWrite 就够了

这个启发式抓住了两者的本质差异:bd 提供跨长时间间隔依然存活的、结构化的上下文(依赖图、设计记录、验收标准、完整历史),而 TodoWrite 擅长的是即时会话内的进度跟踪。它是后面所有决策矩阵、转换信号与常见错误分析的总纲。

决策矩阵:什么工作归 bd,什么工作归 TodoWrite

用 bd 的场景(五类)

1. 跨会话工作(Multi-Session Work)

跨越多次压缩周期(compaction)或数天、需要上下文持续存活的任何工作。

典型例子:

  • 需要跨多次会话调研的战略性文档开发
  • 拆分在多个编码会话中的功能实现
  • 需要长时间实验的 Bug 调查
  • 经过多轮迭代演进的架构设计

为什么 bd 胜出:issue 捕获的上下文能挺过压缩。数周后回来,完整历史、设计决策与当前状态都在。这是 bd 作为"项目记忆"的根本价值——参见 SKILL.md 对 bd 的定义:"Dolt-powered issue tracker for multi-session work with dependencies and persistent memory across conversation compaction"。

2. 复杂依赖(Complex Dependencies)

存在阻塞项(blockers)、前置条件或层级结构的工作。

典型例子:

  • OAuth 集成,需要数据库搭建、端点创建、前端改动三者配合
  • 有多个并行调研线索的研究项目
  • 不同代码区域之间存在依赖的重构
  • 需要按特定顺序执行的迁移

为什么 bd 胜出:依赖图自动展示"谁在阻塞谁"。bd ready自动暴露无阻塞的待办工作,无需人工维护。在源码层面,这一机制由 issueops/reader_ready_scope.go 中的ValidateReadyFlagScope与 issueops/readyclaimer.go 中的ReadyClaimer角色共同支撑——bd ready只列"没有被未关闭的 blocks 依赖阻塞"的 issue,且bd ready --claim将"选择 + 原子认领 + 结果水合"放进同一事务,避免多 Agent 并发抢工时拿到同一份工作。

3. 知识型工作(Knowledge Work)

边界模糊、需要探索或战略思考的任务。

典型例子:

  • 需要调研框架与权衡取舍的架构决策
  • 需要比较多个选项的 API 设计
  • 需要测量与实验的性能优化
  • 需要理解系统架构的文档编写

为什么 bd 胜出designacceptance_criteria字段能承载不断演化的理解,探索过程中获得的新信息可以持续修订 issue。design记录"HOW(怎么构建)",acceptance_criteria记录"WHAT(成功长什么样)",两者分离的设计正是为这类"边做边明晰"的工作准备的——详见 ISSUE_CREATION.md。

4. 支线任务(Side Quests)

可能打断主任务的探索性工作。

典型例子:

  • 做功能时发现一个值得探索的更优模式
  • 调试时注意到相关的架构问题
  • 代码评审时识别出潜在改进点
  • 写测试时发现需要调研的边界用例

为什么 bd 胜出:用discovered-from依赖创建 issue,可以安全暂停主线工作,两条线索的上下文都被保留,之后随时可恢复任意一条。这正是 PATTERNS.md 中"Side Quest Handling"模式的核心:发现即创建(bd create "Found: ...")、链接溯源(bd dep add <new> <main> --type discovered-from)、评估阻断性,再决定是阻塞主线还是记入 design 字段继续主线。

5. 项目记忆(Project Memory)

经过较长时间后需要带着完整上下文恢复工作。

典型例子:

  • 跨度数月的开源贡献
  • 时间表不规律、间隔工作的兼职项目
  • 跨多个 Sprint 拆分的复杂功能
  • 长调研周期的研究项目

为什么 bd 胜出:Dolt 支撑的数据库可以无限期持久化,所有上下文、决策与历史在恢复时全部可用,不依赖对话回滚(scrollback)或散落的 Markdown 文件。BOUNDARIES.md 明确将"对话回滚或 markdown 文件"列为不可靠的上下文来源。

用 TodoWrite 的场景(四类)

1. 单会话任务(Single-Session Tasks)

当前对话内即可完成的工作。

典型例子:

  • 基于清晰规格实现单个函数
  • 修复根因已知的 Bug
  • 为既有代码补充单元测试
  • 更新近期改动的文档

为什么 TodoWrite 胜出:简单清单适合线性执行,无需持久化与依赖管理,会话内即可明确完成。

2. 线性执行(Linear Execution)

无分支的直白逐步任务。

典型例子:

  • 有清晰顺序的数据库迁移
  • 部署检查清单
  • 跨文件代码风格清理
  • 按升级指南进行的依赖更新

为什么 TodoWrite 胜出:步骤预定且顺序执行,没有探索、没有阻塞项、没有支线任务,自上而下执行即可。

3. 即时上下文(Immediate Context)

所有信息已经在对话里。

典型例子:

  • 用户给出完整规格并要求实现
  • 附带复现步骤与修复思路的 Bug 报告
  • 有清晰 before/after 蓝图的重构请求
  • 基于用户偏好的配置变更

为什么 TodoWrite 胜出:没有需要追踪的外部上下文,对话已包含一切,TodoWrite 只提供用户可见性。

4. 简单跟踪(Simple Tracking)

只需要一个清单向用户展示进度。

典型例子:

  • 把实现拆成可见步骤
  • 展示验证流程进度
  • 展示系统化方法
  • 让用户放心工作正在推进

为什么 TodoWrite 胜出:用户想看到思考与进度,TodoWrite 在对话中可见,而 bd 是"后台不可见的结构"。

详细对比表

维度bdTodoWrite
持久化Dolt 支撑,能挺过压缩仅会话内,对话结束即丢失
依赖图结构,自动 ready 检测手动,无自动跟踪
可发现性bd ready自动暴露待办在对话里翻找 todos
复杂度支持嵌套 epic、阻塞项仅扁平列表
可见性后台结构,不在对话中对话中对用户可见
初始化需要项目内有.beads/目录始终可用
最适合复杂、多会话、探索型简单、单会话、线型
上下文捕获设计笔记、验收标准、链接仅任务描述
演化issue 可随理解持续更新、细化写定即静止
审计轨迹完整变更历史仅对话中可见

关于初始化:SKILL.md 指出 bd 需要bd init初始化(由人类执行,而非 Agent),且 Git 仓库是可选前置——可用BEADS_DIR环境变量配合--stealth标志实现免 Git 运行。TodoWrite 则无需任何前置。

三种集成模式:bd 与 TodoWrite 协同作战

BOUNDARIES.md 强调:bd 与 TodoWrite 可以在同一会话中有效共存,应有策略地两者并用。

模式一:bd 管战略,TodoWrite 管战术

结构:bd 跟踪高层 issue 与依赖关系,TodoWrite 跟踪当前会话的执行步骤。

示例

bd issue: "Implement user authentication" (epic) ├─ Child issue: "Create login endpoint" ├─ Child issue: "Add JWT token validation" ← 当前正在做 └─ Child issue: "Implement logout" TodoWrite (for JWT validation): - [ ] Install JWT library - [ ] Create token validation middleware - [ ] Add tests for token expiry - [ ] Update API documentation

适用时机

  • 有清晰实现步骤的复杂功能
  • 用户想看到当前进度,但存在更大的上下文
  • 多会话工作正处于单会话执行阶段

模式二:TodoWrite 作为 bd 的工作副本

结构:先从包含完整上下文的 bd issue 开始,把验收标准提取为 TodoWrite 清单,逐项完成后回写 bd。

示例

会话开始: - 检查 bd:"issue-auth-42: Add JWT token validation" 是否 ready - 把验收标准提取进 TodoWrite - 将 bd issue 标记为 in_progress - 逐项完成 TodoWrite - 边做边更新 bd design notes - TodoWrite 全部完成后,关闭 bd issue

适用时机

  • bd issue 已 ready 但执行本身是线性的
  • 用户想要可见的进度跟踪
  • 需要结构化方式处理较大的 issue

模式三:会话中途转换

从 TodoWrite 转到 bd(更常见)——执行中意识到工作比预期复杂:

触发信号

  • 发现了阻塞项或依赖
  • 意识到本会话无法完成
  • 遇到支线任务或相关问题
  • 需要暂停并在以后恢复

转换步骤

1. 用当前 TodoWrite 内容创建 bd issue 2. 备注:"Discovered this is multi-session work during implementation" 3. 边发现边补充依赖 4. 保留 TodoWrite 供当前会话使用 5. 会话结束前更新 bd issue 6. 下一会话:从 bd 恢复,需要时新建 TodoWrite

从 bd 转到 TodoWrite(较少见)——bd issue 实际比预期简单:

触发信号

  • 所有上下文已清晰
  • 未发现依赖
  • 会话内可完成
  • 用户想要执行可见性

转换步骤

1. 保留 bd issue 作为历史记录 2. 从 issue 描述创建 TodoWrite 3. 用 TodoWrite 执行 4. 完成后关闭 bd issue 5. 备注:"Completed in single session, simpler than expected"

真实案例剖析

案例一:数据库迁移规划(用 bd)

场景:为生产应用规划从 MySQL 迁移到 PostgreSQL。

为什么用 bd

  • 跨数天/数周的会话工作
  • 边界模糊——范围随调研浮现
  • 支线任务——发现 schema 不兼容需要重构
  • 依赖——schema 验证通过前无法迁移数据
  • 项目记忆——中断后需要恢复

bd 结构

db-epic: "Migrate production database to PostgreSQL" ├─ db-1: "Audit current MySQL schema and queries" ├─ db-2: "Research PostgreSQL equivalents for MySQL features" (blocks schema design) ├─ db-3: "Design PostgreSQL schema with type mappings" └─ db-4: "Create migration scripts and test data integrity" (blocked by db-3)

TodoWrite 的角色:最初不需要。迁移脚本就绪后,单会话测试冲刺阶段才可能用到。

案例二:简单功能实现(用 TodoWrite)

场景:基于清晰规格给现有端点添加日志。

为什么用 TodoWrite:单会话、线性执行(加 import、调 logger、加测试)、所有上下文在用户消息里、对话内即可完成。

TodoWrite

- [ ] Import logging library - [ ] Add log statements to endpoint - [ ] Add test for log output - [ ] Run tests

bd 的角色:无。对这种直白任务用 bd 属于杀鸡用牛刀。

案例三:Bug 调查(先 TodoWrite,后转 bd)

初始评估:看似简单,先用 TodoWrite。

TodoWrite

- [ ] Reproduce bug - [ ] Identify root cause - [ ] Implement fix - [ ] Add regression test

实际发生的事:复现发现是间歇性 Bug,根因调查暴露出多个潜在问题,需要时间调查。

转换到 bd

创建 bd issue: "Fix intermittent auth failure in production" - 描述:起初看似简单,复现表明是复杂竞态条件 - 设计:识别出三个潜在原因,需要逐一测试 - 为每个假设创建带 discovered-from 依赖的 issue 暂停一天,下一会话从 bd 上下文恢复

案例四:带依赖的重构(用 bd)

场景:从三个控制器提取公共验证逻辑。

为什么用 bd

  • 依赖——必须先提取,才能修改调用方
  • 多文件改动需要协调
  • 潜在支线任务——提取过程中可能发现更好的模式
  • 需要跟踪哪些控制器已更新

bd 结构

refactor-1: "Create shared validation module" → blocks refactor-2, refactor-3, refactor-4 refactor-2: "Update auth controller to use shared validation" refactor-3: "Update user controller to use shared validation" refactor-4: "Update payment controller to use shared validation"

TodoWrite 的角色:可以在逐个实现控制器更新时使用。

为什么有效:bd 确保你不会漏掉某个控制器。bd ready显示下一项可做工作,blocks 依赖防止提取完成前就启动控制器更新。

六类常见错误与对策

错误一:把多会话工作交给 TodoWrite

后果:下一会话忘记已做内容、翻对话历史重建上下文、丢失实现期间做出的设计决策、推倒重来或重复劳动。对策:改用 bd issue,让上下文跨会话持久化。

错误二:用 bd 处理简单线性任务

后果:创建 issue 的开销不划算、用户看不到对话内进度、无谓的工具调用。对策:用 TodoWrite,它正是为此设计的。

错误三:复杂性涌现时不转换

后果:用 TodoWrite 开始"简单"任务、中途发现阻塞项与依赖、明知不合适仍坚持用 TodoWrite、对话结束时丢失上下文。对策:出现复杂度信号就转换到 bd。会话中途转换不算晚。

错误四:创建过多 bd issue

后果:每件小事都建 issue、数据库被琐碎条目塞满、bd ready里难以找到真正有意义的工作。对策:只为真正受益于持久化的建 issue,使用"2 周测试"——两周后 bd 能否帮你恢复?不能就跳过。

错误五:因为熟悉 TodoWrite 而从不使用 bd

后果:多会话项目变成 Markdown 沼泽、丢失依赖与阻塞项跟踪、无法有效恢复工作、留下烂尾的半成品计划。对策:强制自己在下一个多会话项目上用 bd,体会组织性与可恢复性的差别。

错误六:创建 issue 前总是询问(或从不询问)

可直接创建(无需问用户):

  • Bug 报告:范围清晰、问题具体("Found: auth doesn't check profile permissions")
  • 研究任务:调查性工作("Research workaround for Slides export")
  • 技术 TODO:实现中发现("Add validation to form handler")
  • 支线捕获:需要跟踪的发现("Issue: MCP can't read Shared Drive files")

为什么可直接创建:询问会拖慢发现捕获的节奏,用户期望对清晰问题主动创建 issue。

应先询问用户

  • 战略工作:边界模糊、存在多种可行方案("Should we implement X or Y pattern?")
  • 潜在重复:可能与现有工作重叠
  • 大型 epic:多方案、范围不清("Plan migration strategy")
  • 重大范围变更:改变现有 issue 的方向

为什么先询问:确保模糊工作方向一致、防止重复劳动、投入前澄清范围。

经验法则:能一句话写出清晰具体的 issue 标题与描述 → 直接创建;需要用户输入才能澄清 → 先问。

示例

  • ✅ 直接创建:"workspace MCP: Google Doc → .docx export fails with UTF-8 encoding error"
  • ✅ 直接创建:"Research: Workarounds for reading Google Slides from Shared Drives"
  • ❓ 先询问:"Should we refactor the auth system now or later?"(战略决策)
  • ❓ 先询问:"I found several data validation issues, should I file them all?"(可能过多)

转换点:识别"复杂性涌现"的瞬间

大多数工作从一个隐含的心理模型开始:

"这看起来很简单"→ TodoWrite

随着工作推进

依旧简单→ 继续 TodoWrite,会话内完成

⚠️复杂性涌现→ 转换到 bd,保存上下文

这门手艺的关键在于识别转换点,典型的转换信号:

  • "这比预期耗时更长"
  • "我发现了一个阻塞项"
  • "这需要更多调研"
  • "我应该先暂停这个,去调查 X"
  • "用户今天可能无法继续"
  • "做这件事时我发现了三个相关问题"

一旦注意到这些信号:立即创建 bd issue、保存上下文、从结构化基础继续工作。

总结启发式:快速决策指南

时间尺度

  • 同一会话 → TodoWrite
  • 多个会话 → bd

依赖结构

  • 线性步骤 → TodoWrite
  • 有阻塞项/前置条件 → bd

范围清晰度

  • 定义明确 → TodoWrite
  • 探索型 → bd

上下文复杂度

  • 对话里应有尽有 → TodoWrite
  • 需要外部上下文 → bd

用户交互

  • 用户盯着进度 → TodoWrite(对话中可见)
  • 后台工作 → bd(不可见的结构)

恢复难度

  • 扫 Markdown 就能接上 → TodoWrite
  • 需要结构化历史 → bd

不确定时:用2 周测试。如果离开两周后没有 bd 你就难以接续,就用 bd。

实践落地:把启发式接入真实会话

BOUNDARIES.md 是 bd 技能包(位于 plugins/beads/skills/beads/)的决策层,与技能包中的操作层配套使用:

  • 工作发现bd ready找出无阻塞的待办,向用户呈现 issue ID、标题、优先级与类型——命令语义见 ready.md;无 ready 任务时建议查看blockedissue 或用create新建。
  • 问题创建bd create "<title>" -t <type> -p <priority>,type 支持 bug/feature/task/epic/chore/decision,priority 取值 0-4(0=critical,4=backlog),并可选择性关联依赖——见 create.md。
  • 依赖建模bd dep add <from> <to> --type blocks|related|parent-child|discovered-from,其中只有blocks影响bd ready的结果——四种依赖类型的完整语义与决策树见 DEPENDENCIES.md。
  • 上下文保鲜:把可工作的代码、API 响应样例、输出格式示例与调研背景写进 notes 字段(IMPLEMENTATION GUIDE 模式),让两周后的自己或全新 Agent 实例无需重新发现一切——模板见 RESUMABILITY.md。
  • 会话恢复:压缩后先用bd list --status in_progress --json找回在途工作,再bd show <id> --long取全量上下文(见 SKILL.md 的 Session Protocol)。

简而言之:TodoWrite 负责"此刻正在做什么",bd 负责"这件事从何而来、被什么阻塞、两周后如何接续"。把边界画清楚,Agent 的长时程工作才能既对用户透明,又对压缩免疫。

【免费下载链接】beadsBeads - A memory upgrade for your coding agent项目地址: https://gitcode.com/GitHub_Trending/beads1/beads

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 18:36:54

SIMT数据依赖与并行前缀和:从原理到流压缩实战

做 GPU 编程的人&#xff0c;几乎都会在某个版本里撞上同一堵墙&#xff1a;明明我的 kernel 逻辑很顺&#xff0c;可跑出来结果就是不对&#xff0c;或者偶尔对、偶尔错。把代码翻来覆去找半天&#xff0c;最后发现是数据依赖在作祟。这个问题的本质&#xff0c;跟 SIMT&#…

作者头像 李华
网站建设 2026/9/13 18:36:30

多实例并发下的Redis分布式锁:从setnx到Redisson的完整实践

去年接手过一个订单支付系统&#xff0c;流量一上来就出问题&#xff1a;同一笔订单被两个实例同时处理&#xff0c;结果产生了多次扣款&#xff0c;用户投诉直接炸群。排查到最后&#xff0c;根子就落在“多实例并发访问共享资源”这件事上——当时用的那套所谓分布式锁&#…

作者头像 李华