Agent skill

Lesson

by gug007 in gug007/lpm

Make a narrated lesson video about lpm from the real desktop app, recorded on a pristine data directory.

MITAuto-check passedMedia & Creative

Install Lesson

skills CLI
$ npx skills add gug007/lpm --skill lesson -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install gug007/lpm lesson --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/gug007/lpm.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/lesson .claude/skills/lesson && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
lesson
GitHub stars
152
Token cost
~1.2k tokens
SKILL.md length
679 words
Files
53 (incl. scripts)
Skills in repo
10
Repo updated
First seen
Licence
MIT

At a glance

Make a narrated lesson video about lpm from the real desktop app, recorded on a pristine data directory.

  • Works in 6 steps: node scripts/new.js "" [--projects… → Show the user the narration (with the… → /take.sh --no-audio is a dry run: it… → …
  • The user asks for a video lesson
  • Runs JavaScript and Swift scripts from its folder; calls node, git and ffmpeg
  • YouTube video about lpm

What it does

Lesson is an agent skill from gug007/lpm. Make a narrated lesson video about lpm from the real desktop app, recorded on a pristine data directory. Title and optional narration text in, MP4 with OpenAI voice out, audio in sync with the clicks. Use when the user asks for a video lesson, tutorial, screencast, or YouTube video about lpm.

Its SKILL.md is about 1.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 55 other files, including scripts (for example `music/tracks.json`, `reference/beats-api.md` and `reference/pipeline.md`).

It sits in Media & Creative, covering Text to speech and voice. It works with OpenAI and YouTube. The repository describes itself as: Start, stop, and duplicate dev projects with one click. The best workspace for running Claude Code, Codex, and other AI agents alongside your services. The licence is MIT.

When your agent uses it

  • The user asks for a video lesson
  • YouTube video about lpm

Example prompts

  • “/lesson”

Requirements

  • Node.js

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. node scripts/new.js "" [--projects storefront,client-portal] starts ~/Movies/lpm-lessons// with lesson.json, beats.js and take.sh. Write…
  2. Show the user the narration (with the cue words each click lands on), a one-line-per-beat plan, and anything the take touches in their…
  3. /take.sh --no-audio is a dry run: it lints the lesson, launches the app and drives the real pointer with estimated timing, and writes…
  4. /take.sh is the take: voice first, then the recording, then the MP4, captions, chapters, thumbnail and the checks (qa/report.json…
  5. Read the take's log for warning lines and the qa summary: a FAIL (a name, email or error text on screen, an agent that never answered)…
  6. End the reply with the MP4's full absolute path (~/Movies/lpm-lessons//.mp4).

What it can do on your machine

Read from SKILL.md and the folder at commit 986226a. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 13 files in scripts/ (JavaScript and Swift, from the files we listed), which the agent can run.

    Shell commands in SKILL.md call:

    • node
    • git
    • ffmpeg

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Lesson loads about 1.2k tokens when it runs. Until then it costs about 75 tokens; SKILL.md has 679 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~75
When it runs · the whole SKILL.md, loaded when a task matches
~1.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from gug007/lpm at commit 986226a, republished under its MIT licence (© gug007). 679 words, ~1,163 tokens.

Download SKILL.mdSave it as .claude/skills/lesson/SKILL.md (or your agent's skills folder). This skill also uses 52 other files; get the full folder from GitHub.
name
lesson
description
Make a narrated lesson video about lpm from the real desktop app, recorded on a pristine data directory. Title and optional narration text in, MP4 with OpenAI voice out, audio in sync with the clicks. Use when the user asks for a video lesson, tutorial, screencast, or YouTube video about lpm.
version
4.1.0
argument-hint
"<title>" [-- <text>]

Generate a video tutorial from a title and optional narration text.

Workflow

  1. node scripts/new.js "<title>" [--projects storefront,client-portal] starts ~/Movies/lpm-lessons/<slug>/ with lesson.json, beats.js and take.sh. Write the narration and the beats: reference/beats-api.md has every call a beat can make, the selectors and the traps.
  2. Show the user the narration (with the cue words each click lands on), a one-line-per-beat plan, and anything the take touches in their real setup (agent settings, a real git clone, real usage meters). Wait for their OK before anything is spoken.
  3. <lesson>/take.sh --no-audio is a dry run: it lints the lesson, launches the app and drives the real pointer with estimated timing, and writes frames/NN-<beat>.jpg. Review the frames (a contact sheet helps: ffmpeg -i 'frames/%*.jpg' … tile). Then write the opening and the cover: coldOpen (a one- or two-sentence hook over two short shots of the payoff) and cover (2–4 words and a frame of the payoff) in lesson.json; a dry run's timing is estimated, so check both on the take's qa/sheet.jpg and adjust with a --mux-only re-cut. Without them a lesson opens on its title card and uses that card as its thumbnail.
  4. <lesson>/take.sh is the take: voice first, then the recording, then the MP4, captions, chapters, thumbnail and the checks (qa/report.json, qa/sheet.jpg). Run it in the foreground (a take started in the background fails for lack of a first frame), about 5 minutes. Nobody touches the mouse or keyboard meanwhile.
  5. Read the take's log for warning lines and the qa summary: a FAIL (a name, email or error text on screen, an agent that never answered) means the take is not publishable as it is.
  6. End the reply with the MP4's full absolute path (~/Movies/lpm-lessons/<slug>/<slug>.mp4).

Rules

  • no YAML, config files or CLI unless the title is about them; each video stands alone (no "next lesson" or teaser line; the lint refuses one); lessons open on s.card("<title>") and close on a silent { "id": "outro", "ms": 3200 } line whose beat is s.card("lpm.cx", { hold: true }).
  • narration: name the control, then click it on that word (cue); fold a very short closing sentence ("Click it.") into the one before, since the voice drops those; write lpm lowercase (it is spoken as letters).
  • the recording shows the real machine: the checks read every second of the take for the account name, full name, computer name, email and home path, and for error text. Keep them off screen (the kit's neutralShell replaces the shell prompt).
  • a take drives the real Claude Code / Codex / Cursor on the user's login. take.sh saves their model, effort and status-line settings and puts them back afterwards, even after a crash (restored at the start of the next take). Nothing else in their config is guarded, so a lesson that changes something else must put it back itself.
  • never verify a pipeline change with a real take. Copy the lesson folder (cp -c -R) to a scratch directory and run node scripts/make.js <copy path> --mux-only there; a path is used as it is, so the published lesson is never touched. node --test scripts/test/*.test.js covers the pure parts.
  • use the OpenAI key in the Keychain (security add-generic-password -s lpm-video -a openai -U -w).
Show full SKILL.md (148 more words)Show less

Re-cuts (--mux-only): re-render the current take with the current look, sound, zooms and captions; nothing is recorded and nothing is spoken. A reworded line needs --speak: it speaks the changed lines and keeps them only if every new clip still fits before the next line; otherwise all clips are put back as they were and the line needs a new take. --take <n> re-cuts an archived take from _takes/ with the script it was recorded with (it fails when those lines have been spoken again since). The render a re-cut replaces is kept in its take's cuts/. Adjust a zoom without a new take through lesson.json "zooms": { "<line>#<n>": { "scale": 1.6, "at": [0.3, 0.5], "ms": 900 } } or { "drop": true } (the mux log lists the ids).

Flags: node scripts/make.js prints them. The pipeline, the look, the sound, the data directory, the take folders and the checks are described in reference/pipeline.md.

© gug007, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 52 other files (scripts) in .claude/skills/lesson of gug007/lpm.

  • SKILL.md
  • music/.gitignore
  • music/tracks.json
  • reference/beats-api.md
  • reference/pipeline.md
  • scripts/agents.js
  • scripts/app.js
  • scripts/appcap.swift
  • scripts/appstage.js
  • scripts/browser.js
  • scripts/captions.js
  • scripts/capture.js
  • scripts/cards.js
  • scripts/chapters.js
  • scripts/cli.js
  • scripts/clipboard.swift
  • scripts/compose.js
  • scripts/cover.js
  • … and 35 more

Open the folder on GitHubat commit 986226a

Compare with similar skills

Lesson next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Lesson compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Lesson this skillgug007/lpm152—~1.2kAutomated safety check: PassMIT
Podcastteam-attention/plugins-for-claude-natives827—~1.5kAutomated safety check: PassMIT
SpeechJetBrains/skills3644 repos~1.9kAutomated safety check: PassApache-2.0
Voxclawmalpern/VoxClaw208—~1.9kAutomated safety check: PassNone
Speechdavila7/claude-code-templates32k—~2kAutomated safety check: PassApache-2.0
Speechnexu-io/open-design100k—~291Automated safety check: PassApache-2.0

Similar skills

  • Podcast

    team-attention/plugins-for-claude-natives

    Generate Korean podcast episodes from any source (URLs, tweets, articles, PDFs) — analyzes content, writes a script, generates audio via OpenAI TTS, converts to MP4, and auto-uploads to YouTube.

    827 GitHub stars~1.5k tokensUpdated 5 mo ago
    Media & CreativeAuto-check passed
  • Speech

    JetBrains/skills

    Official

    A skill your agent uses when the user asks for text-to-speech narration or voiceover, accessibility reads, audio prompts, or batch speech generation via the OpenAI Audio API; run the bundled CLI…

    364 GitHub starsUsed in 4 repos~1.9k tokens
    Media & CreativeAuto-check passed
  • Voxclaw

    malpern/VoxClaw

    Give your agent a voice. An agent skill from malpern/VoxClaw.

    208 GitHub stars~1.9k tokensUpdated 2 mo ago
    Media & CreativeAuto-check passed
  • Speech

    davila7/claude-code-templates

    A skill your agent uses when the user asks for text-to-speech narration or voiceover, accessibility reads, audio prompts, or batch speech generation.

    32k GitHub stars~2k tokensUpdated today
    Media & CreativeAuto-check passed
  • Speech

    nexu-io/open-design

    Generate spoken audio from text using OpenAI's API with built-in voices.

    100k GitHub stars~291 tokensUpdated today
    Media & CreativeAuto-check passed
  • Openai Tts

    benchflow-ai/skillsbench

    OpenAI Text-to-Speech API for high-quality speech synthesis.

    1.8k GitHub stars~946 tokensUpdated 2 mo ago
    Media & CreativeAuto-check passed

More from gug007/lpm

All 10 skills in this repo
  • Short

    gug007/lpm

    Make a short vertical (9:16) lpm lesson that feels native to TikTok, Reels and Shorts: a payoff-first hook, fast push-ins that follow the action, word-by-word burned-in captions, numbered step…

    152 GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Short Game

    gug007/lpm

    Make a short vertical (9:16) video where two AI models build the same self-playing game in lpm, side by side, and both games then play live in lpm's browser.

    152 GitHub stars~1.8k tokensUpdated today
    Auto-check passed
  • Short Race

    gug007/lpm

    Make a short vertical (9:16) video that races two AI models on the same prompt in lpm, side by side: Run in duplicates puts each model in its own copy of the project, shown as side-by-side columns…

    152 GitHub stars~3.9k tokensUpdated today
    Auto-check passed
  • Lpm Config

    gug007/lpm

    Create and edit lpm YAML configs for projects, duplicates, worktree metadata, services, actions, header and footer button zones and zone layers, terminals, profiles, SSH projects, and shared config…

    152 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Short Publish

    gug007/lpm

    Post a finished vertical lesson from ~/Movies/lpm-lessons/tiktok/<slug/ to YouTube Shorts (LPM channel, through Chrome) and TikTok (@lpm06557, from the user's iPhone through iPhone Mirroring) in…

    152 GitHub stars~3.1k tokensUpdated today
    Auto-check passed
  • Lesson Publish

    gug007/lpm

    Publish a finished lesson MP4 from ~/Movies/lpm-lessons/<slug/ to the lpm YouTube channel through Chrome (YouTube Studio): search-optimized title and description with chapters, tags, category, the…

    152 GitHub stars~1.8k tokensUpdated today
    Auto-check passed

Works with

Questions about Lesson

What does Lesson do?

Make a narrated lesson video about lpm from the real desktop app, recorded on a pristine data directory. Lesson is an agent skill from gug007/lpm. Make a narrated lesson video about lpm from the real desktop app, recorded on a pristine data directory.

When should I use Lesson?

Lesson fits situations like: the user asks for a video lesson; youTube video about lpm.

How do I install Lesson in Claude Code?

Run `npx skills add gug007/lpm --skill lesson -a claude-code`. Or copy the skill folder (.claude/skills/lesson in gug007/lpm) into .claude/skills/lesson in your project. Claude Code loads it when a task matches its description.

How do I install Lesson in Codex?

Run `npx skills add gug007/lpm --skill lesson -a codex`. Or copy the skill folder (.claude/skills/lesson in gug007/lpm) into .agents/skills/lesson in your project. Codex loads it when a task matches its description.

Can I use Lesson in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gug007/lpm --skill lesson -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/lesson, .gemini/skills/lesson, .github/skills/lesson and .opencode/skills/lesson in your project.

What does Lesson need to run?

Going by SKILL.md and its folder, Lesson needs JavaScript and Swift for the scripts in its folder and the command-line tools its instructions call (node, git and ffmpeg). Our summary lists: Node.js.

Does Lesson access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Lesson safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Lesson use?

Lesson is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Lesson use?

About 1.2k tokens (SKILL.md is roughly 4.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Lesson?

Skills that share tags, products or a category with Lesson: Podcast (team-attention/plugins-for-claude-natives, 827 stars), Speech (JetBrains/skills, 364 stars), Voxclaw (malpern/VoxClaw, 208 stars) and Speech (davila7/claude-code-templates, 32k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Lesson?

gug007 (a GitHub user) maintains it in gug007/lpm, which has 152 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 8, 2026.

Source: gug007/lpm on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.