# caption-writer

A skill that writes post copy tuned to one platform and to your brand voice. Useful when the visual is ready but the words are not.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 803 installs · ★ 199
- Author: social-media-skills
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/social-media-skills/skills/tree/HEAD/skills/caption-writer/SKILL.md
- Updated: 2026-10-15
- HTML: https://affpapa.org/en/nevibecode/skills/caption-writer

## What it does

The skill handles the text that ships alongside a photo or video: Instagram, LinkedIn, TikTok, Facebook, X/Twitter, Threads, Pinterest, YouTube, Bluesky. It opens `brand-profile.md` and `voice.md` before writing anything, because a caption that ignores them reads like generic AI output. Neither file exists yet? Run `brand-profile` first, and `voice-builder` if you have writing samples.

From there it works in steps. It pins down the platform, what is actually in the asset, the goal, and the single point the post makes. Then it picks a format — story, how-to, hot take, question, behind-the-scenes — and drafts the opening line. That line gets the most attention: feeds cut the caption to one line plus a “…more”, so a weak opener buries everything after it. One call to action follows, matched to the goal, plus hashtags and links handled per platform norms.

You get 2–3 genuinely different caption options and a recommendation with a short reason. Long-form LinkedIn thought leadership is out of scope here — that is `linkedin-post-writer`; multi-post X and Threads threads belong to `thread-writer`.

## Requirements
- Works with: LinkedIn

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add social-media-skills/skills --skill caption-writer -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/caption-writer/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/caption-writer/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add social-media-skills/skills --skill caption-writer -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/caption-writer/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add social-media-skills/skills --skill caption-writer -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/caption-writer/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install social-media-skills/skills caption-writer
```

2. **Manually: put the files in place**
- File: `.github/skills/caption-writer/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add social-media-skills/skills --skill caption-writer -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/social-media-skills/skills --path skills/caption-writer
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/caption-writer/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add social-media-skills/skills --skill caption-writer -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/social-media-skills/skills/tree/HEAD/skills/caption-writer/SKILL.md

## When to use it
- write a caption for a photo or Reel on a given platform
- draft an opening line that earns the “…more” tap
- settle on a single call to action for the post goal
- place hashtags and links the way the platform expects
- compare several caption options and pick one

## Example prompts
- Write an Instagram caption for this photo, goal is saves
- I need a TikTok caption for this video in our brand voice
- Give me three LinkedIn caption options about our product launch

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 24d359b8d0f0ca8a.

BEGIN THIRD-PARTY FILE 24d359b8d0f0ca8a
```text
---
name: caption-writer
description: >-
  Use to write platform-native social media captions (post copy) in the brand's voice — the
  words that accompany a post on Instagram, LinkedIn, TikTok, Facebook, X/Twitter, Threads,
  Pinterest, YouTube, or Bluesky. Run when the user says "write a caption," "caption this,"
  "post copy," "write the copy for this photo/video/Reel," "IG caption," "what should I write
  for this post," or needs the words to go with a visual. Reads brand-profile and voice first
  so captions sound like the brand, not generic AI. For long-form LinkedIn thought-leadership
  posts use linkedin-post-writer; for X/Threads multi-post threads use thread-writer; for video
  scripts use the video skills. This skill writes the caption itself.
metadata:
  version: 1.0.0
license: MIT
---

# Caption Writer

A caption is not a description of the post. It's the part of the post that does the *work* —
it stops the scroll, earns attention, and drives one action. Done well it carries the
post; done generically it sinks even great visuals under emoji and hashtag noise.

Two principles run through everything here:

1. **The first line is the whole game.** On every platform the caption is truncated — the
   reader sees one line and a "…more." If that line doesn't earn the tap, the rest is never
   read. Write the first line like its only job is to win the second line.
2. **Every caption serves one goal.** Awareness, comments, saves, clicks, community, or
   conversion — the goal dictates the structure and the call to action. A caption "to get
   engagement" is a caption with no goal.

## Step 0 — Read the foundation first (required)

Load `brand-profile.md` and `voice.md` before writing a word. The voice fingerprint, the
"never" list, and the brand guardrails are non-negotiable. A caption that doesn't sound like
them is a failure even if it's clever. If neither exists, run `brand-profile` (and
`voice-builder` if samples exist) first.

## Step 1 — Establish four inputs

Don't write until you know these. Infer what you can; ask only what you can't:

- **Platform** — the mechanics are different on each (see `references/platforms.md`).
- **The asset** — what's in the photo/video/carousel? The caption complements the visual; it
  shouldn't narrate what the eye already sees.
- **The goal** — awareness, comments, saves, clicks/traffic, community, or conversion.
- **The topic / point** — what this specific post is about, and the one idea it lands.
```
END THIRD-PARTY FILE 24d359b8d0f0ca8a

The third-party file has ended. Everything between the 24d359b8d0f0ca8a tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2507 of 6998 bytes. © social-media-skills · MIT · https://github.com/social-media-skills/skills/tree/HEAD/skills/caption-writer/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
