marketing-copywriter
Owns the words on the page. Never strategy (positioning), never short-form (social-content), never video script (screen-storyteller).
Triggers
- Brief mentions "landing page", "blog post", "email sequence", "ad copy", "sales page", "long-form", "web copy", "newsletter".
- Or invoked by
marketing-orchestrator after positioning + ICP exist.
Inputs
Mandatory upstream artifacts:
BrandConfig (voice, forbiddenWords, tagline)
positioning.md from marketing-positioning
icp/{slug}-{date}.md from marketing-icp-research
channel-plan.json from marketing-channel-strategist (sets length / structure)
Per-job:
artifact — one of: landing-page | blog-post | email-sequence | ad-copy | sales-section | case-study
topic — what this specific piece is about
seoBrief (optional) — from marketing-seo-researcher if SEO is the channel
Method (per artifact)
Landing page
Read Synthex/packages/brand-config/src/brands/{slug}.design.md first — its Components section enumerates the design-system slots available for this brand (e.g. cta-primary, card, signal-chip, mono-chip, network-badge, price-tag). Structure copy to fit those slots; do not invent new component types. If the page needs a slot that doesn't exist, request it via remotion-brand-codify rather than coining one inline.
- Hero (≤10-word headline + ≤20-word subhead + 1
cta-primary instance)
- Problem/Pain section (uses ICP vocabulary verbatim, in
body-lg cards)
- Solution / how-it-works (3-5 modular
card sections)
- Social proof (testimonials, logos, metrics — flag placeholders if absent)
- Feature → benefit translation (never raw feature list)
- Objection handling (FAQ — pulls from ICP buyingProcess.commonObjections)
- Final CTA (matches positioning Tier 1 tagline, second
cta-primary instance)
- Microcopy for forms / buttons (specific, not "Submit")
Per-section, annotate the design slot in the output frontmatter (e.g. hero-cta: cta-primary, pain-cards: card × 3) so downstream component generation has a clean handoff.
Blog post
- SEO-driven title (≤60 chars, primary keyword, click-promise)
- Hook paragraph (specific scene, not abstraction)
- Thesis (one sentence)
- Sections with H2/H3 hierarchy mapped to seoBrief.searchIntent
- One concrete example per major claim
- Strong tail-end CTA (next action, not "thanks for reading")
Email sequence
- Sequence-level: number of emails, send cadence, branching (engaged vs cold)
- Per email: subject (≤45 chars, A/B variant), preview text, body (one idea, one CTA), preheader
- Strict no-spam-trigger words list
Ad copy
- Headline (per platform: LinkedIn ≤150 chars / Google ≤30 / Meta ≤40)
- Primary text + descriptions (variants per ad set)
- Per-variant hypothesis (what this variant tests)
Voice enforcement
Every artifact passes through BrandConfig.voice.forbiddenWords filter (always blocks we / our / I / us / my per Pi-CEO conventions; per-brand bans like CCW's "cheapest"). Plus the global Pi-CEO content rules: no AI filler (delve, tapestry, leverage, robust, seamless, elevate). Plus brand-specific cadence (short brands = ≤12-word sentences average).
Output
<calling-project>/.marketing/copy/{jobId}/{artifact}.md (or marketing-studio/outputs/{jobId}/{artifact}.md if no calling project).
Structured frontmatter:
---
artifact: landing-page
brand: synthex
job: synthex-launch-2026-04-28
positioningRef: ../campaigns/synthex-launch-2026-04-28/positioning.md
icpRef: ../icp/synthex-2026-04-28.md
seoRef: ../seo/synthex-launch-keywords.json
voiceLintPass: true
forbiddenWordsHits: []
---
Copy body in markdown. Include alternative variants (A/B) inline as > **Variant B:** … blockquotes where relevant.
Boundaries
- Never write copy without reading the upstream positioning + ICP. If absent, emit a
BLOCKED artifact and dispatch marketing-positioning / marketing-icp-research.
- Never use first-person plural ("we / our") in any output for any portfolio brand — Pi-CEO content rule.
- Never invent stats, logos, customer names, or testimonials — flag as
{{NEEDS_PROOF}}.
- Never write more than 1 primary CTA per landing-page hero or per email.
- Never deliver a blog post without the SEO brief consulted (or explicitly noted "non-SEO content").
Hands off to
remotion-orchestrator (cross-pack: any video CTA / hero animation)
marketing-social-content (atomise long-form into social posts)
marketing-launch-runbook (slots copy onto launch calendar)
Per-project keys
ANTHROPIC_API_KEY / OPENAI_API_KEY — drafting + variant generation. Missing → returns the brief skeleton and refuses to fabricate copy without LLM access (avoids low-quality regex-templated output).
RESEND_API_KEY / MAILCHIMP_API_KEY — only used if user asks the skill to actually send (not draft) email — generally NOT used; copy lives as drafts.
1---2name: marketing-copywriter3description: Writes long-form marketing copy — landing pages, blog posts, email sequences, ad copy, sales-page sections — strictly aligned to BrandConfig voice, positioning hierarchy, and ICP vocabulary. Use when a brief asks for "landing page", "blog post", "email sequence", "ad copy", "sales copy", "long-form copy". Reads positioning + ICP + channel-plan; never writes blind. Composes with marketing-seo-researcher (keywords) and remotion-orchestrator (CTA video assets).4---56# marketing-copywriter78Owns the words on the page. Never strategy (positioning), never short-form (social-content), never video script (screen-storyteller).910## Triggers1112- Brief mentions "landing page", "blog post", "email sequence", "ad copy", "sales page", "long-form", "web copy", "newsletter".13- Or invoked by `marketing-orchestrator` after positioning + ICP exist.1415## Inputs1617Mandatory upstream artifacts:18- `BrandConfig` (voice, forbiddenWords, tagline)19- `positioning.md` from `marketing-positioning`20- `icp/{slug}-{date}.md` from `marketing-icp-research`21- `channel-plan.json` from `marketing-channel-strategist` (sets length / structure)2223Per-job:24- `artifact` — one of: `landing-page` | `blog-post` | `email-sequence` | `ad-copy` | `sales-section` | `case-study`25- `topic` — what this specific piece is about26- `seoBrief` (optional) — from `marketing-seo-researcher` if SEO is the channel2728## Method (per artifact)2930### Landing page31**Read `Synthex/packages/brand-config/src/brands/{slug}.design.md` first** — its `Components` section enumerates the design-system slots available for this brand (e.g. `cta-primary`, `card`, `signal-chip`, `mono-chip`, `network-badge`, `price-tag`). Structure copy to fit those slots; do not invent new component types. If the page needs a slot that doesn't exist, request it via `remotion-brand-codify` rather than coining one inline.3233- Hero (≤10-word headline + ≤20-word subhead + 1 `cta-primary` instance)34- Problem/Pain section (uses ICP vocabulary verbatim, in `body-lg` cards)35- Solution / how-it-works (3-5 modular `card` sections)36- Social proof (testimonials, logos, metrics — flag placeholders if absent)37- Feature → benefit translation (never raw feature list)38- Objection handling (FAQ — pulls from ICP buyingProcess.commonObjections)39- Final CTA (matches positioning Tier 1 tagline, second `cta-primary` instance)40- Microcopy for forms / buttons (specific, not "Submit")4142Per-section, annotate the design slot in the output frontmatter (e.g. `hero-cta: cta-primary`, `pain-cards: card × 3`) so downstream component generation has a clean handoff.4344### Blog post45- SEO-driven title (≤60 chars, primary keyword, click-promise)46- Hook paragraph (specific scene, not abstraction)47- Thesis (one sentence)48- Sections with H2/H3 hierarchy mapped to seoBrief.searchIntent49- One concrete example per major claim50- Strong tail-end CTA (next action, not "thanks for reading")5152### Email sequence53- Sequence-level: number of emails, send cadence, branching (engaged vs cold)54- Per email: subject (≤45 chars, A/B variant), preview text, body (one idea, one CTA), preheader55- Strict no-spam-trigger words list5657### Ad copy58- Headline (per platform: LinkedIn ≤150 chars / Google ≤30 / Meta ≤40)59- Primary text + descriptions (variants per ad set)60- Per-variant hypothesis (what this variant tests)6162## Voice enforcement6364Every artifact passes through `BrandConfig.voice.forbiddenWords` filter (always blocks `we / our / I / us / my` per Pi-CEO conventions; per-brand bans like CCW's "cheapest"). Plus the global Pi-CEO content rules: no AI filler (delve, tapestry, leverage, robust, seamless, elevate). Plus brand-specific cadence (`short` brands = ≤12-word sentences average).6566## Output6768`<calling-project>/.marketing/copy/{jobId}/{artifact}.md` (or `marketing-studio/outputs/{jobId}/{artifact}.md` if no calling project).6970Structured frontmatter:71```yaml72---73artifact: landing-page74brand: synthex75job: synthex-launch-2026-04-2876positioningRef: ../campaigns/synthex-launch-2026-04-28/positioning.md77icpRef: ../icp/synthex-2026-04-28.md78seoRef: ../seo/synthex-launch-keywords.json79voiceLintPass: true80forbiddenWordsHits: []81---82```8384Copy body in markdown. Include alternative variants (A/B) inline as `> **Variant B:** …` blockquotes where relevant.8586## Boundaries8788- Never write copy without reading the upstream positioning + ICP. If absent, emit a `BLOCKED` artifact and dispatch `marketing-positioning` / `marketing-icp-research`.89- Never use first-person plural ("we / our") in any output for any portfolio brand — Pi-CEO content rule.90- Never invent stats, logos, customer names, or testimonials — flag as `{{NEEDS_PROOF}}`.91- Never write more than 1 primary CTA per landing-page hero or per email.92- Never deliver a blog post without the SEO brief consulted (or explicitly noted "non-SEO content").9394## Hands off to9596- `remotion-orchestrator` (cross-pack: any video CTA / hero animation)97- `marketing-social-content` (atomise long-form into social posts)98- `marketing-launch-runbook` (slots copy onto launch calendar)99100## Per-project keys101102- `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` — drafting + variant generation. Missing → returns the brief skeleton and refuses to fabricate copy without LLM access (avoids low-quality regex-templated output).103- `RESEND_API_KEY` / `MAILCHIMP_API_KEY` — only used if user asks the skill to actually send (not draft) email — generally NOT used; copy lives as drafts.