Skip to content
Agentmart
Submit a tool

spoiler-free-shorts

Add a short (60–90 s) NotebookLM video to each task of an existing interactive learning page, using a parallel example so the short never solves the task…

Skill by smlfg

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/smlfg-spoiler-free-shorts

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Add a short (60–90 s) NotebookLM video to each task of an existing interactive learning page, using a parallel example so the short never solves the task, then embed and verify it. Use when the user wants per-task explainer shorts on an existing practice site.

Use cases: productivity

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/spoiler-free-shorts

What's inside

Skill name
spoiler-free-shorts
Description
Add a short (60–90 s) NotebookLM video to each task of an existing interactive learning page, using a parallel example so the short never solves the task, then embed and verify it. Use when the user wants per-task explainer shorts on an existing practice site.
License
MIT
Instructions
87 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Spoiler-Free Shorts

Downstream of a course notebook: media per **single task**, embedded into a page that already exists. Never build a new page; always dock onto the existing one.

Tools: NotebookLM MCP (`notebook_get`, `studio_create`, `studio_status`, `download_artifact`) or its CLI, `ffprobe`/`ffmpeg`, a headless browser (e.g. Playwright).

## Three insights that carry it

### 1. Spoiler guard: ALWAYS a parallel example

A short that walks through the task's own numbers **destroys the task**. If the task is `f = 3n+17, g = 2n` → `c = 2, n₀ = 17`, the short shows `f = 2n+5, g = n` → `c = 3, n₀ = 5`: same mechanics, different numbers. Transfer remains the learner's job.

Read the task **and the model solution**, write both into a `spoiler_guard` ("Forbidden: …"), invent a parallel example, and forbid explicitly in the prompt: *"The expressions 3n+17 and 2n must not appear."*

### 2. Put the language instruction in the prompt, not just the parameter

`language=<x>` alone sometimes flips to English for short videos. Start every `focus_prompt` with an explicit language rule covering speech, subtitles and on-screen labels. Tolerate established technical terms; don't regenerate for them.

### 3. Real gaps beat sheet structure

Building shorts in sheet order is obvious and misses the point. If you have a transcript or notes from a study session, extract what's **solid vs shaky**, and turn the learner's most expensive mistakes into their own shorts. Those are worth more than any sheet-order short.

## Prompt contract: a director's plan, not a keyword

- **Exactly one concept.** Name forbidden extras ("no master theorem", "no second formula").
- **One continuous mini example** with real numbers, step by step.
- **Large visible states**, short labels, no definition dump.
- **A closing question, left unanswered** (becomes the page's recall box).
- For error repair: show the wrong way **crossed out**, then the right one.

Keep prompts in a queue JSON (`id`, `task`, `output_path`, `spoiler_guard`, `focus_prompt`): documentation plus cheap re-runs.

## Procedure

1. **Get task cores** (delegate reading many HTML pages to a cheap scout): title, topic, real numbers, solution values (= spoiler guard).
2. **Scope source IDs narrowly**: the relevant sheet PDF plus context/preferences, not all 120 sources.
3. **One test run** first; check language, format, spoilers. Then the rest.
4. **Batches of 5–6.** After that expect a rate-limit error; wait a few minutes. Not a bug.
5. **Poll in a loop that also reports failures**, not just success.
6. **Download + poster**: `ffmpeg -ss 3 -i short.mp4 -frames:v 1 poster.webp`. Never take the poster from the result frame. File size says nothing about an empty frame; look at it.
7. **Embed** and **verify** (below).

Field-name trap: MCP returns `artifact_id`; some CLI JSON returns `id` in a top-level array. Status is `unknown` while generating, `completed` after.

## Embedding

Place after the page header, before the task section:

```html
<section class="media-pre">
  <h2>Watch first</h2>
  <p>Different numbers from your task, on purpose. You transfer the mechanics.</p>
  <video class="short-player" controls preload="metadata"
         poster="../media/posters/task-03.webp" src="../media/task-03-short.mp4">
    Your browser does not support video.</video>
  <div class="recall-box"><strong>Instant recall</strong> &lt;the short's closing question&gt;</div>
</section>
```

Respect the site's build contract: CSS goes into the task's own `task.css`, never the shared stylesheet; no CDNs; never touch `task.js` or storage keys. Cross-cutting shorts go as links on an overview/roadmap page. **An orphaned MP4 is not a result**; only report done after embedding.

## Verification, and two false alarms

Headless browser checks: video loaded and **portrait** (`videoHeight > videoWidth`), poster set, recall box present, no console errors, task state still saves. Resolve relative paths with `ls` first; the `../` depth is the most common error.

- **False alarm 1: `net::ERR_ABORTED` on the MP4.** Not a 404; `preload="metadata"` aborts the rest on purpose. If `videoWidth` is set, it loads.
- **False alarm 2: state doesn't save.** The save button is usually gated by design (checkboxes, proofs). Tick prerequisites first; read `task.js` before calling it a bug.

## Stance

Absence of evidence in the chat is not evidence of absence. The learner may have worked for an hour on paper. Don't accuse them of procrastinating. The line isn't "media vs no media" but *media that pull you into the task* vs *systems that replace it*.

## Example

```text
task-03 (Big-O proof): spoiler_guard = "3n+17", "2n", "c=2", "n0=17"
parallel example: f=2n+5, g=n → c=3, n0=5
focus_prompt: "LANGUAGE: entire short in English incl. labels. One concept: finding c and n0 …
               Forbidden: 3n+17, 2n. End with an unanswered question."
→ media/task-03-short.mp4 (1:09, 406×720), poster at 3 s, embedded, verified
```

## Use case

You built a practice site and want a quick visual primer on every task, without the video giving away the answer. This skill generates each short from a parallel example, embeds it above the task with an unanswered recall question, and verifies it actually plays.

From smlfg/HAI-skills-registry, MIT.

More from smlfg/HAI-skills-registry

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Oct 15, 2026 (13 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from smlfg

Cite this page

spoiler-free-shorts skill. Agent Mart. https://agentmart.dev/skills/smlfg-spoiler-free-shorts (last updated 2026-10-24)