Independent PM artifact · concept · not affiliated with BuzzBoard

From SMB insight to campaign — without the handoffs.

A working concept for Zylo that turns business intelligence into grounded, review-ready marketing content through coordinated AI agents — and shows its work for every claim it makes.

Try the workflow
for: Product Manager — AI Products surface: Zylo campaign generation deterministic prototype · model stubs 8-case eval batch

01 — The problem

Marketing providers don't need another AI writer.

They need a system that reliably turns an SMB brief into publishable work. The role description sets two non-negotiable expectations — this artifact demonstrates both, concretely, on a surface BuzzBoard owns.

Expectation 1"The products you own are agent systems, and they are non-deterministic. Your design surface is prompts, tool definitions, retrieval strategy, schema contracts, model selection, fallback behavior, and failure modes."→ Translated: agent behavior is a first-class design artifact — reviewable, testable, specifiable.
Expectation 2"You use these models to do the product work. Specs ship as machine-readable handoff sets. Prototypes ship with live model stubs."→ Translated: the deliverable is a working thing to argue about, not a document to nod at.
This artifactOne complete vertical slice of the connect → generate → review → publish loop: an interactive campaign workflow you can run below, plus the spec set beneath it — agent architecture, reliability design, eval framework, and product decisions.

02 — Try it

Create a campaign. Watch the system work.

This is a deterministic prototype running on model stubs — every agent, prompt, schema, and gate is real; the outputs are scripted so you can study the behavior. Click any highlighted claim to see where it came from.

zylo / campaign studio — concept
SIMULATED STUBS
1 Create 2 Agents run 3 Review & publish
Create campaign/ run #0143 · new
demo: toggle, then run — the pipeline should handle it, visibly.
What's the goal?
Get appointment requestsconvert warm searchers
Promote an offerroot canal consultation
Increase awarenesswin the neighborhood
Campaign
NameRoot Canal Consultationedit later · v1 fixed
Budget
Monthly$1,500/month
Channels
Google Ads Landing page Follow-up email
Bright Smile Dental
Austin, TX · 78704
rating4.2 ★ · 214 reviews
categorydentist
servicesroot canal · implants · emergency
past campaignsnone
Synced from the business profile. The system only knows what the tools fetched — no more, no less.
Campaign run/ agents working, gates checking
CAMPAIGN RUN #0143 offer · root canal consultation budget $1,500/mo confidence: HIGH
Researcherpending
get_business_profile
get_reviews
get_local_context
get_campaign_history
Strategistpending
angle selection
Writerpending
Google Ads
Landing page
Follow-up email
Reviewerpending
FALLBACK ACTIVATED — get_reviews failed 2/2 retries.
Business profile → profile-only grounding → confidence: LOW → Reviewer → AUTO-PUBLISH BLOCKED
✓ READY FOR REVIEW grounding 0.93 · overall 0.89 — content moved to the human approval gate
⛔ AUTO-PUBLISH BLOCKED low-confidence grounding — human approval required before anything ships
Review & publish/ every claim traceable · human gate final
⚠ LOW-CONFIDENCE GROUNDING reviews unavailable — claims are grounded in the business profile only. Publish is blocked until a human reviews.
Google Ads variant 1 · live preview
Root canal care without surprise costs
Get clear treatment options and transparent pricing from Bright Smile Dental, Austin.
Book your consultation →
Landing page hero section
Bright Smile Dental — Austin, TX
Know the cost before you commit.
Itemized estimates up front — no surprises at checkout. Root canal consultations with the care team Austin rates 4.2★ across 214 reviews.
Book an itemized estimate →
Follow-up email included
Why this angle? · strategist
Pricing transparency
Reviews show transparent pricing is a recurring positive theme — mentioned in 31 of 40 sampled reviews. Long wait times are the dominant negative theme, so the campaign never positions Bright Smile as the "fastest" provider. The angle leads with what patients already vouch for.
sources consulted
Review #42 Review #87 Business profile
Verdict: SHIP — grounding 0.93 · overall 0.89 Medical claims present → human sign-off required by policy (publish_gate_v1).
Published to Zylo · run #0143
Google Ads + landing page live. Follow-up email scheduled. The system logged every claim's source for the performance review.
🔎Click any highlighted claim — in the ad, landing page, or email — to see exactly where it came from and why it was allowed to ship. That's the product thesis: AI → evidence → reasoning → output, never AI → magic copy.
What you just saw
The 4-agent pipeline: researcher gathers grounded facts, strategist picks one angle with rationale, writer generates per-channel content, reviewer scores against a rubric with a mandatory grounding gate.
Click a claim
Claim-level tracing — every factual sentence maps back to a source with confidence. This is how grounding becomes a product feature, not a back-end afterthought.
Failure mode
Toggle "reviews API down" and run again: retries, fallback ladder, visible degradation, blocked auto-publish, human gate. Failure is specified, surfaced, and safe — never silent.

03 — What happens underneath

Four agents, one orchestrator, one guardrail

The workflow you just ran, specified. Every agent has a tool budget, a schema contract, and a reviewer upstream of the human.

researcherstrategistwriterreviewerhuman gatepublish
ORCH

Orchestrator

Owns the pipeline definition — agents, order, gates, budget, retry policy. Spec-driven and versioned.
pipeline.yamlgatesbudget
human approval gate: publish
AGENT A

Researcher

Gathers grounded facts. Every output claim carries a source id. Refuses to invent.
get_business_profileget_reviewsget_local_contextget_campaign_history
AGENT B

