Le problème : les interfaces créées par l'IA se ressemblent toutes
Demandez à n'importe quel agent de code de « créer une landing page » et vous obtiendrez la même chose : un hero presque noir, un dégradé violet, la police Inter, trois cartes de fonctionnalités avec des coins arrondis. C'est compétent mais totalement générique, car le modèle n'a aucune mémoire de votre marque entre deux prompts. Ajoutez une seconde page et le style dérive : espacements différents, un bleu légèrement différent, une nouvelle forme de bouton. Il n'y a aucune source de vérité pour l'aspect visuel, donc aucune cohérence.
Il est important d'être précis sur le pourquoi, car la raison détermine la solution. Le modèle n'échoue pas en design. Il fait exactement ce qu'on lui a demandé : produire l'interface la plus probable compte tenu de la requête. En l'absence de contrainte, l'interface la plus probable est la moyenne de tout ce qu'il a vu, et tous ceux qui promptent sans contraintes arrivent au même résultat.
Un modèle sans contrainte produit la moyenne de ses données d'entraînement. Quiconque prompte sans contraintes obtient cette même moyenne.
Cela redéfinit la solution. Vous ne cherchez pas à rendre l'agent plus créatif. Vous cherchez à l'extraire de cette moyenne pour le maintenir dans un cadre spécifique, ce qui nécessite de définir précisément où se trouve ce cadre et ce qui en est exclu.
Ce que nous avons trouvé dans 299 fichiers de design réels
Nous avons échantillonné 299 fichiers DESIGN.md publiés dans des dépôts et répertoires publics (des fichiers réels, écrits par des équipes réelles pour guider les agents en design) et avons mesuré leur contenu réel plutôt que leurs intentions. 72 étaient spécifiquement des fichiers de design visuel. Le schéma est suffisamment constant pour établir un diagnostic.
| Part des fichiers | |
|---|---|
| Couleurs en hexadécimal brut, sans rôle sémantique | 86% |
| Aucune interdiction de quelque nature que ce soit | 76% |
| Aucune définition du mode sombre | 69% |
| Aucun motif distinctif | 57% |
| Au moins un adjectif vague utilisé comme consigne | 54% |
| Aucune valeur de taille concrète | 44% |
| Mentionne la typographie | 83 % |
La dernière ligne est révélatrice. La typographie est mentionnée dans 83 % des fichiers, et 44 % de ces mêmes fichiers ne contiennent aucune valeur de taille concrète. « Utilisez une hiérarchie typographique claire » est une mention. Ce n'est pas une instruction, et le modèle la satisfait en utilisant la hiérarchie la plus courante dans ses données d'entraînement.
Les deux chiffres les plus importants sont celui des interdictions et celui des rôles sémantiques, et ils échouent de la même manière. Un fichier indiquant que #3b82f6 est la couleur « primary » sans rien interdire indique au modèle qu'un bleu spécifique existe, tout en laissant chaque décision d'utilisation totalement ouverte. L'agent l'utilise alors pour les titres, les liens, le remplissage des icônes, une bordure et un dégradé, car tous ces usages sont plausibles pour une couleur primaire.
L'amélioration la plus simple et la plus efficace pour tout fichier de design : ajouter une section « Never ». Cinq lignes. Pas de dégradés, pas d'ombres portées, pas de graisse de police supérieure à 600, pas de couleur en dehors de l'ensemble de tokens, pas de valeur d'espacement hors échelle. Cette section influencera le résultat plus que tout le reste de vos instructions.
Les six éléments indispensables d'un système
Pour qu'un design system survive à la lecture par un modèle, à son application sur vingt fichiers et à sa reprise lors d'une session ultérieure, il doit comporter six parties. Chacune d'elles corrige un échec spécifique.
| Corrige | Sans cela | |
|---|---|---|
| Rôles de couleurs sémantiques | Lieux où chaque couleur est autorisée | La couleur d'accentuation apparaît partout où c'est plausible, c'est-à-dire partout |
| Une échelle typographique avec des valeurs réelles | Décisions de taille et de graisse | La hiérarchie repose uniquement sur le gras, et la page semble bruyante et générique |
| Une échelle d'espacement | Rythme entre des composants non liés | Chaque écran a son propre rythme vertical, et la dérive est invisible fichier par fichier |
| Mode sombre, défini et non dérivé | Le second thème | L'agent inverse le mode clair et produit des contrastes ternes et des ombres sans relief |
| Motifs | Ce qui rend ce design spécifiquement unique | Tout est correct, mais rien n'est distinctif |
| Interdictions | Tout ce que vous n'avez pas pensé à spécifier | Tout est autorisé par défaut |
La ligne sur le mode sombre est celle que les équipes sous-estiment. Dériver le mode sombre en inversant le mode clair est ce qu'un modèle fait quand rien ne lui indique le contraire, et cela échoue de manière prévisible : les ombres ne sont plus lisibles sur les surfaces sombres, les gris moyens perdent leur contraste avec le texte et l'arrière-plan, et un accent saturé qui paraissait assuré sur blanc devient criard sur un fond presque noir. Le définir demande un second ensemble de tokens, mais élimine toute une catégorie de retouches.
Aperçu d'un véritable design kit
Un kit est un système complet, pas une simple palette. Voici un aperçu en direct du kit gratuit ambient-sage : les mêmes tokens, polices et traitements qu'un agent reçoit lors de son application. Tout sur cette page pourrait être redessiné en changeant de kit.
Ambient Sage
Live renderRendered from the kit's actual tokens, fonts, and treatments
Typography
Plus Jakarta Sans
Color system
28 semantic roles, light + dark
Agent outputs
DESIGN.md, CSS, Tailwind, shadcn
Ce que l'agent reçoit réellement
Quel que soit le mode d'installation, la charge utile comprend toujours ces trois éléments :
- Un DESIGN.md : le brief écrit : l'intention du design, le système typographique, les règles d'espacement et de mise en page, le traitement des composants, les motifs distinctifs, ainsi que les « do's & don'ts ». C'est ce qui empêche l'agent de retomber dans le générique. Qu'est-ce qu'un DESIGN.md et comment en générer un.
- Des tokens de couleurs sémantiques : 28 rôles (background, foreground, primary, muted, card, border, chart-1…5, etc.) en modes clair et sombre. L'agent stylise en fonction des noms de rôles et non de codes hexadécimaux bruts, garantissant la cohérence des thèmes. Explications sur les tokens de couleurs sémantiques.
- Des exports de framework : le même système sous forme de variables CSS, de
@themeTailwind v3/v4, d'élément de registre shadcn, ou de JSON DTCG/W3C. L'agent connecte celui qui correspond à votre stack.
Les noms de rôles du second élément sont plus puissants qu'il n'y paraît. --color-muted-foreground indique au modèle à la fois quelle est la valeur et où elle doit être placée ; --gray-400 n'indique que la valeur, et l'agent décide alors lui-même quel gris utiliser pour une légende. C'est dans cette décision que la cohérence s'effrite, fichier après fichier.
Guides par outil
La mécanique diffère selon l'outil : les agents de code exécutent un serveur MCP local, les constructeurs web utilisent le registre shadcn ou le fichier DESIGN.md exporté. Choisissez votre outil :
- Donner un design system à Claude Code : MCP via
.mcp.json, ouidentityforge apply. - Donner un design system à Cursor : MCP via
.cursor/mcp.json, plus comment structurer les fichiers de règles. - Donner un design system à Windsurf : configuration MCP manuelle pour Cascade, plus le chemin CLI.
- Donner un design system à v0 : le registre shadcn + DESIGN.md comme brief.
- Donner un design system à Lovable : connaissance du projet + ajout de shadcn dans le repo.
- Donner un design system à Bolt : exécuter
shadcn adddirectement dans le terminal de Bolt.
Une observation importante avant d'évaluer les options natives de n'importe quel outil : après lecture de la documentation actuelle des six fournisseurs, chaque fonctionnalité intégrée de design system ingère un système que vous maintenez déjà. Aucun n'en produit un, et deux les réservent à un forfait payant. Ces fonctionnalités sont des consommatrices de design system, et non des substituts.
Fichier ou serveur MCP ?
Les deux, et pour des raisons différentes. Il est crucial de bien faire la distinction, car installer un serveur MCP en espérant un résultat visuellement plus abouti est une déception courante.
| Un fichier dans le repo | Un serveur MCP | |
|---|---|---|
| Réponses | À quoi cela doit-il ressembler ? | Quelle est l'API de ce composant ? Quels kits existent ? |
| Disponibilité | À chaque tour | Lorsque l'agent choisit de l'appeler |
| Limite de taille | Limitée par le contexte | Illimitée |
| Idéal pour | Rôles, échelles, motifs, interdictions | Recherche, catalogues, données en direct, application d'un kit |
Les interdictions sont le cas d'école pour le fichier. Un agent sur le point d'ajouter une ombre portée n'a aucune raison de demander « les ombres portées sont-elles autorisées » ; ainsi, une contrainte cachée derrière un appel d'outil est une contrainte qui ne s'active jamais. Les contraintes doivent être présentes avant la décision. Plus de détails sur l'emplacement de chacun.
Choisir un kit
Parcourez les kits par style visuel pour voir des systèmes complets en contexte : typographie, couleurs, surfaces et règles de construction. Chaque kit possède un id permanent et un slug lisible ; une fois l'un ou l'autre connu, l'agent peut ignorer la recherche et l'appliquer directement. Les slugs peuvent être renommés, mais l'ancien continue de fonctionner, donc un identifiant stocké ne devient pas obsolète. Si vous avez déjà des couleurs de marque, l'outil MCP match_palette trouve les kits les plus proches visuellement.
Laisser l'agent choisir
Avec le serveur MCP connecté, vous n'avez pas à choisir un slug vous-même. Indiquez à l'agent votre produit, votre audience et l'ambiance souhaitée. Il peut utiliser search_themes pour établir une présélection, get_design_md pour lire le brief et apply_theme pour installer le kit choisi.
Vérifier que le système est réellement suivi
Installer un design system et supposer qu'il fonctionne est le meilleur moyen d'avoir des surprises trois semaines plus tard. Quatre vérifications, par ordre croissant d'effort :
- 1
Grep pour les valeurs de couleur littérales
Le signal le plus rapide. Si l'agent suit les design tokens sémantiques, il ne devrait y avoir aucun hexadécimal en dehors de votre fichier de tokens.
# any hex outside the token definitions grep -rn --include='*.tsx' --include='*.css' -E '#[0-9a-fA-F]{3,8}\b' src \ | grep -v 'tokens\|globals.css' - 2
Vérifier les graisses de police
C'est au niveau de la graisse que la hiérarchie revient discrètement aux valeurs par défaut. Si votre système n'autorise que le 400 et le 600, tout autre choix est une dérive.
grep -rn --include='*.tsx' -E 'font-(bold|extrabold|black|semibold)' src | head -30 - 3
Demander le même écran deux fois, dans des sessions distinctes
La cohérence entre les sessions est le véritable test. Si deux exécutions produisent des espacements, des rayons ou une hiérarchie significativement différents, le système ne contraint pas suffisamment.
- 4
Construire un premier écran en mode sombre
Si le mode sombre a été dérivé plutôt que défini, c'est ici que cela se voit : ombres inertes, gris moyens ternes, accent trop vif. Il est moins coûteux de s'en rendre compte maintenant qu'après vingt écrans.
Les deux premières vérifications valent la peine d'être intégrées à la CI. Une règle qui détecte une valeur hexadécimale brute dans une pull request fait plus pour la cohérence à long terme que n'importe quelle documentation, conclusion à laquelle Salesforce est parvenu avec le linter SLDS.
FAQ
Qu'est-ce qu'un design system pour un agent de code IA ?
C'est un ensemble fixe de décisions de design : des design tokens sémantiques pour le mode clair et sombre, un appairage typographique, des règles d'espacement et de mise en page, et un fichier DESIGN.md rédigé. L'agent se réfère à ces décisions au lieu de réinventer le style pour chaque écran.
Ai-je besoin d'un compte ou d'une clé API pour utiliser Identity Forge avec mon agent ?
Non. Les kits gratuits et le registre shadcn fonctionnent sans compte. Une clé API (via /account/api-keys) n'est nécessaire que pour les données propriétaires, un quota d'API plus élevé et les kits Pro.
Avec quels outils cela fonctionne-t-il ?
Agents de code : Claude Code, Cursor, Windsurf, Codex, Gemini CLI, VS Code/Copilot, opencode : lancez le serveur MCP local. Constructeurs web : v0, Lovable, Bolt : consommez l'élément du registre shadcn ou le fichier DESIGN.md et les tokens exportés.
Est-ce différent de demander simplement une palette de couleurs à l'agent ?
Oui. Une palette est une poignée de couleurs. Un kit est un système complet et cohérent : 28 tokens sémantiques en mode clair et sombre, de vraies polices, des règles de mise en page et de composants, des motifs, ainsi que des recommandations et interdictions, le tout sérialisé dans un DESIGN.md et exportable en tokens shadcn/Tailwind/DTCG.
Pourquoi l'agent dévie-t-il encore même avec un design system installé ?
Généralement parce que le système définit des permissions sans interdictions. « Utilisez la couleur primaire pour les actions » n'empêche pas de l'utiliser aussi pour les titres, les bordures et les dégradés. Ajoutez une liste explicite de ce qui est interdit : ce seul changement influence le résultat plus que tout autre élément du fichier.
Puis-je utiliser mes couleurs de marque existantes au lieu d'un kit préconstruit ?
Oui. L'outil MCP match_palette trouve les kits les plus proches des couleurs que vous possédez déjà, et les kits peuvent être modifiés dans Studio avant l'exportation. L'important est que le résultat doit toujours aboutir à des ensembles complets de tokens clair et sombre avec des rôles associés, et non à une simple liste de valeurs hexadécimales de marque.