{"id":"e019b694-0018-4d42-bb51-cac428707e6c","shortId":"5Jzdmd","kind":"skill","title":"social-campaign","tagline":"End-to-end social content campaign pipeline. Takes a marketing goal and produces scheduled, on-brand social posts with visuals across postiz-supported platforms, while keeping Typefully for X/thread specialist flows and fallback coverage. Chains: CMO strategy, content writing wit","description":"# /social-campaign — Social Content Campaign Pipeline\n\nOrchestrator that chains 5 phases into a complete social content campaign:\n\n```\nSTRATEGY  →  WRITE  →  REVIEW  →  DESIGN  →  SCHEDULE\n (plan)     (draft)   (audit)   (visuals)  (postiz/typefully)\n```\n\nEach phase is an independent block. This orchestrator is one recipe that combines them. Produces N scheduled posts with selective visuals from a single marketing goal.\n\n## When to Use\n\n- Pre-launch content build-up (1-2 week runway)\n- Ongoing content calendar creation\n- Campaign bursts around announcements\n- Any time you need multiple scheduled posts with visuals\n\n## Architecture\n\n```\nPhase 1: STRATEGY   — Plan content calendar with themes, timing, platform mix\nPhase 2: WRITE      — Draft posts calibrated to real voice (not brand doc voice)\nPhase 3: REVIEW     — AI slop audit + voice calibration against published posts\nPhase 4: DESIGN     — Selective visual creation in Paper MCP (not every post)\nPhase 5: SCHEDULE   — Route each post to postiz first, with Typefully as the X/thread specialist and fallback\n```\n\n## Workflow\n\n### Phase 0: Load Context\n\n1. Run `mktg status --json` to check brand health\n2. Read brand files in parallel:\n   - `brand/voice-profile.md` (tone, vocabulary, do's/don'ts)\n   - `brand/positioning.md` (angles, headlines)\n3. Read `brand/landscape.md` if it exists — check the Claims Blacklist before making ecosystem or competitive claims. If stale (>14 days) or missing, warn that market claims may be outdated.\n4. Check social distribution readiness: `mktg doctor --json --fields checks.postiz.configured,checks.typefully.configured`\n5. If Typefully is configured, load Typefully config: check default social set, list available accounts\n6. If Typefully is configured, check queue schedule:\n   - `typefully.js queue:get --start-date <today> --end-date <+N days>`\n   - `typefully.js queue:schedule:get` (what days/times are slots)\n7. Read recent published posts:\n   - Prefer Typefully history when available: `typefully.js drafts:list --status published --sort -created_at`\n   - Otherwise use the project's recent post corpus or approved drafts for voice calibration\n\n**If brand files are missing:** The skill still works. Ask the user for: (1) brand voice in 2-3 adjectives, (2) target platforms, (3) content themes. Proceed with these as lightweight context. Brand files enhance, never gate.\n\n**If Typefully queue is empty (no available slots):** Offer the user two options: (1) create drafts without scheduling (user schedules manually in Typefully UI), or (2) use specific datetime scheduling with `--schedule \"ISO_datetime\"`. This only applies to posts routed to Typefully.\n\n**Present context summary:**\n```\nBrand: loaded (voice, positioning) | OR: missing — using lightweight context\nPostiz: configured for multi-provider social distribution | OR: missing — Typefully/file/browser fallbacks only\nTypefully: connected for X/threads specialist routing and fallback | OR: missing\nQueue: {N} empty Typefully slots over next {days} days ({schedule})\nLast post: \"{preview}\" ({date})\n```\n\n### Phase 1: STRATEGY\n\nPlan the content calendar. This is strategic thinking, not template filling.\n\n**Inputs needed (use AskUserQuestion if not provided):**\n- What's the marketing goal? (launch, awareness, engagement, authority)\n- What's the timeline? (1 week, 2 weeks, ongoing)\n- Any specific themes or angles to hit?\n\n**Planning process:**\n1. Analyze the goal, timeline, and available queue slots\n2. Plan N posts distributed across the timeline\n3. For each post, decide:\n   - **Day and time slot** (from queue schedule)\n   - **Platform mix** (X only, LinkedIn only, or both)\n   - **Theme** (problem awareness, value education, social proof, product tease, announcement)\n   - **Content type** (observation, hot take, how-to, builder update, announcement)\n4. Consider pacing: build gradually, don't front-load announcements\n5. Consider variety: alternate themes, don't repeat the same structure\n\n**Present the calendar for approval:**\n\n```\n| # | Date | Platform | Theme | Hook Direction |\n|---|------|----------|-------|----------------|\n```\n\n**Gate:** User must approve calendar before Phase 2.\n\n### Phase 2: WRITE\n\nDraft all posts, calibrated to the user's ACTUAL voice (not just the brand doc).\n\n**Critical: Voice Calibration**\n\nBefore writing, read 5-8 recent published posts from Typefully:\n```bash\ntypefully.js drafts:list --status published --sort -created_at\ntypefully.js drafts:get <id>  # for full text of top posts\n```\n\nAnalyze the real voice patterns:\n- Sentence length and structure\n- Use of fragments vs complete sentences\n- Technical specificity level\n- How they open posts (fact-first? question? observation?)\n- How they close (link? command? statement?)\n- Personality markers (dry humor? directness? code inline?)\n\n**Write each post matching these patterns, NOT generic brand voice.**\n\nFor each post:\n1. Write the full text\n2. Determine platform (X, LinkedIn, or both)\n3. If cross-platform with same content, use one draft with `--platform x,linkedin`\n4. If cross-platform with different content, plan as single draft with platform-specific text\n\n**Present all posts for approval as a numbered list with the full text.**\n\n**Gate:** User must approve posts before Phase 3.\n\n### Phase 3: REVIEW\n\nTwo-part quality audit. This is the most important phase for authenticity.\n\n#### 3a: AI Slop Audit\n\nAudit every post for these AI tells. **Read each post manually, in sequence, looking at the batch as a whole** (not just individual posts). This cannot be done with regex.\n\n**Structural patterns to catch:**\n- Sentences that all follow the same rhythm (subject-verb-explanation, repeat)\n- Every post opening with a question or every post opening with a bold claim — variety is key\n- Numbered lists where every item has the same sentence structure\n- \"Sandwich\" pattern: statement, elaboration, restatement in every post\n\n**Transition filler to remove:**\n- \"Here's the thing:\", \"Let me be clear:\", \"The reality is:\", \"At the end of the day\"\n- \"In today's [landscape/world/environment]\", \"When it comes to\"\n- \"It's worth noting that\", \"Interestingly enough\", \"Not gonna lie\"\n\n**Vocabulary tells to flag:**\n- \"Leverage\", \"unlock\", \"game-changer\", \"deep dive\", \"robust\", \"streamline\"\n- \"Landscape\", \"navigate\", \"elevate\", \"empower\", \"cutting-edge\"\n- Overuse of \"incredibly\", \"absolutely\", \"fundamentally\"\n\n**Batch-level monotony checks:**\n- Do 3+ posts start the same way? Fix it.\n- Do all posts use the same CTA? Vary them.\n- Is the emotional range flat? Mix insight, humor, urgency, curiosity.\n- Could you shuffle the posts and not notice? Each needs a distinct angle.\n\nIf /cmo is installed, also reference `~/.claude/skills/cmo/references/ai-slop-patterns.md` for the full pattern library.\n\n#### 3b: Voice Calibration Check\n\nCompare each post against the published posts from Phase 2's calibration:\n- Does this sound like the same person wrote it?\n- Would this blend in with their real timeline?\n- Is the technical specificity level right?\n- Are the sentence rhythms natural?\n\n**Fix anything that fails either audit. Present the final versions.**\n\n**Gate:** User approves final post text.\n\n### Phase 4: DESIGN\n\nSelective visual creation. NOT every post gets an image — text-only posts feel more authentic for personal observations and hot takes.\n\nFor the full decision framework (which posts get images), image types, Paper MCP steps, and design system specs, see `references/paper-mcp-workflow.md`.\n\n**Quick decision rule:** Comparisons, processes, data, and announcements get images. Personal takes, vents, and builder updates stay text-only.\n\n**Present image plan for approval:**\n\n```\n| Post # | Image? | What It Shows |\n|--------|--------|---------------|\n```\n\n**Gate:** User approves image plan. User exports PNGs from Paper after design.\n\n### Phase 5: SCHEDULE\n\n<!-- BEGIN POSTIZ EXTENSION (mktg v0.2+) -->\n\n**Step 0 — Pick the scheduling backend per post.**\n\nBefore scheduling anything, detect which backends are available. This check runs once per Phase 5 entry and caches for the phase:\n\n```bash\nmktg doctor --json --fields checks.typefully.configured,checks.postiz.configured\n```\n\nResolve the routing per post using the table below. `platform` is already tagged per post by Phase 2 and appears verbatim in the post file's YAML frontmatter.\n\n| Platform tagged on the post | Both configured | Typefully only | Postiz only | Neither |\n|---|---|---|---|---|\n| `x` / Twitter (single or thread) | **Typefully** (threads are canonical here) | Typefully | Postiz (no thread support, flag it) | Skip with fix: \"Set TYPEFULLY_API_KEY or POSTIZ_API_KEY\" |\n| `linkedin`, `threads`, `bluesky`, `mastodon` | **Postiz** (richer provider catalog) | Typefully | Postiz | Skip with fix |\n| `reddit`, `instagram`, `tiktok`, `youtube`, `pinterest`, `discord`, `slack` | **Postiz** | Can't publish — write file only, instruct user to copy-paste | Postiz | Skip with fix |\n\n**Invariant:** any post with `type: thread` stays on Typefully regardless of postiz availability. Thread UX is Typefully's canonical path; do not degrade it.\n\n**Progressive enhancement:** if `checks.postiz.configured === false`, Phase 5 behaves exactly as the Typefully-only path below — zero behavior change for users without postiz. If both are missing, fall back to writing files into `marketing/campaigns/{campaign-name}/posts/` and surface a \"copy these to the platform UI\" summary.\n\n**Fallback behavior under failure (during the phase):**\n- Postiz unreachable / 5xx: retry once with exponential backoff (1s, 2s). On second failure for a Typefully-covered platform (linkedin/threads/bluesky/mastodon), fall back to Typefully. On second failure for a postiz-only platform (reddit/instagram/tiktok/youtube/pinterest/discord/slack), fail the post with `fix: \"postiz unreachable — check mktg catalog info postiz --fields configured,resolved_base\"`.\n- Postiz 401: halt the entire phase. Bad key means the whole batch will fail; don't waste rate-limit quota.\n- Postiz 429: parse `Retry-After` from the adapter's error envelope; surface to the user. Resume after the cooldown or save the batch for later.\n- Typefully failure: unchanged from pre-extension behavior — fail loudly per the existing flow below.\n\n<!-- END POSTIZ EXTENSION -->\n\n### Case A — Typefully path (X and threads, plus Typefully-covered platforms when postiz is absent)\n\nUpload media and schedule all posts via Typefully.\n\n**For posts WITH images:**\n1. Find exported PNGs (ask user for location if needed)\n2. Upload each: `typefully.js media:upload <file_path>`\n3. Create or update draft with media: `typefully.js drafts:create --platform x,linkedin --text \"...\" --media <media_id> --schedule <ISO_datetime>`\n\n**For text-only posts:**\n1. Create draft: `typefully.js drafts:create --platform x,linkedin --text \"...\" --schedule <ISO_datetime>`\n\n**For updating existing drafts (if created earlier):**\n1. Upload media: `typefully.js media:upload <file>`\n2. Update draft with text AND media: `typefully.js drafts:update <draft_id> --text \"...\" --media <media_id> --use-default`\n   (Note: `--text` is required even when only adding media)\n\n**Scheduling options:**\n- Specific time: `--schedule \"2025-01-21T09:00:00Z\"`\n- Next queue slot: `--schedule next-free-slot`\n- Publish now: `--schedule now`\n\n**After scheduling all posts:**\n1. Verify: `typefully.js drafts:list --status scheduled --sort scheduled_date`\n2. Confirm each draft has correct platform, text, and media\n3. Present final summary table\n\n**Gate:** User reviews scheduled posts in Typefully UI.\n\n### Case B — Postiz path (non-Twitter platforms when postiz is configured)\n\nFor each post whose routed backend is postiz (per Step 0 table), build a `publish.json` entry and invoke the adapter. You do NOT call the postiz API directly — always go through `mktg publish --adapter postiz`.\n\n**For text-only posts (v1 is draft-only; scheduling lands in v2):**\n1. Build `publish.json` with one item per post:\n   ```json\n   {\n     \"name\": \"{campaign-name}\",\n     \"items\": [{\n       \"type\": \"social\",\n       \"adapter\": \"postiz\",\n       \"content\": \"<post text>\",\n       \"metadata\": { \"providers\": [\"<postiz-identifier>\"] }\n     }]\n   }\n   ```\n   `providers` must be exact postiz `identifier` strings (`linkedin`, `linkedin-page`, `bluesky`, `reddit`, etc.) — resolve friendly names via `/postiz` skill's Step 2b alias logic, not inline here.\n\n2. Dry-run: `mktg publish --adapter postiz --dry-run --input '<json>' --json`. Verify the adapter validates the providers against connected integrations.\n3. Confirm: `mktg publish --adapter postiz --confirm --input '<json>' --json`. The adapter writes sent-markers to `.mktg/publish/{campaign-name}-postiz.json` on success.\n4. Update the post file frontmatter: `status: scheduled`, `draft_id: <id>`.\n\n**For posts WITH images (v2 — skip in v1):**\npostiz v1 is draft-only; images hardcode to `[]`. If a post has `has_image: true`, either (a) wait for v2, or (b) downgrade to Typefully if the platform allows (X/LinkedIn). Do NOT populate `metadata.mediaPaths` in v1 — the adapter ignores it.\n\n**After scheduling all posts (mixed Typefully + postiz):**\n1. Verify Typefully side: `typefully.js drafts:list --status scheduled --sort scheduled_date`.\n2. Verify postiz side: the adapter's response envelope already reports per-provider status in `results[]`. Capture draft IDs to the post file frontmatter.\n3. Present the unified final summary table.\n\n**Gate:** User reviews scheduled posts in each platform's UI (Typefully for X, postiz dashboard for everything else).\n\n## Human-in-the-Loop Gates\n\n```\n[Phase 1] → User approves content calendar\n[Phase 2] → User approves post drafts\n[Phase 3] → User approves after AI slop + voice audit\n[Phase 4] → User approves image plan, exports PNGs from Paper\n[Phase 5] → User verifies in Typefully UI\n```\n\nEach gate is an AskUserQuestion. The user can go back to any phase.\n\n## Output\n\n```\nmarketing/campaigns/{campaign-name}/\n  calendar.md              # Content calendar with themes + timing\n  posts/\n    post-01.md             # Each post with text, platform, schedule\n    post-02.md\n    ...\n  images/\n    post-03-comparison.png # Exported from Paper\n    post-06-flow.png\n    ...\n  campaign-log.md          # What was scheduled, draft IDs, media IDs\n```\n\n### Post File Format\n\nEach `post-XX.md` file uses this structure:\n\n```yaml\n---\npost_number: 1\nplatform: x,linkedin\ntype: single | thread | carousel\nscheduled_date: \"2026-03-25T09:00:00Z\"\ndraft_id: \"\"          # Populated after Typefully draft creation\nmedia_id: \"\"          # Populated after media upload\nhas_image: false\nstatus: draft | approved | scheduled | published\n---\n```\n\n```\n[Post text goes here]\n\n[For threads, separate tweets with ---]\n```\n\n## Integration Requirements\n\n| Integration | Required? | Check |\n|-------------|-----------|-------|\n| Typefully API key | Yes | `typefully.js config:show` |\n| Paper MCP | Only if images needed | `mcp__paper__get_basic_info()` |\n| Brand files | Recommended | `mktg status --json` |\n\nIf Typefully is not configured, guide setup before Phase 5.\nIf Paper MCP is not available, skip Phase 4 (text-only campaign).\n\n## Reusable Blocks\n\n| Block | Standalone Use |\n|-------|---------------|\n| Phase 1 (Strategy) | Content calendar for any channel |\n| Phase 2 (Write) | Draft posts for manual publishing |\n| Phase 3 (Review) | Audit any written content for AI slop |\n| Phase 4 (Design) | Create visuals for any social content |\n| Phase 5 (Schedule) | Schedule any drafts via Typefully |\n\n## Anti-Patterns\n\n| Anti-Pattern | Why It Fails | Instead |\n|-------------|-------------|---------|\n| Image on every post | Looks like a content calendar, not a person | Be selective; text-only posts feel authentic |\n| Same card template with different text | Spam in the feed | Each image must have a unique visual concept |\n| Writing from brand doc alone | Sounds like marketing copy, not the person | Calibrate against their actual published posts |\n| Scheduling all at once without review | AI slop gets through | Manual line-by-line audit is non-negotiable |\n| Front-loading announcements | Audience isn't warmed up | Build: awareness → value → tease → announce |\n\n## Principles\n\n- **Voice over brand** — Match the person's real voice, not the documented brand voice\n- **Selective visuals** — Every image must earn its place; text-only is a valid choice\n- **Batch coherence** — Posts should vary in structure; no two adjacent posts should use the same pattern\n- **AI slop is non-negotiable** — Manual audit every time, no shortcuts\n- **Skills never call skills** — This SKILL.md teaches the agent the sequence; the agent loads each skill\n- **Filesystem is the bus** — Campaign state persists as files, not in conversation\n- **Human gates at every phase** — No runaway agent chains","tags":["social","campaign","marketing","cli","moizibnyousaf","agent-skills","ai-agents","ai-marketing","brand-memory","brand-voice","claude-code","claude-code-skills"],"capabilities":["skill","source-moizibnyousaf","skill-social-campaign","topic-agent-skills","topic-ai-agents","topic-ai-marketing","topic-brand-memory","topic-brand-voice","topic-claude-code","topic-claude-code-skills","topic-cli","topic-cmo","topic-marketing-automation","topic-marketing-cli","topic-seo"],"categories":["marketing-cli"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/MoizIbnYousaf/marketing-cli/social-campaign","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add MoizIbnYousaf/marketing-cli","source_repo":"https://github.com/MoizIbnYousaf/marketing-cli","install_from":"skills.sh"}},"qualityScore":"0.459","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 18 github stars · SKILL.md body (16,808 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:05:52.626Z","embedding":null,"createdAt":"2026-05-04T19:06:16.432Z","updatedAt":"2026-05-18T19:05:52.626Z","lastSeenAt":"2026-05-18T19:05:52.626Z","tsv":"'-01':1603 '-03':2054 '-2':110 '-21':1604 '-25':2055 '-3':356 '-8':637 '/.claude/skills/cmo/references/ai-slop-patterns.md':996 '/cmo':991 '/postiz':1757 '/posts':1354 '/social-campaign':47 '0':197,1153,1679 '00':1606,2057 '00z':1607,2058 '1':109,132,200,351,388,467,500,514,714,1512,1549,1567,1624,1718,1878,1947,2043,2147 '14':242 '1s':1380 '2':143,209,355,358,400,502,523,611,613,719,1015,1205,1522,1573,1634,1767,1890,1953,2155 '2025':1602 '2026':2053 '2b':1761 '2s':1381 '3':156,224,361,531,726,778,780,950,1528,1644,1789,1915,1959,2163 '3a':795 '3b':1002 '4':167,253,572,741,1063,1812,1968,2136,2173 '401':1423 '429':1444 '5':55,179,264,583,636,1150,1174,1323,1978,2127,2182 '5xx':1374 '6':279 '7':306 'absent':1499 'absolut':942 'account':278 'across':26,528 'actual':623,2252 'ad':1595 'adapt':1451,1688,1702,1734,1773,1782,1793,1799,1868,1895 'adjac':2328 'adject':357 'agent':2355,2359,2382 'ai':158,796,804,1963,2170,2261,2335 'alia':1762 'allow':1859 'alon':2241 'alreadi':1199,1899 'also':994 'altern':586 'alway':1697 'analyz':515,661 'angl':222,509,989 'announc':120,560,571,582,1114,2278,2288 'anti':2190,2193 'anti-pattern':2189,2192 'anyth':1047,1162 'api':1250,1254,1695,2095 'appear':1207 'appli':411 'approv':333,598,607,762,774,1058,1131,1139,1949,1955,1961,1970,2077 'architectur':130 'around':119 'ask':347,1516 'askuserquest':483,1988 'audienc':2279 'audit':70,160,786,798,799,1051,1966,2165,2270,2342 'authent':794,1080,2218 'author':495 'avail':277,315,381,520,1167,1305,2133 'awar':493,553,2285 'b':1658,1852 'back':1345,1393,1993 'backend':1157,1165,1674 'backoff':1379 'bad':1428 'base':1421 'bash':643,1181 'basic':2110 'batch':815,945,1433,1466,2319 'batch-level':944 'behav':1324 'behavior':1334,1366,1476 'blacklist':233 'blend':1029 'block':78,2142,2143 'blueski':1258,1750 'bold':857 'brand':21,152,207,211,339,352,370,420,628,709,2112,2239,2292,2302 'brand/landscape.md':226 'brand/positioning.md':221 'brand/voice-profile.md':215 'build':107,575,1681,1719,2284 'build-up':106 'builder':569,1121 'burst':118 'bus':2366 'cach':1177 'calendar':115,136,472,596,608,1951,2004,2150,2207 'calendar.md':2002 'calibr':147,162,337,618,632,1004,1017,2249 'call':1692,2349 'campaign':3,10,50,62,117,1352,1729,1807,2000,2140,2367 'campaign-log.md':2023 'campaign-nam':1351,1728,1806,1999 'cannot':824 'canon':1236,1311 'captur':1907 'card':2220 'carousel':2050 'case':1484,1657 'catalog':1263,1415 'catch':832 'chain':41,54,2383 'chang':1335 'changer':927 'channel':2153 'check':206,230,254,272,284,948,1005,1169,1413,2093 'checks.postiz.configured':262,1187,1320 'checks.typefully.configured':263,1186 'choic':2318 'claim':232,239,249,858 'clear':891 'close':690 'cmo':42 'code':699 'coher':2320 'combin':85 'come':907 'command':692 'compar':1006 'comparison':1110 'competit':238 'complet':59,674 'concept':2236 'config':271,2099 'configur':268,283,430,1222,1419,1668,2122 'confirm':1635,1790,1795 'connect':443,1787 'consid':573,584 'content':9,44,49,61,105,114,135,362,471,561,733,748,1736,1950,2003,2149,2168,2180,2206 'context':199,369,418,428 'convers':2374 'cooldown':1462 'copi':1287,1358,2245 'copy-past':1286 'corpus':331 'correct':1639 'could':977 'cover':1389,1494 'coverag':40 'creat':322,389,650,1529,1537,1550,1554,1565,2175 'creation':116,171,1067,2065 'critic':630 'cross':729,744 'cross-platform':728,743 'cta':964 'curios':976 'cut':937 'cutting-edg':936 'dashboard':1936 'data':1112 'date':292,295,465,599,1633,1889,2052 'datetim':403,408 'day':243,297,459,460,536,900 'days/times':303 'decid':535 'decis':1090,1108 'deep':928 'default':273,1587 'degrad':1315 'design':66,168,1064,1102,1148,2174 'detect':1163 'determin':720 'differ':747,2223 'direct':603,698,1696 'discord':1274 'distinct':988 'distribut':256,436,527 'dive':929 'doc':153,629,2240 'doctor':259,1183 'document':2301 'done':826 'downgrad':1853 'draft':69,145,317,334,390,615,645,653,736,752,1532,1536,1551,1553,1563,1575,1581,1627,1637,1712,1820,1834,1883,1908,1957,2027,2059,2064,2076,2157,2186 'draft-on':1711,1833 'dri':696,1769,1776 'dry-run':1768,1775 'earlier':1566 'earn':2309 'ecosystem':236 'edg':938 'educ':555 'either':1050,1846 'elabor':875 'elev':934 'els':1939 'emot':969 'empow':935 'empti':379,454 'end':5,7,294,897 'end-dat':293 'end-to-end':4 'engag':494 'enhanc':372,1318 'enough':915 'entir':1426 'entri':1175,1684 'envelop':1454,1898 'error':1453 'etc':1752 'even':1592 'everi':176,800,845,852,865,878,1069,2201,2306,2343,2378 'everyth':1938 'exact':1325,1742 'exist':229,1481,1562 'explan':843 'exponenti':1378 'export':1143,1514,1973,2019 'extens':1475 'fact':684 'fact-first':683 'fail':1049,1406,1435,1477,2197 'failur':1368,1384,1398,1470 'fall':1344,1392 'fallback':39,194,440,449,1365 'fals':1321,2074 'feed':2228 'feel':1078,2217 'field':261,1185,1418 'file':212,340,371,1212,1281,1348,1816,1913,2032,2036,2113,2371 'filesystem':2363 'fill':479 'filler':881 'final':1054,1059,1646,1919 'find':1513 'first':186,685 'fix':956,1046,1247,1268,1292,1410 'flag':922,1243 'flat':971 'flow':37,1482 'follow':836 'format':2033 'fragment':672 'framework':1091 'free':1614 'friend':1754 'front':580,2276 'front-load':579,2275 'frontmatt':1215,1817,1914 'full':656,717,769,999,1089 'fundament':943 'game':926 'game-chang':925 'gate':374,604,771,1056,1137,1649,1922,1945,1985,2376 'generic':708 'get':289,301,654,1071,1094,1115,2109,2263 'go':1698,1992 'goal':15,98,491,517 'goe':2082 'gonna':917 'gradual':576 'guid':2123 'halt':1424 'hardcod':1837 'headlin':223 'health':208 'histori':313 'hit':511 'hook':602 'hot':564,1085 'how-to':566 'human':1941,2375 'human-in-the-loop':1940 'humor':697,974 'id':1821,1909,2028,2030,2060,2067 'identifi':1744 'ignor':1869 'imag':1073,1095,1096,1116,1128,1133,1140,1511,1825,1836,1844,1971,2017,2073,2105,2199,2230,2307 'import':791 'incred':941 'independ':77 'individu':821 'info':1416,2111 'inlin':700,1765 'input':480,1778,1796 'insight':973 'instagram':1270 'instal':993 'instead':2198 'instruct':1283 'integr':1788,2089,2091 'interest':914 'invari':1293 'invok':1686 'isn':2280 'iso':407 'item':866,1723,1731 'json':204,260,1184,1726,1779,1797,2117 'keep':32 'key':861,1251,1255,1429,2096 'land':1715 'landscap':932 'landscape/world/environment':904 'last':462 'later':1468 'launch':104,492 'length':667 'let':888 'level':678,946,1039 'leverag':923 'librari':1001 'lie':918 'lightweight':368,427 'like':1021,2204,2243 'limit':1441 'line':2267,2269 'line-by-lin':2266 'link':691 'linkedin':547,723,740,1256,1540,1557,1746,1748,2046 'linkedin-pag':1747 'linkedin/threads/bluesky/mastodon':1391 'list':276,318,646,766,863,1628,1884 'load':198,269,421,581,2277,2360 'locat':1519 'logic':1763 'look':812,2203 'loop':1944 'loud':1478 'make':235 'manual':395,809,2160,2265,2341 'marker':695,1803 'market':14,97,248,490,2244 'marketing/campaigns':1350,1998 'mastodon':1259 'match':704,2293 'may':250 'mcp':174,1099,2102,2107,2130 'mean':1430 'media':1501,1526,1534,1542,1569,1571,1579,1584,1596,1643,2029,2066,2070 'metadata':1737 'metadata.mediapaths':1864 'miss':245,342,425,438,451,1343 'mix':141,544,972,1875 'mktg':202,258,1182,1414,1700,1771,1791,2115 'mktg/publish':1805 'monotoni':947 'multi':433 'multi-provid':432 'multipl':125 'must':606,773,1740,2231,2308 'n':88,296,453,525 'name':1353,1727,1730,1755,1808,2001 'natur':1045 'navig':933 'need':124,481,986,1521,2106 'negoti':2274,2340 'neither':1227 'never':373,2348 'next':458,1608,1613 'next-free-slot':1612 'non':1662,2273,2339 'non-negoti':2272,2338 'non-twitt':1661 'note':912,1588 'notic':984 'number':765,862,2042 'observ':563,687,1083 'offer':383 'on-brand':19 'one':82,735,1722 'ongo':113,504 'open':681,847,854 'option':387,1598 'orchestr':52,80 'otherwis':324 'outdat':252 'output':1997 'overus':939 'pace':574 'page':1749 'paper':173,1098,1146,1976,2021,2101,2108,2129 'parallel':214 'pars':1445 'part':784 'past':1288 'path':1312,1331,1487,1660 'pattern':665,706,830,873,1000,2191,2194,2334 'per':1158,1172,1191,1201,1479,1677,1724,1902 'per-provid':1901 'persist':2369 'person':694,1024,1082,1117,2210,2248,2295 'phase':56,74,131,142,155,166,178,196,466,610,612,777,779,792,1014,1062,1149,1173,1180,1204,1322,1371,1427,1946,1952,1958,1967,1977,1996,2126,2135,2146,2154,2162,2172,2181,2379 'pick':1154 'pinterest':1273 'pipelin':11,51 'place':2311 'plan':68,134,469,512,524,749,1129,1141,1972 'platform':30,140,360,543,600,721,730,738,745,755,1197,1216,1362,1390,1404,1495,1538,1555,1640,1664,1858,1929,2014,2044 'platform-specif':754 'plus':1491 'pngs':1144,1515,1974 'popul':1863,2061,2068 'posit':423 'post':23,90,127,146,165,177,183,310,330,413,463,526,534,617,640,660,682,703,713,760,775,801,808,822,846,853,879,951,960,981,1008,1012,1060,1070,1077,1093,1132,1159,1192,1202,1211,1220,1295,1408,1505,1509,1548,1623,1653,1671,1708,1725,1815,1823,1841,1874,1912,1926,1956,2008,2011,2031,2041,2080,2158,2202,2216,2254,2321,2329 'post-01.md':2009 'post-02.md':2016 'post-03-comparison.png':2018 'post-06-flow.png':2022 'post-xx.md':2035 'postiz':28,185,429,1225,1239,1253,1260,1265,1276,1289,1304,1339,1372,1402,1411,1417,1422,1443,1497,1659,1666,1676,1694,1703,1735,1743,1774,1794,1830,1877,1892,1935 'postiz-on':1401 'postiz-support':27 'postiz.json':1809 'postiz/typefully':72 'pre':103,1474 'pre-extens':1473 'pre-launch':102 'prefer':311 'present':417,594,758,1052,1127,1645,1916 'preview':464 'principl':2289 'problem':552 'proceed':364 'process':513,1111 'produc':17,87 'product':558 'progress':1317 'project':327 'proof':557 'provid':434,486,1262,1738,1739,1785,1903 'publish':164,309,320,639,648,1011,1279,1616,1701,1772,1792,2079,2161,2253 'publish.json':1683,1720 'qualiti':785 'question':686,850 'queue':285,288,299,377,452,521,541,1609 'quick':1107 'quota':1442 'rang':970 'rate':1440 'rate-limit':1439 'read':210,225,307,635,806 'readi':257 'real':149,663,1033,2297 'realiti':893 'recent':308,329,638 'recip':83 'recommend':2114 'reddit':1269,1751 'reddit/instagram/tiktok/youtube/pinterest/discord/slack':1405 'refer':995 'references/paper-mcp-workflow.md':1106 'regardless':1302 'regex':828 'remov':883 'repeat':590,844 'report':1900 'requir':1591,2090,2092 'resolv':1188,1420,1753 'respons':1897 'restat':876 'result':1906 'resum':1459 'retri':1375,1447 'retry-aft':1446 'reusabl':2141 'review':65,157,781,1651,1924,2164,2260 'rhythm':839,1044 'richer':1261 'right':1040 'robust':930 'rout':181,414,447,1190,1673 'rule':1109 'run':201,1170,1770,1777 'runaway':2381 'runway':112 's/don':219 'sandwich':872 'save':1464 'schedul':18,67,89,126,180,286,300,392,394,404,406,461,542,1151,1156,1161,1503,1543,1559,1597,1601,1611,1618,1621,1630,1632,1652,1714,1819,1872,1886,1888,1925,2015,2026,2051,2078,2183,2184,2255 'second':1383,1397 'see':1105 'select':92,169,1065,2212,2304 'sent':1802 'sent-mark':1801 'sentenc':666,675,833,870,1043 'separ':2086 'sequenc':811,2357 'set':275,1248 'setup':2124 'shortcut':2346 'show':1136,2100 'shuffl':979 'side':1881,1893 'singl':96,751,1230,2048 'skill':344,1758,2347,2350,2362 'skill-social-campaign' 'skill.md':2352 'skip':1245,1266,1290,1827,2134 'slack':1275 'slop':159,797,1964,2171,2262,2336 'slot':305,382,456,522,539,1610,1615 'social':2,8,22,48,60,255,274,435,556,1733,2179 'social-campaign':1 'sort':321,649,1631,1887 'sound':1020,2242 'source-moizibnyousaf' 'spam':2225 'spec':1104 'specialist':36,192,446 'specif':402,506,677,756,1038,1599 'stale':241 'standalon':2144 'start':291,952 'start-dat':290 'state':2368 'statement':693,874 'status':203,319,647,1629,1818,1885,1904,2075,2116 'stay':1123,1299 'step':1100,1152,1678,1760 'still':345 'strateg':475 'strategi':43,63,133,468,2148 'streamlin':931 'string':1745 'structur':593,669,829,871,2039,2325 'subject':841 'subject-verb-explan':840 'success':1811 'summari':419,1364,1647,1920 'support':29,1242 'surfac':1356,1455 'system':1103 't09':1605,2056 'tabl':1195,1648,1680,1921 'tag':1200,1217 'take':12,565,1086,1118 'target':359 'teach':2353 'teas':559,2287 'technic':676,1037 'tell':805,920 'templat':478,2221 'text':657,718,757,770,1061,1075,1125,1541,1546,1558,1577,1583,1589,1641,1706,2013,2081,2138,2214,2224,2313 'text-on':1074,1124,1545,1705,2137,2213,2312 'theme':138,363,507,551,587,601,2006 'thing':887 'think':476 'thread':1232,1234,1241,1257,1298,1306,1490,2049,2085 'tiktok':1271 'time':122,139,538,1600,2007,2344 'timelin':499,518,530,1034 'today':902 'tone':216 'top':659 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-marketing' 'topic-brand-memory' 'topic-brand-voice' 'topic-claude-code' 'topic-claude-code-skills' 'topic-cli' 'topic-cmo' 'topic-marketing-automation' 'topic-marketing-cli' 'topic-seo' 'transit':880 'true':1845 'ts':220 'tweet':2087 'twitter':1229,1663 'two':386,783,2327 'two-part':782 'type':33,188,266,270,281,312,376,397,416,442,455,562,642,1097,1223,1233,1238,1249,1264,1297,1301,1309,1329,1388,1395,1469,1486,1493,1507,1655,1732,1855,1876,1880,1932,1982,2047,2063,2094,2119,2188 'typefully-cov':1387,1492 'typefully-on':1328 'typefully.js':287,298,316,644,652,1525,1535,1552,1570,1580,1626,1882,2098 'typefully/file/browser':439 'ui':398,1363,1656,1931,1983 'unchang':1471 'unifi':1918 'uniqu':2234 'unlock':924 'unreach':1373,1412 'updat':570,1122,1531,1561,1574,1582,1813 'upload':1500,1523,1527,1568,1572,2071 'urgenc':975 'use':101,325,401,426,482,670,734,961,1193,1586,2037,2145,2331 'use-default':1585 'user':349,385,393,605,621,772,1057,1138,1142,1284,1337,1458,1517,1650,1923,1948,1954,1960,1969,1979,1990 'ux':1307 'v1':1709,1829,1831,1866 'v2':1717,1826,1850 'valid':1783,2317 'valu':554,2286 'vari':965,2323 'varieti':585,859 'vent':1119 'verb':842 'verbatim':1208 'verifi':1625,1780,1879,1891,1980 'version':1055 'via':1506,1756,2187 'visual':25,71,93,129,170,1066,2176,2235,2305 'vocabulari':217,919 'voic':150,154,161,336,353,422,624,631,664,710,1003,1965,2290,2298,2303 'vs':673 'wait':1848 'warm':2282 'warn':246 'wast':1438 'way':955 'week':111,501,503 'whole':818,1432 'whose':1672 'wit':46 'without':391,1338,2259 'work':346 'workflow':195 'worth':911 'would':1027 'write':45,64,144,614,634,701,715,1280,1347,1800,2156,2237 'written':2167 'wrote':1025 'x':545,722,739,1228,1488,1539,1556,1934,2045 'x/linkedin':1860 'x/thread':35,191 'x/threads':445 'yaml':1214,2040 'yes':2097 'youtub':1272 'zero':1333","prices":[{"id":"3082eafe-e9b9-4dc1-a5f8-4edab66c858c","listingId":"e019b694-0018-4d42-bb51-cac428707e6c","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"MoizIbnYousaf","category":"marketing-cli","install_from":"skills.sh"},"createdAt":"2026-05-04T19:06:16.432Z"}],"sources":[{"listingId":"e019b694-0018-4d42-bb51-cac428707e6c","source":"github","sourceId":"MoizIbnYousaf/marketing-cli/social-campaign","sourceUrl":"https://github.com/MoizIbnYousaf/marketing-cli/tree/main/skills/social-campaign","isPrimary":false,"firstSeenAt":"2026-05-04T19:06:16.432Z","lastSeenAt":"2026-05-18T19:05:52.626Z"}],"details":{"listingId":"e019b694-0018-4d42-bb51-cac428707e6c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"MoizIbnYousaf","slug":"social-campaign","github":{"repo":"MoizIbnYousaf/marketing-cli","stars":18,"topics":["agent-skills","ai-agents","ai-marketing","brand-memory","brand-voice","claude-code","claude-code-skills","cli","cmo","marketing-automation","marketing-cli","seo","skills-sh","typescript"],"license":"mit","html_url":"https://github.com/MoizIbnYousaf/marketing-cli","pushed_at":"2026-05-13T21:06:05Z","description":"Agent-native marketing cli: 51 skills, 5 research agents, brand memory that compounds, plus a local Studio dashboard (beta). single agent-native cli, then /cmo in ur coding agent..","skill_md_sha":"d3e9670b84e77c51756512e7011e14d1ddc5f128","skill_md_path":"skills/social-campaign/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/MoizIbnYousaf/marketing-cli/tree/main/skills/social-campaign"},"layout":"multi","source":"github","category":"marketing-cli","frontmatter":{"name":"social-campaign","description":"End-to-end social content campaign pipeline. Takes a marketing goal and produces scheduled, on-brand social posts with visuals across postiz-supported platforms, while keeping Typefully for X/thread specialist flows and fallback coverage. Chains: CMO strategy, content writing with voice calibration, AI slop audit, selective Paper MCP visual design, and routed scheduling via postiz or Typefully. Each phase has a human gate. Use this skill whenever someone wants to plan and execute a batch of social posts — not just one-off tweets. Triggers include: \"social campaign\", \"schedule posts\", \"pre-launch content\", \"content calendar\", \"social content pipeline\", \"build up content\", \"I need social media content for my launch\", \"help me build social presence\", \"plan a week of posts\", \"batch social content\", \"social media strategy\", or any request involving multiple scheduled posts with optional visuals."},"skills_sh_url":"https://skills.sh/MoizIbnYousaf/marketing-cli/social-campaign"},"updatedAt":"2026-05-18T19:05:52.626Z"}}