/sn-ppt-workbench
Open the AI PPT editing WebUI for previously generated SenseNova HTML slides. Use when the user asks to preview, inspect, edit, or open an existing/generated PPT deck in the WebUI/workbench without regenerating slides. Accepts an explicit deck_dir or auto-detects the newest
$ npx -y skills add OpenSenseNova/SenseNova-Skills --skill sn-ppt-workbench --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-ppt-workbench
Context preview
The summary Claude sees to decide when to auto-load this skill.
Open the AI PPT editing WebUI for previously generated SenseNova HTML slides. Use when the user asks to preview, inspect, edit, or open an existing/generated PPT deck in the WebUI/workbench without regenerating slides. Accepts an explicit deck_dir or auto-detects the newest
SKILL.md
sn-ppt-workbench.SKILL.mdname: sn-ppt-workbench
description: |
Open the AI PPT editing WebUI for previously generated SenseNova HTML slides.
Use when the user asks to preview, inspect, edit, or open an existing/generated
PPT deck in the WebUI/workbench without regenerating slides. Accepts an
explicit deck_dir or auto-detects the newest local ppt_decks entry containing
HTML pages. Does not run style/outline/page-html/export generation.
metadata:
project: SenseNova-Skills
tier: aux
category: ppt
user_visible: true
triggers:
- "sn-ppt-workbench"
- "打开 PPT 工作台"
- "打开 PPT WebUI"
- "预览已生成 PPT"
sn-ppt-workbench
Start or reuse the AI PPT editing WebUI for an existing HTML slide deck. The helper prefers Hermes/canvas/port-forward URLs when available. Without a forwarded URL, native hosts bind to localhost by default, while Docker/WSL bind to `0.0.0.0` so remote users can reach the WebUI through the host network.
Use Cases
- The user already generated a deck and asks to open the WebUI/editor/workbench.
- The user provides a `deck_dir` containing `pages/page_NNN.html` or root-level `.html` slides.
- The user says to inspect or edit previously generated slides without regenerating them.
Hard Rules
1. Do not run `sn-ppt-entry`, `sn-ppt-standard`, `page-html`, `batch-page-html`, or `export`. 2. Do not edit slide files directly. The WebUI handles user-visible editing. 3. If `deck_dir` is missing, auto-detect the newest usable deck under:
- `$(pwd)/ppt_decks`
- `~/Downloads/ppt_decks`
- `~/Repository/ppt_decks`
4. If no usable deck is found, ask the user for the absolute `deck_dir`. 5. Workbench startup is best-effort. If it skips or fails, report the reason and do not attempt generation as a fallback. 6. Prefer a forwarded/canvas URL over localhost when the user may be on SSH, IM, or another remote device.
Invocation
Use the helper directly:
python3 $SKILL_DIR/scripts/open_workbench.py --deck-dir "<deck_dir>" --agent-session-id "${HERMES_SESSION_KEY:-}"On native Windows where `python3` is unavailable:
python $SKILL_DIR/scripts/open_workbench.py --deck-dir "<deck_dir>" --agent-session-id "%HERMES_SESSION_KEY%"
If the user did not provide a deck path, let the helper auto-detect:
python3 $SKILL_DIR/scripts/open_workbench.py --agent-session-id "${HERMES_SESSION_KEY:-}"Pass same-session bridge details when available:
python3 $SKILL_DIR/scripts/open_workbench.py \
--deck-dir "<deck_dir>" \
--agent-session-id "${HERMES_SESSION_KEY:-}" \
--agent-managed 1 \
--agent-provider hermes \
--agent-transport gateway \
--webui-base-url "${HERMES_WEBUI_BASE_URL:-}" \
--gateway-base-url "${HERMES_GATEWAY_BASE_URL:-}"For non-Hermes interactive providers, pass structured bridge details instead of scraping CLI/TUI output:
python3 $SKILL_DIR/scripts/open_workbench.py \
--deck-dir "<deck_dir>" \
--agent-managed 1 \
--agent-provider openclaw \
--agent-transport rest \
--agent-base-url "${WORKBENCH_AGENT_BASE_URL:-}" \
--agent-api-key "${WORKBENCH_AGENT_API_KEY:-}"
python3 $SKILL_DIR/scripts/open_workbench.py \
--deck-dir "<deck_dir>" \
--agent-managed 1 \
--agent-provider codex \
--agent-transport acp \
--acp-command "${WORKBENCH_ACP_COMMAND:-codex-acp}"For WorkBuddy, pass `--agent-provider workbuddy` only as provider identity. Tell the user clearly that WorkBuddy currently has no supported API or ACP interface for the interactive workbench bridge, so the WebUI can show WorkBuddy status but cannot send bottom-chat modification turns back to WorkBuddy.
CLI Subcommands (direct launch fallback)
When bypassing `open_workbench.py` and invoking the workbench launcher directly, use subcommands:
node <launcher> start --deck-dir "<path>" [--port 0] [--agent-managed]
node <launcher> status --deck-dir "<path>"
node <launcher> stop --deck-dir "<path>"
The old argument-only form (no subcommand) is **deprecated** — it will print a usage error.
**Restart pitfall:** `start` silently **reuses** an existing server instance for the same `deck-dir` (response contains `"reused": true`). If you updated the workbench code, you MUST run `stop` first, then `start` — otherwise the old process keeps serving stale code:
node <launcher> stop --deck-dir "<path>"
node <launcher> start --deck-dir "<path>" --port 0
Bind Host
The workbench resolves its bind address from `--host` CLI flag → `WORKBENCH_HOST` env var → default `127.0.0.1`. When the user needs remote/LAN access, set `WORKBENCH_HOST=0.0.0.0`:
export WORKBENCH_HOST=0.0.0.0
node <launcher> start --deck-dir "<path>" --port 0
The response `url` field will then show the LAN IP instead of `127.0.0.1`.
Output Handling
Parse the single JSON line from stdout.
When `status == "ok"`, echo the returned `editor_url`, `public_url`, or `workbench.editorUrl` for existing-deck editing requests. The helper may also return `generation_url`; that URL is the generation progress page at `/progress`, while the editor is `/editor`.
PPT 编辑工作台已启动:<editor_url>
If `workbench.reused == true`, say it reused the existing server.
If `bind_host` is `0.0.0.0`, the URL is a Docker/WSL LAN fallback. Tell the user it must be reachable from their device/network; if not, ask them to provide a Hermes/canvas/port-forward URL and rerun with `--public-url`, or an explicit bind host with `--host`.
When `status == "skipped"` or `status == "failed"`, echo the `reason` field. If `reason == "nodejs_missing"`, ask whether the user wants NodeJS/dependencies installed; if they decline, do not open the WebUI. Ask for a valid `deck_dir` only if the reason says no deck was found.
Environment
The helper locates the editor launcher in this order:
1. `SENSENOVA_PPT_WORKBENCH_CLI` 2. `PPT_WORKBENCH_CLI` 3. `~/Repository/ppt-editor/src/ppt-editor/bin/sensenova-ppt-workbench.mjs` 4. `~/Repository/ppt-editor/tools/ppt-editor/bi
Read more
name: sn-ppt-workbench description: | Open the AI PPT editing WebUI for previously generated SenseNova HTML slides. Use when the user asks to preview, inspect, edit, or open an existing/generated PPT deck in the WebUI/workbench without regenerating slides. Accepts an explicit deck_dir or auto-detects the newest local ppt_decks entry containing HTML pages. Does not run style/outline/page-html/export generation. metadata: project: SenseNova-Skills tier: aux category: ppt user_visible: true triggers: - "sn-ppt-workbench" - "打开 PPT 工作台" - "打开 PPT WebUI" - "预览已生成 PPT"
sn-ppt-workbench
Start or reuse the AI PPT editing WebUI for an existing HTML slide deck. The helper prefers Hermes/canvas/port-forward URLs when available. Without a forwarded URL, native hosts bind to localhost by default, while Docker/WSL bind to `0.0.0.0` so remote users can reach the WebUI through the host network.
Use Cases
- The user already generated a deck and asks to open the WebUI/editor/workbench.
- The user provides a `deck_dir` containing `pages/page_NNN.html` or root-level `.html` slides.
- The user says to inspect or edit previously generated slides without regenerating them.
Hard Rules
1. Do not run `sn-ppt-entry`, `sn-ppt-standard`, `page-html`, `batch-page-html`, or `export`. 2. Do not edit slide files directly. The WebUI handles user-visible editing. 3. If `deck_dir` is missing, auto-detect the newest usable deck under:
- `$(pwd)/ppt_decks`
- `~/Downloads/ppt_decks`
- `~/Repository/ppt_decks`
4. If no usable deck is found, ask the user for the absolute `deck_dir`. 5. Workbench startup is best-effort. If it skips or fails, report the reason and do not attempt generation as a fallback. 6. Prefer a forwarded/canvas URL over localhost when the user may be on SSH, IM, or another remote device.
Invocation
Use the helper directly:
python3 $SKILL_DIR/scripts/open_workbench.py --deck-dir "<deck_dir>" --agent-session-id "${HERMES_SESSION_KEY:-}"On native Windows where `python3` is unavailable:
python $SKILL_DIR/scripts/open_workbench.py --deck-dir "<deck_dir>" --agent-session-id "%HERMES_SESSION_KEY%"
If the user did not provide a deck path, let the helper auto-detect:
python3 $SKILL_DIR/scripts/open_workbench.py --agent-session-id "${HERMES_SESSION_KEY:-}"Pass same-session bridge details when available:
python3 $SKILL_DIR/scripts/open_workbench.py \
--deck-dir "<deck_dir>" \
--agent-session-id "${HERMES_SESSION_KEY:-}" \
--agent-managed 1 \
--agent-provider hermes \
--agent-transport gateway \
--webui-base-url "${HERMES_WEBUI_BASE_URL:-}" \
--gateway-base-url "${HERMES_GATEWAY_BASE_URL:-}"For non-Hermes interactive providers, pass structured bridge details instead of scraping CLI/TUI output:
python3 $SKILL_DIR/scripts/open_workbench.py \
--deck-dir "<deck_dir>" \
--agent-managed 1 \
--agent-provider openclaw \
--agent-transport rest \
--agent-base-url "${WORKBENCH_AGENT_BASE_URL:-}" \
--agent-api-key "${WORKBENCH_AGENT_API_KEY:-}"
python3 $SKILL_DIR/scripts/open_workbench.py \
--deck-dir "<deck_dir>" \
--agent-managed 1 \
--agent-provider codex \
--agent-transport acp \
--acp-command "${WORKBENCH_ACP_COMMAND:-codex-acp}"For WorkBuddy, pass `--agent-provider workbuddy` only as provider identity. Tell the user clearly that WorkBuddy currently has no supported API or ACP interface for the interactive workbench bridge, so the WebUI can show WorkBuddy status but cannot send bottom-chat modification turns back to WorkBuddy.
CLI Subcommands (direct launch fallback)
When bypassing `open_workbench.py` and invoking the workbench launcher directly, use subcommands:
node <launcher> start --deck-dir "<path>" [--port 0] [--agent-managed] node <launcher> status --deck-dir "<path>" node <launcher> stop --deck-dir "<path>"
The old argument-only form (no subcommand) is **deprecated** — it will print a usage error.
**Restart pitfall:** `start` silently **reuses** an existing server instance for the same `deck-dir` (response contains `"reused": true`). If you updated the workbench code, you MUST run `stop` first, then `start` — otherwise the old process keeps serving stale code:
node <launcher> stop --deck-dir "<path>" node <launcher> start --deck-dir "<path>" --port 0
Bind Host
The workbench resolves its bind address from `--host` CLI flag → `WORKBENCH_HOST` env var → default `127.0.0.1`. When the user needs remote/LAN access, set `WORKBENCH_HOST=0.0.0.0`:
export WORKBENCH_HOST=0.0.0.0 node <launcher> start --deck-dir "<path>" --port 0
The response `url` field will then show the LAN IP instead of `127.0.0.1`.
Output Handling
Parse the single JSON line from stdout.
When `status == "ok"`, echo the returned `editor_url`, `public_url`, or `workbench.editorUrl` for existing-deck editing requests. The helper may also return `generation_url`; that URL is the generation progress page at `/progress`, while the editor is `/editor`.
PPT 编辑工作台已启动:<editor_url>
If `workbench.reused == true`, say it reused the existing server.
If `bind_host` is `0.0.0.0`, the URL is a Docker/WSL LAN fallback. Tell the user it must be reachable from their device/network; if not, ask them to provide a Hermes/canvas/port-forward URL and rerun with `--public-url`, or an explicit bind host with `--host`.
When `status == "skipped"` or `status == "failed"`, echo the `reason` field. If `reason == "nodejs_missing"`, ask whether the user wants NodeJS/dependencies installed; if they decline, do not open the WebUI. Ask for a valid `deck_dir` only if the reason says no deck was found.
Environment
The helper locates the editor launcher in this order:
1. `SENSENOVA_PPT_WORKBENCH_CLI` 2. `PPT_WORKBENCH_CLI` 3. `~/Repository/ppt-editor/src/ppt-editor/bin/sensenova-ppt-workbench.mjs` 4. `~/Repository/ppt-editor/tools/ppt-editor/bi
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

