Step 0 of the system โ run once. Personalizes every other skill to one creator so titles, hooks, blog posts, and clips come out in their voice and grounded in their channel's data. Conversational and fast: ask, write the config, confirm, hand off.
Triggers: "onboard", "set up the content system", "set up content repurpose", "get started with content repurpose", "configure my channel" โ or the first time someone uses another skill without a configured channel.
What it sets up
- Channel connected โ so
yt-titlesandcontent-cascadecan read real upload history and the "latest video". - Voice DNA written into the prompts โ so content is in the creator's voice, not a template voice.
- Optional integrations โ Apify, Supabase, Twitter. All skippable.
Everything is stored inside the plugin at ${CLAUDE_PLUGIN_ROOT}, so it survives across sessions.
Step 1 โ Connect the channel (required)
Ask for the handle or URL (e.g. @SKFAI or https://www.youtube.com/@SKFAI), normalize to a handle and a videos URL (https://www.youtube.com/@SKFAI/videos), then write it into two places:
a) The performance script โ replace the CHANNEL_URL constant:
python3 - "$CLAUDE_PLUGIN_ROOT" "@SKFAI" <<'PY'
import re, sys, pathlib
root, handle = sys.argv[1], sys.argv[2]
p = pathlib.Path(root, "skills/yt-titles/scripts/channel_performance.py")
url = f"https://www.youtube.com/{handle}/videos"
text = p.read_text()
text = re.sub(r'CHANNEL_URL = "[^"]*"', f'CHANNEL_URL = "{url}"', text)
p.write_text(text)
print("Channel set to", url)
PY
b) The channel ID for "latest video" auto-detect โ resolve the canonical ID once:
yt-dlp --flat-playlist --playlist-items 0 --print channel_id "https://www.youtube.com/@SKFAI/videos"
Then replace every YOUR_CHANNEL_ID placeholder in the skills:
grep -rl 'YOUR_CHANNEL_ID' "$CLAUDE_PLUGIN_ROOT/skills" | while read -r f; do
perl -pi -e 's/YOUR_CHANNEL_ID/UCxxxxxxxxxxxxxxxxxxxxxx/g' "$f"
done
If yt-dlp isn't installed yet, skip ID resolution โ the handle URL still works for most operations.
Step 2 โ Capture Voice DNA (required, ~3 questions)
- "In one or two sentences, how would you describe your voice?"
- "Who's your audience and what do you teach them?"
- "Any signature moves?" โ recurring analogies, phrases you always/never use, a standard CTA.
If the creator keeps a voice doc (e.g. voice-dna.md), it can be read and folded in. The answers go at the top of all five prompt files (see prompt templates) as a block โ the existing craft guidance stays below it:
## Voice DNA โ [Creator Name]
- **Voice:** [their description]
- **Audience:** [who they teach]
- **Signature moves:** [analogies / phrases / CTA]
- **Avoid:** [anything they said they never do]
Write everything below through this voice. When the craft guidance and the voice conflict, the voice wins.
Step 3 โ Optional integrations
cp "$CLAUDE_PLUGIN_ROOT/.env.example" "$CLAUDE_PLUGIN_ROOT/skills/content-cascade/.env" 2>/dev/null || true
- Apify (
APIFY_API_TOKEN) โ most reliable transcripts, esp. for videos uploaded in the last hour. - Supabase (
SUPABASE_SERVICE_ROLE_KEY+ project URL) โ auto-save drafts. Also replaceYOUR_SUPABASE_URLincontent-cascade/SKILL.md. - Twitter/X (4 keys) โ auto-post the generated thread.
Secrets are never echoed back in full โ confirmation shows the last 4 characters only.
Step 4 โ Prerequisites check
command -v yt-dlp >/dev/null && echo "yt-dlp โ" || echo "yt-dlp โ โ pip install yt-dlp"
command -v node >/dev/null && echo "node โ" || echo "node โ โ install Node.js"
command -v python3 >/dev/null && echo "python3 โ" || echo "python3 โ"
Step 5 โ Show the workflow
โ
VideoContentEngine is set up for [@handle].
BEFORE you film
1. /ideation <topic> โ positioned video ideas (gaps + desire + shock score)
2. /yt-titles <idea> โ titles ranked against YOUR best performers
3. /hooks <title> โ scroll-stopping hook (visual + spoken + text)
4. /outlines <idea> โ a recording-ready outline
โ film & upload the video โ
AFTER you publish
5. /content-cascade <url or "latest"> โ blog + Twitter thread + LinkedIn post (your voice)
6. /short-form <url or "latest"> โ 3โ5 Reels/Shorts/TikTok clips with hooks & captions
/onboard is safe โ it updates the same config in place. Nothing here touches your YouTube account or posts anything; it only reads public upload data and writes local config.