agentsclimarketplace

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

Install
npx -y skills add NovateStudioGit/novate-studio-skills --skill klaviyo-campaign

Assembled 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

  1. Parse the brief — pull from the user's prompt: theme, product(s), audience/segment, send date/time, tone hints, length preference, channel (email default; +sms to add SMS). If anything's missing, ask before drafting.
  2. 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.
  3. Avoid theme repeat — call mcp__claude_ai_Klaviyo__klaviyo_get_campaigns for the last 14 days. Check subject lines + themes. If the proposed theme is too close to a recent send, surface the conflict before continuing.
  4. 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 framework below.
  5. 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 via mcp__claude_ai_Klaviyo__klaviyo_create_email_template.
  6. 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-segment to build it first.
  7. Approval gate — show Will the full preview (see format below). Wait for ship, tweak X, or cancel. Never auto-create the campaign without approval.
  8. Create campaign in Klaviyomcp__claude_ai_Klaviyo__klaviyo_create_campaign with the segment, then mcp__claude_ai_Klaviyo__klaviyo_assign_template_to_campaign_message to attach the template.
  9. Save the brief — write everything to ~/notes/Klaviyo/<brand>/campaigns/YYYY-MM-DD-[slug]/brief.md plus copy.md, design.html, config.json.
  10. 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:
    1. Curiosity — open loop (e.g. "I think we got this wrong")
    2. Benefit — direct value (e.g. "30% off, two days only")
    3. 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-segment to 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.

Keep looking

Skills are one crate of 326,790. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.