opensensenova/sn-ppt-doctor
| Environment diagnostic for the PPT family. Validates sn-image-base, API keys, Node runtime, and optional deps; interactively writes .env for required vars. Runs before sn-ppt-entry; does not modify sn-image-* skills.
npx skills add https://github.com/OpenSenseNova/SenseNova-Skills --skill sn-ppt-doctor
sn-ppt-entry / sn-ppt-creative / sn-ppt-standard, to verify env is wired.env, to confirmsn-ppt-entry reports missing-env error and tells you to come hereSN_TEXT_API_KEY, shared SN_CHAT_API_KEY, or global SN_API_KEYSN_VISION_API_KEY, shared SN_CHAT_API_KEY, or global SN_API_KEYSN_IMAGE_GEN_API_KEY or global SN_API_KEYsn-image-base is discoverable and sn_agent_runner.py --help works (auto-resolved as a sibling skill under the same skills/ directory; SN_IMAGE_BASE only needed for non-standard layouts)node --version >= 18$(pwd)/ppt_decks/ creatable and writable (deck_dir parent; fixed — not configurable via env)sn-ppt-standard/scripts/export_pptx/node_modules exists (run npm install on first use otherwise)SN_IMAGE_GEN_*, SN_CHAT_*, SN_TEXT_*, SN_VISION_*) — displays current value or "unset"pypdf / python-docx Python deps for doc parsing in sn-ppt-entrySingle-file entry; no package imports, no -m, no PYTHONPATH needed.
python $SKILL_DIR/ppt_doctor/check_environment.py # interactive
python $SKILL_DIR/ppt_doctor/check_environment.py --non-interactive
python $SKILL_DIR/ppt_doctor/check_environment.py --env-path /custom/.env
When used inside OpenClaw, /skill sn-ppt-doctor runs the same entry.
Plain text report — one line per check — then a summary. On any hard-check failure, enters interactive mode to fill .env (unless --non-interactive).
sn-image-* skills or their .envTake opensensenova/sn-ppt-doctor from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npm.
Without those the skill loads but fails at the first command.