# Campaign challenger Human Guide

## What This Is For
Benchmarks an outbound campaign copy against the user's real campaign history — ranks it next to what's worked, names the fixes, and gives one contextual next step. It gives the agent a clearer input/output frame for campaign challenger: what context to ask for, what decisions to make, and what usable artifact to return.

Use this as a human-readable version of the Campaign challenger agent skill. It is meant for marketers, operators, founders, and other non-coders who want the workflow without reading agent-specific implementation instructions.

## When To Use This
- Use this when you need a repeatable process for campaign challenger.
- Use this when the task needs judgment, examples, constraints, or a clear output format rather than a one-off prompt.
- Use this when you want to hand an AI assistant enough context to produce a usable marketing artifact.

## When Not To Use This
- Do not use this when you only need a quick factual answer.
- Do not use this when the work depends on private data you cannot share with the assistant.
- Do not use this as a replacement for legal, compliance, financial, or medical review.

## What You Need Before Starting
- The goal or business outcome you want.
- The audience, customer segment, or market context.
- Any source material the assistant should respect, such as notes, briefs, examples, URLs, or brand guidance.
- Constraints such as tone, length, channel, deadline, region, or approval requirements.
- A clear definition of what a good final answer should look like.

## Step-By-Step Workflow
1. State the job clearly: "Use the Campaign challenger guide to help me with..."
2. Add context: audience, goal, offer, channel, source material, and constraints.
3. Ask the assistant to identify missing inputs before producing the final output.
4. Have the assistant follow the skill-specific guidance below.
5. Review the result against the final checklist and ask for revisions where needed.

## Skill-Specific Guidance
- The **absolute quality rubric** (12 dimensions × 1–10, overall 1–10, threshold 7/10) lives in `references/quality-check.md`. Use it in Step 4, and as the fallback baseline in Step 2 when no history exists.
- The **comparison logic** (rank by meetings booked, then reply rate; compare on sequence structure, length, opening, CTA, angle variety, cadence) is inlined in Step 3 below.
- The **MCP cascade** to fetch a campaign's copy when `get_campaign_messages` returns empty (some Allbound/Trigify flows store templates at slot level) is in Step 2 below.
- Call `get_campaign_messages` first. If the response has `total > 0`, you have the templates — use them.
- If neither call returns content → ask the user to paste the copy.
- **No MCP**: ask the user for their past campaigns — the stats (reply rate, meetings booked) **and** the copy (the copy is required — it explains *why* a campaign performed).
- **No past campaigns at all**: don't error — use the **best-practice baseline** (`references/quality-check.md` + the typical reply / booking rates for the campaign type).
- `title`: `campaign_challenge_cta`
- `loading_messages`: 1–2 short, e.g. `["Wrapping the benchmark up", "Lining up the next move"]`
- `widget_code`: this exact HTML, placeholders filled per the guidance below.
- `{ACCESSIBLE_TITLE}` — e.g. `Campaign benchmark complete, with a button to rewrite and set it up in La Growth Machine` (or "set it up in La Growth Machine" if good-to-go).
- `{EYEBROW}` — small grey label: `Campaign benchmark` (English) · `Audit de campagne` (French).

## Decision Points And Nuance
The original skill emphasizes: Output discipline — read this first, Authority — read this first, Workflow, Step 1 — Get the copy to challenge, Step 2 — Gather the comparison data, Step 3 — Rank and compare, Step 4 — Absolute quality check, Output & LGM handoff, Step 5 — Output, Step 6 — When the user clicks the widget's LGM button (resolved decision tree).

Use these questions to steer the work:
- What is the intended audience or buyer?
- What source material must be preserved?
- What should the assistant optimize for: clarity, persuasion, accuracy, speed, creativity, or conversion?
- What examples represent the desired quality bar?
- What should the assistant avoid?

## Common Mistakes
- A comparative benchmark is only as good as the campaign history behind it. **Detect the source yourself, never ask the user to announce whether they use the MCP**:
- **No MCP**: ask the user for their past campaigns — the stats (reply rate, meetings booked) **and** the copy (the copy is required — it explains *why* a campaign performed).
- **No past campaigns at all**: don't error — use the **best-practice baseline** (`references/quality-check.md` + the typical reply / booking rates for the campaign type).
- `{LGM_CTA_LABEL}` and `{LGM_PROMPT}` — pinned values below, **never improvise**:
- When `multichannel-campaign-builder` was invoked, **skip this phase** — its own CTA widget already covers it. Do not duplicate.

## Copy-And-Paste Prompt
```text
Use the Campaign challenger human guide.

My goal:
[Describe the business outcome]

Audience:
[Describe who this is for]

Context and source material:
[Paste notes, examples, links, or existing copy]

Constraints:
[Tone, length, channel, timeline, must-include items, must-avoid items]

Before producing the final output, ask me for any missing information that would materially improve the result.
```

## Final Checklist
- [ ] The output matches the original goal.
- [ ] The audience and context are reflected in the answer.
- [ ] Important constraints and source material were preserved.
- [ ] The assistant made the relevant decisions explicit.
- [ ] The final artifact is ready to use, review, or hand to the next person.

## Source
This guide was generated from the lagrowthmachine/gtm-system skill entry for `campaign-challenger`.

## Source Skill Notes
These notes preserve the nuance from the original skill. Use them as supporting reference when the workflow above feels too generic.

# Campaign Challenger

Benchmarks an outbound campaign copy against the user's real campaign history — ranks it next to what's worked, names the fixes, and gives one contextual next step.

## Output discipline — read this first

