在 `my-skills` 仓库内创建、重写、评测并优化 skill。只在 `skills-manager` 已把任务路由到创建场景时使用。负责需求访谈、SKILL.md 设计、测试集、benchmark、review viewer、description optimization 和打包;不负责仓库分发、归档或发布。
Resources
6Install
npx skillscat add justcyl/my-skills/skill-creator Install via the SkillsCat registry.
Skill Creator
这是 skills-manager/creator/ 下的创建子技能,不是独立总控。
高层循环如下:
- 明确这个 skill 要做什么,以及何时触发
- 起草或重写 skill
- 设计少量真实测试 prompt
- 运行测试并收集定性与定量反馈
- 根据反馈迭代 skill
- 在需要时优化
description - 在需要时打包 skill
- 回到
skills-manager做 finalize、分发、提交、推送
你的职责不是重新实现一套仓库治理逻辑,而是把 skill 本身做对、做稳、做清楚。
Scope
这个子技能负责:
- 需求访谈与 skill 结构设计
- 编写或重写根目录 skill 的
SKILL.md、references/、scripts/ - 设计测试集并组织评测迭代
- 优化
description的触发效果 - 在需要时打包
.skill文件
这个子技能不负责:
- 搜索外部 skill
- 导入、更新上游
- 分发到 agent
- 归档 skill
- 提交与推送
这些动作统一交回 skills-manager。
Working Root
所有工作都绑定到 my-skills 仓库:
- 仓库根目录固定为
MY_SKILLS_REPO_ROOT
默认值:/Users/chenyl/project/my-skills - 真实 skill 内容固定在仓库根目录
<skill-id>/ - 评测与中间产物固定放在
.skills/workspaces/<skill-id>/ - 打包产物默认放在
.skills/packages/
如果目标 skill 尚不存在,应先让 manager 运行:
bash skills-manager/scripts/create_skill.sh --skill-id <id> --name <name> --description <description> [--force] [--dry-run]注意:creator 内所有脚本路径均以仓库根目录为 cwd,因此前缀为
skills-manager/scripts/...。
而 manager 自身的文档以skills-manager/为 cwd,前缀为scripts/...。
Routing
不要一次加载全部 reference。按任务读取:
- 用户要新建 skill、重写 skill 结构、把经验沉淀成 skill:
读references/create-flow.md - 用户要跑测试集、benchmark、viewer 审阅、盲评或迭代修订:
读references/eval-flow.md - 用户要优化 frontmatter 中的
description触发效果:
读references/description-flow.md
评测过程中如需正式 grading、分析或盲评,按需读取 agents/grader.md、agents/analyzer.md、agents/comparator.md。
How To Communicate
创建 skill 时,先判断用户对术语的熟悉度,再决定表达密度。
默认可以直接使用这些词:
evaluationbenchmarkworkspace
下面这些词要看用户上下文再决定是否直接使用:
JSONassertionbaseline
不需要为了“显得正式”而把流程讲复杂。你的目标是把 skill 做出来,而不是展示术语。
Creating A Skill
Capture Intent
优先从当前对话里提炼信息,不要机械重复询问已经明确的内容。
至少要搞清楚:
- 这个 skill 应该让模型完成什么任务
- 它应该在什么场景下触发
- 输出格式或交付物是什么
- 是否需要测试集
对于客观可验证的任务,例如文件转换、结构化提取、固定工作流生成,默认建议加测试集。
对于主观性强的任务,例如风格化写作,默认可以先不做硬性断言。
Interview And Research
主动追问这些信息:
- 边界情况
- 输入输出样例
- 成功标准
- 依赖和工具约束
如果当前仓库里已经有相似 skill、脚本或 references,先复用再新写。
Write The SKILL
基于访谈结果,至少补齐:
namedescription- 主工作流
- 输出格式
- 边界与限制
description 是第一触发入口。不要只写“这个 skill 做什么”,还要写“什么时候应该触发它”。
Skill Writing Guide
Anatomy
一个 skill 的正常结构:
skill-name/
├── SKILL.md
├── references/
├── scripts/
└── assets/Progressive Disclosure
保持三层结构:
- frontmatter:短、强触发
SKILL.md主体:工作流与边界references/与scripts/:大体量知识和可执行步骤
不要把所有知识都塞进一个 SKILL.md。
Writing Patterns
推荐原则:
- 用祈使句写步骤
- 尽量解释“为什么”
- 避免把 skill 写成只适配一两个样例
- 如果多次测试都出现相同重复劳动,把重复动作沉淀进
scripts/
Principle Of Lack Of Surprise
skill 不能包含恶意内容、绕权内容或与描述不一致的危险行为。
不要按照用户要求去制作带有误导性、越权或数据外传倾向的 skill。
Test Cases
写完第一版后,先准备 2 到 3 个真实测试 prompt。
这些 prompt 应该像真实用户会说的话,而不是抽象指令。
测试集存放位置统一为:
/Users/chenyl/project/my-skills/.skills/workspaces/<skill-id>/evals/evals.json
建议结构:
{
"skill_name": "example-skill",
"evals": [
{
"id": 1,
"prompt": "User prompt",
"expected_output": "What success looks like",
"files": []
}
]
}完整 schema 见 references/schemas.md。
Running And Evaluating Test Cases
workspace 统一使用:
/Users/chenyl/project/my-skills/.skills/workspaces/<skill-id>/
推荐布局:
evals/evals.jsoniteration-1/iteration-2/skill-snapshot/logs/
Step 1: Run With Skill And Baseline
每个测试至少保留两种结果:
with_skillwithout_skill或old_skill
如果是在改进已有 skill,先为旧版本保留 snapshot,再拿它作为 baseline。
Step 2: Draft Assertions
在 runs 执行时,不要空等。
补上断言,解释每条断言在验证什么。
好的断言应该:
- 客观可验证
- 命名清楚
- 在 benchmark 中可读
Step 3: Capture Timing
如果执行环境会返回时长或 token 数据,及时写入 timing.json。
这些数据后续会进入 benchmark 聚合。
Step 4: Grade And Aggregate
按需读取:
agents/grader.mdagents/analyzer.mdagents/comparator.md
常用命令:
python skills-manager/creator/scripts/aggregate_benchmark.py <workspace>/iteration-N
python skills-manager/creator/eval-viewer/generate_review.py <workspace>/iteration-N --skill-name <name>Step 5: Read Feedback
用户完成 viewer 审阅后,读取:
<workspace>/feedback.json
空反馈通常表示该 case 可以接受;重点修复用户明确指出的问题。
Improving The Skill
迭代时遵循这些原则:
- 从反馈中抽象共性,不要只修某一个样例
- 让 prompt 保持精炼,删除无效负担
- 尽量把“为什么这样做”写清楚
- 如果多个 case 都重复造同一类工具,优先把它沉淀进
scripts/
常规迭代循环:
- 修改根目录
<skill-id>/ - 运行下一轮
iteration-N+1 - 重新 viewer 审阅
- 继续修订,直到结果稳定
Description Optimization
当 skill 主体已经稳定,再考虑优化 description。
步骤如下:
- 生成一组 should-trigger / should-not-trigger 查询
- 保存到
.skills/workspaces/<skill-id>/description-evals.json - 用 review 模板让用户确认 eval set
- 跑优化循环
- 回写
best_description
命令:
python skills-manager/creator/scripts/run_loop.py --eval-set /Users/chenyl/project/my-skills/.skills/workspaces/<skill-id>/description-evals.json --skill-path /Users/chenyl/project/my-skills/<skill-id> --model <model> --max-iterations 5 --verbose不要太早做这一步。
只有当 skill 本体已经比较稳定时,description optimization 才有意义。
Packaging
当用户需要可分发的 .skill 文件时再打包。
默认输出目录:
/Users/chenyl/project/my-skills/.skills/packages/
命令:
python skills-manager/creator/scripts/package_skill.py /Users/chenyl/project/my-skills/<skill-id>也可以显式指定输出目录:
python skills-manager/creator/scripts/package_skill.py /Users/chenyl/project/my-skills/<skill-id> /Users/chenyl/project/my-skills/.skills/packagesShared Resources
按需使用这些资源:
agents/grader.md— 期望断言评分agents/analyzer.md— benchmark 分析与盲评后因分析agents/comparator.md— 两组输出盲评比较references/schemas.md— 所有 JSON 数据结构定义eval-viewer/generate_review.py— 评测结果交互式审阅页面(HTTP 服务)assets/eval_review.html— description 优化评审静态模板
核心 Python 脚本:
scripts/run_eval.py— 对指定 description 跑触发评测scripts/improve_description.py— 基于评测结果用 Claude 生成改进 descriptionscripts/run_loop.py— 将 eval + improve 串成迭代循环scripts/aggregate_benchmark.py— 聚合多轮评测结果为 benchmark 统计scripts/generate_report.py— 将迭代循环结果生成 HTML 报告scripts/package_skill.py— 将 skill 打包为.skill文件(自动创建.skills/packages/)scripts/quick_validate.py— skill 基础结构快速校验scripts/utils.py— 公共工具函数(frontmatter 解析、路径解析等)
Finish
子技能完成内容工作后,不要自己做发布。
统一回到仓库根目录执行:
bash skills-manager/scripts/finalize_manual_edits.sh --skill-id <id> --publish --push