← All guides

🎬 YouTube-Video-to-Content Engine

One YouTube video in β†’ a blog post, a Twitter thread, two LinkedIn posts, a SKFAI guide, and 3–5 short-form clips out β€” all in your voice, all grounded in your channel's real performance data.

Claude Code plugin 7 skills 6 content channels Onboard once, reuse forever MIT licensed

i Overview

This is a Claude Code plugin that bundles seven skills into a single, ordered workflow. You onboard once, then run the system before and after every video you publish. Instead of a generic "write me a tweet" prompt, every asset is generated through your Voice DNA and benchmarked against your top-performing titles.

🧭

Before you film

Ideation β†’ titles β†’ hooks β†’ outline. Ranked ideas, tested titles, an aligned hook, a filmable script.

πŸš€

After you publish

One command turns the video into a blog, Twitter thread, LinkedIn posts, a guide, and short-form clips.

πŸŽ™οΈ

Your voice, not a template

Onboarding writes your Voice DNA into every content prompt so output sounds like you.

πŸ“ˆ

Grounded in your data

Titles are ranked against your real channel performance (views/day, engagement) β€” not generic tips.

πŸ’‘ The running example on this page uses the channel @SKFAI β€” Claude Code tutorials for stock-trading automation. Swap in your own handle during onboarding and everything below works the same.

β—ˆ How it works

You publish one video. The system turns it into a week of content across six channels.

/onboardRun once β€” channel + Voice DNA + optional keys
↓
🧭 Before you film
/ideationpositioned ideas, gaps, shock score
↓
/yt-titlestitles + thumbnail text vs. your hits
↓
/hooksvisual + spoken + text hook
↓
/outlinesrecording-ready script
πŸŽ₯
Film & uploadwait 30–60 min for captions
πŸš€ After you publish
/content-cascadeurl or "latest"
πŸ“ Blog🐦 Twitter threadπŸ’Ό LinkedIn🧲 Lead magnet*πŸ“š SKFAI guide*
/short-formurl or "latest"
🎬 3–5 Reels / Shorts / TikTok clips
* tutorial videos only

β–Ά Step-by-step walkthrough

Exactly what a session looks like, from zero to a full content drop, using @SKFAI as the example.

Step 1 β€” /onboard (once)

You:  /onboard

Claude walks you through three things:

1. Connect your channel

Claude: What's your YouTube channel handle or URL?
You:    @SKFAI
Claude: Connected to @SKFAI. I can now read your upload history
        and pull your latest video automatically.

This writes your channel into the performance script and resolves your canonical channel ID, so later skills can find your real videos.

2. Capture your Voice DNA

Claude asks ~3 questions and folds the answers into every content prompt:

Claude: In one or two sentences, how would you describe your voice?
You:    Warm and confident, analogy-first (poker, thermostats, car
        insurance), I always back claims with real numbers, and I close
        with a soft "come build with us in the Claude Club."
Claude: Who's your audience and what do you teach them?
You:    Non-coders learning to build and automate with Claude β€” right now,
        stock-trading automation.

From now on, your blog / Twitter / LinkedIn output sounds like you, not like a template.

3. Optional keys

Apify (reliable transcripts), Supabase (auto-save drafts), Twitter (auto-post). All skippable β€” say "skip" and add them later.

At the end, onboarding prints your workflow map and a suggested first command. You only do this once per channel.

Step 2 β€” /ideation β€” what should I make?

You:  /ideation Claude Code for stock trading

You get 7–10 positioned ideas, each mapped to a core desire, scored for "shock," and checked against competitive gaps. The Tier 1 picks look like:

## I Let Claude Code Copy Every Trade a Senator Makes

- Angle:           Turn public Capitol Trades disclosures into an automated
                   paper-trading bot β€” nobody has shown the full build.
- Core Desire:     Money  β†’  Proxy: "trade like someone with inside access,
                   legally, on autopilot"
- Shock Score:     86/100
- Format:          Case Study (build + result reveal)
- Competitive Gap: Plenty of "politicians beat the market" explainers,
                   zero end-to-end "here's the bot" tutorials.
- Why Now:         Capitol Trades API is free + congressional trading is
                   trending after the latest disclosure cycle.

Pick one and carry it into the next steps.

Step 3 β€” /yt-titles β€” title it like your hits

You:  /yt-titles a video where I build a bot that copies senator stock trades

This is the skill that makes the system yours: it pulls your actual top performers (via channel_performance.py), finds the title patterns your audience already rewards, then generates titles in that pattern.

## Your Top Performers (last 3 months)
Your "I Let Claude…" + concrete-outcome format outperforms your how-to titles
~3x on views/day. Numbers and a clear result are doing the work.

