Klaviyo campaign
Skill NovateStudioGit/novate-studio-skills/email-marketing/klaviyo-campaign
Generate, design, and schedule a complete Klaviyo email campaign in one command — subject line A/B variants, preheader, body copy, designed HTML template, segment assignment, scheduled send. Approval gate before anything goes live. Trigger when the user says "send a campaign", "write me a Klaviyo campaign", "draft an email for X", "schedule a campaign", or pastes a campaign brief. Replaces the writer + designer + sender roles in one pass.From its SKILL.md
npx -y skills add NovateStudioGit/novate-studio-skills --skill klaviyo-campaignAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.6 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it
Brand scoping
Outputs live under ~/notes/Klaviyo/<brand>/<subfolder>/, where <brand> is resolved at run time from the connected Klaviyo account's organizationName attribute (via mcp__claude_ai_Klaviyo__klaviyo_get_account_details). For ExampleBrand, this resolves to ExampleBrand. If multiple brands are connected, ask Will which brand the current run is for.
/klaviyo-campaign
One command, brief in → scheduled Klaviyo campaign out. Will approves before the send is confirmed. The MCP creates the campaign + template; Will hits "Send Now" or schedules in Klaviyo if that final step is gated.
Flow
- Parse the brief — pull from the user's prompt: theme, product(s), audience/segment, send date/time, tone hints, length preference, channel (email default;
+smsto add SMS). If anything's missing, ask before drafting. - Load brand context — read
~/notes/[brand-slug]/brand-identity/for voice, products, visual guidelines. If unclear which brand, ask. Per memory: don't infer voice from visuals — read the persona doc. - Avoid theme repeat — call
mcp__claude_ai_Klaviyo__klaviyo_get_campaignsfor the last 14 days. Check subject lines + themes. If the proposed theme is too close to a recent send, surface the conflict before continuing. - Draft copy — three subject line variants (curiosity / benefit / urgency or per Will's hint), one preheader, body in brand voice, single primary CTA. Apply the copy rules in
## Copy frameworkbelow. - Pick or build the template — if the brand has a reusable template, reference it; otherwise generate inline HTML using the brand's visual system. Upload product images via
mcp__claude_ai_Klaviyo__klaviyo_upload_image_from_url. Create the template viamcp__claude_ai_Klaviyo__klaviyo_create_email_template. - Resolve the segment — if the brief names a segment, look it up via
mcp__claude_ai_Klaviyo__klaviyo_get_segments. If it doesn't exist yet, hand off to/klaviyo-segmentto build it first. - Approval gate — show Will the full preview (see format below). Wait for
ship,tweak X, orcancel. Never auto-create the campaign without approval. - Create campaign in Klaviyo —
mcp__claude_ai_Klaviyo__klaviyo_create_campaignwith the segment, thenmcp__claude_ai_Klaviyo__klaviyo_assign_template_to_campaign_messageto attach the template. - Save the brief — write everything to
~/notes/Klaviyo/<brand>/campaigns/YYYY-MM-DD-[slug]/brief.mdpluscopy.md,design.html,config.json. - Print confirmation — link to the saved folder + the Klaviyo campaign URL.
Copy framework
- Subject line: under 50 chars, no emojis unless brand voice calls for them, no all-caps, no clickbait. Three variants:
- Curiosity — open loop (e.g. "I think we got this wrong")
- Benefit — direct value (e.g. "30% off, two days only")
- Personal — feels like a 1:1 message (e.g. "quick question")
- Preheader: extends the subject line, never repeats it. Sub-90 chars.
- Body: lead with the hook in the first line — assume the preview pane is all they read. Single primary CTA. Voice rules from the brand persona doc override defaults.
- CTA button: action verb + benefit (e.g. "Shop the drop", "Read the breakdown") — never "Click here", never "Learn more" without a noun.
Approval gate format
Ready to create campaign:
Brand: <brand>
Audience: <segment> (<n profiles>)
Send time: <YYYY-MM-DD HH:MM tz> | "immediate" | "draft only"
Subject (A): <variant>
Subject (B): <variant>
Subject (C): <variant>
Preheader: <text>
Body preview:
<first 200 chars of body>...
Template: <name | new template will be created>
Folder: ~/notes/Klaviyo/<brand>/campaigns/<slug>/
Wait for ship, tweak <field>, or cancel. On tweak <field>, regenerate that field only.
Output folder structure
~/notes/Klaviyo/<brand>/campaigns/YYYY-MM-DD-[slug]/
brief.md # the original brief + context
copy.md # final subject lines, preheader, body
design.html # the email template HTML
config.json # segment id, send time, template id, campaign id (post-creation)
What this skill does NOT do
- Does not auto-send. Klaviyo's "Send Now" / scheduled send is Will's manual click — campaign is created in draft/scheduled state only.
- Does not build new segments — handoff to
/klaviyo-segment. - Does not build flows — handoff to
/klaviyo-flow. - Does not run A/B tests on the live campaign — handoff to
/klaviyo-ab(subject-line variants in this skill are for Will's pick, not a live A/B).
Failure modes
- Klaviyo MCP not connected / wrong account → tell Will, stop. Don't fabricate campaign IDs.
- Segment named in brief doesn't exist → ask Will whether to invoke
/klaviyo-segmentto create it, or pick from existing. - Template upload fails (image URL bad) → re-prompt for image source.
- Theme conflicts with a campaign sent in last 14 days → surface the conflict, ask Will whether to proceed, pivot, or merge.
- Brand voice doc missing → ask Will for the brand slug + offer to read what exists rather than infer from visuals alone.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.