Comment documenter un design system pour qu'une IA le respecte réellement

Votre site de documentation est probablement excellent, et probablement inutile pour un agent. La documentation humaine est conçue pour être parcourue, organisée par composant, et décrit l'intention en prose. Un modèle a besoin de l'inverse : tout le périmètre d'un coup, organisé par décision, avec chaque contrainte formulée comme une règle pouvant être enfreinte.

Mis à jour 2026-07-27

Pourquoi le site de documentation ne fonctionne pas

L'instinct est de diriger l'agent vers le site du design system. Cela aide rarement, pour quatre raisons structurelles qui n'ont rien à voir avec la qualité du site.

Site de documentationBesoins d'un agent
Mode d'accèsParcouru — on se rend sur la page dont on a besoinTout l'essentiel dans le contexte, avant la première décision
OrganisationPar composant : Bouton, Input, CartePar décision : rôles couleurs, densité, élévation, interdictions
TonDécrit l'intention — "nos boutons inspirent la confiance et sont accessibles"Énonce les contraintes — "font-weight 500, radius 6px, jamais de dégradé"
ExhaustivitéCouvre ce qui existeDoit aussi couvrir ce qui ne doit pas exister
Documentation humaine versus besoins d'un modèle.

C'est la ligne sur l'organisation que les gens oublient. Un site organisé par composant est parfait pour quelqu'un qui sait déjà qu'il a besoin d'un Bouton. Un agent sur le point de construire un écran n'a pas encore décidé quels composants utiliser — ses premières décisions concernent la densité, la hiérarchie et la mise en page, et c'est précisément ce qu'un site organisé par composants ne couvre jamais.

La ligne sur l'exhaustivité est la plus déterminante. La documentation décrit ce qui existe, car c'est sa fonction. Mais la différence entre votre interface et une interface générique réside principalement dans un ensemble de choses que vous ne faites jamais, et aucune page de composant ne les mentionnera jamais.

Ce que contiennent réellement les fichiers

Nous avons analysé 299 fichiers DESIGN.md publiés dans des dépôts et répertoires publics — des fichiers écrits délibérément pour donner des directives de design aux agents IA — et mesuré leur contenu. 72 étaient spécifiquement des fichiers de design visuel. Le schéma est suffisamment constant pour servir de liste de contrôle de ce qu'il faut éviter.

Part des fichiers
Couleurs en hexadécimal brut, sans rôle sémantique86%
Aucune interdiction de quelque nature que ce soit76%
Aucune définition du mode sombre69%
Aucun motif distinctif57%
Au moins un adjectif vague utilisé comme consigne54%
Aucune valeur de taille concrète44%
Mentionne la typographie83%
Ce qui manque aux directives de design existantes (n=299).

Mettez les deux dernières lignes en regard. La typographie est mentionnée dans 83 % des fichiers, mais 44 % ne contiennent aucune valeur de taille concrète. Cet écart résume tout le problème en une seule statistique : les fichiers parlent de typographie sans jamais préciser la taille des éléments.

Le chiffre concernant les adjectifs représente l'autre moitié du problème. « Clean » apparaît dans 39 % de ces fichiers, « moderne » dans 36 %. Ce sont des mots qu'un modèle satisfait en produisant le centre de sa distribution d'entraînement, ce qui correspond précisément au look générique que le fichier était censé éviter.

Un modèle à qui l'on demande un style « clean et moderne » produit la moyenne de tout ce qu'il a vu. C'est également ce que fait le modèle de n'importe qui d'autre à qui l'on demande la même chose.

Les sept changements

