agentleFS
rdoser13rdoser13/free-claude-skills/social-media-manager/SKILL.md

social-media-manager

Skill3 starsChanged 3 months agoMITView on GitHub

Plug-and-play skill for writing high-performing social media captions for videos and images across every major platform. Works with any scheduler (Blotato, Buffer, Hootsuite, Metricool, Publer, Later) or manual posting. Fill in the [BRACKETED] sections with your brand voice and preferences.

10 other projects use a version of this.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

20 rules. 0 are common, 17 are distinctive, and 3 are very specific to this project.

  • 0

    Common

    Most of the 10 edited versions we read keep these.

  • 17

    Distinctive

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Optional integrations: If you use a scheduler with an MCP or API (Blotato, Buffer, etc.), you can chain this skill's output into that tool.

    line 18
  2. Distinctive:

    Instead of writing 6+ unique captions per post, write two variants and reuse:

    line 50
  3. Distinctive:

    Write captions so they make sense *without* watching (80% will scroll past)

    line 73
  4. Distinctive:

    Never say "watch this video" — the video is already attached

    line 74
  5. Distinctive:

    If you have a transcript, mine it for the strongest line — that's often your hook

    line 76
  6. Distinctive:

    Don't repeat the quote verbatim — expand on it

    line 80
  7. Distinctive:

    3. Character count check: Run this before presenting anything:

    line 101
  8. Distinctive:

    If either fails, fix before presenting.

    line 111
  9. Distinctive:

    When you finish a caption pack, present it like this so it's copy-paste friendly:

    line 117
  10. Distinctive:

    Ask the user only for what's missing:

    line 152
  11. Very specific:

    Write caption_a and caption_b

    line 160
  12. Distinctive:

    If video → also write a YouTube title

    line 161
  13. Very specific:

    If Caption A > 500 chars → write caption_threads

    line 162
  14. Very specific:

    If LinkedIn version > 280 chars → write caption_twitter

    line 163
  15. Distinctive:

    Run the three quality gates

    line 164
  16. Distinctive:

    If the user pushes back on voice, hook, or angle: rewrite the specific caption, re-run the quality gates, re-present.

    line 171
  17. Distinctive:

    If the user wants this skill to *also* schedule the posts (not just write them), they need a scheduler connected.

    line 196
  18. Distinctive:

    When a scheduler is connected, extend Step 3 with:

    line 206
  19. Distinctive:

    Ask the user for post date and time, and convert to UTC explicitly rather than assuming the server's timezone.

    line 208
  20. Distinctive:

    Pro tip: Keep caption generation and scheduling as separate concerns.

    line 214

“Common” is measured: kept by at least 6 in 10 of the 10 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Social Media Manager

How to use this skill: Replace every [BRACKETED_PLACEHOLDER] with your own info — brand voice, posting cadence, platforms you care about. That's it. This skill writes captions. How you post them (Blotato, Buffer, manual copy-paste) is up to you.

What this Skill does

Takes a video or image and writes platform-optimized captions that actually earn attention. Handles hooks, body copy, closings, hashtags, character limits, and platform-specific quirks so you can copy-paste straight into your scheduler of choice — or hand them to any posting tool that accepts text + media.

What this skill does NOT do:

  • It does not assume you use any specific scheduler
  • It does not manage a content database or state file
  • It does not auto-post (unless you layer a scheduler on top of it)

Optional integrations: If you use a scheduler with an MCP or API (Blotato, Buffer, etc.), you can chain this skill's output into that tool. See the "Optional: Hook Into a Scheduler" section at the bottom.


Use this Skill when

  • "Write captions for this video/image"
  • "Turn this into posts for every platform"
  • "Give me a caption pack for [content]"
  • "Repurpose this for social"
  • Any request where you need platform-ready social copy

Platforms Covered

PlatformVideoImageHashtags Help?Character Limit
YouTube (Shorts)✅❌✅5,000 (description)
TikTok✅✅✅2,200
Instagram (Reels/Posts/Carousels)✅✅✅2,200
Threads✅✅✅500 (hard)
LinkedIn✅✅❌3,000
X / Twitter✅✅❌280 (hard)
Facebook✅✅❌63,206
Pinterest✅✅✅500 (description)

Remove rows for any platform you don't use. The two that matter most for character budgeting: X (280) and Threads (500).


The Two-Caption System

Instead of writing 6+ unique captions per post, write two variants and reuse:

Caption A — Hashtag Platforms

Use on: YouTube, TikTok, Instagram, Threads, Pinterest

  • Hook: [YOUR_HOOK_RULE — e.g., single punchy sentence, ≤12 words, curiosity or contrarian take]
  • Body: [YOUR_BODY_RULE — e.g., 2–4 short paragraphs with proof or story]
  • Closing: [YOUR_CLOSING_RULE — e.g., declarative reframe or sharp analogy, not a question]
  • Hashtags: [YOUR_HASHTAG_COUNT — e.g., 4 relevant tags at the bottom]
  • Target length: ≤500 chars so it works on Threads from one write. If longer, also produce a trimmed caption_threads version.

Caption B — No-Hashtag Platforms

Use on: LinkedIn, X/Twitter, Facebook

  • Format: [YOUR_B_RULE — e.g., single paragraph, 2–4 sentences, declarative hook, strategic reframe]
  • No hashtags.
  • Target ≤280 chars so it works on X and LinkedIn from the same write. If LinkedIn needs more room, write a longer LinkedIn version and a trimmed caption_twitter (≤280) separately.

Content-Type Rules

