Skip to content
Automation
Skill

/marketing-os-carousel

Build an image-first social carousel from an asset already filed in the Marketing OS, export it as a PDF, and record it back as a real channel asset. Brand palette, typography, the logo pointer and the never-black-background rule all resolve from Context/brand/brand-kit.md.

From plugin
benai-skills
62152 skills17 agents1 hook4 MCP
Install
$ npx -y skills add naveedharri/benai-skills --skill marketing-os-carousel --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/marketing-os-carousel

Context preview

The summary Claude sees to decide when to auto-load this skill.

Build an image-first social carousel from an asset already filed in the Marketing OS, export it as a PDF, and record it back as a real channel asset. Brand palette, typography, the logo pointer and the never-black-background rule all resolve from Context/brand/brand-kit.md.

SKILL.md

marketing-os-carousel.SKILL.md
name: marketing-os-carousel
description: "Build an image-first social carousel from an asset already filed in the Marketing OS, export it as a PDF, and record it back as a real channel asset. Brand palette, typography, the logo pointer and the never-black-background rule all resolve from Context/brand/brand-kit.md. Source is a filed newsletter edition, published pillar asset, or pipeline brief, so it provably says what the parent said. Fans out parallel readers over the OS before planning, renders every slide with Higgsfield, QAs every slide with one agent each, prompted to reject rather than pass, composites the footer in code, assembles the PDF, then writes the repurposed-channel asset pointing at the PDF, updates the parent's repurpose tree, logs, and always closes by rendering a run report. Use when the user says 'build a carousel', 'turn this newsletter into a carousel', or runs /marketing-os-carousel.\\\"\ndisable-model-invocation: true\nargument-hint: \\\"[source, e.g. a broadcast slug, a published pillar slug, or 'latest newsletter']"
disable-model-invocation: true

Marketing OS Carousel

One filed asset in, one branded PDF out, and the OS records that the child exists.

**This skill carries no brand of its own.** No palette, no typography, no logo, no example carousel. All of it lives once in `Context/brand/brand-kit.md`, which is the executable design contract, and this skill resolves it there every run. The original carousel skill shipped its own copy of the palette and its own logo file, so a rebrand meant editing a skill folder and the two versions silently disagreed until somebody noticed.

**And it does not guess its source.** The original scanned an inbox for an email somebody described. This one repurposes an asset that is already filed, which is what makes the carousel and its parent provably the same argument.

Run from the OS root. **Stay inside that root.** **Start from zero on identity:** the name on the footer, the handle, the mark and every colour come from the OS. If the OS does not name one, you do not know it, and you stop rather than substituting a plausible value.

First, check what you have

| State | Do | | --- | --- | | No `Context/config.md` | Not a Marketing OS. Point at `marketing-os-setup` and stop | | No `Context/brand/brand-kit.md` | Stop. There is no brand contract to build against, and inventing one is how brand drift starts | | Brand kit exists but names no logo file | Stop and ask for the path. The mark is composited by code and must be a real file | | No source named, `Channels/` populated | Propose sources from the OS, best candidate first | | Higgsfield not connected | Say so and stop before Step 4. This skill cannot render without an image model |

Step 1: resolve the brand, once

Read `Context/brand/brand-kit.md` and pull:

| What | Used for | | --- | --- | | The audience-facing palette | Slide background, ink, and the single highlight colour | | The background rule | The brand kit states whether black may be a background on an audience-facing surface. Obey it exactly as scoped | | Typography | The heading and mono faces, passed to the footer script | | The logo | Its markup for reference, and the pointer to the real raster the footer needs | | The portrait pointer | Optional. Only if the brand kit names one |

Read `Context/config.md` for `operator_name` and `org_name`, which are the two strings on the footer bar.

**Use the audience-facing token set, not the data-surface one.** A brand kit may carry two sets on one chassis, one for what an audience sees and one for internal dashboards. A carousel is audience-facing. Never blend them.

**Never hardcode a colour.** If you find yourself typing a hex that is not in the brand kit you have already made the mistake this skill exists to prevent.

Step 2: resolve the source from the OS

Accept a slug, or propose candidates. Priority order, because it follows the cascade the OS documents:

1. **A filed newsletter edition.** `Channels/{email channel}/broadcasts/YYYY-MM-DD-<slug>.md`. Read the `## Edition` body and the `## The decisions` block. The decisions block is the gift: the angle, the insight and the outcome were already argued out, so the carousel inherits them rather than re-deriving them. 2. **A published pillar asset.** `Channels/{primary}/published/YYYY-MM-DD-<slug>.md`. Read its angle, its snapshot and its `## Repurpose tree`. 3. **A pipeline brief.** `Channels/{channel}/pipeline/<slug>/brief.md`, for something not yet shipped.

**Check the parent's repurpose tree before you build.** If a carousel child already exists, say so and ask whether this is a second angle or a replacement. Building a duplicate silently is how a cascade turns into noise.

Read alongside the source:

| Path | For | | --- | --- | | `Context/personal-brand/voice.md` | The master voice register and the banned constructions | | `Channels/{target channel}/voice.md` | The delta for the surface this posts to | | `Channels/{target channel}/strategy.md` | The format contract and what this channel receives | | `Intelligence/research/swipe/hooks.md` | Proven opening shapes for the cover slide | | `Intelligence/research/swipe/ctas.md` | CTA phrasings and where each routes | | `Offers/{offer}/offer.md` | The destination for the final slide, and its live facts | | `Analytics/what-works.md` | What has measured well. Honour what each finding licenses |

Step 2b: fan out the reads, in one batch

Steps 1 and 2 name a lot of files. **Launch them as parallel readers rather than opening them one at a time**, then plan the slides once everything has returned.

| Agent | Reads | Returns | | --- | --- | --- | | 1 | The source asset in full, plus its parent if it has one | The argument, the decisions already made, and **whether a carousel child is already recorded in the repurpose tree** | | 2 | `Context/brand/brand-kit.md` | Every token needed to build the style block, the background rule at the scope it is written,

Read more
Ships withbenai-skills

Expert automation skills for Claude Code, organized by department.

Get the whole plugin

Other skills on benai-skills.