Skip to content

更新技能:保持技能与源仓库同步

学完你能做什么

本课教你如何让 OpenSkills 技能始终保持最新版本。通过 OpenSkills update 命令,你能够:

  • 一键更新所有已安装技能
  • 只更新指定的几个技能
  • 理解不同安装来源的更新差异
  • 排查更新失败的原因

你现在的困境

技能仓库在不断更新——作者可能修复了 bug、添加了新功能、改进了文档。但你安装的技能还是旧版本。

你可能已经遇到过这些情况:

  • 技能文档说"支持某个功能",但你的 AI 代理说不知道
  • 技能更新了更好的错误提示,但你看到的还是旧的
  • 安装时的 bug 已经修复,但你还在受影响

每次删除再重新安装太麻烦了——你需要一个高效的更新方式。

什么时候用这一招

使用 update 命令的典型场景:

场景操作
发现技能有更新执行 openskills update
只更新几个技能openskills update skill1,skill2
本地开发的技能测试从本地路径更新
从 GitHub 仓库更新自动 git clone 最新代码

更新频率建议

  • 社区技能:每月更新一次,获取最新改进
  • 自己开发的技能:每次修改后手动更新
  • 本地路径技能:每次改完代码后更新

🎒 开始前的准备

在开始之前,确认已完成:

核心思路

OpenSkills 的更新机制很简单:

每次安装时记录来源信息 → 更新时从原始来源重新复制

为什么需要重新安装?

旧版本的技能(安装时未记录来源)无法更新。这时需要重新安装一次,OpenSkills 会记住来源,之后就能自动更新了。

三种安装来源的更新方式

来源类型更新方式适用场景
本地路径直接从本地路径复制开发自己的技能
git 仓库克隆最新代码到临时目录从 GitHub/GitLab 安装
GitHub shorthand转换为完整 URL 后克隆从 GitHub 官方仓库安装

更新时会跳过没有来源元数据的技能,并列出需要重新安装的技能名。

跟我做

第 1 步:查看已安装技能

先确认有哪些技能可以更新:

bash
npx openskills list

你应该看到:已安装技能列表,包括名称、描述和安装位置标签(project/global)

第 2 步:更新所有技能

最简单的方式是更新所有已安装技能:

bash
npx openskills update

你应该看到:逐个更新技能,每个技能显示更新结果

✅ Updated: git-workflow
✅ Updated: check-branch-first
Skipped: my-old-skill (no source metadata; re-install once to enable updates)
Summary: 2 updated, 1 skipped (3 total)
跳过的技能含义

如果看到 Skipped: xxx (no source metadata),说明这个技能是在更新功能加入之前安装的。需要重新安装一次才能启用自动更新。

第 3 步:更新指定技能

如果你只想更新特定的几个技能,传入技能名(逗号分隔):

bash
npx openskills update git-workflow,check-branch-first

你应该看到:只更新了指定的两个技能

✅ Updated: git-workflow
✅ Updated: check-branch-first
Summary: 2 updated, 0 skipped (2 total)

第 4 步:更新本地开发的技能

如果你正在本地开发技能,可以从本地路径更新:

bash
npx openskills update my-skill

你应该看到:技能从你安装时的本地路径重新复制

✅ Updated: my-skill
Summary: 1 updated, 0 skipped (1 total)

本地开发工作流

开发流程:

  1. 安装技能:openskills install ./my-skill
  2. 修改代码
  3. 更新技能:openskills update my-skill
  4. 同步到 AGENTS.md:openskills sync

第 5 步:处理更新失败

如果某些技能更新失败,OpenSkills 会显示详细原因:

bash
npx openskills update

可能看到的情况

Skipped: git-workflow (git clone failed)
Skipped: my-skill (local source missing)
Missing source metadata (1): old-skill
Clone failed (1): git-workflow

对应解决方法

错误信息原因解决方法
no source metadata旧版本安装重新安装:openskills install <source>
local source missing本地路径被删除恢复本地路径或重新安装
SKILL.md missing at local source本地文件被删除恢复 SKILL.md 文件
git clone failed网络问题或仓库不存在检查网络或仓库地址
SKILL.md not found in repo仓库结构变化联系技能作者或更新 subpath

检查点 ✅

确认你已经学会了:

  • [ ] 能使用 openskills update 更新所有技能
  • [ ] 能使用逗号分隔更新指定技能
  • [ ] 理解"跳过"技能的含义和解决方法
  • [ ] 知道本地开发技能的更新流程

踩坑提醒

❌ 常见错误

错误正确做法
看到跳过就不管了根据提示重新安装或修复问题
每次都删除再安装使用 update 命令更高效
不知道技能从哪装的openskills list 查看来源

⚠️ 注意事项

更新会覆盖本地修改

如果你直接修改了安装目录下的技能文件,更新时这些修改会被覆盖。正确做法是:

  1. 修改源文件(本地路径或仓库)
  2. 然后执行 openskills update

符号链接技能需要特殊处理

如果技能是通过符号链接安装的(见 符号链接支持),更新会重新创建链接,不会破坏符号链接关系。

全局和项目技能需要分别更新

bash
# 只更新项目技能(默认)
openskills update

# 更新全局技能需要单独处理
# 或使用 --universal 模式统一管理

本课小结

本课学习了 OpenSkills 的更新功能:

  • 批量更新openskills update 一键更新所有技能
  • 指定更新openskills update skill1,skill2 更新特定技能
  • 来源感知:自动识别本地路径和 git 仓库
  • 错误提示:详细说明跳过的原因和解决方法

更新功能让技能保持最新版本,确保你使用的技能总是包含最新的改进和修复。

下一课预告

下一课我们学习 删除技能

你会学到:

  • 如何使用交互式 manage 命令删除技能
  • 如何使用 remove 命令脚本化删除
  • 删除技能后的注意事项

附录:源码参考

点击展开查看源码位置

更新时间:2026-01-24

功能文件路径行号
更新技能主逻辑src/commands/update.ts14-150
本地路径更新src/commands/update.ts64-82
Git 仓库更新src/commands/update.ts85-125
从目录复制技能src/commands/update.ts152-163
路径安全验证src/commands/update.ts165-172
元数据结构定义src/utils/skill-metadata.ts8-15
读取技能元数据src/utils/skill-metadata.ts17-27
写入技能元数据src/utils/skill-metadata.ts29-36
CLI 命令定义src/cli.ts58-62

关键常量

  • SKILL_METADATA_FILE = '.openskills.json':元数据文件名,记录技能安装来源

关键函数

  • updateSkills(skillNames):更新指定或所有技能的主函数
  • updateSkillFromDir(targetPath, sourceDir):从源目录复制技能到目标目录
  • isPathInside(targetPath, targetDir):验证安装路径安全性(防止路径遍历)
  • readSkillMetadata(skillDir):读取技能的元数据
  • writeSkillMetadata(skillDir, metadata):写入/更新技能的元数据

业务规则

  • BR-5-1:默认更新所有已安装技能(update.ts:37-38)
  • BR-5-2:支持逗号分隔的技能名列表(update.ts:15)
  • BR-5-3:跳过无源元数据的技能(update.ts:56-62)
  • BR-5-4:支持本地路径更新(update.ts:64-82)
  • BR-5-5:支持从 git 仓库更新(update.ts:85-125)
  • BR-5-6:验证路径安全(update.ts:156-162)