Agent skill

Lesson Publish

by gug007 in 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…

MITAuto-check passedMedia & Creative

Install Lesson Publish

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

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

GitHub CLI
$ gh skill install gug007/lpm lesson-publish --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-publish .claude/skills/lesson-publish && 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-publish
GitHub stars
152
Token cost
~1.8k tokens
SKILL.md length
1,014 words
Files
3 (incl. scripts)
Skills in repo
12
Repo updated
First seen
Licence
MIT

At a glance

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…

  • The user asks to upload
  • Runs JavaScript scripts from its folder; calls node and claude; reaches youtube.com and lpm.cx
  • Post a lesson video to YouTube

What it does

Lesson Publish is an agent skill from 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 title-card thumbnail, Public, then added to the lesson playlist. Use when the user asks to upload, publish or post a lesson video to YouTube. Vertical videos from ~/Movies/lpm-lessons/tiktok/ go to YouTube Shorts through short-publish instead.

Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including scripts (for example `scripts/prepare.js` and `scripts/register.js`).

It sits in Media & Creative, covering Video scripts and shorts. It works with YouTube and TikTok. 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 to upload
  • Post a lesson video to YouTube

Example prompts

  • “/lesson-publish”

Requirements

  • Node.js

What it can do on your machine

Read from SKILL.md and the folder at commit 57f7a3f. 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 2 files in scripts/ (JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • node
    • claude

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • youtube.com
    • lpm.cx

    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 Publish loads about 1.8k tokens when it runs. Until then it costs about 114 tokens; SKILL.md has 1,014 words of instructions outside code blocks.

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

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 57f7a3f, republished under its MIT licence (© gug007). 1,014 words, ~1,816 tokens.

Download SKILL.mdSave it as .claude/skills/lesson-publish/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
lesson-publish
description
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 title-card thumbnail, Public, then added to the lesson playlist. Use when the user asks to upload, publish or post a lesson video to YouTube. Vertical videos from ~/Movies/lpm-lessons/tiktok/ go to YouTube Shorts through short-publish instead.
version
1.2.0
argument-hint
<lesson-slug>

Upload a lesson video to YouTube and publish it.

  • run node scripts/prepare.js <slug or lesson folder> <scratchpad-dir> first. It refuses a lesson whose checks failed or are older than the MP4 (qa/report.json, written by lesson's make.js); show the user the FAIL lines, and only with their go-ahead pass --accept "<their reason>". It copies the MP4 into the scratchpad under the video title (the file name becomes the initial title in Studio; it warns when that dropped a ":" to retype), the thumbnail (the opening card, rendered by make.js), the captions (<slug>.srt), and writes <slug>-description.txt and <slug>-tags.txt, and prints the chapters. Chrome's file_upload only accepts files inside the scratchpad and under 10,000,000 bytes; when the master is larger, prepare.js writes a 1080p HEVC two-pass copy that fits instead (H.264 at that bitrate smears terminal text). YouTube gets the smaller copy; the master stays in the lesson folder.
  • the description and tags come from lesson.json "youtube": { "hook": [two lines], "learn": [...], "sections": [...], "tags": [...], "hashtags": [...] }: write that block first when the lesson has none (prepare.js says so), then run prepare.js again, so a replacement upload reuses the same words.
  • captions: in the Details step's "Subtitles" (or later under Subtitles in Studio), Add language → English → Add subtitles → Upload file → With timing → the .srt from the scratchpad → Publish. They carry the script's own words (lpm, Claude Code, Codex), which YouTube's auto-captions get wrong. In the current dialog Subtitles sits under Video elements and its Add stays greyed until Details → Show more → Video language is set (English); after "With timing", do not press Continue (it opens the macOS file picker): file_upload the .srt into the #captions-file-loader input, then Done.
  • thumbnail: the lesson's own thumbnail.jpg, never YouTube's auto-pick: with a cover in lesson.json it is that cover (words beside a crop of the take on the card canvas, approved 2026-09-30), otherwise the opening title card; prepare.js copies it and it is uploaded in the Thumbnail step. A new channel gets a few custom thumbnails a day; past that the upload answers "Build your channel history" and nothing is set: leave the video a private draft (untick the playlist so no private row shows) and publish the next day with the thumbnail, unless the user says otherwise.
  • title: the lesson title from lesson.json, nothing appended (no "(Mac Tutorial)"), brand is lowercase lpm, 100 characters max.
  • description: prepare.js assembles it in this order: a two-line keyword hook (what the video shows, for whom), one line on what lpm is (starts, stops, duplicates and switches between local dev projects on a Mac, with a built-in terminal for AI coding agents such as Claude Code and Codex), the link https://lpm.cx (never the demo link lpm.cx/demo, user rule 2026-09-19), "What you'll learn" bullets, any sections ([{ "heading", "lines" }]: what a viewer needs first, what to do when a step doesn't match), "Chapters" (first at 0:00, at least three, each 10 s or longer: topic cards and "chapter" narration lines in lesson.json), one series line, 5–6 hashtags (#lpm #macOS #devtools …). No @ anywhere (it opens a mention popup) and no next-lesson teaser.
  • tags: 15–20 comma-separated (lpm, lpm.cx, the lesson's own verbs and nouns, Claude Code, Codex, mac dev tools, tutorial), under 500 characters. Category Science & Technology. Audience "No, it's not made for kids". Visibility Public. Playlist: the one in YOUTUBE_PLAYLIST.md (repo root: heading = playlist title, then its URL, then the lesson titles in series order).
  • browser (Claude in Chrome MCP on the user's logged-in Chrome; channel "LPM"): navigate https://www.youtube.com/upload → find the file input → file_upload the MP4 → wait ~5 s → find the title and description textboxes, click + type → Thumbnail "Upload file" input → file_upload the JPEG → Audience radio → "Show more" → Tags textbox (type a comma after every tag) → Category: open the menu, take a full-scale screenshot, click the option by coordinate and zoom to verify (a click by find ref lands on the hovered row) → Playlists box (coordinate click) → tick the playlist → Done → Next ×3 → Public radio → Publish → copy the link from the "Video published" dialog.
  • replacing a published lesson: YouTube cannot swap the file on an existing video, so upload the new cut as a new video (same title, description recipe and thumbnail), then set the old one to Private on studio.youtube.com/video/<id>/edit (Visibility box → Private → Done → Save; the Save button stays active until the change is saved). Deleting the old video is the user's call.
  • never press Escape inside the upload dialog: it closes the dialog. The upload is already saved as a private draft; reopen it with "Edit draft" on the row. Later edits go through studio.youtube.com/video/<id>/edit, then Save.
  • playlist, after Publish: the video must end up in the playlist from YOUTUBE_PLAYLIST.md, at the position its title has in that list. Preferred path is inside the upload dialog's Details step: the Playlists box ("Select") sits under the description; open it with a coordinate click (a ref click after scroll_to did not open it), tick the playlist, Done. If it was skipped, use studio.youtube.com/video/<id>/edit → Playlists → tick → Done → Save. The playlist is manually sorted and a new video is appended last, so uploading in series order needs nothing more; otherwise open https://www.youtube.com/playlist?list=<id> on the logged-in account, and use the row's ⋮ menu (Move to top / Move to bottom) or drag the ≡ handle until the order matches the file. Then run node scripts/register.js <slug> <youtu.be link>: it records the upload in the lesson folder (published.json), puts the link on the lesson's line in YOUTUBE_PLAYLIST.md (appending the line when it is missing; move it to its series position if needed) — that file is the order of record — and prints the entry for website/lib/youtube-lessons.ts; add it there and link it from the page about that feature. Studio's playlist page (studio.youtube.com/playlist/<id>/videos) lists and removes videos but cannot reorder them.
  • verify before reporting: the row in Channel content shows Public, the thumbnail is the beige title card, the title has no suffix, and the playlist page shows the video in the right position. Report the youtu.be link, the title, the description text and the playlist position. External links stay plain text until the channel completes YouTube's one-time verification (a phone step only the user can do); say so once.

© 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 2 other files (scripts) in .claude/skills/lesson-publish of gug007/lpm.

  • SKILL.md
  • scripts/prepare.js
  • scripts/register.js

Open the folder on GitHubat commit 57f7a3f

Compare with similar skills

Lesson Publish 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 Publish compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Lesson Publish this skillgug007/lpm152—~1.8kAutomated safety check: PassMIT
Analyze Socialccplugins/awesome-claude-code-plugins970—~1.1kAutomated safety check: WarnApache-2.0
Memstack Content Youtube Scriptcwinvestments/memstack423—~3.5kAutomated safety check: PassProprietary
Shortform Ideationericrisco/rsc-harness180—~3.1kAutomated safety check: PassMIT
Cross Platform ReformatterOotto-AI/claude-content-skills130—~449Automated safety check: PassMIT
Video Hook Generatornicepkg/ai-workflow285—~2kAutomated safety check: PassMIT

Similar skills

  • Analyze Social

    ccplugins/awesome-claude-code-plugins

    A skill your agent uses when the user shares a social video/post link or local video and wants it understood — an Instagram (instagram.com), TikTok (tiktok.com), YouTube or YouTube Shorts…

    970 GitHub stars~1.1k tokensUpdated 1 mo ago
    Media & CreativeAuto-check: warnings
  • Memstack Content Youtube Script

    cwinvestments/memstack

    A skill your agent uses when the user says 'YouTube script', 'video script', 'write script for YouTube', 'YouTube video outline', or is creating scripted content for a YouTube video with hooks…

    423 GitHub stars~3.5k tokensUpdated 13 days ago
    Media & CreativeAuto-check passed
  • Shortform Ideation

    ericrisco/rsc-harness

    A skill your agent uses when a Reels/TikTok/Shorts account needs its next video ideas scored into a ranked backlog, grounded in its own performance log plus dated trending sounds, each bet logged so…

    180 GitHub stars~3.1k tokensUpdated today
    Media & CreativeAuto-check passed
  • Cross Platform Reformatter

    Ootto-AI/claude-content-skills

    Reshapes one Instagram reel into a TikTok and a YouTube Short — adjusting hook, length and captions per platform.

    130 GitHub stars~449 tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • Video Hook Generator

    nicepkg/ai-workflow

    Generate attention-grabbing hooks for the first 3 seconds of videos.

    285 GitHub stars~2k tokensUpdated 8 mo ago
    Media & CreativeAuto-check passed
  • Video Marketing

    aAAaqwq/AGI-Super-Team

    When the user wants to plan video marketing, create video scripts, or optimize for short-form or long-form video.

    105 GitHub starsUsed in 1 repo~914 tokens
    Media & CreativeAuto-check passed

More from gug007/lpm

All 12 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, one above the other, and both games then play live in lpm's browser.

    152 GitHub stars~2.1k 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, one above the other: Run in duplicates puts each model in its own copy of the project, shown as two rows, the…

    152 GitHub stars~4.3k 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
  • Make the App Store screenshots for lpm Link (iPhone 6.3" 1206x2622 and iPad 13" 2064x2752) from the current mobile/ source: a screenshot build of the app opens each screen straight into Demo Mode…

    152 GitHub stars~1.2k 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

Works with

Questions about Lesson Publish

What does Lesson Publish do?

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…. Lesson Publish is an agent skill from 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 title-card thumbnail, Public, then added to the lesson playlist.

When should I use Lesson Publish?

Lesson Publish fits situations like: the user asks to upload; post a lesson video to YouTube.

How do I install Lesson Publish in Claude Code?

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

How do I install Lesson Publish in Codex?

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

Can I use Lesson Publish 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-publish -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-publish, .gemini/skills/lesson-publish, .github/skills/lesson-publish and .opencode/skills/lesson-publish in your project.

What does Lesson Publish need to run?

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

Does Lesson Publish access the network?

SKILL.md names 2 domains. In commands or code: youtube.com and lpm.cx; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Lesson Publish 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 Publish use?

Lesson Publish 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 Publish use?

About 1.8k tokens (SKILL.md is roughly 7.3k 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 Publish?

Skills that share tags, products or a category with Lesson Publish: Analyze Social (ccplugins/awesome-claude-code-plugins, 970 stars), Memstack Content Youtube Script (cwinvestments/memstack, 423 stars), Shortform Ideation (ericrisco/rsc-harness, 180 stars) and Cross Platform Reformatter (Ootto-AI/claude-content-skills, 130 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Lesson Publish?

gug007 (a GitHub user) maintains it in gug007/lpm, which has 152 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on October 10, 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.