mcpField
S
skill-extractor

skill-extractor

github.com/trailofbitsAgent 工作流522157 次安装15 周前更新
代码仓库

关于 skill-extractor

面向 Claude Code 的 Skill,可将工作会话中经验证、可复用的经验整理为 Skill 并保存。它会检查现有 Skill、评估经验是否值得保留,并引导创建与验证流程。

主要功能

  1. 01提取会话中的可复用经验
  2. 02检查是否已有相关 Skill
  3. 03评估经验的复用性与验证情况
  4. 04引导创建和验证 Skill
  5. 05按用户或项目范围保存 Skill

适用场景

  1. 01保存经过验证的调试方法
  2. 02记录供后续会话使用的项目模式
  3. 03为相关 Skill 补充新的边缘情况

安装

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

$npx skills add https://github.com/trailofbits/skills-curated --skill skill-extractor

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
quality-guide.md
skill-lifecycle.md
skill-template.md

详细介绍

Skill 提取器

从工作会话中提取可复用的知识,并将其保存为 Claude Code 技能。

适用场景

  • 通过调查解决了一个不明显的问题
  • 发现了一个需要反复尝试才能找到的变通方法
  • 找到了一种有助于处理类似情况的调试技巧
  • 学到了值得保留的项目专属模式
  • 修复了一个根因并不明显的错误

不适用场景

  • 简单查阅文档(只需为文档添加书签)
  • 轻微修复(拼写错误、明显错误)
  • 一次性的项目专属配置
  • 已在其他地方充分记录的知识
  • 未经验证的解决方案(等到它确实有效后再说)

寻找提取候选内容

使用以下提示,找出值得提取的知识:

  • “我刚刚学到了什么之前并不明显的东西?”
  • “如果再次遇到这个确切的问题,我希望自己提前知道什么?”
  • “是什么错误消息或症状引导我找到这里,实际原因又是什么?”
  • “这种模式是这个项目专属的,还是也能帮助类似项目?”
  • “如果同事遇到同样的问题,我会告诉他们什么?”

如果这些问题中至少有两个无法给出有实际意义的答案,那它可能不值得提取。

命令

/skill-extractor [--project] [context hint]
  • 默认:保存到 ~/.claude/skills/[name]/SKILL.md
  • --project:保存到 .claude/skills/[name]/SKILL.md
  • 上下文提示有助于聚焦提取内容(例如,/skill-extractor the cyclic data DoS fix)

提取流程

步骤 0:检查现有技能

创建新技能之前,先搜索可能涵盖相同内容的现有技能:

# Check user skills
ls ~/.claude/skills/

# Check project skills
ls .claude/skills/

# Search by keyword
grep -r "keyword" ~/.claude/skills/ .claude/skills/ 2>/dev/null

如果存在相关技能,可考虑更新它,而不是创建新技能。有关何时更新或创建的指导,请参阅 skill-lifecycle.md。

步骤 1:确定所学内容

如果 $ARGUMENTS 中包含上下文提示(例如,“the cyclic data DoS fix”),就用它来聚焦提取的具体主题。

分析对话,确定:

  • 解决了什么问题?
  • 为什么这个解决方案不明显?
  • 为了下次更快地解决问题,需要知道什么?
  • 具体的触发条件是什么(错误消息、症状)?

向用户简要总结:

I identified this potential skill:

**Problem:** [Brief description]
**Key insight:** [What made it non-obvious]
**Triggers:** [Error messages or symptoms]
步骤 2:质量评估

根据以下标准评估候选技能:

标准是否通过?依据
可复用 - 有助于未来的任务,而不只是当前情况[原因]
非琐碎 - 需要探索发现,而非查阅文档[原因]
已验证 - 解决方案确实有效[证据]
触发条件明确 - 确切的错误消息或场景[具体内容]
解释原因 - 说明权衡与判断,而不只是步骤[方式]
增加价值 - 教授判断,而不只是 Claude 能查到的事实[方式]

