
Enterprise Agent Mesh Engineering Guides · 10/12 · AI-Agent Factory
Build a Marketing Agent whose valuable product is not text generation but a provable constraint system: market-scoped claims, brand voice, asset rights, channel schemas, attribution discipline, consent boundaries and evaluation gates that generation is not allowed to bypass.
This guide adapts Article 10 of The Enterprise Agent Mesh — Building Twelve Production AI Agents on Claude Code. It preserves the handbook’s central argument: generation is cheap; a production marketing system is the machinery that proves what may be said, where it may be said, with which assets, under which attribution model and with whose approval.
Reference design, not a client case study. The handbook contains one reference deployment’s figures, thresholds, implementation sketches and failure modes. They are not independently verified Infinity Technologies client results or universal benchmarks. Notes marked Web-edition qualification identify engineering changes made after checking current primary documentation. Code and schemas below are reference excerpts, not a complete deployable repository. Technical references checked 16 September 2026.
Generation is the commodity. The constraint system — claims, rights, market validity, attribution, provenance and evaluation — is the product.
The Header illustration is shared Enterprise Agent Mesh platform artwork. It is not a marketing product screenshot, an ad-platform interface, or a representation of a measured Infinity Technologies deployment.
A useful enterprise Marketing Agent should make the generation step almost boring. The model can produce a headline quickly; the difficult work is proving that the headline is allowed. A sentence can be fluent and still fail because the product claim has no substantiation, the comparative framework is not approved in the target market, the customer quote lacks permission for that channel, the image licence expires before campaign end, or the performance narrative silently switches attribution models.
The source organises the system around seven workflows: campaign brief to variant matrix; performance analysis with explicit attribution; competitor/category monitoring; localisation as claim re-resolution plus copy adaptation; SEO/AEO decay detection; lead-quality feedback to Sales; and event/webinar operations. The reference deployment spans fourteen markets and nine languages. Those figures describe the handbook’s reference environment only.
| Workflow | Artifact | Authority ceiling |
|---|---|---|
| Campaign variant generation | Validated channel × placement × locale × audience drafts | L2 permanently for claim-bearing creative. |
| Performance narrative | Metrics-pack-grounded narrative under one attribution model | Draft/approval; causality only from approved causal evidence. |
| Competitive monitoring | Classified diffs and sourced digest | Promotion only after measured attribution accuracy. |
| Localisation | Market-specific adaptation after claim re-resolution | Native reviewer of record. |
| SEO/AEO decay | Refresh signal and brief | Read/brief only. |
| Lead quality | Programme-level evidence event to Sales | Event, not nested authority. |
| Event/webinar ops | Operational sequences and attribution mechanics | Higher autonomy only where no new claim surface exists. |
The agent never publishes live without a named human; never mutates the claims register; never names a competitor outside an approved framework; never uses customer identity, logo or quote without current market/channel permission; never constructs an audience beyond the recorded policy basis; never switches attribution model mid-series; and never self-approves localisation.
Web-edition qualification — substantiation is a system property, not a prompt instruction. The FTC advertising-substantiation policy statement is one primary example of the broader principle that objective express and implied claims require an adequate prior basis. Exact legal requirements vary by market and claim category. Legal/brand owners encode the approved determination in the claims register; the model does not interpret the law at runtime.
The component that can invent language is separated from the components that hold truth, and deterministic gates sit between generation and the outside world.
campaign.brief.approved
-> campaign-orchestrator
-> one event per matrix cell
-> variant-writer
-> localisation-adapter
-> resolve_claims + DAM rights + channel schema
-> render_variant (STAGING ONLY)
-> claims-auditor
-> named human review
-> model-free publish service
performance data -> immutable metrics_pack -> performance-narrator -> attribution gateThe source uses an Opus-class campaign orchestrator, Sonnet-class variant/localisation workers, an Opus-class adversarial claims auditor and a Sonnet-class performance narrator. Preserve the task split, but choose actual model IDs as versioned configuration backed by evals.
A matrix with hundreds of variants is fanned out per cell, not generated in one long context. Each worker receives one channel/placement/locale/audience target plus bounded evidence. Independent contexts reduce homogenisation, bound retries and isolate failure. Claim approval is never a vector score: semantic search may discover candidates, but exact register and market predicates decide eligibility.
Performance narratives read only a deterministic metrics pack whose figures already carry value, unit, date range and attribution model. Inter-agent work is events: lead-quality observations flow to the Sales Agent; legal questions become a separate event rather than a nested call.
marketing-agent/
.mcp.json
CLAUDE.md
agents/{campaign-orchestrator,variant-writer,claims-auditor,
localisation-adapter,performance-narrator}.md
skills/campaign-variant-set/{SKILL.md,reference.md}
skills/claim-expiry-sweep/SKILL.md
hooks/{hooks.json,claim_gate.py,attribution_gate.py,publish_gate.py,voice_score.py}
brand/voice-rubric.yaml
brand/exemplars/{human-good,human-bad}/
config/{channels,locales,attribution-models,promotion,mql-definition}.yaml
comparative-frameworks/
mcp/brandkit/server.py
evals/{golden,rubrics}/Stable invariants live in CLAUDE.md; procedures live in skills; channel schemas, locale rules, rights and claims are typed data. Frozen human exemplars are control artifacts. Generated copy never becomes its own voice reference.
# Operating invariants
No product, performance, comparison, security, environmental, pricing
or customer-outcome claim ships without an approved claim_id.
Approval must cover target market and campaign end date.
No claim_market row means prohibited, not 'ask the model'.
The agent cannot create, approve, expire or broaden claims.
A named human publishes. promotion.json defines eligible staged actions.
One performance artifact uses one attribution model.
Causal language requires evidence explicitly marked experimental.
Human-authored frozen exemplars define voice; generated assets never join them.The variant writer handles one matrix cell. It drafts, sends every claim-shaped sentence to resolve_claims, preserves required qualifiers next to the claim, chooses only rights-filtered DAM assets and requests staging. It cannot create claims, live-publish or invent competitor/number claims absent from the gate.
---
name: variant-writer
description: Draft one validated campaign matrix cell.
tools: Read, mcp__corpus__search, mcp__brandkit__resolve_claims,
mcp__dam__search_rights_filtered
disallowedTools: mcp__publishing__*, mcp__brandkit__write_claim*, Bash, Edit
model: sonnet
maxTurns: 14
---Localisation starts by re-resolving claims for the destination market, then adapts language. A native reviewer judges language; the market-scoped claims register determines whether the underlying claim is approved, prohibited or conditional.
The auditor distrusts the declared claim IDs and independently detects express/implied factual claims. It attacks implication, substantiation decay, market leakage, chain drift and qualifier orphaning. It returns structured findings and cannot rewrite or publish.
The narrator reads only a sealed metrics pack. Every number maps to a token with value, unit, window and attribution model. One narrative uses one attribution model unless it is explicitly a reconciliation. Causal verbs are permitted only for approved experimental tokens.
The orchestrator validates the brief and emits one bounded request per cell. It owns routing metadata, not claim truth, and cannot promote staged output or mutate policy records.
The campaign skill loads the approved brief, authoritative channel schema, locale requirements, claims expiring during the campaign window and a small frozen human-exemplar pair. Long market/channel guidance is progressively loaded only when needed.
For each requested cell:
1. validate channel, placement, locale and audience;
2. evaluate claim validity at campaign end, not today;
3. preserve mandatory disclosures and claim qualifiers;
4. use frozen human exemplars only for voice;
5. create an independent variant request;
6. stage only after deterministic schema, rights and claim checks.A scheduled workflow finds claims approaching expiry, joins them to staged/live asset usage and opens review work. The source uses example watch/remediation windows; treat them as operations configuration. The invariant is the dependency graph: an expired claim must be traceable to every asset that depends on it.
| Boundary | Purpose | Posture |
|---|---|---|
| Marketo / HubSpot / Pardot | Campaign/programme/lead operations | Batch/async where supported; gated writes. |
| Google Ads / Meta / LinkedIn | Metrics and staged creative | No model-held live publish credential. |
| Headless CMS | Typed draft content | Draft only until named-human publish. |
| DAM | Rights-aware asset search | Read; filtered by territory/channel/date. |
| GA4 / warehouse | Measurement and deterministic metrics pack | Read-only analytical identity. |
| CDP / CRM | Segments and policy-basis metadata | Audience export separately gated. |
| Brandkit / corpus | Approved content discovery and claims | Claims register read-only to agent. |
Web-edition qualification — quotas are runtime facts. Current Adobe Marketo integration guidance documents shared limits, concurrency and batching; Bulk Lead Import is asynchronous. Google Ads quotas and rate limits vary by operation/access/load. Keep current limits in gateway configuration, not prompts.
claim(claim_id, canonical_text, claim_type, product, product_version,
substantiation_ref, owner, approved_on, expires_on, supersedes, status)
claim_market(claim_id, market, decision, conditions, basis_ref, reviewed_by)
asset_claim_usage(asset_id, claim_id, market, channel, campaign_start,
campaign_end, variant_digest)Vector search may discover the closest canonical claim. It cannot approve it. resolve_claims detects claim-shaped spans, discovers candidates, then performs exact register/market/time checks. No qualifying row means unsubstantiated or prohibited, never “similar enough”.
render_variant validates channel schema, mandatory disclosures, market claim validity through campaign end, qualifier adjacency and DAM rights. The model may request a render; it cannot downgrade failed validation.
The filtered asset response carries territory, channel, licence expiry, release status and any organisation-required AI-content/disclosure metadata. The filter uses campaign end date. A visually perfect image with the wrong territory is not an acceptable near match.
The corpus contains brand/style guidance, message frameworks, comparative frameworks, product docs, counsel-maintained summaries, competitor material with source provenance and approved historical marketing content. The claims register, customer-specific legal terms, CDP personal data and agent-generated copy deliberately stay outside it.
Approval is an exact predicate over structured market/time/status data. Semantic retrieval is for discovery. The same separation applies to consent/policy-basis metadata and asset rights.
Frozen human-authored good/bad examples define the voice baseline. Every asset is tagged by authorship; generated outputs are excluded from the exemplar pool so the model cannot slowly train the organisation’s style on its own previous output.
Apply tenant, ACL, market/jurisdiction and effective-date predicates before ranking. The source uses heading-aware chunks for long brand/policy documents and one-chunk-per-prior-asset patterns with context headers; treat sizes and top-k values as reference parameters and evaluate by corpus.
A nightly job suspends new use of invalid claims and resolves every staged/live asset depending on them. A claims register that can mark rows expired but cannot identify dependent assets is documentation, not enforcement.
Anything capable of reaching an external channel checks promotion eligibility, a named authenticated human of record, freshness of required evals, exact staged-artifact digest, current claim/rights state and any approved policy basis needed for an audience operation. The agent service principal has no standing live-publish credential.
Web-edition qualification — the model does not decide lawful basis. Consent, legitimate-interest assessments, special-category restrictions and market/channel rules are policy-system inputs approved by privacy/legal owners. A prompt does not create a lawful basis.
At Stop, detect factual express/implied claims again and re-resolve them. This catches shortening/localisation that drops a qualifier after the first resolution. Nightly maintenance cannot replace this immediate pre-review gate.
The performance artifact declares one attribution model. Every number must exist in the sealed metrics pack. Causal verbs are blocked for observational packs; experimental packs may use only the approved causal language associated with the experiment design.
The writer proposes, the auditor challenges, a named human approves and a model-free adapter publishes. Approval binds the exact artifact digest, target market/channel and reviewer identity. Any artifact change invalidates that approval.
Verified runtime qualification. The Agent SDK permission documentation makes clear that calls auto-approved earlier in permission evaluation do not reach can_use_tool, and an allow list is not a full tool-removal mechanism. Use explicit denies, narrow MCP exposure and backend authorisation. Sensitive staging/publish actions must not sit on an auto-approved path.
One approved brief becomes bounded jobs, one per matrix cell. Concurrency is capped before fan-out reaches downstream systems. The source uses eight concurrent cells and two retries with the same idempotency key as reference settings; tune them to the actual CMS/ad-platform budgets.
# Reference architecture excerpt; organisation-owned services omitted.
OPTIONS = ClaudeAgentOptions(
model='<pinned-marketing-worker-model>',
mcp_servers={'brandkit': brandkit, 'dam': dam, 'corpus': corpus},
allowed_tools=['mcp__brandkit__resolve_claims','mcp__dam__search_rights_filtered','mcp__corpus__search'],
disallowed_tools=['Bash','Edit','mcp__brandkit__write_claim*','mcp__publishing__publish_live'],
permission_mode='default', max_turns=18, include_hook_events=True)
# render_variant is intentionally not auto-approved; the staging service enforces again.This is a reference excerpt, not a complete runner. A production worker also needs durable queue claims, timeouts, schema validation, tenant/context derivation, artifact persistence and retry reconciliation.
The job key binds campaign brief revision, matrix cell, model/prompt, policy versions and relevant source digests. Retrying a timeout returns the same staged artifact or reconciles authoritative state. A read-then-create precheck is not exactly-once; use unique claims/leases and terminal states.
Competitive monitoring may use context editing to drop old tool payloads, but only after crawl state and provenance are durably persisted. Context trimming is an optimisation, not the system of record.
The source’s 500-item reference golden set separates claim detection, brief-to-variant generation, localisation and performance narratives with known causal ground truth. Preserve that decomposition because each risk surface requires a different oracle.
| Metric | Meaning | Handbook reference gate |
|---|---|---|
| Claim substantiation | Claim-bearing sentence maps to valid market claim | 1.000 on test set. |
| Detector recall | Positive/adversarial claims flagged | ≥0.99. |
| Voice mean | Versioned rubric under validated judge | ≥3.8; no dimension <3.0. |
| Judge ↔ human | Judge compared with frozen human mean | Spearman ≥0.75. |
| Localisation adequacy | Named native reviewer | Reference ≥4.2/5. |
| Product factual accuracy | Checkable against product docs | ≥0.98. |
| Sameness vs baseline | Distinctness/dispersion vs frozen human set | Reference ratio ≥0.85. |
| Rights clearance | Staged asset passes rights at campaign end | 1.000 on test set. |
These thresholds are source reference values, not Infinity client performance. Absolute gates still need coverage reporting; “100% on this suite” is not a universal guarantee.
The source rubric scores concreteness, stance, register, rhythm, claim posture and structural signature and bans recognisable generic shapes. It freezes 240 items, has three humans score them, checks human-human agreement first, then compares the judge to the human mean. Its alpha/Spearman/MAE values are reference targets and reported reference observations, not Infinity results.
Evaluate the campaign as a set. The handbook uses distinct trigrams, mean pairwise embedding distance and top-three opener share relative to a frozen human baseline. Absolute numbers are less important than detecting that individually acceptable assets have converged into the same structure.
Use holdout/experiment cases for causal-language evaluation and deterministic assertions that every number appears in the metrics pack. Do not validate causal narration only against observational dashboards.
A qualifier disappears after repeated shortening. Every variant resolves claims independently from the original brief/current register; parent lineage is audit metadata, not generation input. The auditor explicitly diffs parent/child to catch dropped qualifiers.
A fluent “industry study” citation is not substantiation. Number-plus-attribution text is claim-bearing. A citation without a valid approved claim_id fails regardless of how plausible it looks.
One-context batch generation converges. Fan out per cell, vary frozen human exemplars within approved bounds, and evaluate distinctness at campaign level.
Native language quality and claim-market validity are orthogonal checks. A reviewer can approve the German while the register still prohibits the claim in DE.
Spend mix changes and conversions rise; the narrator credits creative. The attribution gate blocks causal verbs on observational data and the metrics pack exposes simultaneous changes.
Rights are evaluated at campaign end, not today. Only asset IDs returned by a rights-filtered search can reach staging.
Generated content feeding future exemplars makes the brand converge toward the model. Frozen human examples, authored_by metadata and periodic rescoring of the frozen set prevent that recursive drift.
Implement claims schema, resolve_claims, detector and final claim gate for one market/channel while humans still write. Freeze the human exemplar set and voice rubric before generated text exists.
Add variant writer, deterministic renderer, channel schemas, DAM rights filter and CMS/ad staging as drafts only. Add the adversarial auditor and CI gates immediately.
Add localisation with named native reviewers, the performance narrator behind attribution controls, expiry/dependency sweeps, competitive monitoring and the lead-quality event to Sales. Keep promotion closed while evidence accumulates, then open one low-legal-surface, high-volume channel in one market first.
The sequence is a handbook reference build order, not a delivery commitment. The invariant is sequencing: prove what is allowed first, stage generation second, and consider controlled external execution last.
Primary source: Article 10, “The Marketing Agent: Generation Is the Commodity, the Constraint System Is the Product”, and shared-platform patterns in The Enterprise Agent Mesh — Building Twelve Production AI Agents on Claude Code, September 2026.
Explicit web-edition qualifications: platform quotas are runtime adapter configuration; Marketo bulk workflows are asynchronous; claims, audience policy basis and DAM rights remain deterministic policy data; permission callbacks are not assumed to see auto-approved calls; idempotency uses durable business state; reference eval values are not presented as Infinity client results.
This is guide 10/12 for the business-function agents in Infinity Technologies’ AI-Agent Factory hexagonal mesh. It is separate from the InfinitySDLC engineering-agent series.
Previous: 09 Sales Agent — Make the CRM True, Then Worry About Selling.
Next: 11 Legal Agent — The Playbook Is the Program. Forthcoming; no unpublished page is linked here.










.png)
.png)