For Videos

  • Write captions so they make sense without watching (80% will scroll past)
  • Never say "watch this video" — the video is already attached
  • For YouTube Shorts, also write an SEO title (≤60 chars, no periods, keyword-forward)
  • If you have a transcript, mine it for the strongest line — that's often your hook

For Single Images / Quote Cards

  • Lead with the insight, don't describe what's in the image
  • Don't repeat the quote verbatim — expand on it
  • Shorter is usually better; let the visual do work

For Carousels

  • Hook should tease the payoff of the last slide
  • Caption adds context the slides don't cover
  • End with a line that rewards people who swiped through

For Memes / Reactions

  • Ultra-short caption
  • Let the image carry the punchline
  • No hashtag stuffing

Mandatory Quality Gates (Before Delivering)

1. Engagement test. For every caption, ask: "Would I stop scrolling and actually engage with this if I saw it on my feed?" If the honest answer is no → rewrite. Boring-but-accurate fails.

2. Brand voice check. [PLUG IN YOUR VOICE/ANTI-SLOP RULES HERE — e.g., banned words, structural red flags, tone guardrails]

3. Character count check. Run this before presenting anything:

checks = {
    "caption_a": (caption_a, 500),
    "caption_b": (caption_b, 280),
}
for name, (text, limit) in checks.items():
    status = "OK" if len(text) <= limit else f"OVER by {len(text) - limit}"
    print(f"{name}: {len(text)} chars [{status}]")

If either fails, fix before presenting. Do not hand the user broken captions.


Standard Output Format

When you finish a caption pack, present it like this so it's copy-paste friendly:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📹 [Content title or filename]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🎬 YOUTUBE TITLE (if video):
[Title here — 58 chars]

📝 CAPTION A (YouTube / TikTok / Instagram / Threads / Pinterest):
[Full caption with hashtags]
— 487 chars

📝 CAPTION B (LinkedIn / X / Facebook):
[Full caption, no hashtags]
— 268 chars

🧵 THREADS OVERRIDE (only if Caption A > 500):
[Trimmed version]
— 498 chars

🐦 X OVERRIDE (only if Caption B > 280):
[Trimmed version]
— 278 chars
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This format works whether the user is pasting into Blotato, Buffer, Metricool, Publer, Later, or a Google Doc for manual posting.


Workflow

Step 1 — Intake

Ask the user only for what's missing:

  • The content (video file, image file, public URL, or transcript)
  • Topic/context if it's not obvious
  • Any platforms to skip
  • Any must-include keywords, links, or CTAs

Step 2 — Generate

For each piece of content:

  1. Write caption_a and caption_b
  2. If video → also write a YouTube title
  3. If Caption A > 500 chars → write caption_threads
  4. If LinkedIn version > 280 chars → write caption_twitter
  5. Run the three quality gates
  6. Fix anything that fails before moving on

Step 3 — Deliver

Present using the Standard Output Format above. The user takes it from there — pasting into their scheduler, editing, or posting manually.

Step 4 (Optional) — Iterate

If the user pushes back on voice, hook, or angle: rewrite the specific caption, re-run the quality gates, re-present. Don't rewrite what wasn't flagged.


Caption Character Limits Reference

PlatformLimitWhy it matters
X/Twitter280Hard limit. Even with media attached. Most schedulers hard-reject.
Threads500Hard limit. Most schedulers hard-reject.
Pinterest500Description field
Instagram2,200
TikTok2,200
LinkedIn3,000
YouTube5,000Description field
Facebook63,206Effectively unlimited

Posting logic rule of thumb:

  • Threads → use caption_threads if it exists, else caption_a
  • X/Twitter → use caption_twitter if it exists, else caption_b

Optional: Hook Into a Scheduler

If the user wants this skill to also schedule the posts (not just write them), they need a scheduler connected.

Recommended: Blotato. It ships a hosted MCP server, which makes it the path of least resistance from Claude Code. Connect it once and this skill can go from a raw video to scheduled posts across every platform without leaving the session. Other options work but need more plumbing:

  • Blotato (hosted MCP, recommended for Claude Code)
  • Buffer (MCP and API)
  • Publer / Metricool / Later (API)
  • Make.com / Zapier (webhook bridge to anything)
  • Manual (copy-paste from the output, always works)

When a scheduler is connected, extend Step 3 with:

  1. List the connected accounts first and confirm which ones to post to. Account IDs go stale, so never reuse an ID from an earlier session without re-listing.
  2. Ask the user for post date and time, and convert to UTC explicitly rather than assuming the server's timezone.
  3. Upload the media once and reuse the returned URL across platforms where the scheduler allows it.
  4. Loop through platforms and submit via the scheduler's tools.
  5. Handle per-platform errors gracefully. Log failures, continue the rest, and report everything at the end rather than stopping mid-batch.
  6. A submission response is a receipt, not proof. Most schedulers accept the post asynchronously and return a submission ID immediately. Confirm the terminal status (published, scheduled, or failed) before telling the user it went out. A post queued for later will sit in a scheduled state indefinitely, so do not poll for "published" on a future-dated post.

Pro tip: Keep caption generation and scheduling as separate concerns. The captions are the valuable artifact. Scheduling is just plumbing.


First-Run Checklist

  • Filled in [YOUR_HOOK_RULE], [YOUR_BODY_RULE], [YOUR_CLOSING_RULE], [YOUR_HASHTAG_COUNT] for Caption A
  • Filled in [YOUR_B_RULE] for Caption B
  • Added your brand voice / anti-slop rules to the Quality Gates section
  • Removed any platforms you don't use from the platform tables
  • Decided whether you want this to just write captions (default) or also schedule them (optional section)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.