marketing-social-content
Owns short-form text for social. For social VIDEO, this skill writes the script + caption and dispatches to remotion-orchestrator — it does not author video itself.
Triggers
- Brief mentions "LinkedIn post", "tweet", "X post", "thread", "Reels", "TikTok", "social post", "Instagram caption", "social calendar".
- Or invoked by
marketing-orchestrator / marketing-channel-strategist for any short-form deliverable.
- Or by
marketing-copywriter to atomise a long-form piece into social drops.
Inputs
brand slug
channels — subset of linkedin / x / instagram / tiktok / youtube-shorts / threads
topic or upstream positioning.md + icp doc
quantity per channel
cadence — single post / thread / week-long calendar
assetType per slot — text / carousel / video / image-quote
Method
LinkedIn post (text)
- Hook line (≤8 words, specific number / contrarian claim / vivid image — never a generic "Excited to share…")
- 2-4 short paragraphs, ≤2 lines each (LinkedIn truncates after ~3 lines on mobile).
- One concrete example or stat per post.
- Closing line that invites a response (specific question, not "thoughts?").
- 0-3 hashtags max, all hyper-specific (no
#marketing #leadership).
- No "We"/"Our"/"I" leading (Pi-CEO content rule).
LinkedIn carousel
- Slide 1: hook + promise of payoff.
- Slides 2-9: one idea per slide, ≤15 words.
- Slide 10: CTA (next post / link / DM).
- Caption: 2-line teaser + "Carousel below ↓".
X / Twitter thread
- Tweet 1: hook (specific, fits in preview).
- Tweets 2-N: one idea per tweet, max 7-10 tweets.
- Last tweet: CTA + bookmark prompt.
- No emoji clutter; one per tweet max if any.
Instagram / TikTok video (caption + dispatch)
- Caption: ≤125 chars (above the "more" fold).
- Hashtag block: 5-10, mix high-volume + niche.
- Script for the video → DISPATCH to
remotion-orchestrator with:
composition: SocialAd (vertical 1080×1920) — built in Remotion v1.1; falls back to Explainer 16:9 in v1 with note.
durationSec: 15 / 30 / 60.
storyboard derived from the script.
brand: same slug.
Image quote / static graphic
Quote text (≤14 words).
Attribution.
Visual brief as a design.md fragment — emit a minimal YAML+prose block referencing the brand's {slug}.design.md tokens by name ({colors.primary}, {typography.display-md}, {components.cta-primary}), plus per-asset overrides where needed. The fragment is consumed downstream by remotion-designer (for video shorts) or by an image-generation skill / external designer. Example:
---
brand: ra
asset: image-quote
inherits: synthex/packages/brand-config/src/brands/ra.design.md
overrides:
surface: "{colors.primary}" # full-bleed primary background
quote-type: "{typography.display-lg}"
attribution-type: "{typography.caption}"
---
## Brief
Quote on hero-orange canvas. Attribution bottom-left in caption type. No
decorative elements. Brand mark top-left at safeAreaPx.
Run npx --prefix Pi-Dev-Ops/remotion-studio design.md lint <fragment> if the fragment introduces new tokens (overrides only); otherwise lint runs on the source .design.md it inherits from.
Output
<calling-project>/.marketing/social/{jobId}/{channel}-{n}.md:
---
channel: linkedin
brand: synthex
job: synthex-launch-2026-04-28
slot: 3-of-12
assetType: text
hashtags: [SyntheticData, MLOps, AISafety]
voiceLintPass: true
videoDispatched: false
---
For video slots, output includes videoDispatched: true with the remotion-orchestrator job ID it created.
Boundaries
- Never lead with "We" / "Our" / "I" — global Pi-CEO content rule.
- Never use AI-filler words (delve, tapestry, leverage, robust, seamless).
- Never recommend posting frequency above the brand's sustainable cadence (set by
marketing-channel-strategist).
- Never DIY video — always dispatch to
remotion-orchestrator.
- Never write engagement-bait CTAs ("comment YES if you agree") for B2B brands — voice mismatch.
Hands off to
remotion-orchestrator (cross-pack: every video slot dispatches here)
marketing-launch-runbook (slots social drops onto launch calendar)
marketing-analytics-attribution (per-post UTM)
Per-project keys
ANTHROPIC_API_KEY / OPENAI_API_KEY — drafting + hook variant generation. Missing → returns the brief structure with "fill the hook" placeholders.
- No social-platform API keys required for v1 — outputs are drafts, the user / scheduler posts them. Future v1.1:
BUFFER_API_KEY / LINKEDIN_* for direct scheduling.
1---2name: marketing-social-content3description: Writes short-form social content — LinkedIn posts, X/Twitter threads, Instagram captions, TikTok hooks — and dispatches video shorts to remotion-orchestrator. Use when a brief asks for "social post", "LinkedIn post", "thread", "tweet", "Reels caption", "social campaign", "social calendar". Reads positioning + ICP vocabulary + channel-plan; cross-pack composes with remotion-orchestrator for any video output.4---56# marketing-social-content78Owns short-form text for social. For social VIDEO, this skill writes the script + caption and **dispatches to `remotion-orchestrator`** — it does not author video itself.910## Triggers1112- Brief mentions "LinkedIn post", "tweet", "X post", "thread", "Reels", "TikTok", "social post", "Instagram caption", "social calendar".13- Or invoked by `marketing-orchestrator` / `marketing-channel-strategist` for any short-form deliverable.14- Or by `marketing-copywriter` to atomise a long-form piece into social drops.1516## Inputs1718- `brand` slug19- `channels` — subset of `linkedin` / `x` / `instagram` / `tiktok` / `youtube-shorts` / `threads`20- `topic` or upstream `positioning.md` + `icp` doc21- `quantity` per channel22- `cadence` — single post / thread / week-long calendar23- `assetType` per slot — `text` / `carousel` / `video` / `image-quote`2425## Method2627### LinkedIn post (text)28- Hook line (≤8 words, specific number / contrarian claim / vivid image — never a generic "Excited to share…")29- 2-4 short paragraphs, ≤2 lines each (LinkedIn truncates after ~3 lines on mobile).30- One concrete example or stat per post.31- Closing line that invites a response (specific question, not "thoughts?").32- 0-3 hashtags max, all hyper-specific (no `#marketing #leadership`).33- No "We"/"Our"/"I" leading (Pi-CEO content rule).3435### LinkedIn carousel36- Slide 1: hook + promise of payoff.37- Slides 2-9: one idea per slide, ≤15 words.38- Slide 10: CTA (next post / link / DM).39- Caption: 2-line teaser + "Carousel below ↓".4041### X / Twitter thread42- Tweet 1: hook (specific, fits in preview).43- Tweets 2-N: one idea per tweet, max 7-10 tweets.44- Last tweet: CTA + bookmark prompt.45- No emoji clutter; one per tweet max if any.4647### Instagram / TikTok video (caption + dispatch)48- Caption: ≤125 chars (above the "more" fold).49- Hashtag block: 5-10, mix high-volume + niche.50- Script for the video → DISPATCH to `remotion-orchestrator` with:51 - `composition`: `SocialAd` (vertical 1080×1920) — built in Remotion v1.1; falls back to `Explainer` 16:9 in v1 with note.52 - `durationSec`: 15 / 30 / 60.53 - `storyboard` derived from the script.54 - `brand`: same slug.5556### Image quote / static graphic57- Quote text (≤14 words).58- Attribution.59- **Visual brief as a `design.md` fragment** — emit a minimal YAML+prose block referencing the brand's `{slug}.design.md` tokens by name (`{colors.primary}`, `{typography.display-md}`, `{components.cta-primary}`), plus per-asset overrides where needed. The fragment is consumed downstream by `remotion-designer` (for video shorts) or by an image-generation skill / external designer. Example:6061 ```yaml62 ---63 brand: ra64 asset: image-quote65 inherits: synthex/packages/brand-config/src/brands/ra.design.md66 overrides:67 surface: "{colors.primary}" # full-bleed primary background68 quote-type: "{typography.display-lg}"69 attribution-type: "{typography.caption}"70 ---71 ## Brief72 Quote on hero-orange canvas. Attribution bottom-left in caption type. No73 decorative elements. Brand mark top-left at safeAreaPx.74 ```7576 Run `npx --prefix Pi-Dev-Ops/remotion-studio design.md lint <fragment>` if the fragment introduces new tokens (overrides only); otherwise lint runs on the source `.design.md` it inherits from.7778## Output7980`<calling-project>/.marketing/social/{jobId}/{channel}-{n}.md`:8182```yaml83---84channel: linkedin85brand: synthex86job: synthex-launch-2026-04-2887slot: 3-of-1288assetType: text89hashtags: [SyntheticData, MLOps, AISafety]90voiceLintPass: true91videoDispatched: false92---93```9495For video slots, output includes `videoDispatched: true` with the `remotion-orchestrator` job ID it created.9697## Boundaries9899- Never lead with "We" / "Our" / "I" — global Pi-CEO content rule.100- Never use AI-filler words (delve, tapestry, leverage, robust, seamless).101- Never recommend posting frequency above the brand's sustainable cadence (set by `marketing-channel-strategist`).102- Never DIY video — always dispatch to `remotion-orchestrator`.103- Never write engagement-bait CTAs ("comment YES if you agree") for B2B brands — voice mismatch.104105## Hands off to106107- `remotion-orchestrator` (cross-pack: every video slot dispatches here)108- `marketing-launch-runbook` (slots social drops onto launch calendar)109- `marketing-analytics-attribution` (per-post UTM)110111## Per-project keys112113- `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` — drafting + hook variant generation. Missing → returns the brief structure with "fill the hook" placeholders.114- No social-platform API keys required for v1 — outputs are drafts, the user / scheduler posts them. Future v1.1: `BUFFER_API_KEY` / `LINKEDIN_*` for direct scheduling.