Chacun d'entre eux répond à l'un des échecs mesurés ci-dessus. Appliqués ensemble, ils transforment une description en une instruction exécutable.

  1. 1

    Attribuez un rôle à chaque couleur, pas seulement une valeur

    #6b7280 est une valeur qu'un modèle utilisera indistinctement pour le corps de texte, les bordures, les icônes, les placeholders et les états désactivés. --text-muted, décrit comme étant uniquement pour le texte secondaire et de soutien, a une fonction précise. Cinq rôles valent mieux qu'un code hexadécimal, et ils vous permettent de modifier les bordures plus tard sans modifier les légendes.

    --text-muted: #6b7280   /* secondary and supporting text only */
    --border-subtle: #e5e7eb /* structural edges, dividers */
    --text-disabled: #9ca3af /* disabled controls only */
  2. 2

    Remplacez chaque adjectif par un nombre ou une règle

    « Espacement généreux » devient « écart de section 64px, padding de carte 24px ». « Typographie clean » devient une échelle. Si une phrase ne peut pas être vérifiée sur un écran rendu, c'est de la décoration.

  3. 3

    Rédigez les interdictions

    C'est la section ayant le plus d'impact, et celle que 76 % des fichiers omettent totalement. Cinq lignes suffisent pour commencer.

    ## Never
    
    - No gradients
    - No drop shadows — elevation is a surface step plus a 1px border
    - No font-weight above 600
    - No colour value outside the token set
    - No border-radius above 12px
  4. 4

    Définissez le mode sombre, ne le laissez pas être dérivé

    S'il n'est pas défini, le modèle inverse le mode clair, et le résultat échoue de manière prévisible : les ombres ne sont plus lisibles, les gris moyens perdent leur contraste aux deux extrémités, et un accent saturé qui paraissait assuré sur blanc devient éblouissant sur un fond presque noir. Un second jeu de tokens coûte une heure de travail et élimine toute une catégorie de retouches.

  5. 5

    Énoncez explicitement la décision de densité

    Savoir s'il s'agit d'un outil dense ou d'une surface marketing aérée modifie chaque choix ultérieur, et c'est la décision que la plupart des fichiers ne prennent jamais. Si votre produit comporte les deux types de surfaces, cela nécessite deux fichiers, et non un seul fichier ambigu.

  6. 6

    Nommez au moins deux motifs

    Ces éléments spécifiques et récurrents qui rendent le design unique : une règle d'accentuation de 2px à gauche des titres de section, des colonnes numériques toujours tabulaires et alignées à droite, une manière particulière de dessiner les états vides. 57 % des fichiers n'en ont aucun, c'est pourquoi leur résultat est correct mais sans caractère.

  7. 7

    Pointez vers le fichier de tokens ; ne le recopiez jamais

    Dès qu'une valeur hexadécimale existe à la fois dans le fichier de design et dans le fichier de tokens, l'un sera mis à jour et l'autre non, et le modèle utilisera avec assurance la valeur obsolète. Référencez, ne copiez pas.

Si vous ne devez en appliquer qu'un seul, choisissez le troisième. Une liste d'interdictions représente quinze minutes de travail et modifie le résultat généré plus que les six autres réunis, car elle restreint l'espace immense de décisions que vos permissions ont laissé ouvert.

Ce que produisent ces sept changements, au final, c'est un fichier dont les valeurs peuvent être résolues par un agent sans qu'il ait besoin d'inventer quoi que ce soit. Voici ces mêmes informations présentées sous forme de tableau plutôt que de texte — utile ici comme checklist de ce que votre propre fichier doit être capable de trancher :

Token specimen · real values

Sage & Slate Editorial

Live render

Sage & Slate Editorial's actual tokens — the same values its exports use.

Color tokensSemantic roles with HEX / HSL / CMYK

Color tokens

Sage & Slate Editorial

light · HEX · HSL · CMYK

Core

#ECEEE2

background

H 70 · C1, 0, 5, 7

#1C1E19

foreground

H 84 · C7, 0, 17, 88

#F5F5EF

card

H 60 · C0, 0, 2, 4

#E4E6DA

muted

H 70 · C1, 0, 5, 10

#D3D5C8

border

H 69 · C1, 0, 6, 16

Brand

#4A8649

primary

H 119 · C45, 0, 46, 47

#000000

primary-fg

H 0 · C0, 0, 0, 100

#4774AC

secondary

H 213 · C59, 33, 0, 33

#CDBE7E

accent

H 49 · C0, 7, 39, 20

#4A8649

ring

H 119 · C45, 0, 46, 47

Semantic

#C94040

destructive

H 0 · C0, 68, 68, 21

#FFFFFF

destructive-fg

H 0 · C0, 0, 0, 0

#4A8649

success

H 119 · C45, 0, 46, 47

#B08A38

warning

H 41 · C0, 22, 68, 31

#585C50

muted-fg

H 80 · C4, 0, 13, 64

Charts

#4A8649

chart-1

H 119 · C45, 0, 46, 47

#4774AC

chart-2

H 213 · C59, 33, 0, 33

#CDBE7E

chart-3

H 49 · C0, 7, 39, 20

#7AA87A

chart-4

H 120 · C27, 0, 27, 34

#3D4227

chart-5

H 71 · C8, 0, 41, 74

Type scaleHeading, body, and mono in the kit's fonts

Typography

Sage & Slate Editorial

Scale: major-third

Density: relaxed

Heading · Plus Jakarta Sans · 2.5rem

