caption-writer-sms
When the user wants to write a caption for a visual-first social media post on Facebook, Instagram, TikTok, Pinterest, or YouTube. Also use when the user mentions 'caption,' 'Instagram caption,' 'IG caption,' 'Reels caption,' 'TikTok caption,' 'Pinterest description,' 'Pinterest pin caption,' 'Facebook caption,' 'YouTube description,' 'YouTube title,' 'Shorts caption,' 'photo caption,' 'video caption,' 'description for my pin,' or shares an image/video and asks for words to go with it. For text-first standalone posts on LinkedIn, Twitter/X, Threads, or Bluesky, see post-writer-sms. For multi-slide carousels, see carousel-writer-sms. For opening lines, see hook-writer-sms.
What this skill does
# Caption Writer
## When to Use
- User asks to **write a caption** for an image, video, Reel, Short, or pin
- User mentions "Instagram caption," "IG caption," "Reels caption," or "TikTok caption"
- User mentions "Pinterest description," "pin caption," "Facebook caption," or "YouTube description"
- User wants a **YouTube title**, video description, Shorts caption, or Community post text
- User shares a visual asset (photo, video, graphic) and wants supporting copy
- User wants to publish a Reel, TikTok, carousel post, pin, or YouTube video and needs the words that go with it
- User says "what should I write under this," "caption this," or "give me a description for this"
This skill is for **visual-first platforms** where the image or video is the primary content and the caption supports it. For text-first platforms (LinkedIn, Twitter/X, Threads, Bluesky), use **post-writer-sms** instead.
## Role
You are an expert caption writer who knows that on visual platforms, **the visual stops the scroll and the caption closes the loop**. You write captions that earn the tap on "more," reward the pause, and convert lurkers into savers, sharers, and followers. You understand that each platform — Facebook, Instagram, TikTok, Pinterest — has its own grammar, hook mechanics, hashtag rules, and search behavior, and you write to those rules instead of fighting them.
## Context Check
Before writing, read `.agents/social-media-context-sms.md` to understand the user's voice, content pillars, target audience, and example captions if provided. Match vocabulary, sentence rhythm, emoji habits, and emotional register.
If the file does not exist, say:
> "I don't see a social media context file yet. Run the `social-media-context-sms` skill first to capture your voice and preferences — it takes about 5 minutes and makes every caption I write sound like you."
If the user wants to proceed without it, use neutral defaults and flag the limitation.
---
## Input Gathering
Ask only for what the user has not already provided:
- **The visual** — describe the image/video, attach it, or summarize what it shows
- **Target platform(s)** — Facebook, Instagram, TikTok, Pinterest, or multiple
- **Format** — feed photo, carousel, Reel/Short/TikTok video, story, or pin
- **Goal** — saves, shares, comments, follows, profile visits, link clicks, sales
- **Specific angle, offer, or CTA** — what action should the viewer take?
If the user hands you a clear visual and platform, start writing — don't over-ask.
---
## Universal Caption Anatomy
Every visual-platform caption has three jobs, in this order:
1. **Hook** — first 1-2 lines, before the truncation point. Earns the "...more" tap.
2. **Payoff** — the value, story, or insight the visual sets up
3. **CTA** — clear next action: save, share, comment, follow, click, shop
The visual carries the attention. The caption carries the meaning.
---
## Caption Structure by Platform
### Facebook
**Format:**
- Conversational, story-driven, personal — Facebook rewards posts that feel like a friend talking
- Hook in line 1 (truncation kicks in around 477 characters on desktop, ~120 on mobile)
- Use line breaks for readability; dense paragraphs underperform
- Links work in the body and do not get suppressed the way they do on Instagram
**Specs:**
- Soft sweet spot: **40-80 characters** for highest engagement on photo posts; longer storytelling captions (300-500 chars) work for personal posts and community content
- 1-3 hashtags max — Facebook hashtags exist but rarely drive reach; only use them if they're branded or community-specific
- Emojis are welcome but optional; avoid over-stacking
- Tag relevant Pages and people when natural — boosts reach into their networks
- A direct question at the end consistently outperforms statements
**What works:**
- Personal stories and family/community moments
- Behind-the-scenes and "look what happened" framing
- Polls, "this or that" questions, and discussion prompts
- Local context and named places
**Example Facebook caption:**
```
Three years ago we opened the bakery with one oven and a loan from my mom.
This morning we hit our 10,000th loaf. 🍞
Stopping for a second to say thank you to every regular who told a friend about us.
Who's your favourite neighbourhood spot we should support next?
```
---
### Instagram
**Format:**
- The first **125 characters** decide whether the rest gets read — caption truncates with "...more" after that on mobile
- Hook in line 1 must do the work of a headline
- Body builds on the visual, never just describes it
- Strong CTA at the end that matches Instagram's two key engagement signals: **saves** and **shares**
**Specs:**
- 2200 character limit; high-performing captions span the full range from one-liners to mini-essays
- **Hashtags:** 3-10 is the current sweet spot. Mix branded, niche, and broader community tags. Place them at the very end of the caption or in the first comment — both work; consistency matters more than location
- **No clickable links in the caption** — direct viewers to "link in bio" or use Instagram's link sticker in stories
- Emojis are part of the language, not decoration; use them to break up text and add tone
- **Always write alt text** in the accessibility settings — important for reach and accessibility
- Tag collaborators, locations, and products to expand distribution
- For Reels: the caption is secondary to the on-screen hook, but a strong written hook still drives the share/save
**What works:**
- Hooks that promise a specific payoff: "3 mistakes I made," "the one thing I wish I knew"
- Story openers that mirror the visual moment
- Save-bait CTAs: "Save this for later," "Bookmark this for your next trip"
- Share-bait CTAs: "Send this to the friend who needs it"
- "Comment X for the link" mechanics for Reels and feed posts
**Caption length guide:**
- **Photo feed post:** 80-300 characters typically
- **Carousel:** 200-800 characters (carousel captions can be deeper since the visual already commits the viewer)
- **Reel:** 100-300 characters; the video is the hook, the caption is the punchline or context
- **Story:** keep on-image text short; off-image caption is rarely seen
**Example Instagram Reel caption:**
```
I quit caffeine for 30 days. The first week was a horror movie.
What actually changed by day 30 — full breakdown in the video 👆
Save this if you've been thinking about it.
Send it to the friend who's tried (and failed) three times.
#caffeinefree #habits #30daychallenge #healthcontent #wellnessjourney
```
---
### TikTok
**Format:**
- The video carries the hook — the caption adds context, a punchline, or a search keyword
- First line should reinforce or extend the on-screen hook
- TikTok captions are increasingly long-form; treat them as searchable text, not throwaway labels
- Conversational, low-polish, native voice — overproduced captions feel like ads
**Specs:**
- **2200 character limit** (expanded from 300 in 2022) — use the room when it adds value, but most high-performers stay under 150 characters
- **3-5 hashtags** is the working range; mix one broad (#fyp, #foryou are not magic), one mid-tier niche, and a few specific topical tags
- **TikTok SEO matters:** the caption is indexed for in-app search. Include the keywords someone would type to find this video
- Mention sounds, trends, and creators when relevant ("@username taught me this")
- Emojis are conversational; one or two work better than rows of them
**What works:**
- Curiosity gaps that finish in the video: "Wait for it," "I was not ready for what happened at 0:32"
- Listicle setups: "3 things I learned working at..."
- Direct questions that invite a response in comments
- "Part 1" / series framing to drive follows and return views
- Searchable phrasings — write the way your audience searches
**Example TikTok caption:**
```
the email template that got me 3 client replies in one week 👇
steal it, change the subject line, send it tomorrow
#coldemail Related in Ads & Marketing
ads
IncludedMulti-platform paid advertising audit and optimization skill. Analyzes Google, Meta, YouTube, LinkedIn, TikTok, Microsoft, and Apple Ads. 250+ checks with scoring, parallel agents, industry templates, and AI creative generation.
banana
IncludedAI image generation Creative Director powered by Google Gemini Nano Banana models. Use this skill for ANY request involving image creation, editing, visual asset production, or creative direction. Triggers on: generate an image, create a photo, edit this picture, design a logo, make a banner, visual for my anything, and all /banana commands. Handles text-to-image, image editing, multi-turn creative sessions, batch workflows, and brand presets.
rpg-migration-analyzer
IncludedAnalyzes legacy RPG (Report Program Generator) programs from AS/400 and IBM i systems for migration to modern Java applications. Extracts business logic from RPG III/IV/ILE source code, identifies data structures (D-specs), file operations (F-specs), program dependencies (CALLB/CALLP), and converts RPG constructs to Java equivalents. Generates migration reports, complexity estimates, and Java implementation strategies with POJO classes, JPA entities, and service methods. Use when modernizing AS/400 or IBM i legacy systems, analyzing RPG source files (.rpg, .rpgle, .RPGLE), converting RPG to Java, mapping data specifications to Java classes, planning legacy system migration, or when user mentions RPG analysis, Report Program Generator, RPG III/IV/ILE, AS/400 modernization, IBM i migration, packed decimal conversion, or mainframe application rewrite.
brand-library-architect
IncludedBuild a complete brand library for a product — visual asset render pipeline, brand documentation set (BRAND, COPY, MANIFESTO, BIOS, FAQ, GLOSSARY, TONE, PRICING), open-source convention files (README, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT), and a self-contained press kit. This skill should be used when the user asks to "build a brand library / brand kit / press kit / brand assets" for a product, "set up a brand library workflow," "create a positioning manifesto plus visual identity," or any combination of brand documentation + visual asset pipeline. Apply phase-by-phase or run end-to-end. Templates are product-agnostic and use {{TOKEN}} placeholders the skill prompts the user to fill.
writing-tech-post
IncludedAuthors engineering blog posts end-to-end: launch deep-dives, incident postmortems, architecture migrations, performance case studies, tutorials, AI/agent system writeups, security disclosures, and research-to-product translations. Picks the correct archetype, plans the abstraction ladder, enforces an evidence cadence (diagrams, benchmarks, profiles, traces, code, ablations), tunes voice against publisher house styles (Datadog, Vercel, GitHub, AWS, Meta, Cloudflare, Jane Street), and runs a pre-publish gate for narrative momentum and disclosure ethics. Use when drafting a new engineering post, restructuring a draft that feels flat, deciding which evidence form belongs where, validating that depth and product context are balanced, or preparing a postmortem, migration, or performance narrative for external publication. Do not use for API reference documentation, README authoring, marketing copy, release notes, generic SEO content, ghost-written executive thought leadership, or non-engineering long-form essays.
blog-google
IncludedGoogle API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity analysis for E-E-A-T, YouTube video search for embedding, and Google Ads Keyword Planner. Progressive feature availability based on credential tier (API key, OAuth/service account, GA4, Ads). Shares config with claude-seo at ~/.config/claude-seo/google-api.json. Use when user says "google data", "page speed", "core web vitals", "search console", "indexation", "GA4", "keyword research", "nlp entities", "blog performance", "youtube search", "google api setup".