Un jour j’ai demandé à l’agent de dériver la palette du site depuis le logo du client. Le client n’avait pas de logo exploitable. L’agent n’a pas bloqué, il n’a pas demandé. Il a conclu que la marque n’avait aucune signature chromatique particulière, et il a inventé une palette à partir des photos de la page d’accueil. L’agent travaille dans une chaîne que je monte depuis juin 2026 : elle lit le site existant d’un client et en dérive des prototypes de refonte, que je départage ensuite.
Le résultat était joli. Il n’avait aucun rapport avec la marque.
Je posais la question à la mauvaise chose : la couleur d’un logo se mesure.
Trois questions qui n’auraient jamais dû être des prompts
Le tri est simple. Si deux personnes compétentes qui regardent la même donnée doivent tomber sur la même réponse, c’est un calcul. Trois cas sont sortis du prompt pour devenir des scripts.
La couleur de marque, d’abord. On ignore tout ce qui ne porte pas d’identité, les pixels trop transparents, les quasi-blancs, les quasi-noirs, les gris, puis on prend la teinte dominante par quantification. Les seuils sont écrits, discutables, et surtout stables : saturation minimale à 0,22, luminance entre 0,06 et 0,94. Le même logo rend toujours la même couleur.
Le secteur d’activité ensuite, par un score sur les mots du contenu réel du client, les termes forts comptant triple et les termes courants pour un. Et l’exploitabilité des images enfin, par un plancher de largeur selon le rôle : un logo sous 200 px, un visuel de hero sous 1 200 px, c’est flou à l’affichage prévu.
Aucun des trois n’appelle un modèle. Et les trois peuvent être relancés sur deux mois d’archives pour vérifier qu’ils n’ont pas dérivé.
Le meilleur résultat d’un détecteur, c’est « rien »
Un logo strictement noir et blanc n’a pas de couleur de marque. Le script brand-color.mjs pouvait rendre un gris moyen, techniquement exact et complètement faux. Il rend null, et c’est cette absence qui déclenche la bonne décision en aval : un style monochrome, choisi, plutôt qu’une couleur inventée.
Même logique sur le secteur, avec deux garde-fous plutôt qu’un, parce qu’un mauvais secteur est pire que pas de secteur : il commande des exigences métier fausses et un ordre d’argumentation à contresens, que plus personne ne viendra corriger ensuite. Un seuil de 5 points, sous lequel on reste en profil générique. Un écart minimal de 3 points avec le second, sous lequel on déclare l’ambiguïté au lieu de trancher.
Une détection ambiguë journalise son abstention avec les deux têtes de classement, et un humain tranche. Le cas nominal, lui, reste muet, ni écriture ni ligne de log. Un outil qui parle quand il hésite et se tait quand il sait est un outil qu’on peut laisser tourner.
Le piège du mot entier
Les termes sont cherchés en mot entier. Sans cette garde, « coach » se déclenche sur « coaching », et le cas qui m’a fait rire jaune, « photo » se déclenche sur « photocopie ». Un imprimeur classé photographe, avec les exigences métier d’un photographe et un site qui montre avant de parler.
Un détecteur déterministe est fiable quand ses erreurs sont reproductibles, donc corrigeables. C’est la différence pratique avec un modèle : je peux écrire un test qui échoue sur « photocopie », je ne peux pas écrire un test qui échoue sur une intuition.
Le catalogue entre dans le prompt
La détection rattrapait après coup un problème dont la cause était en amont. Le prompt qui demandait à l’agent de remplir la fiche client ne mentionnait même pas le champ « secteur » dans sa liste. L’agent le complétait donc de mémoire, avec des mots qui n’existaient nulle part dans le catalogue.
Le correctif tient en une phrase : le catalogue réel est injecté dans le prompt, lu sur disque au moment du lancement. L’agent choisit dans une liste qui existe au lieu d’inventer une étiquette. Trois consignes l’accompagnent, toutes tirées d’erreurs constatées. Choisir sur ce que le client fait. Trancher sur le visiteur quand un métier relève de deux profils. Laisser le champ vide plutôt qu’approximer.
C’est devenu une règle générale de la chaîne. Tout ce qui est connu du système, le catalogue des secteurs, les styles déjà attribués aux autres clients, les images réellement présentes, est donné à l’agent, jamais deviné par lui.
Quand la mesure est juste et le transport cassé
Le brief de direction artistique rend un tableau de couleurs, chacune nommée par le rôle qu’elle alimente. Une entrée manquait à la table des libellés : l’encre, la couleur du texte courant. Résultat, tous les briefs générés contenaient une ligne sans nom en face d’un code hexadécimal. Le générateur découvrait une couleur sombre sans emploi. Sur un client, il l’a prise pour une couleur de panneau et en a peint des sections entières. La page était brune, terne, et personne ne comprenait pourquoi.
J’en ai tiré une phrase que j’ai laissée en commentaire dans le code : une couleur sans nom finit toujours par servir à tort.