/sn-update
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-*
$ npx -y skills add OpenSenseNova/SenseNova-Skills --skill sn-update --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/sn-update
Context preview
The summary Claude sees to decide when to auto-load this skill.
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.md
sn-update.SKILL.mdname: sn-update
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.
metadata:
project: SenseNova-Skills
tier: 1
category: meta
user_visible: true
triggers:
- "sn-update"
- "更新 sn"
- "更新 sensenova"
- "update sn skills"
- "update SN skills"
- "更新 sn skills"
- "刷新 sn-*"
- "刷新 sn skills"
- "更新 sn-ppt-standard"
- "refresh sn-image-base"
- "update sensenova skills"
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:
git -C <cache> log -1 --format=%H -- skills/<skill-name>
- **A — `.sn-version` marker**: one-line file inside the installed skill
holding the SHA from its last install.
- **B — `.sn-release` marker** (fallback): one-line file holding the
upstream tag name. Compare against `git describe --tags --abbrev=0`.
- **C — optional `version:` field in SKILL.md frontmatter**: parse from
YAML on both sides, but only for forks or skills that explicitly add this field. If either side lacks it, C does not apply.
- **Nothing usable** → treat as stale and install.
Always write `.sn-version` on install so future runs can use A.
---
Install with backup
For each skill flagged "install":
1. **Move** (not copy) any existing `<agent-skills>/<skill-name>/` into a single timestamped backup bucket shared by all skills in this run: `~/.<agent>/skills_backup/<UTC-timestamp>/<skill-name>/` (e.g. `2026-04-30T15-29-07Z`). 2. **Copy** `<cache>/skills/<skill-name>/` → `<agent-skills>/<skill-name>/`. **Never symlink** (`ln -s`) from the cache. The cache lives under `~/.cache/` with permissions the agent runtime may not be able to traverse, and some runtimes refuse to load skills resolved through symlinks. Always do a real recursive copy so the installed tree is self-contained and owned by the agent skills dir. 3. **Write `.sn-version`** with the upstream subtree SHA inside the new copy.
If the bucket ends up empty (all targets were fresh installs), remove it.
The backup tree is a **sibling** of `skills/`, never a `.bak` folder inside it — most agent runtimes scan the whole `skills/` directory and would pick up stale duplicates.
---
Enforce backup retention
After every run, prune the per-agent backup root to **at most 3** buckets. Timestamps sort lexicographically; keep the newest 3, delete the rest. Run this even when the current run produced no backup of its own.
---
Report to the user
Group by status, keep it short:
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/
- Omit `Backup:` when nothing was backed up.
- Show SHA pairs (`abc1234 → def5678`) only if the user asks for detail.
- Errors get their own line — never bury them in a success summary.
---
Edge cases
- **Asks to delete sn-* skills** — not this skill's job. Decline; point at
`~/.<agent>/skills_backup/` if they want to roll back.
- **User is in the dev repo** and asks to "update sn skills" — they mean
push to their agent install. Proceed normally; this skill only touches the cache and the agent install dirs, never the dev checkout.
- **`sn-update` updating itself** — fine; the new copy takes effect on
the next invocation.
Read more
name: sn-update 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. metadata: project: SenseNova-Skills tier: 1 category: meta user_visible: true triggers: - "sn-update" - "更新 sn" - "更新 sensenova" - "update sn skills" - "update SN skills" - "更新 sn skills" - "刷新 sn-*" - "刷新 sn skills" - "更新 sn-ppt-standard" - "refresh sn-image-base" - "update sensenova skills"
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:
git -C <cache> log -1 --format=%H -- skills/<skill-name>
- **A — `.sn-version` marker**: one-line file inside the installed skill
holding the SHA from its last install.
- **B — `.sn-release` marker** (fallback): one-line file holding the
upstream tag name. Compare against `git describe --tags --abbrev=0`.
- **C — optional `version:` field in SKILL.md frontmatter**: parse from
YAML on both sides, but only for forks or skills that explicitly add this field. If either side lacks it, C does not apply.
- **Nothing usable** → treat as stale and install.
Always write `.sn-version` on install so future runs can use A.
---
Install with backup
For each skill flagged "install":
1. **Move** (not copy) any existing `<agent-skills>/<skill-name>/` into a single timestamped backup bucket shared by all skills in this run: `~/.<agent>/skills_backup/<UTC-timestamp>/<skill-name>/` (e.g. `2026-04-30T15-29-07Z`). 2. **Copy** `<cache>/skills/<skill-name>/` → `<agent-skills>/<skill-name>/`. **Never symlink** (`ln -s`) from the cache. The cache lives under `~/.cache/` with permissions the agent runtime may not be able to traverse, and some runtimes refuse to load skills resolved through symlinks. Always do a real recursive copy so the installed tree is self-contained and owned by the agent skills dir. 3. **Write `.sn-version`** with the upstream subtree SHA inside the new copy.
If the bucket ends up empty (all targets were fresh installs), remove it.
The backup tree is a **sibling** of `skills/`, never a `.bak` folder inside it — most agent runtimes scan the whole `skills/` directory and would pick up stale duplicates.
---
Enforce backup retention
After every run, prune the per-agent backup root to **at most 3** buckets. Timestamps sort lexicographically; keep the newest 3, delete the rest. Run this even when the current run produced no backup of its own.
---
Report to the user
Group by status, keep it short:
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/
- Omit `Backup:` when nothing was backed up.
- Show SHA pairs (`abc1234 → def5678`) only if the user asks for detail.
- Errors get their own line — never bury them in a success summary.
---
Edge cases
- **Asks to delete sn-* skills** — not this skill's job. Decline; point at
`~/.<agent>/skills_backup/` if they want to roll back.
- **User is in the dev repo** and asks to "update sn skills" — they mean
push to their agent install. Proceed normally; this skill only touches the cache and the agent install dirs, never the dev checkout.
- **`sn-update` updating itself** — fine; the new copy takes effect on
the next invocation.
The SenseNova model family plugs directly into agent runtimes such as OpenClaw and hermes-agent, with the skills in this repository extending the models with concrete, end-to-end office capabilities.
Repo: OpenSenseNova/SenseNova-Skills
Other skills on sensenova-skills.
- /sn-da-excel-workflow
Excel 数据分析多步编排器。覆盖:(1) 读取多 Sheet Excel 文件并统计行数,(2) 大文件检测(≥10k 行自动 Parquet 优化),(3) 数据清洗(缺失值、文本标准化、无效字符),(4) 条件筛选与分类提取,(5) 跨 Sheet 统计聚合,(6) 导出 Excel/CSV 并提供下载链接。覆盖从数据读取到报告生成全流程,按步骤编排 capability 子 skill。**遇到以下任一情况就主动使用本 skill,不要自行写几行 pandas 就回答**:①用户出现触发词:Excel 分析 / 表格分析 / 数据分析 /
Open skill - /category-coloring
当Excel文件总行数超过1万行时,通过转换为Parquet格式提升读取性能,提取目标指标并计算最大值,最后将结果输出为Excel并对特定行进行高亮标注。
Open skill - /duplicate-value-coloring
对比Excel多表中的特定系数并对异常值进行颜色标记。
Open skill - /outlier-coloring
识别 Excel 中的超限数值与错误单元格并进行高亮标注。
Open skill - /threshold-cell-coloring
根据Excel总行数自动切换Parquet加速读取,计算特定维度的时间序列平均值,并使用openpyxl输出带有条件格式(如低于均值标绿)和自定义样式的分析报告。
Open skill - /top-value-coloring
根据数据规模动态选择处理策略,对多表数据进行合并、统计筛选,并利用 openpyxl 实现关键指标的自动化样式高亮与格式化导出。
Open skill

