name: phx:learn description: 修复错误或收到纠正后捕获所学教训。更新知识库以防止未来错误。 argument-hint: <修复内容的描述>
从修复中学习
在修复错误或收到纠正后,捕获教训以防止未来错误。
使用方式
/phx:learn 修复了用户列表中的N+1查询 - 缺少预加载
/phx:learn 参数处理中的字符串与原子键不匹配
/phx:learn LiveView的assign_async在测试中需要render_async
工作流程
步骤 1: 识别模式
查看最近的对话上下文。自问:
- 根本原因是什么?(不是症状)
- 这是其他人可能犯的常见错误吗?
- 可以通过简单规则预防吗?
步骤 2: 检查现有知识
检查是否已记录:
- Grep 项目 CLAUDE.md 中的模式关键字
- 检查自动记忆文件中的类似教训
- 读取
references/common-mistakes.md(只读插件参考 — 不要编辑此文件)
如果已记录,告知用户并停止。
步骤 3: 决定保存位置
关键:永远不要编辑插件文件。 位于 ~/.claude/plugins/ 下的文件会被缓存并在更新时被覆盖。
始终写入项目或内存位置。
| 范围 | 写入到 | 示例 |
|---|---|---|
| 仅此项目 | 项目 CLAUDE.md | “在此应用中永远不要使用原始SQL” |
| 所有 Elixir 项目 | 自动记忆 MEMORY.md | “jsonb总是使用字符串键” |
| 有上下文的详细修复 | .claude/solutions/ 通过 /phx:compound |
复杂的调试故事 |
步骤 4: 编写教训
对于项目 CLAUDE.md — 添加简洁规则:
### [类别] 铁律(继续)
N. **[简短规则名称]** — 不要 [不良模式]。相反 [良好模式]
对于自动记忆 — 追加到 ~/.claude/projects/{project-hash}/memory/MEMORY.md:
### 教训:[标题]
- **模式**:不要 [不良] — 相反 [良好]
- **为什么**:[根本原因解释]
步骤 5: 考虑更广泛的更新
如果教训足够重要成为铁律:
- 建议添加到项目 CLAUDE.md 铁律部分
- 如果它是通用的(适用于所有 Elixir 项目),建议更新插件本身(用户可以提交 PR)
输出
捕获后,确认:
教训已捕获在 [位置]
模式:不要 [不良模式] — 相反 [良好模式]
类别:[Ecto/LiveView/OTP/Testing/等]
参考(只读 — 不要编辑)
references/common-mistakes.md— 常见 Elixir 错误参考。检查重复时参考。随插件附带 — 永远不要修改。