mcpField
S
sn-update

sn-update

github.com/opensensenovaAgent 工作流6.0k109 次安装2 天前更新
代码仓库

关于 sn-update

sn-update 是用于从上游 SenseNova-Skills 刷新已安装 sn-* 技能的技能,面向维护 OpenClaw 或 Hermes 技能目录的用户。它按技能比较版本,安装更新时备份旧文件,并限制备份保留数量。

主要功能

  1. 01从上游仓库同步技能
  2. 02按技能比较版本标记
  3. 03支持指定技能更新或强制重装
  4. 04更新前备份现有技能
  5. 05保留最多三个备份目录

适用场景

  1. 01刷新已安装的 sn-* 技能
  2. 02只更新指定技能
  3. 03强制重新安装技能
  4. 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。


安装并备份

对每项标记为“安装”的技能:

  1. 将任何现有的 <agent-skills>/<skill-name>/ 移动(而非复制)到本次运行中所有技能共用的单个带时间戳的备份目录: ~/.<agent>/skills_backup/<UTC-timestamp>/<skill-name>/ (例如:2026-04-30T15-29-07Z)。
  2. 将 <cache>/skills/<skill-name>/ 复制到 <agent-skills>/<skill-name>/。 绝不使用符号链接(ln -s)指向缓存。缓存位于 ~/.cache/ 下,Agent 运行时可能无权遍历该目录,而且有些运行时拒绝加载通过符号链接解析的技能。始终执行真实的递归复制,确保已安装目录树独立完整,且归属 Agent 技能目录。
  3. 在新副本中写入包含上游子树 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