# Sn Update

Update SenseNova Skills (the sn-* bundle) inside an OpenClaw or hermes-agent install.

- Repository: https://github.com/OpenSenseNova/SenseNova-Skills (6002 stars)
- Category: AI and agents
- License: MIT
- Last updated: 2026-10-29
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add OpenSenseNova/SenseNova-Skills --skill sn-update -g -a claude-code -y`
Codex: `npx skills add OpenSenseNova/SenseNova-Skills --skill sn-update -g -a codex -y`
Cursor: `npx skills add OpenSenseNova/SenseNova-Skills --skill sn-update -g -a cursor -y`
Gemini CLI: `npx skills add OpenSenseNova/SenseNova-Skills --skill sn-update -g -a gemini-cli -y`

## Description

Update SenseNova Skills (the sn-* bundle) inside an OpenClaw or hermes-agent install. ALWAYS use this skill when the user says any of: "update SenseNova skills", "update SN skills", "更新 sensenova skills", "更新 sn skills", "刷新 sn-*", "升级 sn-* skills", or names a specific sn-* skill to update (e.g. "更新 sn-ppt-standard", "refresh sn-image-base"). Default scope is the whole sn-* bundle; if the user names specific skills, update ONLY those.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# sn-update

Refresh installed `sn-*` skills from upstream
[SenseNova-Skills](https://github.com/OpenSenseNova/SenseNova-Skills).

---

## Decide the scope

- No list given → every `sn-*` skill upstream.
- Specific skills named → only those. Don't expand.
- A named skill missing upstream → surface as error and stop.
- User said "force / 强制" → re-install even when up-to-date.

---

## Decide the target agent

Check which directories exist:

| `~/.openclaw/skills/` | `~/.hermes/skills/` | Target |
|---|---|---|
| exists | absent | openclaw |
| absent | exists | hermes |
| exists | exists | **ask the user**, never silently dual-write |
| absent | absent | no install found, stop |

---

## Sync the upstream repo

Persistent cache at `~/.cache/sn-update/repo/`. Default URL:
`https://github.com/OpenSenseNova/SenseNova-Skills.git`. User may override
with a fork URL.

- **First run**: if you want to actually limit blob download, use partial
  clone with `--filter=blob:none --no-checkout`, then sparse-checkout only
  the selected `skills/<name>` paths before copying them. `--filter=blob:none`
  alone does **not** keep the cache small if the full worktree is checked out;
  that checkout will still download most or all needed blobs. It still
  preserves history metadata for SHA queries.
- **Subsequent runs**: fetch + hard-reset to the upstream default branch, and
  re-apply sparse-checkout for only the requested `skills/<name>` paths before
  copying. If updating the whole `sn-*` bundle, expect most/all skill blobs to
  be downloaded.
- **URL changed**: if cache's `origin` differs from the requested URL,
  delete and re-clone.

---

## Compare versions per skill (A → B → C)

For each skill, pick the highest-precedence signal present on **both**
sides (installed + upstream); equal → skip, differ → install.

Upstream "version" is the per-subtree commit SHA, using repo HEAD would
mark unrelated skills as stale every time:

The rest: https://github.com/OpenSenseNova/SenseNova-Skills/blob/HEAD/skills/sn-update/SKILL.md
