ab-copy-writer · git:20260504.0d54b6b · 2026-05-04 · sha256 0077bab288da06bd

ab-copy-writer git:20260504.0d54b6bA

Immutable. This exact content never changes and is served at /api/v1/blob/0077bab288da06bd.

---
name: ab-copy-writer
description: Generate A/B copy variants for any piece of marketing copy with a hypothesis per variant. Use when the user says "A/B test this", "write variants", "give me options", "test different angles", "copy variants", "ab copy", "test this headline", "multiple versions", or wants to test copy before publishing. Produces 3-5 variants per copy element with angle, hypothesis, and expected audience response. Reads brand voice and ICP from knowledge/.
reads:
  - knowledge/brand/voice.md
  - knowledge/icp/personas.md
  - knowledge/markets/positioning.md
  - knowledge/learnings.md
writes:
  - output/ab-copy/
---

# ab-copy-writer

Produces testable copy variants. Every variant has a distinct angle, a hypothesis for why it will outperform, and a predicted audience response. Stops marketers from shipping one version and guessing.

## When to use

- "Write 3 variants of this LinkedIn post"
- "Give me A/B options for this email subject line"
- "Test different angles for our landing page hero"
- "I need to A/B test this ad headline"
- "Write copy variants for our webinar title"
- "Give me 5 versions of this CTA"

## Inputs needed

1. **The copy element**: what needs variants (headline, subject line, hero, CTA, LinkedIn hook, ad copy, webinar title, email opener)
2. **The source**: existing copy to riff on, or a brief description of what it should accomplish
3. **Number of variants**: default is 3, max is 5
4. **Channel**: where this copy will run (LinkedIn, email, landing page, ad, webinar registration page)
5. **What's being tested**: angle, tone, format, CTA, or length (ask if not clear)

## Angles this skill tests

For each variant, pick a distinct angle from this list. Never use the same angle twice in one set:

| Angle | Description | When it wins |
|---|---|---|
| **Outcome-led** | Leads with the specific result | When audience is ROI-focused and numbers-driven |
| **Pain-led** | Opens on the problem, not the solution | When audience is in active pain and aware of it |
| **Speed-led** | Emphasizes time-to-value | When audience is impatient or under pressure |
| **Contrarian** | Challenges a common belief | When audience is saturated with standard messaging |
| **Social proof** | Leads with a customer result or name | When audience trusts peers more than vendors |
| **Curiosity gap** | Creates a knowledge gap that demands closing | When audience is information-hungry |
| **Specificity** | Extremely specific number or detail as the hook | When vague claims are common and specifics stand out |
| **Fear of missing out** | What happens if you don't act | When cost of inaction is high and under-communicated |
| **How-to** | Practical, instructional framing | When audience wants actionable takeaways |
| **Founder/operator voice** | Written as a practitioner to a practitioner | When audience distrusts brand voice |

## Process

1. **Load context.** Read `knowledge/brand/voice.md` (for tone and style rules) and `knowledge/icp/personas.md` (for what this audience responds to). If either is missing, ask the user for the relevant context directly.

2. **Check `knowledge/learnings.md`** for any past A/B test results or copy performance data. If a previous test showed "outcome-led beats pain-led for our ICP", factor that in and note it.

3. **Understand the goal.** Ask if not provided: "What action should this copy drive? And what's the one thing the audience should feel or believe after reading it?"

4. **Generate variants.** For each:

   ```
   ## Variant [A/B/C/D/E]: [Angle name]

   **Copy:**
   [the actual copy - complete and ready to use]

   **Angle**: [name from the angles table]
   **Hypothesis**: [1-2 sentences on why this angle should outperform the others for this specific audience]
   **Predicted response**: [how the ICP is likely to feel reading this]
   **Best for**: [which segment of the ICP or which stage of the funnel this variant suits most]
   **Watch for**: [what signal would tell you this variant is winning - clicks, replies, saves, conversions]
   ```

5. **Recommend the test setup**:

   ```
   ## Recommended test setup

   **Test**: [Variant A] vs [Variant B] (start with the two most different angles)
   **Why these two**: [1 sentence on why this pairing gives the clearest signal]
   **Sample size needed**: [rough guidance - "at least 500 impressions per variant before reading results"]
   **How long to run**: [1-2 weeks for LinkedIn organic, 7 days minimum for paid, 3+ sends for email]
   **Primary metric**: [clicks / replies / saves / open rate / conversion - pick one]
   **How to read results**: [what delta counts as a win: ">10% difference in CTR is signal, <5% is noise"]
   ```

6. **Self-check each variant**:
   - Distinct angle from every other variant - no two variants are the same approach with different words
   - Matches `knowledge/brand/voice.md` style rules (no em dashes, no banned phrases, correct POV)
   - Uses language from `knowledge/icp/personas.md` where relevant
   - Hypothesis is specific to the ICP, not generic ("this will outperform because our ICP is measured on activation rate, not awareness, so outcome-led copy speaks directly to their KPI")

7. **Save** to `output/ab-copy/<DD-MM-YYYY>-<copy-element-slug>.md` with frontmatter:
   ```yaml
   ---
   format: ab-copy
   element: [headline|subject-line|hero|cta|hook|ad]
   channel: [linkedin|email|landing-page|ad|webinar]
   variants: [number]
   angles: [list of angles used]
   created: DD-MM-YYYY
   ---
   ```

8. **Offer follow-ups**:
   - "Run `/retro` after the test and log which variant won and why. This gets appended to `knowledge/learnings.md` so future copy benefits from the result."
   - "Run `/content-writer` or `/linkedin-post` to build out the winning variant into a full piece."
   - "Want me to write the full ad set or email sequence using Variant [X] as the control?"

## Copy length by channel

| Channel | Element | Length |
|---|---|---|
| LinkedIn | Hook (first 2 lines) | 15-25 words |
| LinkedIn | Full post | 80-220 words |
| Email | Subject line | 6-10 words |
| Email | Preview text | 8-12 words |
| Email | Opener (first sentence) | 10-20 words |
| Landing page | H1 | 5-10 words |
| Landing page | Sub-headline | 15-25 words |
| Google ad | Headline | 30 chars max |
| Google ad | Description | 90 chars max |
| LinkedIn ad | Intro text | 150 chars max |
| Webinar | Title | 8-12 words |
| CTA button | Text | 2-5 words |

## Rules

- Never produce variants that are only cosmetically different (swapping one word is not a different angle).
- Never use an angle that `knowledge/learnings.md` has already shown underperforms for this ICP without flagging: "Past data shows [angle] underperformed. Including it here for completeness, but Variant X is the higher-confidence bet."
- Every hypothesis must reference the ICP specifically. "This will perform well" is not a hypothesis. "Our ICP (Head of Growth, measured on activation rate) will respond to specificity because they are data-fluent and distrust vague ROI claims" is.
- Always recommend starting the test with the two most different variants, not adjacent ones. Adjacent variants give weak signal.
- If the user provides existing copy, always include one variant that is a direct evolution of their version (keep their angle, sharpen the execution) alongside genuinely different angles. They may want a baseline.