sweep 是 bro 技能集中的一个策略型技能,所有实际机制都位于 bro CLI 中,该技能只定义使用策略。
【用途】 用于处理 bead 生命周期的“流出”阶段:已关闭的 bead 会永久累积,而单独使用 bd prune 会丢弃尚未被收割的经验。sweep 在清理之前加入“收割标记”门禁,确保经验先被提炼再被回收。适用场景包括:用户调用 /sweep、要求修剪或处置已关闭 bead、归档 bead 历史,或运行 harvest 流水线。
【主要能力】 门禁契约:一个已关闭的 bead 在带有 sweep:distilled 状态标签(通过 bd set-state <id> sweep=distilled 设置)时被视为已收割。该标记是门禁的唯一输入,没有启发式判断,也没有第二通道。
bro work sweep distill:以物化方式生成工作而非直接判断。被引用为 learn 证据的 bead 会自动标记;其余 bead 会作为 agent molecule 输出(每个 bead 一步,由 bro flow convoy run / bro fleet agents up 执行)。
bro work sweep run:当存在未收到且关闭时间超过 sweep.olderThanDays(默认 30 天)的 bead 时会拒绝执行。--force 是显式覆盖,拒绝本身就是特性,仅在确实打算清理时使用。没有 closed_at 的已关闭 bead 也会阻止运行:无法确定日期的行无法被证明安全。
【命令】
- bro work sweep status:只读,显示已收割/未收割计数、相对 olderThanDays 的年龄、将被清理的集合。
- bro work sweep distill [--dry-run]:自动标记被 learn 引用的 bead;其余生成 agent molecule。
- bro work sweep run [--dry-run] [--force] [--no-flatten]:门禁 → 归档 → 同步校验 → bd prune --older-than → bd flatten。
【流水线阶段(run)】
- 门禁:超过 olderThanDays 的未收割 bead 会阻止运行。
- 归档:bd export 导出 JSONL,并逐 bead 导出溯源日志(bd prune 会随 bead 删除溯源行,该导出是 bead→SHA/PR 绑定的唯一留存处)。
- 同步校验:归档必须提交到 refs/bro/data 并存在于 ref 树中,否则在修剪前停止。sweep.dir 必须位于同步集合内(.agents/ 或 debt 目录),其他位置会在 status 中警告并在 run 中拒绝。
- 修剪:bd prune --older-than <N>d --force。bd 的保护规则不变:pinned、open、ephemeral 以及被 open bead 引用的行会跳过。
- 压平:bd flatten 压缩 Dolt 历史并执行完整 GC(回收空间)。sweep.flatten: false 或 --no-flatten 可跳过。
【使用策略】 可将 bro work sweep run 接入循环的队列末尾或定时流程——门禁使无条件调用变得安全。BRO_SWEEP_DIR 可覆盖 sweep.dir,但需保持在 .agents/ 内,否则归档停止同步且 run 拒绝。记忆不会离开本地存储(bd export 不包含它们),归档仅含 issue 内容与溯源信息,无敏感数据。bd set-state 会为每次标记留下一个残留事件 bead,属于 ephemeral 类,不在 bd prune 范围内,这是可接受的,不是缺陷。
【限制】 具体命令行行为依赖 bro CLI 及 bd 工具链;未安装或未配置相应环境时无法使用。清理操作具有破坏性,误用 --force 或错误设置 sweep.dir 可能导致归档不同步或数据被提前修剪。