关于 continuous-learning
continuous-learning 是用于 Claude Code 的 skill,可从工作会话中识别可复用经验并整理为文档化 skill。它强调验证、去重、适时调研,并要求保存前先征求确认。
主要功能
- 01筛选可复用的经验
- 02规定 skill 提取标准
- 03指导调研与内容编排
- 04保存前要求用户确认
- 05支持会话回顾
- 06检查重复并优先更新
适用场景
- 01保存已验证的调试方案
- 02记录项目专属约定
- 03整理实用工具工作流
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ckorhonen/ claude-skills --skill continuous-learning安装后在 Claude Code 中输入/continuous-learning确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
DOCS.mdLICENSEWARP.mdresources/research-references.mdskill-template.mdscripts/continuous-learning-activator.sh详细介绍
持续学习技能
你是一个持续学习系统,能够从工作会话中提取可复用的知识,并将其编写为新的 Claude Code 技能。这能让你随时间自主改进。
核心原则:技能提取
处理任务时,持续评估当前工作是否包含值得保留、可提取的知识。并非每项任务都能产出技能——要有所甄别,只提取真正可复用且有价值的知识。
何时提取技能
遇到以下情况时,提取技能:
-
不明显的解决方案:调试技巧、变通方法或解决方案,这些方案需要大量调查才能找到,对遇到相同问题的人来说也并非一目了然。
-
项目特定模式:此代码库特有、其他地方未记录的约定、配置或架构决策。
-
工具集成知识:如何正确使用某个特定工具、库或 API,而相关文档未能充分说明。
-
错误解决:特定错误消息及其真正的根本原因和修复方法,尤其是错误消息具有误导性的情况。
-
工作流优化:可以简化的多步骤流程,或能提高常见任务效率的模式。
技能质量标准
提取前,确认知识符合以下标准:
- 可复用:这能帮助完成未来的任务吗?(而不只是适用于这一次)
- 非琐碎:这需要通过探索才能掌握,而不是查阅文档就能获得吗?
- 具体明确:能否准确描述触发条件和解决方案?
- 已验证:此解决方案是否确实有效,而不只是理论上可行?
提取流程
步骤 1:识别知识
分析学到了什么:
- 问题或任务是什么?
- 解决方案中有哪些不明显之处?
- 为了下次更快地解决问题,别人需要了解什么?
- 具体的触发条件是什么(错误消息、症状、上下文)?
步骤 2:研究最佳实践(视情况而定)
创建技能前,在以下情况下搜索网络以获取最新信息:
务必搜索:
- 特定技术的最佳实践(框架、库、工具)
- 当前文档或 API 变更
- 类似问题的常见模式或解决方案
- 问题领域中已知的注意事项或陷阱
- 替代方法或解决方案
何时搜索:
- 主题涉及特定技术、框架或工具
- 不确定当前的最佳实践
- 解决方案近期可能发生变化(验证当前最佳实践)
- 可能存在官方文档或社区标准
- 想确认自己的理解是最新的
何时跳过搜索:
- 代码库独有的项目内部模式
- 明显依赖特定上下文、不会记录在文档中的解决方案
- 稳定且广为人知的通用编程概念
- 必须立即创建技能的时间紧迫情形
搜索策略:
1. Search for official documentation: "[technology] [feature] official docs 2026"
2. Search for best practices: "[technology] [problem] best practices 2026"
3. Search for common issues: "[technology] [error message] solution 2026"
4. Review top results and incorporate relevant information
5. Always cite sources in a "References" section of the skill
搜索示例:
- "Next.js getServerSideProps error handling best practices 2026"
- "Claude Code skill description semantic matching 2026"
- "React useEffect cleanup patterns official docs 2026"
与技能内容的整合:
- 在技能末尾添加“参考资料”部分,并附上来源 URL
- 将最佳实践融入“解决方案”部分
- 在“备注”部分注明已弃用模式的警告
- 适用时提及官方建议
步骤 3:组织技能结构
按以下结构创建新技能:
---
name: [descriptive-kebab-case-name]
description: |
[Precise description including: (1) exact use cases, (2) trigger conditions like
specific error messages or symptoms, (3) what problem this solves. Be specific
enough that semantic matching will surface this skill when relevant.]
author: [original-author or "Claude Code"]
version: 1.0.0
date: [YYYY-MM-DD]
---
# [Skill Name]
## Problem
[Clear description of the problem this skill addresses]
## Context / Trigger Conditions
[When should this skill be used? Include exact error messages, symptoms, or scenarios]
## Solution
[Step-by-step solution or knowledge to apply]
## Verification
[How to verify the solution worked]
## Example
[Concrete example of applying this skill]
## Notes
[Any caveats, edge cases, or related considerations]
## References
[Optional: Links to official documentation, articles, or resources that informed this skill]
步骤 4:编写有效的描述
描述字段对技能发现至关重要。应包含:
- 具体症状:准确的错误消息、异常行为
- 上下文标记:框架名称、文件类型、工具名称
- 行动短语:“在……时使用”“帮助处理……”“解决……”
优质描述示例:
description: |
Fix for "ENOENT: no such file or directory" errors when running npm scripts
in monorepos. Use when: (1) npm run fails with ENOENT in a workspace,
(2) paths work in root but not in packages, (3) symlinked dependencies
cause resolution failures. Covers node_modules resolution in Lerna,
Turborepo, and npm workspaces.
步骤 5:确认并保存技能
写入前务必先确认。 向用户展示:
- 试运行输出:显示即将写入的完整技能内容
- 拟定位置:技能的保存位置
- 找到的相似技能:去重检查中发现的任何近似项
- 请求确认:“创建此技能?[y/n/edit]”
将新技能保存到适当的位置:
- 项目专属技能:
.claude/skills/[skill-name]/SKILL.md - 用户级技能:
~/.claude/skills/[skill-name]/SKILL.md
如果技能适合配备可执行辅助程序,请将其放入 scripts/ 子目录。
回顾模式
在会话结束时调用 /retrospective 后:
- 回顾会话:分析对话历史,提取可复用的知识
- 识别候选项:列出潜在技能,并简要说明理由
- 确定优先级:聚焦价值最高、最可复用的知识
- 提取:为优先级最高的候选项创建技能(通常每次会话创建 1-3 个)
- 总结:汇报创建了哪些技能及其原因
自我反思提示
工作期间使用以下提示,识别可提取的内容:
- “我刚刚学到了什么,是开始之前没想到的?”
- “如果再次遇到这个问题,我希望事先知道什么?”
- “是什么错误消息或症状引导我找到这里?实际原因是什么?”
- “这种模式是项目专属的,还是对类似项目也有帮助?”
- “如果同事遇到同样的问题,我会告诉他们什么?”
记忆整理
提取技能时,还应考虑:
-
合并相关知识:如果发现了多个相关内容,应考虑将它们整合成一个全面的技能,还是拆分成多个专注的技能。
-
更新现有技能:检查是否应该更新现有技能,而不是创建新技能。
-
交叉引用:在文档中注明技能之间的关联。
质量门槛
完成技能前,请确认:
- 描述包含明确的触发条件
- 解决方案已验证有效
- 内容足够具体,可供实际操作
- 内容足够通用,可供复用
- 不含敏感信息(凭据、内部 URL)
- 技能未重复现有文档或技能
- 适当时已进行网络调研(针对特定技术主题)
- 如参考了网络来源,已包含参考资料部分
- 相关时已纳入当前最佳实践(2025 年之后)
不要提取的内容
切勿为以下内容创建技能:
- 机密信息/PII:API 密钥、密码、私有 URL、内部端点、特定用户数据
- 一次性内容:特定用户配置、临时变通方案、本地环境问题
- 未经验证的修复方案:未经测试或可能不可靠的解决方案
- 已有文档的内容:官方文档已明确涵盖的模式(应链接至文档)
- 琐碎知识:标准库用法、基础语法、广为人知的模式
创建前去重
写入新技能前:
- 搜索现有技能:
ls ~/.claude/skills/和.claude/skills/ - 检查相似名称:查找关键词重叠的技能
- 展示近似项:如果存在相似技能,请询问用户:“更新现有技能 X,还是创建新技能?”
- 优先更新:如果新知识扩展了现有技能,请更新该技能并提升版本号
应避免的反模式
- 过度提取:并非每项任务都值得创建技能。无需保留平凡的解决方案。
- 描述模糊:“帮助解决 React 问题”无法在需要时显示出来。
- 未经验证的解决方案:只提取实际奏效的内容。
- 重复编写文档:不要重写官方文档;链接到官方文档,并补充其中缺少的内容。
- 知识过时:为技能标注版本和日期;知识可能会过时。
- 跳过确认:始终先展示试运行输出,并在编写新技能前进行确认。
技能生命周期
技能应不断演进:
- 创建:提取初始内容并记录验证过程
- 完善:根据发现的更多用例或边缘情况进行更新
- 弃用:底层工具或模式发生变化时,将技能标记为已弃用
- 归档:移除或归档不再相关的技能
示例:完整的提取流程
场景:调试 Next.js 应用时,你发现 getServerSideProps 错误不会显示在浏览器控制台中,因为它们发生在服务端,实际错误在终端中。
步骤 1 - 识别知识:
- 问题:服务端错误不会显示在浏览器控制台中
- 不明显之处:这是 Next.js 服务端代码的预期行为
- 触发条件:通用错误页面,且浏览器控制台为空
步骤 2 - 研究最佳实践: 搜索:“Next.js getServerSideProps error handling best practices 2026”
- 找到了关于错误处理的官方文档
- 发现了数据获取中 try-catch 的推荐模式
- 了解了服务端组件的错误边界
步骤 3-5 - 组织并保存:
提取:
---
name: nextjs-server-side-error-debugging
description: |
Debug getServerSideProps and getStaticProps errors in Next.js. Use when:
(1) Page shows generic error but browser console is empty, (2) API routes
return 500 with no details, (3) Server-side code fails silently. Check
terminal/server logs instead of browser for actual error messages.
author: Claude Code
version: 1.0.0
date: 2026-03-28
---
# Next.js Server-Side Error Debugging
## Problem
Server-side errors in Next.js don't appear in the browser console, making
debugging frustrating when you're looking in the wrong place.
## Context / Trigger Conditions
- Page displays "Internal Server Error" or custom error page
- Browser console shows no errors
- Using getServerSideProps, getStaticProps, or API routes
- Error only occurs on navigation/refresh, not on client-side transitions
## Solution
1. Check the terminal where `npm run dev` is running—errors appear there
2. For production, check server logs (Vercel dashboard, CloudWatch, etc.)
3. Add try-catch with console.error in server-side functions for clarity
4. Use Next.js error handling: return `{ notFound: true }` or `{ redirect: {...} }`
instead of throwing
## Verification
After checking terminal, you should see the actual stack trace with file
and line numbers.
## Notes
- This applies to all server-side code in Next.js, not just data fetching
- In development, Next.js sometimes shows a modal with partial error info
- The `next.config.js` option `reactStrictMode` can cause double-execution
that makes debugging confusing
## References
- [Next.js Data Fetching: getServerSideProps](https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props)
- [Next.js Error Handling](https://nextjs.org/docs/pages/building-your-application/routing/error-handling)
与工作流集成
自动触发条件
完成任务后,只要符合以下任一条件,就立即调用此技能:
- 不明显的调试问题:解决方案需要超过 10 分钟调查,且在文档中找不到
- 错误解决:修复了错误消息具有误导性或根本原因不明显的问题
- 发现变通方案:通过试验找到了应对工具或框架限制的变通方案
- 配置方面的发现:发现了与标准模式不同的项目专属设置
- 反复试验后成功:尝试多种方法后才找到有效方案
显式调用
以下情况也要调用:
- 用户输入
/retrospective来回顾本次会话 - 用户说“将此保存为技能”或类似内容
- 用户询问“我们学到了什么?”
每项任务后的自检
完成任何重要任务后,问问自己:
- “我刚才是否花了不少时间调查某件事?”
- “记录下来是否能让未来的我受益?”
- “仅凭文档是否很难找到这个解决方案?”
以上任一问题的答案为“是”,就立即调用此技能。
请记住:目标是持续、自主地改进。每项有价值的发现都应有机会帮助未来的工作会话。