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.
β How it works
You publish one video. The system turns it into a week of content across six channels.
βΆ 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
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:
| Asset | From | Ready for |
|---|---|---|
| π Blog post (SEO-optimized) | content-cascade | your website / newsletter |
| π¦ Twitter/X thread | content-cascade | X (optionally auto-posted) |
| πΌ LinkedIn post | content-cascade | |
| π§² LinkedIn lead-magnet post | content-cascade (tutorials) | LinkedIn β email capture |
| π SKFAI guide (HTML) | content-cascade (tutorials) | your Skool / community |
| π¬ 3β5 short-form clips | short-form | Reels, 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)
| Piece | Path |
|---|---|
| Blog post | content/blog/YYYY-MM-DD-SLUG.md |
| Twitter thread | content/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 clips | content/short-form/YYYY-MM-DD-<slug>-shorts.md (optional save) |
π Skills reference
| Order | Skill | Command | What it does |
|---|---|---|---|
| 0 | onboard | /onboard | One-time setup: channel, Voice DNA, optional keys |
| 1 | ideation | /ideation <topic> | Positioned video ideas with gaps, desire mapping, shock scores |
| 2 | yt-titles | /yt-titles <idea> | Titles ranked against your top performers + thumbnail text |
| 3 | hooks | /hooks <title> | Kallaway-framework hooks (visual + spoken + text), scored |
| 4 | outlines | /outlines <idea> | Recording-ready outline with time budgets + production notes |
| 5 | content-cascade | /content-cascade <url|latest> | Blog + Twitter + LinkedIn (+ lead magnet + guide) |
| 6 | short-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 file | Length | Structure & 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
| Script | Purpose | Usage & 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 30CHANNEL_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. |
π§ 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.
| Integration | Env vars | What it adds |
|---|---|---|
| Apify β apify.com (free tier) | APIFY_API_TOKEN | Most 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.com | TWITTER_API_KEY, TWITTER_API_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_TOKEN_SECRET | Auto-post the generated thread |
.env out of git (the repo's .gitignore handles this) and never paste real keys into prompts or commits.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/*).