{{ candidate.first_name }} reads a field and drops it in, an AI variable runs a short instruction against the record and inserts what it produces. It is the tool for the line that has to be different every time — an opener that ties someone’s background to a vacancy, or a birthday wish that does not read like a mail merge.
You use it exactly like any other variable:

Where you can add one
You can create AI variables in email templates, forms, and automations. The automation builder also offers presets, so a variable you use often does not have to be rebuilt by hand. WhatsApp message templates can reference variables, but the variable list there is read-only — you cannot create an AI variable from the message builder. Define it on the automation that sends the message instead.When to use one
Reach for an AI variable when all three are true:- the output has to be derived, not looked up;
- a fixed line with a fallback would read badly, because the value genuinely has to change per person;
- being slightly off is survivable — nobody makes a decision based on it.
When to use something else
Most personalisation is not an AI problem. Before adding an AI variable, check whether a plain variable or a modifier already does the job — they are faster, cheaper, and cannot be wrong.Setting one up
Open the variables panel with the{} control in the builder toolbar. Existing variables are listed with their key and type, so an AI one is easy to spot:


Choosing what the AI should do
Before anything else, the editor asks what kind of job this variable is doing. There are seven modes, each shown as a tile with a one-line description:
The mode is not locked in. Once you pick one, the tiles collapse into a compact dropdown, and you can change it whenever you like — reopen the variable and choose a different mode under What should the AI do?. The rest of the form adjusts to match.
The rest of the editor

An AI variable does not have to produce prose. Because you choose the return type, one can just as well resolve to a
Yes / No, a Number, or a value from a List — which is what the Classify and Extract modes are for. The warning above still applies: deriving a value from data in the record is fine, inventing one is not.Giving it something to work from
The instruction alone is rarely enough — the model needs the record. There are two ways to hand it over, and they can be combined.Inline in the prompt
Type{{ anywhere in the Input box and a picker appears, listing every variable available to this template with its key and its type. Keep typing to filter, then choose one to insert it:

{{recipient.first_name}}.
The Variables tab
Switch to the Variables tab and choose Add Field to attach fields instead of naming them in the prompt. Each row is a searchable picker over the same list of variables, and the− button removes one.

Why the inputs matter
The fields you reference, by either method, are the variable’s inputs — and inputs are what decide when it is worked out again. Give it the fields it genuinely depends on rather than describing them in prose. See Limitations.Writing the instruction
A usable instruction names its shape and its limits. Let the dedicated controls do the work they are there for — set the output language in the Language control rather than describing it in the prompt, and set the return type rather than asking for one:Write a friendly, single-sentence birthday wish, maximum 20 words. Vary the wording so it does not sound templated. No emoji. Do not open with “Happy birthday”. If the recipient’s name is missing, write a general wish with no name.That last sentence matters most. Say what to do when the data is missing, or the model will invent something to fill the space. Longer instructions are not better instructions. Constraints do more work than description. State the maximum length, the tone, what it must not do, and what to produce when the source data is thin.
Limitations
It resolves once per send, then repeats. The value is generated the first time the variable is referenced and reused for every other mention in the same message — so{{ celebration }} twice in one email gives you the same sentence twice, not two attempts. It is worked out again when its inputs change, which is what makes it per-recipient. A variable with no inputs attached has nothing to vary on.
A stored default is not a safety net. For an AI variable, the default value is the slot the generated value is written into, not a fallback you can set. If the model returns nothing, the variable resolves to nothing. To guarantee something lands on the page, use the default modifier where you reference it:
Before you send
1
Test with complete data
Confirm the value reads well and stays inside your length limit.
2
Test with missing and empty data
This is where AI variables fail. Check that a thin record produces something acceptable rather than a hallucinated detail or an empty line.
3
Test in every language you send in
Tone and formality do not transfer between languages. A line that reads warm in English can read overfamiliar in Dutch.
4
Read it as the recipient
Ask whether a candidate would be embarrassed, confused, or misled by this sentence. If the answer is maybe, tighten the constraints or use a fixed line.
Related
- Variables — the basics and where variables work
- Modifiers — deterministic formatting, defaults, and casing
- Setting a default language and AI tone of voice
- Why didn’t my automation run?