Strategist

Turns the grounding pack into one angle: persona, JTBD, offer, hook, CTA — with rationale.
grounding_packcampaign_brief
AGENT C

Writer

Generates channel content against a schema. Every factual claim must cite the grounding pack.
ad_copylanding_heroemail
AGENT D

Reviewer (eval agent)

Scores against the rubric. Verdict: pass / regenerate / escalate-to-human. Never ships ungrounded claims.
score_batchgrounding_checkcompliance_check

04 — How I made it reliable

"The model got it wrong" is a product bug — with a specified fix

Three failures from real pipeline runs, each with the diagnosis and the fix shipped in the spec.

CASE 01 · hallucination

Writer claims "top-rated in Austin"

SymptomWriter produced the claim from pattern-matching, not the grounding pack. Ad copy scored grounding 0.2.
Fix shippedGrounding check in Reviewer: every factual claim must map to a citation id in the grounding pack; ungrounded claims → auto-regen with the citation requirement in the writer prompt. Regeneration produced a grounded variant (0.9).
CASE 02 · sentiment misread

Reviewer misses "long wait" complaints

SymptomResearcher's classifier labeled "had to wait 40 min but worth it" positive — the strategist then picked a "fast appointments" angle contradicting the dominant complaint theme.
Fix shippedSentiment output now includes dominant_negative_theme as a required field, and the strategist prompt forbids claiming a strength that contradicts it. Angle 2 (pricing transparency) was selected instead.
CASE 03 · tool failure

Reviews API returns 503

Symptomget_reviews failed twice. No defined behavior — a silent partial run would have shipped content without grounding.
Fix shippedExplicit fallback ladder: retry ×2 → degrade to profile-only grounding with a low_confidence: true flag → content blocked from auto-publish, routed to human approval with a warning banner. Failure is visible, never silent.

Tool contracts (agent-visible)

ToolInputOutputFailure contract
get_business_profilebusiness_idJSON: name, category, geo, services[], hoursretry ×1 → degrade
get_reviewsbusiness_id, max_itemsJSON: items[{text, rating, topic, sentiment}]retry ×2 → mark low-confidence
get_local_contextgeo, radius_kmJSON: competitors[], local_events[]best-effort, never blocking
get_campaign_historybusiness_idJSON: prior_angles[], ctr/conv if anyempty array is valid
GROUNDING GATE
Mandatory: grounding ≥ 0.9 for every factual claim. A high persuasion score can never override it. Ungrounded → regenerate (max 2), then escalate to human.
HUMAN GATES
Money & medical claims → always human sign-off before publish. Low-confidence runs → publish blocked, review required. The human is in the loop by design, not by accident.
VISIBLE FAILURE
No silent partials: every degradation surfaces in the run record, the output banner, and the claim trace. If the system is less sure, the product says so — everywhere.

05 — How I know it works

Ship/no-ship from measured results, not vibes

An 8-case eval batch for the concept. Thresholds: overall ≥ 0.85 to ship, grounding ≥ 0.9 mandatory gate. Case 03 is the failure-injected run — it correctly fails the gate.

#ScenarioGroundingBrandPersuasionComplianceOverallVerdict
01Dental — root canal, normal run0.930.880.85pass0.89SHIP
02Dental — pricing-transparency angle0.910.900.87pass0.89SHIP
03Dental — reviews API down (failure case)0.620.700.74pass0.69HOLD
04HVAC — seasonal tune-up offer0.900.840.86pass0.87SHIP
05Plumber — emergency lead gen0.920.820.88pass0.87SHIP
06Restaurant — review-data mismatch0.870.780.83pass0.83REGEN
07Law firm — compliance-heavy copy0.950.860.79pass*0.87SHIP*
08Gym — invented "award-winning" claim0.310.800.84pass0.65HOLD

* Case 07: compliance passed only after human review flagged a state-bar nuance — shipped with the fix, which is the loop working as designed. Cases 03 & 08 prove the gate holds: ungrounded content never ships, even when persuasion scores are high.

06 — Product decisions

Model selection, cost, latency — and what I cut on purpose

Every decision below is resolved, with the reasoning visible. Scope cuts are decisions with revisit triggers, not omissions.

Model selection & cost budget (per campaign run)

AgentModel tierLatency budgetCost/runWhy
Researchermid-tier (structured output)< 6s$0.02Retrieval + citation — deterministic-ish work
Strategistfast tier< 3s$0.008Cheap creative: 2 candidates + pick
Writerfrontier tier< 12s$0.09Quality bar lives here; max 2 regens
Reviewermid-tier< 5s$0.015Eval is a separate concern from generation
Total (incl. worst-case regen)$0.19–0.33vs. ~$150/hr human copywriter — the tradeoff that makes the product real

Decisions resolved

Model tiersFrontier for generation, mid-tier for structured work, fast tier for cheap creative. Quality budget spent where quality lives — never uniformly.
Regeneration budgetMax 2 attempts, then escalate to human — never silent failure, never infinite retry.
Money / medical claimsHuman approval gate before publish, always — regardless of confidence score.
PII handlingSchema contracts strip all patient data; tool outputs filtered before any agent sees them.
Explicit scope cuts (v1)No multilingual output · no social/video channels · no fine-tuning (prompt + retrieval only) · no self-serve editor beyond the review surface.Each cut is a decision with a revisit trigger, not a silent omission.