mcpField
L
learner

learner

github.com/yeachan-heoAgent 工作流40.4k604 次安装1 天前更新
代码仓库

关于 learner

learner 是已弃用的兼容技能,用于从调试和调查中提取可复用的项目专属经验。它会筛选并验证经验、区分专业知识与流程,再保存为技能文件。

主要功能

  1. 01识别项目专属的难得经验
  2. 02排除通用或易于搜索的建议
  3. 03将知识归类为专业知识或流程
  4. 04以必需的 YAML frontmatter 保存技能

适用场景

  1. 01记录非显而易见的修复以供后续使用
  2. 02保存未记录的项目行为
  3. 03与团队共享经过验证的项目知识

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/yeachan-heo/oh-my-claudecode --skill learner

安装后在 Claude Code 中输入/learner确认已加载。

详细介绍

Learner Skill

已弃用的兼容别名:新的技能提取工作流请使用 /oh-my-claudecode:skillify。此文件仅为内部实现、历史记录和兼容性而保留。

这是一项 Level 7(自我改进)技能。它包含两个不同的部分:

  • 专业知识:关于优秀技能要素的领域知识。发现新模式后会自动更新。
  • 工作流:稳定的提取流程。很少变更。

改进周期中只能更新「专业知识」部分。


专业知识

本部分包含会随着时间推移而完善的领域知识。 发现新模式时,学习者本身可以更新此部分。

核心原则

可复用的技能不是可复制粘贴的代码片段,而是原则和决策启发式,用于教会 Claude 如何思考某一类问题。

区别如下:

  • 不佳(模仿):“看到 ConnectionResetError 时,添加这个 try/except 块”
  • 良好(可复用技能):“在异步网络代码中,由于客户端/服务器生命周期不匹配,任何 I/O 操作都可能独立失败。原则:分别封装每个 I/O 操作,因为操作之间发生故障才是常见情况,而不是例外。”
质量门槛

提取技能前,以下三项必须全部成立:

  • “有人能在 5 分钟内通过 Google 找到这个信息吗?”→ 否
  • “这是此代码库特有的吗?”→ 是
  • “发现它是否付出了实际的调试努力?”→ 是
识别信号

仅在以下情况后提取:

  • 解决了需要深入调查的棘手 Bug
  • 发现了此代码库特有、且不明显的变通方法
  • 找到了容易被遗忘、忘记后会浪费时间的隐藏陷阱
  • 揭示了会影响此项目的未文档化行为
有用技能的要素
  1. 无法通过 Google 轻易找到:搜索也很难轻易找到的信息

    • 不佳:“如何在 TypeScript 中读取文件” ❌
    • 良好:“此代码库在 ESM 中使用自定义路径解析,需要使用 fileURLToPath 和特定相对路径” ✓
  2. 上下文专属:引用此代码库中的实际文件、错误消息或模式

    • 不佳:“使用 try/catch 处理错误” ❌
    • 良好:“server.py:42 中的 aiohttp 代理会因 ClientDisconnectedError 崩溃——请用 try/except 封装 StreamResponse” ✓
  3. 精准且可执行:准确说明要做什么以及在哪里做

    • 不佳:“处理边界情况” ❌
    • 良好:“在 dist/ 中遇到 ‘Cannot find module’ 时,检查 tsconfig.json 中的 moduleResolution 是否与 package.json 的 type 字段匹配” ✓
  4. 来之不易:需要投入大量调试精力才能发现

    • 不佳:通用编程模式 ❌
    • 良好:“worker.ts 中的竞争条件——第 89 行的 Promise.all 需要在 map 回调返回前等待” ✓
反模式(请勿提取)
  • 通用编程模式(请改用文档)
  • 重构技术(这些是通用的)
  • 库的用法示例(请使用库文档)
  • 类型定义或样板代码
  • 初级开发者能在 5 分钟内通过 Google 找到的任何内容

工作流

本部分包含稳定的提取流程。 改进周期中不得更新此部分。

第 1 步:收集必需信息
  • 问题描述:实际发生的具体错误、症状或疑惑

    • 包含实际错误消息、文件路径和行号
    • 示例:“重启后 sessionId 未定义时,src/hooks/session.ts:45 出现 TypeError”
  • 解决方案:准确的修复方法,而非一般性建议

    • 包含代码片段、文件路径和配置更改
    • 示例:“访问 session.user 前添加空值检查;遇到 401 时重新生成会话”
  • 触发条件:再次遇到此问题时可能出现的关键词

    • 使用错误消息片段、文件名和症状描述
    • 示例:["sessionId undefined", "session.ts TypeError", "401 session"]
  • 范围:几乎总是项目级,除非确实是普遍适用的见解

步骤 2:质量验证

系统会拒绝以下技能:

  • 过于笼统(没有文件路径、行号或具体错误消息)
  • 轻易就能通过 Google 搜到(标准模式、库的用法)
  • 解决方案含糊(没有代码片段或精确说明)
  • 触发条件不佳(泛泛的词语,什么内容都会匹配)
步骤 3:分类为专业知识或工作流

保存前,确定所学内容属于:

  • 专业知识(领域知识、模式、易踩的坑)→ 保存为 {topic}-expertise.md
  • 工作流(操作流程、步骤顺序)→ 保存为 {topic}-workflow.md

此分类可确保专业知识能够独立更新,而不影响工作流的稳定性。

步骤 4:保存位置
  • 用户级:${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<skill-name>.md - 少见。仅用于真正可移植的经验。
  • 项目级:.omc/skills/<skill-name>.md - 默认。若希望团队保留此技能,可将其与代码仓库一同提交。在关联的工作树中,未提交的技能仍仅存在于该工作树中,删除该工作树后也会消失。
必需的文件格式

每个学习到的技能文件都必须以 YAML frontmatter 开头,以便学习技能的扁平文件发现机制能够加载它。 不要编写没有 frontmatter 的纯 Markdown。

最少需要的 frontmatter:

---
name: <skill-name>
description: <one-line description>
triggers:
  - <trigger-1>
  - <trigger-2>
---
技能正文模板
---
name: <skill-name>
description: <one-line description>
triggers:
  - <trigger-1>
  - <trigger-2>
---

# [Skill Name]

## The Insight
What is the underlying PRINCIPLE you discovered? Not the code, but the mental model.

## Why This Matters
What goes wrong if you don't know this? What symptom led you here?

## Recognition Pattern
How do you know when this skill applies? What are the signs?

## The Approach
The decision-making heuristic, not just code. How should Claude THINK about this?

## Example (Optional)
If code helps, show it - but as illustration of the principle, not copy-paste material.

关键点:如果 Claude 能将技能应用于新情境,而不只是完全相同的情境,那么该技能就是可复用的。

相关命令

  • /oh-my-claudecode:note - 保存可在压缩后保留的快速笔记(比技能的形式要求更低)
  • /oh-my-claudecode:ralph - 启动开发循环并捕获经验

评论

支持 Markdown