evolve-skill
About
The `evolve-skill` skill updates existing Claude skills by either refining them in-place or creating advanced variants. It handles the full maintenance workflow, including assessing the current skill, applying targeted improvements, updating version metadata, and keeping the registry and cross-references synchronized. Use it when a skill becomes outdated, user feedback reveals shortcomings, complexity needs upgrading, or you need to create an advanced version alongside the original.
Quick Install
Claude Code
Recommendednpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/evolve-skillCopy and paste this command in Claude Code to install this skill
Documentation
演进现有技能
改进、扩展或创建最初用 create-skill 编写的技能的高级变体。此流程涵盖技能生命周期的维护方面:评估不足、应用有针对性的改进、更新版本,以及保持注册表和交叉引用同步。
适用场景
- 技能的步骤在工具变更后已过时或不完整
- 用户反馈揭示缺失的问题、不清晰的步骤或薄弱的验证
- 技能需要从基础升级到中级(或中级升级到高级)
- 需要在原版旁边创建高级变体(例如
create-r-package和create-r-package-advanced) - 相关技能被添加或删除,交叉引用已过期
输入
- 必需:要演进的现有 SKILL.md 路径
- 必需:演进触发原因(反馈、工具变更、复杂度提升、新相关技能、发现的问题)
- 可选:若要更改复杂度,目标复杂度级别(basic、intermediate、advanced)
- 可选:是否创建高级变体而非就地完善(默认:就地完善)
步骤
第 1 步:评估当前技能
读取现有 SKILL.md,并对照质量检查清单评估每个章节:
| 章节 | 检查内容 | 常见问题 |
|---|---|---|
| 前置元数据 | 所有必需字段存在,description < 1024 字符 | 缺少 tags,version 过期 |
| When to Use | 3-5 个具体触发条件 | 触发条件模糊或重叠 |
| Inputs | 必需与可选明确分离 | 可选输入缺少默认值 |
| Procedure | 每步有代码 + Expected + On failure | 缺少 On failure 块,使用伪代码而非真实命令 |
| Validation | 每项为二元通过/失败 | 主观标准("代码是干净的") |
| Common Pitfalls | 3-6 个包含原因和规避方法 | 过于笼统("小心 X") |
| Related Skills | 2-5 个有效技能引用 | 指向已重命名/删除技能的过期引用 |
# 读取技能
cat skills/<skill-name>/SKILL.md
# 检查前置元数据解析
head -20 skills/<skill-name>/SKILL.md
# 验证相关技能是否仍然存在
grep -oP '`[\w-]+`' skills/<skill-name>/SKILL.md | sort -u
预期结果: 列出具体的不足、弱点或改进机会。
失败处理: 若 SKILL.md 不存在或没有前置元数据,此技能不适用——改用 create-skill 从头编写。
第 2 步:收集演进需求
识别并分类触发演进的原因:
| 触发原因 | 示例 | 典型范围 |
|---|---|---|
| 用户反馈 | "第 3 步不清楚" | 完善 |
| 工具变更 | 新 API 版本,命令已弃用 | 完善 |
| 发现问题 | 未记录的常见失败 | 完善 |
| 复杂度提升 | 技能对实际使用太浅 | 完善或变体 |
| 新相关技能 | 添加了相邻技能 | 完善(交叉引用) |
| 高级用例 | 高级用户需要更深入的覆盖 | 变体 |
在编辑前记录所需的具体更改,每项更改对应其目标章节。
预期结果: 具体的更改列表(例如"为第 4 步添加 On failure"、"添加新的第 6 步处理边界情况 X"、"更新 Related Skills 包含 new-skill")。
失败处理: 若更改不明确,在继续之前向用户请求澄清。模糊的演进目标只会产生模糊的改进。
第 3 步:选择演进范围
使用此决策矩阵确定就地完善还是创建变体:
| 标准 | 完善(就地) | 高级变体(新技能) |
|---|---|---|
| 技能 ID | 不变 | 新 ID:<skill>-advanced |
| 文件路径 | 同一 SKILL.md | 新目录 |
| 版本更新 | 补丁或次要 | 从 1.0 开始 |
| 复杂度 | 可能提高 | 高于原版 |
| 注册表 | 无新条目 | 添加新条目 |
| 符号链接 | 无变化 | 需要新符号链接 |
| 原始技能 | 直接修改 | 保持不变,获得交叉引用 |
完善:当改进质量、修复不足或添加适量新内容时选择。技能保持其身份。
变体:当演进版本会使长度翻倍、改变目标受众或需要实质上不同的输入时选择。原版保持不变用于更简单的用例。
预期结果: 明确的决定——完善或变体——及其理由。
失败处理: 若不确定,默认选择完善。以后总可以提取变体;反之则难以合并。
第 4 步:应用内容更改
对于完善
直接编辑现有 SKILL.md:
# 打开编辑
# 添加/修改步骤
# 强化 Expected/On failure 对
# 添加表格或示例
# 更新 When to Use 触发条件
# 若范围改变则修改 Inputs
遵循以下编辑规则:
- 保留所有现有章节——添加内容,不删除章节
- 插入后保持步骤编号连续
- 每个新增或修改的步骤必须有 Expected 和 On failure
- 新问题添加到 Common Pitfalls 章节末尾
- 新相关技能添加到 Related Skills 章节末尾
对于变体
# 创建变体目录
mkdir -p skills/<skill-name>-advanced/
# 以原版为基础复制
cp skills/<skill-name>/SKILL.md skills/<skill-name>-advanced/SKILL.md
# 编辑变体:
# - 将 `name` 改为 `<skill-name>-advanced`
# - 更新 `description` 反映高级范围
# - 提高 `complexity`(例如 intermediate → advanced)
# - 将 `version` 重置为 "1.0"
# - 为高级用例添加/扩展步骤
# - 在 Related Skills 中引用原版作为前置技能
预期结果: SKILL.md(完善版或新变体)通过第 1 步的评估检查清单。
失败处理: 若步骤编辑破坏了文档结构,使用 git diff 查看更改,并用 git checkout -- <file> 回退部分编辑。
第 4.5 步:同步已翻译的变体
当存在翻译时必须执行。 本步骤同时适用于人类作者和遵循此流程的 AI 智能体。不要跳过——过期的
source_commit值会导致npm run validate:translations在所有语言环境中报告错误的过期警告。
检查此已演进技能是否存在翻译,并将其更新以反映新的源状态:
# 检查是否存在翻译
ls i18n/*/skills/<skill-name>/SKILL.md 2>/dev/null
若存在翻译
- 获取当前源提交哈希:
SOURCE_COMMIT=$(git rev-parse HEAD)
- 更新每个已翻译文件前置元数据中的
source_commit:
for locale_file in i18n/*/skills/<skill-name>/SKILL.md; do
sed -i "s/^source_commit: .*/source_commit: $SOURCE_COMMIT/" "$locale_file"
done
- 在提交消息中标记受影响的语言环境,以标记文件需要重新翻译:
evolve(<skill-name>): <更改说明>
Translations flagged for re-sync: de, zh-CN, ja, es
Changed sections: <列出发生变化的章节>
- 重新生成翻译状态文件:
npm run translation:status
若不存在翻译
无需操作。继续第 5 步。
针对变体
推迟新变体的翻译,直到变体稳定(1-2 个版本)。翻译 v1.0 的变体在到达 v1.2 时可能已大幅变化,属于浪费精力。在变体至少经过一次完善之后再添加翻译。
预期结果: 所有已翻译文件的 source_commit 更新到当前提交。提交消息注明哪些语言环境需要重新翻译,以及哪些章节发生了变化。npm run translation:status 以 0 退出。
失败处理: 若 sed 无法匹配前置元数据字段,已翻译文件可能采用了非标准格式。手动打开并确认其 YAML 前置元数据中包含 source_commit。若字段缺失,该文件未被正确生成——使用 npm run translate:scaffold 重新生成。
第 5 步:更新版本和元数据
按语义版本规范更新前置元数据中的 version 字段:
| 更改类型 | 版本更新 | 示例 |
|---|---|---|
| 修正错别字、措辞澄清 | 补丁:1.0 → 1.1 | 修正第 3 步中不清晰的句子 |
| 新步骤、新问题、新表格 | 次要:1.0 → 2.0 | 添加了第 7 步处理边界情况 |
| 重构流程、更改输入 | 主要:1.0 → 2.0 | 从 5 步重组为 8 步 |
同时更新:
- 若范围扩展则更新
complexity(例如 basic → intermediate) - 若覆盖范围改变则更新
tags - 若技能范围有实质性不同则更新
description
预期结果: 前置元数据 version 反映更改的规模。新变体从 "1.0" 开始。
失败处理: 若忘记更新版本,下次演进时将无法区分当前状态与之前状态。提交前务必更新版本。
第 6 步:更新注册表和交叉引用
对于完善
不需要注册表更改(路径未改变)。仅当其他技能的 Related Skills 发生变化时更新交叉引用:
# 检查是否有技能引用了已演进的技能
grep -r "<skill-name>" skills/*/SKILL.md
对于变体
在 skills/_registry.yml 中添加新技能:
- id: <skill-name>-advanced
path: <skill-name>-advanced/SKILL.md
complexity: advanced
language: multi
description: One-line description of the advanced variant
然后:
- 在注册表顶部递增
total_skills - 在原始技能的 Related Skills 中添加指向变体的交叉引用
- 在变体的 Related Skills 中添加指向原版的交叉引用
- 为斜杠命令发现创建符号链接:
# 项目级
ln -s ../../skills/<skill-name>-advanced .claude/skills/<skill-name>-advanced
# 全局
ln -s /mnt/d/dev/p/agent-almanac/skills/<skill-name>-advanced ~/.claude/skills/<skill-name>-advanced
预期结果: 注册表 total_skills 与 find skills -name SKILL.md | wc -l 匹配。交叉引用是双向的。
失败处理: 若注册表数量有误,运行 find skills -name SKILL.md | wc -l 获取真实数量并更正注册表。对于失效符号链接,使用 readlink -f 调试解析。
第 7 步:验证演进后的技能
运行完整验证检查清单:
- SKILL.md 存在于预期路径
- YAML 前置元数据解析无误
-
version已更新(完善)或设为 "1.0"(变体) - 所有章节存在:When to Use、Inputs、Procedure、Validation、Common Pitfalls、Related Skills
- 每个步骤都有 Expected 和 On failure 块
- Related Skills 引用有效、现存的技能名称
- 注册表条目存在且路径正确(仅变体)
-
total_skills数量与磁盘上的实际技能数匹配 - 符号链接解析正确(仅变体)
-
git diff显示无意外的原始内容删除
# 验证前置元数据
head -20 skills/<skill-name>/SKILL.md
# 统计磁盘上的技能数与注册表的对比
find skills -name SKILL.md | wc -l
grep total_skills skills/_registry.yml
# 检查符号链接(变体适用)
ls -la .claude/skills/<skill-name>-advanced
readlink -f .claude/skills/<skill-name>-advanced/SKILL.md
# 审查所有更改
git diff
预期结果: 所有检查清单项通过。演进后的技能已准备好提交。
失败处理: 逐项处理每个失败项。演进后最常见的问题是 total_skills 数量过期——始终最后验证它。
验证清单
- SKILL.md 存在且有有效的 YAML 前置元数据
-
version字段反映所做的更改 - 所有步骤都有 Expected 和 On failure 块
- Related Skills 引用有效(无失效的交叉引用)
- 注册表
total_skills与磁盘上的实际数量匹配 - 对于变体:
_registry.yml中有正确路径的新条目 - 对于变体:在
.claude/skills/和~/.claude/skills/创建了符号链接 -
git diff确认无意外的内容删除
常见问题
- 忘记更新版本:没有版本更新,就无法追踪更改的内容和时间。提交前始终更新
version。 - 意外删除内容:重构步骤时,很容易丢失 On failure 块或表格行。提交前始终审查
git diff。 - 过期的交叉引用:创建变体时,原版和变体都需要相互引用。单向引用使关联图不完整。
- 注册表数量偏移:创建变体后,
total_skills数量必须递增。遗忘会导致其他检查注册表的技能出现验证失败。 - 完善时范围蔓延:使技能长度翻倍的完善应该是变体。若要添加超过 3 个新步骤,重新考虑第 3 步中的范围决策。
- 避免在 NTFS 挂载路径上使用
git mv(WSL):在/mnt/路径上,目录的git mv可能创建权限损坏(d?????????)。改用mkdir -p+ 复制文件 +git rm旧路径。参见环境指南故障排除章节。
相关技能
create-skill— 创建新技能的基础;evolve-skill 假设最初遵循了此流程commit-changes— 用描述性消息提交演进后的技能configure-git-repository— 版本控制的技能更改security-audit-codebase— 审查演进后的技能中是否意外包含密钥
GitHub Repository
Related Skills
content-collections
MetaThis skill provides a production-tested setup for Content Collections, a TypeScript-first tool that transforms Markdown/MDX files into type-safe data collections with Zod validation. Use it when building blogs, documentation sites, or content-heavy Vite + React applications to ensure type safety and automatic content validation. It covers everything from Vite plugin configuration and MDX compilation to deployment optimization and schema validation.
polymarket
MetaThis skill enables developers to build applications with the Polymarket prediction markets platform, including API integration for trading and market data. It also provides real-time data streaming via WebSocket to monitor live trades and market activity. Use it for implementing trading strategies or creating tools that process live market updates.
creating-opencode-plugins
MetaThis skill helps developers create OpenCode plugins that hook into 25+ event types like commands, files, and LSP operations. It provides the plugin structure, event API specifications, and implementation patterns for JavaScript/TypeScript modules. Use it when you need to intercept, monitor, or extend the OpenCode AI assistant's lifecycle with custom event-driven logic.
sglang
MetaSGLang is a high-performance LLM serving framework that specializes in fast, structured generation for JSON, regex, and agentic workflows using its RadixAttention prefix caching. It delivers significantly faster inference, especially for tasks with repeated prefixes, making it ideal for complex, structured outputs and multi-turn conversations. Choose SGLang over alternatives like vLLM when you need constrained decoding or are building applications with extensive prefix sharing.
