| name | social-copy |
| description | Create platform-ready social media text posts and static visuals from a YouTube video package or any topic. Generates X/Twitter, LinkedIn (text + carousel + image), Instagram, YouTube Community, and Skool posts. Triggers on: create a post, social media post, make a linkedin post, write a tweet, content for, post ideas from this video, create content from, make a post about. |
Create platform-ready social media posts and visuals from $ARGUMENTS.
Workflow Context
Text content step of the weekly content pipeline - runs after /yt-seo for each long-form video, and after /yt-shorts to render the 2 Instagram carousel outlines into actual Blotato visuals.
Run twice per week (once per video) for:
- 2 LinkedIn posts (one per video)
- 2 YT Community posts (one per video)
- 2 Skool video posts (one per video)
- 5 standalone LinkedIn posts (same video topics)
- 5 standalone YT Community posts/polls (same video topics)
- 2 Instagram carousels (from
/yt-shorts outlines)
Overview
This skill generates text posts + static visuals for X/Twitter, LinkedIn, Instagram, and YouTube Community - from either a YouTube video package or a standalone topic/URL/idea. It is distinct from /repurpose (which makes short-form video scripts). This skill also handles publishing directly via Blotato MCP.
Output locations:
- YT video mode ->
~/content/youtube/<slug>/social/
- Standalone mode ->
~/social/YYYY-MM-DD-<slug>/
Step 1: Detect Source Mode
Parse $ARGUMENTS to determine the input type:
- YouTube video package - path like
~/content/youtube/<slug>/ or just a slug name
- Topic / URL - a subject, article link, or research query
- Direct text - user provides raw copy or idea to adapt
If $ARGUMENTS is empty or ambiguous, ask:
"What's the source for this content? You can give me:
- A YouTube video package path (e.g.
~/content/youtube/claude-code-btw/)
- A topic or URL to research
- Raw text or idea to adapt into posts"
Step 2: Load Content
YouTube Video Mode
Read these files if they exist (in order of priority):
~/content/youtube/<slug>/script.md - full script for deep insight extraction
~/content/youtube/<slug>/description.md - polished summary + key points
~/content/youtube/<slug>/hooks.md - strong angles and hooks already written
~/content/youtube/<slug>/titles.md - for post headline ideas
Also look up the YouTube URL for the video by running:
yt-dlp "https://www.youtube.com/@tylerreedai/videos" --print "%(webpage_url)s | %(title)s | %(upload_date)s" --no-download --playlist-end 20 2>/dev/null
Match the video title to find the URL. Store it for use in posts.
Research Mode (topic or URL)
Run 2-3 targeted WebSearch queries on the topic. Look for:
- Recent developments, stats, or expert quotes
- Contrarian angles or surprising findings
- Practical takeaways your audience cares about
Summarize findings internally before writing.
Direct Text Mode
Accept the user's raw input as-is. Ask if there are any key angles or tones they want emphasized.
Step 3: Extract Core Ideas
Identify 3-5 key insights, angles, or takeaways that will anchor all platform content. Look for:
- Surprising or counterintuitive facts
- Practical, actionable tips
- Strong opinions or hot takes
- Before/after or transformation moments
- Quotable one-liners
Present these to the user briefly so they can redirect if needed.
Step 4: Ask Platform + Format Preferences
Ask:
"Which platforms do you want posts for? (default: all)
- X/Twitter
- LinkedIn (text post with video link)
- Instagram (carousel via Blotato)
- YouTube Community
- Skool"
If they say "all" or don't specify, generate all platforms.
Step 5: Generate All Text Content
X/Twitter - Thread Format
Write as a thread: one punchy main tweet + 4-5 reply tweets + final reply with video link.
- Main tweet: bold hook, under 230 chars (your account limit)
- Reply tweets: one point each, under 230 chars
- Final reply: CTA + YouTube URL
- No hashtags (they reduce engagement on X)
- No em dashes - use commas or plain dashes instead
- Write as punchy standalone insights, not "check out my video"
LinkedIn Text Post
Structure (8-part framework):
-
Hook (6-8 words max) - Stop the scroll. Use one of these proven formulas:
- "I [did unexpected thing]. Here's what happened:"
- "[Number] [things] I wish I knew about [topic]"
- "Stop doing [common thing]. Do this instead:"
- "Everyone is wrong about [topic]. Here's why:"
- "I spent [time] doing [thing]. [Surprising result]."
-
Rehook - Second line that challenges or expands the hook. Creates curiosity gap.
-
Problem - Call out the reader's exact struggle in 1-2 sentences.
-
Solution - Deliver the core value/insight.
-
Signpost - "Here's how I did it:" or "Here's the framework:" - hint at the details coming.
-
Body - 3-5 key points. Short paragraphs of 1-2 sentences each. Use blank lines between every paragraph. Can use emojis sparingly for visual breaks but NOT as bullet points.
-
Power ending - One impactful closing sentence. Pattern interrupt or strong opinion.
-
Question CTA - End with a simple, easy-to-answer question (72% better engagement than statements). Include YouTube video URL after the question.
Formatting rules:
- Plain text only - NO markdown, NO bold, NO hashtags
- No em dashes - use commas or plain dashes
- 14+ short paragraphs with blank lines between each (1-2 sentences per paragraph)
- 1,242-2,500 characters optimal length
- Grade 5-7 reading level - simple, clear, human
- Write "How I" not "How to" - readers want real stories
- First person, conversational but professional
- Lead with insight, not a promotional pitch
Algorithm optimization:
- No external links in the main post body (60% less reach). Put the YouTube URL at the very end after the CTA question, or in a comment.
- Design for dwell time - longer reads with engaging structure
- Posts go live between 10-11 AM ET, especially Tue-Thu
LinkedIn Carousel (PDF via Gamma or Kie.ai)
When the user requests a LinkedIn carousel, create slide content following these specs:
Specs:
- PDF format, 1080x1080 (1:1) or 1080x1350 (4:5)
- 6 content slides (no CTA slide - you add separately with Kie.ai)
- One idea per slide, large readable text
- Minimal text per slide - 2-4 short lines max
Slide structure:
- Slide 1 (Hook): Bold headline with specific value/numbers. Under 8-10 words. Answer: "Is this for me?" and "What do I get if I swipe?"
- Slides 2-5 (Value): One key point per slide. Big bold heading + short explanation.
- Slide 6 (Summary): Key takeaway or actionable closing.
PDF filename matters - it becomes the bold clickable headline under the carousel on LinkedIn. Make it compelling.
Carousel-specific caption:
- Use the 8-part text post framework above for the caption
- End with "Save this for later" or "Send this to someone who needs it" (targets saves + shares, the top algorithm signals)
If using Gamma API:
python3 ~/.claude/skills/carousel/gamma_carousel.py "<slides_file>" \
--theme-id "6mnm4rnohwy7bmr" \
--num-cards 6
Instagram Carousel - Visual Carousel Maker
All Instagram carousels go through the visual carousel maker at http://localhost:3010. Exports land in ~/content/platform/carousels/<slug>/.
Two ways to create carousels:
Option A — From this skill (API):
Generate and auto-save carousels directly by calling the bulk endpoint:
curl -s -X POST http://localhost:3010/api/bulk-generate \
-H 'Content-Type: application/json' \
-d '{
"items": [
{"topic": "<topic 1>", "frameworkId": "educational", "platform": "instagram"},
{"topic": "<topic 2>", "frameworkId": "hormozi", "platform": "instagram"}
]
}'
Returns {results: [{id, title, savedAt}]}. Carousels are saved to the app's library.
After generating, tell the user: "Your carousels are ready in the carousel maker — open it at http://localhost:5175 to add backgrounds and export."
Available frameworkIds (check /api/frameworks for the current list):
educational — step-by-step, numbered tips
hormozi — contrarian, proof-driven
quick-wins — fast actionable list
storytelling — narrative arc
instagram-writer — Cover/Pain/Solution/How/Results/CTA
Option B — In-app batch UI:
Tell the user to click the ⚡ Batch button in the carousel maker header. They paste topics (one per line), pick a framework, and generate all at once.
Carousel content rules (Instagram-specific):
- 4:5 aspect ratio (1080x1350) - fills the screen
- First slide: under 8-10 words, answer "Is this for me?" and "What will I get if I swipe?"
- Design for saves and shares - these are the #1 and #2 algorithm signals
- Export as PDF for posting via Blotato (use PDF, not individual PNGs)
Posting via Blotato:
After the user exports the PDF from the carousel maker, post using Blotato:
- Upload the PDF as the carousel asset
- Use only slides 1-6 (the exported PDF is already correct)
- The export saves to
~/content/platform/carousels/<slug>/<slug>.pdf
Instagram Caption rules:
- 150-250 words
- Hook line first (must earn the swipe)
- Swipe CTA early ("Swipe to see all 5")
- Keyword-rich SEO language - include searchable terms like "Claude Code tutorial", "AI automation tips", "AI workflow" naturally in the caption. Keywords in captions matter MORE than hashtags for Instagram discovery now.
- End with dual CTA: "Save this for later" + "Send to someone who needs this" (targets the top 2 algorithm signals: saves and shares)
- Exactly 5 hashtags at the very end: #claudecode #claudeai #ai #claudecodetips #aiautomation
YouTube Community Post (2-4 sentences)
Tone: Casual, like texting a friend about something cool.
- 1-2 sentences about the video
- End with an easy question
- Include
[VIDEO_URL] placeholder
Skool Post
Tone: Knowledgeable friend sharing something useful in a group chat. Not a newsletter, not a sales pitch.
For video days (long-form release):
- Hook line that stands on its own - not "new video is up"
- 2-4 short paragraphs with the key insight or takeaway from the video
- End with a genuine question or CTA ("Drop a comment if you've tried this", "Who's already using this?")
- Include
[VIDEO_URL] at the end
- 150-300 words
Rules:
- Plain text only - no markdown bold, no headers (Skool renders them oddly)
- No em dashes - use plain hyphens or commas
- Short paragraphs - 1-3 sentences max
- Lead with the most interesting thing, not background context
- Emojis sparingly for visual breaks only
Step 6: Review Loop
Show all content clearly, organized by platform. Ask if anything needs revision before saving or posting.
Quality checklist before showing:
Step 7: Save Outputs
YT video mode -> ~/content/youtube/<slug>/social/
Standalone mode -> ~/content/YYYY-MM-DD-<topic-slug>/
Files to write:
| File | Contents |
|---|
x.md | Thread (main tweet + replies) |
linkedin.md | Text post with video URL |
instagram.md | Carousel slide URLs + caption |
community.md | 2-3 YT Community post drafts |
skool.md | 2-3 Skool post drafts (video post + variants) |
status.md | Post tracking table (see format below) |
status.md format:
# Post Status - [Video Title]
## Video
**Title:** ...
**YouTube URL:** ...
**Published:** YYYY-MM-DD
---
## Posted
| Platform | Format | Date | URL | Notes |
|---|---|---|---|---|
## Pending
| Platform | Format | Notes |
|---|---|---|
---
## Assets
- List of files in social/
Step 8: Post Inline
After saving, ask: "Ready to post? Which platforms?"
Handle posting directly using Blotato MCP tools - no need to hand off to /post skill:
- Call
blotato_list_accounts to get account IDs
- Call
blotato_create_post for each platform
- For X threads, use
additionalPosts array for reply tweets
- Poll
blotato_get_post_status if needed
- Update
status.md with live URLs after posting
Account IDs (run blotato_list_accounts to get your own):
- Instagram:
<your-instagram-account-id>
- LinkedIn:
<your-linkedin-account-id>
- Twitter/X:
<your-x-account-id>
Optimal posting times:
- LinkedIn: 10-11 AM ET, best on Tue-Thu. Wednesday 11 AM-4 PM is peak.
- Instagram: 6-9 AM, 11 AM-1 PM, or 7-9 PM EST. Best on Tue/Wed/Fri.
- X: Mornings or lunch, weekdays
Rules
- Never auto-post - always show content and get confirmation before publishing
- Never skip the review step - show all content before saving
- Run the quality checklist in Step 6 before presenting content
- LinkedIn: plain text only, no markdown, no hashtags, no em dashes, 8-part framework, 14+ paragraphs
- X/Twitter: 230 char limit per tweet, thread format with video link in last reply
- Instagram Blotato carousel: use only slides 1-6, skip slide 7 (broken CTA) - replace with custom Kie.ai image
- Instagram captions: keyword-rich SEO language, dual save+share CTA, exactly 5 hashtags
- Always fetch real YouTube URL from channel before writing posts
- Always create/update
status.md to track what was posted and where
- If a
social/ folder already exists, ask before overwriting existing files
- For standalone mode, always do WebSearch research before writing (2-3 queries minimum)
- Engagement reminder: After posting, remind the user to reply to comments within 60 minutes (30% engagement boost on LinkedIn, critical for Instagram's 24-48hr algorithm window)