Adaptyle
Adaptyle rewrites the passages you mark using each customer’s data. Write one email, then adapt its opening or product explanation for different people. Your layout, offer and links stay fixed.
Use it in templates, broadcasts and workflow email steps. maxinja can build the email and its instructions from your brief, or you can add them in the composer.
One instruction, three customers
Loopwell wants new signups to create their first project. The instruction asks for a project based on each person’s goal, progress and team context, without repeating work a teammate has already started.
- Goal
- Launch in 10 days
- Own projects
- 0
- Teammate owns
- Launch assets
- Still missing
- Sales and design sign-off
Hi Maya,
Create a project for launch plan sign-off, separate from Daniel’s launch asset project. Add a next step to get sales and design approval, so ownership and the next milestone are clear as you coordinate the product launch in 10 days.
Create your first projectMaya’s email recommends launch sign-off, Leila’s recommends grouping interview notes, and Hugo’s recommends preparing a client handoff. These are saved, unedited Adaptyle outputs for fictional customers. The greeting uses a supplied first name; the generated paragraph changes; the Create your first project button stays fixed.
Keep the facts. Adapt the message.
| Content | Use | Loopwell example |
|---|---|---|
| A supplied value | Liquid | The customer’s first name. |
| A reason to act | Adaptyle | Suggest a first project from their goal and unfinished work. |
| Required campaign content | Authored copy or Liquid outside AI regions | The Create your first project button and its destination. |
Use Liquid when the answer is an existing value. Use Adaptyle when the message needs to explain what that value means for the customer. Generated wording can vary; a unique sentence for every recipient is not guaranteed.
Before you begin
- Open a draft email with a subject, sender and the content you want to personalize.
- In Data, choose a sample contact and the fields the instruction needs. Select any Evaluated attributes and related records explicitly.
- Select a published brand kit for its writing guidance.
- Under Personalize → Runs with, set Model and Thinking. Previews and regenerations use AI credits.
Write your first instruction
- Select the paragraph in the visual composer and choose Adaptyle from the text menu.
- Describe the writing job in the block’s instruction. For Loopwell: “Suggest a useful first project from their goal, progress and team context. Give one next step. Avoid work their teammates have already started.”
- Keep the greeting, required campaign facts and button outside that block.
- Generate a Personalized preview. Select another contact in Data and regenerate to compare the messages.
- Check each message against its source facts, including a customer with missing context. Narrow or refine the instruction before sending.
The instruction belongs to the template. The recipient sees the resulting email, without the Adaptyle block or its instruction. Follow the personalization guide for the complete editor walkthrough.
Choose the customer data
The rendering context includes the configured recipient data and selected published brand kit. Stored customer fields and tags provide facts for the instruction. A campaign cannot use information that has not been supplied or selected.
On-demand evaluated fields, scheduled evaluated fields and related records must be selected explicitly. Open the Data tab, expand the contact row and select the fields your instruction needs. Check a sample value before relying on it in the message.
Describe what to write from that context and what to do when a field is absent:
Suggest a first project from the customer’s supplied goal and progress.
If the goal is absent, explain how to name a project and add one next step
without assuming what the customer is working on.
Protect the parts that must stay fixed
Text outside prompt regions is checked against the Liquid-resolved reference, with document-edge whitespace normalized. Hidden placeholders are checked for their position and occurrence count. The final email checks protect links, attributes, stylesheets and structural context from the AI rewrite.
Keep buttons, image URLs, offer terms and required wording outside AI regions. Give prompts a writing task inside an existing layout. Asking a runtime prompt to add new styled sections, change link destinations or redesign the HTML can fail validation. Make those structural changes while authoring the draft instead.
These checks establish content and structural boundaries. They do not prove that every generated statement is true, that an instruction achieved the desired tone, or that every email client displays the result identically. Compare representative recipient samples and send inbox tests.
What it costs
AI usage is metered for personalized rendering, including previews and regenerations. At campaign scale, each recipient whose content is personalized adds model usage. Content outside AI regions is preserved through the rewrite; Liquid still resolves its supplied values.
Select the passages where context changes the message, such as the opening or product explanation. If no instructions remain after Liquid resolves for a recipient, that render skips the model call. Other recipients can still need AI. Sending allowances, application work, possible correction calls and campaign reviews are separate; see the editor estimate and billing.
An email with instructions requires its own model and thinking settings under Personalize → Runs with. Those settings are used during rendering; the workspace default is not a fallback.
Resolve a failed personalization
| Symptom | What it means | Next step |
|---|---|---|
| Model or thinking setting missing | The template’s runtime AI configuration is incomplete. | Set both in Personalize, then generate again. |
| Adaptyle syntax error | A delimiter, nesting structure or manifest cannot be parsed. | Fix the marked source; retrying unchanged syntax will not help. |
| Protected text, placeholder or link changed | The generated result exceeded its allowed edit scope. | Narrow the prompt and keep layout and essential facts outside it. |
| Locale mismatch | Subject/body languages disagree, or the campaign’s approved locale no longer matches. | Align the manifest language and campaign settings. |
| Empty subject/body or invalid final artifact | The result is not a sendable email. | Inspect the Base sample first, then the generated passage and markup. |
| Credits or provider capacity unavailable | Rendering could not proceed with its current resources. | Check billing and the campaign/run status before restarting work. |
Correction attempts may use additional model usage. Qualified broadcasts use the correction budget in their campaign policy; a failed render is not permission to send unvalidated output. See broadcast preparation for how this affects an audience send.
If a broadcast is held for quality, open its Quality review tab and inspect the exact generated email, the source facts and the reported issue. An editor preview does not approve that output. Some noncritical issues allow a human decision with a reason; critical grounding, safety, privacy and consent issues cannot be overridden. Follow review a quality hold for the available actions.
Why a later refresh may not change an active send
A standalone sample resolves selected scheduled Evaluated fields against its current read context. A broadcast revision or root workflow run captures the calculation generation, freshness policy and observation time on its first read; child runs inherit that context. Publishing a newer calculation does not replace that captured selection. This fixes the scheduled calculation context, not every live customer field or on-demand lookup.
An enabled calculation with no complete publication or an expired publication fails the expansion for that decision. Refreshing the calculation later does not repair an already captured unavailable selection. A paused definition can use its captured last-published policy; a valid publication with no subject result can return null. An erased pinned generation fails rather than switching to a newer one. Check the record’s Published value, Data through and status, then compare the sample with the execution context. See attribute expansion.
Write instructions in a code editor
Put an instruction between <<< and >>> anywhere in your subject or body:
<p><<<Suggest a first project using this customer’s supplied goal.
If the goal is absent, describe how to start without assuming one.>>></p>
The instruction is evaluated with each recipient's context. Generated wording can vary; distinct wording for every recipient is not guaranteed.
Rewriting something you already wrote
If you already have copy you like and want it tailored, put your instruction first, then :::, then your copy:
<p><<<Adapt this opening to their supplied project goal:::Create your first project.>>></p>
Everyone gets a version of your sentence rather than something written from scratch. Use this when you want to keep control of the message and only personalize the edges.
Hide static markup from the model
If a chunk of your email is styling or markup rather than words, wrap it in <## and ##> with a name, a :::, then the content. The model sees only the name, and your content is put back exactly as you wrote it:
<div <##card-style:::style="font-family: sans-serif; padding: 16px;"##>>
<<<Suggest a first project from this customer’s goal.>>>
</div>
Hidden blocks remove those bytes from the model’s view and restore them afterwards. This can reduce tokens for large static sections; a short placeholder can cost more than the text it replaces. Give each block a different name. Hidden content still becomes part of the final email and must pass its HTML checks.
Add a writing brief and language
In the MJML and HTML code editors you can add a short brief at the very top of the template, between <<# and #>>. It never appears in the email. Its only job is to give the model context.
Use description for the writing brief. maxclicks combines the subject and body descriptions into one email context. Declare locale when the email needs an explicit language:
<<#
locale: en-GB
description: |
Help new Loopwell customers create a first project.
Audience: recent signups. Tone: clear and practical.
#>>
The email renderer replaces your manifest title with its email title. Use
description for instructions and locale for a valid language tag such as
en-GB or de-DE. Subject and body locales must agree. A qualified AI
broadcast requires an explicit locale matching its approved campaign settings.
A manifest tools entry does not make an external tool available during email
rendering.
What happens during a render
- maxclicks resolves the email’s declared data, selected expansions and branding.
- Liquid resolves values, loops and conditions once. This establishes the reference content for that recipient. Values supplied by a contact cannot introduce new Adaptyle instructions.
- Subject and body are processed together as one document. The model resolves the authored prompt regions with the whole email in view. Nested instructions are not a promise of one separate model call per prompt.
- maxclicks checks that the output preserved protected content and hidden placeholders, resolved the instructions, and produced a valid subject and body.
- The footer is added, MJML is compiled when needed, and the final HTML is validated before it becomes sendable content.
The model receives the supplied data object and branding, not just the fields you mention in a sentence. Keep the declared data and expansions relevant to the email. It does not fetch an unspecified order history or generate a new image merely because an email prompt asks for one.
Getting good results
- Describe the outcome, not the words. "Write a one-line reason to come back, based on what they bought" beats "Say we miss them".
- Keep it to a handful. More than 10 instructions in one email is a sign the email is doing too much, and maxclicks warns you.
- Nested prompts share one email context. Subject and body are processed together; nesting does not create a guaranteed sequence of separate model calls. Keep the intended edit scope clear. More than two nesting levels triggers a warning.
- Inspect representative samples. Compare the source fields with the generated message for an engaged customer, an infrequent customer and someone with missing context. A later render can produce different wording.
- Keep essential facts fixed. Put amounts, deadlines, required wording and links outside AI regions. Inspect generated claims as well: preserving fixed blocks does not establish that every generated statement is accurate.
Writing the symbols literally
If you need <<< or ::: to appear in the email as text rather than as an instruction, write the escape code instead and maxclicks prints the symbol:
| To print | Write |
|---|---|
<<< | <##ESCPO##> |
>>> | <##ESCPC##> |
::: | <##ESCS##> |
<## | <##ESCHO##> |
##> | <##ESCHC##> |
<<# | <##ESCMO##> |
#>> | <##ESCMC##> |