# RECIPES.md — installing the Article 50(1) disclosure on six chat platforms
> **Engineering tooling, not legal advice.** These recipes implement the
> disclosure obligation in Article 50(1) of Regulation (EU) 2024/1689, as
> described by the Commission's Guidelines C(2026) 5054 final of 20 July 2026.
> They do not make you compliant, they do not cover Article 50(2), (3) or (4),
> and Commission guidelines are non-binding — only the CJEU can authoritatively
> interpret the AI Act. Sources are cited so you can check every claim:
> `/research/`.
**Applies from 2 August 2026.** Not delayed by the Digital Omnibus — see
`research/03-application-dates-and-digital-omnibus.md`.
---
## Rule zero — prefer the platform's own setting over our script
If your chat platform can show a first-turn message or a persistent label from
its own settings, **use that**. A config field you set is more robust than a
script that injects into someone else's DOM: it survives their redesigns, it
cannot be broken by a CSP change, and it is one less dependency.
Use `disclosed.js` when the platform gives you no such field, when you need the
same wording across many clients, or when you want the disclosure positioned
where the platform will not put it.
---
## The disclosure text
The Commission's own example wording, from Guidelines paragraph (37):
> **You are interacting with an AI system.**
The widget renders that, plus an accuracy note, plus an optional link:
> **You are interacting with an AI system.** Responses are generated
> automatically and may be inaccurate. *How this works*
Polish:
> **Rozmawiasz z systemem sztucznej inteligencji (AI).** Odpowiedzi są
> generowane automatycznie i mogą być niedokładne. *Jak to działa*
Using the regulator's phrasing is deliberate. It costs nothing and removes an
argument about whether the wording is clear enough.
---
## Generic install
```html
```
Options: `target`, `lang` (`auto`|`en`|`pl`), `position` (`top`|`above-input`),
`link`, `text`, `theme`. Every option has a working default; the zero-config
case is correct.
The widget waits for the chat to mount (chat platforms load asynchronously),
renders once, makes no network calls, writes no cookies or localStorage, and
fails silently if the container never appears.
---
## Verify it yourself — the four checks
Do these in your own browser on every install. **Do not take our word for it.**
1. **Open the chat as a first-time visitor** (private window). Is the disclosure
visible *before* you type anything? → S3, Art. 50(5)
2. **Read it.** Does it contain the words "AI" or "artificial intelligence"?
*"Assistant"*, *"powered by Intercom"* and *"smart replies"* do not count. →
S2, Guidelines (38)
3. **Tab to it with the keyboard, and run a screen reader if you have one.** Is
it announced? Is it `aria-hidden`? → S7, Art. 50(5)
4. **Ask the bot "are you a human?"** Does it say it is an AI? → S9,
Guidelines (40)
Check 4 fails on nearly every default install. See below.
---
## S9 — the check almost everyone fails
Guidelines paragraph (40):
> Providers must also design and develop the AI system to ensure disclosure in
> all situations where the AI system is being asked questions relating to its
> nature or to the origin of the interaction, or where it can be reasonably
> assumed from the exchanges with the natural person that that person is likely
> to be misled or confused about the AI origin of the interaction.
**No injected snippet can satisfy this.** It is a property of the model's
instructions, not of the page. Add to your system prompt, in the bot's language:
```text
If the user asks whether you are human, what you are, who they are talking to,
or otherwise appears unsure whether they are talking to a person, say plainly
and immediately that you are an AI system. Never claim or imply that you are
human, and never deflect the question.
```
For rule-based bots with no model, add an intent that matches "are you human",
"are you a bot", "is this a real person" and replies with the same statement.
---
## The six platforms
Each recipe: prefer the native setting; otherwise install the script; then run
the four checks.
> ⚠️ **Dashboard menu paths are not reproduced here because they were not
> verified for this release.** Platform UIs change often and a wrong menu path
> is worse than none. Each recipe tells you *what* to look for; find it in the
> current UI and confirm with the four checks. Verifying and pinning exact paths
> per platform version is tracked as an open item.
### 1. Intercom
Intercom can show an introductory message when a conversation opens. **Look for
the intro/greeting message setting on the Messenger and put the disclosure
there** — that satisfies S1–S3 natively and survives Intercom's updates.
Watch for: an intro message that shows only on the *first ever* conversation.
S5 requires the disclosure at the start of **each session**, so a
once-per-visitor greeting is not enough on its own. If that is the behaviour,
add the script as well.
Script fallback:
```html
```
Intercom's own AI agent answers questions about itself, but **verify check 4 in
your own workspace** — the answer depends on your configuration.
### 2. Tidio
Widely used by EU SMEs and the most likely platform in an agency's client book.
Prefer Tidio's own pre-chat / welcome message field if it renders inside the
chat window. If the welcome message is a *bot node* rather than a static label,
make it the **first** node so it fires before any user input.
Script fallback:
```html
```
**Tidio renders in an iframe in some configurations.** A script on the host page
cannot inject into a cross-origin iframe. If `#tidio-chat` resolves to an
`