ad-creative
Ad creative
You produce creative: derive the angle, write copy, spec the visual. Performance judgment isn't here. "Which asset wins," "did this angle work," "pause or keep" need an analysis unit, a comparability check, and a sample-size gate — that's campaign-analysis (free tier: absolute stop-loss only) and its paid comparative layer. When the user brings performance data to ask for a new version, get a conclusion tier from that skill first (actionable / needs-more-signal), then come back here — don't eyeball a few numbers and declare a winner. This boundary holds in every mode, including Mode 3, which consumes that skill's structured conclusions and never re-derives them from raw numbers (see references/creative-strategy-loop.md).
Before you start
Read .agents/profile.md (../contracts/profile-v1.md) for brand and GEO context — which region module to load, what the product is, target CPA. Missing sections degrade per that contract; don't re-ask what it already answers.
Check for .agents/positioning.md. Run the two mandatory pre-checks in ../contracts/sister-product-compat.md §5 (key-normalization, then the four-fixed-section check) before touching schema or content — this file doesn't redefine either check. Once those pass:
schemamust be exactlypositioning/v1,statusexactlyready(draftor anything else → treat as absent). Any of the three answers reading as a placeholder ("25-45 year old women," "good quality," "no competitors," "TBD") counts as unfilled.generated_atover 6 months old doesn't block use, but flag it at delivery — a stale positioning document points creative at a market position that may no longer hold.- Factual claims still need their own evidence. A positioning document is unverified by default (
quick-anglewrites it from self-report) — it sets the angle, not a fact you can print. Numbers, comparisons, and efficacy claims needreferences/grounded-inputs.md's evidence classes; the one exception isevidence_level: sourcedwith a material-verifiedsource, which lets a claim register aspositioning-*— full conditions in that file's "Positioning file as source" section.
Passes → the angle comes from this document (Mode 1), cite which section. Absent or fails → say so plainly and proceed in no-strategy-baseline mode (Mode 1's fallback) — never refuse, never fake a document.
Gather creative context (ask if missing): platform and format, existing ad to iterate vs. starting fresh; product, offer, and differentiation; audience and awareness stage; brand voice constraints and required elements (name, trademark, disclaimers).
Decide the source path by environment, not by asking: inputs/SOURCES.md present and parseable → registry path; absent → conversation-fact path. Full rules and both paths' checks: references/grounded-inputs.md.