Example: A Marketer Agent
A complete, ready-to-use agent configuration: profile, instructions, context, and a guardrail, as one example to copy.
Installation walks through each piece mechanically. This page pulls them together into one working example, a Marketer Agent on Anthropic Claude. It adds the context and guardrail that make its answers noticeably better and safer, not only functional.
Profile
An Engage Anthropic Chat Profile on a current Claude model.
Instructions
The same starting point from Installation:
You are a Marketer Agent specialized in Umbraco Engage inside Umbraco CMS.
Your main role is to help marketers, editors, and website owners understand,
analyze, and act on Umbraco Engage campaign and analytics data. Focus on
practical marketing insight, not raw numbers.Context
Five Context resources are attached to the agent, split across three jobs. Two general rules apply on every request. Two reference resources the model only pulls in when it needs them. One more applies only in Copilot Workspace.
Always, on every request
Null Semantics Discipline is a plain-text resource that stops the agent from misreading a missing measurement as a zero:
Marketer register is a Brand Voice context, a resource type with dedicated fields rather than free text:
Tone
Marketing-friendly language, not developer jargon.
Target Audience
Marketers, editors, and website owners.

Brand Voice also has Style Guidelines and Patterns to Avoid fields, left empty here. Fill them in if you want tighter control over phrasing.

On-Demand, only when needed
Rather than being added to every request, the model retrieves these itself via a tool call, only when the question calls for them.
Urchin Tracking Module (UTM) vocabulary:

Example answer:

Always vs. On-Demand is a real trade-off. Always guarantees the agent has it in mind for every answer, at the cost of a few extra tokens on every request. On-Demand keeps requests smaller and only pulls the resource in when relevant. This suits reference material like a vocabulary list or style example that most questions won't need.
Workspace only: a display-behavior context
The full-width layout in Copilot Workspace has room for more than a short sentence. Umbraco Engage AI doesn't format answers itself; that's entirely up to the agent's Instructions and any Context attached to it. A Context resource scoped to the Workspace surface can tell the agent to take advantage of the extra space:

Without a context like this attached, Workspace answers read the same as sidebar answers: plain text, and a Markdown table when the data fits. With it, a prompt like "show our top pages by pageviews for this year" renders as a table plus an ASCII bar chart:

Markdown and plain text are the ceiling on either surface. Neither can render SVG, HTML, canvas, or Mermaid; a context that asks for those produces raw code instead of a rendered chart.
Guardrail
Umbraco Engage AI's tools only ever return aggregates and marketer-authored labels: campaign names, segment counts, performance figures. They can't return an individual visitor's Personally Identifiable Information (PII), so there's nothing to filter on the way out. The real risk sits on the way in. A marketer might paste something like "a visitor with email [email protected] keeps abandoning cart" into the chat. Unless something stops it, that personal data gets sent straight to your AI provider.
A guardrail can catch this before it happens. Guardrails are an Umbraco.AI feature. They evaluate a request against a set of rules and act (block, redact, and so on) when one matches. They apply to whichever agent they're attached to, on either Copilot surface.
Example: Input PII Redaction
A guardrail with two rules, both Regex Match, phase Pre-Generate, action Redact, evaluated before the message reaches the model and replacing any match with [REDACTED]:
[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}
Central Person Register (CPR), Danish national ID
\b\d{6}-\d{4}\b



Attaching a guardrail to an agent
A guardrail does nothing until it's attached to an agent:
Open the agent, go to the Governance tab.
Scroll to Guardrails, click Add, and select the guardrail.
Save.

What it stops
Same message, sent to two agents: one with the guardrail attached, one without.
The reply itself made sense either way. Only the guardrail decided whether personal data made the trip to the provider.
Limits worth knowing
Best-effort, not comprehensive. Regex rules catch the specific patterns you define; these two cover email addresses and Danish CPR numbers, nothing else. Add more rules the same way for other PII you expect marketers to paste, such as phone numbers, other national IDs, or card numbers. Test each against realistic input before relying on it.
Pre-Generate acts on the input, not the answer. These rules run on what the user sends, not on what the assistant replies with.
Putting it together
Create the profile and connection (Installation, Steps 2 and 3).
Create the agent with the Instructions above (Installation, Step 4), selecting that profile.
Attach the Context resources under Agent Behavior on the Settings tab (the Display Behavior one only if the agent will be used in Copilot Workspace).
Grant it the Engage Read permission and attach the Input PII Redaction guardrail, both under Governance (Installation).
Attach the agent to whichever surface(s) you want it available on (Installation).
None of this is required to get a working agent. A profile, a granted permission, and a short set of Instructions is enough, as Installation shows. This is what a more deliberately configured one looks like.
Last updated
Was this helpful?