Sample headline

Subheading · Plus Jakarta Sans · 1.875rem

A warm organic editorial UI kit on a sage-green canvas with generous rounded cards, eyebrow accent chips, and a soft photography-forward layout.

Body · DM Sans · 1rem

A warm editorial system built on a sage-green page background with floating off-white cards that carry large border-radius and soft shadows. Bold geometric headings open with inline eyebrow accent chips, and generous whitespace defines the rhythm. The palette draws from nature: forest greens, dusty blues, and warm wheats, applied as accents on a near-neutral sage canvas. Ideal for photography, lifestyle, wellness, and editorial content surfaces.

Mono · Space Mono · 0.8125rem

npx shadcn add sageslateeditorial.json

Aa

Plus Jakarta Sans · Heading

400500600700

Aa

DM Sans · Body

400500700

ABCDEFGHIJKLM NOPQRSTUVWXYZ

abcdefghijklmnopqrstuvwxyz

0123456789 & @ # % →

Radius & spacingCorner radius, elevation, and spacing steps

Tokens

Sage & Slate Editorial primitives

density: relaxed

Radius scale

sm · 0.375rem
md · 0.75rem
lg · 1.25rem
xl · 2rem

Component radius

button
card
input

Elevation

level 1
level 2
level 3
level 4

Spacing · base 1rem

1x
2x
3x
4x
6x
8x
Chaque valeur qu'un agent demande lors de la construction d'un écran. Si votre documentation ne peut pas produire ce tableau, les lacunes correspondent exactement aux endroits où l'agent improvisera.

Comment rédiger une interdiction efficace

Toutes les interdictions ne se valent pas. Trois propriétés distinguent celles qui modifient le résultat de celles qui sont ignorées.

FaibleFortPourquoi
Spécificité"Évitez les styles trop décoratifs""Pas de dégradés, pas d'ombres portées, pas de bordures décoratives"Un modèle ne peut pas évaluer ce qui est "trop"
Vérifiabilité"Gardez une typographie sobre""N'utilisez jamais de font-weight supérieur à 600"L'un peut être recherché via grep ; l'autre non
Alternative proposée"N'utilisez pas de box-shadow""Pas de box-shadow — l'élévation est un niveau de surface plus une bordure de 1px"Interdire sans remplacer laisse le modèle inventer un substitut
Interdictions faibles et fortes.

C'est la troisième ligne qui est oubliée. Une interdiction sans alternative crée un vide que le modèle doit combler, et il le fait en puisant dans la même distribution d'entraînement que celle que vous essayiez d'éviter. Chaque "jamais X" devrait être suivi d'un "à la place, Y".

Structure et longueur

Le fichier doit tenir dans le contexte aux côtés de la tâche réelle, ce qui impose un plafond concret. Environ 400 lignes constituent un objectif viable ; au-delà, les règles individuelles perdent l'attention au profit de la tâche.

L'ordre compte également. Placez l'intention et les interdictions au début. Un modèle lisant de haut en bas rencontre la règle générale avant le cas particulier, ce qui correspond à l'ordre utilisé par Stripe dans son Appearance API — le thème d'abord, puis les variables, puis les règles spécifiques.

# DESIGN.md

## Intent            <- who reads this product, and what it is for
## Never             <- the prohibitions, early and unmissable
## Colour            <- roles for light and dark, referencing tokens
## Type              <- scale with real numbers, weight band, tracking
## Spacing & density <- the scale, and which surface uses which step
## Elevation         <- the strategy, stated once
## Composition       <- how components sit together
## Motifs            <- what makes this design specifically ours

Si votre produit possède des surfaces réellement différentes — un site marketing et un tableau de bord dense — n'écrivez pas un seul fichier avec des nuances. "Espacement généreux, bien que les tableaux puissent être plus denses" sont deux règles qui prétendent n'en former qu'une, et le modèle doit choisir. Rédigez un fichier racine pour ce qui ne varie jamais et des fichiers par surface pour ce qui varie.

Ce qui doit aller dans un serveur

Tout ne doit pas figurer dans le fichier ; tenter de tout y mettre est ce qui le rend trop volumineux pour être utile. La ligne de démarcation est de savoir si l'agent en a besoin avant de décider ou seulement à la demande.

QuoiPourquoi
APIs de composants, props, variantesServeurVolumineux, change souvent, nécessaire uniquement une fois le composant choisi
Catalogue d'icônesServeurDes centaines de noms, nécessaires un par un
Rôles de couleurs, échelles, densitéFichierNécessaire avant la première décision, à chaque fois
InterdictionsFichierUn agent ne pense jamais à demander ce qui est interdit — il doit déjà le savoir
Fichier ou serveur.

