sn-update について
sn-updateは、上流のSenseNova-Skillsからインストール済みのsn-*スキルを更新するスキルです。OpenClawまたはHermesのスキルディレクトリを管理するユーザー向けに、スキルごとにバージョンを比較し、更新前に既存ファイルをバックアップします。
主な機能
- 01上流リポジトリからスキルを同期
- 02スキル単位でバージョンマーカーを比較
- 03対象指定や強制再インストールに対応
- 04更新前に既存スキルをバックアップ
- 05バックアップを最大3ディレクトリ保持
活用シーン
- 01インストール済みsn-*スキルを更新
- 02指定したスキルだけを更新
- 03スキルを強制的に再インストール
- 04バックアップディレクトリから復元
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ opensensenova/ sensenova-skills --skill sn-updateインストール後、Claude Code で/sn-updateを入力して読み込まれたか確認します。
詳細
sn-update
インストール済みの sn-* スキルをアップストリームの
SenseNova-Skillsから更新します。
対象範囲を決める
- リストが指定されていない場合 → アップストリームのすべての
sn-*スキルを対象にします。 - 特定のスキルが指定された場合 → それらのみを対象にします。対象を追加しないでください。
- 指定されたスキルがアップストリームに存在しない場合 → エラーとして提示し、停止します。
- ユーザーが「force / 强制」と指定した場合 → 最新状態でも再インストールします。
対象エージェントを決める
存在するディレクトリを確認します。
~/.openclaw/skills/ | ~/.hermes/skills/ | 対象 |
|---|---|---|
| 存在 | 存在しない | openclaw |
| 存在しない | 存在 | hermes |
| 存在 | 存在 | ユーザーに確認する — 無断で両方に書き込まないでください |
| 存在しない | 存在しない | インストール先が見つからないため、停止します |
アップストリームリポジトリを同期する
永続キャッシュの場所は ~/.cache/sn-update/repo/ です。デフォルト URL:
https://github.com/OpenSenseNova/SenseNova-Skills.git。ユーザーは
フォークの URL で上書きできます。
- 初回実行:blob のダウンロードを実際に制限する場合は、
--filter=blob:none --no-checkoutを指定して部分クローンを行い、選択したskills/<name>のパスだけを sparse-checkout してからコピーします。--filter=blob:noneだけでは、完全な作業ツリーをチェックアウトした際にキャッシュが小さく保たれる わけではありません。そのチェックアウトでは、必要な blob のほとんど、またはすべてが ダウンロードされます。ただし、SHA クエリに必要な履歴メタデータは保持されます。 - 2 回目以降の実行:フェッチしてアップストリームのデフォルトブランチに
hard-reset し、コピー前に要求された
skills/<name>のパスだけを対象に sparse-checkout を再適用します。sn-*バンドル全体を更新する場合は、スキルの blob のほとんど、またはすべてがダウンロードされることを想定してください。 - URL が変更された場合:キャッシュの
originが指定された URL と異なる場合は、 削除して再クローンします。
スキルごとにバージョンを比較する(A → B → C)
各スキルについて、両方(インストール済みとアップストリーム)に存在する 最も優先順位の高い判定情報を使います。一致すればスキップし、異なればインストールします。
アップストリームの「バージョン」はサブツリーごとのコミット SHA です。リポジトリの HEAD を 使うと、無関係なスキルも更新されていないのに古いと判定されるためです。
git -C <cache> log -1 --format=%H -- skills/<skill-name>
- A —
.sn-versionマーカー:インストール済みスキル内にある 1 行のファイルで、 前回のインストール時の SHA を保持します。 - B —
.sn-releaseマーカー(フォールバック):アップストリームのタグ名を保持する 1 行のファイルです。git describe --tags --abbrev=0の結果と比較します。 - C —
SKILL.mdのフロントマターにある任意のversion:フィールド:両側の YAML から 解析しますが、フォーク、またはこのフィールドを明示的に追加したスキルに限ります。 どちらか一方に存在しない場合、C は適用されません。 - 利用できる情報がない場合 → 古いものとして扱い、インストールします。
今後の実行で A を利用できるように、インストール時には必ず .sn-version を書き込みます。
バックアップを作成してインストールする
「インストール」と判定された各スキルについて:
- 既存の
<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/の下にあり、 エージェントのランタイムがアクセスできない権限になっている場合があります。また、 一部のランタイムはシンボリックリンク経由で解決されるスキルの読み込みを拒否します。 必ず再帰的に実コピーし、インストール先のツリーが自己完結し、エージェントの スキルディレクトリに所有されるようにしてください。- 新しいコピー内に、アップストリームのサブツリー SHA を記載した
.sn-versionを書き込みます。
バックアップ先が空になった場合(すべて新規インストールの場合)は、削除してください。
バックアップツリーは skills/ の隣接ディレクトリに配置してください。skills/ の中に
.bak フォルダーを作成してはいけません。多くのエージェントランタイムは skills/
ディレクトリ全体をスキャンするため、古い重複スキルも読み込んでしまいます。
バックアップの保持数を制限する
各実行後、エージェントごとのバックアップルートを最大 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- スキルの削除を求められた場合* — このスキルの役割ではありません。断り、ロールバックする場合は
~/.<agent>/skills_backup/を案内します。 - ユーザーが開発リポジトリにいて、「sn スキルを更新して」と求めた場合 — エージェントへのインストール先にプッシュするという意味です。通常どおり実行します。このスキルが操作するのはキャッシュとエージェントのインストール先ディレクトリのみで、開発用チェックアウトには触れません。
sn-update自体を更新する場合 — 問題ありません。新しいコピーは次回の実行時に反映されます。