# ai-register

> Tenir un registre des outils d’IA de votre projet, de leurs données, base légale et transferts, et laisser un contrôle souple signaler toute intégration d’IA du dépôt que le registre ignore.

Canonical: https://bmad-plus.rochetta.fr/fr/docs/reference/cli-ai-register/
Language: fr
BMAD+ version: 0.23.1
Documentation reviewed: 2026-10-19
Author: Laurent Rochetta
License: MIT

Documentation BMAD+ › [Référence](https://bmad-plus.rochetta.fr/fr/docs/reference/) › ai-register

Les assistants de code, les lignes de commande d’agents, les API de modèles appelées par votre produit et les serveurs MCP traitent tous des données, parfois personnelles. `ai-register` tient un fichier, `_bmad/ai-processing-register.yaml`, qui dit pour chaque outil qui le fournit, dans quel but, quelles données il voit, sur quelle base légale, pour combien de temps et où vont les données hors EEE. Son action `check` cherche les intégrations d’IA du dépôt et signale celles que le registre ne couvre pas. Il fait partie de la boîte à outils du pack Shield et sert à qui doit préparer un registre des traitements, une AIPD qui implique des outils d’IA ou une revue de fournisseurs.

> **Remarque · Une porte souple, volontairement** Une entrée manquante est un avertissement et ne fait jamais échouer une construction ; seul un registre illisible sort avec un code non nul. Le registre consigne les traitements, il ne les rend pas licites. La base légale, le mécanisme de transfert et les accords relèvent du responsable de traitement et de son DPO, et le contrôle ne voit que la configuration du dépôt : un outil installé sur le poste d’un développeur sans fichier de projet se trouve en demandant, pas par le contrôle.

<a id="synopsis"></a>
## Synopsis

**Dans le terminal de votre projet**

```sh
npx bmad-plus ai-register init [-d <path>] [--json]
npx bmad-plus ai-register check [-d <path>] [--json]
```

**Actions et options de ai-register**

| Option ou action | Argument | Défaut | Ce qu’elle fait |
| --- | --- | --- | --- |
| `init` | - | - | Copie le modèle Shield vers `_bmad/ai-processing-register.yaml`. N’écrase jamais un registre existant. Les entrées du modèle sont des exemples : `check` continue donc d’avertir tant que vous ne les avez pas remplacées. |
| `check` | - | - | Détecte les intégrations d’IA du projet, les compare au registre et affiche le résultat. |
| `-d, --directory` | `<path>` | dossier courant | Dossier du projet. |
| `--json` | - | désactivée | Sortie lisible par machine (`schemaVersion: 1`). |

<a id="register-file"></a>
## Le fichier de registre

**Forme d’une entrée (issue du modèle Shield)**

```yaml
schema: bmad-plus/ai-processing-register/1
controller: Example Ltd, 1 Example Street, Example City
reviewed: 2026-09-29
tools:
  - id: coding-assistant
    name: Claude Code
    provider: Anthropic PBC
    integrations: [claude-code]
    purpose: Assist developers in reading, writing and reviewing the code of this repository.
    data:
      - Source code and commit history of this repository
    personalData: true
    legalBasis: legitimate-interests
    retention: The period set by the provider’s terms, written here in days.
    transfers:
      - to: United States
        mechanism: standard-contractual-clauses
    agreement: Data processing addendum attached to the commercial terms.
```

**Règles que le contrôle impose**

| Champ | Règle |
| --- | --- |
| `schema` | Doit valoir `bmad-plus/ai-processing-register/1`. Les clés de premier niveau inconnues sont refusées (admises : `schema`, `controller`, `reviewed`, `tools`). |
| `controller` | Texte obligatoire : qui est responsable du traitement. |
| `reviewed` | Date obligatoire écrite `YYYY-MM-DD`. Le contrôle avertit quand elle date de plus de 365 jours. |
| `tools[].id` | Unique, minuscules, chiffres et tirets. |
| `tools[].name`, `provider`, `purpose`, `retention` | Texte obligatoire de 2000 caractères au plus. |
| `tools[].integrations` | Liste non vide des identifiants d’intégration que l’entrée couvre : un identifiant d’outil d’adaptateur (`claude-code`, `gemini-cli`, `antigravity`, `cursor`, `codex-cli`, `opencode`, `aider`), un autre outil comme `github-copilot`, `windsurf` ou `continue`, ou `mcp:<server name as declared>`. Un identifiant ne peut être couvert que par une seule entrée. |
| `tools[].data` | Liste non vide des catégories de données que l’outil voit. |
| `tools[].personalData` | `true` ou `false`, obligatoire. |
| `tools[].legalBasis` | Obligatoire quand `personalData` vaut `true`, interdit sinon. L’une de `consent`, `contract`, `legal-obligation`, `vital-interests`, `public-task`, `legitimate-interests` (RGPD art. 6, par. 1). |
| `tools[].transfers` | Liste obligatoire, `[]` pour aucun. Chaque élément est `{ to, mechanism }` avec un mécanisme parmi `adequacy-decision`, `standard-contractual-clauses`, `binding-corporate-rules`, `derogation`. |
| `tools[].agreement` | Texte facultatif : l’accord de traitement en place. |

<a id="reads-writes"></a>
## Ce qu’il lit et écrit

- `init` écrit un seul fichier, `_bmad/ai-processing-register.yaml`, en créant `_bmad` si besoin. Il refuse si `_bmad` n’est pas un dossier (un lien écrirait hors du projet).
- `check` n’écrit rien. Il lit le registre (jusqu’à 256 Ko) et cherche des intégrations d’IA à quatre endroits : les fichiers d’adaptateurs que BMAD+ installe (`CLAUDE.md`, `GEMINI.md`, `.cursor/rules/bmad-plus.mdc`, `.codex/AGENTS.md`, `.opencode/AGENTS.md`, `CONVENTIONS.md`), les marqueurs propres aux outils (`.claude`, `.cursor`, `.cursorrules`, `.gemini`, `.codex`, `.opencode`, `opencode.json`, `.aider.conf.yml`, `.github/copilot-instructions.md`, `.windsurf`, `.windsurfrules`, `.continue`) et les serveurs MCP déclarés dans `.mcp.json`, `.cursor/mcp.json`, `.gemini/settings.json` et `.vscode/mcp.json` (commentaires et virgules finales acceptés).
- Rien n’est envoyé nulle part et aucun programme n’est lancé. Les liens symboliques ne sont pas suivis.

<a id="exit-codes"></a>
## Codes de sortie

**Codes de sortie par action**

| Action | Code | Signification |
| --- | --- | --- |
| `init` | 0 | Registre écrit. |
| `check` | 0 | Le registre a été lu ou est absent. Les avertissements n’y changent rien. |
| `check` | 1 | Le registre existe mais est inutilisable : illisible, YAML invalide, ou une règle ci-dessus n’est pas respectée. La raison s’affiche en `error`. |
| `init`, autre | 3 | Action inconnue (`ai-register: unknown action "x" (init, check)`) ou échec de `init` (par exemple le registre existe déjà). |

<a id="real-output"></a>
## À quoi ressemble la sortie

Les transcriptions sont composées à partir des modèles de messages du code source, sur un projet imaginaire qui utilise Claude Code et un serveur MCP GitHub, puis ajoute Cursor. Elles sont marquées comme simulées.

**Démarrer le registre, puis le contrôler**

```text
$ npx bmad-plus ai-register init
_bmad/ai-processing-register.yaml: started from the Shield template. Replace the example entries, then run bmad-plus ai-register check.
$ npx bmad-plus ai-register check
_bmad/ai-processing-register.yaml: reviewed 2026-09-29 — 2/2 AI integration(s) registered
  registered claude-code → coding-assistant
  registered mcp:github → issue-tracker-connector
# Le 2/2 suppose que le .mcp.json du projet déclare un serveur github. Sans lui, le compte est 1/1 et une ligne indique que mcp:github est « not found here (may be used outside the repository) ».
```

Sortie capturée lors d’une exécution réelle. Source: Rejoué avec le paquet 0.23.0 (packs Core et Shield, Claude Code) dans un projet jetable dont le .mcp.json déclare un serveur github

**Un outil que le registre ignore**

```text
$ npx bmad-plus ai-register check
_bmad/ai-processing-register.yaml: reviewed 2026-09-29 — 2/3 AI integration(s) registered
  registered claude-code → coding-assistant
  registered mcp:github → issue-tracker-connector
  warning   cursor is set up (.cursor/rules/bmad-plus.mdc, .cursor) but not in the AI processing register
  Add each tool with its purpose, data, legal basis, retention and transfers; see the Shield template shared/ai-processing-register-template.yaml.
# Code de sortie 0 : un avertissement ne fait jamais échouer la commande.
```

Sortie capturée lors d’une exécution réelle. Source: Rejoué avec le paquet 0.23.0 dans le même projet jetable après ajout de l’adaptateur Cursor

Autres lignes possibles : `<file>: absent — 0/N AI integration(s) registered` avec l’avertissement `no AI processing register at _bmad/ai-processing-register.yaml` quand il y a des intégrations mais pas de registre ; `warning   the register was last reviewed on <date>, <n> days ago` ; `not found here (may be used outside the repository): <ids>` pour les entrées qui ne correspondent à rien dans le dépôt (normal pour une API de modèle appelée seulement par votre produit) ; et des lignes `error` sur le flux d’erreur quand le registre est invalide. Avec `--json`, le résultat comporte `status` (`ok`, `warning` ou `error`), `integrations` (chacune avec `ids`, `sources`, `coveredBy`), `unmatched`, `warnings` et `errors`.

<a id="doctor"></a>
## Le même contrôle dans doctor

Quand le pack Shield est installé, `bmad-plus doctor` exécute la même comparaison sous le contrôle `shield.ai-register`. C’est un `pass` (« AI processing register covers the N AI integration(s) found. ») ou un `warning` qui liste les problèmes et renvoie à `bmad-plus ai-register check`. Doctor n’en fait jamais une erreur : un registre incomplet ne fait donc pas échouer le contrôle de santé d’une installation.

<a id="errors"></a>
## Erreurs et que faire

**Messages de ai-register**

| Message | Cause | Que faire |
| --- | --- | --- |
| `ai-register: _bmad/ai-processing-register.yaml already exists` | `init` n’écrase jamais. | Modifiez le fichier existant, ou déplacez-le d’abord. |
| `ai-register: _bmad is not a folder` | Autre chose qu’un dossier se trouve à `_bmad`. | Retirez-le ou renommez-le, puis relancez `init`. |
| `ai-register: unknown action "x" (init, check)` | L’action n’est ni `init` ni `check`. | Utilisez l’une des deux actions. |
| `error     _bmad/ai-processing-register.yaml: tool X: legalBasis must be one of ...` | `personalData` vaut true et la base légale manque ou est inconnue. | Choisissez l’une des six bases légales, ou mettez `personalData: false` et retirez `legalBasis`. |
| `error     ... tool X: transfers must list where data goes outside the EEA ([] for nowhere)` | La liste `transfers` manque. | Ajoutez `transfers: []`, ou les destinations avec leur mécanisme. |
| `error     ... tool X: <id> is already covered by Y` | Deux entrées revendiquent le même identifiant d’intégration. | Gardez l’identifiant dans une seule entrée. |
| `error     ... register: schema must be "bmad-plus/ai-processing-register/1"` / `unknown key(s) ...` | Mauvaise ligne `schema` ou clé non reconnue. | Corrigez la ligne `schema`, retirez ou renommez la clé inconnue. |
| `error     ... register: reviewed: expected a date written YYYY-MM-DD` | La date de revue n’est pas une vraie date de calendrier sous cette forme. | Écrivez-la `2026-09-29`. |
| `warning   <file> cannot be read (...); its MCP servers are not checked` | Un fichier de déclaration MCP n’est pas du JSON valide (commentaires et virgules finales passent). | Corrigez le fichier ; d’ici là ses serveurs ne sont pas comparés. |
| `warning   <file> declares the MCP server "<name>", whose name cannot be registered; it is not checked` | Le nom du serveur contient des caractères qu’un identifiant de registre ne peut pas porter. | Renommez le serveur dans le fichier MCP, ou gardez une note à son sujet hors du registre. |

<a id="examples"></a>
## Exemples

<a id="example-cli-ai-register-inventory"></a>
### Inventorier les outils d’IA et remplir le registre

Votre équipe utilise un assistant de code et deux serveurs MCP, et personne n’a noté ce qu’ils voient.

**Dans votre assistant IA**

```text
Shield, quels outils d’IA touchent aux données de ce projet ? Lance le contrôle du registre, crée le registre s’il n’y en a pas, et remplis une entrée par outil. Demande-moi ce que tu ne peux pas lire dans le dépôt au lieu de le deviner.
```

**Ce que vous devriez obtenir** Shield lance `bmad-plus ai-register check`, liste les intégrations trouvées (fichiers d’adaptateurs, dossiers d’outils, serveurs MCP) et celles sur lesquelles il doit vous interroger parce qu’elles ne laissent aucune trace dans le dépôt, comme une API de modèle appelée par votre produit. Il lance `ai-register init`, remplace les exemples du modèle par une entrée par outil, en remplissant fournisseur, finalité, données, durée de conservation et transferts d’après les conditions du fournisseur et ce que l’outil peut lire, et dit clairement quand un fait est inconnu. Pour les entrées avec données personnelles, il propose une base légale que vous tranchez. Il termine en relançant `check` et en rapportant les intégrations enregistrées et les avertissements restants.

<a id="example-cli-ai-register-before-dpia"></a>
### Contrôler le registre avant une AIPD

Vous allez conduire une analyse d’impact sur la protection des données pour une fonctionnalité qui utilise des outils d’IA.

**Dans votre assistant IA**

```text
Shield, avant de commencer l’AIPD, vérifie que le registre des traitements IA est complet et revu. Liste les outils sans entrée, les entrées sans base légale et tout ce qui a été revu il y a plus d’un an.
```

**Ce que vous devriez obtenir** Shield lance `bmad-plus ai-register check` (lecture seule). Il rapporte chaque ligne `warning` (outils configurés mais non enregistrés, revue de plus de 365 jours) et, si le registre est invalide, chaque ligne `error`, ce qui signifie aussi le code de sortie 1. Il lit ensuite le fichier de registre pour repérer les entrées qui demandent encore une décision, et rappelle que la détection ne voit que ce qui est configuré dans le dépôt. Il ne choisit pas une base légale à votre place ; pour un traitement à grande échelle ou nouveau, il recommande de poursuivre avec le workflow d’AIPD.

**Voir aussi**

- [Vue d’ensemble de la CLI](https://bmad-plus.rochetta.fr/fr/docs/reference/cli-overview/)
- [doctor : rapporte le même contrôle comme avertissement](https://bmad-plus.rochetta.fr/fr/docs/reference/cli-doctor/)
- [assurance : l’autre fichier de preuves de Shield](https://bmad-plus.rochetta.fr/fr/docs/reference/cli-assurance/)
- [Adaptateurs : les fichiers que le contrôle cherche](https://bmad-plus.rochetta.fr/fr/docs/reference/adapters/)

[Documentation BMAD+](https://bmad-plus.rochetta.fr/fr/docs/) · [Référence](https://bmad-plus.rochetta.fr/fr/docs/reference/)

[Code sur GitHub](https://github.com/lrochetta/BMAD-PLUS)