Le serveur MCP Carbon d'IBM est un bon modèle pour la première colonne : il expose la recherche de documentation, des exemples de code de composants, des graphiques et des composants expérimentaux sous forme d'outils. Notablement, aucun de ces éléments n'est une interdiction — car un outil de récupération ne fait remonter que ce que l'agent a pensé interroger. Plus d'informations sur cette séparation.

Tester si cela fonctionne

Rédiger le fichier et supposer que cela fonctionne est le meilleur moyen pour les équipes de découvrir le problème trois semaines plus tard. Quatre vérifications, par ordre croissant d'effort.

  1. 1

    Rechercher les valeurs de couleur littérales via grep

    Si l'agent respecte les rôles sémantiques, aucune valeur hexadécimale ne devrait se trouver en dehors de votre fichier de tokens.

    grep -rn --include='*.tsx' --include='*.css' -E '#[0-9a-fA-F]{3,8}\b' src \
      | grep -v 'tokens\|globals.css'
  2. 2

    Rechercher les graisses de police interdites via grep

    La graisse est l'endroit où la hiérarchie revient discrètement aux valeurs par défaut ; c'est le signal le plus rapide pour savoir qu'une interdiction n'est pas appliquée.

    grep -rn --include='*.tsx' -E 'font-(bold|extrabold|black)' src | head -30
  3. 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 diffèrent significativement sur l'espacement, le rayon des bordures ou la hiérarchie, c'est que le fichier ne contraint pas assez — et le diff vous indique précisément quelle section manque.

  4. 4

    Construire d'abord un écran en mode sombre

    Si le mode sombre a été déduit plutôt que défini, c'est ici qu'il apparaîtra. Il est bien moins coûteux de s'en rendre compte sur le premier écran que sur le vingtième.

Les deux premiers tests doivent être intégrés à la CI. Un contrôle qui rejette une pull request contenant une valeur hexadécimale brute fait plus pour la cohérence à long terme que n'importe quelle documentation, conclusion à laquelle sont parvenus Salesforce avec le linter du SLDS et Stripe en supprimant complètement cette possibilité.

Les kits de design Identity Forge intègrent cette structure nativement : 28 rôles de couleurs sémantiques pour les modes clair et sombre, des échelles de typographie et d'espacement, l'élévation, des motifs et des consignes explicites (do's and don'ts), le tout sérialisé dans un DESIGN.md. Parcourir les kits ou lire comment générer un DESIGN.md.

Puis-je simplement orienter mon agent IA vers mon site de documentation du design system ?

C'est rarement efficace. Un site se parcourt page par page, est organisé par composant et décrit l'intention sous forme de prose. Un agent a besoin des décisions en contexte avant de choisir un composant, organisées par décision plutôt que par composant, avec des contraintes formulées comme des règles vérifiables. Un fichier dans le dépôt répond à ce besoin ; un site non.

Quelle longueur doit avoir un DESIGN.md ?

Environ 400 lignes constituent un plafond viable. Il doit partager le contexte avec la tâche réelle, et au-delà de ce point, les règles individuelles commencent à perdre en importance. S'il s'allonge, cela signifie généralement qu'il couvre plusieurs surfaces à la fois et qu'il devrait être divisé en un fichier racine et des fichiers par surface.

Quelle est la section la plus importante ?

Les interdictions. 76 % des fichiers de design publiés n'en contiennent aucune, alors que la différence entre votre interface et une interface générique réside principalement dans l'ensemble des choses que vous ne faites jamais. Quinze minutes passées à rédiger une section « Ne jamais » modifient le résultat plus que n'importe quelle autre section de longueur comparable.

Dois-je mettre mes valeurs de tokens dans le fichier de design ?

Non — faites-y référence. Dès qu'une valeur existe à deux endroits, l'un sera mis à jour et l'autre non, et le modèle utilisera avec assurance la version obsolète. Indiquez le rôle et son application ; laissez le fichier de tokens gérer la valeur.

Ai-je toujours besoin d'un site de documentation si j'ai un DESIGN.md ?

Oui, pour les humains et pour les détails de l'API des composants, trop volumineux pour un fichier. Les deux ne sont pas concurrents : le site documente ce qui existe en profondeur, le fichier énonce les décisions dont un agent a besoin avant de commencer. Les catalogues de composants volumineux sont mieux servis par un serveur MCP que par l'un ou l'autre.