关于 sn-update
sn-update 是用于从上游 SenseNova-Skills 刷新已安装 sn-* 技能的技能,面向维护 OpenClaw 或 Hermes 技能目录的用户。它按技能比较版本,安装更新时备份旧文件,并限制备份保留数量。
主要功能
- 01从上游仓库同步技能
- 02按技能比较版本标记
- 03支持指定技能更新或强制重装
- 04更新前备份现有技能
- 05保留最多三个备份目录
适用场景
- 01刷新已安装的 sn-* 技能
- 02只更新指定技能
- 03强制重新安装技能
- 04从备份目录回滚技能
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ opensensenova/ sensenova-skills --skill sn-update安装后在 Claude Code 中输入/sn-update确认已加载。
详细介绍
sn-update
从上游
SenseNova-Skills 刷新已安装的 sn-* 技能。
确定范围
- 未提供列表 → 上游的所有
sn-*技能。 - 指定了技能 → 仅限这些技能,不要扩大范围。
- 上游缺少指定的技能 → 显示错误并停止。
- 用户说了“force / 强制” → 即使已是最新版本,也重新安装。
确定目标 Agent
检查哪些目录存在:
~/.openclaw/skills/ | ~/.hermes/skills/ | 目标 |
|---|---|---|
| 存在 | 不存在 | openclaw |
| 不存在 | 存在 | hermes |
| 存在 | 存在 | 询问用户 — 绝不静默地同时写入两处 |
| 不存在 | 不存在 | 未找到安装,停止 |
同步上游仓库
持久缓存位于 ~/.cache/sn-update/repo/。默认 URL:
https://github.com/OpenSenseNova/SenseNova-Skills.git。用户可以改用 Fork URL。
- 首次运行:如果确实要限制 blob 下载量,请使用
--filter=blob:none --no-checkout进行部分克隆,然后仅对选定的skills/<name>路径执行 sparse-checkout,再进行复制。仅使用--filter=blob:none并不能在检出完整工作树时保持缓存较小;检出仍会下载大部分或全部所需 blob。此方法仍会保留用于 SHA 查询的历史元数据。 - 后续运行:获取更新并硬重置到上游默认分支,然后在复制前重新应用 sparse-checkout,仅包含所请求的
skills/<name>路径。如果要更新整个sn-*技能包,预计会下载大部分或全部技能 blob。 - URL 已更改:如果缓存的
origin与请求的 URL 不同,则删除缓存并重新克隆。
比较每项技能的版本(A → B → C)
对于每项技能,选择安装版本和上游版本两侧都存在的优先级最高的信号;相同 → 跳过,不同 → 安装。
上游“版本”是每个子树的 commit SHA——使用仓库 HEAD 会导致每次无关技能发生变化时,其他技能也被标记为过期:
git -C <cache> log -1 --format=%H -- skills/<skill-name>
- A —
.sn-version标记:安装技能目录中的单行文件,保存上次安装时的 SHA。 - B —
.sn-release标记(后备方案):保存上游标签名称的单行文件。与git describe --tags --abbrev=0的结果比较。 - C — SKILL.md frontmatter 中可选的
version:字段:在两侧解析 YAML,但仅适用于 Fork 或明确添加此字段的技能。任一侧缺少该字段时,C 不适用。 - 没有可用信号 → 视为过期并安装。
安装时始终写入 .sn-version,以便后续运行使用 A。
安装并备份
对每项标记为“安装”的技能:
- 将任何现有的
<agent-skills>/<skill-name>/移动(而非复制)到本次运行中所有技能共用的单个带时间戳的备份目录:~/.<agent>/skills_backup/<UTC-timestamp>/<skill-name>/(例如:2026-04-30T15-29-07Z)。 - 将
<cache>/skills/<skill-name>/复制到<agent-skills>/<skill-name>/。 绝不使用符号链接(ln -s)指向缓存。缓存位于~/.cache/下,Agent 运行时可能无权遍历该目录,而且有些运行时拒绝加载通过符号链接解析的技能。始终执行真实的递归复制,确保已安装目录树独立完整,且归属 Agent 技能目录。 - 在新副本中写入包含上游子树 SHA 的
.sn-version。
如果备份目录为空(所有目标都是全新安装),则将其删除。
备份目录树必须与 skills/ 并列,绝不能是其中的 .bak 文件夹——大多数 Agent 运行时会扫描整个 skills/ 目录,并可能加载过期的重复项。
强制执行备份保留策略
每次运行后,将每个 Agent 的备份根目录裁剪至最多 3 个备份目录。按字典序排列时间戳;保留最新的 3 个,删除其余目录。即使本次运行没有生成备份,也要执行此操作。
向用户报告
按状态分组,简明扼要:
Updated (3): sn-ppt-standard, sn-image-base, sn-deep-research
Already up-to-date (5): sn-ppt-creative, sn-ppt-doctor, ...
Backup: ~/.openclaw/skills_backup/2026-04-30T15-29-07Z/
- 如果没有备份任何内容,请省略
Backup:。 - 仅当用户要求查看详情时,才显示 SHA 对(
abc1234 → def5678)。 - 错误单独占一行,绝不要将其隐藏在成功摘要中。
边缘情况
- 用户要求删除 sn- skills* — 这不属于此技能的职责。拒绝;如果用户想回滚,请指向
~/.<agent>/skills_backup/。 - 用户位于开发仓库中,并要求“更新 sn skills” — 他们指的是推送到其 Agent 安装目录。照常操作;此技能只会触及缓存和 Agent 安装目录,绝不会触及开发检出目录。
sn-update更新自身 — 没问题;新副本会在下一次调用时生效。
评论
支持 Markdown