Previous versions generated one piece of content at a time. You'd run it for email, run it again for social, again for ads. You got isolated pieces with no coherent message across channels.
v2 introduces the campaign engine: input one brief, get a full coordinated campaign across every channel — email, social (per platform), ad hooks, and listing copy — all built from the same strategic brief, with audience-segmented variants and A/B split guidance.
BeforeAfterOne content type per callFull campaign from one briefGeneric output6 audience segments, each with tailored messagingNo split testingA/B variants on every piece (gain vs. loss framing)Compliance flag at endInline compliance guardian, per claimSocial posts onlyEmail + 4 social platforms + ad + listing in one call
Single-call campaign generation for:
json
{
"mode": "campaign|social|email|ad|listing|segment",
"topic": "paste your brief, headline, or talking points",
"audience": "first_time_buyer|veteran|investor|self_employed|credit_challenged|relocating|all",
"platforms": ["linkedin", "x", "facebook", "instagram"],
"ab_variants": true,
"include_listing": false,
"tone": "urgent|educational|conversational|luxury",
"compliance_level": "strict|standard",
"output_format": "markdown|json"
}
Campaign mode is the primary mode. It runs all channels in a single call and returns a structured campaign brief.
json
{
"campaign_brief": {
"topic": "VA loans — zero down, no PMI",
"audience_primary": "veteran",
"channels_generated": ["email", "linkedin", "x", "facebook", "instagram", "ads"],
"ab_variants": true,
"compliance_flags": 2
},
"email": {
"subject_a": "You served. Your benefit is still here.",
"subject_b": "Most veterans leave this on the table. Don't.",
"body_a": "...",
"body_b": "...",
"variant_guidance": "Run A for warm list (opens > 25%). Run B for cold list or re-engagement.",
"compliance_note": "Add NMLS# and 'subject to qualification' to footer."
},
"social": {
"linkedin": {
"variant_a": {"body": "...", "char_count": 284, "hashtags": ["#VALoans", "#Veterans"], "cta": "..."},
"variant_b": {"body": "...", "char_count": 247, "hashtags": ["#VALoans"], "cta": "..."},
"ab_note": "A = value education. B = loss framing. Test B on Mon/Wed, A on Tue/Thu."
},
"x": {"variant_a": {"body": "...", "char_count": 238}, "variant_b": {"body": "...", "char_count": 201}, "ab_note": "..."},
"facebook": {"variant_a": {"body": "...", "char_count": 412}, "variant_b": {"body": "...", "char_count": 389}, "ab_note": "..."},
"instagram": {"caption_a": "...", "caption_b": "...", "hashtag_block": "..."}
},
"ads": [
{
"headline_a": "Veterans: $0 Down. No PMI. This Is Your Window.",
"headline_b": "Still Renting? You Have a VA Benefit You Haven't Used.",
"body": "Subject to qualification. VA funding fee may apply.",
"compliance_note": "VA funding fee disclosure required."
}
],
"audience_segments": {
"veteran": {"angle": "entitlement — you earned this, don't leave it unused", "key_framing": "no-cost advantage"},
"first_time_buyer": {"angle": "education + permission — you're closer than you think", "key_framing": "down payment myth"},
"investor": {"angle": "leverage + cash flow math", "key_framing": "equity build + carry cost"},
"self_employed": {"angle": "bank statement alternatives exist", "key_framing": "income documentation options"},
"credit_challenged": {"angle": "progress timeline, not rejection", "key_framing": "score improvement window"},
"relocating": {"angle": "timing confidence — buy before you move", "key_framing": "remote pre-approval"}
},
"compliance_flags": [
{"claim": "no PMI", "flag": "Add: 'PMI not required on VA loans, VA funding fee may apply'", "severity": "required"},
{"claim": "$0 down", "flag": "Add: 'subject to qualification, funding fee may apply'", "severity": "required"}
]
}
Each segment has a different psychological entry point. v2 generates separate copy for whichever segments you select.
AudienceCore FearCore DesirePrimary FrameFirst-time buyer"I can't afford it / don't qualify"Own something, stop rentingEducation + permissionVeteran"I don't know what I'm entitled to"Use what I earnedEntitlement + urgencyInvestor"What's the ROI?"Build wealth through leverageMath + deal framingSelf-employed"Banks won't approve me"Get approved without W2sAlternative documentationCredit-challenged"My credit is too bad"Get into a home in 6–12 monthsProgress timeline + quick winsRelocating"Too risky to buy before I move"Buy in new city before arrivalRemote pre-approval + confidence
Run "audience": "all" to get all 6 angles in one call. Run a specific segment to go deep on one ICP.
Every piece gets two variants:
Variant A — Gain framing
Variant B — Loss framing
Each output includes ab_note with platform-specific guidance on when to run which variant and what metric to watch (open rate, CTR, engagement rate).
Example — same VA loan topic, two variants:
Variant A (gain):
"VA loans let eligible veterans buy with $0 down and no PMI. On a $350K home, that's $70K you keep in your pocket and $150–$250/month in savings over conventional. If you served and you're renting — this benefit doesn't expire, but home prices don't wait."
Variant B (loss):
"Most veterans who rent are sitting on a benefit they haven't touched. $0 down, no PMI, competitive rates — and the clock isn't on your side. Every month you rent, you're paying someone else's mortgage instead of building your own equity. That math gets worse every year prices rise."
When mode is campaign, the skill builds channels in this sequence:
text
1. Parse brief → identify topic, ICP, key claims
2. Run compliance pre-check → flag any claims needing disclosure
3. Generate email (A/B subjects + bodies)
4. Generate social per platform (character-aware, CTA-adjusted)
5. Generate 3 ad hooks (A/B headlines, shared body)
6. Generate audience segment notes (which angle for which ICP)
7. If include_listing: generate property narrative
8. Attach inline compliance flags to each claim
9. Return structured campaign object
All channels share the same strategic brief — consistent core message, platform-adapted format.
Compliance runs inline, per claim — not as a footer disclaimer added at the end.
Claim TypeWhat Gets FlaggedActionRate reference ("rates as low as X%")Required NMLS disclosureReplaced with directional language"$0 down"VA funding fee disclosureAppended inline"No PMI"VA/USDA-specificFlag added to output"Qualify" / "You'll get approved"Credit discrimination riskReplaced with "subject to qualification"DPA program referencesState-specific disclaimerFlag + "in eligible areas" appendedSpecific loan programs"Subject to qualification, not available in all states"Appended
compliance_level: "strict" — flags everything, zero risk
compliance_level: "standard" — flags high-severity items only, allows directional language
ModeDescriptioncampaignFull multi-channel output from one briefsocialSocial posts only (all platforms or specific)emailEmail only — subject lines + full body, A/B variantsad3 ad hooks (headline A/B + body)listingProperty narrative from bullet points or addresssegmentDeep copy for one specific audience segment across all channels
Free — Single-channel only (social OR email OR ad, not all), no A/B variants, no audience segmentation, compliance flags included Standard ($12/mo) — All modes, 3 audience segments, A/B variants, multi-channel in one call, compliance guardian Pro ($37/mo) — All modes, all 6 audience segments, full campaign output, JSON export, listing copy, custom brand voice, bulk campaign generation
bash
# Full campaign from one brief
openclaw run mortgage-marketing --mode=campaign --audience=veteran --ab-variants "VA loan zero down, no PMI, first time users"
# Segment-specific deep copy
openclaw run mortgage-marketing --mode=segment --audience=credit_challenged "90-day credit repair timeline"
# Social only, all platforms
openclaw run mortgage-marketing --mode=social --platforms=all "Fannie Mae crypto-backed mortgages"
# Via Telegram
@openclaw mortgage-marketing campaign "VA loans, veteran audience, all platforms"
Uses generate.py (shared backend). Local MLX first, Haiku fallback.
bash
LLM_BACKEND=local openclaw run mortgage-marketing "campaign brief" # free
LLM_BACKEND=haiku openclaw run mortgage-marketing "campaign brief" # ~$0.40 per full campaign
Campaign mode makes 3 generation calls (email → social → ads). In local mode: free. In Haiku mode: ~$0.40 per full campaign.
v2.0.0 — Upgraded from single-channel template generator (depth 2) to multi-channel campaign engine (depth 4). Added: full campaign mode (email + social + ads from one brief), 6 audience segments with distinct psychological angles, A/B variant system (gain vs. loss framing) on every piece, inline compliance guardian per claim, channel-specific formatting.