interactive-video — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited interactive-video (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Generate a self-contained HTML walkthrough from $ARGUMENTS with canvas animations, narrated audio, quizzes, and interactive widgets.
Parse $ARGUMENTS for source (URL, file, topic, or "codebase"), scope hints ("focus on X", "skip Y"), and audience/use-case hints ("onboarding", "knowledge transfer", "walkthrough", "beginner-friendly"). Pre-fill extracted hints into configurator URL params.
revealAt to match when they're spoken: revealAt = (phraseTime - sceneStart) / (sceneEnd - sceneStart). The canvas should reinforce what the ear hears.styles.json for the selected theme — hardcoded colors break theme switching.CONTENT.interactions[ix.id].design-guide.md § Spatial-temporal alignment.design-guide.md § Alive vs dead scenes.design-guide.md § Narration voice for banned patterns and anti-slop rules.Run bash $SKILL_DIR/scripts/setup.sh on first use. Skip if edge-tts is already on PATH.
Detect from source. Confirm with user — this is the only CLI question.
Extract the natural topic structure from the source as JSON:
[{ "id": "topic-id", "label": "Topic Name", "desc": "One-line description" }]cd $SKILL_DIR && npx tsx scripts/build_audio.ts --generate-previews --lang {lang}
cd $SKILL_DIR && npx tsx scripts/serve_configurator.ts \
--lang {lang} \
--source {encoded_source} \
--topics {encoded_topics_json} \
--audience-hint {hint_or_empty} \
--source-type {url|file|codebase|topic}The server opens the configurator in the browser and blocks until the user clicks Done. Config JSON is returned via stdout. If the command times out (10 min) or the user pastes a Preferences: block manually, fall back to text parsing.
mkdir -p {out}/src/engine && \
cp -n $SKILL_DIR/engine/*.js {out}/src/engine/ && \
cp -n $SKILL_DIR/engine/lesson.css {out}/src/After this: no more questions. Run Phases 1-4 without stopping.
Parse the config JSON from Phase 0.4 stdout. Extract: audience, length, interaction, style, voice, voiceName, topics, preset.
If the user pasted a Preferences: text block instead (fallback), parse it as before: extract key-value pairs from the text.
Theme keys are defined in styles.json. Length targets and interaction design rules are in design-guide.md.
Read $SKILL_DIR/references/design-guide.md. Use it as a reference — adapt to what the content needs.
Read the reference files you need (always in one parallel message):
page-template.md, styles.json, engine-contracts.mdrender-patterns.mdRead(engine-contracts.md)
Read(page-template.md)
Read(styles.json)
# Read(render-patterns.md) — only if this lesson uses custom drawWrite content.json → {out}/src/content/{lessonId}/content.json
engine-contracts.md exactlyt and duration as 0 — build_audio fills themStart audio in background → immediately after writing content.json:
cd $SKILL_DIR && npx tsx scripts/build_audio.ts {lessonId} \
--content-dir {out}/src/content \
--audio-dir {out}/audio/lessonsUse run_in_background: true. Audio only needs content.json.
Write HTML while audio generates → {out}/{lessonId}.html
page-template.md exactlyAfter audio completes (you will be notified):
content.json for computed timings/e values + IX time valuesScene timing rules:
0. Last scene ends at meta.duration.s equals the previous scene's e. No gaps. The audio gap (1.2s silence between segments) does NOT create scene gaps — scenes are wall-to-wall.time values and narration t values as guides for where to place boundaries, but always ensure contiguity.Validate + serve in one command:
cd $SKILL_DIR && npx tsx scripts/validate.ts {lessonId} \
--content-dir {out}/src/content \
--audio-dir {out}/audio/lessons \
--html {out}/{lessonId}.html && \
cd {out} && npx --yes http-server -p {port} -c-1 --silent & \
sleep 1 && open "http://localhost:{port}/{lessonId}.html"Show the user: title, duration, scene count, interaction count, scene breakdown, files created.
Optional: visual verification — skip if it fails (Playwright may not be installed):
cd $SKILL_DIR && npx tsx scripts/visual_verify.ts {lessonId} \
--html {out}/{lessonId}.html --out {out}/verify-{lessonId} || trueIf it succeeds, screenshots are saved to verify-{lessonId}/. If it fails, continue — the lesson is already validated and served.
Log the lesson — append to ${CLAUDE_PLUGIN_DATA}/lessons.json (create if missing):
{ "id": "{lessonId}", "title": "...", "theme": "...", "duration": 0, "scenes": 0, "interactions": 0, "date": "YYYY-MM-DD", "output": "{out}" }This lets future invocations see what's been built before.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.