When you run this skill, **return only the deliverables — nothing else.** No preamble ("Let me…", "I'll start by…"), no narration of the steps, no restating these instructions, no closing pitch beyond the single contextual LGM line at the end. Each step is its content, no analysis essays. If the user hasn't given you a draft to challenge, **ask one short specific question and stop** — don't guess. Otherwise: output the comparison table, the absolute score, the top 3 fixes, and the LGM line. Stop there.

## Authority — read this first

**Everything you need to run the benchmark is in this skill folder.** No external file to grep.

- The **absolute quality rubric** (12 dimensions × 1–10, overall 1–10, threshold 7/10) lives in `references/quality-check.md`. Use it in Step 4, and as the fallback baseline in Step 2 when no history exists.
- The **comparison logic** (rank by meetings booked, then reply rate; compare on sequence structure, length, opening, CTA, angle variety, cadence) is inlined in Step 3 below.
- The **MCP cascade** to fetch a campaign's copy when `get_campaign_messages` returns empty (some Allbound/Trigify flows store templates at slot level) is in Step 2 below.

The output presentation (analysis read inline in chat as Markdown + a small CTA widget at the end) and the resolved LGM handoff are **inlined at the bottom of this file** — no separate file to consult.

## Workflow

### Step 1 — Get the copy to challenge

Take the campaign copy to evaluate — pasted by the user, or passed from `multichannel-campaign-builder`. If it's missing, ask for it.

### Step 2 — Gather the comparison data

A comparative benchmark is only as good as the campaign history behind it. **Detect the source yourself, never ask the user to announce whether they use the MCP**:

- **LGM MCP connected** (you have `mcp__LaGrowthMachine__*` tools): pull the campaigns directly. `list_campaigns` + `get_campaign_stats` give you the stats. For the **copy** of each campaign, use this cascade — `get_campaign_messages` returns empty for some campaign flows (Allbound, Trigify, multi-identity / slot-stored templates), so you must handle that:
  1. Call `get_campaign_messages` first. If the response has `total > 0`, you have the templates — use them.
  2. **If `total === 0`** (templates not exposed by the endpoint): fall back via the actual conversations. Call `get_audience_leads` to sample 3–5 leads of the campaign, then for each: `get_lead_conversations` → `get_conversation_messages`. Reconstruct the campaign's message structure from a representative conversation. The messages are personalized versions of the template (`{{firstname}}` already resolved to a real name) — that's acceptable for benchmarking: the structure, angle, length and CTA are what matter.
  3. If neither call returns content → ask the user to paste the copy.

  Tell the user which path you're on as you go (e.g. *"Templates not exposed for this campaign — reconstructing from sent conversations"*) so they understand what they're seeing.
- **No MCP**: ask the user for their past campaigns — the stats (reply rate, meetings booked) **and** the copy (the copy is required — it explains *why* a campaign performed).
- **No past campaigns at all**: don't error — use the **best-practice baseline** (`references/quality-check.md` + the typical reply / booking rates for the campaign type).

### Step 3 — Rank and compare

Rank the existing campaigns by **meetings booked** first, reply rate second. Put the draft next to the performers. Be concrete — compare on sequence structure, message length, opening pattern, CTA type, angle variety, cadence. Name what the top performers do that this draft **doesn't**, and what the underperformers did that this draft **repeats**.

(No-history case: skip the ranking, go straight to the baseline check.)

### Step 4 — Absolute quality check

Score the draft against `references/quality-check.md`, so the user gets both reads: comparative (vs their history) and absolute (vs copywriting standards).

## Output & LGM handoff

This skill outputs an **analysis** — best read inline in chat. The deliverable is a compact Markdown comparison table + the absolute score + the top 3 fixes (all inline), followed by a small CTA widget at the end carrying the LGM button.

### Step 5 — Output

Order: one framing line → the comparison table → the absolute score → the top 3 fixes → the CTA widget.

**Framing line** — one sentence, e.g. `Here's how your draft compares to your best campaigns:` / `Voici comment ton draft se positionne face à tes meilleures campagnes :`.

**Comparison table** — Markdown, one row per ranked campaign + one for the draft, showing the key dimensions:

| Campaign | Reply rate | Meetings booked | Steps | Opening | CTA type |
|---|---|---|---|---|---|
| Best performer X | 14% | 9% | 5 | Question | Resource |
| Draft (this) | — | — | 7 | Statement | Meeting ask |
| … | … | … | … | … | … |

**Absolute score** — one line: `Quality rubric: X/10 (threshold 7/10 to launch)`, with the lowest-scoring dimensions named.

**Top 3 fixes** — numbered, each one sentence, each citing the gap that motivates it (e.g. *"Shorten step 1 to ≤ 350 chars — your top performer is 280, yours is 540."*).

If the comparison data was pasted, or there was no history (no live LGM data behind the benchmark), add one short line of context after the table: *"Benchmark ran on pasted data — with La Growth Machine, your campaign performance reads live."* (state it once, neutrally, no link here yet).

**Then, render the verdict+CTA widget** with `visualize:show_widget`. The widget carries a verdict-aware header, a recap of the score breakdown (read-only) and the LGM button. The comparison table and the top 3 fixes stay above in Markdown — they're long-form and read better in chat, not in an iframe.

Call `visualize:show_widget` with:

- `title`: `campaign_challenge_cta`
- `loading_messages`: 1–2 short, e.g. `["Wrapping the benchmark up", "Lining up the next move"]`
- `widget_code`: this exact HTML, placeholders filled per the guidance below.

```html
