name: learner description: 从当前对话中提取学习到的技能
学习技能
洞察
可重用技能不是复制粘贴的代码片段,而是原则和决策启发式,教会Claude如何思考一类问题。
区别:
- 糟糕(模仿):“当你看到ConnectionResetError时,添加这个try/except块”
- 优秀(可重用技能):“在异步网络代码中,任何I/O操作都可能因客户端/服务器生命周期不匹配而独立失败。原则是:单独包装每个I/O操作,因为操作之间的失败是常见情况,而非例外。”
一个好技能改变了Claude处理问题的方式,而不仅仅是它产生的代码。
为何重要
在提取技能之前,问自己:
- “有人能在5分钟内通过谷歌搜索到这个吗?” → 如果是,停止。不要提取。
- “这是否特定于这个代码库?” → 如果不是,停止。不要提取。
- “这需要真正的调试努力来发现吗?” → 如果不是,停止。不要提取。
如果潜在技能未能通过任何这些问题,就不值得保存。
识别模式
仅在以下情况后使用 /oh-my-claudecode:learner:
- 解决了一个需要深入调查的棘手bug
- 发现了一个特定于此代码库的非明显变通方法
- 找到了一个被遗忘时会浪费时间的隐藏陷阱
- 发现了影响此项目的未记录行为
方法
提取过程
步骤1:收集所需信息
-
问题陈述: 发生的具体错误、症状或困惑
- 包括实际错误消息、文件路径、行号
- 示例:“在src/hooks/session.ts:45处,重启后sessionId未定义时出现TypeError”
-
解决方案: 确切的修复,而非一般建议
- 包括代码片段、文件路径、配置更改
- 示例:“在访问session.user之前添加空值检查,在401时重新生成会话”
-
触发器: 再次遇到此问题时出现的关键词
- 使用错误消息片段、文件名、症状描述
- 示例:[“sessionId未定义”, “session.ts TypeError”, “401会话”]
-
范围: 几乎总是项目级别,除非是真正通用的洞察
步骤2:质量验证
系统拒绝以下技能:
- 太通用(无文件路径、行号或具体错误消息)
- 易于谷歌搜索(标准模式、库使用)
- 模糊解决方案(无代码片段或精确指令)
- 差触发器(匹配一切的通用词)
步骤3:保存位置
- 用户级别: ~/.claude/skills/omc-learned/ - 罕见。仅用于真正可移植的洞察。
- 项目级别: .omc/skills/ - 默认。与仓库版本控制一起。
什么是有用的技能
关键: 并非所有解决方案都值得保存。一个好技能是:
-
不可谷歌搜索: 无法通过搜索轻易找到的东西
- 糟糕:“如何在TypeScript中读取文件” ❌
- 优秀:“这个代码库在ESM中使用自定义路径解析,需要fileURLToPath + 特定相对路径” ✓
-
上下文特定: 引用此代码库的实际文件、错误消息或模式
- 糟糕:“使用try/catch进行错误处理” ❌
- 优秀:“server.py:42中的aiohttp代理在ClientDisconnectedError上崩溃 - 在try/except中包装StreamResponse” ✓
-
精确可操作: 准确告诉你做什么和在哪里做
- 糟糕:“处理边缘情况” ❌
- 优秀:“当在dist/中看到’找不到模块’时,检查tsconfig.json moduleResolution是否匹配package.json type字段” ✓
-
来之不易: 需要显著的调试努力来发现
- 糟糕:通用编程模式 ❌
- 优秀:“worker.ts中的竞争条件 - 第89行的Promise.all需要在map回调返回之前await” ✓
反模式(不要提取)
- 通用编程模式(使用文档代替)
- 重构技术(这些是通用的)
- 库使用示例(使用库文档)
- 类型定义或模板代码
- 任何初级开发人员能在5分钟内通过谷歌搜索到的东西
技能格式
技能保存为Markdown,结构如下:
YAML Frontmatter
标准元数据字段:
- id, name, description, source, triggers, quality
主体结构(必需)
# [技能名称]
## 洞察
你发现的基本原理是什么?不是代码,而是心智模型。
示例:"异步I/O操作是独立可失败的。客户端生命周期不等于服务器生命周期。"
## 为何重要
如果不知道这一点,会出什么问题?什么症状引导你到这里?
示例:"代理服务器在客户端断开时崩溃,导致其他请求中断。"
## 识别模式
如何知道此技能适用?迹象是什么?
示例:"构建任何长连接处理器(代理、websocket、SSE)"
## 方法
决策启发式,而不仅仅是代码。Claude应该如何思考这个问题?
示例:"对于每个I/O操作,问:如果现在失败怎么办?本地处理它。"
## 示例(可选)
如果代码有帮助,展示它 - 但作为原理的说明,而非复制粘贴材料。
关键: 如果Claude能将其应用于新情况,而不仅仅是相同情况,技能就是可重用的。
相关命令
- /oh-my-claudecode:note - 保存快速笔记,在压缩后保留(不如技能正式)
- /oh-my-claudecode:ralph - 启动开发循环并捕获学习