refactor-skill-structure
À propos
Cette compétence restructure les fichiers SKILL.md trop longs ou mal organisés en extrayant les exemples de code vers un fichier de références séparé et en divisant les étapes complexes en étapes plus simples. Elle est conçue pour les compétences dépassant la limite de 500 lignes en CI ou celles dominées par de grands blocs de code. Cette restructuration permet une divulgation progressive et préserve la fonctionnalité de la compétence tout en réduisant sa taille.
Installation rapide
Claude Code
Recommandénpx 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/refactor-skill-structureCopiez et collez cette commande dans Claude Code pour installer cette compétence
Documentation
重构技能结构
对超过 500 行限制或出现结构性问题的 SKILL.md 进行重构。此技能将扩展代码示例提取到 references/EXAMPLES.md,将复合步骤拆分为聚焦的子步骤,添加渐进式披露的交叉引用,并在重构后验证技能是否仍然完整有效。
适用场景
- 技能超过 CI 强制执行的 500 行限制
- 单个步骤包含多个不相关的操作,应该拆分为独立步骤
- 超过 15 行的代码块主导了 SKILL.md 且可以提取
- 技能积累了打破标准六章节结构的临时章节
- 内容更新将技能推过行数限制后
- 技能评审发现了超出内容质量的结构性问题
输入
- 必填:要重构的 SKILL.md 文件路径
- 可选:目标行数(默认:目标为 500 行限制的 80%,即约 400 行)
- 可选:是否创建
references/EXAMPLES.md(默认:是,若存在可提取内容) - 可选:是否拆分为多个技能(默认:否,优先提取)
步骤
第 1 步:测量当前行数并识别臃肿来源
阅读技能并创建逐章节的行数预算,以识别臃肿所在。
# 总行数
wc -l < skills/<skill-name>/SKILL.md
# 每章节行数(近似)
grep -n "^## \|^### " skills/<skill-name>/SKILL.md
对臃肿来源分类:
- 可提取:超过 15 行的代码块、完整配置示例、多变体示例
- 可拆分:执行 2+ 个不相关操作的复合步骤
- 可精简:冗余解释、过于冗长的上下文句子
- 结构性:不在标准六章节结构中的临时章节
预期结果: 行数预算显示哪些章节过大以及适用的臃肿类别。最大的章节是主要重构目标。
失败处理: 若技能在 500 行以下且无明显结构性问题,此技能可能不需要。在继续之前验证重构请求是否合理。
第 2 步:将代码块提取到 references/EXAMPLES.md
将超过 15 行的代码块移至 references/EXAMPLES.md 文件,在主 SKILL.md 中保留简短的内联片段(3-10 行)。
-
创建 references 目录:
mkdir -p skills/<skill-name>/references/ -
对每个可提取的代码块:
- 将完整代码块复制到
references/EXAMPLES.md的描述性标题下 - 在 SKILL.md 中用简短的 3-5 行片段替换代码块
- 添加交叉引用:
See [EXAMPLES.md](references/EXAMPLES.md#heading) for the complete configuration.
- 将完整代码块复制到
-
用清晰标题组织
references/EXAMPLES.md:# Examples ## Example 1: Full Configuration Complete configuration file for [context]: \```yaml # ... full config here ... \``` ## Example 2: Multi-Variant Setup ### Variant A: Development \```yaml # ... dev config ... \``` ### Variant B: Production \```yaml # ... prod config ... \```
预期结果: 所有超过 15 行的代码块已提取。主 SKILL.md 保留简短内联片段以确保可读性。交叉引用链接到提取的内容。references/EXAMPLES.md 以描述性标题良好组织。
失败处理: 若提取代码块不足以减少行数(仍然超过 500),继续第 3 步进行步骤拆分。若技能几乎没有代码块(如纯自然语言技能),重点关注第 3 步和第 4 步。
第 3 步:将复合步骤拆分为聚焦步骤
识别执行多个不相关操作的步骤并拆分。
复合步骤的迹象:
- 步骤标题包含"and"(如"Configure Database and Set Up Caching")
- 步骤有多个预期结果/失败处理块(或应该有)
- 步骤超过 30 行
- 步骤的各子部分可以跳过或以不同顺序完成
对每个复合步骤:
- 识别步骤中的不同操作
- 为每个操作创建新的
### Step N: - 重新编号后续步骤
- 确保每个新步骤有自己的预期结果和失败处理块
- 在新步骤之间添加过渡性上下文
预期结果: 每个步骤只做一件事。没有步骤超过 30 行。步骤数量可能增加,但每个步骤可以独立验证。
失败处理: 若拆分步骤创建了太过细粒度的步骤(如 20+ 个总步骤),考虑将相关的微步骤归入一个带编号子步骤的单一步骤。理想范围是 5-12 个步骤。
第 4 步:从 SKILL.md 添加到提取内容的交叉引用
确保主 SKILL.md 在提取后仍保持可读性和可发现性。
对每次提取:
- SKILL.md 中的内联片段应该对常见情况自给自足
- 交叉引用应该解释有哪些额外内容可用
- 使用相对路径:
[EXAMPLES.md](references/EXAMPLES.md#section-anchor)
交叉引用模式:
- 在简短代码片段之后:
See [EXAMPLES.md](references/EXAMPLES.md#full-configuration) for the complete configuration with all options. - 对于多变体示例:
See [EXAMPLES.md](references/EXAMPLES.md#variants) for development, staging, and production variants. - 对于扩展的故障排除:
See [EXAMPLES.md](references/EXAMPLES.md#troubleshooting) for additional error scenarios.
预期结果: 每次提取都有对应的交叉引用。读者可以按照主 SKILL.md 处理常见情况,并深入 references 了解细节。
失败处理: 若交叉引用使文字流动变得尴尬,将多个引用合并为步骤末尾的单个注释:For extended examples including [X], [Y], and [Z], see [EXAMPLES.md](references/EXAMPLES.md).
第 5 步:重构后验证行数
所有更改完成后重新测量 SKILL.md 行数。
# 检查主 SKILL.md
lines=$(wc -l < skills/<skill-name>/SKILL.md)
[ "$lines" -le 500 ] && echo "SKILL.md: OK ($lines lines)" || echo "SKILL.md: STILL OVER ($lines lines)"
# 若已创建,检查 references 文件
if [ -f skills/<skill-name>/references/EXAMPLES.md ]; then
ref_lines=$(wc -l < skills/<skill-name>/references/EXAMPLES.md)
echo "EXAMPLES.md: $ref_lines lines"
fi
# 总内容
echo "Total content: $((lines + ${ref_lines:-0})) lines"
预期结果: SKILL.md 在 500 行以下。理想情况下在 400 行以下,为未来增长留有空间。references/EXAMPLES.md 没有行数限制。
失败处理: 若提取和拆分后仍超过 500 行,考虑技能是否应该分解为两个独立的技能。涵盖范围过广的技能是范围蔓延的迹象。使用 create-skill 编写第二个技能,并更新两个技能中的相关技能交叉引用。
第 6 步:验证所有章节仍然存在
重构后,验证技能仍然具有所有必需章节且前置元数据完整。
运行 review-skill-format 清单:
- YAML 前置元数据正确解析
- 全部六个必需章节存在(When to Use、Inputs、Procedure、Validation、Common Pitfalls、Related Skills)
- 每个步骤都有预期结果和失败处理块
- 没有孤立的交叉引用(所有链接可解析)
# 快速章节检查
for section in "## When to Use" "## Inputs" "## Procedure" "## Common Pitfalls" "## Related Skills"; do
grep -q "$section" skills/<skill-name>/SKILL.md && echo "$section: OK" || echo "$section: MISSING"
done
grep -qE "## Validation( Checklist)?" skills/<skill-name>/SKILL.md && echo "Validation: OK" || echo "Validation: MISSING"
预期结果: 所有章节存在。提取过程中没有意外删除内容。SKILL.md 中的交叉引用解析到 EXAMPLES.md 中的实际标题。
失败处理: 若章节被意外删除,从 git 历史中恢复:git diff skills/<skill-name>/SKILL.md 查看更改的内容。若交叉引用损坏,验证 EXAMPLES.md 中的标题锚点与 SKILL.md 中的链接匹配(GitHub 风格 Markdown 锚点规则:小写,空格用连字符,去除标点)。
验证清单
- SKILL.md 行数为 500 行或更少
- SKILL.md 中的所有代码块为 15 行或更少
- 提取的内容在
references/EXAMPLES.md中,有描述性标题 - 每次提取在主 SKILL.md 中都有交叉引用
- 没有剩余的复合步骤(每个步骤只做一件事)
- 重构后所有六个必需章节仍然存在
- 每个步骤都有 Expected: 和 On failure: 块
- YAML 前置元数据完整且可解析
- 交叉引用链接解析到 EXAMPLES.md 中的实际标题
-
review-skill-format验证在重构后的技能上通过
常见问题
- 提取过于激进:将所有代码移到 references 会使主 SKILL.md 难以阅读。对常见情况保留 3-10 行的内联片段。只提取超过 15 行或显示多个变体的块。
- 锚点链接损坏:GitHub 风格 Markdown 锚点在某些渲染器中区分大小写。在 EXAMPLES.md 中使用小写标题,并在交叉引用中精确匹配。用
grep -c "heading-text" references/EXAMPLES.md测试。 - 拆分期间丢失预期结果/失败处理:拆分复合步骤时,确保每个新步骤都有自己的预期结果和失败处理块。拆分后很容易让一个步骤缺少这些块。
- 创建过多微小步骤:拆分应产生 5-12 个步骤。若最终有 15+ 个步骤,说明拆分过于激进。将相关的微步骤重新合并为逻辑组。
- 忘记更新 references/EXAMPLES.md 标题:若重命名 EXAMPLES.md 中的章节,SKILL.md 中的所有交叉引用锚点都必须更新。搜索旧锚点名称以找到所有引用。
相关技能
review-skill-format— 重构后运行格式验证以确认技能仍然合规update-skill-content— 内容更新通常是当内容将技能推过行数限制时进行结构重构的触发器create-skill— 在决定如何组织提取内容时参考规范结构evolve-skill— 当技能需要拆分为两个独立技能时,使用演进来创建衍生技能
Dépôt GitHub
Compétences associées
content-collections
MétaCette compétence propose une configuration éprouvée en production pour Content Collections, un outil axé sur TypeScript qui transforme des fichiers Markdown/MDX en collections de données typées de manière sûre avec une validation Zod. Utilisez-la lors de la création de blogs, de sites de documentation ou d'applications Vite + React riches en contenu pour garantir la sécurité de typage et la validation automatique du contenu. Elle couvre tout, de la configuration du plugin Vite et de la compilation MDX à l'optimisation des déploiements et la validation des schémas.
polymarket
MétaCette compétence permet aux développeurs de créer des applications avec la plateforme de marchés prédictifs Polymarket, incluant l'intégration d'API pour le trading et les données de marché. Elle fournit également une diffusion de données en temps réel via WebSocket pour surveiller les transactions en direct et l'activité du marché. Utilisez-la pour mettre en œuvre des stratégies de trading ou pour créer des outils traitant les mises à jour de marché en direct.
creating-opencode-plugins
MétaCette compétence aide les développeurs à créer des plugins OpenCode qui s'interconnectent avec plus de 25 types d'événements tels que les commandes, les fichiers et les opérations LSP. Elle fournit la structure du plugin, les spécifications de l'API événementielle et les modèles d'implémentation pour les modules JavaScript/TypeScript. Utilisez-la lorsque vous avez besoin d'intercepter, de surveiller ou d'étendre le cycle de vie de l'assistant IA OpenCode avec une logique personnalisée pilotée par les événements.
sglang
MétaSGLang est un framework de service LLM haute performance spécialisé dans la génération rapide et structurée pour les workflows JSON, regex et agentiques grâce à son cache de préfixe RadixAttention. Il offre une inférence nettement plus rapide, particulièrement pour les tâches avec des préfixes répétés, ce qui le rend idéal pour les sorties complexes et structurées ainsi que les conversations multi-tours. Choisissez SGLang plutôt que des alternatives comme vLLM lorsque vous avez besoin d'un décodage contraint ou que vous construisez des applications avec un partage étendu de préfixes.
