End-to-end composite that turns a single brief into voice-tuned X post variants, LinkedIn post variants, and a matching social graphic. Orchestrates create-x-content + create-linkedin-content + goose-graphics in one invocation. Asks about graphic format when not specified, with heuristic-driven recommendations.
npx gooseworks install --all # then, in Claude Code, Cursor, or Codex: /gooseworks use the social-kit skill
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.
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| 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 |
topic-slug from the brief (short kebab-case, 2–4 words).<output> — default ./content/YYYY-MM-DD-<topic-slug>/. Create the directory if it doesn't exist.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 runDo not proceed without resolving every non-skipped platform.
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.
Invoke /create-linkedin-content with the same args. Wait for completion.
Skip if --skip-linkedin.
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.
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.
Invoke /goose-graphics with:
--style <style>
--format <format>
--brief "<distilled-brief>"Point output at <resolved-output>/graphic/. The distilled brief should include:
Wait for completion. Capture paths to PNG exports + index.html.
Skip if --skip-graphic.
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/Xcontent/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 # previewRequired skills:
create-x-contentcreate-linkedin-contentgoose-graphicsRecommended:
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.
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.
/generate-voice-guide once before your first /social-kit invocation. This is a one-time setup.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./generate-voice-guide with more recent posts or more iterations — not rewriting the skill prompts.content/YYYY-MM-DD-<topic>/ layout. Keep it consistent for easier cross-referencing later.create-x-contentcreate-linkedin-contentAssemble an expert/educator motion-graphic LISTICLE video ad from a config — a spoken authoritative voiceover carries a numbered listicle while N web-animated hyperframe beats (HTML plus the Web Animations API, one branded design system of alternating tiles, big hero numerals, and glass-pill callouts) are rendered frame-by-frame via Playwright and anchored to the VO's word-level timestamps, periodic color-graded B-roll windows give visual breath, and captions burn ONLY inside those B-roll windows (2-word chunks, ASS Format header carrying a Name field so none drop) with the VO mixed under a low music bed. This is the FREE deterministic assembly stage (Playwright beat render plus ffmpeg concat plus window-masked caption burn plus VO-and-music mix plus final composite) — the VO, the music bed, and the stock B-roll come from create-vo-elevenlabs, create-music-elevenlabs, and media-proxy. Use for the vo-anchored-motion-listicle format.
Assemble a stop-motion hand-swatch-cycle product-demo ad from a config — a sequence of still PLATES (one hand swiping a single-barrel cosmetic across a cream skin-patch, the barrel + swatch changing per plate while the hand, background, crop, and lighting stay locked) is PNG→mp4 loop-encoded at each plate's own stop-motion hold (fast motion frames 150–250ms, per-shade ~380ms, hero beats 1100–1800ms), concat-demuxed with HARD cuts into a silent master, closed on a Playwright HTML-rendered branded end card (serif tagline + sans subtitle + real logo SVG over a hero BG, never AI-rendered text), and muxed with a pre-sourced music track playing under the end card with a fade tail (no VO). This is the FREE deterministic assembly stage (loop-encode + concat-demux + end-card render + music mux); the master-anchor plate, shade plates, and end-card BG come from create-image-gpt-image-fal and the track from create-music-elevenlabs. Use for the stopmotion-hand-swatch-cycle format.
Assemble a split-screen creator ad from a config — a two-zone vertical composite where a supplied AI-creator lip-sync take fills the BOTTOM ~48% while real 16:9 product/demo clips run uncropped in the TOP ~52%, each top clip contain-fit with a darkened blurred cover-scale fill of the same clip (never black bars), a 3px brand-color divider between the zones, the creator slice cover-fit per the per-scene VO timing, scenes hard-concatenated with the body audio being the concatenated creator VO slices, an end card held on the last sharp frame ~3s, then the ASSEMBLED cut transcribed with local Whisper (not the raw VO — concat drops inter-scene silence) and word-level captions burned in the chosen style. This is the FREE deterministic assembly + caption stage (two-zone composite + blurred fill + divider + hard-concat + end card + captions); the VO comes from create-vo-elevenlabs, the anchor from create-image-gpt-image-fal, and the whole-VO lip-sync from a paid VEED Fabric 1.0 take (a no-atom upstream input). Use for the split-screen-creator format.