关于 skill-extractor
面向 Claude Code 的 Skill,可将工作会话中经验证、可复用的经验整理为 Skill 并保存。它会检查现有 Skill、评估经验是否值得保留,并引导创建与验证流程。
主要功能
- 01提取会话中的可复用经验
- 02检查是否已有相关 Skill
- 03评估经验的复用性与验证情况
- 04引导创建和验证 Skill
- 05按用户或项目范围保存 Skill
适用场景
- 01保存经过验证的调试方法
- 02记录供后续会话使用的项目模式
- 03为相关 Skill 补充新的边缘情况
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ trailofbits/ skills-curated --skill skill-extractor安装后在 Claude Code 中输入/skill-extractor确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/quality-guide.mdskill-lifecycle.mdskill-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:收集详情
询问用户:
- 技能名称 - 根据上下文建议一个 kebab-case 名称,并允许用户更改
- 范围 - 用户级别(默认)或项目级别(
--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