Insurgent Campaign
A campaign-design skill for organizations and people who cannot win by outspending. It ideates
campaign concepts across every major archetype, audits the user's spend asymmetry against
their competition, assembles an insurgent channel stack, sets strict boost gates on any
paid spend, and produces a lift-test plan so the user measures incremental impact rather
than vanity metrics.
Core Premise
Paid media scales attention. Organic narrative and grassroots networks scale trust.
When trust is the bottleneck — and in 2025–2026, for most underdogs, it is — additional
ad spend hits diminishing and then negative returns. Saturation, inauthenticity, and narrative
incoherence produce reactance, not persuasion. The leverage point is not reach; it is credibility
and message-market fit.
Empirical spine:
- Academic field experiments show digital ad ROI confidence intervals are so wide that most
campaigns cannot be statistically distinguished from zero lift (Lewis & Rao, "The
Unfavorable Economics of Measuring the Returns to Advertising," Quarterly Journal of
Economics 2015). Meta and Google both ship Conversion Lift / Brand Lift tools precisely
because they distinguish attributed conversions from incremental conversions — the
platforms' own tooling is the tacit admission that dashboard ROAS is not causal.
- Across 18,000+ brands, CPA rose in 13/14 industries in 2025; ROAS fell in 13/14; conversion
rates fell in 13/14. More money is buying fewer results.
- Facebook organic engagement sits near 0.15%, Instagram ~0.50%, X ~0.15%, TikTok ~2.50% — still
the best organic window but compressing fast.
- Meta and Google both ended political/issue ads in the EU in October 2025, removing paid channels
entirely for large categories and forcing organic to carry the campaign.
- Under the most extreme spending asymmetry imaginable (a grassroots party vs. a €4B state-backed
communications apparatus with foreign support), the side with near-zero paid media won a
parliamentary supermajority in Hungary in April 2026 — see
references/hungarian-case-study.md.
The same curve bends commercial advertising. The skill treats paid as an amplifier of proven
organic winners, never as a standalone channel.
When to Apply This Skill
Apply when the user:
- Asks to plan any campaign (marketing, launch, fundraising, mobilization, awareness, turnout).
- Describes being outspent by a competitor, incumbent, or adversary.
- Is considering ad spend, boosts, influencer deals, or scaling a paid channel.
- Is watching their organic reach collapse and wondering what to do.
- Is preparing for a launch, election, fundraise, product push, or cause-led moment.
- Is deciding between paid and organic allocation, or between channels.
Also apply when no explicit "campaign" is named but the user is debating where to invest
time and money for distribution.
Workflow
The skill runs in seven stages (1, 2, 3, 3a, 4, 5, 5b). Do not skip stages; later
stages depend on the user's answers and selections from earlier ones. Stage 3a
(MMF Gate) can refuse the full campaign plan and route the user to validation work
instead. Stage 5 ends with a shape selection — Stage 5b only begins once the user
has picked one of the three shapes.
This skill is designed to be portable across agent environments. Where the workflow
says "ask the user," use whatever structured-question facility your environment
provides (in Claude Code that is the AskUserQuestion tool, batching up to 4
questions per call); if no structured tool exists, ask in plain text and wait for
the user to reply before continuing. Either way, never invent answers.
Resume Protocol (idempotency). Before producing any output, scan the
conversation for prior skill output. If a section's heading (## N. <name>)
is already present in the conversation, do not regenerate it. Pick up at the
first stage whose Contract preconditions are satisfied AND whose output
section(s) are not yet in the conversation. If the user explicitly asks to
restart, restart from Stage 1; otherwise resume rather than rerun. This makes
the skill safely re-invokable: a second call in the same conversation produces
only the next incremental section, never duplicates or regressions to earlier
stages. Scope: idempotency holds within a single conversation; if prior output exists only in an external file or a previous session, paste it into the conversation first or restart from Stage 1.
Stage Contracts. Each stage below opens with a Contract block declaring
inputs, outputs, preconditions, postconditions, and failure modes. The contract
is the structural boundary — it is what makes the stage retry-safe, error-
explicit, and self-describing. Treat the contract as binding: if the
preconditions are not met, do not enter the stage; if a failure-mode trigger
fires, take the declared action rather than improvising.
Stage 1 — Interview / Brief Capture
Contract
- Inputs: user's initial brief (free text, any length).
- Outputs: Section 0 (Assumptions table) under Mode C; mode-tag (A/B/C) and the 8 fields captured in working memory for downstream stages.
- Preconditions: none (entry stage).
- Postconditions: all 8 fields have a value (captured, defaulted, or flagged as
[ask] for a still-pending question); mode is determined.
- Failure modes:
- any always-capture field missing under Mode C → add it to the question batch; do not default silently.
- a missing field would change Stage 3 asymmetry classification OR Stage 4 function choice → escalate it into the batch even if it would normally default.
- user gives contradictory values for the same field → ask one clarifying question; do not pick one silently.
The skill has three intake modes. Pick the mode that matches the user's brief
before asking any questions.
Mode A — Full-brief mode. The user has volunteered all 8 fields below up front
(in a pasted brief, a prior plan, a detailed message). Skip the interview entirely,
confirm understanding in one sentence, and proceed to Stage 2.
Mode B — Interview mode. The user explicitly asks to be scoped ("help me figure
out what this campaign should be," "walk me through it," "interview me"). Ask the 8
questions below in batches of ≤4 per turn, using the environment's structured
question facility if one exists (see the structured-tool note in the Workflow
section above). Do not invent answers. Do not merge questions.
Mode C — Default mode (for terse briefs). The user gave a short brief
(≤2 sentences) without asking for an interview. This is the common case. Do NOT run
the full 8-question interview — it turns a 12-word prompt into an interrogation.
Instead:
Always-capture fields (ask once, batched). Four fields are too material to
default silently; getting them wrong produces a generic plan. Ask the user in
one batch of up to 4 questions covering:
- Outcome — what specific action is the campaign driving (signups, ticket
sales, votes, donations, attendance, pre-orders, qualified demos)?
- Audience — who is the target? Who experiences the problem? Geography,
seniority, community membership. "Everyone interested in AI" is not an
audience; "London-based senior AI/ML engineers at Series A–C startups" is.
- Sector — pick from the 6 riders in
references/sector-riders.md
(cohort-education, b2b-saas, ngo, consumer-brand, political-civic,
personal-brand), or other with a one-sentence description. The sector
rider materially changes Stage 4 channel weighting and Stage 5 archetype
defaults.
- Budget — what can you actually spend per month (€0 / <€1k / €1k–10k /
€10k+) and what is the competitor's rough spend (unknown / similar / 5×
ours / 50×+ ours)? Budget materially changes Stage 3 asymmetry
classification and Stage 4 paid-channel availability. Never default this
silently.
If one of these four fields is already clearly present in the user's brief,
drop it from the question batch. Only ask what is missing.
Default-with-flag fields. The remaining fields default silently but are
surfaced in an Assumptions table at the top of the final deliverable (Stage
5 output). The user can confirm or adjust inline after reading the plan:
| Field |
Default under terse brief |
| Competition (specifics) |
Abstract — "cohort-based courses in the category," "mid-size SaaS competitors," etc. Use the heuristic questions in references/asymmetry-audit-table.md to classify asymmetry qualitatively. Never invent specific competitor names. |
| Existing channels / traction |
"Starting from zero" unless the user's brief, working directory, or CLAUDE.md clearly indicates an existing newsletter, community, or follower base. |
| Bottleneck |
Trust (the 2025–2026 default for almost every underdog campaign). |
| Time window |
60 days to a single dated anchor moment (event, launch, election), then recurring cadence. |
| Capacity |
6h/week. |
Escalation rule. If a missing field would materially change the Stage 3
asymmetry classification or the Stage 4 primary-function choice, do not
default it — add it to the question batch. Example: if the user mentions
"our whole team is posting already" but does not specify which channels,
ask, because it changes the channel stack.
Assumptions table is mandatory under Mode C. Open the final deliverable
with a table listing every defaulted field and its assumed value. End the
deliverable with: "Confirm or adjust any row in the Assumptions table and I
will re-run the affected stages."
The 8 Fields
Regardless of mode, the campaign plan is grounded in these 8 fields:
- Sector and outcome — which of the 6 sector riders applies, and the specific
action the campaign drives. (Sector is ask-once in Mode C; outcome is
ask-once in Mode C.)
- Audience — who is the target, with enough specificity to picture them.
(Ask-once in Mode C.)
- Competition / incumbent — name 3–5 specific competitors, or say "unknown"
/ "I'll describe them abstractly." If unknown, stay at category level and use
references/asymmetry-audit-table.md heuristics. Never invent names.
(Defaults in Mode C; user can sharpen in the Assumptions confirmation.)
- Budget — user's and competitor's, in numbers or rough ratios.
(Ask-once in Mode C.)
- Existing channels and traction — where does the user already reach the
audience (newsletter size, community size, follower counts that matter, warm
email list, prior press). (Defaults in Mode C.)
- Bottleneck — reach / trust / conversion / turnout / retention — pick one.
(Defaults to trust in Mode C.)
- Time window — evergreen / 30 / 60 / 90 days / tied to a dated event or
launch. (Defaults to 60 days in Mode C.)
- Capacity — realistic hours per week. Hard-constrains Stage 5's first-30-days
action list; lowest-ROI actions get cut until total weekly effort fits.
(Defaults to 6h/week in Mode C.)
Stage 2 — Ideation (generate 5+ campaign concepts across archetypes)
Contract
- Inputs: 8 fields from Stage 1 (especially sector, audience, competition descriptor).
- Outputs: Section 1 (Campaign Ideas) with ≥5 concepts across distinct archetypes; an explicit ask to the user to pick one or more.
- Preconditions: Stage 1 complete; sector field has a value (named or
other).
- Postconditions: ≥5 distinct-archetype concepts presented; user has been prompted to select.
- Failure modes:
- competitor unnamed in brief → use
[incumbent] placeholder or category descriptor in every concept; never invent a name.
- cannot produce 5 genuinely distinct archetypes for this audience/sector → say so plainly, present what you have, do not pad with cosmetic variants of one archetype.
- user's brief names one dominant player but expects industry peers → do not auto-name the obvious #2/#3; use the escape-hatch phrasings from the Industry-peer rule.
Before any audit or channel work, generate at least five distinct campaign concepts,
drawn from different archetypes in references/campaign-archetypes.md. Do not converge
early. The point is to give the user a shaped menu to choose from.
For each concept, produce:
- Name — short, memorable, in the user's voice.
- One-line thesis — why this campaign works for this user against this competitor
right now.
- Archetype — which archetype it draws from (e.g., founder-story arc, counter-narrative,
earned-media stunt, referral flywheel, community-build, coalition play).
- Primary channel tier — which tier from
references/channel-tier-stack.md this
concept leans on (Tier 1/2/3/4).
- Authenticity hook — the specific real-world detail, person, story, or action that makes
it credible and hard to fake.
- Minimum viable version — the smallest possible execution that proves the concept works
in two weeks or less.
Anti-fabrication rule for concept names, theses, and hooks. If the user named a
specific competitor in the brief, use the name. If the user said "well-known incumbent,"
"market leader," "the dominant player," or otherwise did not name one, do not fill in
the blank with your best guess. Stay at the level of abstraction the brief gave you.
Use the category descriptor (e.g., "the $400-per-seat monitor"), the behavior
("the enterprise billing tax"), or a bracketed placeholder ([incumbent]) that the user
will fill in. Concept names like "We Quit Sentry" or "DataDog Alternative" — invented
from the category description rather than the brief — violate the Stage 1 anti-fabrication
rule and must not appear in Stage 2 output. This applies equally to SEO keyword lists,
earned-media pitch hooks, and any downstream section that inherits the concept name.
Industry-peer rule. The anti-fabrication rule covers any competitor name absent
from the brief — not only invented names, but widely-known industry peers to a
brief-named incumbent. If the brief names one dominant player (e.g., the user says
"we're outspent 100x by [market leader]"), do not add the obvious #2 or #3 from
the same category on your own ("LexisNexis and Westlaw," "Salesforce and HubSpot,"
"Datadog and New Relic") as if their presence were implied context. Use escape-hatch
phrasing instead: "the other major [category] platforms," "[incumbent]-class tools,"
or "the dominant [category] incumbents." This applies in every section — Stage 2
concepts, Stage 4 SEO, Stage 5 competitor saturation, Stage 5b earned-media
targets and ad-copy hooks, and any other downstream output. The discipline does
not relax in any later stage. "Everyone in the industry knows it exists" is not a
licence to name it.
After presenting the five concepts, ask the user to pick one (or more) to push through
Stage 3–5.
Stage 3 — Asymmetry Audit
Contract
- Inputs: budget (user's + competitor's), or heuristic answers from
references/asymmetry-audit-table.md; the concept(s) the user selected from Stage 2.
- Outputs: Section 3 (Spend Asymmetry Verdict) — one-sentence classification + preconditions score (0–6).
- Preconditions: Stage 2 complete; user has named one or more concepts to push forward.
- Postconditions: asymmetry classified as mild / severe / categorical; preconditions count is in {0..6}; downstream stages know which playbook scale to run.
- Failure modes:
- 0–2 preconditions → name the missing ones, refuse the full playbook, route the user to building the missing preconditions as the campaign itself.
- asymmetry numbers absent → ask the heuristic questions in the reference file; do not assume a level.
- user gives competitor spend in a non-comparable form (e.g., revenue, headcount) → ask one clarifying question to convert to spend ratio; do not estimate silently.
Classify the user's spend asymmetry using the table in references/asymmetry-audit-table.md.
- If the user gave numbers: compute the ratio (competitor spend ÷ user spend) and map it
to mild (1:2–1:5), severe (1:5–1:50), or categorical (1:50+).
- If the user did not give numbers: ask the heuristic questions from the reference file
(state-backing? can they afford billboards? do they dominate your category's search ads?)
and classify qualitatively.
Report back one sentence: Your asymmetry is <level>. This means <what it means for your strategy>. Do not hedge. Do not offer a "balanced" recommendation if the user is at
categorical — it would be misleading.
Then run a Preconditions Check. The insurgent playbook wins when preconditions are
present; asymmetry alone is not enough. Score the user's situation against the six factors
that made the Hungarian case work (see references/hungarian-case-study.md for the full
mechanism). Ask or infer:
- Credible insider / founder-story / defector equivalent. Is there a real person whose
authenticity the competitor cannot manufacture?
- Accumulated grievance or unmet demand. Is there anger the incumbent has ignored long
enough that it only needs a vehicle?
- Consolidated challenger field. Is the user the one clear alternative, or one of many?
Fragmented fields dilute organic narrative.
- Felt pain, not abstract pain. Does every target experience the cost directly
(price, time, trust, service failure), or is the grievance distributed?
- Threshold-rewarding market / platform / system. Does the distribution system reward
consolidation once a share crosses some threshold (network effects, category leadership,
algorithm-bound attention, electoral math)?
- Incumbent overplaying a fear / saturation hand. Is the competitor running past the
curve — more ads, more fear, more polished content — in a way the user can
counter-position against?
Score 0–6. Tell the user the count plainly and what it implies:
- 5–6 preconditions: run the insurgent playbook at full scale. Proceed to Stage 4.
- 3–4 preconditions: proceed, but flag the missing ones as campaign sub-goals — the
user will need to build them during the campaign (e.g., find a credible voice, surface
the grievance) for organic to compound.
- 0–2 preconditions: refuse to execute the playbook at full scale. Building the
preconditions is the campaign. Recruit the credible voice, consolidate the coalition,
surface and name the grievance, find the felt-pain story. Until those are present, the
insurgent playbook will underperform and burn the volunteer/community energy it
depends on. Say this out loud. Do not soften it.
Stage 3a — Message-Market-Fit Gate
Contract
- Inputs: three yes/no signals (revenue/commitment, audience-language, close) from the user.
- Outputs: Section 3a (3 signals + 0–3 score + explicit verdict).
- Preconditions: Stage 3 complete.
- Postconditions: verdict ∈ {3/3 proceed, 2/3 validation-cycle, 0–1/3 refuse}; downstream stages know whether to proceed, insert a validation cycle, or stop.
- Failure modes:
- score 0–1/3 → produce only Section 3a + refusal text; do NOT generate Sections 4–11. Route the user to a discovery cycle.
- score 2/3 → produce Section 3a + the validation-cycle pre-task description; allow Stage 4 only after the validation cycle is named.
- user does not know the answer to a signal → treat that signal as a "no" (absence of evidence is evidence of absence for MMF); do not skip the question.
Before assembling a channel stack, verify the campaign is solving a distribution
problem, not an MMF problem. Distribution amplifies signal; it cannot manufacture
it. A founder's great LinkedIn post cannot sell a product nobody wants, and a
movement's best volunteer network cannot turn out voters for a message that does not
name their pain.
Ask the user three yes/no questions. Do not skip any. If the user does not know the
answer to one, treat that as a "no" — absence of evidence is evidence of absence for
MMF.
- Revenue/commitment signal: Have ≥10 people in the target audience paid,
signed up, pre-registered, or directly asked (without your prompting) for what
you are offering? For events: ≥10 past attendees or paid waitlist. For products:
≥10 customers or pre-orders. For movements: ≥10 signed volunteers/members.
- Language signal: Can you name a specific pain the audience articulates in
their own words before you pitch them? Not a pain you infer — a sentence
someone in the audience has actually said, written, or posted about.
- Close signal: If you asked 5 people in the target audience to commit today
(at the intended price / format / ask level), would at least 3 say yes?
Scoring:
- 3/3 — MMF confirmed. The campaign is a distribution problem. Proceed to
Stage 4.
- 2/3 — Borderline. Name the weak link and insert a 1–2 week validation
cycle into the plan as a pre-campaign task before running the full Stage
4–5 playbook. Examples: if question 2 fails, do 5 customer discovery
conversations and extract the language; if question 1 fails, run a paid
waitlist or pre-order test. Revisit the MMF gate after the validation cycle.
- 0–1/3 — Refuse the full campaign plan. MMF is the bottleneck, not
distribution. Route the user to a discovery cycle: 5 structured customer
conversations, a pre-order or paid-waitlist test, a small-room live demo.
Explain plainly: "The insurgent playbook scales trust. It cannot
manufacture demand for a product, event, or cause people do not already
want. Running a full campaign now will burn the volunteer/community energy
that Stage 5 depends on. Come back when at least 2/3 of these signals are
present." Do not soften this. Do not produce the full Stage 4–5 deliverable.
Report the MMF verdict at the top of the Stage 3 section of the final output so
the user sees it before the channel stack.
Stage 4 — Channel Tier Stack + 70/30 Allocation
Contract
- Inputs: bottleneck (Stage 1 Q6), sector (Stage 1 Q1), asymmetry verdict (Stage 3), MMF verdict (Stage 3a).
- Outputs: Section 4 (Channel Tier Stack) + Section 5 (70/30 or 80/20 Allocation).
- Preconditions: Stage 3a verdict is
3/3 proceed OR 2/3 with validation cycle attached. If verdict is 0–1/3 refuse, this stage MUST NOT execute.
- Postconditions: primary function chosen (demand-capture / paid-amplification / trust-compounding); sector rider applied; channels listed with weekly effort estimates; allocation split stated in plain numbers.
- Failure modes:
- asymmetry is categorical AND user requests broad cold-paid Tier 4 → refuse, route to Tier 1/2 + counter-positioning, explain the diminishing-returns curve from
references/authenticity-playbook.md.
- sector =
other → flag rider mismatch in Assumptions table, proceed with the closest rider, name which rider assumptions do not apply.
- function choice conflicts with sector rider (e.g., B2B SaaS rider biases founder-LinkedIn, function choice is demand-capture) → surface the conflict, present both paths, do not collapse silently.
Function before cost. Before picking channels, pick the campaign's primary function
against the user's bottleneck (from Stage 1 Q6). Use the function table at the top of
references/channel-tier-stack.md:
- Demand capture — bottleneck is "people already want this, they can't find us."
Primary function for small or unknown challengers with addressable existing intent.
Leads with non-brand Google Search, SEO, directory presence. Never brand-keyword
bidding without a lift test (see Stage 5).
- Paid amplification — bottleneck is "our organic content works but reaches too few
people." Primary function only after organic winners exist (24–48h traction gate).
Leads with retargeting, warm lookalikes, Spark Ads on proven TikTok content.
- Trust compounding — bottleneck is "people find us, sometimes click, but don't
convert, refer, or come back." Primary function for the majority of underdog
campaigns. Leads with Tier 1: founder content, community nodes, newsletters, volunteer
networks.
A mild-asymmetry user with a trust bottleneck should not be routed to paid amplification
just because they can afford it. Route by function first; allocate within that function
by cost/asymmetry second.
Apply the sector rider. After the function choice but before allocation, open
references/sector-riders.md and apply the rider matching the user's sector
(captured in Stage 1). The rider adjusts:
- Archetype defaults — which campaign archetypes fit this sector best (e.g.,
cohort-education biases toward community-build + referral flywheel; B2B SaaS
biases toward founder-LinkedIn + demand capture).
- Channel weighting — which Tier 1/2 channels compound fastest in this sector
(e.g., consumer brands lean on UGC flywheels; political campaigns lean on ground
game and counter-media; NGOs lean on volunteer networks + earned media on
named-beneficiary stories).
- Failure-mode warning — the sector-specific way the insurgent playbook
underperforms when misapplied, which becomes a standing warning in Stage 5's
anti-vanity dashboard.
Do not overwrite the function-first choice. The rider layers on top. If the
rider and the function choice conflict (e.g., B2B SaaS rider biases toward
founder-LinkedIn but the function choice is demand capture), surface the conflict
and name both paths rather than collapsing to one.
If the user picked "other" for sector, flag the mismatch in the Assumptions table
and proceed with the closest rider — naming which of the rider's structural
assumptions do not apply.
Then assemble the channel stack using references/channel-tier-stack.md. Allocation
rules layer on top of the function choice and the sector rider:
- Mild asymmetry → stack can include Tier 1, 2, 3, and selective Tier 4. Allocate ~70%
effort to organic (Tier 1 + 2), 30% to paid amplification (Tier 3, with rare Tier 4).
- Severe asymmetry → Tier 1, 2, and targeted Tier 3. Avoid broad Tier 4. 80/20 split
toward organic is often safer.
- Categorical asymmetry → Tier 1 and 2 only. Refuse to draft broad cold-paid Tier 4
creative — it will not work and it will burn runway. If the user insists, explain the
diminishing-returns curve and the counter-positioning move (see
references/authenticity-playbook.md)
before reconsidering.
Output the stack as a prioritized list with: (a) the primary function chosen, (b) the
channels mapped to that function, (c) an estimated weekly effort commitment per channel,
(d) the 70/30 (or 80/20) split in plain numbers.
Anti-fabrication carries through. The Stage 2 anti-fabrication rule applies to
every element of the Stage 4 output: SEO keyword examples, long-tail query lists,
directory/review-site references, competitor saturation descriptions, and any sample
copy shown inline with the stack. If the brief did not name the incumbent, the
incumbent's proper noun must not appear in this stage in any casing — not
title-case ("Sentry alternative"), not lowercase ("sentry alternative"), not
hyphenated, not as part of a compound keyword or URL. Search-query examples that
would otherwise require a brand name must either retain the [incumbent] bracketed
placeholder for the user to fill in, or be rewritten as non-brand equivalents
("error monitoring for small teams," "application monitoring under $100/seat",
"lightweight APM for node.js"). This applies equally to Stage 5's competitor
saturation map and to every Stage 5b output section (## 8–## 11): the
banned-token discipline does not relax downstream of Stage 2.
Stage 5 — Shape Menu + Competitor Saturation Map
Contract
- Inputs: selected concept (Stage 2), channel stack + allocation (Stage 4).
- Outputs: Section 6 (Competitor Saturation Map) + Section 7 (Three Alternative Campaign Shapes). No other sections.
- Preconditions: Stage 4 complete; allocation stated.
- Postconditions: 3 shapes presented with tradeoffs; user has been explicitly asked to pick one; turn ends.
- Failure modes:
- end of stage reached without a shape selection from the user → end the turn with the selection ask; do NOT produce Sections 8–11.
- user cannot tell a Self-story (Marshall Ganz framework) → drop the founder-led shape, present community-first / earned-media-first / search-capture-first instead.
- brief already pre-selects a shape (rare) → confirm in one sentence, proceed to Stage 5b.
Given the selected concept + channel stack, produce only the two items below.
Stage 5 ends with the user picking one of the three shapes; do not generate any
of the Stage 5b output (## 8–## 11) until the selection has been made.
Competitor saturation map. Before shapes, before ad copy, before anything: for
each of the top 2 named competitors (or top 2 competitor categories if the user did
not name specific ones — see Principles), produce:
(a) What they saturate — the channels, visual style, message tropes, production
value, and emotional register the competitor is flooding. Be specific: "paid-heavy
LinkedIn carousels with stock illustrations and growth-hack CTAs," not "social
media ads."
(b) The absence that becomes your signal. What is the competitor doing that your
refusal to do becomes the positioning? Worked examples:
- "Fidesz saturated billboards → Tisza's absence from billboards was the message."
- "Cohort bootcamps saturate paid LinkedIn funnels + affiliate links → our refusal
to advertise and our free open curriculum is the message."
- "SaaS competitors saturate agency-produced demo videos → our terminal-only
raw-footage weekly changelog is the message."
(c) One-sentence positioning line the user commits to holding across the
campaign. This is the single sentence every piece of content must reinforce.
Three alternative campaign shapes for executing the concept, with tradeoffs. Examples
of shapes: community-first (start with 100 real people, grow through word of mouth),
earned-media-first (one newsworthy action drives press + organic amplification),
search-capture-first (dominate long-tail high-intent queries where demand already
exists). Use the alternative-generator pattern — do not collapse to one recommendation
prematurely; let the user choose. Each shape must include at least one flagship piece
of content structured as Self / Us / Now (Marshall Ganz's organizing framework —
see references/authenticity-playbook.md): the leader's lived experience, the shared
community reality, and the specific time-bound ask. If the user cannot tell their Self
story, drop the founder-led shape and route to community-first, earned-media-first, or
search-capture-first instead.
Stop point. Output only sections ## 6 (Competitor Saturation Map) and ## 7
(Three Alternative Campaign Shapes), then end the turn with an explicit request:
"Pick one of the three shapes (or ask me to revise them) and I will produce the
First-30-Days plan, ad copy, lift-test, and anti-vanity dashboard." Do not
generate ## 8–## 11 until the user names a shape. If the user's initial brief
already pre-selected a shape (rare), confirm that selection in one sentence and
proceed to Stage 5b.
Stage 5b — Selected-Shape Plan
Contract
- Inputs: the one shape the user selected from Stage 5; capacity (Stage 1 Q8); paid-channel role from Stage 4 allocation.
- Outputs: Section 8 (First-30-Days Action List) + Section 9 (Ad Copy + Boost Rules, only if paid applies) + Section 10 (Lift-Test / Measurement Plan) + Section 11 (Anti-Vanity Metric Dashboard).
- Preconditions: Stage 5 complete AND a specific shape has been named by the user (by index or name).
- Postconditions: 30-day plan fits within stated capacity ceiling (cuts named if not); a single named lift-test template selected; track/ignore metrics enumerated.
- Failure modes:
- entered without a named shape from Stage 5 → ask for the selection; do NOT produce any Section 8–11 content.
- drafted weekly effort exceeds capacity ceiling → cut lowest-ROI actions until total fits; name the cuts explicitly.
- earned-media targets unknown / not in brief → flag week-1 research as the action with explicit research method; do not invent outlet names.
- paid does not apply in the channel stack → omit Section 9 entirely (do not produce empty/placeholder ad copy).
- asymmetry categorical AND paid in stack → produce a counter-positioning refusal note in Section 9, not cold-paid creative.
Begin only after the user has picked one of the three shapes from Stage 5. If no
selection has been received, ask for it and stop. The four items below are
produced against the one selected shape — not all three.
First-30-days action list — concrete weekly actions for weeks 1–4, mapped to the chosen
shape. Each action has an owner (if multiple people), an effort estimate, and a clear
success signal.
Capacity is a hard constraint. After drafting the week-by-week list, sum total
weekly effort. If it exceeds the user's stated capacity (Stage 1 Q8, default 6h/week),
cut the lowest-ROI actions until total effort fits inside the ceiling. Name the cuts
explicitly: "I am cutting X and Y because the draft came to 14h/week and you said
6h/week. These are the actions to re-add if you can carve out more time later."
Do not ship a plan the user cannot execute.
Earned-media actions must be specific or flagged. Every earned-media action in
the list must include:
- (a) A named target (e.g., "Latent Space podcast, The Pragmatic Engineer
newsletter"), or an explicit "target TBD — research is the week-1 action" flag.
Never pitch "5 podcasts in the niche" without naming them; that is not an action,
that is a wish.
- (b) A one-sentence pitch hook matched to the target's recent content — not a
generic bio blast.
- (c) Success criteria — reply, mention, guest spot, cross-post, podcast booking,
or newsletter feature.
- (d) Outreach day and channel — Tuesday morning via email, Thursday via LinkedIn
DM, etc.
If the skill does not know specific targets in the user's niche (because the user did
not name them and the skill cannot invent names — see Principles), assign target
research as the week-1 action and set success criteria for the research itself
(e.g., "produce a ranked list of 15 targets with RSS + contact channel by Friday").
Community-build is a multi-week sub-campaign, not a line item. If a Slack /
Discord / WhatsApp / Circle community node is in the channel stack, it gets its own
block in the first-30-days list, not one line at 1h/week:
- Week 0 (before public announcement): pick the platform, write the rules, seed
with 10 personal invites from the user's existing network. Dead rooms are worse
than no room.
- Weeks 1–2: founder posts daily for 14 consecutive days. Non-negotiable.
Without the founder's daily presence, the community never reaches escape velocity.
- Weeks 3–4: hand off three recurring rituals (weekly thread, AMA cadence, member
spotlight) to 2–3 engaged early members. If no members step up, the community will
die when the founder stops; surface this as a validation failure, not a staffing
problem.
- Month 2+: budget 3–4h/week sustained — moderation, weekly post, member welcomes,
pruning dead accounts. Underinvest and the community dies.
Ad copy + boost rules — only if paid has a role in the chosen stack:
- Creative direction in the user's authentic voice (see
references/authenticity-playbook.md).
- The explicit 24–48h organic traction gate: do not boost a post until it has
demonstrated genuine organic signal (saves, shares, sustained watch time, thread-depth
comments — not raw likes). Likes are cheap and lie.
- Audience definition: warm retargeting first, lookalikes second, cold audiences only for
proven winners with a lift-test plan attached.
- Frequency cap and creative refresh cadence to avoid fatigue (see ad fatigue section in
references/channel-tier-stack.md).
- Do not bid on your own brand-name keywords without a lift test. Blake, Nosko &
Tadelis's eBay field experiment (2015) found weak or no incremental lift from brand-
keyword bidding — the traffic arrives organically anyway. Platform-reported ROAS on
brand keywords is always excellent because the traffic would have converted
regardless. This is one of the most reliable ways established brands waste paid
budget. If the user is already bidding on their own brand, require a
brand-keyword holdout test (Template 5 in
references/lift-test-templates.md)
before continued spend.
- If asymmetry is categorical, refuse to produce broad cold-paid copy. Offer Tier 1/2
content instead and explain why.
Lift-test / measurement plan — mandatory, no exceptions. One concrete experiment
using the templates in references/lift-test-templates.md. Template selection:
- Budget exists: Template 1 (geo-holdout) or Template 2/3 (conversion-lift).
- Tiny budget (<€5k), formal templates underpowered: Template 4 (micro-lift).
- Brand-keyword bidding already in play: Template 5 (brand-keyword holdout).
- Zero budget: Template 6 (organic-source attribution) — directional, UTM-tagged,
30-day window, per-channel conversion-rate ranking, cut-the-bottom-20%-reinvest-
in-the-top decision rule.
Specify:
- The hypothesis (paid channel X drives incremental action Y on top of organic
baseline — or, for Template 6, "channel X outperforms channel Y on conversion rate
per unique visitor").
- Control vs. test group definition (or channel-comparison definition for Template 6).
- Holdout percentage, duration, and minimum sample size.
- The incremental metric (not attributed; not platform-reported ROAS). For Template 6,
per-channel conversion rate, with the explicit caveat that it is directional only.
- The decision threshold: what lift level justifies continued spend, what level means
stop. For Template 6: top channel → double effort; bottom <20% → drop.
Anti-vanity metric dashboard — the short list of metrics the user should track and
the longer list of metrics they should explicitly ignore. Examples:
- Track: saves, shares, sustained watch time, signed-up volunteers/subscribers,
incremental conversions from the lift test, word-of-mouth referrals.
- Ignore: impressions, CPM, follower count, raw likes, platform-reported attributed
ROAS, vanity engagement rate without segmentation.
Output Template
Produce the final deliverable in this exact order so the user can scan it and act:
# Insurgent Campaign Plan — <user / project name>
## 0. Assumptions (required under Mode C — default mode; omit under Mode A/B)
<table: field → assumed value, flagging every default applied from Stage 1 so the user can confirm or adjust inline at the end>
## 1. Campaign Ideas (5+ concepts across archetypes)
<concepts with thesis, archetype, primary tier, authenticity hook, MVP>
## 2. Selected Concept
<the one (or more) the user picked>
## 3. Spend Asymmetry Verdict
<mild / severe / categorical, one sentence explaining what it means>
## 3a. Message-Market-Fit Gate
<3-question score, verdict (confirmed / borderline / failed), and — if borderline or failed — the validation cycle the user must run before proceeding>
## 4. Channel Tier Stack
<prioritized channel list with weekly effort>
## 5. 70/30 (or 80/20) Allocation
<organic % / paid %, with rationale>
## 6. Competitor Saturation Map (Stage 5 output)
<per competitor: what they saturate, the absence that becom
…(truncated)
1---2name: insurgent-campaign3description: Grassroots-first campaign design for anyone being outspent — startups vs. incumbents, NGOs vs. corporate comms, movements vs. state-backed machines, solo brands vs. big-budget competitors. Ideates awareness, launch, fundraising, mobilization, community-build, counter-narrative, referral, founder-story, and coalition campaigns. Triggers on "campaign plan", "marketing strategy", "ad budget", "should I advertise", "paid vs organic", "launch plan", "grassroots", "low budget marketing", "NGO campaign", "outspent", "competitor has bigger budget", "how do I compete without money". Also trigger on any spend asymmetry, collapsing organic reach, rising CPAs, or a trust/credibility problem — even without the word "campaign". Nudge activation when the user debates buying ads, boosting posts, or hiring influencers; they are likely about to burn money on a channel that will not persuade.4---5
6# Insurgent Campaign
7
8A campaign-design skill for organizations and people who cannot win by outspending. It ideates
9campaign concepts across every major archetype, audits the user's spend asymmetry against
10their competition, assembles an insurgent channel stack, sets strict boost gates on any
11paid spend, and produces a lift-test plan so the user measures incremental impact rather
12than vanity metrics.
13
14## Core Premise
15
16**Paid media scales attention. Organic narrative and grassroots networks scale trust.**
17When trust is the bottleneck — and in 2025–2026, for most underdogs, it is — additional
18ad spend hits diminishing and then negative returns. Saturation, inauthenticity, and narrative
19incoherence produce reactance, not persuasion. The leverage point is not reach; it is credibility
20and message-market fit.
21
22Empirical spine:
23
24- Academic field experiments show digital ad ROI confidence intervals are so wide that most
25 campaigns cannot be statistically distinguished from zero lift (Lewis & Rao, "The
26 Unfavorable Economics of Measuring the Returns to Advertising," *Quarterly Journal of
27 Economics* 2015). Meta and Google both ship Conversion Lift / Brand Lift tools precisely
28 because *they* distinguish attributed conversions from incremental conversions — the
29 platforms' own tooling is the tacit admission that dashboard ROAS is not causal.
30- Across 18,000+ brands, CPA rose in 13/14 industries in 2025; ROAS fell in 13/14; conversion
31 rates fell in 13/14. More money is buying fewer results.
32- Facebook organic engagement sits near 0.15%, Instagram ~0.50%, X ~0.15%, TikTok ~2.50% — still
33 the best organic window but compressing fast.
34- Meta and Google both ended political/issue ads in the EU in October 2025, removing paid channels
35 entirely for large categories and forcing organic to carry the campaign.
36- Under the most extreme spending asymmetry imaginable (a grassroots party vs. a €4B state-backed
37 communications apparatus with foreign support), the side with near-zero paid media won a
38 parliamentary supermajority in Hungary in April 2026 — see `references/hungarian-case-study.md`.
39
40The same curve bends commercial advertising. The skill treats paid as an *amplifier of proven
41organic winners*, never as a standalone channel.
42
43## When to Apply This Skill
44
45Apply when the user:
46
47- Asks to plan any campaign (marketing, launch, fundraising, mobilization, awareness, turnout).
48- Describes being outspent by a competitor, incumbent, or adversary.
49- Is considering ad spend, boosts, influencer deals, or scaling a paid channel.
50- Is watching their organic reach collapse and wondering what to do.
51- Is preparing for a launch, election, fundraise, product push, or cause-led moment.
52- Is deciding between paid and organic allocation, or between channels.
53
54Also apply when no explicit "campaign" is named but the user is debating where to invest
55time and money for distribution.
56
57## Workflow
58
59The skill runs in seven stages (1, 2, 3, 3a, 4, 5, 5b). Do not skip stages; later
60stages depend on the user's answers and selections from earlier ones. Stage 3a
61(MMF Gate) can refuse the full campaign plan and route the user to validation work
62instead. Stage 5 ends with a shape selection — Stage 5b only begins once the user
63has picked one of the three shapes.
64
65This skill is designed to be portable across agent environments. Where the workflow
66says "ask the user," use whatever structured-question facility your environment
67provides (in Claude Code that is the `AskUserQuestion` tool, batching up to 4
68questions per call); if no structured tool exists, ask in plain text and wait for
69the user to reply before continuing. Either way, never invent answers.
70
71**Resume Protocol (idempotency).** Before producing any output, scan the
72conversation for prior skill output. If a section's heading (`## N. <name>`)
73is already present in the conversation, do not regenerate it. Pick up at the
74first stage whose Contract preconditions are satisfied AND whose output
75section(s) are not yet in the conversation. If the user explicitly asks to
76restart, restart from Stage 1; otherwise resume rather than rerun. This makes
77the skill safely re-invokable: a second call in the same conversation produces
78only the next incremental section, never duplicates or regressions to earlier
79stages. Scope: idempotency holds within a single conversation; if prior output exists only in an external file or a previous session, paste it into the conversation first or restart from Stage 1.
80
81**Stage Contracts.** Each stage below opens with a **Contract** block declaring
82inputs, outputs, preconditions, postconditions, and failure modes. The contract
83is the structural boundary — it is what makes the stage retry-safe, error-
84explicit, and self-describing. Treat the contract as binding: if the
85preconditions are not met, do not enter the stage; if a failure-mode trigger
86fires, take the declared action rather than improvising.
87
88### Stage 1 — Interview / Brief Capture
89
90**Contract**
91- Inputs: user's initial brief (free text, any length).
92- Outputs: Section 0 (Assumptions table) under Mode C; mode-tag (A/B/C) and the 8 fields captured in working memory for downstream stages.
93- Preconditions: none (entry stage).
94- Postconditions: all 8 fields have a value (captured, defaulted, or flagged as `[ask]` for a still-pending question); mode is determined.
95- Failure modes:
96 - any always-capture field missing under Mode C → add it to the question batch; do not default silently.
97 - a missing field would change Stage 3 asymmetry classification OR Stage 4 function choice → escalate it into the batch even if it would normally default.
98 - user gives contradictory values for the same field → ask one clarifying question; do not pick one silently.
99
100The skill has **three intake modes**. Pick the mode that matches the user's brief
101before asking any questions.
102
103**Mode A — Full-brief mode.** The user has volunteered all 8 fields below up front
104(in a pasted brief, a prior plan, a detailed message). Skip the interview entirely,
105confirm understanding in one sentence, and proceed to Stage 2.
106
107**Mode B — Interview mode.** The user explicitly asks to be scoped ("help me figure
108out what this campaign should be," "walk me through it," "interview me"). Ask the 8
109questions below in batches of ≤4 per turn, using the environment's structured
110question facility if one exists (see the structured-tool note in the Workflow
111section above). Do not invent answers. Do not merge questions.
112
113**Mode C — Default mode (for terse briefs).** The user gave a short brief
114(≤2 sentences) without asking for an interview. This is the common case. Do NOT run
115the full 8-question interview — it turns a 12-word prompt into an interrogation.
116Instead:
117
1181. **Always-capture fields (ask once, batched).** Four fields are too material to
119 default silently; getting them wrong produces a generic plan. Ask the user in
120 **one batch** of up to 4 questions covering:
121
122 - **Outcome** — what specific action is the campaign driving (signups, ticket
123 sales, votes, donations, attendance, pre-orders, qualified demos)?
124 - **Audience** — who is the target? Who experiences the problem? Geography,
125 seniority, community membership. "Everyone interested in AI" is not an
126 audience; "London-based senior AI/ML engineers at Series A–C startups" is.
127 - **Sector** — pick from the 6 riders in `references/sector-riders.md`
128 (`cohort-education`, `b2b-saas`, `ngo`, `consumer-brand`, `political-civic`,
129 `personal-brand`), or `other` with a one-sentence description. The sector
130 rider materially changes Stage 4 channel weighting and Stage 5 archetype
131 defaults.
132 - **Budget** — what can you actually spend per month (€0 / <€1k / €1k–10k /
133 €10k+) and what is the competitor's rough spend (unknown / similar / 5×
134 ours / 50×+ ours)? Budget materially changes Stage 3 asymmetry
135 classification and Stage 4 paid-channel availability. Never default this
136 silently.
137
138 If one of these four fields is already clearly present in the user's brief,
139 drop it from the question batch. Only ask what is missing.
140
1412. **Default-with-flag fields.** The remaining fields default silently but are
142 surfaced in an **Assumptions table** at the top of the final deliverable (Stage
143 5 output). The user can confirm or adjust inline after reading the plan:
144
145 | Field | Default under terse brief |
146 |---|---|
147 | Competition (specifics) | Abstract — "cohort-based courses in the category," "mid-size SaaS competitors," etc. Use the heuristic questions in `references/asymmetry-audit-table.md` to classify asymmetry qualitatively. Never invent specific competitor names. |
148 | Existing channels / traction | "Starting from zero" unless the user's brief, working directory, or CLAUDE.md clearly indicates an existing newsletter, community, or follower base. |
149 | Bottleneck | Trust (the 2025–2026 default for almost every underdog campaign). |
150 | Time window | 60 days to a single dated anchor moment (event, launch, election), then recurring cadence. |
151 | Capacity | 6h/week. |
152
1533. **Escalation rule.** If a missing field would materially change the Stage 3
154 asymmetry classification *or* the Stage 4 primary-function choice, do not
155 default it — add it to the question batch. Example: if the user mentions
156 "our whole team is posting already" but does not specify which channels,
157 ask, because it changes the channel stack.
158
1594. **Assumptions table is mandatory under Mode C.** Open the final deliverable
160 with a table listing every defaulted field and its assumed value. End the
161 deliverable with: *"Confirm or adjust any row in the Assumptions table and I
162 will re-run the affected stages."*
163
164#### The 8 Fields
165
166Regardless of mode, the campaign plan is grounded in these 8 fields:
167
1681. **Sector and outcome** — which of the 6 sector riders applies, and the specific
169 action the campaign drives. (Sector is ask-once in Mode C; outcome is
170 ask-once in Mode C.)
1712. **Audience** — who is the target, with enough specificity to picture them.
172 (Ask-once in Mode C.)
1733. **Competition / incumbent** — name 3–5 specific competitors, *or* say "unknown"
174 / "I'll describe them abstractly." If unknown, stay at category level and use
175 `references/asymmetry-audit-table.md` heuristics. Never invent names.
176 (Defaults in Mode C; user can sharpen in the Assumptions confirmation.)
1774. **Budget** — user's and competitor's, in numbers or rough ratios.
178 (Ask-once in Mode C.)
1795. **Existing channels and traction** — where does the user already reach the
180 audience (newsletter size, community size, follower counts that matter, warm
181 email list, prior press). (Defaults in Mode C.)
1826. **Bottleneck** — reach / trust / conversion / turnout / retention — pick one.
183 (Defaults to trust in Mode C.)
1847. **Time window** — evergreen / 30 / 60 / 90 days / tied to a dated event or
185 launch. (Defaults to 60 days in Mode C.)
1868. **Capacity** — realistic hours per week. Hard-constrains Stage 5's first-30-days
187 action list; lowest-ROI actions get cut until total weekly effort fits.
188 (Defaults to 6h/week in Mode C.)
189
190### Stage 2 — Ideation (generate 5+ campaign concepts across archetypes)
191
192**Contract**
193- Inputs: 8 fields from Stage 1 (especially sector, audience, competition descriptor).
194- Outputs: Section 1 (Campaign Ideas) with ≥5 concepts across distinct archetypes; an explicit ask to the user to pick one or more.
195- Preconditions: Stage 1 complete; sector field has a value (named or `other`).
196- Postconditions: ≥5 distinct-archetype concepts presented; user has been prompted to select.
197- Failure modes:
198 - competitor unnamed in brief → use `[incumbent]` placeholder or category descriptor in every concept; never invent a name.
199 - cannot produce 5 genuinely distinct archetypes for this audience/sector → say so plainly, present what you have, do not pad with cosmetic variants of one archetype.
200 - user's brief names one dominant player but expects industry peers → do not auto-name the obvious #2/#3; use the escape-hatch phrasings from the Industry-peer rule.
201
202Before any audit or channel work, generate **at least five distinct campaign concepts**,
203drawn from different archetypes in `references/campaign-archetypes.md`. Do not converge
204early. The point is to give the user a shaped menu to choose from.
205
206For each concept, produce:
207
208- **Name** — short, memorable, in the user's voice.
209- **One-line thesis** — why this campaign works for *this* user against *this* competitor
210 *right now*.
211- **Archetype** — which archetype it draws from (e.g., founder-story arc, counter-narrative,
212 earned-media stunt, referral flywheel, community-build, coalition play).
213- **Primary channel tier** — which tier from `references/channel-tier-stack.md` this
214 concept leans on (Tier 1/2/3/4).
215- **Authenticity hook** — the specific real-world detail, person, story, or action that makes
216 it credible and hard to fake.
217- **Minimum viable version** — the smallest possible execution that proves the concept works
218 in two weeks or less.
219
220**Anti-fabrication rule for concept names, theses, and hooks.** If the user named a
221specific competitor in the brief, use the name. If the user said "well-known incumbent,"
222"market leader," "the dominant player," or otherwise did not name one, **do not fill in
223the blank with your best guess.** Stay at the level of abstraction the brief gave you.
224Use the category descriptor (e.g., "the $400-per-seat monitor"), the behavior
225("the enterprise billing tax"), or a bracketed placeholder (`[incumbent]`) that the user
226will fill in. Concept names like "We Quit Sentry" or "DataDog Alternative" — invented
227from the category description rather than the brief — violate the Stage 1 anti-fabrication
228rule and must not appear in Stage 2 output. This applies equally to SEO keyword lists,
229earned-media pitch hooks, and any downstream section that inherits the concept name.
230
231**Industry-peer rule.** The anti-fabrication rule covers *any* competitor name absent
232from the brief — not only invented names, but widely-known industry peers to a
233brief-named incumbent. If the brief names one dominant player (e.g., the user says
234"we're outspent 100x by [market leader]"), do **not** add the obvious #2 or #3 from
235the same category on your own ("LexisNexis and Westlaw," "Salesforce and HubSpot,"
236"Datadog and New Relic") as if their presence were implied context. Use escape-hatch
237phrasing instead: "the other major [category] platforms," "[incumbent]-class tools,"
238or "the dominant [category] incumbents." This applies in every section — Stage 2
239concepts, Stage 4 SEO, Stage 5 competitor saturation, Stage 5b earned-media
240targets and ad-copy hooks, and any other downstream output. The discipline does
241not relax in any later stage. "Everyone in the industry knows it exists" is not a
242licence to name it.
243
244After presenting the five concepts, ask the user to pick one (or more) to push through
245Stage 3–5.
246
247### Stage 3 — Asymmetry Audit
248
249**Contract**
250- Inputs: budget (user's + competitor's), or heuristic answers from `references/asymmetry-audit-table.md`; the concept(s) the user selected from Stage 2.
251- Outputs: Section 3 (Spend Asymmetry Verdict) — one-sentence classification + preconditions score (0–6).
252- Preconditions: Stage 2 complete; user has named one or more concepts to push forward.
253- Postconditions: asymmetry classified as mild / severe / categorical; preconditions count is in {0..6}; downstream stages know which playbook scale to run.
254- Failure modes:
255 - 0–2 preconditions → name the missing ones, refuse the full playbook, route the user to building the missing preconditions as the campaign itself.
256 - asymmetry numbers absent → ask the heuristic questions in the reference file; do not assume a level.
257 - user gives competitor spend in a non-comparable form (e.g., revenue, headcount) → ask one clarifying question to convert to spend ratio; do not estimate silently.
258
259Classify the user's spend asymmetry using the table in `references/asymmetry-audit-table.md`.
260
261- If the user gave numbers: compute the ratio (competitor spend ÷ user spend) and map it
262 to mild (1:2–1:5), severe (1:5–1:50), or categorical (1:50+).
263- If the user did not give numbers: ask the heuristic questions from the reference file
264 (state-backing? can they afford billboards? do they dominate your category's search ads?)
265 and classify qualitatively.
266
267Report back one sentence: `Your asymmetry is <level>. This means <what it means for your
268strategy>.` Do not hedge. Do not offer a "balanced" recommendation if the user is at
269categorical — it would be misleading.
270
271Then run a **Preconditions Check**. The insurgent playbook wins when preconditions are
272present; asymmetry alone is not enough. Score the user's situation against the six factors
273that made the Hungarian case work (see `references/hungarian-case-study.md` for the full
274mechanism). Ask or infer:
275
2761. **Credible insider / founder-story / defector equivalent.** Is there a real person whose
277 authenticity the competitor cannot manufacture?
2782. **Accumulated grievance or unmet demand.** Is there anger the incumbent has ignored long
279 enough that it only needs a vehicle?
2803. **Consolidated challenger field.** Is the user the one clear alternative, or one of many?
281 Fragmented fields dilute organic narrative.
2824. **Felt pain, not abstract pain.** Does every target experience the cost directly
283 (price, time, trust, service failure), or is the grievance distributed?
2845. **Threshold-rewarding market / platform / system.** Does the distribution system reward
285 consolidation once a share crosses some threshold (network effects, category leadership,
286 algorithm-bound attention, electoral math)?
2876. **Incumbent overplaying a fear / saturation hand.** Is the competitor running past the
288 curve — more ads, more fear, more polished content — in a way the user can
289 counter-position against?
290
291Score 0–6. Tell the user the count plainly and what it implies:
292
293- **5–6 preconditions:** run the insurgent playbook at full scale. Proceed to Stage 4.
294- **3–4 preconditions:** proceed, but flag the missing ones as campaign sub-goals — the
295 user will need to build them during the campaign (e.g., find a credible voice, surface
296 the grievance) for organic to compound.
297- **0–2 preconditions:** refuse to execute the playbook at full scale. **Building the
298 preconditions is the campaign.** Recruit the credible voice, consolidate the coalition,
299 surface and name the grievance, find the felt-pain story. Until those are present, the
300 insurgent playbook will underperform and burn the volunteer/community energy it
301 depends on. Say this out loud. Do not soften it.
302
303### Stage 3a — Message-Market-Fit Gate
304
305**Contract**
306- Inputs: three yes/no signals (revenue/commitment, audience-language, close) from the user.
307- Outputs: Section 3a (3 signals + 0–3 score + explicit verdict).
308- Preconditions: Stage 3 complete.
309- Postconditions: verdict ∈ {3/3 proceed, 2/3 validation-cycle, 0–1/3 refuse}; downstream stages know whether to proceed, insert a validation cycle, or stop.
310- Failure modes:
311 - **score 0–1/3 → produce only Section 3a + refusal text; do NOT generate Sections 4–11. Route the user to a discovery cycle.**
312 - score 2/3 → produce Section 3a + the validation-cycle pre-task description; allow Stage 4 only after the validation cycle is named.
313 - user does not know the answer to a signal → treat that signal as a "no" (absence of evidence is evidence of absence for MMF); do not skip the question.
314
315Before assembling a channel stack, verify the campaign is solving a **distribution
316problem, not an MMF problem**. Distribution amplifies signal; it cannot manufacture
317it. A founder's great LinkedIn post cannot sell a product nobody wants, and a
318movement's best volunteer network cannot turn out voters for a message that does not
319name their pain.
320
321Ask the user three yes/no questions. Do not skip any. If the user does not know the
322answer to one, treat that as a "no" — absence of evidence is evidence of absence for
323MMF.
324
3251. **Revenue/commitment signal:** Have ≥10 people in the target audience paid,
326 signed up, pre-registered, or directly asked (without your prompting) for what
327 you are offering? For events: ≥10 past attendees or paid waitlist. For products:
328 ≥10 customers or pre-orders. For movements: ≥10 signed volunteers/members.
3292. **Language signal:** Can you name a **specific pain the audience articulates in
330 their own words** before you pitch them? Not a pain you infer — a sentence
331 someone in the audience has actually said, written, or posted about.
3323. **Close signal:** If you asked 5 people in the target audience to commit today
333 (at the intended price / format / ask level), would at least 3 say yes?
334
335Scoring:
336
337- **3/3 — MMF confirmed.** The campaign is a distribution problem. Proceed to
338 Stage 4.
339- **2/3 — Borderline.** Name the weak link and insert a **1–2 week validation
340 cycle** into the plan as a pre-campaign task *before* running the full Stage
341 4–5 playbook. Examples: if question 2 fails, do 5 customer discovery
342 conversations and extract the language; if question 1 fails, run a paid
343 waitlist or pre-order test. Revisit the MMF gate after the validation cycle.
344- **0–1/3 — Refuse the full campaign plan.** MMF is the bottleneck, not
345 distribution. Route the user to a discovery cycle: 5 structured customer
346 conversations, a pre-order or paid-waitlist test, a small-room live demo.
347 Explain plainly: *"The insurgent playbook scales trust. It cannot
348 manufacture demand for a product, event, or cause people do not already
349 want. Running a full campaign now will burn the volunteer/community energy
350 that Stage 5 depends on. Come back when at least 2/3 of these signals are
351 present."* Do not soften this. Do not produce the full Stage 4–5 deliverable.
352
353Report the MMF verdict at the top of the Stage 3 section of the final output so
354the user sees it before the channel stack.
355
356### Stage 4 — Channel Tier Stack + 70/30 Allocation
357
358**Contract**
359- Inputs: bottleneck (Stage 1 Q6), sector (Stage 1 Q1), asymmetry verdict (Stage 3), MMF verdict (Stage 3a).
360- Outputs: Section 4 (Channel Tier Stack) + Section 5 (70/30 or 80/20 Allocation).
361- Preconditions: Stage 3a verdict is `3/3 proceed` OR `2/3 with validation cycle attached`. **If verdict is `0–1/3 refuse`, this stage MUST NOT execute.**
362- Postconditions: primary function chosen (demand-capture / paid-amplification / trust-compounding); sector rider applied; channels listed with weekly effort estimates; allocation split stated in plain numbers.
363- Failure modes:
364 - asymmetry is categorical AND user requests broad cold-paid Tier 4 → refuse, route to Tier 1/2 + counter-positioning, explain the diminishing-returns curve from `references/authenticity-playbook.md`.
365 - sector = `other` → flag rider mismatch in Assumptions table, proceed with the closest rider, name which rider assumptions do not apply.
366 - function choice conflicts with sector rider (e.g., B2B SaaS rider biases founder-LinkedIn, function choice is demand-capture) → surface the conflict, present both paths, do not collapse silently.
367
368**Function before cost.** Before picking channels, pick the campaign's primary function
369against the user's bottleneck (from Stage 1 Q6). Use the function table at the top of
370`references/channel-tier-stack.md`:
371
372- **Demand capture** — bottleneck is "people already want this, they can't find us."
373 Primary function for small or unknown challengers with addressable existing intent.
374 Leads with non-brand Google Search, SEO, directory presence. Never brand-keyword
375 bidding without a lift test (see Stage 5).
376- **Paid amplification** — bottleneck is "our organic content works but reaches too few
377 people." Primary function only *after* organic winners exist (24–48h traction gate).
378 Leads with retargeting, warm lookalikes, Spark Ads on proven TikTok content.
379- **Trust compounding** — bottleneck is "people find us, sometimes click, but don't
380 convert, refer, or come back." Primary function for the majority of underdog
381 campaigns. Leads with Tier 1: founder content, community nodes, newsletters, volunteer
382 networks.
383
384A mild-asymmetry user with a trust bottleneck should not be routed to paid amplification
385just because they can afford it. Route by function first; allocate within that function
386by cost/asymmetry second.
387
388**Apply the sector rider.** After the function choice but *before* allocation, open
389`references/sector-riders.md` and apply the rider matching the user's sector
390(captured in Stage 1). The rider adjusts:
391
392- **Archetype defaults** — which campaign archetypes fit this sector best (e.g.,
393 cohort-education biases toward community-build + referral flywheel; B2B SaaS
394 biases toward founder-LinkedIn + demand capture).
395- **Channel weighting** — which Tier 1/2 channels compound fastest in this sector
396 (e.g., consumer brands lean on UGC flywheels; political campaigns lean on ground
397 game and counter-media; NGOs lean on volunteer networks + earned media on
398 named-beneficiary stories).
399- **Failure-mode warning** — the sector-specific way the insurgent playbook
400 underperforms when misapplied, which becomes a standing warning in Stage 5's
401 anti-vanity dashboard.
402
403Do not overwrite the function-first choice. The rider *layers on top*. If the
404rider and the function choice conflict (e.g., B2B SaaS rider biases toward
405founder-LinkedIn but the function choice is demand capture), surface the conflict
406and name both paths rather than collapsing to one.
407
408If the user picked "other" for sector, flag the mismatch in the Assumptions table
409and proceed with the closest rider — naming which of the rider's structural
410assumptions do not apply.
411
412Then assemble the channel stack using `references/channel-tier-stack.md`. Allocation
413rules layer on top of the function choice and the sector rider:
414
415- **Mild asymmetry** → stack can include Tier 1, 2, 3, and selective Tier 4. Allocate ~70%
416 effort to organic (Tier 1 + 2), 30% to paid amplification (Tier 3, with rare Tier 4).
417- **Severe asymmetry** → Tier 1, 2, and targeted Tier 3. Avoid broad Tier 4. 80/20 split
418 toward organic is often safer.
419- **Categorical asymmetry** → Tier 1 and 2 only. Refuse to draft broad cold-paid Tier 4
420 creative — it will not work and it will burn runway. If the user insists, explain the
421 diminishing-returns curve and the counter-positioning move (see `references/authenticity-playbook.md`)
422 before reconsidering.
423
424Output the stack as a prioritized list with: (a) the primary function chosen, (b) the
425channels mapped to that function, (c) an estimated weekly effort commitment per channel,
426(d) the 70/30 (or 80/20) split in plain numbers.
427
428**Anti-fabrication carries through.** The Stage 2 anti-fabrication rule applies to
429every element of the Stage 4 output: SEO keyword examples, long-tail query lists,
430directory/review-site references, competitor saturation descriptions, and any sample
431copy shown inline with the stack. If the brief did not name the incumbent, the
432incumbent's proper noun must not appear in this stage **in any casing** — not
433title-case ("Sentry alternative"), not lowercase ("sentry alternative"), not
434hyphenated, not as part of a compound keyword or URL. Search-query examples that
435would otherwise require a brand name must either retain the `[incumbent]` bracketed
436placeholder for the user to fill in, or be rewritten as non-brand equivalents
437("error monitoring for small teams," "application monitoring under $100/seat",
438"lightweight APM for node.js"). This applies equally to Stage 5's competitor
439saturation map and to every Stage 5b output section (`## 8`–`## 11`): the
440banned-token discipline does not relax downstream of Stage 2.
441
442### Stage 5 — Shape Menu + Competitor Saturation Map
443
444**Contract**
445- Inputs: selected concept (Stage 2), channel stack + allocation (Stage 4).
446- Outputs: Section 6 (Competitor Saturation Map) + Section 7 (Three Alternative Campaign Shapes). **No other sections.**
447- Preconditions: Stage 4 complete; allocation stated.
448- Postconditions: 3 shapes presented with tradeoffs; user has been explicitly asked to pick one; turn ends.
449- Failure modes:
450 - **end of stage reached without a shape selection from the user → end the turn with the selection ask; do NOT produce Sections 8–11.**
451 - user cannot tell a Self-story (Marshall Ganz framework) → drop the founder-led shape, present community-first / earned-media-first / search-capture-first instead.
452 - brief already pre-selects a shape (rare) → confirm in one sentence, proceed to Stage 5b.
453
454Given the selected concept + channel stack, produce **only the two items below**.
455Stage 5 ends with the user picking one of the three shapes; do not generate any
456of the Stage 5b output (`## 8`–`## 11`) until the selection has been made.
457
4581. **Competitor saturation map.** Before shapes, before ad copy, before anything: for
459 each of the top 2 named competitors (or top 2 competitor *categories* if the user did
460 not name specific ones — see Principles), produce:
461
462 (a) **What they saturate** — the channels, visual style, message tropes, production
463 value, and emotional register the competitor is flooding. Be specific: "paid-heavy
464 LinkedIn carousels with stock illustrations and growth-hack CTAs," not "social
465 media ads."
466
467 (b) **The absence that becomes your signal.** What is the competitor doing that your
468 *refusal* to do becomes the positioning? Worked examples:
469 - "Fidesz saturated billboards → Tisza's absence from billboards was the message."
470 - "Cohort bootcamps saturate paid LinkedIn funnels + affiliate links → our refusal
471 to advertise and our free open curriculum is the message."
472 - "SaaS competitors saturate agency-produced demo videos → our terminal-only
473 raw-footage weekly changelog is the message."
474
475 (c) **One-sentence positioning line** the user commits to holding across the
476 campaign. This is the single sentence every piece of content must reinforce.
477
4782. **Three alternative campaign shapes** for executing the concept, with tradeoffs. Examples
479 of shapes: *community-first* (start with 100 real people, grow through word of mouth),
480 *earned-media-first* (one newsworthy action drives press + organic amplification),
481 *search-capture-first* (dominate long-tail high-intent queries where demand already
482 exists). Use the `alternative-generator` pattern — do not collapse to one recommendation
483 prematurely; let the user choose. Each shape must include at least one flagship piece
484 of content structured as **Self / Us / Now** (Marshall Ganz's organizing framework —
485 see `references/authenticity-playbook.md`): the leader's lived experience, the shared
486 community reality, and the specific time-bound ask. If the user cannot tell their Self
487 story, drop the founder-led shape and route to community-first, earned-media-first, or
488 search-capture-first instead.
489
490**Stop point.** Output only sections `## 6` (Competitor Saturation Map) and `## 7`
491(Three Alternative Campaign Shapes), then end the turn with an explicit request:
492*"Pick one of the three shapes (or ask me to revise them) and I will produce the
493First-30-Days plan, ad copy, lift-test, and anti-vanity dashboard."* Do not
494generate `## 8`–`## 11` until the user names a shape. If the user's initial brief
495already pre-selected a shape (rare), confirm that selection in one sentence and
496proceed to Stage 5b.
497
498### Stage 5b — Selected-Shape Plan
499
500**Contract**
501- Inputs: the *one* shape the user selected from Stage 5; capacity (Stage 1 Q8); paid-channel role from Stage 4 allocation.
502- Outputs: Section 8 (First-30-Days Action List) + Section 9 (Ad Copy + Boost Rules, only if paid applies) + Section 10 (Lift-Test / Measurement Plan) + Section 11 (Anti-Vanity Metric Dashboard).
503- Preconditions: Stage 5 complete AND a specific shape has been named by the user (by index or name).
504- Postconditions: 30-day plan fits within stated capacity ceiling (cuts named if not); a single named lift-test template selected; track/ignore metrics enumerated.
505- Failure modes:
506 - **entered without a named shape from Stage 5 → ask for the selection; do NOT produce any Section 8–11 content.**
507 - drafted weekly effort exceeds capacity ceiling → cut lowest-ROI actions until total fits; name the cuts explicitly.
508 - earned-media targets unknown / not in brief → flag week-1 research as the action with explicit research method; do not invent outlet names.
509 - paid does not apply in the channel stack → omit Section 9 entirely (do not produce empty/placeholder ad copy).
510 - asymmetry categorical AND paid in stack → produce a counter-positioning refusal note in Section 9, not cold-paid creative.
511
512Begin only after the user has picked one of the three shapes from Stage 5. If no
513selection has been received, ask for it and stop. The four items below are
514produced against the *one* selected shape — not all three.
515
5161. **First-30-days action list** — concrete weekly actions for weeks 1–4, mapped to the chosen
517 shape. Each action has an owner (if multiple people), an effort estimate, and a clear
518 success signal.
519
520 **Capacity is a hard constraint.** After drafting the week-by-week list, sum total
521 weekly effort. If it exceeds the user's stated capacity (Stage 1 Q8, default 6h/week),
522 cut the lowest-ROI actions until total effort fits inside the ceiling. Name the cuts
523 explicitly: "I am cutting X and Y because the draft came to 14h/week and you said
524 6h/week. These are the actions to re-add if you can carve out more time later."
525 Do not ship a plan the user cannot execute.
526
527 **Earned-media actions must be specific or flagged.** Every earned-media action in
528 the list must include:
529 - (a) A **named target** (e.g., "Latent Space podcast, The Pragmatic Engineer
530 newsletter"), *or* an explicit "target TBD — research is the week-1 action" flag.
531 Never pitch "5 podcasts in the niche" without naming them; that is not an action,
532 that is a wish.
533 - (b) A **one-sentence pitch hook** matched to the target's recent content — not a
534 generic bio blast.
535 - (c) **Success criteria** — reply, mention, guest spot, cross-post, podcast booking,
536 or newsletter feature.
537 - (d) **Outreach day and channel** — Tuesday morning via email, Thursday via LinkedIn
538 DM, etc.
539
540 If the skill does not know specific targets in the user's niche (because the user did
541 not name them and the skill cannot invent names — see Principles), assign target
542 research as the week-1 action and set success criteria for the research itself
543 (e.g., "produce a ranked list of 15 targets with RSS + contact channel by Friday").
544
545 **Community-build is a multi-week sub-campaign, not a line item.** If a Slack /
546 Discord / WhatsApp / Circle community node is in the channel stack, it gets its own
547 block in the first-30-days list, not one line at 1h/week:
548 - **Week 0 (before public announcement):** pick the platform, write the rules, seed
549 with 10 personal invites from the user's existing network. Dead rooms are worse
550 than no room.
551 - **Weeks 1–2:** founder posts daily for 14 consecutive days. Non-negotiable.
552 Without the founder's daily presence, the community never reaches escape velocity.
553 - **Weeks 3–4:** hand off three recurring rituals (weekly thread, AMA cadence, member
554 spotlight) to 2–3 engaged early members. If no members step up, the community will
555 die when the founder stops; surface this as a validation failure, not a staffing
556 problem.
557 - **Month 2+:** budget 3–4h/week sustained — moderation, weekly post, member welcomes,
558 pruning dead accounts. Underinvest and the community dies.
559
5602. **Ad copy + boost rules** — *only* if paid has a role in the chosen stack:
561 - Creative direction in the user's authentic voice (see `references/authenticity-playbook.md`).
562 - The explicit **24–48h organic traction gate**: do not boost a post until it has
563 demonstrated genuine organic signal (saves, shares, sustained watch time, thread-depth
564 comments — not raw likes). Likes are cheap and lie.
565 - Audience definition: warm retargeting first, lookalikes second, cold audiences only for
566 proven winners with a lift-test plan attached.
567 - Frequency cap and creative refresh cadence to avoid fatigue (see ad fatigue section in
568 `references/channel-tier-stack.md`).
569 - **Do not bid on your own brand-name keywords without a lift test.** Blake, Nosko &
570 Tadelis's eBay field experiment (2015) found weak or no incremental lift from brand-
571 keyword bidding — the traffic arrives organically anyway. Platform-reported ROAS on
572 brand keywords is always excellent *because* the traffic would have converted
573 regardless. This is one of the most reliable ways established brands waste paid
574 budget. If the user is already bidding on their own brand, require a
575 brand-keyword holdout test (Template 5 in `references/lift-test-templates.md`)
576 before continued spend.
577 - If asymmetry is categorical, refuse to produce broad cold-paid copy. Offer Tier 1/2
578 content instead and explain why.
579
5803. **Lift-test / measurement plan** — mandatory, no exceptions. One concrete experiment
581 using the templates in `references/lift-test-templates.md`. Template selection:
582 - **Budget exists:** Template 1 (geo-holdout) or Template 2/3 (conversion-lift).
583 - **Tiny budget (<€5k), formal templates underpowered:** Template 4 (micro-lift).
584 - **Brand-keyword bidding already in play:** Template 5 (brand-keyword holdout).
585 - **Zero budget:** Template 6 (organic-source attribution) — directional, UTM-tagged,
586 30-day window, per-channel conversion-rate ranking, cut-the-bottom-20%-reinvest-
587 in-the-top decision rule.
588 Specify:
589 - The hypothesis (paid channel X drives incremental action Y on top of organic
590 baseline — or, for Template 6, *"channel X outperforms channel Y on conversion rate
591 per unique visitor"*).
592 - Control vs. test group definition (or channel-comparison definition for Template 6).
593 - Holdout percentage, duration, and minimum sample size.
594 - The incremental metric (not attributed; not platform-reported ROAS). For Template 6,
595 per-channel conversion rate, with the explicit caveat that it is directional only.
596 - The decision threshold: what lift level justifies continued spend, what level means
597 stop. For Template 6: top channel → double effort; bottom <20% → drop.
598
5994. **Anti-vanity metric dashboard** — the short list of metrics the user should track and
600 the longer list of metrics they should explicitly ignore. Examples:
601 - Track: saves, shares, sustained watch time, signed-up volunteers/subscribers,
602 incremental conversions from the lift test, word-of-mouth referrals.
603 - Ignore: impressions, CPM, follower count, raw likes, platform-reported attributed
604 ROAS, vanity engagement rate without segmentation.
605
606## Output Template
607
608Produce the final deliverable in this exact order so the user can scan it and act:
609
610```
611# Insurgent Campaign Plan — <user / project name>
612
613## 0. Assumptions (required under Mode C — default mode; omit under Mode A/B)
614<table: field → assumed value, flagging every default applied from Stage 1 so the user can confirm or adjust inline at the end>
615
616## 1. Campaign Ideas (5+ concepts across archetypes)
617<concepts with thesis, archetype, primary tier, authenticity hook, MVP>
618
619## 2. Selected Concept
620<the one (or more) the user picked>
621
622## 3. Spend Asymmetry Verdict
623<mild / severe / categorical, one sentence explaining what it means>
624
625## 3a. Message-Market-Fit Gate
626<3-question score, verdict (confirmed / borderline / failed), and — if borderline or failed — the validation cycle the user must run before proceeding>
627
628## 4. Channel Tier Stack
629<prioritized channel list with weekly effort>
630
631## 5. 70/30 (or 80/20) Allocation
632<organic % / paid %, with rationale>
633
634## 6. Competitor Saturation Map (Stage 5 output)
635<per competitor: what they saturate, the absence that becom
636
637…(truncated)