向用户展示评估结果并询问:“继续提取吗?[yes/no]”

无论通过多少项标准,都由用户决定是否继续。尊重用户的判断——如果用户回答 yes,就进行提取;如果回答 no,就跳过。

步骤 3:收集详情

询问用户:

  1. 技能名称 - 根据上下文建议一个 kebab-case 名称,并允许用户更改
  2. 范围 - 用户级别(默认)或项目级别(--project)
步骤 4:可选研究

如果主题涉及特定库或框架:

  • 使用网络搜索查找当前最佳实践
  • 使用 Context7 MCP(如果可用)查阅官方文档
  • 在“参考资料”部分纳入相关来源

以下情况跳过研究:

  • 项目专属的内部模式
  • 通用编程概念
  • 时效性提取
步骤 5:生成技能

使用 skill-template.md 中的模板。

**质量标准:**遵循 quality-guide.md,确保技能能持续提供价值。要点包括:

  • 优先提供行为指导,而非堆砌参考资料
  • 解释原因,而不只是说明做什么
  • 明确具体的触发条件,使其能与其他技能有效区分
步骤 6:保存前进行验证

按照 skill-template.md 中的验证清单逐项检查。如果验证失败,请先修复问题再保存。

步骤 7:保存 Skill

创建目录并保存:

  • 用户级:~/.claude/skills/[name]/SKILL.md
  • 项目级:.claude/skills/[name]/SKILL.md

报告成功:

Skill saved to: [path]

The skill will be available in future sessions when the context matches:
"[first line of description]"

记忆整合

提取知识时,请考虑新知识与现有 Skill 的关系:

合并还是分开?

  • 如果新知识是现有 Skill 的变体或边缘情况,则合并
  • 如果它有不同的触发条件,或解决的是根本不同的问题,则分开
  • 如有疑问,先分开——之后随时可以合并

更新还是创建:

  • 如果发现了额外的边缘情况、更好的解决方案或修正内容,则更新现有 Skill
  • 如果知识的触发条件不同,即使领域相关,也应创建新的 Skill

交叉引用:

  • 如果 Skill 相关但彼此独立,请添加“另请参阅”部分并链接到相关 Skill
  • 示例:用于“排查连接池耗尽问题”的 Skill 可以链接到“优化无服务器冷启动”

Skill 生命周期

Skill 并非永久不变。请参阅 skill-lifecycle.md 了解以下方面的指导:

  • 根据新发现更新 Skill
  • 工具或模式发生变化时弃用 Skill
  • 归档不再相关的 Skill

应当拒绝的自我辩解

如果你发现自己有以下任何想法,请不要提取知识:

  • “说不定以后会有用”——只提取经过验证、可复用的知识
  • “我干脆把所有内容都保存下来”——质量胜过数量
  • “用户没有确认,但这似乎很有价值”——务必获得明确确认
  • “我会跳过‘不适用的情况’部分”——这是优质 Skill 的必备部分
  • “描述可以写得含糊一些”——明确的触发条件对发现 Skill 至关重要

提取示例

场景: 用户发现,分析包含循环引用的序列化文件(例如,一个包含自身的列表)时,AST 访问器会因 RecursionError 崩溃。

发现的经验:

  • 循环数据结构会形成循环 AST
  • 未跟踪循环的访问器模式会导致无限递归
  • 需要跟踪已访问的节点或设置深度限制

生成的 Skill 名称: cyclic-ast-visitor-hardening

关键部分:

  • 适用情况:“AST 访问器出现 RecursionError”、“分析不可信的序列化输入”
  • 不适用的情况:“递归是由深度嵌套(但无循环)的结构造成的”
  • 问题:访问器未跟踪已访问的节点,遇到循环时会陷入无限循环
  • 解决方案:添加 visited: set 参数,在递归前进行检查
  • 验证:循环测试用例能够完成,且不会出现 RecursionError

评论

支持 Markdown