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 Codex that is the request_user_input when available, otherwise ask the user directly 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 AGENTS.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 competito
…(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.4---56# Insurgent Campaign78A campaign-design skill for organizations and people who cannot win by outspending. It ideates9campaign concepts across every major archetype, audits the user's spend asymmetry against10their competition, assembles an insurgent channel stack, sets strict boost gates on any11paid spend, and produces a lift-test plan so the user measures incremental impact rather12than vanity metrics.1314## Core Premise1516**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 — additional18ad spend hits diminishing and then negative returns. Saturation, inauthenticity, and narrative19incoherence produce reactance, not persuasion. The leverage point is not reach; it is credibility20and message-market fit.2122Empirical spine:2324- Academic field experiments show digital ad ROI confidence intervals are so wide that most25 campaigns cannot be statistically distinguished from zero lift (Lewis & Rao, "The26 Unfavorable Economics of Measuring the Returns to Advertising," *Quarterly Journal of27 Economics* 2015). Meta and Google both ship Conversion Lift / Brand Lift tools precisely28 because *they* distinguish attributed conversions from incremental conversions — the29 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; conversion31 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% — still33 the best organic window but compressing fast.34- Meta and Google both ended political/issue ads in the EU in October 2025, removing paid channels35 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-backed37 communications apparatus with foreign support), the side with near-zero paid media won a38 parliamentary supermajority in Hungary in April 2026 — see `references/hungarian-case-study.md`.3940The same curve bends commercial advertising. The skill treats paid as an *amplifier of proven41organic winners*, never as a standalone channel.4243## When to Apply This Skill4445Apply when the user:4647- 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.5354Also apply when no explicit "campaign" is named but the user is debating where to invest55time and money for distribution.5657## Workflow5859The skill runs in seven stages (1, 2, 3, 3a, 4, 5, 5b). Do not skip stages; later60stages depend on the user's answers and selections from earlier ones. Stage 3a61(MMF Gate) can refuse the full campaign plan and route the user to validation work62instead. Stage 5 ends with a shape selection — Stage 5b only begins once the user63has picked one of the three shapes.6465This skill is designed to be portable across agent environments. Where the workflow66says "ask the user," use whatever structured-question facility your environment67provides (in Codex that is the `request_user_input when available, otherwise ask the user directly` tool, batching up to 468questions per call); if no structured tool exists, ask in plain text and wait for69the user to reply before continuing. Either way, never invent answers.7071**Resume Protocol (idempotency).** Before producing any output, scan the72conversation for prior skill output. If a section's heading (`## N. <name>`)73is already present in the conversation, do not regenerate it. Pick up at the74first stage whose Contract preconditions are satisfied AND whose output75section(s) are not yet in the conversation. If the user explicitly asks to76restart, restart from Stage 1; otherwise resume rather than rerun. This makes77the skill safely re-invokable: a second call in the same conversation produces78only the next incremental section, never duplicates or regressions to earlier79stages. 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.8081**Stage Contracts.** Each stage below opens with a **Contract** block declaring82inputs, outputs, preconditions, postconditions, and failure modes. The contract83is the structural boundary — it is what makes the stage retry-safe, error-84explicit, and self-describing. Treat the contract as binding: if the85preconditions are not met, do not enter the stage; if a failure-mode trigger86fires, take the declared action rather than improvising.8788### Stage 1 — Interview / Brief Capture8990**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.99100The skill has **three intake modes**. Pick the mode that matches the user's brief101before asking any questions.102103**Mode A — Full-brief mode.** The user has volunteered all 8 fields below up front104(in a pasted brief, a prior plan, a detailed message). Skip the interview entirely,105confirm understanding in one sentence, and proceed to Stage 2.106107**Mode B — Interview mode.** The user explicitly asks to be scoped ("help me figure108out what this campaign should be," "walk me through it," "interview me"). Ask the 8109questions below in batches of ≤4 per turn, using the environment's structured110question facility if one exists (see the structured-tool note in the Workflow111section above). Do not invent answers. Do not merge questions.112113**Mode C — Default mode (for terse briefs).** The user gave a short brief114(≤2 sentences) without asking for an interview. This is the common case. Do NOT run115the full 8-question interview — it turns a 12-word prompt into an interrogation.116Instead:1171181. **Always-capture fields (ask once, batched).** Four fields are too material to119 default silently; getting them wrong produces a generic plan. Ask the user in120 **one batch** of up to 4 questions covering:121122 - **Outcome** — what specific action is the campaign driving (signups, ticket123 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 an126 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 sector130 rider materially changes Stage 4 channel weighting and Stage 5 archetype131 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 asymmetry135 classification and Stage 4 paid-channel availability. Never default this136 silently.137138 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.1401412. **Default-with-flag fields.** The remaining fields default silently but are142 surfaced in an **Assumptions table** at the top of the final deliverable (Stage143 5 output). The user can confirm or adjust inline after reading the plan:144145 | 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 AGENTS.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. |1521533. **Escalation rule.** If a missing field would materially change the Stage 3154 asymmetry classification *or* the Stage 4 primary-function choice, do not155 default it — add it to the question batch. Example: if the user mentions156 "our whole team is posting already" but does not specify which channels,157 ask, because it changes the channel stack.1581594. **Assumptions table is mandatory under Mode C.** Open the final deliverable160 with a table listing every defaulted field and its assumed value. End the161 deliverable with: *"Confirm or adjust any row in the Assumptions table and I162 will re-run the affected stages."*163164#### The 8 Fields165166Regardless of mode, the campaign plan is grounded in these 8 fields:1671681. **Sector and outcome** — which of the 6 sector riders applies, and the specific169 action the campaign drives. (Sector is ask-once in Mode C; outcome is170 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 use175 `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 the180 audience (newsletter size, community size, follower counts that matter, warm181 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 or185 launch. (Defaults to 60 days in Mode C.)1868. **Capacity** — realistic hours per week. Hard-constrains Stage 5's first-30-days187 action list; lowest-ROI actions get cut until total weekly effort fits.188 (Defaults to 6h/week in Mode C.)189190### Stage 2 — Ideation (generate 5+ campaign concepts across archetypes)191192**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.201202Before any audit or channel work, generate **at least five distinct campaign concepts**,203drawn from different archetypes in `references/campaign-archetypes.md`. Do not converge204early. The point is to give the user a shaped menu to choose from.205206For each concept, produce:207208- **Name** — short, memorable, in the user's voice.209- **One-line thesis** — why this campaign works for *this* user against *this* competitor210 *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` this214 concept leans on (Tier 1/2/3/4).215- **Authenticity hook** — the specific real-world detail, person, story, or action that makes216 it credible and hard to fake.217- **Minimum viable version** — the smallest possible execution that proves the concept works218 in two weeks or less.219220**Anti-fabrication rule for concept names, theses, and hooks.** If the user named a221specific 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 in223the 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 behavior225("the enterprise billing tax"), or a bracketed placeholder (`[incumbent]`) that the user226will fill in. Concept names like "We Quit Sentry" or "DataDog Alternative" — invented227from the category description rather than the brief — violate the Stage 1 anti-fabrication228rule 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.230231**Industry-peer rule.** The anti-fabrication rule covers *any* competitor name absent232from the brief — not only invented names, but widely-known industry peers to a233brief-named incumbent. If the brief names one dominant player (e.g., the user says234"we're outspent 100x by [market leader]"), do **not** add the obvious #2 or #3 from235the 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-hatch237phrasing instead: "the other major [category] platforms," "[incumbent]-class tools,"238or "the dominant [category] incumbents." This applies in every section — Stage 2239concepts, Stage 4 SEO, Stage 5 competitor saturation, Stage 5b earned-media240targets and ad-copy hooks, and any other downstream output. The discipline does241not relax in any later stage. "Everyone in the industry knows it exists" is not a242licence to name it.243244After presenting the five concepts, ask the user to pick one (or more) to push through245Stage 3–5.246247### Stage 3 — Asymmetry Audit248249**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.258259Classify the user's spend asymmetry using the table in `references/asymmetry-audit-table.md`.260261- If the user gave numbers: compute the ratio (competitor spend ÷ user spend) and map it262 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 file264 (state-backing? can they afford billboards? do they dominate your category's search ads?)265 and classify qualitatively.266267Report back one sentence: `Your asymmetry is <level>. This means <what it means for your268strategy>.` Do not hedge. Do not offer a "balanced" recommendation if the user is at269categorical — it would be misleading.270271Then run a **Preconditions Check**. The insurgent playbook wins when preconditions are272present; asymmetry alone is not enough. Score the user's situation against the six factors273that made the Hungarian case work (see `references/hungarian-case-study.md` for the full274mechanism). Ask or infer:2752761. **Credible insider / founder-story / defector equivalent.** Is there a real person whose277 authenticity the competitor cannot manufacture?2782. **Accumulated grievance or unmet demand.** Is there anger the incumbent has ignored long279 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 directly283 (price, time, trust, service failure), or is the grievance distributed?2845. **Threshold-rewarding market / platform / system.** Does the distribution system reward285 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 the288 curve — more ads, more fear, more polished content — in a way the user can289 counter-position against?290291Score 0–6. Tell the user the count plainly and what it implies:292293- **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 — the295 user will need to build them during the campaign (e.g., find a credible voice, surface296 the grievance) for organic to compound.297- **0–2 preconditions:** refuse to execute the playbook at full scale. **Building the298 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, the300 insurgent playbook will underperform and burn the volunteer/community energy it301 depends on. Say this out loud. Do not soften it.302303### Stage 3a — Message-Market-Fit Gate304305**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.314315Before assembling a channel stack, verify the campaign is solving a **distribution316problem, not an MMF problem**. Distribution amplifies signal; it cannot manufacture317it. A founder's great LinkedIn post cannot sell a product nobody wants, and a318movement's best volunteer network cannot turn out voters for a message that does not319name their pain.320321Ask the user three yes/no questions. Do not skip any. If the user does not know the322answer to one, treat that as a "no" — absence of evidence is evidence of absence for323MMF.3243251. **Revenue/commitment signal:** Have ≥10 people in the target audience paid,326 signed up, pre-registered, or directly asked (without your prompting) for what327 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 in330 their own words** before you pitch them? Not a pain you infer — a sentence331 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 today333 (at the intended price / format / ask level), would at least 3 say yes?334335Scoring:336337- **3/3 — MMF confirmed.** The campaign is a distribution problem. Proceed to338 Stage 4.339- **2/3 — Borderline.** Name the weak link and insert a **1–2 week validation340 cycle** into the plan as a pre-campaign task *before* running the full Stage341 4–5 playbook. Examples: if question 2 fails, do 5 customer discovery342 conversations and extract the language; if question 1 fails, run a paid343 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, not345 distribution. Route the user to a discovery cycle: 5 structured customer346 conversations, a pre-order or paid-waitlist test, a small-room live demo.347 Explain plainly: *"The insurgent playbook scales trust. It cannot348 manufacture demand for a product, event, or cause people do not already349 want. Running a full campaign now will burn the volunteer/community energy350 that Stage 5 depends on. Come back when at least 2/3 of these signals are351 present."* Do not soften this. Do not produce the full Stage 4–5 deliverable.352353Report the MMF verdict at the top of the Stage 3 section of the final output so354the user sees it before the channel stack.355356### Stage 4 — Channel Tier Stack + 70/30 Allocation357358**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.367368**Function before cost.** Before picking channels, pick the campaign's primary function369against the user's bottleneck (from Stage 1 Q6). Use the function table at the top of370`references/channel-tier-stack.md`:371372- **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-keyword375 bidding without a lift test (see Stage 5).376- **Paid amplification** — bottleneck is "our organic content works but reaches too few377 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't380 convert, refer, or come back." Primary function for the majority of underdog381 campaigns. Leads with Tier 1: founder content, community nodes, newsletters, volunteer382 networks.383384A mild-asymmetry user with a trust bottleneck should not be routed to paid amplification385just because they can afford it. Route by function first; allocate within that function386by cost/asymmetry second.387388**Apply the sector rider.** After the function choice but *before* allocation, open389`references/sector-riders.md` and apply the rider matching the user's sector390(captured in Stage 1). The rider adjusts:391392- **Archetype defaults** — which campaign archetypes fit this sector best (e.g.,393 cohort-education biases toward community-build + referral flywheel; B2B SaaS394 biases toward founder-LinkedIn + demand capture).395- **Channel weighting** — which Tier 1/2 channels compound fastest in this sector396 (e.g., consumer brands lean on UGC flywheels; political campaigns lean on ground397 game and counter-media; NGOs lean on volunteer networks + earned media on398 named-beneficiary stories).399- **Failure-mode warning** — the sector-specific way the insurgent playbook400 underperforms when misapplied, which becomes a standing warning in Stage 5's401 anti-vanity dashboard.402403Do not overwrite the function-first choice. The rider *layers on top*. If the404rider and the function choice conflict (e.g., B2B SaaS rider biases toward405founder-LinkedIn but the function choice is demand capture), surface the conflict406and name both paths rather than collapsing to one.407408If the user picked "other" for sector, flag the mismatch in the Assumptions table409and proceed with the closest rider — naming which of the rider's structural410assumptions do not apply.411412Then assemble the channel stack using `references/channel-tier-stack.md`. Allocation413rules layer on top of the function choice and the sector rider:414415- **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 split418 toward organic is often safer.419- **Categorical asymmetry** → Tier 1 and 2 only. Refuse to draft broad cold-paid Tier 4420 creative — it will not work and it will burn runway. If the user insists, explain the421 diminishing-returns curve and the counter-positioning move (see `references/authenticity-playbook.md`)422 before reconsidering.423424Output the stack as a prioritized list with: (a) the primary function chosen, (b) the425channels mapped to that function, (c) an estimated weekly effort commitment per channel,426(d) the 70/30 (or 80/20) split in plain numbers.427428**Anti-fabrication carries through.** The Stage 2 anti-fabrication rule applies to429every element of the Stage 4 output: SEO keyword examples, long-tail query lists,430directory/review-site references, competitor saturation descriptions, and any sample431copy shown inline with the stack. If the brief did not name the incumbent, the432incumbent's proper noun must not appear in this stage **in any casing** — not433title-case ("Sentry alternative"), not lowercase ("sentry alternative"), not434hyphenated, not as part of a compound keyword or URL. Search-query examples that435would otherwise require a brand name must either retain the `[incumbent]` bracketed436placeholder for the user to fill in, or be rewritten as non-brand equivalents437("error monitoring for small teams," "application monitoring under $100/seat",438"lightweight APM for node.js"). This applies equally to Stage 5's competitor439saturation map and to every Stage 5b output section (`## 8`–`## 11`): the440banned-token discipline does not relax downstream of Stage 2.441442### Stage 5 — Shape Menu + Competitor Saturation Map443444**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.453454Given 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 any456of the Stage 5b output (`## 8`–`## 11`) until the selection has been made.4574581. **Competitor saturation map.** Before shapes, before ad copy, before anything: for459 each of the top 2 named competitors (or top 2 competitor *categories* if the user did460 not name specific ones — see Principles), produce:461462 (a) **What they saturate** — the channels, visual style, message tropes, production463 value, and emotional register the competitor is flooding. Be specific: "paid-heavy464 LinkedIn carousels with stock illustrations and growth-hack CTAs," not "social465 media ads."466467 (b) **The absence that becomes your signal.** What is the competitor doing that your468 *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 refusal471 to advertise and our free open curriculum is the message."472 - "SaaS competitors saturate agency-produced demo videos → our terminal-only473 raw-footage weekly changelog is the message."474475 (c) **One-sentence positioning line** the user commits to holding across the476 campaign. This is the single sentence every piece of content must reinforce.4774782. **Three alternative campaign shapes** for executing the concept, with tradeoffs. Examples479 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 already482 exists). Use the `alternative-generator` pattern — do not collapse to one recommendation483 prematurely; let the user choose. Each shape must include at least one flagship piece484 of content structured as **Self / Us / Now** (Marshall Ganz's organizing framework —485 see `references/authenticity-playbook.md`): the leader's lived experience, the shared486 community reality, and the specific time-bound ask. If the user cannot tell their Self487 story, drop the founder-led shape and route to community-first, earned-media-first, or488 search-capture-first instead.489490**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 the493First-30-Days plan, ad copy, lift-test, and anti-vanity dashboard."* Do not494generate `## 8`–`## 11` until the user names a shape. If the user's initial brief495already pre-selected a shape (rare), confirm that selection in one sentence and496proceed to Stage 5b.497498### Stage 5b — Selected-Shape Plan499500**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.511512Begin only after the user has picked one of the three shapes from Stage 5. If no513selection has been received, ask for it and stop. The four items below are514produced against the *one* selected shape — not all three.5155161. **First-30-days action list** — concrete weekly actions for weeks 1–4, mapped to the chosen517 shape. Each action has an owner (if multiple people), an effort estimate, and a clear518 success signal.519520 **Capacity is a hard constraint.** After drafting the week-by-week list, sum total521 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 cuts523 explicitly: "I am cutting X and Y because the draft came to 14h/week and you said524 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.526527 **Earned-media actions must be specific or flagged.** Every earned-media action in528 the list must include:529 - (a) A **named target** (e.g., "Latent Space podcast, The Pragmatic Engineer530 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 a534 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 LinkedIn538 DM, etc.539540 If the skill does not know specific targets in the user's niche (because the user did541 not name them and the skill cannot invent names — see Principles), assign target542 research as the week-1 action and set success criteria for the research itself543 (e.g., "produce a ranked list of 15 targets with RSS + contact channel by Friday").544545 **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 own547 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, seed549 with 10 personal invites from the user's existing network. Dead rooms are worse550 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, member554 spotlight) to 2–3 engaged early members. If no members step up, the community will555 die when the founder stops; surface this as a validation failure, not a staffing556 problem.557 - **Month 2+:** budget 3–4h/week sustained — moderation, weekly post, member welcomes,558 pruning dead accounts. Underinvest and the community dies.5595602. **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 has563 demonstrated genuine organic signal (saves, shares, sustained watch time, thread-depth564 comments — not raw likes). Likes are cheap and lie.565 - Audience definition: warm retargeting first, lookalikes second, cold audiences only for566 proven winners with a lift-test plan attached.567 - Frequency cap and creative refresh cadence to avoid fatigue (see ad fatigue section in568 `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 on572 brand keywords is always excellent *because* the traffic would have converted573 regardless. This is one of the most reliable ways established brands waste paid574 budget. If the user is already bidding on their own brand, require a575 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/2578 content instead and explain why.5795803. **Lift-test / measurement plan** — mandatory, no exceptions. One concrete experiment581 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 organic590 baseline — or, for Template 6, *"channel X outperforms channel Y on conversion rate591 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 means597 stop. For Template 6: top channel → double effort; bottom <20% → drop.5985994. **Anti-vanity metric dashboard** — the short list of metrics the user should track and600 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 attributed604 ROAS, vanity engagement rate without segmentation.605606## Output Template607608Produce the final deliverable in this exact order so the user can scan it and act:609610```611# Insurgent Campaign Plan — <user / project name>612613## 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>615616## 1. Campaign Ideas (5+ concepts across archetypes)617<concepts with thesis, archetype, primary tier, authenticity hook, MVP>618619## 2. Selected Concept620<the one (or more) the user picked>621622## 3. Spend Asymmetry Verdict623<mild / severe / categorical, one sentence explaining what it means>624625## 3a. Message-Market-Fit Gate626<3-question score, verdict (confirmed / borderline / failed), and — if borderline or failed — the validation cycle the user must run before proceeding>627628## 4. Channel Tier Stack629<prioritized channel list with weekly effort>630631## 5. 70/30 (or 80/20) Allocation632<organic % / paid %, with rationale>633634## 6. Competitor Saturation Map (Stage 5 output)635<per competito636637…(truncated)