学习技能提取方法Skill learner

这个技能用于从代码开发对话中提取可重用的学习技能,作为决策启发式和原则,帮助开发者如何思考问题,而非简单复制代码片段。它强调在解决棘手bug、发现非明显变通方法或未记录行为时,提取不可谷歌搜索、上下文特定、精确可操作且来之不易的技能。关键词:技能提取、学习技能、决策启发式、代码调试、非Googleable技能、心智模型、可重用原则。

其他 0 次安装 0 次浏览 更新于 3/11/2026

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/ - 默认。与仓库版本控制一起。

什么是有用的技能

关键: 并非所有解决方案都值得保存。一个好技能是:

  1. 不可谷歌搜索: 无法通过搜索轻易找到的东西

    • 糟糕:“如何在TypeScript中读取文件” ❌
    • 优秀:“这个代码库在ESM中使用自定义路径解析,需要fileURLToPath + 特定相对路径” ✓
  2. 上下文特定: 引用此代码库的实际文件、错误消息或模式

    • 糟糕:“使用try/catch进行错误处理” ❌
    • 优秀:“server.py:42中的aiohttp代理在ClientDisconnectedError上崩溃 - 在try/except中包装StreamResponse” ✓
  3. 精确可操作: 准确告诉你做什么和在哪里做

    • 糟糕:“处理边缘情况” ❌
    • 优秀:“当在dist/中看到’找不到模块’时,检查tsconfig.json moduleResolution是否匹配package.json type字段” ✓
  4. 来之不易: 需要显著的调试努力来发现

    • 糟糕:通用编程模式 ❌
    • 优秀:“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 - 启动开发循环并捕获学习