← All skills
sn-ppt-workbench
92 / 100 · Low risk
Fine to try. Some of what it can do is expected: a data skill usually connects to databases or online services with your credentials.
By OpenSenseNova/SenseNova-Skills (GitHub) · data · 6,068 stars · scanned at commit 004a242
Use when the user asks to open, preview, inspect, or visually edit an existing SenseNova HTML presentation in the PPT Workbench, using an explicit deck_dir or the latest deck in the current workspace.
Works with any agent that supports SKILL.md skills.
What this skill can do
Runs commands on your computer
The author does not mention this.
Found in 15 places.
Show 12 more
- skills/sn-ppt-workbench/SKILL.md, line 64
python3 $SKILL_DIR/scripts/open_workbench.py \ - skills/sn-ppt-workbench/SKILL.md, line 84
python3 $SKILL_DIR/scripts/open_workbench.py \ - skills/sn-ppt-workbench/SKILL.md, line 122
node <launcher> start --deck-dir "<path>" [--port 0] [--agent-managed] - skills/sn-ppt-workbench/SKILL.md, line 132
node <launcher> stop --deck-dir "<path>" - skills/sn-ppt-workbench/SKILL.md, line 141
export WORKBENCH_HOST=0.0.0.0 - skills/sn-ppt-workbench/references/gateway-auth.md, line 125
`subprocess.run()` in Python inherits the parent's environment. However, if the - skills/sn-ppt-workbench/scripts/open_workbench.py, line 31
return {"creationflags": subprocess.CREATE_NO_WINDOW} - skills/sn-ppt-workbench/scripts/open_workbench.py, line 161
def _run(command: list[str], cwd: Path, timeout: int) -> subprocess.CompletedProcess[str]: - skills/sn-ppt-workbench/scripts/open_workbench.py, line 162
return subprocess.run( - skills/sn-ppt-workbench/scripts/open_workbench.py, line 180
result = subprocess.run( - skills/sn-ppt-workbench/scripts/open_workbench.py, line 190
except subprocess.TimeoutExpired: - skills/sn-ppt-workbench/workbench-runtime/bin/sensenova-ppt-workbench.mjs, line 9
import { spawn } from 'node:child_process'
Connects to the internet
This is disclosed by the author in the skill's SKILL.md or README. Expected for a data skill.
Found in 12 places.
Show 9 more
- skills/sn-ppt-workbench/references/gateway-auth.md, line 151
curl http://127.0.0.1:8642/v1/chat/completions \ - skills/sn-ppt-workbench/scripts/open_workbench.py, line 18
import urllib.request - skills/sn-ppt-workbench/scripts/open_workbench.py, line 265
request = urllib.request.Request( - skills/sn-ppt-workbench/scripts/open_workbench.py, line 271
with urllib.request.urlopen(request, timeout=4) as response: - skills/sn-ppt-workbench/workbench-runtime/bin/sensenova-ppt-workbench.mjs, line 385
const response = await fetch(`${url.replace(/\/+$/, '')}/api/workbench/session`, { - skills/sn-ppt-workbench/workbench-runtime/dist/assets/index-DZ8oHsQz.js, line 1
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProp - skills/sn-ppt-workbench/workbench-runtime/dist/assets/index-DZ8oHsQz.js, line 11
Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}/*`}">.`)}let u=et(),d;if(t){let e=typeof t==`string`?N(t):t;O(c===`/`||e.pathna - skills/sn-ppt-workbench/workbench-runtime/dist/assets/index-DZ8oHsQz.js, line 15
`)):null}async function bi(e,t,n){let r=await fetch(`/api/chat/send/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mess - skills/sn-ppt-workbench/workbench-runtime/dist/assets/index-DZ8oHsQz.js, line 23
`),c();let l=yi(o);if(l&&(n(l),l.type===`error`&&(s=l.error)),s)throw Error(s)}async function xi(e,t){let n=await fetch(`/api/workbench/audit/stream`,{method:`P
Install
Paste this into your terminal. It downloads exactly the version we scanned, not whatever is newest.
if [ -e ~/.agents/skills/'sn-ppt-workbench' ] || [ -L ~/.agents/skills/'sn-ppt-workbench' ]; then echo 'A skill folder named sn-ppt-workbench already exists — not replacing it' >&2; false; else d=$(mktemp -d) && git clone --quiet --filter=blob:none --no-checkout 'https://github.com/OpenSenseNova/SenseNova-Skills' "$d" && git -C "$d" checkout --quiet '004a2426fa092097d65ac9233ca0bcb2be793f57' -- 'skills/sn-ppt-workbench' && mkdir -p ~/.agents/skills && cp -R "$d"/'skills/sn-ppt-workbench' ~/.agents/skills/'sn-ppt-workbench' && rm -rf "$d"; fi
Codex reads ~/.agents/skills directly. For Claude Code, Cursor, Copilot, Gemini CLI, Antigravity or OpenCode, also link it. For Claude Code: ln -s ~/.agents/skills/'sn-ppt-workbench' ~/.claude/skills/'sn-ppt-workbench' (other agents: ~/.cursor/skills, ~/.copilot/skills, ~/.gemini/skills, ~/.gemini/config/skills, ~/.config/opencode/skills). Or install through the finder skill, which does both.
Badge for your README
The badge for OpenSenseNova/SenseNova-Skills shows the score of its lowest-scoring skill.

[](https://zalavijaysinh.github.io/skilltrust/repos/OpenSenseNova/SenseNova-Skills/)
Score history
| Date | Version | Score |
|---|
| 2026-11-08 | 004a242 | 92 |
| 2026-11-07 | 004a242 | 57 |