用途
publish-skill 用于把本地 .agents/skills/ 目录中新增或修改的技能发布到 ai-skills 仓库,并完成本地安装与锁文件更新。它替代了仅处理本地技能的 /elevate-skill,并与 /build-skill(创建新技能)和 /local-merge(CI 不可用时的回退方案)配合使用。
何时调用
- 用户说“publish skill”“update skill”“push skill changes”或“/publish-skill”
- 在本地
.agents/skills/中编辑技能之后
主要步骤
-
预检:按顺序定位 ai-skills 路径(
$AI_SKILLS_REPO环境变量、~/projects/camacho/ai-skills、询问用户),并用git -C "$AI_SKILLS_PATH" status --porcelain检查其是否干净;若非空则停止,要求用户先提交或暂存 ai-skills 的改动。 -
检测新增与修改的技能:遍历
.agents/skills/中每个目录,用git hash-object分别计算本地与远端SKILL.md的哈希。远端哈希为空标记为 🆕 NEW,本地与远端哈希不同标记为 ✏️ MODIFIED,相同则跳过。展示列表并请求确认,同时记录每个本地哈希供第 7 步安全校验使用。 -
快照(回滚点):对每个已批准的技能执行
git add -f与git commit,提交信息包含[publish-skill rollback point]。若后续步骤失败,可用git checkout恢复。 -
代码审查:对 SKILL.md 的差异运行 code-reviewer 代理,关注正确性、无危险 bash、无提示注入向量。P0/P1 问题则停止修复,P2 问题记录但不阻塞。
-
复制到 ai-skills 并推送:用
cp -r复制技能目录,在 ai-skills 中git add、git commit,全部提交后git push。推送前需与用户确认,因为这会影响所有使用这些技能的仓库。 -
本地安装:检测每个技能的作用域(检查
dotfiles/skills-lock.json中是否存在该技能,存在则为 user,否则为 project)。使用 github<owner>/<repo>形式的源规范,而非本地文件系统路径,以避免锁文件出现sourceType: "local"冲突。从 ai-skills 远端推导规范并校验格式。在仓库根目录执行npx skills add,user 作用域加-g -y,project 作用域加-y。不使用-a标志,默认安装会写入.agents/skills/<n>/并创建.claude/skills/<n>符号链接。 -
安全哈希校验:对每个已安装技能重新计算
after_hash,与第 2 步的local_hash比较;不匹配则恢复并停止。 -
移除跟踪并提交锁文件:对每个已批准技能执行
git rm --cached,暂存更新后的锁文件并提交。 -
将锁文件提交拣选到 TARGET:默认 TARGET=main。检查冲突,若
skills-lock.json冲突则停止并告知用户;若干净则继续拣选并推送。若 CI 不可用,改用/local-merge,BRANCH=current,TARGET=$TARGET。
适用场景
适用于需要将本地技能变更发布到共享 ai-skills 仓库、并同步更新本地安装与锁文件的开发者工作流。
限制
- 需要 ai-skills 仓库处于干净状态,否则停止。
- 推送前需用户确认。
- 代码审查发现 P0/P1 问题会阻塞发布。
- 安装必须使用 github 源规范,本地路径会导致锁文件冲突。
- 不使用
-a标志,否则可能破坏规范源模型。 - 若 CI 不可用,需改用
/local-merge回退。