Watch and learn
Watch a how-to / tutorial / demo video and turn the procedure it teaches into one or more working Claude Code skills. Use when the user wants to "turn this video into a skill", "watch this tutorial and make a skill", "learn how to do X from this video", "build a skill from this screencast/demo/talk", or capture a repeatable workflow shown in a video. Sends an agent to watch the video (local file or URL) with a local, free, no-API toolchain, breaks the procedure down, authors the skill(s), and verifies they actually work.From its SKILL.md
npx -y skills add axel-pm/watch-n-learn --skill watch-and-learnAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
7.3 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it
watch-and-learn
Turn a video that demonstrates a procedure into a reusable Claude Code skill (or a small set of them), then prove the skill works. The video is the teacher; the output is a skill someone can invoke later without watching anything.
Watching is local and free: scripts/watch.py extracts keyframes (PNG) + a labelled contact sheet and transcribes the audio (PyAV + faster-whisper, no API keys, no torch). See references/watching.md for how the engine works and its options.
Placeholders:
<this-skill>= this skill's own directory (where this SKILL.md lives).<file-or-URL>= the video you're processing.
Prerequisites (one-time per machine, usually already done)
watch.py self-locates its toolchain venv and re-execs into it — no activation, and a plain python3 invocation is fine (it finds the venv via $VIDEO_WATCH_TOOLS, a tools/venv up the directory tree, or ~/.video-watch-tools/venv, which is where the bundled installer puts it). You normally do nothing here.
Only if watch.py reports the toolchain is missing (a fresh machine) do you install it once:
bash <this-skill>/scripts/install-tools.sh # creates the venv at ~/.video-watch-tools (av, Pillow, faster-whisper, yt-dlp)
First transcription downloads the Whisper base model (~150 MB), cached thereafter.
Workflow
1. Qualify — is this worth a skill?
Before spending on a full watch, decide whether the video actually teaches a reusable, transferable procedure worth capturing. Do it cheaply: run watch.py --transcript-only (for a talk/narrated video) or just read the title + description, and judge against references/qualifying.md. Proceed if it's a real how-to you'd invoke later; STOP and say why (suggesting notes or a reference doc instead) if it's opinion, a one-off, too trivial, or already covered by an existing skill. Escape hatch: an obviously strong tutorial doesn't need belabouring — note it in one line and move on.
2. Watch — send an agent
Run the watch step in a subagent (the Agent tool), not the main thread: a video digest is 15–25 images plus a transcript, and you don't want that flooding the main context. (No subagent capability in your harness? Run it inline, then summarize into the procedure spec below and drop the raw frames from context before continuing — same result, you just manage the context yourself.) Tell the subagent to:
python3 <this-skill>/scripts/watch.py "<file-or-URL>" --max-frames 20 --out <a-scratch-dir>
Pass --out to a scratch/temp dir so nothing lands in a working repo (the default is already a temp dir, but be explicit). Then have the subagent Read the contact sheet first (one-image overview), then the individual frames/ it needs, alongside transcript.txt, and return a compact procedure spec (next step) — not the raw frames. For a long/dense video, raise --max-frames; for a slow screencast, --mode interval --every 5. Capture modes: a talk or podcast is cheaper with --transcript-only; a silent screencast with --frames-only. Full options + when to use each: references/watching.md.
3. Break it down — a procedure spec
From the digest, extract the teachable procedure into the structure in references/procedure-spec-template.md: the goal/capability, prerequisites, the ordered steps, the exact commands / tools / UI actions / keystrokes shown, decision points, gotchas, and inputs → outputs. Cite frame timestamps for anything visual. If the video shows what but not why, infer carefully and mark inferred bits.
4. Decide skill boundaries
One video ≠ always one skill. Apply the rubric in references/skill-authoring.md: a skill is one coherent, reusable capability with a narrow trigger. Split when the video teaches clearly separable capabilities; keep it one skill when the steps only make sense together. Name each skill in kebab-case by the capability, not the video. Escape hatch: if the video teaches a single small procedure, skip the boundary analysis — it's one skill; don't over-ceremony it.
5. Author the skill(s)
Write each SKILL.md (plus scripts/ and references/ where they earn their place) following references/skill-authoring.md. Keep SKILL.md lean and action-oriented; push depth into references. The description frontmatter must carry real trigger phrases so the skill actually fires. Where the video demonstrates deterministic commands, encode them as a script rather than prose.
6. Verify it works — do not skip
A skill that was never exercised is a draft. Verification is two distinct layers — do both.
6a — Structural check (automated):
python3 <this-skill>/scripts/validate_skill.py <path-to-new-skill>
Checks frontmatter validity, structure, and that any bundled scripts parse / respond to --help. Passing this is necessary but not sufficient — it does not prove the skill is followable.
6b — Rehearsal (the actual proof): spawn a fresh subagent given only the new SKILL.md + a realistic test task (not the digest, not your procedure spec), and confirm it follows the procedure to a correct result. (No subagent capability? Start a clean, separate session with only the new skill loaded and run the test task there — the point is a fresh context that has only the skill to go on.) If it stumbles, the skill is underspecified — revise and re-rehearse. See references/validation-checklist.md.
Guardrails
- Public / owner-shared videos only; you're extracting a procedure, not re-hosting the footage.
- Don't bake secrets or one-off paths from the video into the skill — parameterise them.
- If transcription is unavailable (no audio, or
--frames-only), rely on frames + on-screen text and say so in the procedure spec.
Files
scripts/watch.py— the watch engine (frames + transcript +digest.json).scripts/install-tools.sh— one-time toolchain installer (creates the venv at~/.video-watch-tools).scripts/validate_skill.py— structural validator for an authored skill.references/qualifying.md— the worth-it gate: PASS/FAIL signals + worked examples.references/watching.md— engine options (incl. capture modes) + how to read a digest.references/procedure-spec-template.md— the breakdown structure.references/skill-authoring.md— how to write a good SKILL.md + the boundary rubric.references/validation-checklist.md— the verify step in full.
What ships with it: 8 files
35.7 KB alongside SKILL.md, 3 of them executable
references/
- procedure-spec-template.md1.5 KB
- qualifying.md2.9 KB
- skill-authoring.md2.5 KB
- validation-checklist.md1.8 KB
- watching.md4.6 KB
scripts/
- install-tools.shruns1.7 KB
- validate_skill.pyruns4.4 KB
- watch.pyruns16.3 KB
Gives 0 of the 12 instructions most context ai engineering skills give in ~1.6k tokens
Counted across 1,328 of the 2,349 authors here whose files we hold, read 2026-09-06
- Dispatch a fresh subagent for each taskin 76 of 1328, across 59 files
- Perform spec compliance review before code quality reviewin 44 of 1328, across 34 files
- Dispatch a final code reviewer after all tasksin 38 of 1328, across 26 files
- Answer subagent questions before allowing implementationin 36 of 1328, across 26 files
- Use the least powerful model capable of the taskin 33 of 1328, across 26 files
- Create a TodoWrite list for all tasksin 32 of 1328, across 22 files
- Perform a task review after each implementationin 31 of 1328, across 24 files
- Extract all tasks and context from the planin 29 of 1328, across 20 files
- Provide full task text to subagentsin 28 of 1328, across 20 files
- Use git worktrees for isolated workspacesin 25 of 1328, across 20 files
- Specify the model explicitly when dispatching a subagentin 23 of 1328, across 18 files
- Execute all tasks from the plan without stoppingin 21 of 1328, across 16 files
Said here and by no other author read
- run watch.py to extract video frames and transcript
- decide if the video teaches a reusable procedure
- use a subagent to process video content
- read the contact sheet before individual frames
- extract the procedure into a structured spec
- split video content into coherent, reusable skills
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.