名称: learner 描述: 从当前会话中提取来之不易的原则并保存为可重复使用的学习技能。 参数提示: “[–from-session | --from-diff | <topic>]” 允许工具: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion 禁用模型调用: true
学习者 — 提取来之不易的原则
从当前工作中捕获非显而易见、上下文特定的洞察,并将其保存为可重复使用的技能文件,以便Maestro可以在未来会话中注入。
参数
--from-session— 分析当前会话以获取学习内容(默认)--from-diff— 分析最近的git差异以查找模式<topic>— 提取关于特定主题的学习内容
硬性规则
- 质量优于数量:一个优秀的原则胜过十个平庸的。
- 无代码片段:捕获为什么和何时,而不是代码块。如果需要代码,那是一个模式,而不是一个学习。
- 验证唯一性:在保存重复项之前检查现有的
.claude/skills/learned/。
质量门
每个提取的原则必须通过所有四个门:
| 门 | 问题 | 失败示例 |
|---|---|---|
| 非可谷歌的 | 开发者会在文档/Stack Overflow中找到这个吗? | “使用async/await处理承诺” |
| 上下文特定的 | 这是否特定于这个项目或领域? | “始终验证输入”(太泛化) |
| 可操作的 | 有人可以立即采取行动吗? | “系统很复杂”(观察,不是行动) |
| 来之不易的 | 这个发现是否花费了时间/调试? | “TypeScript有接口”(琐碎) |
工作流程
步骤1:收集证据
基于参数:
--from-session(默认):
- 检查会话历史中的:修正、调试会话、意外行为、变通方法
- 查找假设错误的时刻
--from-diff:
- 运行
git diff HEAD~5..HEAD(或适当范围) - 识别更改中的非显而易见模式
- 查找:错误处理模式、不明显的API使用、配置陷阱
<topic>:
- 在代码库中搜索与主题相关的文件
- 识别约定和模式
- 注意陷阱和边缘情况
步骤2:提取原则
对于每个候选学习:
- 应用所有四个质量门
- 如果任何门失败,丢弃或改进
- 格式化为带有触发条件的规则
步骤3:呈批批准
向用户显示提取的原则:
AskUserQuestion(
questions: [{
question: "保存这些学习内容?",
header: "学习内容",
options: [
{ label: "全部保存", description: "保存所有提取的原则" },
{ label: "个别选择", description: "选择保存哪些" },
{ label: "丢弃", description: "不保存任何" }
],
multiSelect: false
}]
)
步骤4:保存
对于每个批准的原则,创建一个技能文件:
文件: .claude/skills/learned/{slug}.md
---
名称: {slug}
描述: {一行摘要}
触发器:
- {keyword1}
- {keyword2}
优先级: 200
---
# {标题}
## 适用时机
{触发条件 — 何时应该浮现这个知识?}
## 原则
{实际学习 — 做什么以及为什么}
## 为什么重要
{没有这个知识会出什么问题}
## 证据
{在哪里发现的 — 文件路径、错误消息、调试会话}
Slug派生:小写,连字符分隔,从原则标题中最多取5个单词。
步骤5:确认
报告保存的内容:
- 提取的原则数量与保存的数量
- 创建的文件路径
- 触发关键词,这些将在未来会话中浮现
存储
- 位置:
.claude/skills/learned/*.md - 发现: 由Maestro的技能注册表自动拾取(session-start.sh解析
.claude/skills/*/SKILL.md) - 优先级: 200(低于项目技能的100,所以它们补充而不是覆盖)
反模式
| 不要 | 替代做法 |
|---|---|
| 保存代码片段 | 保存模式背后的规则 |
| 保存泛化建议 | 保存项目特定的洞察 |
| 保存显而易见的东西 | 保存需要调试才能学到的东西 |
| 保存无触发器的 | 始终包括触发关键词以提高可发现性 |