SkillForge
从观察到的模式中创建符合规范、格式正确的技能。
何时锻造
✅ 需要锻造时:
- 在同一会话中你已重复执行相同序列操作 2-3 次
- 项目约定没有被记录在任何地方
- 你解决了一个难题,并且该解决方案是可复用的
- 有人要求你创建一个技能
❌ 无需锻造时:
- 这是一次性任务
- 已有技能已经涵盖该场景(此时应更新)
- 所谓的“技能”只是一个单一命令(请使用脚本别名)
步骤
1. 命名模式
- 该技能解决什么问题?
- 什么触发了它?(要具体——
description字段是发现的入口) - 输入和输出是什么?
2. 选择一个名称
- 使用
kebab-case,长度为 1-64 个字符 - 尽量以动词开头:
deploy-preview、scaffold-component、triage-bug - 每个技能只负责一个职责
3. 创建技能目录
mkdir -p skills/<skill-name>
4. 编写 SKILL.md
使用以下骨架:
---
name: <skill-name>
description: <该技能的作用>. 当 <触发器> 时使用。
metadata:
forged-by: <智能体ID>
forged-from: <会话或上下文>
forged-reason: "<创建该技能的原因>"
---
# <技能名称>
## 输入
- ...
## 步骤
1. ...
2. ...
## 约定
- 项目特定的模式
## 边界情况
- 已知的陷阱或特殊处理
5. 添加脚本(可选)
如果技能涉及文件生成或自动化:
skills/<skill-name>/
├── SKILL.md
├── scripts/
│ └── run.sh # 可执行的自动化脚本
└── references/
└── conventions.md # 详细参考文档(保持 SKILL.md 简洁)
6. 注册技能
更新项目根目录下的 .skills-registry.md(与 skills/ 同级)。如果文件不存在则创建它:
| <skill-name> | local | <今天> | 1 | <description> |
如果项目使用了机器可读的注册表(.skills-registry.json),也要一并更新——skdd forge 会自动处理两种格式。
更新现有技能
当你使用某个技能并遇到它未覆盖的场景时:
- 将新的边界情况或步骤添加到现有的 SKILL.md 中
- 如果技能变得过长(超过 200 行),进行拆分
- 在注册表中更新
last-used并递增usage-count
质量控制清单
在提交新技能之前:
-
name使用 kebab-case,长度 ≤ 64 个字符 -
description包含该技能的作用以及何时使用 - 步骤已编号且可操作
- 没有硬编码路径、密钥或环境特定的值
- SKILL.md 不超过 200 行(将详情移至
references/) - 已在
.skills-registry.md中注册