v0.6.1
版本语义判断(每次发版重做一遍,不照抄上次):本轮未改任何 skill 的指令正文,name 与 description 一字未动,.progress.json 格式与落盘布局不变,存量教材项目照常续写 → 不是 MAJOR。含 SkillHub 第四个分发渠道接入,按 [0.2.0](plugin 化分发)、[0.3.0](新增 Codex 与 WorkBuddy 两宿主)的先例本可定 MINOR;定 PATCH 是明确选择,记下依据备查:那两轮改的是仓库如何被装载(新增六份清单、装法与目录对照全变),本轮 skills/ 主体只多了四个在三宿主处被静默忽略的 frontmatter 字段,skill 能力零增量、用户侧行为完全不变;且十处版本号已随 displayName 修复升至 0.6.1 并在平台上架生效,改判 MINOR 需重发一轮审核。
Added
- SkillHub(skillhub.cn)作为第四个分发渠道——决策与被否决的替代方案见 ADR 0011。它与前三个宿主的机制不同:元数据只从 SKILL.md frontmatter 读(
slug/version/displayName缺一个就拒绝发布),且一次只发一个 skill 文件夹、平台侧没有"整体安装"概念。5 个skills/*/SKILL.md各加slug/displayName/version/summary四个字段;skillhub publish对 5 个 skill 的--dry-run本地预检全部通过(textbook@0.6.0等),2026-09-02 5 个全部上架并过审生效(@user_6733bad6命名空间;发布依赖账号实名认证与 API Token,这两步只能由人在浏览器完成,无法纳入 CI) slug必须逐字等于目录名,这是本轮唯一不可逆的约定。CLI 安装落盘为<install_root>/<slug>/(同级目录),只有 slug 与目录名一致,仓库里 45 条../<skill-name>/references/xxx.md跨 skill 引用才解析得到;5 个 slug 上架前经查询全部未被占用,不需要加 handle 后缀。ADR 0008 的"整体安装不可拆分"在该平台无法由机制保证,降级为 5 份summary里的一句"需与其余 skill 同级安装"——这是接受该渠道的已知代价validate_skills.py新增validate_skill_versions:把 5 个 SKILL.md 的version钉在.claude-plugin/plugin.json上。版本真相的副本因此从 5 处涨到 10 处(SkillHub 从 SKILL.md 读、其余三宿主从清单读),不锁住就会出现"清单升了、SkillHub 上还是旧版且无人报错"。配套 4 个单测(版本一致 / 单个漂移 / 缺 version / 无 skills 目录不报错),单测总数 52 → 56
Changed
-
frontmatter 白名单从"Claude Code 会读的字段"扩为四宿主并集,加入
slug、displayName、summary。这三个字段对其余三宿主无副作用(被静默忽略);白名单的原意是"防手误写入无效字段",而它们不是手误,是第四个渠道的必填项 -
发版流程的升版口径从"五处"改为"十处"(CONTRIBUTING.md 发版流程、CLAUDE.md 分发与硬约束两节同步)。README 的 version badge 仍是唯一没有脚本守着的那一处
-
5 个 skill 全部过审后补上 README 的 SkillHub 安装入口,并把首次上架的端到端实测结论写进 ADR 0011 与 CLAUDE.md。实测(CLI 2026.8.5)确认了两件此前只从源码推断的事:5 个装进同一个
--dir后 18 条唯一跨 skill 引用全部解析成功;装回来的内容与仓库skills/逐字一致(平台只多塞一个记录 slug/version/ownerId 的_meta.json),ADR 0011 拒绝"临时注入"那条路的理由由此成立。只装 2 个时../textbook-chapter/references/chapter-template.md当场解析失败——断链是实测可复现的默认结果,不是理论风险 -
记下两个官方文档没写的坑:
skillhub install加--namespace会多套一层@<handle>/目录,而宿主只扫skills/*/SKILL.md这一层,多一层就一个都发现不到且无任何报错(与 README 早先记下的 WorkBuddy「别把skills/整体套进去」同类);重复安装报Target exists,更新需--force或skillhub upgrade -
4 个子 skill 的
displayName统一改为「教材写作·」前缀(教材大纲设计→教材写作·大纲设计,单章正文 / 习题生成 / 项目初始化同理;主 skill 保持教材写作流水线)。上架后发现搜「教材写作」只搜得到主 skill 一个,其余 4 个连 top-100 都不进——直接探测api.skillhub.cn/api/v1/search测出了机制:只有slug与displayName参与召回(summary/description/tags全部不参与,实测搜只写在 summary 里的「四段式」「UbD」「独立习题」「目录骨架」一律 0 命中,搜别人 tags 里的k12同样 0 命中),中文不分词、按整串子串匹配(教材 写作带空格 0 命中,教材写作技能也 0 命中),前缀匹配得分远高于中间子串(写作流水线命中 textbook 但 score 0.038 排 #56,教材写作前缀命中得 0.0486 排 #3)。所以能动的杠杆只有displayName一个——slug按 ADR 0011 已发布不可改,改了所有已装用户的跨 skill 引用当场断链 -
排序 score 主要吃下载量,召回不足时平台用热门 skill 填充列表(搜「教材写作」的 #1 是与教材无关、下载 115 万的
self-improving-agent)。按实测分数分布预测:改名后 5 个落在 #3 与 #7–#10,默认 20 条一屏可见。两件做不到的写在这里免得下次重试:那几个热度填充项挤不掉;搜「教材」仍进不了前 20(我们 dl=2~4,纯热度压制,只能靠真实使用量涨)。搜「写教材」也放弃了——要同时含「写教材」和「教材写作」两个连续串,名字会变得没法看 -
由此新增一条命名规矩:新增 skill 的
displayName必须以「教材写作」开头,且这四个字连续不被分隔符打断(用·,写成「教材·写作大纲」即前功尽弃)。校验脚本没有守这条,靠 CLAUDE.md 与 ADR 0011 记着 -
tags虽在skillhub publish的 payload 里(读 frontmatter 的tags列表),但实测不参与检索,故未加——为零收益给 frontmatter 白名单开第 11 个字段不划算。顺带记一笔:平台把主 skill 自动归到category: ai-agent(其余 4 个是education),分类浏览里找不到它,暂未处理
Notes
- 本轮未改任何 skill 的指令正文,
description与name一字未动,新增字段在三宿主处均被静默忽略——无行为变更,故未重跑 evals(按 CLAUDE.md 影响半径表,改动落在scripts/、docs/与元数据层,CI 绿即可) displayName改动同理未重跑 evals:该字段只被 SkillHub 读取用于展示与检索,三宿主静默忽略,既不参与 skill 行为也不参与宿主触发(宿主读的是name/description,二者一字未动)