## Title Options

### Tier 1 β€” High Confidence
1. I Built a Bot That Copies Senator Stock Trades (Claude Code)
   Based on your "I Built…" pattern β€” proven, names the tool, concrete.
2. Claude Code vs. Congress: I Copied Their Trades for 30 Days
   Your contrarian + timeframe pattern; "vs." adds tension.

### Tier 3 β€” Swing for the Fences
8. I Gave Claude My Brokerage Account. Here's What Happened.
   Pattern-break curiosity gap β€” higher risk, higher ceiling.

## Thumbnail Text Options
For "I Built a Bot That Copies Senator Stock Trades":
1. "LEGAL?"      β€” tension against the title's premise
2. "+18% / MO"   β€” concrete proof the title withholds

Step 4 β€” /hooks β€” nail the first 15 seconds

You:  /hooks I Built a Bot That Copies Senator Stock Trades with Claude Code

Uses the Kallaway desire-based framework to produce three fully-aligned hooks (visual + spoken + on-screen text), each scored against the Four Commandments:

### Hook 1 β€” Case Study + "About Me"
Spoken:       "I gave Claude Code a list of every stock a senator bought
              last quarter β€” and let it trade them for me."
Visual:       Screen recording: Capitol Trades feed β†’ Claude Code running β†’
              Alpaca paper account ticking up
Text overlay: "COPYING CONGRESS"
Power Words:  Subject βœ“ Action βœ“ Objective βœ“ Contrast βœ“ Time βœ“ (5/6)
Commandments: Alignment βœ“ Speed βœ“ Clarity βœ“ Curiosity βœ“ (4/4)

Step 5 β€” /outlines β€” a recording-ready script

You:  /outlines the senator-copy-trading bot video, ~14 minutes

A full outline in recording format: hook, structured body sections with talking points, visual-aid callouts, demo beats, source citations, per-section time budgets, and a production-notes block (competitive landscape, title ideas, thumbnail moments, honest limitations). You sit down and film straight from it.

## Hook (~60s)            [the aligned hook from Step 4]
## Section 1 β€” The Setup (~2.5 min)
   Core idea:  Congressional trades are public β€” and weirdly good.
   Talking points: β€’ Capitol Trades is free  β€’ the disclosure lag
   Visual aid: β†’ screen recording of the Capitol Trades feed
   Source:     capitoltrades.com
## Section 2 β€” Wiring Claude Code to Alpaca (~5 min)  [demo-heavy]
...
## Production Notes  β†’  3 competitor titles, 3 thumbnail moments, limitations
πŸŽ₯ Now you film and upload the video. YouTube takes 30–60 min to generate captions; once they're live, continue.

Step 6 β€” /content-cascade β€” the long-tail content

You:  /content-cascade latest

Claude auto-detects your latest upload, fetches the transcript, classifies the video (tutorial vs. discussion), and generates β€” in your voice:

  • A 1,500–2,500 word blog post with SEO metadata (title, description, slug, keywords, tags, cover image)
  • A Twitter/X thread built around the single best angle
  • A LinkedIn post mirroring the video's premise
  • Because this one is a tutorial, it also generates a LinkedIn lead-magnet post + a Skool-ready HTML guide

Each piece is shown to you for review before saving. With keys configured it can auto-save drafts to Supabase and auto-post the thread; without them, everything saves as local markdown under content/.

Step 7 β€” /short-form β€” slice the clips

You:  /short-form latest

Scans the transcript for the 3–5 most clip-worthy moments (self-contained insight, shock value, emotional peak, demo reveal) and for each gives timestamps, a scroll-stopping hook, a ready-to-paste caption, and hashtags β€” ranked by best for reach / conversions / engagement.

### Clip 1: "Is this legal?" β€” Best for reach
Timestamps:   02:14 β†’ 03:01   (~47s)
Hook:         Text "IS THIS LEGAL?"  |  Spoken "Yes, copying a senator's
              stock trades is completely legal β€” here's the catch."
Caption:      Congress has to disclose their trades. So I had Claude trade
              them for me πŸ‘€  Full build on the channel.
Hashtags:     #claudecode #ai #stocktrading #investing #fintech

πŸ“¦ What you have at the end

After one filmed video and two commands, your content/ folder (or Supabase drafts) holds:

AssetFromReady for
πŸ“ Blog post (SEO-optimized)content-cascadeyour website / newsletter
🐦 Twitter/X threadcontent-cascadeX (optionally auto-posted)
πŸ’Ό LinkedIn postcontent-cascadeLinkedIn
🧲 LinkedIn lead-magnet postcontent-cascade (tutorials)LinkedIn β†’ email capture
πŸ“š SKFAI guide (HTML)content-cascade (tutorials)your Skool / community
🎬 3–5 short-form clipsshort-formReels, Shorts, TikTok

