Social kit
End-to-end composite that turns a single brief into voice-tuned X post variants, LinkedIn post variants, and a matching social graphic.
How to use it
- Hit Copy the whole skill.
- Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
ChatGPT: make a Project and paste it into Instructions.
Neither? Paste it at the top of a new chat — it works for that chat. - Describe your job in plain words. The AI follows the skill from there.
npx degit gooseworks-ai/goose-skills/skills/social/composites/social-kit#main ~/.claude/skills/social-kitFor one project only, change the path to .claude/skills/social-kit.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Show the full text221 lines
Social Kit
One command → X variants + LinkedIn variants + a graphic. A thin orchestrator that chains create-x-content, create-linkedin-content, and goose-graphics, with sensible defaults and a pre-flight check for voice guides.
Invocation
Full args:
/social-kit --brief "..." --format poster --style matt-gray --output ./content/2026-04-21-my-topic/
Partial (asks for format):
/social-kit --brief "..."
Interactive:
/social-kit
Inputs
| Flag | Required | Default |
|---|---|---|
--brief |
Yes (asked if missing) | — |
--format |
No | Asked with recommendations |
--style |
No | matt-gray if the user has no stated preference; otherwise asked |
--output |
No | ./content/YYYY-MM-DD-<topic-slug>/ |
--variants-x |
No | create-x-content decides |
--variants-linkedin |
No | create-linkedin-content decides |
--skip-graphic |
No | false |
--skip-x |
No | false |
--skip-linkedin |
No | false |
Workflow
Step 1 — Intake
- Resolve the brief (prompt if missing).
- Derive a
topic-slugfrom the brief (short kebab-case, 2–4 words). - Resolve
<output>— default./content/YYYY-MM-DD-<topic-slug>/. Create the directory if it doesn't exist.
Step 2 — Pre-flight voice guide check
Check ~/.goose-skills/config.json for voice_guides.x and voice_guides.linkedin. If either is missing and that platform isn't skipped:
Missing voice guide for <platform>.
(a) Generate one now via /generate-voice-guide --platforms <platform>
(b) Paste an existing path
(c) Skip <platform> for this run
Do not proceed without resolving every non-skipped platform.
Step 3 — Draft X variants
Invoke /create-x-content with:
--brief "<brief>"
--output <resolved-output>
[--variants <N>]
Wait for completion. Capture the list of created files + the most substantive variant for use in Step 5's graphic brief.
Skip if --skip-x.
Step 4 — Draft LinkedIn variants
Invoke /create-linkedin-content with the same args. Wait for completion.
Skip if --skip-linkedin.
Step 5 — Pick a graphic format
If --format was passed, use it.
Otherwise, analyse the brief and recommend 1–2 formats using this heuristic:
| Brief shape | Recommended format |
|---|---|
| One strong claim, stat, or launch announcement | poster (1080×1350) |
| Numbered steps, how-to, or sequential process | carousel (1080×1080 per slide) |
| Mechanism/data/timeline with multiple sections | infographic (1080×variable) |
| Single testimonial, quote, or result metric | tweet (1080×1080) |
| Vertical, mobile-first, under 6 beats | story (1080×1920) |
| Widescreen presentation or demo | slides (1920×1080) |
| Chart or data visualization | chart (1080×1080) |
Present recommendations as a short menu:
Based on the brief, I'd recommend one of these:
1. poster — single strong claim, fits the "X costs $0.01 to run" shape
2. carousel — if you want to walk through the how-it-works steps
Which? (or paste another format name)
Skip this step if --skip-graphic.
Step 6 — Pick a style
If --style was passed, use it.
Otherwise, default to matt-gray unless the user stops the skill to pick another. To change the default per-user, a future enhancement can add a style_default key to ~/.goose-skills/config.json.
Step 7 — Generate the graphic
Invoke /goose-graphics with:
--style <style>
--format <format>
--brief "<distilled-brief>"
Point output at <resolved-output>/graphic/. The distilled brief should include:
- The headline/hook from the most substantive X variant
- 2–4 key beats (steps, numbers, or sections)
- Any specific strings that must appear verbatim (tool names, commands, prices)
Wait for completion. Capture paths to PNG exports + index.html.
Skip if --skip-graphic.
Step 8 — Deliver
Print a summary:
Social kit ready at <resolved-output>/
X drafts (N variants):
- variant-a-<framing>.md
- variant-b-<framing>.md
- ...
LinkedIn drafts (N variants):
- linkedin-a-<framing>.md
- linkedin-b-<framing>.md
- ...
Graphic (<format>, <style>):
- graphic/slides/ (HTML source)
- graphic/exports/ (PNG files, N files)
- graphic/index.html (preview in browser)
Next steps:
- Open graphic/index.html to review visuals
- Open any variant-*.md to copy/paste
- Pair a variant with a graphic for LinkedIn/X
Output Layout
content/YYYY-MM-DD-<topic>/
├── variant-a-<framing>.md # X drafts
├── variant-b-<framing>.md
├── ...
├── linkedin-a-<framing>.md # LinkedIn drafts
├── linkedin-b-<framing>.md
└── graphic/
├── slides/ # HTML source (1+ files depending on format)
├── exports/ # PNG exports
└── index.html # preview
Dependencies
Required skills:
create-x-contentcreate-linkedin-contentgoose-graphics
Recommended:
generate-voice-guide(create voice guides once before first use of social-kit)
Voice guides + config at ~/.goose-skills/voice-guides/ and ~/.goose-skills/config.json are discovered automatically.
Examples
Typical run (format asked):
/social-kit --brief "Claude can now verify email deliverability for $0.01 per check. Install gooseworks and ask. Runs MX, SMTP, RCPT TO, catch-all, disposable, blocklist checks."
→ Drafts X + LinkedIn variants → asks "poster or carousel?" → generates graphic → delivers.
Full args (one-shot):
/social-kit --brief "Someone vibe-coded a full lead gen tool in Claude Code in 2 weeks. Scrapes every business off Google Maps with 30+ data fields, pulls verified emails, reads up to 50 reviews to find pain points. Running $4200 ACV deals." --format carousel --style heatwave-orange
→ Runs end-to-end with no prompts.
Skip graphic:
/social-kit --brief "..." --skip-graphic
→ Just the X + LinkedIn drafts.
Tips
- First-time users: run
/generate-voice-guideonce before your first/social-kitinvocation. This is a one-time setup. - When the recommended format feels off, it probably is. The heuristic is a starting point — trust your read of the brief more than the recommendation.
- Pair drafts with graphics intentionally. A long
mechanism-breakdownX variant pairs with a carousel. A shorthypevariant pairs with a poster. The file naming makes these pairings easy to spot. - Iterate on voice before iterating on content. If your drafts feel off, 80% of the fix is re-running
/generate-voice-guidewith more recent posts or more iterations — not rewriting the skill prompts. - Output path convention: uses a standard
content/YYYY-MM-DD-<topic>/layout. Keep it consistent for easier cross-referencing later.
| 1 | |
| 2 | name social-kit |
| 3 | description > |
| 4 | End-to-end composite that turns a single brief into voice-tuned X post variants, |
| 5 | LinkedIn post variants, and a matching social graphic. Orchestrates |
| 6 | create-x-content + create-linkedin-content + goose-graphics in one invocation. |
| 7 | Asks about graphic format when not specified, with heuristic-driven |
| 8 | recommendations. |
| 9 | tags [content, social] |
| 10 | |
| 11 | |
| 12 | # Social Kit |
| 13 | |
| 14 | One command → X variants + LinkedIn variants + a graphic. A thin orchestrator that chains `create-x-content`, `create-linkedin-content`, and `goose-graphics`, with sensible defaults and a pre-flight check for voice guides. |
| 15 | |
| 16 | ## Invocation |
| 17 | |
| 18 | Full args: |
| 19 | |
| 20 | /social-kit --brief "..." --format poster --style matt-gray --output ./content/2026-04-21-my-topic/ |
| 21 | |
| 22 | |
| 23 | Partial (asks for format): |
| 24 | |
| 25 | /social-kit --brief "..." |
| 26 | |
| 27 | |
| 28 | Interactive: |
| 29 | |
| 30 | /social-kit |
| 31 | |
| 32 | |
| 33 | ## Inputs |
| 34 | |
| 35 | | Flag | Required | Default | |
| 36 | |------|----------|---------| |
| 37 | | `--brief` | Yes (asked if missing) | — | |
| 38 | | `--format` | No | Asked with recommendations | |
| 39 | | `--style` | No | `matt-gray` if the user has no stated preference; otherwise asked | |
| 40 | | `--output` | No | `./content/YYYY-MM-DD-<topic-slug>/` | |
| 41 | | `--variants-x` | No | `create-x-content` decides | |
| 42 | | `--variants-linkedin` | No | `create-linkedin-content` decides | |
| 43 | | `--skip-graphic` | No | false | |
| 44 | | `--skip-x` | No | false | |
| 45 | | `--skip-linkedin` | No | false | |
| 46 | |
| 47 | ## Workflow |
| 48 | |
| 49 | ### Step 1 — Intake |
| 50 | |
| 51 | Resolve the brief (prompt if missing). |
| 52 | Derive a `topic-slug` from the brief (short kebab-case, 2–4 words). |
| 53 | Resolve `<output>` — default `./content/YYYY-MM-DD-<topic-slug>/`. Create the directory if it doesn't exist. |
| 54 | |
| 55 | ### Step 2 — Pre-flight voice guide check |
| 56 | |
| 57 | Check `~/.goose-skills/config.json` for `voice_guides.x` and `voice_guides.linkedin`. If either is missing and that platform isn't skipped: |
| 58 | |
| 59 | |
| 60 | Missing voice guide for <platform>. |
| 61 | (a) Generate one now via /generate-voice-guide --platforms <platform> |
| 62 | (b) Paste an existing path |
| 63 | (c) Skip <platform> for this run |
| 64 | |
| 65 | |
| 66 | Do not proceed without resolving every non-skipped platform. |
| 67 | |
| 68 | ### Step 3 — Draft X variants |
| 69 | |
| 70 | Invoke `/create-x-content` with: |
| 71 | |
| 72 | --brief "<brief>" |
| 73 | --output <resolved-output> |
| 74 | [--variants <N>] |
| 75 | |
| 76 | |
| 77 | Wait for completion. Capture the list of created files + the most substantive variant for use in Step 5's graphic brief. |
| 78 | |
| 79 | Skip if `--skip-x`. |
| 80 | |
| 81 | ### Step 4 — Draft LinkedIn variants |
| 82 | |
| 83 | Invoke `/create-linkedin-content` with the same args. Wait for completion. |
| 84 | |
| 85 | Skip if `--skip-linkedin`. |
| 86 | |
| 87 | ### Step 5 — Pick a graphic format |
| 88 | |
| 89 | If `--format` was passed, use it. |
| 90 | |
| 91 | Otherwise, analyse the brief and recommend 1–2 formats using this heuristic: |
| 92 | |
| 93 | | Brief shape | Recommended format | |
| 94 | |-------------|-------------------| |
| 95 | | One strong claim, stat, or launch announcement | **poster** (1080×1350) | |
| 96 | | Numbered steps, how-to, or sequential process | **carousel** (1080×1080 per slide) | |
| 97 | | Mechanism/data/timeline with multiple sections | **infographic** (1080×variable) | |
| 98 | | Single testimonial, quote, or result metric | **tweet** (1080×1080) | |
| 99 | | Vertical, mobile-first, under 6 beats | **story** (1080×1920) | |
| 100 | | Widescreen presentation or demo | **slides** (1920×1080) | |
| 101 | | Chart or data visualization | **chart** (1080×1080) | |
| 102 | |
| 103 | Present recommendations as a short menu: |
| 104 | |
| 105 | |
| 106 | Based on the brief, I'd recommend one of these: |
| 107 | 1. poster — single strong claim, fits the "X costs $0.01 to run" shape |
| 108 | 2. carousel — if you want to walk through the how-it-works steps |
| 109 | |
| 110 | Which? (or paste another format name) |
| 111 | |
| 112 | |
| 113 | Skip this step if `--skip-graphic`. |
| 114 | |
| 115 | ### Step 6 — Pick a style |
| 116 | |
| 117 | If `--style` was passed, use it. |
| 118 | |
| 119 | Otherwise, default to `matt-gray` unless the user stops the skill to pick another. To change the default per-user, a future enhancement can add a `style_default` key to `~/.goose-skills/config.json`. |
| 120 | |
| 121 | ### Step 7 — Generate the graphic |
| 122 | |
| 123 | Invoke `/goose-graphics` with: |
| 124 | |
| 125 | --style <style> |
| 126 | --format <format> |
| 127 | --brief "<distilled-brief>" |
| 128 | |
| 129 | |
| 130 | Point output at `<resolved-output>/graphic/`. The distilled brief should include: |
| 131 | The headline/hook from the most substantive X variant |
| 132 | 2–4 key beats (steps, numbers, or sections) |
| 133 | Any specific strings that must appear verbatim (tool names, commands, prices) |
| 134 | |
| 135 | Wait for completion. Capture paths to PNG exports + index.html. |
| 136 | |
| 137 | Skip if `--skip-graphic`. |
| 138 | |
| 139 | ### Step 8 — Deliver |
| 140 | |
| 141 | Print a summary: |
| 142 | |
| 143 | |
| 144 | Social kit ready at <resolved-output>/ |
| 145 | |
| 146 | X drafts (N variants): |
| 147 | - variant-a-<framing>.md |
| 148 | - variant-b-<framing>.md |
| 149 | - ... |
| 150 | |
| 151 | LinkedIn drafts (N variants): |
| 152 | - linkedin-a-<framing>.md |
| 153 | - linkedin-b-<framing>.md |
| 154 | - ... |
| 155 | |
| 156 | Graphic (<format>, <style>): |
| 157 | - graphic/slides/ (HTML source) |
| 158 | - graphic/exports/ (PNG files, N files) |
| 159 | - graphic/index.html (preview in browser) |
| 160 | |
| 161 | Next steps: |
| 162 | - Open graphic/index.html to review visuals |
| 163 | - Open any variant-*.md to copy/paste |
| 164 | - Pair a variant with a graphic for LinkedIn/X |
| 165 | |
| 166 | |
| 167 | ## Output Layout |
| 168 | |
| 169 | |
| 170 | content/YYYY-MM-DD-<topic>/ |
| 171 | ├── variant-a-<framing>.md # X drafts |
| 172 | ├── variant-b-<framing>.md |
| 173 | ├── ... |
| 174 | ├── linkedin-a-<framing>.md # LinkedIn drafts |
| 175 | ├── linkedin-b-<framing>.md |
| 176 | └── graphic/ |
| 177 | ├── slides/ # HTML source (1+ files depending on format) |
| 178 | ├── exports/ # PNG exports |
| 179 | └── index.html # preview |
| 180 | |
| 181 | |
| 182 | ## Dependencies |
| 183 | |
| 184 | Required skills: |
| 185 | `create-x-content` |
| 186 | `create-linkedin-content` |
| 187 | `goose-graphics` |
| 188 | |
| 189 | Recommended: |
| 190 | `generate-voice-guide` (create voice guides once before first use of social-kit) |
| 191 | |
| 192 | Voice guides + config at `~/.goose-skills/voice-guides/` and `~/.goose-skills/config.json` are discovered automatically. |
| 193 | |
| 194 | ## Examples |
| 195 | |
| 196 | **Typical run (format asked):** |
| 197 | |
| 198 | /social-kit --brief "Claude can now verify email deliverability for $0.01 per check. Install gooseworks and ask. Runs MX, SMTP, RCPT TO, catch-all, disposable, blocklist checks." |
| 199 | |
| 200 | → Drafts X + LinkedIn variants → asks "poster or carousel?" → generates graphic → delivers. |
| 201 | |
| 202 | **Full args (one-shot):** |
| 203 | |
| 204 | /social-kit --brief "Someone vibe-coded a full lead gen tool in Claude Code in 2 weeks. Scrapes every business off Google Maps with 30+ data fields, pulls verified emails, reads up to 50 reviews to find pain points. Running $4200 ACV deals." --format carousel --style heatwave-orange |
| 205 | |
| 206 | → Runs end-to-end with no prompts. |
| 207 | |
| 208 | **Skip graphic:** |
| 209 | |
| 210 | /social-kit --brief "..." --skip-graphic |
| 211 | |
| 212 | → Just the X + LinkedIn drafts. |
| 213 | |
| 214 | ## Tips |
| 215 | |
| 216 | **First-time users:** run `/generate-voice-guide` once before your first `/social-kit` invocation. This is a one-time setup. |
| 217 | **When the recommended format feels off, it probably is.** The heuristic is a starting point — trust your read of the brief more than the recommendation. |
| 218 | **Pair drafts with graphics intentionally.** A long `mechanism-breakdown` X variant pairs with a carousel. A short `hype` variant pairs with a poster. The file naming makes these pairings easy to spot. |
| 219 | **Iterate on voice before iterating on content.** If your drafts feel off, 80% of the fix is re-running `/generate-voice-guide` with more recent posts or more iterations — not rewriting the skill prompts. |
| 220 | **Output path convention:** uses a standard `content/YYYY-MM-DD-<topic>/` layout. Keep it consistent for easier cross-referencing later. |
| 221 |