Self-learning — 将黄金路径提炼为 Skill
概述
这是一个元技能:它不直接完成工作,而是捕获工作是怎么完成的。它将你刚刚艰难摸索出的流程转化为可复用的 Agent Skill,让下一个会话——无论是你自己的还是队友的——直接从已验证的路径开始,而不是重新发现一遍。
适用于任何读取 Agent Skills 格式的工具(如 Claude Code、Codex 等),具有工具中立性。
适用场景
正常工作中出现以下任意一个信号时触发收割:
- 任务经过多次尝试才成功——成功的路径比周围的失败更有价值
- 发现了项目特有的事实:凭证/环境变量的位置、非显而易见的命令、必须遵循的顺序、违反直觉的坑
- 这是一个可能重复出现的运维工作流:连接数据库、部署、运行迁移、数据填充、线上验证、轮转密钥、查看日志
- 用户明确表示:"记住这个"、"保存为 skill"、"下次别让我再解释"
立即行动——不需要先征求许可。收割 skill,然后告诉用户你捕获了什么、保存在哪里。
Skill、记忆还是跳过?
| 类型 | 处理方式 |
|---|---|
| 多步骤、可复用的流程或工作流 | 收割为 skill |
| 单条独立事实或一行修正 | 记录到轻量级记忆/笔记中 |
| 确实是一次性的、不太会重现 | 跳过 |
晋升规则:不要把猜测当权威
Skill 是权威性的——后续会话会信任它而不会重新推导。因此,只有当三个条件同时满足时才晋升为 skill:
- 通过验证检查——路径被实际验证过(测试通过、命令正常退出、复现成功、构建通过)。"看起来能用"不算。
- 有命名的失败模式——能说出这个路径避免或诊断的失败模式,而非模糊的"有时会出错"。
- 至少排除了一条死路——你尝试并排除的具体方案,以及原因。
缺任何一项都还不够格成为 skill——先在记忆里留一条暂定笔记(标记为未验证)或跳过。
使用方法
收割流程:
- 应用晋升规则——通过检查 + 命名失败模式 + 排除死路 → 才能收割,否则记录到记忆或跳过
- 选择范围和命名——默认项目级;选一个清晰、具体的
name - 去重——查找现有 skill 并更新,而非复制
- 提炼黄金路径——趁记忆清晰:确切的工作命令、文件路径、环境变量名、必须的顺序,以及要避免的死路
- 委派写入——如果有子 agent(继承当前对话上下文的),委派给它;否则在当前循环中完成
- 报告结果——告知用户新 skill 的路径和一句话摘要
作用域:项目级 vs 全局级
- 项目级(如
.claude/skills/):路径特定于当前代码库——其环境变量、构建/发布步骤、schema、特殊之处 - 全局级(如
~/.claude/skills/):路径跨项目通用——个人工具、跨仓库习惯、绑定机器而非仓库的工作流
不确定时优先选项目级——过度分享的全局 skill 会在不适用的仓库中错误触发。
常见问题与陷阱
- 绝不在 skill 文件中写入秘密值——skill 会被提交和开源。只记录秘密的位置(环境变量名、选择器函数、密钥管理器)。
name必须等于目录名,且只含小写a-z/0-9/连字符——不能有前导、尾随或双连字符。- 默认会过度扩张——特别是子 agent。严格限制在 skill 目录内。
- 不要重复——如果已有几乎相同的 skill(或记忆),更新它。
- 捕获流程,而非答案——"为 EMEA 客户连接订单和客户"没用;"如何找到正确的表并构建查询"才是 skill。
- 保持 SKILL.md 紧凑(< 500 行,< ~5000 tokens)。细节放入
references/,告诉读者何时加载每个文件。
验证清单
- [ ] 是否满足三个晋升条件?
- [ ] 是否检查了现有 skill 并去重?
- [ ] 是否捕获了流程而非一次性答案?
- [ ] 是否捕获了失败的方案和原因?
- [ ] name 是否等于目录名(小写+连字符)?
- [ ] 是否确保没有秘密值泄露?
- [ ] SKILL.md 是否紧凑(< 500 行)?