Plus, from the pre-production side: a ranked idea, a tested title + thumbnail text, an aligned hook, and a filmable outline β€” so the next video is faster than the last.

Where files are saved (when Supabase isn't configured)

PiecePath
Blog postcontent/blog/YYYY-MM-DD-SLUG.md
Twitter threadcontent/twitter/YYYY-MM-DD-SLUG.md
LinkedIn (regular)content/linkedin/YYYY-MM-DD-SLUG.md
LinkedIn (lead magnet)content/linkedin/YYYY-MM-DD-SLUG-lead-magnet.md (tutorials only)
SKFAI guide (HTML)content/guides/SLUG-guide.html (tutorials only)
Short-form clipscontent/short-form/YYYY-MM-DD-<slug>-shorts.md (optional save)

πŸ›  Skills reference

OrderSkillCommandWhat it does
0onboard/onboardOne-time setup: channel, Voice DNA, optional keys
1ideation/ideation <topic>Positioned video ideas with gaps, desire mapping, shock scores
2yt-titles/yt-titles <idea>Titles ranked against your top performers + thumbnail text
3hooks/hooks <title>Kallaway-framework hooks (visual + spoken + text), scored
4outlines/outlines <idea>Recording-ready outline with time budgets + production notes
5content-cascade/content-cascade <url|latest>Blog + Twitter + LinkedIn (+ lead magnet + guide)
6short-form/short-form <url|latest>3–5 clips with hooks, captions, hashtags, timestamps

Each skill also activates from natural language β€” you don't have to use the slash command. "Give me title ideas for…" triggers yt-titles; "make shorts from my latest video" triggers short-form.

Each skill has its own page with the full internals β€” click a skill name in the table, or browse all 7 skills →

✍ Voice & content prompt templates

Five system prompts live in skills/content-cascade/prompts/. Each ships as a generic template with a [YOUR BRAND] placeholder β€” /onboard writes your Voice DNA block at the top of each, and you can edit them directly. The voice wins when craft guidance and voice conflict.

Prompt fileLengthStructure & key rules
blog-system-prompt.md
(most critical β€” follow exactly)
1,500–2,500 words H1 title β†’ bold hook sentence β†’ H2 sections phrased as questions (SEO) β†’ visual explanation blocks β†’ lists with bold labels (- **Label** β€” explanation) β†’ FAQ (3–5 Qs) β†’ CTA block. Conversational, short paragraphs (2–3 sentences), no blockquotes, inline code for commands, fenced code with language IDs. Cover image = YouTube thumbnail. 5–8 real visual files.
twitter-system-prompt.md 5–8 tweets, <280 chars each Tweet 1 = scroll-stopping hook (bold claim / surprising stat / contrarian take; no emojis) β†’ tweets 2–7 one idea each β†’ final tweet CTA. Pick one angle. No hashtags in the body.
linkedin-system-prompt.md 800–1,500 chars Hook line (first ~150 chars visible before "see more") β†’ 3–5 insights with line breaks β†’ CTA + video link. Mirror the video's full premise. One blank line every 1–2 sentences. Thumbnail as image.
linkedin-lead-magnet-system-prompt.md
(tutorials only)
800–1,500 chars "Steal my [playbook/roadmap/toolkit] for [outcome]" hook in the first ~150 chars β†’ outcomes ("After this playbook you'll be able to…"), not a table of contents β†’ CTA: comment a keyword to get the resource (keep the keyword consistent).
guide-system-prompt.md
(tutorials only)
standalone HTML Title β†’ Overview (2–3 sentences) β†’ Prerequisites β†’ numbered Steps with code/commands β†’ Troubleshooting β†’ Next Steps. Must work without watching the video; include all commands/config; use h1–h3, p, ul, ol, li, strong, code, pre. Skool preserves pasted HTML.

βš™ Scripts reference

ScriptPurposeUsage & setup
fetch-transcript.js Free transcript via the youtube-transcript package. Accepts watch / youtu.be / embed / shorts URLs or a raw 11-char ID. node fetch-transcript.js <url-or-id>
npm install youtube-transcript; set TRANSCRIPT_MODULE_PATH to the dir containing node_modules (or run from it).
fetch-transcript-apify.js Most reliable transcript, via the Apify karamelo~youtube-transcripts actor (proxy, up to 8 retries). Decodes HTML entities. node fetch-transcript-apify.js <url-or-id>
Requires APIFY_API_TOKEN (free tier at apify.com).
post-thread.js Posts a Twitter/X thread from a file and appends "Watch the full video πŸ‘‡ + link" as the final reply. Prints the live thread URL. node post-thread.js <thread-file> [youtube-url]
npm install twitter-api-v2; 4 Twitter keys in .env. Each tweet in the file must start with 1/, 2/…
channel_performance.py Pulls recent uploads via yt-dlp and ranks them by views with views/day, engagement ratio, and like ratio. python channel_performance.py --months 3 --count 30
CHANNEL_URL is set for you by /onboard (e.g. https://www.youtube.com/@SKFAI/videos).
generate-flyer.js Renders a LinkedIn lead-magnet flyer PNG from JSON using Playwright. node generate-flyer.js <input.json> <output.png>
Input: { "title", "subtitle", "items": [...], "footer" }. Needs Playwright from a global @playwright/cli install.
generate-flyer-hook.js Renders a bold, thumbnail-style lead-magnet flyer PNG (big number + highlight word + icon). node generate-flyer-hook.js <input.json> <output.png>
Input: { "number", "highlight", "headline", "badge", "icon", "accentColor" }; icon ∈ cursor · rocket · bolt · brain · tools · layers; accentColor defaults to #7c6bf5.
The two flyer generators ship in the repo but aren't part of the seven-skill flow β€” they're optional helpers for producing the image that goes with the lead-magnet LinkedIn post.

πŸ”§ Configuration & optional integrations

Everything optional lives in skills/content-cascade/.env (copy from .env.example). /onboard can write it for you. Without any of these the system still runs the full pipeline β€” it just saves to local markdown and you copy-paste to publish.

IntegrationEnv varsWhat it adds
Apify β€” apify.com (free tier)APIFY_API_TOKENMost reliable transcript fetching, especially for videos uploaded in the last hour
Supabase β€” supabase.com (free project)SUPABASE_SERVICE_ROLE_KEY (+ your project URL in content-cascade/SKILL.md)Auto-save blog posts and social drafts to a database. Find URL + key under Settings β†’ API
Twitter / X β€” developer.x.comTWITTER_API_KEY, TWITTER_API_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_TOKEN_SECRETAuto-post the generated thread
πŸ” Keep .env out of git (the repo's .gitignore handles this) and never paste real keys into prompts or commits.
πŸ”Ž Competitor scanning: ideation, outlines, and yt-titles can optionally run a YouTube competitor scan through a separate yt-search helper that does not ship with this plugin. Those steps are clearly marked optional and degrade gracefully β€” every skill produces its full output without them. Your own channel performance data (used by yt-titles) is built in.

β†— Making it yours & scaling it

πŸ”

Switch channels

Re-run /onboard β€” it updates the same config in place for a new handle or refreshed Voice DNA.

🧩

Use skills standalone

Each skill works on its own. Already filmed? Jump straight to /content-cascade. Only want clips? Run /short-form.

✏️

Tune the voice

The five prompt files are plain markdown β€” the more specific your voice guidelines, the better the output.

πŸ—„οΈ

Automate storage & posting

Add Supabase to save drafts to a database and Twitter keys to auto-post threads; Apify for reliable fresh-upload transcripts.

πŸ—£οΈ

Natural-language triggers

Skills activate from plain requests ("make shorts from my latest video"), so it fits into any Claude Code session.

πŸ›‘οΈ

Safe by default

Nothing posts unless you set up the Twitter keys and say to post. Everything saves as a draft for your review.

? FAQ & troubleshooting

Do I have to run the skills in order?

No β€” each works standalone. The order is the recommended end-to-end flow. Already filmed? Jump straight to /content-cascade.

Does this post to my accounts?

Only if you set up the Twitter keys and explicitly say to post. By default everything saves as a draft for your review.

"Captions aren't available yet."

YouTube takes 30–60 minutes to generate captions after upload. Run the cascade again a bit later, or add an Apify token for more reliable fetching of fresh uploads.

The transcript doesn't match my video

The auto-generated en track can return a wrong transcript for recent uploads. The skills sanity-check the first 1–2 sentences against the title and fall through to the next method; prefer the en-orig track or Apify.

How do I switch channels or refresh my voice?

Re-run /onboard β€” it updates the same config in place.

yt-dlp / node not found

/onboard checks prerequisites and prints the install command: pip install yt-dlp for yt-dlp, and nodejs.org for Node. If yt-dlp is missing, the handle-based URL still works for most operations.

Skills don't show up after installing

Restart Claude Code so the skills load. If you installed the skills manually, make sure you copied them with cp -R skills/* ~/.claude/skills/ (no trailing slash on skills/*).