关于 self-learning
用于将经过验证、可复用的工作流程整理为 Agent Skill 的元技能。它指导 Agent 选择、核验和编写技能,并记录失败尝试及敏感信息处理规则。
主要功能
- 01仅提升已验证的工作流程
- 02区分技能与记忆笔记
- 03检查并更新已有技能
- 04记录失败尝试与无效路径
- 05包含敏感信息安全检查
适用场景
- 01记录经过测试的部署流程
- 02整理重复使用的数据库访问步骤
- 03将已验证的调试路径转为技能
- 04保存项目专用命令和注意事项
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ kulaxyz/ self-learning-skills --skill self-learning安装后在 Claude Code 中输入/self-learning确认已加载。
附带文件assets/SKILL.template.mdreferences/skill-authoring.md
详细介绍
自我学习:将黄金路径沉淀为技能
这项技能会把你刚刚费了一番功夫才摸索出来的方法,转化为可复用的 Agent Skill,让你或队友在下一次会话中,无需从头摸索,就能直接沿着已验证的路径开始。
这是一项元技能:它不负责完成工作,而是记录工作是如何完成的。它与工具无关,适用于任何能读取 Agent Skills 格式的 Agent(例如原生加载 SKILL.md 技能的 Claude Code 和 Codex)。如果某一步因工具而异,会先给出通用版本,再将特定工具的细节作为示例。
识别时机
在日常工作中留意这些信号。任何一个信号都提示你可以将经验沉淀下来:
- 任务经历多次尝试、走了弯路或经用户纠正后才成功。成功的方法比周围那些失败的尝试更有价值。
- 你发现了Agent 事先不知道的项目特定信息:凭据或环境变量的位置、与某项服务通信的选择器或后端、不明显的命令、必要的操作顺序,或与直觉假设相悖的注意事项。
- 这是一个可能会重复执行的运维工作流:连接开发或生产数据库、部署、运行迁移、填充数据、在线验证更改、运行某个特定测试流程、轮换密钥、查看正确的日志。
- 用户明确提出:“记住这个”“把它保存为技能”“下次别让我再解释一遍”。
发现信号后立即行动——不要先征求许可,无论是用户提出的,还是你自己注意到的。将经验沉淀为技能,然后告诉用户你记录了什么以及保存位置(第 5 步)。用户随时可以编辑或删除它。
技能、记忆,还是跳过?
并非每条经验都值得单独建成技能——先分流,避免技能列表被一句话条目挤满:
- 多步骤、可复用的流程或工作流(如何部署、连接数据库、执行迁移流程、在线验证)→ 按照下面的流程将其沉淀为一项技能。
- 单条独立事实或一句话的纠正(环境变量名称、路径、一条注意事项)→ 如果你的运行环境提供轻量级记忆或笔记功能(例如
MEMORY.md索引),就记录在那里;为了一句话创建完整技能有些小题大做。如果没有此类功能,就创建一项小型技能。 - 确实只会发生一次、很可能不会重现的事情 → 跳过。
沉淀经验时,也要记录失败的尝试,而不只是成功的方法:排除过哪些做法以及原因,往往比黄金路径本身更能为下一次会话节省时间。
晋升规则:不要把猜测奉为定论
技能具有权威性——下一次会话会直接信任它,而不会重新验证——因此晋升标准要高。只有在以下三项全部满足时,才编写技能:
- 检查通过。 路径已实际验证——测试通过、命令正常退出、复现成功,或构建通过。记录具体通过了什么检查。“看起来能用”不算检查通过。
- 明确的失败模式。 你能说清这条路径避免或诊断的失败(例如“构建缓存过期 → 出现虚假的类型错误”),而不是含糊地说“有时会出问题”。
- 至少排除过一种行不通的方法。 你尝试过并排除了一种具体做法,也说明了原因。
如果缺少任何一项,它还不算技能——将其作为暂定备注留在记忆中(标记为未验证),或者直接跳过。这样可以避免把自信的猜测纳入技能集。
收获流程
- 1. 应用晋升规则(见上文)。通过检查 + 明确的失败模式 + 一个已排除的死胡同——否则就不算技能:记入记忆,或跳过。不要凭自信的猜测继续。
- 2. 选择范围并自行命名,使用下方的启发式规则——不要停下来询问。默认选择项目范围;起一个清晰、具体的
name。 - 3. 去重。 查找现有技能,选择更新而非重复创建。列出 Agent 的技能目录——项目级和用户级目录(例如,Claude Code 的
.claude/skills+~/.claude/skills、Codex 的.codex/skills+~/.codex/skills,或你的工具对应的目录)。另外浏览一下记忆/笔记索引——其中已有的事实可能只需要添加一个指针。 - 4. 在委派前,从本次对话中提炼出黄金路径——趁记忆犹新,记录准确可用的命令、文件路径、环境变量名、必要顺序,以及同样重要的、需要避免的死胡同。这些是撰写技能的原始素材。
- 5. 委派撰写工作:如果你的工具支持,就交给继承本次对话上下文的子 Agent;否则就直接撰写——见下文。黄金路径只存在于本次对话中,因此撰写者必须掌握这些上下文。
- 6. 撰写完成后,将新技能的路径告知用户,并用一句话说明其中记录了什么。
范围:项目级还是全局级
- 项目级(仓库的技能目录,例如
.claude/skills/、.codex/skills/):路径仅适用于此代码库——包括其环境变量、构建/发布步骤、架构和特殊情况。大多数从操作中总结出的技能都属于项目级,并通过 git 分享给团队。 - 全局级(用户级技能目录,例如
~/.claude/skills/、~/.codex/skills/):路径适用于多个项目——例如个人工具、跨仓库习惯,或与你的机器相关而非与某个仓库相关的工作流。
不确定时,优先选择项目级——过度共享的全局技能会在不适用其命令的仓库中触发。
委派编写工作(子 Agent 或内联处理)
编写技能的人需要了解本次对话的上下文——黄金路径只存在于这里。有两种同样有效的执行方式:
- 内联处理——在主循环中自行完成这些步骤。始终可行。
- 子 Agent——如果你的工具可以委派给会继承本次对话的子 Agent,就用它来把资料收集工作从主上下文中移出去。(Claude Code:使用
context: fork的技能。Codex 和其他工具以各自的方式启动子 Agent。)不要交给没有上下文的全新 Agent——它会从空白状态开始,无从提取信息。
无论采用哪种方式,默认都会做得太多,所以要严格限定范围。按照以下说明(填入方括号中的内容)执行——交给子 Agent,或者由你自己内联完成:
你正在整理一项技能。你唯一的任务是编写一项新的 Agent Skill,记录我们刚刚在本次对话中总结出的黄金路径: [用一行描述此工作流]。
硬性规则:
- 只能在
[skills dir]/[skill-name]/下写入内容。不要修改项目源代码、运行构建、安装任何内容,也不要继续原始任务。- 首先阅读
[this-skill-dir]/references/skill-authoring.md和[this-skill-dir]/assets/SKILL.template.md,然后按照其中的规范编写SKILL.md,并根据流程需要添加references/或assets/文件。- 记录流程——命令、路径、必要的顺序和注意事项,而不是一次性的答案。进行泛化,以便下次也能使用。
- 也要记录失败的尝试:哪些做法被排除,以及原因,让下次会话避开这些死路。将其放在 “What didn't work” 部分。
- 严格执行晋升规则:技能必须记录验证此路径的通过检查,指出它所应对的失败模式,并至少列出一个已排除的死路。如果缺少任何一项(例如,实际上并未验证),就停止并报告该技能不符合晋升条件——改为留下暂定的记忆记录,而不是编写技能。
- 绝不要写入秘密值(密码、令牌、连接字符串、API 密钥)。只记录在哪里可以找到它们:环境变量名称、选择器函数、MCP 工具或密钥管理器。将秘密复制到技能文件会造成泄露。
- 完成前进行自我验证(参见
skill-authoring.md中的检查清单)。- 回复时报告:写入文件的绝对路径,以及一行摘要。然后停止——不要继续处理原始任务。
注意事项
- 绝不要将机密写入技能文件。 技能会提交并开源。 指明机密存放的位置;绝不要复述其值。这是本技能中最重要的一条规则。
- 在调用
write_file前的最后一刻,花 10 秒进行自检——在脑中用以下规则检查拟写入的内容:- 是否有任何一行包含字面值
Bearer、Basic、sk-、ghp_、xox[bpars]-、AKIA,或长度达到 32 个字符及以上的 base64/十六进制字符串?→ 将其删去。 - 是否包含连接字符串(
postgres://、mysql://、mongodb://、redis://、https://user:pass@、amqp://、kafka://)?→ 删除 凭据,保留 scheme、主机和路径。 - 用户是否在对话早些时候粘贴过某个值,而你现在正要重新输入?→ 替换为来源指针(
env:FOO_TOKEN、~/.aws/credentials、MCP 工具secrets/get等)。 - 这个值是否是将由 hook 填入的占位符(
YOUR_TOKEN_HERE、<api-key>、${TO_FILL})?→ 仍然要删去;会被自动填入的占位符和字面值一样会泄漏。 - 这是文档片段中的示例 URL 吗?→ 使用
example.com、user:[email protected],或文档中说明的测试 fixture。
- 是否有任何一行包含字面值
name必须与目录名一致,且只能包含小写a-z、数字0-9和连字符 — 不得以连字符开头、结尾或连续出现。名称不匹配会导致技能无法加载。- 编写技能的人往往默认会越界(尤其是子 Agent)。 因此,上文的任务说明禁止触碰项目源代码或恢复原任务——将工作限制在技能目录内。
- 不要重复创建。 如果已存在近似相同的技能(或记忆),请更新它,而不是另建一个会与之竞争触发机会的技能。
- 记录流程,而不是答案。 “将 EMEA 的订单与客户关联”下次就毫无用处;“如何找到合适的表并构建查询”才是技能。请参阅
references/skill-authoring.md。 - 保持
SKILL.md精简(少于 500 行、约 5000 个 token 以下)。将细节移至references/,并告知读者何时加载各文件。
完整的编写规范请参阅 references/skill-authoring.md。填空模板见 assets/SKILL.template.md。