learn 是 bro CLI 中用于沉淀智能体知识的技能,它把一次会话中获得的经验固化为可跨会话复用的“课程”(lesson)。每一条课程由一个规则和一个触发条件组成:触发条件包括钩子事件以及上下文条件(术语、命令、路径、工具、错误等)。只有匹配键与当前上下文一致时,课程才会被注入;如果只指定 --on,则它会在所有配置的钩子事件上触发。注入量受每会话预算和 learn.maxInject 每个探测的上限限制。
课程存储在 bd kv 条目中,前缀为 learn/,并与 beads 存储同步。证据是必需项,用来指明课程从何而来,可以是 bead、PR、会话、命令或文本;置信度会根据证据推导:仅有单一证据时为 tentative,达到至少两条独立证据时升级为 established,或者在课程已经在一个真实关卡下得到验证时(例如它警告的 PR 以绿色合并,或它陈述的预防措施关闭了回顾),单一证据也可升级。
主要命令包括:add 存储手动课程(需要 --on 和至少一条 --evidence,两者均可重复);list 列出课程,可选 --json、--source、--confidence;show 以 JSON 输出单条课程;forget 删除课程;capture 从已完成的产物(drill 备忘录、retro beads、review 发现、mol 结果)中提炼课程,支持 --dry-run 先预览;probe 执行存储优先查询,命中时打印排序后的课程,未命中时打印候选并记录缺口,可通过 --lesson 存储提炼后的答案(需要触发条件或带可用术语的问题)。
使用策略方面,证据是必需的而非装饰性的:无法引用学习来源的课程不可存储。learn 用于带条件触发的知识,而 bd remember 用于无条件的上下文记忆——例如“仓库使用原生 TS”是记忆,会始终注入;“运行 gh pr merge 时清理债务”是课程,只在触发时触发。在重新调查之前先 probe:存储已回答过的问题可以免费短路,但命中只是排序猜测,共享术语可能带出无关课程,因此需确认它确实回答了问题。捕获应在产物关闭时进行,先 dry-run;重复捕获会合并证据并重新计算置信度,而不是重复。触发条件应能实际触发:人类驱动的触发优先使用 prompt-submit 术语,工作流触发优先使用 post-tool 命令/路径;除非重复是重点,否则预算保持为 1。如果同一错误反复触发同一课程,说明它应该被提升为规则,修复应落在技能、AGENTS.md 或规则文件中,而不是永远编辑课程。
前置条件:bro 在 PATH 中或使用 npx -y @broject/bro@0;需要 bd。适用场景包括:在会话中产生需要记住的 drill、retro、review 发现时;询问存储是否已知某问题时;以及需要把重复出现的错误转化为规则时。限制包括:课程必须提供证据;触发条件必须可触发;注入受预算限制;probe 命中需要人工确认是否相关。