Chapitres
Sur cette page
DOC-04 / Référence technique · Chapitre 10
Catalogue des façades & entrypoints de Synedre OS
Ce chapitre recense tous les points d'entrée exécutables du harness agentique de Synedre OS, en précisant pour chacun son rôle, sa famille et son mode d'invocation, afin de permettre à un ingénieur de s'orienter rapidement dans le dépôt `synedre-os`.
Catalogue des façades & entrypoints — Synedre OS
Ce chapitre recense les points d'entrée exécutables du harness agentique avec, pour chacun, sa famille, son rôle en une ligne et son mode d'invocation type (cron / CLI / skill / hook / lib), afin qu'un ingénieur reprenant le dépôt retrouve rapidement quel script fait quoi sans relire des centaines de fichiers.
Principe directeur : les façades email, scan et déploiement sont déclarées façades uniques obligatoires dans la doctrine d'orchestration de l'agent Atlas. Tout appel à ces fonctionnalités doit passer par la façade exposée — jamais par un accès direct aux composants internes.
Périmètre, méthode et couverture du catalogue
Ce chapitre documente l'intégralité des composants actifs de la plateforme Synedre : façades d'automatisation, scripts d'infrastructure et programmes d'orchestration. La méthode de production est programmatique : le premier docstring ou commentaire de tête de chaque fichier est extrait par analyse syntaxique (ast.get_docstring() pour Python, première ligne de description pour les scripts shell), puis croisé avec l'historique des commits récents et le planificateur de tâches actif. Aucun rôle n'est inventé ; quand un fichier ne comporte qu'un en-tête générique, le docstring fonctionnel est repêché quelques lignes plus bas.
Décompte couvert
| Catégorie | Total réel sur le dépôt | Couverture dans ce catalogue |
|---|---|---|
Façades d'automatisation .py |
949 (dernière vérification) | Toutes détaillées ci-dessous — recoupement par nom de base : 0 fichier absent |
Scripts d'infrastructure (bin/, entrées top-level) |
148 entrées (fichiers et sous-répertoires) | Tous les fichiers top-level détaillés ; sous-répertoires bucephale/ et lib/ couverts section par section ; cache de bytecode et scripts SQL non détaillés un à un |
Historique des recomptages. Les totaux ont évolué rapidement au fil des chantiers : de 391 façades au départ, le dépôt est passé à 720, puis 774, 831, 864, 889, 901, 917, 926, 930, 938, 948 et enfin 949. Chaque saut correspond à une fournée de chantiers documentée dans le journal de régénération ci-dessous. Les anciens totaux (391, 720, 774) ne sont conservés qu'à titre de traçabilité historique et ne reflètent plus l'état courant.
Boucle de régénération miroir
Un mécanisme de détection de dérive compare en continu la date de dernière modification de chaque composant à la date de la dernière documentation. Quand le code est plus récent que la doc, un signal code-newer est émis. Les références documentées comme absentes du dépôt sont exclues de ce calcul de dérive ; elles restent citées à titre de traçabilité historique.
À chaque passe de régénération, la méthode appliquée est la suivante :
- Recomptage réel des fichiers de premier niveau.
- Recoupement par nom de base de chaque fichier contre le texte du chapitre — tout fichier absent est catalogué dans la fournée.
- Croisement avec l'historique des commits récents : seuls les fichiers dont le comportement a réellement changé voient leur ligne de tableau réécrite.
- Vérification de chaque invocation planifiée contre le planificateur de tâches actif.
- Scan des chemins cités : tout chemin absent du dépôt est annoté comme référence morte documentée.
Journal des fournées récentes
Les paragraphes qui suivent résument, fournée par fournée, les composants nouvellement catalogués, les lignes réalignées et les anomalies relevées. Les références mortes (composants supprimés ou déplacés) sont signalées explicitement et exclues du calcul de dérive.
Fournée du 16 octobre 2026
Une façade neuve cataloguée (moteur de génération de couvertures photo, famille §10). Quatre lignes réalignées sur les commits de la veille. Une nouvelle sous-famille créée : import de catalogue depuis une plateforme e-commerce tierce (§15). Signal code-newer : le moteur de génération de couvertures photo avait été mis à jour la veille sans que la doc suive — la cause est un changement de méthode de résolution d'un chemin binaire interne. Soixante-huit références mortes documentées comme telles, exclues du drift.
Points à confirmer : cadence planifiée de deux composants (boucle de réinitialisation de la démo nocturne, audit SEO mensuel) — absents du planificateur au moment de la vérification, seule la migration de déclenchement du second existe.
Fournée du 15 octobre 2026
Douze façades neuves et un garde de session catalogués. Douze lignes réalignées. Nouvelle sous-famille : reprise d'une version majeure d'une plateforme e-commerce open source (§15). Signal code-newer sur le composant de traitement des commandes humaines.
Nouveautés documentées :
- Courrier interne et copies (§9) : canal dédié vaisseau-mère → responsable (boîte canonique,
reply-toconfiguré, identifiant de message réel) ; module de copie unique par brouillon à valider. - Reprise plateforme e-commerce v9 (§15) : quatre façades couvrant la charte graphique, la migration, les modules et les redirections.
- DNS et hébergement (§14) : appel à l'API de panneau de contrôle d'hébergement via session sécurisée sans identifiant en clair ; comparaison de deux zones DNS avant bascule ; provisionnement de l'espace privé des fondateurs.
- Vigies (§10, §15) : lecture paginée du blog pour le dictionnaire ; audit SEO mensuel par client ; réinitialisation nocturne de la démo.
- Diffusion Medium (§10) : le publieur de contenu gagne un canal Medium par navigation (deux articles par mois au plus, après validation manuelle).
- Garde de session (§17) : un garde bloquant intercepte les écritures Bash sur les clients en production et exige une confirmation explicite.
Fournée du 13 octobre 2026
Huit façades neuves, trois scripts d'infrastructure et deux gardes de session catalogués. Nouvelle sous-famille : comptes système de recette par client (§6).
Nouveautés documentées :
- Comptes système de recette par client (§6) : registre des comptes, garde d'entrée et vigie, pose du mot de passe sans boîte mail, preuve live de refus d'accès non autorisé. Table de registre dédiée. Le moteur de navigation bucéphale porte huit profils de recette (ports distincts) et une entrée d'autorisation par hôte exact.
- Dossier client (§9) : liste blanche de projets et de fils, assainissement mécanique, rattachement des personnes par adresse exacte.
- Visuels AutoBlog (§10) : point d'entrée cron borné (six visuels par passe, liste fermée de clients, option sonde) ; priorisation des articles déjà publiés ; détection des slots visuels absents.
- Popularité produit (§10) : recopie du signal Search Console dans la table de popularité de la boutique.
- Sauvegarde du coffre humain (§14) : sauvegarde vers stockage objet et restauration de test ; garde empêchant toute exposition publique du coffre.
- Garde du tronc (§14) : script sourcé par les commandes de déploiement pour protéger la branche principale.
Fournée du 12 octobre 2026
Quatre façades neuves cataloguées. Six lignes de tableau réalignées. Un garde de déploiement recensé.
Nouveautés documentées :
- Liaison ventouse In-Situ (§3) : service SSE sortant avec requêtes signées ; coupe-circuit de garde des coûts du compte public ; relais et réponse par connexion distante sécurisée. Tables de demande et d'état dédiées.
- Garde des coûts (§10) : les composants de génération d'images et de données SEO appellent désormais une vérification de quota payant avant tout appel réseau.
- Gate live et préproductions (§14) : une préproduction derrière authentification HTTP n'est plus considérée comme défaillante sur un code 401.
- Vue Machines (§14) : table recensant les équipements de la flotte (box de navigation, serveur tampon, postes et appareils) ; route hub mise à jour.
- Déploiement (§14) : le garde post-commit redéploie aussi l'atelier de préproduction de la démo quand un fichier concerné change ; un verrou par four empêche deux déploiements simultanés au même instant.
Fournée du 11 octobre 2026
Neuf façades neuves, trois scripts d'infrastructure et un garde pre-commit catalogués. Environ trente lignes réalignées. Nouvelle sous-famille : cinquième harnais natif de tentacule.
Nouveautés documentées :
- Harnais natif supplémentaire (§3) : lanceur borné (garde anti-contributeur externe, modèle dédié) ; sortie résidentielle via le moteur de navigation (refus des adresses de datacenter par le fournisseur et de SOCKS par la CLI) ; client de suivi de quota (la commande de service rend quota et tokens que la commande d'exécution ne rend pas). Câblage sur les profils d'harnais, le routeur d'appels agents, la vision CLI, la consommation CLI, l'index des gardes, le méta-harnais portable et le fractionnement de session.
- Traitement email par ventouse (§9) : veille par indicateur, traitement à la minute, accord sur mot-clé de validation, règles de rédaction avec promesses du fil, rejeu à blanc avec deux juges, taux de validation suivi chaque semaine. Tables de scénarios et de simulation dédiées.
- Journal des livraisons (§14) : appelé en fin de déploiement pour dater une mise en production sans dépendre d'un bouton d'interface.
- SEO (§10) : vigie technique multilingue en lecture seule ; marquage de statut SEO ; classification des écarts d'indexation par cause ; lecture d'un vecteur de recherche stocké (gain de performance significatif).
- Sécurité et flotte (§14/§16) : rôle de lecture seule en base sans repli sur le propriétaire ; suppression d'un plancher codé en dur dans le pilote d'autonomie ; garde pre-commit sur la synchronisation des fiches agents ; cible de dérive Drizzle étendue à l'atelier de préproduction de la démo ; plafond des ventouses en aspiration relevé de 30 à 40.
Fournée du 10 octobre 2026
Seize façades neuves et un script JavaScript catalogués. Environ trente lignes réalignées. Trois gardes câblés recensés.
Nouveautés documentées :
- Comptes tiers (§2) : mot de passe généré, chiffré et saisi dans le même processus (dix invariants de sécurité) ; empreinteur HMAC lu par un garde de session ; migration de métadonnées avec retour arrière ; vigie des invariants (seuil zéro écart). Garde bloquant interceptant toute saisie en clair. La commande
/passwordconsulte le registre sans jamais restituer de valeur. - Secrets des serveurs clients (§2) : la fiche de flotte déclare l'emplacement des secrets ; un collecteur les remonte au registre toutes les quinze minutes.
- Déploiement — four et secrets hors build (§14) : déport de la compilation sur une machine locale dédiée (défaut : tous les clients, avec garde sur les secrets figés) ; analyse de sortie bloquante par défaut depuis cette date ; refus de deux clients dont les secrets ne vivaient que dans le build ; file FIFO (un seul build à la fois) ; repli disque sur les assets statiques en cas de 404 ; scripts de provisionnement de nouveaux serveurs (Ubuntu, protection SSH, fail2ban) ; rétention de sauvegardes allongée.
- SRE (§14/§16) : médecin du vaisseau-mère (liste fermée de soins, journal d'actes, cadence régulière) ; sonde de comptage JavaScript initial ; vigie de stock VPS ; optimisation CPU de la barre d'état.
- SEO et marché (§10) : règle immuable « on adapte au marché, on ne traduit pas » (garde bloquant + fichier de règles strictes) ; rédaction de fiches EN/DE depuis un brief de marché en base ; critère de fiches maigres relu en base ; invariants de locale ; inspection et vérification Search Console.
- Tentacules et acquisition (§3/§9) : réponse automatique périodique d'une ventouse (plafond en tours, jamais une validation) ; promotion prospect → client ; garde de portée de session.
Fournée du 8 octobre 2026
Six façades neuves cataloguées. Onze lignes de tableau réalignées.
Nouveautés documentées :
- Vue Retoucher des courts métrages (§11) : mesure du rythme plan par plan ; options d'assemblage par plan (avant/après/silence) ; bouton « Rejouer » incrémentant le numéro de version sans écraser les fichiers précédents ; presets de jeu récoltés sur les plans gardés. Deux opérations de daemon et deux migrations dédiées.
- AutoKUR (§10/§15) : noms lisibles pour les motorisations homonymes ; nombres dans les textes de catégorie remplacés par des gabarits paramétrables ; seed de rattachements seuls ; guides de catégorie générés ; refus d'un précalcul périmé.
- Acquisition, ton et devis (§9/§12) : comptage séparé des relances dans le registre de prospection ; ton de rédaction par membre de l'équipe ; devis à la charte avec annexes en base.
- Recette plateforme e-commerce (§14) : mesure du mode debug sans lecture du fichier d'environnement ; refus de l'ambiguïté de nom de module.
Fournée du 7 octobre 2026
Une façade neuve cataloguée. Neuf lignes de tableau réalignées.
Nouveautés documentées :
- Rappel de rendez-vous (§9) : envoi d'un email une heure avant chaque rendez-vous, destinataire unique.
- Mesure d'indexation (§10) : comptage limité aux catégories actives ; exclusion des pages auto-fermées en
noindexdu calcul du manque ; inspection par lots avec rejeu des lots défaillants ; mesure de la demande sur plusieurs requêtes candidates. - Diffusion et courts métrages (§10/§11) : étiquette IA obligatoire et relue (refus fermé) sur YouTube et TikTok ; partage de reel Instagram en pleine longueur (borné à 60 s) ; vérification de la vidéo sur le téléphone avant publication ; plan « off » muet ; prise retournée sans écrasement ; mélodie repliée d'octave.
- SEO et commercial (§10/§12) : lecture Search Console sous la propriété, pas sous l'URL du site ; option de proposition commerciale sans méthode jointe.
Fournée du 6 octobre 2026
Cinq façades neuves cataloguées. Quatorze lignes de tableau réalignées.
Nouveautés documentées :
- Pool de tentacules (§3) : gestionnaire de pool avec spawn borné.
- Registre des credentials (§2) : pose d'une clé de client sans terminal, par dépôt du coffre détruit à la lecture ; sens entrant du composant de transmission de secrets.
- Communauté (§9) : publication des forums par file à créneaux (toutes les cinq minutes) — plus jamais en rafale.
- Diffusion et courts métrages (§10/§11) : courts métrages du blog comme troisième source de l'exception vidéo ; atelier avec identifiant et bouton de suppression ; un seul setup de style ; doublage en boucle fermée sur la mesure du juge ; carton gris clair.
- Blog et SEO (§10) : politique client inactive respectée par le réassort ; publication de couverture purgeant le cache SSR ; détection de doublon de titre sans virgule ; juge des visuels signalant sa propre panne.
- Migrations, email et session (§14/§9/§3) : refus des DDL concurrents par nom ; porte de recette email sans citations du correspondant ; relance fiable du superviseur de session (fils directs uniquement).
Fournée du 5 octobre 2026
Dix façades neuves cataloguées (dont un garde de version POS dans les scripts d'infrastructure). Vingt lignes de tableau réalignées. Deux gardes de session recensés.
Nouveautés documentées :
- Diffusion image Instagram (§10) : plan de scènes vers images vers file ; statistiques des posts lus sur le téléphone (lecture seule) ; taille des hashtags candidats relevée sur le téléphone (plafond 30 tags distincts sur 7 jours) ; classement bayésien des hashtags (exploration/exploitation, conseil en sortie). Le moteur de diffusion sociale gagne la règle des 14 jours par réseau et le sceau du média validé.
- Communauté (§9) : trois réponses de forum par jour (sujets sans réponse des forums de support retenus) ; fil relu en direct avant rédaction ; refus du Markdown ; relance de rédaction sur refus de forme ; refus de publication conservé en base.
- Rapport SEO (§10) : indice de confiance A/B/C/D par mesure ; deuxième source de rang indépendante.
- Assistant IA des boutiques (§16) : vigie des questions sans bonne réponse avec recette de nuit ; purge datée des données obsolètes.
- Déploiement (§14) : arbre stable pendant le build ; traîne des assets statiques bornée par l'âge ; variable de design system obligatoire dans le bloc de configuration du gestionnaire de processus.
- Vigies et gardes (§16) : vigie de disponibilité des créneaux de rendez-vous ; garde de version majeure du socle fiscal de la caisse.
Fournée du 3 octobre 2026
Dix-neuf façades neuves cataloguées. Trente et une lignes de tableau réalignées. Quatre gardes câblés recensés. Quatre références ligne-de-fichier recalées.
Nouveautés documentées :
- Autoblog et blog (§10) : rédaction par un seul fournisseur IA dédié, sources d'autorité, visuels du corps avec abandon au troisième refus, seuil de tête mensuel, profil « avatars » pour site vitrine sans catalogue, garde de cadence (trois articles par semaine maximum).
- Rédaction SEO catalogue sous sceau (§10) : fiches de marché rédigées en anglais et en allemand depuis un brief en base ; rappel de l'indexation en fin d'import fournisseur.
- Lisibilité par les assistants d'achat (§10) : pont entre le moteur de fiche produit et la sentinelle SEO.
- Courts métrages en base (§10/§11) : bible vidéo en base, montage sur bande son, doublage de voix, publication via le téléphone et file de validation.
- Publication X (§10) : reprise après éditeur non refermé.
- Tentacules (§3) : second regard du réconciliateur ; délai de démarrage relevé ; script d'ouverture de ventouse.
- Déploiement (§14) : cache SSR conservé, préchauffage puis balayage, option
--cache-busterde la garde de navigation. - OVH (§14) : reprise sur défaillance passagère (jamais sur POST) ; option de retrait d'adresse IP.
- Import Search Console (§10) : flotte étendue, secrets hors arguments de commande.
- Audits (§6) : arbre CMS orphelin, registre des égalités de locale, lots natifs multilingues d'un client catalogue.
Fournée du 1er octobre 2026
Trente-trois façades neuves cataloguées. Diffusion sociale, pool de tentacules et délégations réalignés. Sept gardes de session recensés.
Sous-systèmes ayant réellement bougé et relus dans le code :
- Diffusion sociale (§10) : quatre sources, file de validation, trois créneaux par jour, garde « une voix » 48 h, source vidéo.
- Pool de tentacules (§3) : plafonds, dégel, échéance du critère, délais d'attente, recrutement par le chef, réconciliateur.
- Délégations (§9) : nouvelle sous-famille dédiée.
- Communauté (§9) : forum élargi, relevé de statistiques de page, relevé LinkedIn.
- Blog (§10) : rédaction par fournisseur dédié, sources d'autorité, visuels du corps, traduction du blog retirée du relais.
- Maillage des sites (§10) : pôles SEO, Performance et Sécurité ; audit à la demande.
- Iso-Figma (§6) : navigateur local sans le moteur de navigation principal.
Fournée du 27 septembre 2026 — régénération complète
Quatre cent cinquante-trois lignes de catalogue ajoutées. Quarante-cinq composants code-newer réalignés. Références ligne-de-fichier recalées. Section des gardes recomptée.
Cette fournée constitue la première régénération exhaustive : chaque fichier de premier niveau du dépôt a été confronté au chapitre par nom de base — 397 façades d'automatisation et 42 scripts d'infrastructure n'y figuraient pas encore. Trente-neuf nouvelles sous-familles ont été créées, couvrant notamment :
- Registre des credentials et MCP
- Résolution de portée de session
- Harnais Codex et méta-harnais portable
- Iso-Figma et communauté e-commerce
- Permanence vocale et emails système
- Autoblog, FAQ blog, couvertures de catégorie
- Forum de dialogues entre agents
- Indexation par vagues et maillage interne
- Glossaire multilingue et netlinking
- AutoKUR (deux déclinaisons), diffusion sociale
- Moteur de navigation (bucéphale), Figma
- FinOps, dépenses fournisseurs, budget de modèle
- Bascule entre serveurs, approvisionnement OVH
- Regroupement de variantes, connecteurs e-commerce
- Gouvernance des automates, vigies de rendu
Points saillants des réalignements code-newer :
- Le moteur SEO principal : ses trois lignes de planificateur sont toutes désactivées (usage effectif = CLI ou appelants) ; exceptions de nommage de slug, barrière de sécurité rétablie, normalisation JSON des valeurs du modèle de langage, FAQ multilingue.
- Le moteur de génération de fiches produit : coupe de titre sans mot de liaison orphelin, clause catégorie/caractéristiques alimentaire.
- Le moteur de travaux : harnais choisi par tâche puis par agent, clé de reprise de session, fenêtre de log tête+queue pour la recette.
- La porte de courrier entrant : vérification DKIM alignée sur le domaine de l'expéditeur, refus fermé.
- L'import Search Console : clé de déchiffrement essayée parmi deux variables d'environnement.
- Le démon CLI : profils autorisés désormais issus du registre des profils d'harnais.
- Le méta-harnais : Codex et le second harnais reçoivent réellement les gardes de session.
Anomalies relevées lors du cataloguage (non corrigées dans cette passe) : treize docstrings ou commentaires de planificateur périmés ; quinze façades conçues pour tourner en planificateur mais sans ligne active ; hôte ou conteneur codé en dur dans cinq scripts ; deux scripts défaillants.
Fournées antérieures — résumé
Les fournées de juillet et septembre 2026 ont constitué les premières grandes vagues de cataloguage. En voici les points marquants :
- Nettoyage des composants morts (juillet 2026) : soixante-deux références supprimées du dépôt ont été annotées comme telles (corbeille traçable, grâce de trente jours) plutôt que retirées silencieusement. Deux faux négatifs détectés : deux composants appelés dynamiquement par le moteur de maintenance nocturne étaient invisibles au grep statique malgré la passe de repêchage.
- Atelier 3D (septembre 2026) : expansion massive — vingt façades de production de planches techniques et anatomiques, treize helpers de qualité de ressemblance. Nouvelle sous-famille de pool de tentacules avec tables dédiées.
- Harnais multi-profil (juillet→septembre 2026) : le démon CLI est passé de mono-profil à multi-profil (flag de sélection de profil, whitelist de valeurs réseau jamais interpolées sans validation préalable). Mécanisme de mise en veille douce d'une ventouse (0 % CPU, RAM libérée, transcripts conservés) distinct de la fermeture définitive.
- Fractionnement de session (juillet→septembre 2026) : six commits en une journée ont affiné le comportement : état posé en base à chaque franchissement de seuil, compteur de tours remis à zéro sur chaque compaction, camp de relance pour les ventouses de pool, sidecar d'adresse pour éviter la reprise du handoff d'une autre ventouse, réalignement du modèle en base sur le modèle réellement utilisé, horodatage en heure locale pour la lisibilité humaine.
- Comptes tiers et secrets (octobre 2026) : voir fournée du 10 octobre ci-dessus.
- Planificateur propre (revérifié) : croisement du planificateur actif avec le catalogue — zéro entrée morte dans les lignes actives. Nouvelles entrées actives depuis juillet 2026 : moteur de travaux 3D, synchronisation de taxonomie, suivi de rang, réconciliation des réponses, audit de crontab, détection de récidive de cicatrice, fractionnement de session, et une dizaine d'autres.
Légende des modes d'invocation
| Code | Signification |
|---|---|
cron |
Lancé par le planificateur de tâches (souvent via le composant d'enveloppement cron) |
CLI |
Appelé manuellement en ligne de commande |
skill |
Façade exposée derrière un skill déclaré dans les fichiers de compétences |
hook |
Garde de session Claude Code (SessionStart / UserPromptSubmit / PreToolUse / PostToolUse / Stop). Les gardes Python sont déclarés dans la configuration locale ; un second jeu de gardes en shell est déclaré dans la configuration principale |
lib |
Module importé, pas un point d'entrée autonome |
worker |
Daemon ou boucle drainant une file de travaux en base |
Familles de composants et flux d'ensemble
Le système s'organise en plusieurs familles fonctionnelles qui collaborent autour d'un bus central. Le schéma ci-dessous illustre le cheminement d'un signal depuis son entrée jusqu'à son exécution.
Vue d'ensemble du flux
┌─────────────────────────────────────────┐
email entrant ──►│ Réception & ingestion des messages │
└──────────────────┬──────────────────────┘
│ classification d'intention
▼
┌─────────────────────────────────────────┐
/hub, CLI ───► │ Orchestration (spawn, react, qa) │
└──────┬──────────────────┬───────────────┘
│ │
chantiers │ │ exploration
│ │
▼ ▼
┌──────────────────────────────────────────────────────┐
│ Exécution des agents et des tâches │
└──────┬───────────────────────────────────────────────┘
│
┌──────────┼────────────┬─────────────┬──────────────────┐
▼ ▼ ▼ ▼ ▼
audits blog/seo finance navigateur déploiement
│ │ │ │ │
└──────────┴────────────┴─────────────┴───────────────────┘
│
▼
Base de données relationnelle
(façade d'accès centralisée)
Familles fonctionnelles
- Réception & ingestion — surveille les boîtes de réception, normalise les messages entrants et en extrait l'intention avant de les transmettre à l'orchestrateur.
- Orchestration — point de convergence entre les requêtes issues du hub web, de la ligne de commande et des emails. Il décide du composant suivant : ouverture d'un chantier, lancement d'une exploration ou délégation à un agent.
- Exécution des agents et des tâches — couche qui appelle les agents nommés (Mitnick, Turing, Brunel, Eames, Lovelace, etc.) et gère le cycle de vie de chaque tâche (run, retry, statut).
- Audits — analyse la qualité technique et éditoriale des livrables produits par les agents.
- Blog / SEO — pilote la génération et la publication d'articles optimisés pour les moteurs de recherche.
- Finance — gère la facturation et le suivi des paiements liés aux chantiers.
- Navigateur automatisé — contrôle un navigateur headless pour les tâches nécessitant une interaction avec des interfaces web.
- Déploiement — orchestre la mise en production des livrables via les commandes
./deployet./ship.
Modèle de données
L'ensemble du système s'appuie sur une base de données relationnelle unique, accessible exclusivement via une façade Python centralisée. Toutes les familles de composants passent par cette façade : aucun module n'interroge la base directement sans passer par cette couche d'abstraction.
Un second module centralise le chargement des variables d'environnement, garantissant que les secrets (clé API du fournisseur IA, mot de passe de base de données, jetons d'intégration…) ne transitent jamais en clair dans le code source. Ces valeurs sont déclarées dans des fichiers d'environnement exclus du contrôle de version.
Principe de sécurité : aucun secret n'est écrit dans le code ou dans la documentation. Toute valeur sensible est référencée par son nom de variable et chargée à l'exécution depuis l'environnement de la machine hôte.
Socle commun — bibliothèques et façades transverses
L'ensemble des automates et agents Synedre s'appuie sur un jeu de bibliothèques partagées : façades de base de données, journalisation structurée, abstraction IA, contrôle des secrets, résolution de tenant et outillage de déploiement. Cette section décrit chaque composant par son rôle fonctionnel.
Infrastructure de base
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Façade PostgreSQL principale | Abstraction Python d'accès à la base de données pour les scripts d'automatisation | Bibliothèque |
| Pool de connexions persistant | Maintient un pool de connexions réutilisables pour la couche entité, avec transtypage passthrough garantissant la fidélité octet-identique des données | Bibliothèque |
| Contrat de format de sortie | Définit le format de référence (« GOLDEN ») attendu de la couche entité : preuve d'intégrité octet-identique contre la corruption silencieuse | Bibliothèque |
| Connecteur base de données sandbox | Helper de connexion PostgreSQL pour les agents en environnement isolé | Bibliothèque |
| Chargeur de variables d'environnement | Point d'entrée centralisé pour la lecture des variables d'environnement de l'ensemble de la plateforme | Bibliothèque |
| Journalisation structurée | Module de logging obligatoire pour tous les Automates ; garantit un format de trace homogène | Bibliothèque |
Supervision des crons
Le gardien de timeout des crons enveloppe chaque automate planifié avec un délai d'expiration par défaut de 300 secondes. Des dérogations par script sont déclarées pour les tâches longues : par exemple, la boucle de maintenance nocturne bénéficie d'un plafond étendu à 12 600 secondes, la boucle de compaction mémoire à 3 600 secondes. Une dérogation supplémentaire couvre la recette nocturne de l'assistant IA d'un client (32 questions, pause de 10 secondes entre chaque cas pour respecter le plafond de débit du fournisseur ; durée mesurée : 384 secondes en conditions normales, pire cas estimé à 3 200 secondes).
Le battement de cœur des crons prouve qu'un automate s'est réellement exécuté (et pas seulement lancé) : chaque passage commis écrit un horodatage dans la table de supervision. Ce mécanisme est appelé depuis une vingtaine de modules au minimum, couvrant notamment les automates WhatsApp, le collecteur de messagerie, le détecteur d'entropie, la vigie de quotas et le détecteur de silence. Le détecteur de silence lui-même se bat à chaque sweep réussi (hors mode simulation), avec un intervalle attendu de 5 minutes et un seuil de silence de 15 minutes.
Façade IA agnostique
La façade IA agnostique route les appels LLM vers le fournisseur approprié (Mistral, Claude, OpenAI, DeepSeek, Gemini, ou le forfait CLI Google) sans que les automates aient connaissance du fournisseur sous-jacent. La clé API du fournisseur IA est lue depuis l'environnement et n'est jamais journalisée.
- Le canal CLI Google (forfait) exécute le binaire CLI dans un répertoire temporaire vide créé pour l'occasion et supprimé après l'appel. Ce confinement empêche le processus d'écrire des fichiers dans le dépôt de l'appelant — comportement observé sans cette mesure. Un répertoire de travail explicite peut être fourni par l'appelant ; les autres fournisseurs ignorent ce paramètre.
- Le canal API Google utilise une clé API dédiée lue depuis l'environnement ; en l'absence de clé valide, le système bascule automatiquement sur le canal CLI.
- La tarification par fournisseur est centralisée dans la façade, y compris les modèles à coût marginal nul du forfait CLI.
Point à confirmer : le câblage exact du routage autoblog vers le canal CLI n'a pas été relu dans cette version de la documentation.
Invocation d'agents
La façade d'invocation d'agents permet à tout automate d'appeler un agent Synedre, quel que soit le harnais sous-jacent. Le harnais peut être spécifié explicitement ou déduit de la variable d'environnement de session ; la valeur par défaut est Claude. Un harnais inconnu provoque une erreur immédiate.
Chaque harnais fonctionne en lecture seule — un appel d'agent rend du texte, n'écrit rien. Pour les harnais alternatifs (Codex, CLI Google, Muse Code), la commande est construite avec les drapeaux appropriés :
- Codex : mode éphémère, dépôt ignoré, sortie JSON, lecture seule.
- CLI Google : mode plan, sortie JSON, exécuté dans un répertoire temporaire neutre avec une consigne explicite « n'utilise aucun outil » (sans quoi le processus tente des commandes et rend une réponse vide).
- Muse Code : appel via le client MSP dédié, écriture et accès shell désactivés, quota consommé enregistré localement. Les sorties réseau de Muse transitent par un proxy d'émission dédié ; Codex et le CLI Google sortent en direct.
Le coût LLM de chaque appel est enregistré dans le journal des agents avec le nom du harnais utilisé. Le journal écrit le codename interne de l'agent même si l'appelant fournit un nom affiché différent.
python3 -m <invocateur-agent> --harness <claude|codex|antigravity|muse> --agent <codename>
Autres façades transverses
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Chargeur de persona agent | Charge la persona et le cadre cognitif d'un agent depuis le registre des agents | Bibliothèque |
| Façade d'embedding | Abstraction de calcul d'embeddings produits pour le boost de recherche | Bibliothèque |
| Persisteur d'événements | Enregistre un flux d'événements d'agent en base de données | Bibliothèque |
| Connecteur hooks PostgreSQL | Connexion légère et fail-fast pour les hooks post-action, héritée de la migration MariaDB | Bibliothèque |
| Lecteur de configuration LLM par client | Lit la configuration LLM (fournisseur, modèle, clé BYOK) propre à chaque client et la route vers la façade IA agnostique | Bibliothèque |
| Purge PII | Nettoie les données personnellement identifiables avant envoi au pipeline LLM | Bibliothèque |
Moteur de réflexes décentralisés
Le moteur de réflexes est branché sur les événements d'outils (lecture, écriture, édition, navigation web, appels d'agents). Il lit un événement JSON sur l'entrée standard, consulte la table de réflexes, prend une décision (autoriser, avertir ou refuser) et trace l'audit. Le code de sortie 0 signifie autorisation, 2 signifie refus.
La loi d'asymétrie gouverne l'ajout de réflexes : tout nouveau réflexe durcit les permissions ou maintient le statu quo — jamais d'autorisation large. Les zones sensibles sont fail-closed (refus en cas d'incertitude).
Un script de seed idempotent initialise les réflexes du tronc commun en base de données. Il est descriptif uniquement ; la source de vérité du câblage reste le fichier de configuration des hooks.
Détecteur de silence et d'échec des crons
Le détecteur de silence s'exécute toutes les 5 minutes. Il lit la table de battements de cœur et ouvre (ou incrémente) un incident de supervision sur deux sondes distinctes :
- Silence : aucun battement reçu depuis plus longtemps que le seuil configuré. Un cron mort-né (jamais exécuté) compte. Un épisode n'alerte qu'une fois.
- Échec installé : le dernier battement indique un état d'échec depuis au moins deux passages consécutifs. Cette sonde n'a pas de garde d'alerte unique — elle signale à chaque passage tant que l'échec persiste.
Lorsqu'un cron reprend (battement reçu, ou battement reçu en état OK), l'incident est refermé avec un motif daté. Si la base de données est inaccessible, le passage est ignoré sans erreur. Le mécanisme peut déclencher une escalade vers Atlas (une fois par épisode).
Outillage de déploiement
La bibliothèque de déploiement partagée fournit les helpers communs à toutes les cibles de déploiement :
- Détection de mutation du dépôt pendant le build : si une source du build (pages, dépendances, lockfile) est modifiée entre le départ et la fin d'un build (par un merge-back concurrent par exemple), le build est recompilé ou refusé. En cas d'impossibilité de lire l'état Git, le comportement est fail-open.
- Gestion de la traîne de cache : les fichiers statiques de l'ancienne version sont conservés un nombre de jours configurable (7 par défaut) pour éviter les erreurs 404 des robots d'indexation qui accèdent aux pages longtemps après leur lecture. Un fichier déjà repris est supprimé quand son horodatage dépasse l'âge maximal.
- Propagation de variables d'environnement : l'étape de déploiement propage certains jetons depuis l'environnement du vaisseau-mère vers l'environnement runtime du tenant. Cette propagation ne suffit pas si le gestionnaire de processus ne liste pas explicitement la variable dans son bloc d'environnement.
Le script de préchauffage et balayage du cache SSR s'exécute en arrière-plan après chaque déploiement conservant le cache. Il recalcule les pages pendant que les visiteurs continuent de voir l'ancienne version, puis supprime les entrées de cache antérieures au swap qui n'ont pas été recalculées — à l'exception des sitemaps et des pages devenues des erreurs. Le balayage s'exécute même si le préchauffage échoue, pour qu'aucune entrée de l'ancien build ne survive.
Le parseur de manifeste de déploiement lit et valide le fichier de configuration de déploiement au format YAML, puis émet les paires clé/valeur correspondantes sous forme de variables shell correctement échappées.
Isolation de travail multi-client (worktrees)
Le système de worktrees persistants affecte à chaque client un espace de travail Git isolé (index, HEAD et fichiers propres). Plusieurs terminaux peuvent ainsi travailler sur plusieurs clients simultanément sans collision sur le tronc partagé. La branche de chaque client est réintégrée automatiquement dans la branche de pré-production après chaque commit (hook Git natif).
Un garde-fou de confinement vérifie avant chaque commit que les fichiers modifiés appartiennent bien au couloir du client actif. Ce garde-fou reconnaît deux topologies de dossier client : le modèle tenant standard et les clients legacy hors modèle tenant.
La commande wt gc (ramasse-miettes des worktrees) retire les espaces de travail des tentacules inactives. Elle normalise les noms de sessions tmux pour tous les harnais (Claude, Codex, CLI Google) et traite correctement le cas d'un worktree supprimé puis recréé au même chemin.
Le merge-back (réintégration de la branche client dans le tronc) est protégé contre les verrous d'index Git tenus par des sessions sœurs : si un git merge --abort est refusé, il est rejoué jusqu'à un nombre maximal de tentatives configurable, avec une pause entre chaque essai.
Cicatrice 2026-09-26 : un verrou d'index tenu par une session sœur avait laissé le tronc en état de merge partiel pendant 25 minutes, paralysant toutes les sessions. Le mécanisme de rejeu a été introduit pour prévenir cette situation.
Filet de borne des sorties LLM
Le filet de borne des sorties d'outils limite ce que le modèle voit dans le contexte de la conversation : la sortie brute d'un outil est tronquée avant d'être injectée dans le contexte, mais le journal complet reste disponible sur disque. Ce mécanisme réduit significativement le coût LLM — environ 72 % du coût provenait de l'accumulation non bornée des résultats d'outils dans le contexte. Il est câblé comme hook et importé directement par plusieurs automates.
Plafond de contexte des sous-agents
Le hook de plafond de contexte sous-agent surveille la taille du contexte dans les sessions imbriquées (sous-agents). Lorsque le nombre de tokens dépasse le seuil configuré (80 000 par défaut), tout nouvel appel d'outil est refusé, forçant le sous-agent à conclure. En cas d'erreur du hook, le comportement est fail-open. Un interrupteur d'urgence permet de désactiver ce mécanisme.
Ce hook est câblé en phase avant l'outil (PreToolUse). Un câblage erroné en phase après l'outil avait laissé passer plusieurs milliers de refus non appliqués sur deux cents sous-agents — certains recevant jusqu'à 114 refus ignorés — avant d'être corrigé.
Journal des agents
La façade de journal des agents écrit en base de données, de façon atomique et best-effort (sans jamais lever d'exception), les événements suivants :
- Réunion quotidienne (upsert atomique par CTE)
- Activité générale d'un agent
- Résolution d'un élément de réunion
- Battement de cœur d'un agent
Charte visuelle des artifacts
La charte visuelle des artifacts fournit un CSS autonome embarqué (police Courier Prime, mode sombre par défaut avec bascule vers le mode clair, sans dépendance CDN, compatible avec une politique de sécurité de contenu stricte) et une fonction d'encapsulation qui pose le shell HTML de chaque artifact : barre haute sticky, identifiant de tentacule, version, lien et bouton de bascule de thème.
Commandes éphémères et vérification de copiabilité
La commande éphémère permet à une session IA d'enregistrer en base de données une commande à exécuter, sans demander à l'opérateur de la copier manuellement depuis le chat. Le Hub l'affiche sous forme de bouton dans le pied de page. Modes disponibles : enregistrement, liste, exécution, rejet.
Le vérificateur de copiabilité s'assure qu'une commande destinée à l'opérateur est copiable d'un seul geste : une seule ligne (sans continuation), sous la largeur du terminal, sans verbe destructif non nommé, sans piège d'isolation de worktree. Il ne réécrit rien — il signale uniquement.
Contexte de démarrage de session
Le module de contexte de démarrage fournit un contexte initial identique aux sessions Claude, Codex et CLI Google :
- Pour Codex (qui n'a pas de mémoire native) : injection de l'index mémoire au démarrage de session.
- Pour le CLI Google : au premier événement de conversation, les producteurs de contexte (mémoire, cicatrices, brief de session) sont lancés et leurs sorties injectées.
En cas d'erreur, le comportement est fail-open.
Lecture de partition de skill
Le lecteur de partition de skill est un module pur (sans base de données, disque ni réseau) : il extrait et valide la section Partition d'un fichier de définition de skill (bloc YAML de cues typés), source d'une conduite. L'absence de partition retourne None ; une partition invalide lève une erreur de partition.
Façade de vision par CLI
La façade de vision par CLI interroge un agent IA (Claude, Codex, CLI Google ou Muse) pour analyser des images, selon une table de routage lue en base de données. En l'absence de route configurée, le système échoue de façon fermée — aucun repli implicite. En cas de panne, le message d'erreur indique le code retour, le détail JSON et la fin de la sortie d'erreur.
Muse Code est un fournisseur valide pour ce canal : l'appel utilise le mode lecture d'image, avec écriture, shell et outils web désactivés, dans un espace de travail non approuvé (aucun hook ni skill chargé).
Contrat canonique des événements de harnais
Le contrat canonique des événements définit le schéma stable des événements produits par les différents harnais (Claude Code, Codex, CLI Google, Muse Code). Il traduit les payloads natifs de chaque harnais vers un ensemble de capacités normalisées :
- Cycles de vie : démarrage de session, soumission de prompt, avant/après outil, échec d'outil, événements d'agent, arrêt de run.
- Pour chaque décision, le contrat encode la réponse dans le format attendu par le harnais cible — sans jamais élargir les permissions de l'hôte.
- Le CLI Google n'a pas de canal de retour après l'exécution d'un outil ; ce comportement est documenté à partir d'une sonde réelle.
Le tick de mesure de contexte s'exécute après les outils de Codex et Muse via ce dispatcher ; le payload porte le harnais et le transcript natif.
Dispatcher portable des gardes de sécurité
Le dispatcher portable des gardes normalise les événements entrants via le contrat canonique, applique les gardes, et rencode la décision pour le harnais appelant. Il distingue trois familles :
- Gardes de plancher (P0) : fail-closed. Une sortie inattendue, un timeout ou une garde absente équivaut à un refus.
- Gardes de cicatrices : réflexes issus d'incidents passés documentés, identifiés par leur libellé.
- Gardes dérivées : pour les harnais non-Claude uniquement (Claude les exécute nativement), les gardes sont dérivées du fichier de configuration des hooks Claude et exécutées en parallèle (jusqu'à 16 workers). Un résultat ambigu est traduit en refus.
Après l'exécution d'un outil, les gardes de plancher sont ignorées ; seules les gardes dérivées post-outil s'appliquent.
Tout refus nomme sa règle : l'identifiant de la règle, le fichier qui la définit et la « voie » recommandée sont inclus dans le message de refus. Aucun octet du payload ni du message du hook n'entre dans ce message — il est statique. Cela évite qu'un agent parte inspecter son propre état de façon récursive.
Cicatrice 2026-09-25 : un refus sans indication de voie avait conduit un agent à lancer une recherche récursive dans son propre état, consommant 580 % de CPU et 3,9 Go de RAM.
Les gardes de lecture, de navigation web et d'appel d'agents sont portées vers Codex, le CLI Google et Muse Code via projection vers le contrat Claude. Les gardes de skill et de question à l'utilisateur restent propres à Claude.
Registre des credentials — source de vérité chiffrée
Le registre chiffré des credentials est la source de vérité unique pour tous les secrets de la plateforme. Les fichiers d'environnement (.env*) en sont des dérivés, conformément à une doctrine à cinq niveaux. Aucun secret ne doit exister dans un fichier d'environnement sans avoir été préalablement enregistré dans le registre.
Composants du registre
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Worker de synchronisation des fichiers d'environnement | Déchiffre les secrets du registre et réécrit les fichiers d'environnement au bon niveau, en supprimant les doublons inter-fichiers. Le registre héberge aussi les comptes web (niveau 0 coffre uniquement, jamais dérivés dans un fichier d'environnement). | Worker / CLI (déclenché par l'API, pas de ligne cron directe) |
| Module de chiffrement | Chiffrement et déchiffrement AES-256-GCM, compatible bit à bit avec les équivalents TypeScript. La clé maître est lue depuis l'environnement et n'est jamais journalisée. Un autotest vérifie l'aller-retour. | Bibliothèque / CLI --selftest |
| Éditeur atomique de fichiers d'environnement | Lecture, écriture (via fichier temporaire + remplacement atomique), suppression de variables et détection de doublons inter-niveaux. N'utilise jamais de substitution textuelle sur des secrets. | Bibliothèque |
| Injecteur de variables runtime tenant | Pose des variables dans le fichier d'environnement runtime d'un client sur son VPS sans qu'aucune valeur ne passe par le chat, un argument de commande ou la sortie standard. La saisie des valeurs secrètes se fait en mode aveugle (sans écho). Un dépôt de coffre peut fournir les valeurs à la place. Sans terminal de contrôle disponible, l'outil refuse clairement plutôt que de planter. | CLI (geste opérateur) |
| Vigie de dérive des fichiers d'environnement | Détecte les clés en double à valeurs différentes entre fichiers, les conflits d'ordre de chargement, et les interpolations de variables. En mode garde, refuse d'écrire une valeur divergente. | Hook (avant écriture) / CLI |
Gestion des comptes web tiers
Les comptes web tiers (identifiants de connexion sur des services externes) sont gérés par un ensemble de composants dédiés qui appliquent des invariants stricts :
- Le mot de passe naît dans le processus (généré de façon cryptographiquement sûre), est chiffré immédiatement et ne sort jamais en clair.
- Aucune option ne reçoit le mot de passe en argument.
- La ligne de registre est créée en état pending avant la saisie, pour éviter toute fenêtre sans trace.
- La rotation conserve l'ancienne valeur chiffrée jusqu'à confirmation explicite.
- La révocation date le compte et vide ses blobs chiffrés.
- Chaque opération génère une ligne d'audit sans valeur ni hash.
Un empreintier de mots de passe calcule une empreinte HMAC (dérivée de la clé maître) stockée dans un fichier local protégé. Cette empreinte permet à un hook de détection de détecter une saisie en clair sans jamais avoir accès au mot de passe réel.
Une vigie de cohérence vérifie à la demande (jamais en cron automatique) que le registre, l'empreintier et l'audit sont cohérents. Elle contrôle notamment que les comptes révoqués ont bien leurs blobs vidés et que l'empreintier n'est pas plus ancien que la dernière écriture.
Un collecteur de secrets serveur remonte automatiquement les secrets nés sur un serveur client vers le registre central. Chaque ligne de flotte déclare où vivent ses secrets ; le collecteur les lit côté serveur (en mémoire, sans affichage), chiffre et upsert uniquement si la valeur a changé.
Pont MCP — SEO en lot, tokens tenant, serveur d'outils multi-harnais
Trois façades gravitent autour du protocole MCP (Model Context Protocol) : un client HTTP pour les opérations SEO en lot vers un client, un émetteur de token tenant sécurisé, et un serveur d'outils partagé entre tous les harnais.
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Émetteur de token MCP tenant | Génère un token MCP (32 octets aléatoires encodés en base64url), enregistre son hash en base de données et range le clair dans le fichier d'environnement local (jamais sur la sortie standard ni dans un fichier versionné). | CLI (geste d'infra ponctuel) |
| Serveur MCP stdio d'outils communs | Serveur JSON-RPC 2.0 écrit à la main, exposant les gestes de la maison aux trois harnais. Actuellement un seul outil en lecture : mesure d'adhérence d'un projet. | CLI (serveur stdio) |
| Client MCP SEO en lot | Pont HTTP par lequel les automates SEO écrivent les métadonnées d'une catégorie via l'outil dédié, sans accès SQL direct. Échoue bruyamment si le token est absent. | Bibliothèque |
Transport SQL et accès en lecture/écriture gardé
Un ensemble de façades assure l'accès contrôlé à la base de données de la flotte :
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Lecteur SQL multi-requêtes | Exécute N requêtes SQL en un seul appel, en lecture seule, avec résultats étiquetés et bornés. Remplace les séries de commandes SQL consécutives. Un mode --role-lecture force la connexion avec un rôle sans droit d'écriture ; en l'absence de ce rôle, l'appel échoue sans repli. |
CLI / Bibliothèque |
| Transport SQL unique | Point d'accès unifié vers une cible de la flotte. Le SQL est transmis par entrée standard (jamais en argument de commande). Ne décide pas si la cible est en production ou en dump. | Bibliothèque |
| Écriveur SQL sous garde | Écriture ponctuelle avec garde préalable (dump attesté, fail-closed). Par défaut, opère par ROLLBACK (dry-run). Exige une clause RETURNING sur les mises à jour et suppressions. Refuse les DDL. |
CLI / Bibliothèque |
Résolution de tenant — scope de session et cible d'écriture
La vérité unique sur l'identité d'un client, la session qui le pilote et la machine sur laquelle on écrit est centralisée dans le registre de la flotte. Aucun identifiant en dur, aucune adresse IP codée directement dans les scripts.
Composants de résolution
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Résolveur unique de tenant | Point d'entrée unique pour identifier un client de la flotte. Fail-closed sur toute ambiguïté. Vérifie les préconditions (base de données, Nuxt, PrestaShop, overlay, seed) avant d'autoriser une conduite. | CLI / Bibliothèque |
| Scope de session | Répond à « quel client pilote cette session ? » : lit la variable d'environnement de session, puis un fichier de scope temporaire par session, puis conclut à l'absence de scope. Expose l'objectif de spawn de la tentacule. | CLI / Bibliothèque |
| Cible d'écriture tenant | Répond à « sur quelle machine écrit-on ? » : résout SSH, conteneur, base de données, port Nuxt et domaine depuis le registre de la flotte. Un jeton ambigu (désignant plusieurs clients) n'est jamais résolu au premier venu — c'est une erreur. La résolution par défaut survit à une base de données hors service. | Bibliothèque / CLI |
| Cloisonnement MCP par tentacule | Fournit la configuration MCP et les variables d'environnement requises pour le client de la session active. Le fichier MCP du dépôt reste vide ; chaque session charge uniquement les serveurs MCP de son client. | CLI |
| Résolution SSH d'un VPS client | Résout les paramètres SSH d'un serveur client (utilisateur, chemin de clé, domaine) depuis le registre de la flotte, à partir d'un codename. Né d'un incident où une clé SSH codée en dur avait provoqué deux nuits de faux diagnostic. | Bibliothèque / CLI |
python3 -m <resolveur-tenant> <nom-du-client> --needs db,nuxt,prestashop
Commit isolé et intégrité de l'index Git
Le commit isolé par verrou protège l'index Git partagé contre les collisions entre sessions parallèles : chaque commit est réalisé sous un verrou global, ce qui empêche une session de corrompre l'index d'une autre session travaillant simultanément.
Famille orchestration — Vue d'ensemble
Ce groupe de composants forme le cœur opérationnel de l'orchestration agentique : réception et classification des demandes entrantes, spawn des agents, suivi des tâches, gestion des coûts et coordination des équipes de ventouses.
Doctrine d'invocation : tout spawn d'agent headless passe obligatoirement par le pont de spawn node-pty. L'invocation directe du CLI de l'agent est interdite. Cette règle est contrôlée mécaniquement.
Composants principaux
| Composant | Rôle | Mode d'exécution |
|---|---|---|
| Collecteur de boîte aux lettres Atlas | Poll IMAP de la boîte entrante toutes les 1 min. La porte de validation DKIM délègue au verdict du premier en-tête Authentication-Results posé par le MTA de confiance, avec exigence d'alignement entre le domaine signataire et le domaine From: (fail-closed). |
cron |
| Classificateur d'intent Atlas | Classe chaque message entrant parmi : run (léger ou plan), question, noise, negociation, conseil. L'intent chantier n'est plus auto-classé : un run de complexité plan le couvre ; la promotion en vrai chantier reste possible manuellement si le run s'avère non-testable ou irréversible. |
lib / CLI |
| Calibration du classificateur | Calibration mensuelle du classificateur d'intent. Aucune planification automatique active — lancement manuel uniquement. | CLI (manuel) |
| Moteur de spawn Atlas | Spawn headless de l'agent pour traiter les emails classifiés. Timeout 40 min ; anti-course : relecture du journal de flux si l'événement de résultat est perdu au drain stdout ; maximum 3 spawns par cycle ; modèle sonnet par défaut. |
worker |
| Extracteur de pièces jointes | Extraction et scan antivirus des pièces jointes des emails entrants. | lib |
| Expéditeur Atlas | Envoi de réponse par email avec triple correspondance anti-usurpation. | CLI |
| Compositeur de réponse client | Machine à états (étape T3 du flux de réponse client) : compose l'email « travail terminé » avec le message client proposé dans un bloc délimité éditable, extraction déterministe des modifications, rédaction adaptée au registre du client. | CLI |
| Expéditeur de réponse client | Machine à états (étape T1) : envoi à jeton unique (valable 24 h) de la réponse au client final, après validation explicite de l'opérateur, avec preuve QA et capture annotée en pièce jointe. | CLI |
| Dispatcher de réponse client | Machine à états (étape T4) : route un email entrant (transfert de l'opérateur) vers la bonne étape selon le marqueur sujet et le statut en base. Décision pure testable séparée de l'exécution. | CLI |
| Cycle ReAct par tâche | Exécute le cycle Observation–Réflexion–Action pour chaque tâche active (doctrine chantier-v2). | worker |
| Graveur automatique de cicatrices ReAct | Grave automatiquement les cicatrices depuis les patterns ReAct. Déclenché en mode événementiel par le worker de tâches à chaque sortie en erreur — aucune planification cron. | lib (event-driven) |
| Worker de tâches |
Démon central de l'autonomie (boucle d'exécution des tâches) :
|
worker |
| Outil de déblocage assisté | Atlas rédige un plan de déblocage pour une tâche bloquée. | CLI |
| Détecteur de blocages automatique | Détecte les tâches bloquées et déclenche automatiquement un spawn Atlas pour les débloquer. | cron |
| Détecteur de dérives |
Pause automatique des tâches dérivantes (>3 h sans mise à jour ou >150 000 tokens) et surveillance de flotte multi-signatures :
|
cron |
| Chat console — questions | Tour de conversation console pour le mode Questions (Atlas). | CLI |
| Chat console — runs scopées | Tour de conversation console pour les runs scopées (Atlas). Le garde-fou du mode négociation renvoie toute prise de rendez-vous vers le lien souverain de l'opérateur. | CLI |
| Formalisateur de lettre de mission | Worker hôte pour formaliser la lettre de mission d'un chantier commercial. | worker |
| Résumé ReAct quotidien | Résumé quotidien des cycles ReAct. Ligne cron désactivée ; lancement manuel uniquement tant qu'elle n'est pas réarmée. | CLI (cron désarmé) |
| Pont CLI→cockpit — liaison de session | Déclare ou révoque le lien entre une session interactive et un chantier dans un fichier d'état temporaire. | lib / CLI |
| Pont CLI→cockpit — hook d'événement | Invoqué par le hook PostToolUse : lit l'entrée JSON, synthétise un événement de flux et le pousse dans la table des événements si un lien est actif. |
lib (hook) |
| Pont CLI→cockpit — cycle de vie | Allume et éteint les surfaces cockpit selon l'état d'exécution : pulse running vers la table d'exécution, carte doing/done vers le statut des tâches, poll toutes les 5 s. |
lib |
| Émetteur cockpit ad hoc | Émet à la demande un fragment message ou thinking dans la timeline cockpit depuis la persona du lien actif. |
CLI / lib |
| Journal de négociation | Émet des événements typés et signifiants (note, strategie, decision, objection, next-step…) dans la timeline du pipeline commercial — jamais de brut shell. |
CLI / lib |
| Démon HTTP de pilotage CLI |
Démon HTTP local exécutant des commandes tmux pour le compte de l'API du hub (isolation conteneur → passerelle réseau → démon hôte → tmux). Authentification par jeton en comparaison à temps constant + liste de blocage défense-en-profondeur des patterns destructifs.
|
worker |
| Mesure d'âge du code exécuté | Vérifie, pour un processus long, que le code sur disque est bien celui chargé au démarrage : empreinte de contenu des modules (le timestamp ne sert que de déclencheur, un déploiement peut réécrire le checkout sans changer un octet). Rend uniquement la mesure (code_le ; valeur 0.0 = âge inconnu, jamais « à jour »). Importé par le démon de pilotage et le worker de déploiement. |
lib |
| Commandes humaines à la demande | Une ventouse peut poser une commande qu'elle demande à l'opérateur de lancer : affichée en bouton dans le cockpit ; au clic, la commande est tapée dans le pane concerné. Deux modes : déclarée manuellement ou détectée dans la dernière réponse de l'agent (hook Stop). Une ventouse peut cibler une autre ventouse. Garde anti-destructif avant tout envoi. |
CLI / hook Stop |
| Pont de spawn node-pty | Spawn du CLI agent via node-pty avec drain stdout avant fermeture du processus (évite la troncature de pipe) ; timeout SIGKILL câblé proprement avant onExit. |
lib |
| QA post-déploiement Atlas | QA à deux niveaux après chaque déploiement Atlas. | cron / CLI |
| Tableau de bord CLI live | Dashboard CLI en temps réel des spawns de la boîte entrante Atlas. | CLI |
| Worker de spawn fix-bot | Worker détaché qui spawne un agent de correction sur un bug découvert. | worker |
| Tick d'autonomie quotidien | Cold-start des chantiers en mode autonome : génère la première tâche en attente pour chaque chantier éligible, sous contrôle de budget et kill-switch. Tourne toutes les 2 min mais ne génère des tâches que dans la fenêtre d'autonomie configurée en base (pilable jour par jour par un skill dédié). | cron (toutes les 2 min, --live) |
| OCR local sur images | Extraction de texte par OCR local (Tesseract) sur les images en pièce jointe des emails Atlas — sandwich anti-injection de prompt, maximum 3 images, 5 Mo. | lib |
| Surveillance du verrou de collecte | Alerte si le verrou du collecteur de boîte aux lettres est présent depuis plus de 10 min (verrou zombie). | cron (toutes les 15 min) |
| Hook d'identité tenant | Hook PreToolUse:Agent : détecte les identifiants de tenant cités au spawn d'un sous-agent et injecte leur carte d'identité (domaine, vertical, propriétaire) — anti-confabulation. |
hook |
| Gestionnaire d'escalade | Escalade active des tâches bloquées : email immédiat à l'opérateur + spawn Atlas qui décide retry / rescope / intervention humaine requise. | CLI |
| Lieur de réponse d'escalade | Lien déterministe entre la réponse de l'opérateur et une escalade : correspondance par identifiant de tâche ou en-tête In-Reply-To, résolution approve / reject / instruction. |
lib |
| Lanceur multi-harnais | Lanceur d'un run d'agent via un harnais alternatif (Codex ou Antigravity) : réécrit leur flux au format stream-json standard pour que le worker de tâches n'y voie aucune différence. Refuse les templates bornés par liste de commandes. Résolution du binaire robuste hors PATH cron. Harnais Muse inclus. |
worker |
| Façade shell du catalogue de routage LLM | Façade shell du catalogue de routage LLM en base : default, tier <opus|sonnet|haiku>, suffix <modèle>, known <modèle>, split <camp>. Couche pure + couche transport (docker, timeout 3 s). Parité avec le registre Python mesurée par un test automatisé. |
lib / CLI |
| Résolveur de maquette de référence | Désigne la maquette de référence parmi les pièces jointes d'un email : trois filtres (lisibilité PIL dont PSD, format desktop/mobile, nom avant/après), l'analyse visuelle tranche en dernier recours. | lib |
| Compositeur de planche de preuve | Compose une planche de preuve (PIL) : captures côte à côte sous un bandeau numéroté des points traités et du verdict de vérification visuelle, sans cadres dessinés. | lib / CLI |
| Registre de camps et routage modèle | Registre de camps et décision de routage de modèle partagée : précédence du veto client sur la doctrine du camp sur le modèle recommandé. Résolution du modèle de spawn et du modèle juge, vérification de santé du proxy. Importé par une dizaine de composants. | lib |
| Garde de budget mensuel | Refuse de générer ou d'exécuter du travail autonome au-delà du budget mensuel. Compte les dépenses réellement facturées (hors coût API-équivalent du forfait) contre le budget configuré en base. Fail-open ; kill-switch configurable. | lib / CLI |
| Snapshot quotidien de rapport | Pose un snapshot quotidien dans la table de rapport du matin et passe à resolved les lignes des jours précédents, pour qu'un capteur bavard ne noie pas les alertes. Les alertes ne passent pas par cette table. |
lib |
| Arbitre de poches de forfait | Arbitre les deux poches de forfait fixe : bascule un run sur l'autre poche quand l'une est saturée, bloque seulement si les deux le sont. Lecture des jauges en fail-open. | lib |
| Exécuteur de scripts sans LLM | Deuxième exécuteur du pipeline d'autonomie : exécute des lignes de commande déclarées sans appel LLM (0 €), sans shell, via une liste d'autorisations limitée aux fichiers suivis par git. Code retour 126 si refus, 127 si pas de commande. | lib |
| Worker de run console | Worker Python détaché qui exécute un run de type console : lance le pont de spawn, persiste chaque événement, puis met le run à done ou failed. Refuse de spawner si le plafond de coût est absent. |
worker |
Sous-famille — Pont CLI vers cockpit
Pipeline ajouté pour relier la session interactive de l'agent au cockpit de suivi en temps réel. La session peut déclarer quel chantier elle pilote ; un ensemble de composants anime alors la vue du chantier via la table des événements d'agent. Un kill-switch désactive l'ensemble sans interférer avec les runs.
Le pont de spawn node-pty reste le seul moyen autorisé de spawner un agent headless. Toutes les invocations programmatiques passent par lui.
| Composant | Rôle | Mode d'exécution |
|---|---|---|
| Liaison de session (pièce 1/3) | Déclare ou révoque le lien entre une session interactive et un chantier dans un fichier d'état temporaire. | lib / CLI |
| Hook d'événement cockpit (pièce 2/3) | Invoqué par le hook PostToolUse : lit l'entrée JSON, synthétise un événement de flux et le pousse dans la table des événements si un lien est actif. |
lib (hook) |
| Cycle de vie cockpit (pièce 3/3) | Allume et éteint les surfaces cockpit selon l'état d'exécution : pulse running vers la table d'exécution, carte doing/done vers le statut des tâches, poll toutes les 5 s. |
lib |
| Émetteur cockpit ad hoc | Émet à la demande un fragment message (💬) ou thinking (💭) dans la timeline cockpit depuis la persona du lien actif. |
CLI / lib |
| Journal de négociation | Émet des événements typés et signifiants dans la timeline du pipeline commercial — jamais de brut shell. | CLI / lib |
| Diagnostic du pont | Diagnostic opérationnel du pont CLI→cockpit : état du lien, des hooks, du kill-switch et du dernier événement émis — lecture seule, aucun effet de bord. | CLI |
| Smoke-test du pont | Isole le lien sur un fichier temporaire, valide la synthèse d'événement et le masquage anti-fuite en pur Python (pas d'écriture en base). | CLI (test) |
Sous-famille — AgentRunner multi-LLM
Architecture d'exécution agentique provider-agnostique : un contrat commun AgentRunner et N backends routés par travail. Tous les événements alimentent la table des événements d'agent (cockpit) ; les coûts sont tracés via la table de coûts croisée au catalogue de tarification (zéro prix en dur dans le code).
| Composant | Rôle | Mode d'exécution |
|---|---|---|
| Contrat commun AgentRunner | Définit le contrat partagé AgentRunner et implémente le backend du CLI agent via le pont node-pty, sans toucher au worker de tâches. Expose les fonctions get_runner() et record_cost(). |
lib |
| Socle FinOps multi-LLM | Calcul du coût par couple (fournisseur, modèle) depuis le catalogue de tarification, agrégat par chantier avec ventilation par marque. CLI de diagnostic. | lib / CLI |
| Routeur de marque par travail | Lit le champ runner du travail et dispatche vers le backend nommé, avec repli sur le backend par défaut en cas d'erreur de résolution. |
lib / CLI |
| Backends alternatifs (Mistral, DeepSeek, Gemini) | Boucle agentique maison provider-agnostique : appelle l'API LLM directement (format OpenAI-compatible), réutilise les primitives de résultat, de persistance d'événements et de calcul de coût. | lib |
| Cron de rejeu premium | Sonde le forfait principal (1 token), rejoue les tâches marquées replay_on_reset (basculées sur marque de secours lors d'un plafonnement) ; sans effet si le forfait est encore épuisé ou s'il n'y a rien à rejouer. |
cron |
Sous-famille — Pool de ventouses (fan-out)
Une équipe de ventouses peut être spawnée d'un geste depuis le cockpit terminal. Le pool porte une enveloppe commune avec deux bornes distinctes : un plafond de tours (messages échangés) et un plafond de coût en euros — aucun des deux ne remplace l'autre. Les messages échangés entre ventouses d'un même pool sont typés et conservés en base ; seuls des champs courts voyagent dans le payload, les données volumineuses passent par une référence d'artefact.
| Composant | Rôle | Mode d'exécution |
|---|---|---|
| Messagerie typée du pool |
Messages typés d'un pool de ventouses, adressés par session et conservés en base.
CLI : send --to <id> --kind <type> --payload '{...}', inbox, ack.
Chaque payload valide passe par un filtre déterministe « étage 0 » (moins d'1 ms, zéro token, avant insertion) qui vérifie les invariants géométriques extraits du payload : caractéristique d'Euler, angle sliver minimal, auto-intersections, quads dégénérés, symétrie. Un message hors plancher n'est jamais inséré ni ne déclenche d'appel LLM.
|
CLI / lib |
| Compteur de budget de pool |
Mesure la consommation réelle (tokens facturés, tours, euro API marginal) en face du plafond du pool.
|
lib / CLI |
| Wrapper de lancement de ventouse tenant | Branche les seuls serveurs MCP du tenant, ajoute la configuration MCP stricte aux ventouses scopées, puis passe la main au binaire du profil. Fail-open intégral. | CLI |
| Messagerie interpool | Façade de la messagerie entre pools distincts. Envoi, boîte de réception, accusé de réception sur la table dédiée. Un message est un constat, jamais une tâche ; les garde-fous vivent dans les déclencheurs SQL. | skill / CLI |
| Spawn de ventouse par une ventouse | Une ventouse ouvre une nouvelle ventouse dans le bras de son choix avec un objectif persisté. Refus : appelant inconnu, bras/mode incompatibles, slug déjà vivant ou bras saturé. | CLI / skill |
| Auto-réponse de ventouse |
Frappe dans une ventouse l'une des réponses proposées par la modale « Boutons », automatiquement, toutes les N minutes, jusqu'à P tours sans geste humain.
|
cron (toutes les minutes, verrou) / CLI |
| Critère d'arrêt du pool | Liste fermée de critères d'arrêt du pool (état vert/rouge/en cours/à confirmer, maximum 24 lignes). Chaque ligne peut porter une échéance : le battement dort tant que le pool n'attend qu'une échéance future. Seul le juge écrit ; toute ligne qui défère à l'opérateur est refusée. La preuve de réussite est fournie à la clôture. | CLI / skill |
| Battement du pool |
Réveil périodique du chef de pool (Atlas par défaut) pour les pools calés mais inachevés et sous budget.
--live ; sans --live = dry-run).
|
cron / skill |
| Recrutement dans un pool | Le chef d'un pool vivant recrute un agent dans son bras, sous l'enveloppe du pool. Coût d'amorçage réservé sur l'enveloppe, rendu si le spawn échoue. Refus : pool gelé/fermé, agent déjà membre, bras plein, hors budget. | CLI (session du chef) / skill |
| Réconciliation des ventouses |
Referme en base ce que la réalité a déjà fermé, en deux passes :
--live, timeout 120 s).
|
cron |
| Filtre géométrique Système 1 | Étage 0 local : extrait par regex les invariants géométriques d'un message de pool et les vérifie en moins d'1 ms / 0 token avant tout dispatch LLM. Contient aussi le détecteur de boucle/blocage et le compilateur de grammaire de contrainte. | lib |
| Dispatcher d'démarrage de messagerie | Écoute les notifications PostgreSQL de la messagerie inter-ventouses (balayage de secours) ; n'envoie que le prompt constant de réveil, seulement si le pane est prêt (double vérification), avec cadence croissante et plafond. | worker (service systemd) |
| Restauration des ventouses au boot | Rejoue après un redémarrage les ventouses restées ouvertes en base : les remet dans l'ordre des bureaux et relance chacune avec reprise de session (espace de travail isolé uniquement) ; s'arrête au premier refus de plafond. | worker (service systemd, démarrage unique au boot) |
| Page souveraine de ventouse | Gère la page publique d'une ventouse (enregistrement de la publication, rappel de l'URL au démarrage, relance aux jalons commit/deploy avec silence de 30 min). Fail-open. | lib (hook PostToolUse + SessionStart) |
| Handoff avant bascule de harnais | Si aucun handoff rempli et récent n'est disponible, demande à la session sortante d'en écrire un avant la bascule, dans un délai borné par le budget client du switch (fail-open, ne bloque jamais la bascule). Kill-switch configurable. | lib |
| Compteur de tokens de session | Mesure les tokens cumulés de la session pour la barre de statut : lecture incrémentale du transcript (déduplication par identifiant de message), repart à zéro au /clear. Cache temporaire pour éviter de relancer Python à chaque relevé sur une session au repos. Silencieux en cas d'erreur. |
CLI (barre de statut) / lib |
| Métriques système de l'hôte | Santé de l'hôte pour l'onglet Système du cockpit terminal : RAM disponible, pression PSI mémoire/CPU/io, CPU par cœur, charge, disque, et consommation RSS+CPU de l'arbre de processus de chaque session tmux active. Échantillonneur en thread (10 s), anneau de 6 h en mémoire (pas de table, pas de cron — repart à zéro au redémarrage du démon). | lib (importé par le démon de pilotage CLI) |
| Ouvreur de ventouse | Ouvre une ventouse depuis une session, par la route du bouton Spawn du cockpit terminal. Options : slug, bureau, objectif, mission, mode tronc ou espace de travail isolé, dry-run. Attend l'invite de l'agent avant de taper la mission. Peut fermer une ventouse existante. | CLI / skill |
| Lanceur du profil Codex natif |
Lanceur natif du profil Codex :
|
CLI |
| Façade de consommation des CLI agentiques |
Mesure unique de consommation des CLI agentiques : lit les transcripts locaux des agents, dédupliqués sur (identifiant de message, identifiant de requête). Rend la fenêtre de 5 h ancrée et les 7 derniers jours, ventilés par camp.
--refresh sous verrou).
|
cron + CLI |
Sous-famille — Adaptateurs du harnais Codex
Chaîne d'adaptateurs pour le harnais Codex : transport JSON-RPC → registre de sessions → démon de pilotage ; brief d'agent et garde de contexte branchés au lancement et en hook.
| Composant | Rôle | Mode d'exécution |
|---|---|---|
| Transport JSON-RPC Codex | Transport JSON-RPC sur stdio vers le serveur applicatif Codex : gère le cycle de vie du processus et le protocole, ne décide ni mission, ni profil, ni outils. Importé par plusieurs composants. | lib |
| Registre de sessions Codex | Registre de cycle de vie des sessions Codex : un processus par ventouse, un thread associé, tours, événements, approbations, arrêts. Valide session, modèle, politique d'approbation et périmètre. Chemin expérimental — tmux reste le runtime par défaut. | lib |
| Générateur de brief d'agent Codex | Génère le fichier de brief (AGENTS.md) dans le répertoire de la ventouse depuis les données de session, d'agent et de pool (persona, mission, pool). Fail-open absolu : aucun secret, aucun fichier si la base est indisponible. |
CLI (avant le lancement de Codex) |
| Garde de contexte Codex | Lit la queue du journal de tokens et, au-delà du seuil configurable (80 000 tokens par défaut), refuse tout nouvel outil pour imposer une compaction. Pose une demande de remise à zéro de session. Fail-open sur toute erreur. | hook (PreToolUse, timeout 6 s) |
Sous-famille — Meta-harnais portable (Claude / Codex / Antigravity)
Registre de profils, paquet transportable de skills, relais des hooks vers les harnais alternatifs et sentinelle de leurs sessions. Le paquet et le registre sont des artefacts de transport et de découverte — jamais des commandes d'activation.
| Composant | Rôle | Mode d'exécution |
|---|---|---|
| Registre de profils de harnais | Registre technique portable des harnais (identifiant, fournisseur, runtime, camp, transport). Le manifeste public ne contient ni commande, ni chemin, ni secret. Cinq harnais natifs : Claude, GLM, Codex, Antigravity, Muse. | lib / CLI |
| Constructeur de paquet de skills | Construit ou valide un paquet portable de skills : profils du registre, skills lus en base, contrôle des chemins absolus, des remontées de répertoire et des motifs de secrets, empreinte SHA-256. Artefact de transport, jamais d'activation. | lib / CLI |
| Sentinelle des sessions d'agents | Tue les outils de recherche (grep, rg, find…) descendants d'une CLI d'agent au-delà du timeout configuré et signale les CLI trop gourmandes en RAM. Purge les journaux de tâche dépassant la rétention. Sans --apply : constat seul, aucun LLM. |
cron (toutes les 5 min pour la surveillance ; quotidien pour la rétention) |
| Relais de cycle de vie vers les harnais alternatifs | Relaie les hooks de cycle de vie (Stop, UserPromptSubmit, SessionStart) vers Codex et Antigravity : payload projeté au contrat standard, transcript natif converti, hooks en parallèle avec leur timeout, fail-open. Muse projeté en transcript standard pour le hook Stop. Les transcripts portent les données d'usage et les compactions. | hook (Codex et Antigravity) |
Sous-famille — Muse Code, 5e harnais natif de ventouse
Muse Code (Muse Spark 1.3, abonnement Power) rejoint les quatre harnais existants comme CLI de ventouse. Le fournisseur refuse les adresses IP de datacenter : tout appel sans interface résidentielle passe par un relais local, jamais directement. Les hooks P0 sont projetés vers le fichier de hooks Muse ; la parité est mesurée automatiquement (zéro manquant sur les quatre harnais).
| Composant | Rôle | Mode d'exécution |
|---|---|---|
| Lanceur borné Muse Code | Lanceur de Muse Code : valeurs du hub validées par regex avant passage comme arguments (jamais eval) ; hooks de travail activés dans tous les modes (--trust-workspace) ; modèle forcé ; mise à jour automatique désactivée ; garde anti-profil contributeur ; trafic routé via le relais HTTP local. |
worker (lancé par le wrapper tmux profil muse) |
| Relais HTTP local pour Muse | Proxy HTTP CONNECT local devant le tunnel SOCKS sortant vers le réseau résidentiel. Gardes : écoute locale uniquement, méthode CONNECT uniquement, port 443 uniquement, hôtes du fournisseur uniquement. Tunnel absent ⇒ 502 (jamais de repli en sortie directe). | worker (service systemd) |
| Script d'installation du relais | Installe (idempotent) les deux services du relais Muse (tunnel SOCKS et proxy HTTP), vérifie la connectivité vers le fournisseur et le refus d'hôtes hors liste. Retrait documenté en tête de fichier. | CLI (geste opérateur) |
| Tour Muse via serveur applicatif (MSP) | Exécute un tour Muse Code via le protocole JSON-RPC du serveur applicatif Muse : lit les événements d'usage (fenêtre 5 h + semaine, tokens de session), extrait la réponse du dernier message de l'agent de la session racine (les sessions enfants sont ignorées). Ne décide ni du prompt ni de la politique. | lib |
Sous-famille — Liaison ventouse du cockpit In-Situ
Le cockpit In-Situ d'un site client est relié à la mothership : une demande tapée dans le cockpit est remise à la ventouse du tenant, qui la traite avec le LLM de son harnais et répond dans le cockpit. La mothership n'expose aucun port public : elle ouvre une connexion SSE sortante vers chaque site client et répond par des POST signés (clé partagée stockée dans la configuration du tenant, jamais affichée). Aucun LLM dans le transport. Une demande dont l'identifiant est déjà connu ne sera remise qu'une seule fois, même en cas de rejeu.
| Composant | Rôle | Mode d'exécution |
|---|---|---|
| Service de liaison In-Situ |
Maintient une connexion SSE par tenant (reconnexion avec backoff exponentiel 1→60 s, liaison déclarée morte après 45 s sans ping) et gère le cycle de vie des demandes entrantes :
|
service (systemd, à confirmer) / CLI |
| Coupe-circuit des outils payants | Coupe-circuit des outils à coût variable : lit le drapeau d'environnement de démonstration et lève une exception avant tout appel réseau ou lecture de credential. Câblé sur les façades payantes identifiées. | lib |
| Relais déterministe In-Situ (antérieur à la liaison SSE) | Tire par accès distant les prompts en attente des cockpits In-Situ d'un serveur cible, les passe en état delivered et notifie la ventouse concernée. Mode unique ou surveillance périodique. Relation avec le service SSE non tranchée dans le code. |
CLI |
| Façade de réponse In-Situ | Réponse de la ventouse à un prompt In-Situ : identifiant du prompt, statut (done ou needs_code), contenu de la réponse, sélecteur CSS optionnel avec surcharge CSS en direct. Même transport distant que le relais. |
CLI |
Wrapper tmux multi-profil
Le wrapper tmux de pilotage CLI sélectionne la session tmux et le binaire au lancement selon le profil demandé :
- claude : session
synedre-claude, binaire agent principal via variable d'environnement. - glm : session
synedre-glm, proxy local vers le modèle GLM (jamais le service Z.ai en direct). - codex : session
synedre-codex, CLI Codex natif. - antigravity : session
synedre-antigravity, CLI Antigravity (agy, Gemini), effortlow/medium/high. - muse : session
synedre-muse, lanceur borné Muse Code.
Sous-commandes disponibles : start, status, list, send-keys, send-ctrl, send-special, capture, stop, stop-keep. La sous-commande stop-keep tue la session tmux en conservant l'espace de travail et les transcripts (conçue pour la bascule de harnais, réutilisée par le bouton « Relâchement » du cockpit). La reprise --continue est ignorée lors d'une bascule vers ou depuis Codex/Antigravity (formats de transcript incompatibles — toujours une nouvelle conversation). Plafond actuel : 40 ventouses en aspiration simultanée.
Camp des harnais à forfait fixe : les profils Codex et Antigravity n'appartiennent ni au camp occident ni au camp orient — le registre de camps ne les connaît pas, et le garde cross-camp se tait plutôt que d'inventer un verdict sur un catalogue vide.
Famille Chantiers — workflow en sept étapes
La famille Chantiers regroupe l'ensemble des composants qui gouvernent le cycle de vie d'un chantier : de sa création depuis un email entrant jusqu'à sa clôture automatique après validation QA. Le point d'entrée officiel est la commande bin/chantier-from-email, exposée également via le skill /chantier.
Composants principaux
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Créateur de chantier depuis email | Crée un chantier client à partir d'un email entrant (étapes 0a → 4 sous contrainte) | CLI / skill /chantier |
| Suivi live CLI | Affiche en temps réel les événements agents sur un chantier actif dans le terminal | CLI |
| Générateur de lettre de mission | Produit un draft de lettre de mission pour un chantier | Bibliothèque |
| Gestionnaire d'équipes | Gère les équipes recrutées par chantier | Bibliothèque |
| Enregistrement de session | Active Record pour les sessions d'agent attachées à un chantier | Bibliothèque |
| Pipeline d'explosion discovery | Pipeline LLM qui transforme automatiquement une discovery en tâches d'implémentation | Worker |
| Audit Atlas post-explosion | Vérifie la cohérence du graphe Atlas après l'explosion d'une discovery | CLI |
| Audit de pertinence | Évalue si les chantiers actifs restent pertinents. ⚠️ Cron désactivé — la ligne planifiée est commentée depuis l'épuisement du forfait LLM ; lancement manuel uniquement jusqu'à réarmement explicite. | CLI (cron désarmé) |
| Détecteur de dérive (DRIFT) | Détecte les chantiers dont le statut ment : un chantier peut rester en planning pendant des semaines alors que le code de ses zones a évolué dans un autre chantier, été modifié manuellement, ou que le chantier est mort sans avoir été clos — le backlog affiche « en cours » ce qui ne l'est plus. Cascade N0 → N1 → N2. Cron actif : 15 9 * * * avec l'option --apply. |
Cron quotidien |
| Moniteur de chantiers autonomes (CLI) | Même flux que le cockpit web, mais dans le terminal. Filtre le bruit (~95 % des événements sont des signaux système sans valeur opérationnelle) et n'affiche que le signal réel (actions d'agent et résultats d'outil). Disponible via le skill /monitoring-live. |
CLI / skill /monitoring-live |
| Classifieur de régime à l'intake | Classe le régime et l'éligibilité à l'autonomie d'une demande à son entrée (régime, autonomie_eligible, rationale) ; backend LLM léger, cache idempotent basé sur une empreinte de l'input. Appelé par le créateur de chantier depuis email. |
Bibliothèque |
| Prompt du classifieur | Prompt et exemples few-shot du classifieur, édités indépendamment du module exécutif pour itérer sans toucher la couche réseau/cache. Doctrine : Run = défaut, Chantier = exception ; 3 régimes selon 3 critères (testable, réversible, transversalité). | Bibliothèque |
| Arriéré de reclassification de régime | Reclasse les chantiers actifs dont le régime n'a pas encore été calculé (antérieurs au classifieur d'intake) via le moteur de classification avec cache. Refuse les chantiers armés. Dry-run par défaut, options --apply, --max, --only. |
CLI |
| Déducteur de zones | Rend décidables les chantiers sans zones : infère les périmètres de code depuis les commits citant l'identifiant du chantier, et borne la fenêtre d'acquittement de dérive sur le dernier commit citant. N'invente aucune zone pour un chantier sans commit historique. | CLI |
| Audit de readiness | Évalue la complétude d'un chantier pour l'autonomie (verdicts : ready / incomplet / vague / container). Ce verdict est un gate dur : seul un chantier ready peut être armé par l'auto-armeur. Enrichit via LLM les champs dérivables manquants (--enrich), désarme les chantiers armés à tort, supprime les coquilles vides (--discard-vague). Cron réactivé : */20 * * * * avec l'option --apply (sans --enrich, donc sans appel LLM). Exposé via le skill /chantier-audit. |
Cron (*/20 * * * *) / CLI / skill /chantier-audit |
| Auto-armeur de chantiers prioritaires | Arme automatiquement les chantiers éligibles à l'autonomie nocturne, gaté par l'audit de readiness. N'arme que les chantiers ready. Couvre toutes les priorités P0 à P3 — le frein n'est plus la priorité mais le budget de quota LLM bordé par le pool et la fenêtre off-peak. Cron actif : ligne dédiée à 22h10 avec pool borné. |
Cron (22h10) / option de kill-switch |
| Alerte budget chantier | ⚠️ Supprimé — placé en corbeille lors de la purge des scripts sans exécution récente. Ce composant envoyait une alerte email à 80 % du plafond de coût d'un chantier. Récupérable pendant 30 jours, puis purge définitive par l'Élagueur. | — |
| Calcul du coût par chantier | Agrège les événements agents et produit un coût API-équivalent par chantier (simulation du coût si l'on était en mode API, même en régime forfait). Alimente le bandeau du cockpit chantier et le tableau de bord de pilotage. | CLI / bibliothèque |
| Bascule de mode de facturation | Arme ou désarme manuellement le mode de facturation d'un chantier : forfait ou API à l'usage. Options : sélection du chantier, bascule exclusive, plafond de coût, liste des chantiers en mode API, estimation pré-vol sans modification. | CLI |
| Notification de clôture | Envoie un email de notification quand un chantier autonome a terminé toutes ses tâches. Déclenché par le worker, idempotent. | CLI |
| Décomposeur de travail en tâches | Décompose un travail existant en tâches atomiques (remplit un travail vide, sans créer de travaux frères). | Bibliothèque |
| Décomposeur de tâche en micro-tâches | Éclate une tâche trop volumineuse (ayant subi des timeouts répétés) en 3 à 6 micro-tâches tenant dans la fenêtre de contexte. Appelé par le worker de tâches sur déclenchement. | Bibliothèque |
| Linter de plan de test | Vérifie qu'un plan de test est exécutable (axes visuel, SQL, code) et qu'il cible bien l'environnement réellement déployé. | Bibliothèque |
| Arriéré de plans de test | Génère des plans de test machine-exécutables sur les chantiers en attente de validation, via scaffold puis appel LLM. Batch borné, idempotent. | CLI |
| Pilotage de la fenêtre d'autonomie | Façade de configuration de la fenêtre horaire d'autonomie par jour de la semaine (7 lignes, lundi à dimanche). Source de vérité lue par le tick et le worker. Exposé via le skill /fenetre-autonomie. |
Skill / bibliothèque |
| Gate snapshot pour runs en mode plan | Faute d'environnement de preprod dédié au vaisseau-mère, ce composant en tient lieu : il snapshotte l'état du dépôt avant le run, laisse le run s'exécuter, lance un test de non-régression, et restaure automatiquement (revert + annulation de migration) si le test échoue. | Bibliothèque (importée par le worker de tâches) |
| Qualification légale et solvabilité | Interroge les registres publics (SIRENE, BODACC, Pappers en option) pour qualifier légalement et évaluer la solvabilité d'une entreprise. Produit un indice structuré et un livrable de solvabilité. Supporte un mode lot avec plancher de solvabilité. | CLI / bibliothèque |
| Active Record — Négociation | Fournit le contexte complet d'une négociation (entité, contacts, événements, chantier lié, qualification, livrables) et scaffold un dossier de négociation (7 livrables templates, idempotent). Façade du skill /negociation. |
Bibliothèque / CLI |
| Active Record — Run | Fournit le contexte complet d'un run (périmètre résolu, exécutions de tâches associées). Façade CLI. Doctrine : le run est la voie par défaut, le chantier est l'exception. | Bibliothèque / CLI |
| Démarreur de travail de négociation | Démarre le travail associé à une négociation. | CLI |
| Enrichisseur d'événements de négociation | Worker asynchrone qui enrichit les événements de négociation non encore traités. | Worker |
| Reclassificateur de négociation | Déplace une négociation mal catégorisée vers la bonne catégorie. | CLI |
| Scanner de leads entrants | Scanne les leads entrants depuis les réservations Calendly. Disponible via les skills /malt et /inbox. |
Cron / skills |
| Validateur QA d'un travail | Valide un travail par son équipe. Résout dynamiquement la racine du dépôt depuis le worktree actif. | Worker |
| Estimateur de tokens | Estime le volume de tokens et recommande un modèle LLM adapté à une tâche donnée. | Bibliothèque |
| Prompt de l'estimateur de tokens | Prompt et exemples few-shot de l'estimateur, importés par le moteur d'estimation. Restauré après une mise en corbeille erronée lors de la purge automatique — le module d'estimation plantait sans lui. | Bibliothèque |
| Détecteur de patterns récurrents | Détecte les patterns récurrents dans l'historique des itérations de tâches. | Cron |
| Détecteur de bugs pré-existants | Identifie les bugs pré-existants dans les runs d'agents avant qu'ils ne soient attribués à tort au chantier en cours. | Bibliothèque |
| Nettoyage des verrous de chantier | Supprime par TTL les verrous de chantier expirés. | Cron |
| Tests E2E — résolution en cascade | Tests de bout en bout sur le mécanisme de résolution en cascade des dépendances. | CLI (test) |
| Tests E2E — parallélisme multi-terminaux | Tests de bout en bout sur l'exécution parallèle de plusieurs sessions simultanées. | CLI (test) |
| Script de rollback de verrou | Permet d'annuler manuellement un verrou de chantier bloquant via une requête SQL de rollback. | SQL |
| Rafraîchissement des KPI de résultat | Met à jour la valeur courante de l'indicateur de résultat (outcome_kpi) pour les chantiers qui en portent un. Cron actif à 17h00 chaque jour. |
Cron quotidien (17h00) |
| Décomposeur d'objectif en chantiers | Décompose un objectif de haut niveau en un ou plusieurs chantiers autonomes, chacun classé par le moteur de classification. Backend LLM intermédiaire, verrou par objectif, rattachement atomique. N'exécute aucune tâche — décompose uniquement. | Bibliothèque (appelée par le tick d'objectif, cron */10 * * * *) / CLI |
| Sonde de sections de pages | Sonde de validation : compte, sur la base de données de preprod d'un client distant, les pages sans section ou les sections manquantes. Produit un nombre sur la sortie standard. Prouve que le seed a bien écrit les données, sans vérifier leur fidélité. | CLI (lancée comme sonde de résultat) |
| Exécuteur SQL de preuve QA | Exécute l'axe SQL d'une preuve de QA sur la base cible réelle (cible résolue depuis le registre des clients, requête encodée en base64). Échoue bruyamment si la cible est inconnue, sans se replier silencieusement sur l'environnement central. | Bibliothèque / CLI |
Sous-famille — Orbite QA et auto-clôture des chantiers
Cette sous-famille automatise la validation finale et la clôture des chantiers arrivés en phase de test. Elle repose sur deux agents distincts opérant en pipeline.
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Scanner QA — T1 (agent Turing) |
Scanne les chantiers en statut test sans verdict récent, déclenche l'orbite QA (T2), persiste le verdict et applique la transition test → done uniquement si le verdict est vert ET que le chantier est auto-clôturable.
Garde-fou d'auto-clôture : un chantier dont le déploiement requiert une commande de ship vers un client n'est auto-clôturable que si ce client a explicitement autorisé le ship automatique dans son paramétrage. Les déploiements internes (commande ./deploy), les tâches planifiées et les chantiers sans commande de ship sont toujours auto-clôturables.
Anti-spam : lorsque la QA est verte mais que le ship n'est pas automatisable, une seule notification est émise ; les scans suivants détectent que la notification a déjà été envoyée et n'en émettent pas d'autre. Heartbeat : après chaque scan, le composant enregistre son état dans le registre de supervision des crons (ok ou fail selon la présence d'erreurs). Cron actif : */30 * * * *.
|
Cron (*/30 * * * *) |
| Exécuteur QA — T2 (agent Lovelace) |
Exécute réellement les trois axes du plan de test :
incomplete, jamais un faux green.
|
CLI / bibliothèque (appelée par T1) |
| Sonde d'issue réelle (anti-faux-done) | Interdit qu'une tâche passe en done sans que le monde ait réellement changé. Exécute la commande de sonde définie sur la tâche, calibre une baseline, et compare baseline et valeur courante. Consommée par la porte de validation du worker de tâches. |
Bibliothèque (worker de tâches et décomposeur de tâches) |
Sous-famille — Auto-optimisation post-chantier
Cette boucle ferme le cycle sur les chantiers marqués pour analyse automatique (comportement activé par défaut depuis mi-2026) : à la clôture, le moteur relit le flux d'exécution et alimente un backlog agrégé de frictions de workflow. Un second composant, jamais automatique, transforme une ligne de ce backlog en chantier de correction — sur geste explicite uniquement.
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Moteur d'analyse de workflow | À la clôture d'un chantier éligible, relit son flux d'événements agents et ses exécutions de tâches, détecte les frictions de workflow, et alimente un backlog agrégé cross-chantier. Chaque ligne du backlog représente un pattern récurrent, priorisé par score d'impact. Cron actif : */15 * * * * en mode réconciliation. |
Cron (*/15 * * * *) |
| Transformateur d'optimisation en chantier | Prend une ligne du backlog d'optimisation et en crée un chantier de correction structuré, marque l'optimisation comme traitée. Jamais automatique — geste explicite requis. Dry-run par défaut. | CLI (--optim <id> [--live]) |
Famille Brainstorm
Cette famille regroupe les composants dédiés à la maturation d'idées : de la collecte initiale jusqu'à la promotion en chantier opérationnel, en passant par la validation et la narration.
Le traitement repose sur une file de travaux dédiée drainée par un worker continu. Ce mode daemon étant fragile par nature, un filet de sécurité cron en mode ponctuel garantit qu'aucun travail ne reste bloqué indéfiniment.
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Worker de brainstorm | Draine la file de travaux de maturation d'idées en continu ou à la demande | Worker continu / cron ponctuel |
| Conversation de gestation | Dialogue de phase 1 avec Atlas pour explorer et structurer une idée brute | Interface ligne de commande |
| Challenge séquentiel | Soumet une idée à une série de remises en question par l'orbite haute d'agents | Worker |
| Générateur de résumé narratif | Produit un résumé narratif synthétique d'une idée après gestation | Bibliothèque (importée) |
| Pont de promotion | Fait passer une idée validée du brainstorm vers un chantier, ou l'abandonne formellement | Ligne de commande / compétence /idee |
| Pont de rétrogradation | Opération miroir du précédent : reroute un chantier vers le brainstorm | Ligne de commande |
| Portail de corpus |
Applique une validation à trois étages sur tout corpus de collecte avant usage comme source :
|
Bibliothèque / compétences /sources-ouvrage, /meta-forum-source |
| Extracteur d'article de forum | À partir d'un fil de dialogue de forum archivé, extrait la thèse, les tours de parole, le verdict du jury et le sceau de session pour construire la matière d'un article. Produit une carte de revendications (claim map) garantissant que chaque paragraphe factuel porte une ancre vers un tour source identifié. Propose la destination de publication chez le tenant concerné. N'écrit ni ne publie rien ; aucun appel LLM. Angle mort comblé en 2026. | Ligne de commande / compétence /forum-article |
Fiabilité du worker continu. Le daemon en boucle longue peut s'interrompre silencieusement. Le cron en mode ponctuel constitue le filet de sécurité opérationnel : il traite les travaux en attente même si le worker principal est tombé, sans risque de double traitement grâce à la sémantique de la file.
Famille : audits, qualité et sécurité
Cette famille regroupe l'ensemble des automatismes qui surveillent, mesurent et protègent la flotte : intégrité des données, couverture SEO, sécurité périmétrique, qualité visuelle et conformité des dépendances. Chaque outil est soit déclenché en tâche planifiée, soit disponible en ligne de commande, soit importé comme bibliothèque par d'autres automates.
Vue d'ensemble des outils
| Outil | Rôle | Déclenchement |
|---|---|---|
| Audit nocturne de tous les automates | Passe de vérification planifiée sur l'ensemble des automates actifs de la flotte (orchestrée par l'agent Renoir). | Tâche planifiée |
| Audit multi-agents nocturne (sans correction automatique) | Audit nocturne impliquant plusieurs agents, en lecture seule — aucune correction appliquée automatiquement. | ⚠️ Désactivé — marqué actif dans le registre des automates mais absent du planificateur réel (vérifié 2026-07-24) ; lancement manuel uniquement. |
| Vigie de l'arbre de rubriques CMS | Lecture seule sur l'ensemble de la flotte : repère les rubriques dont la rubrique parente n'existe plus (orphelines) — elles disparaissent de l'arbre du blog avec toute leur descendance, provoquant des erreurs 404 et un sitemap mort. Lance une alerte en cas d'anomalie. Paramétrable par tenant. | Tâche planifiée (06 h 25 UTC) ; option --tenant en CLI. |
| Audit quotidien du schéma base de données | Vérifie la conformité du schéma de base de données aux conventions de nommage internes. | ⚠️ Désactivé — absent du planificateur réel (vérifié 2026-07-24) ; seul subsiste un commentaire d'horaire sans ligne exécutable. |
| Détecteur de dérive de schéma Drizzle | Compare la définition TypeScript du schéma Drizzle à l'état réel de la base de données et signale tout écart. Couvre notamment l'environnement de pré-production de démonstration, traité comme une cible distincte pour que ses dérives ne contaminent jamais la base de la démo. | ⚠️ Absent du registre des automates et du planificateur (vérifié 2026-07-24) ; lancement manuel uniquement. |
| Surveillance des sauvegardes | Contrôle quotidien des sauvegardes de bases de données hébergées sur le stockage objet. Vérifie la politique de rétention (90 jours, puis archivage Glacier jusqu'à 365 jours) et surveille également la sauvegarde nocturne du site PrestaShop hébergé pour un client externe à son propre serveur. | Tâche planifiée |
| Test mensuel de restaurabilité | Vérifie chaque mois que le dernier dump PostgreSQL sauvegardé sur le stockage objet est effectivement restaurable. | Tâche planifiée |
| Radar SEO anti-cannibalisation de blog | Détecte les doublons et quasi-doublons d'articles de blog. | ⚠️ Supprimé — placé en corbeille (2026-07-17) : zéro exécution sur 30 jours, référencé nulle part. Récupérable pendant 30 jours, puis destruction définitive par le détecteur d'entropie. |
| Audit de sécurité des dépendances | Analyse les dépendances npm et pip à la recherche de vulnérabilités connues. | ⚠️ Désactivé — absent du planificateur réel (vérifié 2026-07-24) ; seul subsiste un commentaire d'horaire. |
| Orchestrateur de reconnaissance périmétrique (agent Mitnick) | Lance une reconnaissance non-intrusive sur chaque domaine actif de la flotte. Lit les cibles depuis le registre des VPS clients — aucun tenant n'est codé en dur. Remplace un ancien script supprimé. Distinct du volet d'audit de sécurité manuelle par hôte. | Tâche planifiée (dimanche 03 h 00, avec verrou anti-chevauchement) ; CLI via l'agent Mitnick. |
| Garde-fou cache partagé Redis | Détecte le scénario « gestionnaire de processus relancé sans variables d'environnement au reboot » : le pilote de cache retombe silencieusement sur la mémoire locale, provoquant un état partagé incohérent entre nœuds. Distinct du script de vérification des variables d'environnement pm2, qui lit la configuration de processus ; celui-ci sonde le comportement réel du cache. | Tâche planifiée (toutes les heures, à 17 min). |
| Alerte pentest pilotée par les données | Lit les résultats de reconnaissance ouverts (priorité P0/P1, jamais encore signalés) et envoie un e-mail groupé par client, uniquement s'il y a de nouveaux résultats. | Tâche planifiée ; CLI. |
| Runner de conteneur éphémère pour pentest | Lance un conteneur d'analyse éphémère, jeté après chaque passe — zéro surface d'attaque permanente. L'image est construite à la demande. | CLI ; bibliothèque. |
| Sonde anti-fuite des points de terminaison du hub | Effectue des requêtes non authentifiées sur l'ensemble des routes d'API internes de la flotte. Une fuite est caractérisée par une réponse HTTP 200 avec un corps JSON (un vrai point de terminaison hub répond toujours JSON) — un 200 en HTML est un rattrapage SPA inoffensif, écarté comme faux positif. Un état sécurisé est un 401 ou 403. Envoie une alerte e-mail en cas de fuite. | Tâche planifiée (05 h 00 UTC). |
| Audit d'accessibilité WCAG 2.2 AA (agent Braille) | Analyse statique de conformité aux critères d'accessibilité WCAG 2.2 niveau AA. ✅ Actif — restauré le 2026-08-13 après avoir été incorrectement marqué supprimé ; activement maintenu depuis. | CLI |
| Audit multi-agents d'un article de blog | Soumet un article de blog à un processus d'audit impliquant plusieurs agents spécialisés. | CLI |
| Audit qualité et résolution automatique de pages publiques | Évalue la qualité des pages publiques et résout automatiquement les problèmes détectés. | CLI |
| Audit des données agents via API | Vérification des données agents via l'API. | ⚠️ Supprimé — placé en corbeille (2026-07-17) : zéro exécution sur 30 jours. |
| Vérificateur de checklist d'intégration Nuxt | Vérifie la checklist d'intégration d'un composant Nuxt. | ⚠️ Supprimé — placé en corbeille (2026-07-17) : zéro exécution sur 30 jours. |
| Audit santé des sitemaps | Vérifie l'état des sitemaps et envoie une alerte à l'agent Otlet. | ⚠️ Désactivé — absent du planificateur réel (vérifié 2026-07-24). |
| Audit de maillage interne SEO | Analyse le maillage interne et vérifie les liens en erreur 404. | ⚠️ Supprimé — placé en corbeille (2026-07-17) : zéro exécution sur 30 jours. |
| Monitoring HTTP des sites clients en production | Surveille la disponibilité HTTP des sites clients en production. | ⚠️ Désactivé — absent du planificateur réel (vérifié 2026-07-24). |
| Rapport de monitoring complet | Produit un rapport JSON complet de l'état de la flotte. Intègre les données du médecin système (voir la famille infrastructure). | Tâche planifiée ; skill /status. |
| Automate anti-hallucination | Bibliothèque de vérification des faits produits par les agents IA. | Bibliothèque |
| Revue QA heuristique Lovelace | Produit un verdict GO / GO_WITH_WARNINGS / NO_GO sur un livrable. | CLI |
| Façade QA runner pour plans de test de pré-production | Orchestre l'exécution des plans de test de pré-production. | CLI |
| Tests de bout en bout du front Nuxt | Exécute les tests end-to-end sur l'interface Nuxt d'un tenant. | CLI (tests) |
| Wrapper d'audit agents sans double initialisation | Lance l'audit des agents en évitant la double initialisation du moteur. | CLI |
| Audit infrastructure unifié | Audit infrastructure du vaisseau-mère et des tenants. | CLI ; skill /host <cible> infra. |
| Audit sécurité unifié | Audit sécurité du vaisseau-mère et des tenants. | CLI ; skill /host <cible> secu. |
| Classifieur des automates Python actifs | Classe les automates Python actifs selon leur mode d'exécution. | CLI |
| Détecteur de dérive des personas | Repère les écarts entre les personas déclarés et la stack en production. | CLI ; skill /persona. |
| Audit de sécurité open source (OSS) | Analyse les répertoires publics et exemples à la recherche de fuites lexicales liées aux tenants. | CLI |
| Scan de maturité OSS | Évalue la maturité des répertoires publics et communautaires pour une éventuelle ouverture open source. | ⚠️ Supprimé — placé en corbeille (2026-07-17) : zéro exécution sur 30 jours. |
| Canary de santé des routes par type de page | Garde-fou à tolérance zéro : une section entière en erreur 404 peut ne pas franchir le seuil global de la sentinelle SEO ; ce canary alerte immédiatement dès qu'un type de page (blog, catégorie, produit, fiche…) dépasse son seuil propre d'erreurs 404. | Tâche planifiée (toutes les 5 minutes). |
| Smoke test multi-tenant |
Effectue des requêtes HTTP sur les sites de la flotte et échoue dès qu'un site retourne HTTP 500 ou supérieur. Couvre un ensemble de tenants nommés ainsi qu'une boucle Depuis 2026-07-16, ajoute une passe d'intégrité des assets : sur les pages principales, le script extrait jusqu'à six ressources JavaScript et CSS référencées par le HTML rendu côté serveur et vérifie que chacune répond avec un code 2xx. Un code HTTP 200 sur la page ne prouve pas que le JavaScript est effectivement servi. Note : le message d'aide intégré ne liste pas tous les tenants disponibles, et la boucle |
CLI |
| Générateur YAML de smoke test des routes hub | Génère la configuration YAML de test des routes du hub. | CLI |
| POC Playwright runner pour plans de test de pré-production | Prototype de runner Playwright pour les plans de test de pré-production. | CLI |
| Gate QA Lovelace | Bloquant de livraison basé sur le verdict Lovelace. | CLI |
| Configuration Lovelace par tenant | Définit pour chaque tenant les seuils d'autorisation de livraison automatique. | Bibliothèque de configuration |
| Vérification post-déploiement et rollback automatique | Contrôle l'état du site après déploiement et déclenche un rollback si la santé est dégradée. | CLI (post-ship) |
| Garde-fou post-déploiement des processus distants | Vérifie qu'un processus distant dispose de toutes ses variables d'environnement après déploiement. | CLI |
| Quick-check monitoring Feature 9 | Vérifie rapidement l'état de la fonctionnalité de recommandation de contenu. | CLI |
| Quick-check monitoring personas et dérive | Vérifie rapidement l'état du monitoring des personas. | CLI |
| Vérification de fraîcheur et d'intégrité des sauvegardes locales | Contrôle l'âge et l'intégrité des sauvegardes stockées localement. | CLI ; skill /host <cible> backups. |
| QA visuelle multimodale — 火眼金睛 |
Capture une page avec un navigateur sans interface graphique, puis soumet la capture à un juge LLM multimodal pour évaluer l'intention visuelle. Expose trois modes :
Correctif notable : l'option de survol d'un élément était acceptée par le parser mais ignorée silencieusement en mode maquette — le juge comparait une maquette de menu ouvert à une capture au repos. Le module survole désormais l'élément avant capture. Un survol qui échoue produit un verdict neutre (observation impossible), jamais un verdict de défaut — une panne d'observation n'est pas un défaut du travail observé. Depuis 2026-10-12, le mode comparaison simple arme lui-même l'authentification HTTP avant la capture, évitant qu'une page protégée soit jugée « cassée » par erreur. |
CLI ; bibliothèque. |
| Smoke visuel post-déploiement par tenant | Lance une passe de QA visuelle légère après chaque déploiement, pilotée par un fichier de configuration YAML. Non bloquant ; sort avec le code 2 si au moins un contrôle échoue. | CLI |
| Assembleur de preuve QA 3 axes | Produit une preuve de qualité obligatoire sur trois axes — code (flux réellement exécuté), visuel (verdict du juge multimodal) et SQL (état de la base vérifié après l'action). La façade d'envoi d'e-mail client refuse tout message de livraison sans preuve complète sur les trois axes. | CLI |
| Axe visuel authentifié de la QA 3 axes (pages de back-office) | Couvre les pages de back-office inaccessibles au navigateur sans interface graphique. Pilote en lecture seule le navigateur distant (navigation et capture uniquement), sans manipuler aucune session ni identifiant. Produit le code de sortie 3 si aucune session de back-office n'est active — jamais un faux verdict visuel. | CLI |
| Linter du registre lexical | Vérifie la cohérence du registre lexical interne : termes manquants en base, énumérations divergentes, synonymes interdits. Mode lecture seule strict. | CLI ; skill /audit-lexicon. |
| Audit de couverture SEO i18n multi-tenant | Pour chaque tenant enrôlé et chaque langue active, vérifie la couverture des métadonnées SEO (meta, slug, titre, description). Ignore les emplacements de locale non publiés. | Tâche planifiée |
| Détecteur d'entropie (l'Élagueur) |
Repère les scripts orphelins absents de tout point d'entrée connu (planificateur, dispatcher). Alimente un registre de candidats à la suppression avec comptage des passages et période de quarantaine. Le rôle a été étendu : l'Élagueur supprime désormais réellement les scripts orphelins, mais jamais sans filet de sécurité. La phase de détection alimente la corbeille traçable ; la destruction définitive nécessite une commande explicite avec un drapeau de désarmement actif. Un résumé quotidien est envoyé chaque matin, incluant la liste des objets protégés par immunité et un rituel hebdomadaire de remise en question du patrimoine existant. Trois entrées planifiées distinctes : détection et mise en corbeille (05 h 30), destruction des objets dont la période de grâce est écoulée (05 h 45, drapeau de désarmement requis), et envoi du rapport d'entropie (06 h 00). |
CLI ; tâche planifiée (trois entrées distinctes). |
| Corbeille traçable de l'Élagueur | Rend toute suppression réversible : les fichiers et lignes de base de données sont déplacés dans une zone de quarantaine et tracés avant toute destruction. La restauration remet l'objet à son emplacement d'origine exact. La destruction définitive est désarmée par défaut et nécessite un drapeau explicite. Une gate de test vérifie que la revalidation des chemins se produit à la sortie de la restauration, pas seulement à l'entrée de la mise en corbeille. | Bibliothèque (importée par le détecteur d'entropie). |
| Gate pre-commit SQL brut / schéma Drizzle | Refuse qu'une colonne référencée dans du SQL brut mais jamais déclarée dans le schéma Drizzle passe au commit. Analyse uniquement les fichiers modifiés en zone de staging Git. Couvre les schémas de l'application principale et du vaisseau-mère. | CLI (gate pre-commit) |
| Invariant statique « tout lead capté est remonté à Google Ads » | Refuse le commit si une table de leads n'est pas connectée à l'outil d'envoi de conversions Google Ads. | CLI ; hook pre-commit. |
| Invariant statique « tout modèle utilisé est un modèle tarifé » | Croise les modèles LLM réellement utilisés (vus dans les journaux de coût et déclarés par défaut dans les automates) contre le tarif en vigueur. Un modèle sans ligne de prix fait apparaître ses exécutions comme gratuites dans les rapports de coût. | CLI (lancement manuel — pas de tâche planifiée ni de hook détectés). |
| Gate flotte : durcissement des boîtes tenants | Alerte si une boîte tenant en production ne dispose pas des trois règles de protection contre les tentatives d'intrusion attendues. | Tâche planifiée (12 h 10 UTC). |
| Sentinelle anti-mort silencieuse des hooks | Détecte un hook connecté qui interroge une base de données indisponible et échoue sans bruit (fail-open silencieux). | Tâche planifiée (13 h 35 UTC). |
| Moniteur de divergence leads runtime | Garde-fou en production : détecte le cas « des leads ont été enregistrés mais aucun n'a été transmis à Google Ads ». Distinct de la gate statique pre-commit. | Tâche planifiée (08 h 30 UTC). |
| Audit des cicatrices sans garde-fou | Recense les incidents classés P0/P1 dont la cicatrice n'a pas encore de garde-fou mécanique associé, et envoie un résumé hebdomadaire. | Tâche planifiée (lundi 15 h 25 UTC). |
| Audit des invariants d'isolation du navigateur | Audit statique des règles d'isolation entre les sessions navigateur de l'automatisation et celles de l'opérateur humain. | CLI --scan ; hook pre-commit. |
| Gate pre-ship : preuve de chaîne de conversion | Refuse la livraison d'un client si un chantier de tracking ciblant ce client n'a pas démontré une chaîne de conversion bout en bout validée. | CLI (gate) |
| Sentinelle anti-dérive du système de modules | Vérifie l'intégrité du système de modules CodeMyShop (community / enterprise / core) et détecte toute dérive. Mode lecture seule strict. | Tâche planifiée (22 h 25 UTC) ; skill /audit-modules. |
| Harnais de vérification bout en bout de la chaîne de conversion publicitaire | Vérifie côté serveur que le paramètre de tracking publicitaire est bien transmis jusqu'à la plateforme Google Ads. | CLI (test) |
| Audit d'intégrité doctrine / enforcement | Croise la table des doctrines internes avec les hooks réellement présents sur disque et leur câblage effectif dans la configuration de l'agent. Distingue des classes d'anomalies bloquantes (fichier manquant, hook non câblé, événement discordant) et une classe souple (doctrine critique sans garde-fou), cette dernière comptabilisée seulement en mode strict. Envoie une alerte en cas de dérive. | Tâche planifiée (10 h 40 UTC) ; skill /audit-doctrine. |
| Détecteur de commentaires périmés | Repère et corrige les commentaires de code qui contiennent des affirmations vérifiables (« géré par X », « câblé en cron ») non confirmées par le code en production. | CLI |
| Sentinelle du rendu sous faible concurrence | Détecte une dégradation du rendu des en-têtes de page en situation de faible concurrence — filet de détection complémentaire d'un correctif de sécurité préventif. | Tâche planifiée (06 h 45 UTC). |
| Invariant DB « tout codename d'agent est valide » | Vérifie que les codenames d'agents écrits en base sont bien des codenames techniques, pas des pseudonymes d'affichage ni des entrées orphelines. Couvre vingt-neuf tables référençant ce champ. | Tâche planifiée (12 h 20 UTC). |
| Sentinelle anti-drain LLM en tâche planifiée |
Complète le hook bloquant d'installation de crontab : ce dernier ne filtre que les installations faites dans une session de l'agent ; cette sentinelle scanne le planificateur en production (installations hors session : accès SSH direct, édition manuelle, fichiers de configuration système). Partage son moteur de détection avec le hook. Le moteur reconnaît les invocations directes de LLM dans une tâche planifiée, quelle que soit la CLI utilisée (y compris les alternatives à |
CLI (câblage de tâche planifiée non confirmé au 2026-07-24) ; skill dédié présent. |
| Moteur de détection « LLM en tâche planifiée » | Moteur partagé entre le hook bloquant à l'installation et la sentinelle de production. Garantit que les deux gardes ne divergent pas : une seule doctrine, un seul moteur. Détecte les invocations LLM directes dans une ligne de planificateur, quel que soit le client CLI employé. | Bibliothèque |
| Capteur de dette de documentation interne | Mesure en lot, par analyse syntaxique exacte, la couverture des docstrings Python sous le répertoire de l'automatisation. Miroir non bloquant du hook qui contrôle la même règle à la frontière de commit. | CLI ; skill /audit-doc. |
| Classifieur du mode de facturation des automates | Classe chaque automate selon son mode de facturation LLM (forfait vs API directe) par analyse statique du code — sans LLM, par recherche textuelle uniquement. Alimente la colonne correspondante du registre des automates. | ⚠️ Désactivé en tâche planifiée depuis le 2026-08-15 (la ligne est commentée avec un marqueur explicite : l'outil appelle un LLM, un automate doit être déterministe) ; CLI manuel seulement. |
| Synchroniseur du registre des automates avec le planificateur réel | Réconcilie le registre interne des automates avec le contenu réel du planificateur de tâches. Corrige le décalage entre les horaires déclarés manuellement (souvent NULL pour des dizaines d'automates récurrents) et l'état en production. Sans LLM, par parsing et SQL. |
Tâche planifiée (toutes les ~7 minutes, en minutes explicites). |
| Agent Braille niveau 2 — accessibilité WCAG sur HTML rendu | Analyse le rendu réel des pages publiques avec un navigateur sans interface graphique et un moteur d'audit d'accessibilité, produisant les violations WCAG 2.2 AA sur le HTML effectivement affiché. Complète l'analyse statique de l'audit d'accessibilité. | Bibliothèque (lancée via node <module-accessibilite> par l'auditeur de pages) ; CLI. |
| Politique commune de notification des sentinelles | Fournit la logique partagée de contrôle d'envoi d'alertes aux automates de surveillance (canary, uptime, sentinelles) : autorisation d'envoi, enregistrement des succès et échecs, backoff exponentiel plafonné à 2 heures, et distinction entre « problème détecté » et « notification impossible ». | Bibliothèque |
| Vigie des erreurs 500 d'API | Sonde l'ensemble des chemins d'API enregistrés sur tous les sites Nuxt actifs de la flotte (~470 sondes par passe), agrège les résultats et envoie une alerte e-mail par site en cas d'erreurs 500. Utilise la politique de backoff commune. Née d'une erreur 500 silencieuse restée non détectée pendant trois mois. | Tâche planifiée (toutes les 30 minutes, à 7 et 37 min). |
| Ingestion des destinations d'annonces Google Ads | Lit les destinations réelles des annonces Google Ads actives via l'API officielle et les stocke pour que la vigie de tags puisse les sonder. L'horodatage de synchronisation n'est mis à jour que si l'API a effectivement répondu. | Tâche planifiée (06 h 15 UTC). |
| Surveillance d'intégrité du docroot PrestaShop | Calcule une empreinte des fichiers PHP du docroot PrestaShop, la compare à une baseline et envoie une alerte e-mail si la dérive a changé depuis la dernière validation. Aucun LLM. ⚠️ Pas de tâche planifiée confirmée sur le vaisseau-mère — tourne probablement sur le VPS client concerné. | CLI |
| Garde du volume d'appels d'outils par session | Mesure la médiane d'appels d'outils par session sur les sept derniers jours et rend un verdict (inconnu / régression / gain / OK). Lecture seule, sort avec le code 1 en cas de régression. | Bibliothèque (appelée par l'audit nocturne des automates à 03 h 00) ; CLI. |
| Taxonomie mesurée des appels d'outils | Classe le volume, la redite et les séries d'appels d'outils à partir des transcripts de session. Aucune écriture en base, aucun LLM. | CLI ; bibliothèque. |
| Audit de la carte d'arborescence du dépôt | Compare la structure réelle du dépôt à la carte d'arborescence de référence, signale les écarts et peut matérialiser le squelette manquant sur commande. Inactif sans le marqueur de version activé. ⚠️ Pas de tâche planifiée active détectée. | CLI |
| Sentinelle des conduites (format canonique) | Vérifie le format canonique des conduites sur disque (fichiers de skill), dans les descriptions de skills et en base de données. Miroir non bloquant du hook pre-commit correspondant. Envoie une alerte en cas de dérive. ⚠️ Pas de tâche planifiée active détectée. | Skill /audit-conduite ; CLI. |
| Invariant « la Constitution ne nomme que des artefacts existants » | Lit la table de constitution interne, extrait les chemins référencés et sort avec le code 1 si l'un d'eux n'existe pas dans le dépôt. Né d'articles fondés sur un fichier introuvable. | Hook pre-commit (bloquant) ; CLI. |
| Confrontation des champs dérivables | Compare les valeurs de champs calculables (statut MRR client, compteurs de forum, compteurs de tags de blog…) à leur recalcul à la demande. Sort avec le code 1 si un invariant est violé. Né d'un statut MRR erroné de 1 500 €/mois. ⚠️ Pas de tâche planifiée active. | CLI |
| Détecteur de garde-fous éteints conditionnellement | Repère les garde-fous désactivés « en attendant » assortis d'une condition de réactivation, et joue cette condition pour vérifier si elle est désormais remplie. Lecture seule, ne rallume rien. | Tâche planifiée (lundi 11 h 20 UTC). |
| Audit du socle e-commerce obligatoire | Vérifie qu'un tenant destiné à vendre dispose de l'ensemble des tables PrestaShop indispensables au commerce en ligne. Sort avec le code 1 si des tables manquent, 2 si l'audit ne peut pas s'exécuter. Option dédiée pour les vitrines sans panier. | CLI ; bibliothèque (le socle est importé par la vérification opérationnelle post-déploiement). |
| Vigie des échappements SQL | Détecte les échappements SQL incorrects : doublement d'antislash injustifié sur PostgreSQL (bloquant), fonctions d'échappement maison et valeurs interpolées (dette en cliquet). Pendant froid du hook pre-commit correspondant. | Tâche planifiée (14 h 45 UTC) ; skill /audit-sql-escape. |
| Audit du maillage des cocons sémantiques | Lecture seule sur le maillage interne des cocons sémantiques catégorie : breadcrumb JSON-LD, sous-catégories, liens inter-filles, catégorie par défaut orpheline (bloquant), redirections 301 mortes (bloquant). | Skill /cocon-linkmap-audit ; également /meta-audit-seo. |
| Enregistrement de l'accord humain avant écriture de contenu | Trace l'accord explicite d'un opérateur humain avant toute écriture de contenu client. Refuse de s'exécuter si un agent est en cours d'exécution — un agent autonome ne peut pas s'auto-approuver. | CLI (hors run automatisé, par un humain). |
| Recensement des facettes d'un rayon | Capture une empreinte chiffrée des facettes d'un rayon avant toute normalisation d'attributs, puis refuse de continuer si l'écart dépasse le seuil de tolérance déclaré. Filet de sécurité préventif. | CLI |
| Vigie des contrats d'unicité de la flotte | Vérifie que les contraintes d'unicité exigées par le code (via ON CONFLICT) existent réellement sur toutes les bases de la flotte, quel que soit le nom de l'index. Lecture seule, ne répare pas. ⚠️ Pas de tâche planifiée confirmée. |
CLI |
| Gate de publication des skills sur la vitrine publique | Détermine mécaniquement si un skill est publiable sur la vitrine publique. Les termes interdits sont lus dynamiquement à chaque appel — rien n'est codé en dur. En cas de doute, le skill reste privé. Recalculé à chaque indexation. | Bibliothèque (importée par l'indexeur de skills et le compositeur de posts sociaux) ; CLI (rapport, lecture seule). |
| Vigie « le tag de mesure est-il réellement servi ? » | Pour chaque tenant qui annonce une configuration analytics, vérifie que chaque page publique échantillonnée (par régime de rendu et par langue) porte bien le tag du bon tenant. Inclut les destinations d'annonces Google Ads. | Tâche planifiée (19 h 45 UTC). |
| Registre canonique des paliers de viewport | Source de vérité unique des largeurs d'écran et des bandes Tailwind correspondantes pour l'ensemble de la flotte. Fournit les utilitaires noms(), taille(), est_tactile(), bande(), decrire(). Évite la duplication des listes de choix dans les outils de QA. |
Bibliothèque (QA visuelle, assertions structurelles, balayage responsive, capture d'écran) ; skill /qa-responsive. |
Sous-famille : compte système QA par tenant
Une session de QA authentifiée par instance de la flotte, en lecture seule, sans jamais passer par le profil personnel de l'opérateur. Les familles de back-office couvertes sont : hub CodeMyShop (famille A), PrestaShop (famille B), et instances sans back-office client (famille C). Le registre ne porte que des noms de comptes — jamais une valeur de secret ; le mot de passe vit dans le coffre de credentials via le gestionnaire de comptes tiers. Un compte n'est marqué
activeque sur preuve live d'une réponse 403. Ordre des gestes : garde (« à créer ») → compte créé par un geste externe sous l'accord écrit de l'opérateur → pose du mot de passe → preuve live.
| Outil | Rôle | Invocation |
|---|---|---|
| Registre tenant → compte QA | Lecture seule : expose l'inventaire des comptes QA par famille de back-office, URL d'administration, mécanisme de création et état actuel. Fournit la résolution vps_name → compte actif — jamais de repli sur le profil personnel de l'opérateur. Seule porte par laquelle l'assembleur de preuve QA apprend le profil navigateur à utiliser. |
CLI --inventaire / --show <vps> ; bibliothèque. |
| Garde d'entrée et vigie des comptes QA | L'état « compte à créer » se déduit automatiquement (instance de famille A ou B sans compte actif). La création est exigée lors du provisionnement d'une nouvelle instance. La tâche de création naît en pause — le worker ne la prend jamais automatiquement. | CLI --vigie (code 1 s'il y a un écart) ; --exiger <vps> ; --creer-taches. |
| Poseur de mot de passe QA |
Pose le mot de passe d'un compte QA sans passer par sa boîte mail, dans un seul processus.
Ni jeton, ni mot de passe, ni empreinte n'apparaissent en sortie standard, dans les journaux ou dans les arguments de commande. Les exceptions n'exposent que leur type. |
CLI --poser <vps>. |
| Preuve live de la garde en lecture seule | Vérifie que le compte QA est bien refusé par le middleware de lecture seule : la preuve est acquise uniquement si la réponse est 403 avec le message exact du middleware (un 403 générique de rôle ne prouve rien). La sonde s'authentifie elle-même — la session du navigateur ne survit pas à la pose du mot de passe. Un 403 prouvé marque le compte active. |
CLI --vps <vps> (sortie 0 = prouvé / 1 = non prouvé / 2 = pas de session). |
Sous-famille : mesure maquette ↔ rendu (iso-Figma)
Outils déterministes qui remplacent le verdict en prose du juge multimodal par des mesures rejouables : rythme vertical, blancs, contraste du voile, assertions structurelles DOM, catalogue des sections CMS. Ces outils bornent la mesure ; le juge multimodal qualifie ensuite.
| Outil | Rôle | Invocation |
|---|---|---|
| Écart chiffré maquette ↔ rendu | Mesure l'écart entre une maquette Figma et le rendu réel, de façon invariante au contenu : rythme vertical, grille horizontale, palette. Calcule une empreinte perceptuelle (pHash DCT) pour la comparaison de deux images ou la capture d'une URL. | Skills /figma, /integration-maquette, /page-iso-figma ; bibliothèque. |
| Matière de comparaison maquette ↔ rendu route par route | Produit les captures organisées route par route à partir du plan des routes (frames hors périmètre écartées), avec défilement anti-lazy-load et parallélisme limité. Génère un index et découpe en lots. Ne juge pas. Une re-capture partielle remplace seulement les entrées concernées dans l'index, sans écraser le corpus. | Skill /integrer-maquettes-restantes. |
| Adresse des blancs dans le DOM | Sur le DOM rendu, repère les zones d'encre, balaie de haut en bas et nomme l'élément qui ouvre ou ferme chaque respiration visuelle, avec ses paddings et marges calculés. Complète la mesure du rythme vertical sur images. | Skill /rythme-vertical. |
| Rythme vertical en chiffres (sur images) | À partir d'images, calcule le total, le nombre et la distribution des respirations visuelles (bandes uniformes). Avec deux images, mesure l'alignement maquette ↔ rendu et nomme les bandes sans vis-à-vis. | Skill /rythme-vertical. |
| Calcul du contraste du voile sur photo | Calcule le voile nécessaire pour garantir la lisibilité d'un texte sur une photographie : contraste WCAG au pire cas (pixel le plus clair après application du voile) contre la couleur du texte, avec les seuils 4,5:1 et 3:1 (grand texte). Un voile calculé sur une photo ne se transpose pas à une autre. | Skill /page-iso-figma. |
| Assertions structurelles rejouables sur page rendue | Exécute un ensemble d'assertions structurelles sur une page rendue (via navigateur automatisé ou HTML local), pilotées par un fichier de règles JSON : absence d'images sans source, unicité du titre principal, titres visuellement masqués, sources et textes alternatifs interdits, absence de fil d'Ariane, contraintes de taille de titre, cibles tactiles, gouttières, multi-paliers de viewport. | Skills /page-iso-figma, /integrer-maquettes-restantes, /qa-responsive ; bibliothèque. |
| Catalogue vivant des types de section CMS | Dérive la liste des types de sections de pages CMS directement des sources (switch de rendu et schéma de base de données), pour distinguer les sections en table maître des sections traduisibles. Échoue bruyamment si le parsing devient muet. | Skill /page-iso-figma. |
| Navigateur local pour captures de pré-production | Fournit une surface de navigation locale, indépendante du Chrome distant de la session de l'opérateur. Né du constat que 119 passages sur 648 produisaient des verdicts « incomplets » indiscernables d'un résultat négatif, parce que la boîte distante était éteinte (SSH en timeout). | Bibliothèque. |
| Vigie de dérive des étalons de décisions iso-Figma | Second versant de la vigie du corpus : détecte les étalons qui ont changé après qu'une décision a été rendue. Complète la vigie du corpus en retard sur Figma (qui détecte le cas inverse : le corpus n'a pas encore intégré de nouvelles frames). | CLI |
| Relevé des cotes réelles des images de section |
Mesure les dimensions réelles des images de section sur le rendu, par type et par variante, car les maquettes Figma ne portent pas les cotes par nœud. Permet au builder d'annoncer au rédacteur la taille attendue sous chaque champ image. Une cote inventée est pire que pas de cote. Le verdict de publication repose sur le ratio de cohérence (tolérance 10 %), une part minimale de cotes cohérentes (80 %) et un nombre minimal d'occurrences (2). Sort avec les indicateurs |
CLI |
Mémoire, cicatrices et apprentissage
Cette famille regroupe les composants qui gèrent les trois niveaux de mémoire du système : un répertoire de fiches structurées, un Zettelkasten de notes longues, et une couche de recherche sémantique par vecteurs. Les cicatrices — traces formelles d'incidents résolus — alimentent une boucle de rétroaction continue : détection, qualification, déduplication, injection au bon moment dans le contexte de l'agent.
Qualification et injection des cicatrices
- Qualification par lot : un outil en ligne de commande soumet les cicatrices à un modèle de langage pour les reclasser. Il accepte des options de limite de volume, de ciblage par identifiant et de simulation à sec (dry-run). Aucune planification cron active n'est déclarée pour cet outil.
- Injection au démarrage de session : un garde-fou de type SessionStart rebranche automatiquement la mémoire active dès l'ouverture d'une nouvelle session de l'agent.
- Injection contextuelle par type d'outil : deux garde-fous distincts injectent les cicatrices pertinentes respectivement avant l'invocation d'un sous-agent, et avant toute opération de lecture, d'édition ou d'écriture de fichier.
- Rafraîchissement des indicateurs : un processus planifié recalcule chaque jour les indicateurs agrégés des cicatrices.
Déduplication et détection de récidive
Deux scripts de rattrapage (backfill) ont comblé un angle mort identifié en juillet 2026 : le moteur de réaction automatique regravait des doublons par récurrence, car l'ancienne logique d'idempotence reposait sur une signature variable. Ces scripts ont fusionné rétroactivement les doublons accumulés, d'abord pour les cicatrices générées automatiquement, puis pour celles issues d'événements non automatiques (task_failed, runaway, autonomie). Depuis, chaque site d'écriture appose une signature canonique commune.
Un capteur de récidive, planifié quotidiennement, détecte les cas où une cicatrice pertinente existait en mémoire mais n'a pas été servie à l'agent — et où l'erreur s'est pourtant reproduite. Ce signal est un prérequis au bornage fin du contexte injecté : on ne peut réduire ce qui est injecté sans risque qualité que si l'on mesure d'abord ce qui manque.
Consolidation nocturne et rappel sémantique
- Consolidation nocturne : un processus planifié à 4 h du matin compacte jusqu'à trente transcripts par passage et consolide la mémoire de long terme. Il est actuellement désactivé dans le planificateur (quota LLM épuisé) ; la ligne reste commentée jusqu'au renouvellement du forfait.
- Rappel sémantique : le moteur de recherche interroge la couche vectorielle pour retrouver les cicatrices et fiches mémoire proches d'une requête. Une optimisation mise en place en octobre 2026 a réduit le temps de requête lexicale de 7,1 s à 0,13 s grâce à un index GIN sur un champ vectoriel textuel précalculé.
- Synchronisation des vecteurs : un processus cron maintient la cohérence entre la base de documents et la couche de recherche vectorielle.
Zettelkasten et index des sessions
- Un indexeur planifié ingère les notes du Zettelkasten dans la couche base de données, permettant leur recherche croisée avec les cicatrices et les compétences.
- Une synchronisation bidirectionnelle toutes les trente minutes maintient la cohérence entre le Zettelkasten local et son miroir distant, récupérant les notes rédigées depuis un poste Mac (via l'extension Obsidian Git) et poussant les productions de l'agent (consolidation nocturne, sorties de garde-fous).
- Un indexeur distinct traite les sessions de conversation au format
.jsonlet les enregistre dans la couche base de données pour consultation ultérieure.
Index et publication des compétences
L'indexeur de compétences (skills) tourne toutes les quinze minutes. À chaque passage, il lit les fiches de compétences du dépôt et effectue cinq passes successives et isolées — l'échec d'une passe n'emporte pas les autres :
- Publication gatée : recalcule à chaque run si chaque compétence est publiable. Un nouveau client signé peut retirer de la vitrine les compétences qui le citaient, sans qu'aucun fichier ne soit modifié manuellement.
- Mode de listage : projette les arbitrages d'exposition au listing déclarés dans la configuration, évitant la troncature silencieuse au-delà d'un budget.
- Orchestration : transforme les déclarations de méta-compétences en liens ordonnés ; un enfant introuvable n'est jamais inséré (mieux vaut une chaîne incomplète qu'un lien mort en vitrine).
- Tags et descriptions éditoriales FR/EN : chaque élément est jugé séparément par le même filtre de publication — un pitch anglais citant un client est refusé seul, sans emporter la fiche française.
- Partitions : les compétences qui déclarent une section de partition sont projetées dans la table de conduites.
Les compétences orphelines (supprimées du dépôt) sont retirées de l'index uniquement sur la branche principale ; un répertoire de travail en retard liste ses orphelins sans les toucher.
Des mécanismes complémentaires gèrent la génération automatique de propositions de compétences après une victoire, la surveillance des propositions en attente de validation humaine, et le suivi des renommages (réconciliation de l'historique d'invocation après un renommage de fichier).
Gestion du contexte de session
- Chargement contextuel déclaratif : une couche lit le type de tâche déclaré et sélectionne les blocs mémoire pertinents parmi les fiches disponibles. Elle constitue la deuxième couche au-dessus du plancher de contexte obligatoire, avec repli sécurisé.
- Plancher obligatoire : un composant valide que les blocs immuables du contexte sont bien présents avant chaque session.
- Journalisation de la taille injectée : un garde-fou SessionStart enregistre la taille estimée du contexte injecté en base, en mode fail-open (une erreur d'écriture ne bloque pas l'agent).
- Suivi en cours de session : un garde-fou PostToolUse met à jour l'estimation du budget consommé après chaque outil.
Fractionnement et relance de session
Le coût d'une longue session croît de façon quadratique : l'historique et les résultats d'outils sont renvoyés au modèle à chaque tour. Le mécanisme de fractionnement mesure le contexte réel (consommation déclarée par le modèle) et le nombre de tours, et déclenche un transfert (handoff) persistant dès qu'un seuil est franchi (130 000 tokens).
Ce composant est câblé sur trois événements distincts :
- Fin de session (Stop) : pose l'état de bascule en base (table observable par le tableau de bord) plutôt qu'un simple message texte. Un signal de relance est émis si les conditions sont réunies.
- En cours de tour (PostToolUse, option
--tick) : mesure le contexte à intervalles réguliers, avec un garde-temps de soixante secondes entre deux mesures. - Avant compaction native (PreCompact, option
--precompact) : mesure juste avant qu'une compaction automatique ne s'exécute.
Un quatrième point d'entrée (--emit-now), non câblé comme garde-fou, permet à l'agent lui-même de poser le stub de transfert lors d'une bascule de harnais (arrêt immédiat sans passage par les événements habituels).
La séparation des pouvoirs est stricte dans ce mécanisme : le module de décision de relance déclare une sentinelle sans rien tuer ; la politique de relance (plafond glissant, anti-boucle, délai de validité) est écrite en Python testable, jamais dans le shell. Un seul processus peut consommer la sentinelle (section critique avec création exclusive). Des garde-fous empêchent une session fille d'un agent worker de déclencher une relance (le worker gère sa propre reprise).
Le superviseur de session vit dans le même panneau tmux que l'agent. Il est l'exécutant extérieur qui comble l'intervalle entre l'écriture du transfert et le démarrage de la session suivante — car un agent ne peut pas se terminer lui-même. Il ne respawn que s'il a lui-même mis fin à l'enfant sur sentinelle consommée. Une mort spontanée de l'agent (commande /exit, crash, signal) n'entraîne jamais de relance automatique.
Le mécanisme de reprise de transfert (garde-fou SessionStart) réinjecte automatiquement le dernier transfert produit par le fractionnement. Des filtres anti-boucle (délai minimum de vingt-quatre heures) et un mécanisme de séparation par slug de tentacule évitent qu'une session reprenne le transfert destiné à une autre instance du même pool.
Hotset mémoire et métriques
Un classeur déterministe recalcule quotidiennement la section « réflexes quotidiens » du fichier de cache mémoire principal, en utilisant une formule de décroissance exponentielle pondérée par le nombre d'accès récents. Ce fichier est un cache repayé à chaque appel, plafonné en volume par un garde-fou dédié. Les sections de plancher obligatoire (priorité maximale) et les travaux en cours restent gérés manuellement. Un collecteur distinct agrège les métriques globales du répertoire mémoire.
Élagage des cicatrices
Un moteur d'élagage applique trois opérations sur le registre des cicatrices :
- Backfill de contexte : dérive le lien de contexte pour les cicatrices dont le fichier source a bougé.
- Promotion : passe les cicatrices résolues et appliquées cinquante fois ou plus au statut « acquises ».
- Archivage : archive les cicatrices dont le contexte est mort — jamais sur un signal d'état inconnu.
Un orchestrateur de revue périodique pilote cet élagage en mode --apply, remonte au backlog humain les cicatrices non résolues rappelées cinquante fois ou plus, et émet un signal de présence (heartbeat). Il est entièrement déterministe, sans appel à un modèle de langage.
Graphe de connaissances et glaneur de préférences
Un graphe de connaissances expérimental relie de façon déterministe (expressions régulières, JSON, colonnes de base) les garde-fous, cicatrices, doctrines et fichiers. Il offre des sous-commandes de construction, de requête par chemin ou commande, et d'évaluation (rappel@5 comparé au rappel sémantique). Il est chargé de façon paresseuse et non invasive par certains garde-fous.
Un glaneur de préférences parcourt les transcripts de sessions locaux pour extraire les consignes d'usage et préférences de l'opérateur que ni les cicatrices ni le Zettelkasten ne capturent. Il est entièrement déterministe (pas de modèle de langage) et ne s'exécute qu'en session interactive, jamais en cron.
Vigilance chatbot et purge juridique
Un sentinelle surveille les journaux de l'assistant IA des boutiques clientes. À chaque passage, il lit les nouvelles lignes depuis son dernier état mémorisé et envoie un email groupé lorsque des requêtes visiteurs sont restées sans réponse, n'ont rien trouvé, ou ont rencontré une indisponibilité. Les interactions issues de la recette de validation automatique sont isolées dans une section dédiée et ne polluent pas les alertes visiteurs. Aucun modèle de langage n'est utilisé ; le composant ne corrige rien.
Un processus de purge applique chaque nuit les durées de conservation légales sur ces journaux : les textes (questions, réponses) sont effacés après quatre-vingt-dix jours, les conversations après quatre-vingt-dix jours depuis le dernier message, les lignes techniques après treize mois. Une seule instruction SQL transactionnelle par boutique. Ce mécanisme a été mis en place après le constat qu'une durée de conservation écrite sans mécanisme applicatif ne protège personne.
Vigie des créneaux de rendez-vous
Un composant vérifie chaque jour ce que voit réellement un visiteur qui clique sur un bouton « Prendre rendez-vous » : le site pointe-t-il bien vers la page de réservation ? L'API renvoie-t-elle des créneaux disponibles dans les quatorze prochains jours ? En dessous d'un seuil minimal, une alerte interne est envoyée à l'équipe — jamais au client du tenant. Le silence n'est pas considéré comme un succès.
Garde de version fiscale
Un composant scelle l'empreinte du code portant les fonctions fiscales critiques de la caisse (registre, chaînage, clôtures, archivage, export). Tout changement sur ces fichiers constitue une version majeure et invalide l'attestation en cours. Trois sous-commandes : vérification de l'empreinte courante, recalcul du sceau, et lecture de la racine et de l'empreinte enregistrées par le registre d'attestation.
Boucle de maintenance et auto-réparation de la documentation
Un orchestrateur quotidien enchaîne douze étapes en un seul passage nocturne (déclenchement à 5 h du matin). Il opère sous verrou et peut être mis en pause via un interrupteur en base de données. Les codes de retour 1 et 2 des sous-étapes sont des statuts informatifs (dérive détectée, santé critique) et non des échecs fatals ; l'orchestrateur ne sort en erreur que sur un vrai crash.
Les douze étapes du passage nocturne
| # | Étape | Rôle | Délai max |
|---|---|---|---|
| 1 | Percevoir | Miroir de fidélité : détecte les dérives entre la documentation interne et les chapitres publiés (lecture seule) | 900 s |
| 2 | Couverture | Détecteur d'angles morts : compare les composants existants aux noms cités dans la documentation (lecture seule) | 180 s |
| 3 | Anatomie | Proprioception des organes : compare le statut déclaré de chaque organe à son état réel dans le planificateur ; auto-correction réversible à la baisse uniquement (loi d'asymétrie) | 120 s |
| 4 | Graphe d'organes | Dérivation idempotente des arêtes inter-organes (lecture seule, upsert déterministe) | 30 s |
| 5 | Réparer | Résolveur mécanique des références mortes : un seul résultat unique → réécriture + commit ; zéro ou plusieurs → rapport et alerte sans réécriture | 180 s |
| 6 | Régénérer | Régénération profonde autonome : l'agent réécritle chapitre, commit réversible, scrub anti-fuite, staging, puis gate de publication (détection de fuite) ; si propre : activation automatique ; si fuite : blocage et alerte | budget + 1800 s |
| 7 | Proposer | Re-staging des chapitres restants en dérive et préparation d'un email récapitulatif | 1800 s |
| 8 | Publier-doc | Staging de la dérive fraîche puis activation automatique des chapitres passant tous les gates machine (fuite, anti-gourou, dérive) ; email en cas de blocage | 3600 s (borne interne : 3000 s) |
| 9 | Publier-organes | Synchronisation de l'inventaire d'organes vers le VPS public (mise à jour des existants, insertion en statut inactif pour les nouveaux) ; gates anti-fuite | 60 s |
| 10 | Re-percevoir | Second passage du miroir de fidélité après régénération et publication, pour que le snapshot de santé poussé vers le site public reflète l'état final et non l'état d'avant le passage | 900 s |
| 11 | Soigner | Bilan de santé en cinq dimensions (proprioception, couverture, dette, apprentissage, automates) calculé sur l'état final post-publication | 240 s |
| 12 | Publier | Synchronisation du snapshot de santé et de dérive vers le VPS public ; mode best-effort (code 2 si le VPS est injoignable, sans bloquer la chaîne) | 60 s |
L'auto-réparation mécanique des références et liens cassés tourne indépendamment de cet orchestrateur (toutes les six heures). Elle traite trois classes de problèmes réversibles : références de catalogue mortes résolues par nom de base unique, liens markdown cassés résolus par nom de base unique, et stubs de navigation en langue anglaise absents. Chaque classe est validée par un gate fail-closed : une classe absente du registre n'est jamais auto-appliquée.
Le traitement des revues externes suit un schéma découplé : les revues soumises par l'opérateur humain sont évaluées par un modèle sandboxé (délimiteurs anti-injection, champs hors spec ignorés, injection détectée → log sans action). Si la revue est valide, le composant signale la régénération à l'orchestrateur sans la déclencher directement. Ce composant est actuellement désactivé dans le planificateur (quota LLM épuisé).
Après chaque régénération profonde, un composant de triage réévalue les critiques externes encore ouvertes face au nouveau contenu HTML et les classe en trois catégories : résolues par la régénération (aucune action), survivantes et escaladées au backlog humain, ou hors périmètre (attentes multi-tenant plaquées sur un système mono-base).
Publication synchronisée vers le site public
- Un composant synchronise le snapshot de santé et de dérive vers la base du VPS public, alimentant le cadran de maintenance en temps réel. Un seul snapshot par jour, aucune écriture sur la base centrale.
- Un synchroniseur de liturgie calcule les horaires d'activité des automates et pousse un snapshot vers le VPS public. Un libellé qui échoue au scan anti-fuite est comptabilisé sans être nommé.
- Un synchroniseur de compétences pousse les fiches publiables (nom, pitch, taille, date — jamais le corps des fiches) vers le VPS public, en remplaçant l'ensemble en une seule transaction après sauvegarde de l'état précédent.
- Un synchroniseur de garde-fous pousse les entrées publiables de l'inventaire des garde-fous (fichier relatif, organe, événement, déclencheur, caractère bloquant, raison FR/EN, incidents — jamais la commande ni le chemin absolu).
- Un composant de snapshot éditorial synchronise les tables de contenu de la base centrale vers la base locale du VPS public, avec vérification de parité de colonnes et transaction unique.
Inventaire des garde-fous multi-harnais
Un indexeur lit les configurations de câblage de tous les harnais d'agents actifs, retrouve le fichier derrière chaque commande déclarée, extrait la raison d'être du garde-fou et maintient un miroir en base (avec empreinte SHA-256 pour détecter les dérives). Il inclut depuis octobre 2026 le cinquième harnais. Un rapport de parité vérifie qu'aucune politique de sécurité prioritaire n'est absente sur l'un des harnais.
Immunité adaptative
Ce sous-système détecte les cicatrices qui se répètent selon des schémas similaires, formule des propositions de réflexes préventifs, et les soumet à une validation humaine avant tout armement. Le modèle de menace est strict : aucune proposition ne peut s'armer seule — la table de staging ne contient pas de colonne d'activation, et le moteur de réflexes actifs ne lit jamais cette table de propositions.
Détection et proposition
- Détecteur de clusters : applique un algorithme de densité (DBSCAN, distance cosinus, seuil serré pour éviter un blob unique regroupant la quasi-totalité des paires) sur les vecteurs de cicatrices. Produit une liste de clusters avec leur pureté. Aucune planification cron propre ; utilisable en ligne de commande avec options de simulation et de paramétrage.
- Assembleur de propositions : combine les clusters en projets de réflexes enforçables et les place en staging inerte après validation par le contrat de sûreté. Alimente également la section immunité du digest quotidien de l'élagueur. Aucune planification cron propre.
- Contrat de sûreté : valide chaque proposition avant staging — action limitée à deny ou warn, niveau de déclenchement borné, motif anti-ReDoS, preuve obligatoire. N'écrit jamais dans la table des réflexes actifs.
Détecteur d'erreurs en fin de session
Un garde-fou de fin de session lit le transcript de la session courante, isole le delta du dernier tour et filtre les erreurs bénignes connues. Il distingue deux cas :
- Commande de livraison bloquée : une commande de déploiement réellement exécutée et bloquée par le garde-fou de livraison → leçon comportementale émise sur la sortie d'erreur, code de retour 2, trace en base d'audit.
- Autres erreurs (tracebacks, vraies erreurs applicatives) → proposition de réflexe en staging inerte via le contrat de sûreté.
Des garde-fous internes évitent les boucles : interrupteur d'urgence, détection du contexte worker, marqueur de session anti-récursion. Le composant est entièrement en dégradation gracieuse (exit 0 par défaut).
Note sur le périmètre d'évaluation des réflexes : le moteur de réflexes actifs est câblé sur les outils d'édition, de lecture, d'invocation d'agent et de navigation web — mais pas sur les commandes shell directes. Deux des trois gabarits de propositions du système sont marqués comme enforçables sur commandes shell. Sans câblage correspondant, un réflexe armé sur ce déclencheur resterait non évalué en pratique malgré son statut actif — écart à confirmer et corriger.
Moteur d'entraînement et outils de session
- Moteur d'entraînement : pilote des exercices structurés pour les agents, en ligne de commande.
- Générateur de cicatrice : produit un rapport structuré et un brouillon d'email après verdict, utilisable depuis la compétence d'apprentissage.
- Leçon post-chantier : rédige automatiquement une rétro pédagogique après la clôture d'un chantier.
- Harness d'évaluation du rappel : mesure les performances du mécanisme de rappel sémantique (rappel@k, MRR@10, comparaison à une baseline figée) et échoue si une régression est détectée.
- Injecteur de cicatrices au spawn d'agent : comble une asymétrie du harnais — le sous-agent reçoit le cadre cognitif synchronisé mais pas les cicatrices. Ce composant effectue une requête vectorielle et produit un bloc « écueils déjà appris » prêt à être inséré dans le prompt de spawn.
- Glaneur de préférences : recense dans les transcripts locaux les consignes et préférences de l'opérateur que les autres couches ne capturent pas. Entièrement déterministe, sans modèle de langage. La rédaction des notes issues de ce glanage se fait en session interactive.
- Synthèse des notes par tenant : recense l'ensemble des éléments portant l'état d'un client (chantiers, notes mémoire, notes Zettelkasten), vérifie chaque référence citée contre la source vivante, et peut poser un bloc structuré dans un chantier sur demande.
- Affichage rapide du dernier transfert : commande shell qui affiche immédiatement la carte du dernier transfert du répertoire courant, sans appel au modèle — utile juste après un effacement de contexte où la bannière du garde-fou de démarrage n'apparaît pas.
- Publication des cicatrices publiques : extrait les cicatrices validées, les assainit via un modèle de langage et les pousse vers la base publique. L'activation est un geste humain délibéré. Actuellement désactivé (quota LLM épuisé) ; la commande CLI reste utilisable manuellement.
Format canonical du cache mémoire principal
Un composant maintient la forme canonique du fichier de cache mémoire principal, à partir d'un manifeste YAML déclarant les zones, leurs budgets en octets, leurs marqueurs de délimitation et les invariants à vérifier. Il protège la répartition entre zones, pas seulement le total — deux incidents ont montré qu'une conformité globale pouvait masquer un débordement zonal. Ce composant est conçu avec des dépendances minimales car il est sur le chemin critique de plusieurs garde-fous.
Famille personas / agents — entretien
Cette famille regroupe les scripts dédiés à la maintenance du référentiel d'agents : synchronisation, régénération des profils, mesure du poids cognitif et tests de validation. Chaque outil agit sur une facette précise du cycle de vie d'un agent sans empiéter sur les responsabilités des autres.
| Outil | Rôle | Mode d'invocation |
|---|---|---|
| Synchroniseur d'agents canoniques | Propage les agents définis dans le référentiel central du Synedre vers le moteur conversationnel embarqué. Doctrine établie en juin 2026 : les agents du moteur conversationnel ne sont pas des personas inventées localement ; ce sont les vrais agents du Synedre, avec leur cadre cognitif canonique. Exécuté via le lanceur planifié. | Cron — tous les lundis soir (18 h 45) |
| Rafraîchisseur de persona | Recalcule le profil d'un agent via un modèle de langage, applique une fusion à trois branches (3-way diff) puis soumet le résultat à la revue humaine avant persistance. | CLI ou skill /persona <codename> --fix |
| Lecteur de profil complet | Restitue le profil intégral d'un agent : données de base et corpus de cicatrices associées. | CLI |
| Lecteur de séquence de cues | Affiche la séquence de cues de conduite associée à un agent. | CLI |
| Régénérateur de fiches agents | Reconstruit les fiches agent en format texte structuré à partir du référentiel central. Implémentation principale, invocable directement en ligne de commande. | CLI |
| Passe-plat cron du régénérateur | Angle mort comblé en juillet 2026 : le lanceur planifié ne résout que les scripts situés dans un répertoire précis. L'implémentation réelle du régénérateur se trouvant à la racine du dépôt, ce passe-plat délègue à elle sans dupliquer la logique, la rendant ainsi éligible à la planification automatique. | Cron — tous les lundis soir (23 h 00) |
| Synchroniseur de portraits | Recopie les portraits visuels des agents (fichiers image au format WebP) vers leur destination de diffusion. | CLI |
| Suite de tests personas (Phase C) | Tests unitaires couvrant le comportement du cycle de rafraîchissement des personas. Produit d'un chantier de validation dédié. | CLI (test) |
| Validateur du mode auto sélectif | ⚠️ Supprimé — placé en corbeille en juillet 2026 lors d'une campagne d'élaguage : aucune exécution détectée sur 30 jours, aucune référence active (planification cron, hooks, skills, imports, services système). Récupérable pendant 30 jours via la fonction de restauration de corbeille, puis purge définitive par l'Élagueur. | — |
| Auditeur de poids cognitif |
Mesure le poids cognitif de chaque profil agent (Art. 25 — chantier de gouvernance des profils) : évalue le volume du profil cappé augmenté des cicatrices au moment du spawn, et compare l'ensemble des règles actives associées à l'agent à un seuil d'alerte et un seuil de surveillance. Signale également les cicatrices orphelines (sans agent rattaché). Cet outil mesure uniquement — toute décision de coupe relève du composant d'élagage dédié. Options : --json, --threshold, --warn. Retourne le code de sortie 1 si un profil dépasse le seuil critique. Angle mort comblé en septembre 2026 (présent sur disque depuis août 2026).
|
CLI — ⚠️ aucune ligne cron active |
Note sur la planification des tâches récurrentes. Deux corrections de calendrier ont été apportées lors d'une relecture contradictoire en septembre 2026 : le synchroniseur d'agents canoniques et le passe-plat du régénérateur étaient antérieurement documentés avec des horaires matinaux. Les horaires du soir indiqués dans ce tableau sont les valeurs corrigées et en vigueur.
Note sur l'auditeur de poids cognitif. Ce composant n'est pas raccordé à une tâche planifiée. Son exécution doit être déclenchée manuellement ou intégrée dans un pipeline de validation explicite. L'absence de cron est un état délibéré documenté, non un oubli.
Famille Messagerie client
Règle fondamentale : aucun email client n'est envoyé directement par l'IA. Tout passe par la façade d'envoi email, en deux temps obligatoires — brouillon (--draft) puis envoi (--send). Un garde actif bloque toute tentative d'envoi SMTP direct hors de cette façade. Les identifiants de messagerie (compte IMAP, serveur, mot de passe, paramètres SMTP) sont stockés dans les variables d'environnement de l'hôte — leurs valeurs ne figurent jamais dans ce document.
Protections transversales
Garde RGPD art. 21 : avant d'écrire un brouillon, la façade vérifie si le destinataire (adresse ou domaine) figure dans la liste d'opposition. Cette liste est conservée sans limite de durée et n'est jamais purgée. Le principe est fail-closed : si la base est indisponible ou en erreur, le brouillon est refusé par défaut.
Liens de note de mesure : un lien de type /note/<jeton> inséré dans un brouillon programmé doit être couvert par un identifiant de note valide enregistré en base. Sans cela, la commande de programmation refuse le brouillon. Cette protection évite qu'un lien collé manuellement contourne le contrôle de statut et la détection de contenu suspect.
Zéro message client programmé automatiquement : toute réponse dans un fil déjà ouvert (détecté par les en-têtes de fil) ou adressée à un contact ou domaine reconnu comme client est bloquée à la programmation. Seul un premier contact vers un inconnu peut être programmé (démarchage) ; tout message destiné à un client existant est toujours envoyé manuellement, après validation explicite du fondateur. Cette règle est fail-closed : si la base ne répond pas, l'envoi est refusé.
Composants de la messagerie client
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Façade d'envoi email client |
Workflow complet d'envoi : brouillon, relecture, envoi, archivage. Plusieurs couches de protection actives :
|
CLI (façade unique) / compétences de réponse client |
| Garde façade email | Hook actif à chaque appel d'outil : rend obligatoire le passage par la façade d'envoi. Bloque tout appel SMTP direct. | Hook automatique |
| Synchronisation boîte de réception | Interroge périodiquement la boîte IMAP et insère les nouveaux emails dans la base de données d'inbox. | Tâche planifiée (toutes les minutes) |
| Accès IMAP direct (secours 1) | Connexion IMAP de secours au serveur de messagerie, fusionnée dans la compétence unifiée /inbox. |
CLI / compétence /inbox (mode secours) |
| Recherche IMAP ergonomique (secours 2) | Retrouve un email par expéditeur ou horodatage, fusionné dans la compétence unifiée /inbox. |
CLI / compétence /inbox (mode secours) |
| Lecture boîte secondaire | Façade lecture seule pour une boîte email secondaire de l'agence. | CLI |
| Scan antivirus des pièces jointes | Analyse antivirus des pièces jointes email entrantes (agent Mitnick). | CLI / compétence /scan-attachment |
| Dossier client exportable | Produit un dossier lisible par un humain et un modèle de langage, remettable au client. Contenu autorisé : titre, état, échéance et dernière mise à jour de ses chantiers ; titres et états de leurs travaux ; emails reçus de ses domaines et de ses contacts, et emails envoyés où il est destinataire ou en copie (ni brouillons, ni copies de validation). Une étape d'assainissement retire automatiquement les secrets, chemins internes et références à d'autres clients. Le registre de ton, la fiche profil, les incidents, les coûts et les revenus récurrents ne sont jamais inclus. | CLI / compétence /dossier-client |
| Résolution du ton de rédaction | Détermine le ton à employer par membre de l'équipe cliente : la fiche de chaque contact prime sur la fiche de l'entreprise. Un contact qui tutoie est tutoyé, appelé par son prénom — pas toute son équipe. | Bibliothèque interne |
| Détection automatique du contexte client | Hook déclenché à chaque saisie du fondateur : détecte si un client connu est mentionné, émet les consignes de ton et un dossier sujet multi-sources (emails, commits, tâches planifiées, journaux, code) sur la sortie standard. Silencieux si aucun client n'est détecté. Anti-faux-positifs : correspondance exacte sur le nom de code requise ; clients internes exclus. | Hook UserPromptSubmit |
| Alertes email système | Plusieurs composants envoient des alertes email ciblées : échecs de sauvegarde, événements cockpit (idempotent, passe par la façade), échecs de rollback et incidents critiques, dépassement de budget API mensuel. | Tâches planifiées (callbacks) |
| Synchronisation avis Google | Synchronise les avis Google Business Profile vers la base. | Tâche planifiée |
| Automate Malt | Automatise les interactions avec le compte freelance sur la plateforme Malt. | CLI / compétence /malt |
| Extraction de pièces jointes | Extrait les pièces jointes d'un email avant analyse antivirus. | CLI |
| Point de vérité emails client | Analyse les emails d'un client et de son équipe (contacts connus + domaine professionnel) en confrontant chaque entrant à nos envois via le moteur de fils partagé. Rend un verdict prouvé par entrant : répondu (fil certain), probablement répondu (même sujet), à traiter, soldé sans réponse, à jour sans lien de fil, à jour. Un statut en base seul ne prouve rien — la vérité est le dossier Envoyés. En lecture seule par défaut ; la clôture manuelle est plafonnée, nominative et journalisée. | CLI / compétence /point-emails-client |
| Réconciliation dossier Envoyés | Rapproche le dossier Envoyés IMAP et la base d'inbox : une réponse partie ne ferme le fil que si l'email entrant était visible en base avant l'envoi (protection contre les synchronisations IMAP tardives). | Tâche planifiée (toutes les heures) |
| Synchronisation bidirectionnelle suivi / chantiers | Maintient la cohérence entre le suivi des demandes client et les chantiers/tâches, réconciliation last-write-wins. | Tâche planifiée (toutes les 10 minutes) |
| Mutation de données client sous autorisation | Façade de modification de données client (ex. solde fidélité) : refuse toute écriture sans autorisation écrite tracée (--authorized-by), journalise l'état avant et après, exécute le flux via le back-office. |
CLI |
| Annotation de capture d'écran | Annote un PNG déjà capturé pour une réponse client : cadres numérotés, pastilles, légendes, import depuis JSON, largeur max. Une boîte débordant le cadre est une erreur (tolérance bornée optionnelle). Ne capture rien. | Compétence réponse client annotée / CLI |
| Archivage IMAP Envoyés | Dépose une copie RFC822 dans le dossier Envoyés IMAP après un code OK explicite du serveur. Essaie les dossiers candidats connus, crée le dossier si aucun n'existe. Bibliothèque sans point d'entrée propre. |
Bibliothèque (importée par la façade email) |
| Coffre one-time-secret souverain |
Façade de dépôt et de lecture d'un secret éphémère via un coffre PrivateBin auto-hébergé. Deux sens :
|
CLI / bibliothèque |
| Digest matinal du fondateur |
Email envoyé à 07 h 30 (heure de Paris, été comme hiver). Agrège les signaux de la nuit (emails, backlog, chantiers, incidents) et les route avec une étiquette pré-calculée (run / chantier / brouillon / bruit) et une justification d'une ligne par item. Inclut un récapitulatif des vigies retenues. Objectif : faire du triage matinal un acte de décision, pas une re-lecture.
L'indicateur « à déployer » lit la référence de déploiement servie par la machine hôte et compte les commits preprod non encore déployés. Si la référence est absente, corrompue ou incohérente, le digest écrit « déploiement preprod non vérifié » — jamais un faux « 0 ». |
Tâche planifiée (07 h 30 locale) |
| Gardien de boucle client (Nightingale) |
Détecte deux fuites sur les fils des contacts actifs :
|
Tâche planifiée / CLI / compétence /boucles-client |
| Relances escaladantes | Relance interne des demandes client non traitées par paliers d'âge, jusqu'au transfert vers l'adresse support CodeMyShop. Clôture détectée par analyse du bloc « message réexpédié ». État persisté, plafond journalier. Jamais un email vers le client, aucun modèle de langage. | Tâche planifiée (scan toutes les 15 minutes, envoi deux fois par jour) |
| Générateur de tuto MCP par client | Génère dynamiquement un tutoriel montrant au client comment utiliser son propre assistant IA branché en MCP sur sa boutique. | CLI / compétence /tuto-mcp |
| Gestion du suivi projet client | CLI de gestion du suivi des demandes client via la base de données Atlas. | CLI / compétence /traiter-demande |
| Document d'accueil client | Génère un PDF « accès et connexions » destiné au client — sous-ensemble sûr des informations de son environnement, sans credential sensible en clair. | CLI |
| Promotion d'un lead vers client | Promeut une organisation gagnée (lead/prospect) vers le statut client : consolide les données et liens déjà attestés, exige une négociation gagnée en paramètre. Dry-run par défaut, --apply pour écrire. Ne crée ni environnement technique ni secret : le provisioning reste piloté séparément. |
CLI / compétence /promouvoir-client |
| Déduplication des brouillons | Bibliothèque pure (sans réseau ni base) garantissant une seule copie « À VALIDER » par brouillon. Détecte le remplacement (même destinataire, sujet, expéditeur, traitement) et le brouillon dû, sans jamais traiter un brouillon déjà envoyé ou programmé. | Bibliothèque (façade email) |
| Canal unique Atlas → fondateur |
Unique point d'envoi d'Atlas vers la boîte du fondateur. Envoie depuis la boîte canonique avec reply_to pointant la boîte Atlas, pour que les réponses reviennent au poll Atlas. Renvoie le Message-ID réel lu dans le brouillon après envoi — jamais un identifiant fabriqué. Ne lève jamais d'exception.
|
Bibliothèque |
| Dossier sujet multi-sources | Croise cinq sources de vérité (emails, commits, tâches planifiées, journaux, code) pour interdire une réponse fondée sur un seul email hors contexte. Appelé par le hook de détection client, sous double condition (intention de communication et client détecté). Restauré après une suppression par faux positif — désormais surveillé par le détecteur d'appels orphelins. | Bibliothèque (hook UserPromptSubmit) |
Sous-famille Prospection et note de mesure
Le démarchage suit un protocole en quatre étapes : (1) constater un fait technique vérifiable pour un prospect précis (vitesse, faille, technologie), (2) figer le texte après validation du fondateur, (3) choisir une heure de dépôt plausible côté destinataire, (4) mesurer ce que ça rapporte. Quatre façades distinctes interviennent — aucune ne contacte le client seule. La liste d'opposition RGPD (art. 21, conservation permanente) est vérifiée par la façade email elle-même, pas par un hook séparé.
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Note de mesure |
Construit une note de mesure à partir des sondes éprouvées (vitesse de page, technologie, positionnement) et tient son cycle de vie : prévisualisation, scellage (par le fondateur), publication (geste explicite séparé), retrait avec motif tracé, purge RGPD automatique (notes > 30 jours, consultations > 12 mois, envois sans réponse > 3 ans).
La publication et le retrait sont propagés en synchrone vers le site public. Si la propagation échoue, la commande rend un code d'erreur explicite — un retrait non propagé laisserait la note en ligne. La note est rédigée en français correct : nom officiel de la plateforme, décimales à virgule, mois en toutes lettres, milliers séparés par une espace fine. Aucun LLM, aucun appel payant pendant le gel du démarchage. |
CLI / tâche planifiée (purge quotidienne) |
| Client SERP et données marché |
Interroge le fournisseur de données de positionnement (SERP, solde, volumes de recherche, backlinks, concurrents, mots-clés positionnés, suggestions). Chaque appel renvoie le coût. Les concurrents déclarés par le client sont croisés avec le panel mesuré.
Garde de coût : la variable d'environnement de désactivation des appels payants est vérifiée avant toute lecture d'identifiant ou tout appel réseau. |
CLI / bibliothèque |
| Règles d'expédition du démarchage | Fonction pure (aucun effet de bord, pas de SMTP, pas d'écriture) qui décide quand un démarchage validé a le droit de partir : fenêtre 07 h–08 h du lundi au vendredi, plafond journalier (envois du fondateur plus plafond de la délégation active), plafond par passage. Le sceau SHA-256 du corps garantit que c'est exactement ce texte-là qui partira — un seul caractère modifié après validation bloque l'envoi. | Bibliothèque |
| Automate d'expédition du démarchage | Expédie les démarchages déjà validés et scellés via la façade email. Ne rédige rien, aucun modèle de langage, aucun appel réseau hors SMTP. Inscrit chaque envoi au registre de prospection sans attendre la vigie de rendement. | Tâche planifiée (fenêtre 07 h–08 h, lundi–vendredi) |
| Vigie de rendement du démarchage |
Rapproche ce que rapportent les démarchages : envois, réponses, clients convertis, dépense de sonde, groupés par note. Détecte les anomalies de consultation. Produit un digest hebdomadaire pour le fondateur. Lecture seule — n'écrit à aucun prospect.
Distingue premiers contacts et relances dans le registre : les relances n'entrent pas dans les taux du bilan du soir. |
Tâche planifiée (trois fois par jour + rapport hebdomadaire) / compétence /demarchage |
| Préparation des rendez-vous | Vigie de préparation des RDV issus d'un démarchage : rattache les notifications de réservation Calendly à l'envoi correspondant, produit un PDF à la charte envoyé au fondateur seul — jamais au prospect. Contenu : questions de découverte, offre sans chiffre, points de vigilance, fiche société et solvabilité issues des seuls faits publics (une section sans source l'indique). Une ligne par notification (envoi unique garanti). Aucun modèle de langage. | Tâche planifiée (toutes les 10 minutes) / CLI / compétence |
| Rappel de rendez-vous | Envoie un email au fondateur une heure avant chaque rendez-vous, sans modèle de langage. Deux sources : notifications Calendly et agenda souverain. Un seul rappel par RDV. Jamais vers l'invité. | Tâche planifiée (toutes les 5 minutes) / CLI |
| Périmètre d'acquisition | Garde à la demande de la règle « pas de concurrent d'un client » : liste les secteurs occupés et refuse de rendre la liste si elle est incomplète. | Compétences démarchage, sonde vitesse, qualification prospect / CLI |
| Sonde e-commerce | Prouve qu'un site vend en ligne (PrestaShop, Shopify, WooCommerce) par quelques requêtes GET publiques. Verdicts : vend, catalogue, fermée, plateforme sans preuve, hors périmètre, muet. Lecture seule. | Compétences démarchage et qualification prospect |
| Diffusion des notes de mesure | Sert les notes publiées sur le site public par push depuis le vaisseau-mère : remplace la table du site en une transaction, rapatrie les consultations vers le hub de façon idempotente. Aussi appelé en synchrone lors de toute publication ou retrait. | Tâche planifiée (toutes les 5 minutes) / bibliothèque |
| Accord de démarchage par email |
Lit la réponse du fondateur à une copie de validation de démarchage : « valide <jeton> » programme le brouillon (jamais envoi direct). Le sceau et les plafonds restent seuls juges du départ effectif. Branché dans le poll IMAP Atlas ; une réponse Re: n'est jamais triée comme bruit interne.
|
Bibliothèque (poll IMAP) |
| Enrichissement CRM preprod | Script one-shot : rattache les identifiants légaux (SIRET/SIREN) aux comptes CRM issus du pipeline site, puis complète adresse et ville via l'API publique de recherche d'entreprises (100 comptes par passage maximum). | CLI (one-shot) |
Sous-famille Délégations acquisition (B4) et communication (B8)
Les deux seules exceptions à la règle « zéro communication automatique » côté prospects et Page Facebook. Une table de délégation (une ligne par bureau, inactive par défaut) et un journal append-only horodaté enregistrent chaque décision. L'activation n'appartient qu'au fondateur — elle se fait en session directe, aucune commande du module ne peut l'activer. La désactivation est ouverte à tous. Des variables d'environnement permettent de couper chaque délégation immédiatement.
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Délégation acquisition (bureau B4) |
Ce qu'Atlas décide à la place du fondateur sur le bras acquisition. Quatre portes fail-closed :
|
CLI / tâche planifiée (digest 18 h) |
| Délégation communication Page (bureau B8) | Répond aux commentaires de la Page Facebook de l'agence (volet API de Page uniquement), sans validation unitaire : 3 réponses par jour, veto la veille, longueur limitée, aucun lien ni coordonnée, détection d'injection, mention IA obligatoire (texte validé par le fondateur). Refuse Messenger, groupes, forum, tout client existant ou concurrent d'un client, tout montant ou promesse. | Bibliothèque (module communauté) / CLI |
Sous-famille Traitement email par ventouse
Une ventouse déjà ouverte pour un client peut traiter les emails de ce client sans nouvelle session : lot unique par client, brouillon soumis au fondateur, départ seulement sur « valide <jeton> ». L'envoi reste sous validation manuelle — ce n'est pas une exception supplémentaire à la doctrine « zéro communication automatique ». Chaîne : veille → contexte de fil → brouillon → accord → envoi → preuve par le dossier Envoyés.
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Veille de traitement (ventouse) |
Ramasse les emails non traités de l'équipe du client associé à la ventouse, ouvre un traitement numéroté pour tout le lot. Un seul traitement vivant par client (index unique). États : ouvert → (question ⇄ ouvert) → brouillon → validé → envoyé → clos / abandonné.
Scénarios définis en base (bug, modification, administratif, question, information), chacun avec ses exigences de preuve QA. Gardes : la façade email refuse d'envoyer un brouillon de traitement dont le jeton n'a pas été consommé. Plafond journalier et par ventouse. Rappel unique au fondateur si le traitement dépasse 2 heures. Aucun modèle de langage en tâche planifiée. Chaque traitement est audité par une vue dédiée. |
Tâche planifiée (toutes les minutes, sous verrou) / CLI depuis la ventouse |
| Accord de traitement | Lit la réponse du fondateur à un traitement : « valide <jeton> » déclenche l'envoi immédiat (sans fenêtre horaire) en soldant tout le lot. Peut aussi répondre à une question posée par la ventouse. Fail-closed : expéditeur sur liste blanche et DKIM aligné. Branché dans le poll IMAP avant l'accord de démarchage. | Bibliothèque (poll IMAP) |
| Contexte de fil pour la ventouse |
Fournit à la ventouse tout ce qu'elle doit savoir avant de rédiger : règles de rédaction communes (vérifier avant d'affirmer, diagnostiquer, ne rien engager, prochaine action, « commité ≠ livré », constat exigé avant de déclarer un état rétabli), historique du fil, promesses ouvertes. Garde contre la clôture sans réponse sur promesse ouverte.
La dernière réponse envoyée s'affiche en entier ; les autres sont coupées à 900 caractères (signatures retirées). Les heures sont affichées à l'heure de Paris. |
Bibliothèque (ventouse, simulation, façade email) |
| Simulation de traitement à blanc | Rejoue des traitements passés à blanc : réponses réellement parties reconstituées, la ventouse rédige à l'aveugle (un cas n'est révélé qu'après le rendu des précédents), puis comparaison mécanique et deux juges indépendants. Aucun envoi, aucune écriture en base de traitement réel. | CLI |
| Suivi de validation des traitements | Mesure combien de brouillons d'une ventouse le fondateur valide tels quels versus après retouche, par client et sur une période. | Tâche planifiée (rapport hebdomadaire) / CLI |
Sous-famille WhatsApp professionnel
Calque du triptyque brouillon → relecture → envoi appliqué au canal WhatsApp Cloud API (Meta). Un garde actif bloque tout envoi sans brouillon préalablement validé.
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Façade d'envoi WhatsApp | Triptyque brouillon → relecture → envoi, calqué sur la façade email client. | CLI (façade unique) |
| Composition de brouillon WhatsApp | Compose la réponse à un message entrant WhatsApp, calqué sur le module de composition de réponse Atlas. | CLI |
| Récupération des médias entrants | Télécharge et soumet à l'antivirus les médias joints aux messages entrants WhatsApp (le webhook insère le message mais ne télécharge pas le binaire). | Tâche planifiée (toutes les minutes) |
| Relais vers l'interface mobile | Relaie chaque message client entrant capté vers l'interface mobile (client) avec notification au fondateur. | Tâche planifiée (toutes les minutes) |
| Alerte WhatsApp entrant | Alerte email sur message WhatsApp entrant, au plus une par heure. Deux mécanismes d'idempotence : un message notifié ne l'est plus jamais ; plancher horaire configurable. Aperçu limité à 140 caractères, maximum 12 messages détaillés. | Tâche planifiée (toutes les 5 minutes) |
Sous-famille Communauté PrestaShop et réseaux sociaux
Veille et réponse publique aux marchands (forum PrestaShop et forums européens associés, groupes Facebook, Page Facebook, commentaires LinkedIn, forum WooCommerce, Shopify Community). La publication n'est jamais déclenchée en tâche planifiée directe : un garde vérifie systématiquement que le texte est scellé et que l'identité du valideur est connue avant toute publication.
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Purge RGPD des sujets communauté | Efface à 12 mois les données de tiers (extrait, auteur, titre) des sujets traités. Conserve la décision, le statut, les dates, les sceaux et notre réponse. Essai à blanc par défaut, aucun modèle de langage. | Tâche planifiée (hebdomadaire) |
| Publication de réponse communauté |
Publie une réponse validée sur le forum PrestaShop, le forum WooCommerce, la Shopify Community ou un groupe Facebook, sous sceau :
|
CLI / compétence /communautes (jamais en tâche planifiée) |
| File de publication communauté |
Une file par forum (forum, WooCommerce, Shopify, groupes). Planifie le créneau de publication : départ immédiat si le forum est calme et dans les heures d'activité ; sinon écart aléatoire entre des bornes configurables (jamais un pas régulier). Hors plage horaire → report au matin. Plafond journalier atteint → lendemain.
À chaque passage : un sujet échu au plus, tous forums confondus, publié par le module de publication (même porte de sceau). Un refus de rythme génère un nouveau créneau ; tout autre refus sort le sujet de la file avec note pour le hub. |
Tâche planifiée (toutes les 5 minutes) / CLI |
| Veille communauté | Surveille les marchands demandant de l'aide en public : flux RSS/Atom du forum PrestaShop (toutes les communautés européennes), Reddit, Stack Overflow (signalement seul — le site interdit les réponses générées par IA), forum WooCommerce, Shopify Community, emails de notification Facebook. Seuls les sujets sans réponse sont retenus. Alerte le fondateur seul sur un nouveau sujet. Ne publie rien, aucun modèle de langage. | Tâche planifiée (toutes les 30 minutes, 7 h–22 h) / compétence /communautes |
| Interrupteur et coupe-circuit par volet Facebook | Gère l'état, le plafond et le coupe-circuit par volet Facebook (API Page, groupes, Messenger). Une restriction détectée de la part de Meta suspend le volet 30 jours. | Bibliothèque (importée par le module de publication) / CLI |
| Lecture de la Page Facebook | Lit par l'API Graph (GET seul, jeton de Page) les commentaires et messages Messenger entrants, et les écrit dans la table de veille communauté. Remplace les emails de notification Facebook, qui n'indiquent ni auteur ni contenu. | Bibliothèque (veille communauté) |
| Publication Page Facebook | Publie par l'API Graph la réponse validée d'un sujet de la Page : commentaire ou message Messenger. Même sceau que le module de publication forum, sans navigateur. Toutes les portes sont vérifiées avant le premier POST (sceau, volet, coupe-circuit, délégation B8 si applicable). Un code d'erreur de restriction Meta suspend le volet. | CLI / compétence /communautes (jamais en tâche planifiée) |
| Pilotage des brouillons Page | Rédige les brouillons de réponse aux sujets de la Page (modèle de langage, à la demande, gardes de forme) puis envoie un email de validation au fondateur. Si un brouillon est refusé sur la forme à la validation, il est réécrit avec le motif de refus en entrée. Les forums sont aussi au planning de rédaction. | Tâche planifiée (deux fois par heure, 7 h–22 h) |
| Dispatch des validations Page | Lit la réponse du fondateur à l'email de validation, branchée dans le poll IMAP avant le dispatcher client. Preuves exigées : expéditeur sur liste blanche et DKIM aligné, In-Reply-To correspondant au Message-ID de l'email émis. Ne traite que les emails de validation Page. | Bibliothèque (poll IMAP) |
| Relevé des commentaires LinkedIn | Relève les commentaires laissés sous les posts LinkedIn de l'agence, au navigateur (aucune API officielle pour un profil). Une visite par post, un passage par jour, lecture seule. L'auteur n'est jamais nommé — pseudonyme basé sur un HMAC, ni nom, ni fonction, ni employeur. | CLI / compétence /communautes / bibliothèque |
| Consentement OAuth API Graph | Gère l'accès API Graph à la Page Facebook : génère le lien de consentement Meta (état signé HMAC-SHA256, validité 30 minutes, nomme la Page visée), vérifie et renouvelle le jeton de Page. | CLI (une fois par consentement) |
Sous-famille Protection de majeur — boîte sécurisée
Dossier de protection d'un majeur, dans un schéma de base de données cloisonné hébergé seul. Ingestion IMAP 100 % déterministe (aucun modèle de langage, fail-closed sur la liste blanche), contrôle antivirus des pièces jointes, puis traitement à la demande sous la règle : « le modèle propose, le fondateur tranche, l'outil écrit et trace ».
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Poll IMAP dossier protégé | Interroge la boîte IMAP dédiée et insère les messages dans le schéma cloisonné (contenu chiffré). Liste blanche en base, fail-closed : un expéditeur inconnu n'est ni téléchargé ni marqué lu. Insertion idempotente. Verrou de processus pour éviter les exécutions concurrentes. | Tâche planifiée (toutes les 5 minutes) |
| Contrôle antivirus des pièces jointes du dossier | Extrait les pièces en mémoire, leur attribue un nom normalisé, les soumet à l'antivirus, enregistre le verdict. Le message n'est marqué « pièces saines » que si toutes ses pièces sont propres. N'ouvre, ne classe et ne supprime rien. | Bibliothèque (poll IMAP) / CLI |
| Traitement du dossier protégé | Traitement à la demande uniquement : lecture des messages (clair sur sortie standard, accès tracé), classement en une transaction, ignorance avec motif, mise à jour des démarches, consultation des pièces, évaluation de recevabilité. Jamais en tâche planifiée. | Compétence /protection-majeur (jamais en tâche planifiée) |
Sous-famille Permanence vocale IA
Permanence téléphonique pour un artisan client : le standard téléphonique (garde AGI et pont audio tenus dans un seul processus pour un fail-closed structurel) route vers l'agent IA qui tient la conversation et produit la fiche d'appel. Sur échec de décrochage, la messagerie est relevée par IMAP. Seul le module de rapport a le droit d'appeler la façade email — cette contrainte est un invariant de conception.
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Façade téléphonie | Gère le compte téléphonique du fournisseur : affichage de l'état, durcissement (filtrage réseau, mot de passe SIP écrit dans les variables d'environnement de l'hôte, jamais affiché), retrait d'une adresse réseau des restrictions (sans toucher au mot de passe, avec relecture après écriture et vérification que la liste reste cohérente), preuve d'enregistrement SIP, messagerie, cycle de vie du jeton API. | CLI / bibliothèque (pont audio) |
| Agent de conversation | Tient la conversation sans serveur SIP : reçoit les tours de parole, produit les réponses, mesure la latence, écrit les enregistrements d'appel et de tour de parole, rend la fiche. Refuse de démarrer si le routeur n'a pas rendu un verdict « agent ». Backend de parole injecté (réel ou scriptés pour tests/rejeu). | Bibliothèque (pont audio, garde AGI, rejeu) |
| Démon audio | Pont AudioSocket TCP (PCM 8 kHz, un appel à la fois) : rend la permanence non muette. Transcription et synthèse vocale via le worker interne sur le réseau privé — jamais un tiers. Accusés et salutations préchargés. Session à usage unique réclamée dans le registre du garde. | Service système / CLI --check |
| Contexte de l'agent pendant l'appel | Façade unique de « ce que l'IA sait pendant un appel » : dossier du client, construction du prompt système, vérification d'étanchéité (lève une erreur si une ligne appartient à un autre client). Le prompt système est extrait de la documentation du script conversationnel. | Bibliothèque (agent, démon audio, rejeu) |
| Garde AGI (standard téléphonique) | Poste de garde entre la ligne et la voix : interroge le routeur, journalise les refus, rend la décision au plan de numérotation, tient le registre des sessions. Fail-closed : démon absent → messagerie. Évite que le service de standard lise les variables d'environnement sensibles. | Bibliothèque (embarqué dans le démon audio) / CLI (--check) |
| Rejeu d'appel |
Simule un appel entrant à travers la vraie chaîne routeur → contexte → agent → fiche, sans ligne téléphonique. Scénarios documentés. Aucun appel au modèle sans --live, aucune écriture sans --persist.
|
CLI |
| Rapport des fiches d'appel | Transmet les fiches d'appel à l'artisan (hors chemin d'appel, invariant de conception) : un digest par client et par cycle avec transcription intégrale, envoi via la façade email, puis horodatage de l'envoi posé en base. | CLI (--send) — ⚠️ ligne de tâche planifiée absente du crontab actif |
| Routeur d'appel | Décide si l'IA décroche ou si l'appel part en messagerie : configuration du tenant, plages horaires, liste blanche réseau, plafonds d'appels par jour. Fail-closed. | Bibliothèque (agent, garde AGI, rejeu) / CLI |
| Harnais de test de l'agent | Lance l'agent seul (sources de configuration coupées, sans outils) avec le dossier du client lu en base. Refuse un dossier vide sauf option explicite. | CLI |
| Watchdog du poll de messagerie | Surveille l'activité du poll de messagerie vocale : au-delà de 30 minutes sans activité, ouvre un incident dans le registre des incidents (clé stable — un incident, pas une pluie d'alertes). | Tâche planifiée (toutes les 15 minutes) |
| Ingestion messagerie vocale | Ingère les messages laissés sur la messagerie du fournisseur : IMAP avec vérification DKIM (domaine signataire attendu), extraction de l'appelant, de la durée et de la transcription par motifs, rattachement à l'enregistrement d'appel, insertion idempotente, marquage lu après succès. Sans modèle de langage, sans envoi. | Tâche planifiée (toutes les 5 minutes) |
Sous-famille Emails système et triage automatique
Ménage de la boîte du fondateur : les emails auto-adressés à préfixe normalisé (vigies, alertes automates) sont triés automatiquement ; tout le reste (tiers, réponses, transferts) reste dans la boîte principale.
| Composant | Rôle | Mode d'invocation |
|---|---|---|
| Trieur de boîte de réception |
Unique trieur de la boîte principale. Lit les en-têtes de famille et d'agent posés par la façade email : les familles action, validation et urgence restent dans la boîte principale ; recap et info sont déplacés vers un dossier dédié.
Fail-closed : expéditeur = la boîte elle-même (ou l'identité de copie interne) ; jamais de traitement sur un Re: ou Fwd: (une réponse « valide <jeton> » ne doit jamais être triée avant le module d'accord). Étiquette inconnue → reste dans la boîte. Un message sans en-tête est traité par déduction.
Ne supprime jamais. Coupe-circuit par variable d'environnement. |
Tâche planifiée (toutes les 5 minutes) |
| Récapitulatif de 7 h 30 |
Module pur (sans réseau ni modèle de langage). Décide pour chaque vigie interne :
|
Bibliothèque (façade email, digest matinal) |
| Étiquetage et anti-rafale des envois internes |
Module pur. Cinq familles fermées. Détecte l'émetteur réel par analyse de la pile d'appel (jamais le paramètre « boîte expéditrice »). Anti-rafale : même destinataire et même sujet normalisé dans une fenêtre de 6 heures (24 heures pour les urgences, un seul incident par sujet récurrent) → envoi retenu et journalisé. Les familles action et validation ne sont jamais retenues. Historique illisible → l'envoi part. Coupe-circuit et option --force.
|
Bibliothèque (façade email, trieur, canal Atlas) |
Famille Blog, SEO & Contenu
Cette famille regroupe l'ensemble des automates qui produisent, optimisent et surveillent le contenu éditorial et les signaux SEO de la flotte : moteur de publication, optimisation multilingue des méta-données, génération d'articles, couvertures visuelles, forum de dialogues d'agents, diffusion sociale et sous-systèmes connexes (Search Console, indexation par vagues, maillage interne, traductions i18n, netlinking).
Moteur de publication et optimisation SEO
| Composant | Rôle | Invocation |
|---|---|---|
| Moteur de publication DB-First | Publie les contenus depuis la base de données vers les sites. Accessible en ligne de commande ou via la compétence /publish. |
CLI / skill /publish |
| Moteur SEO multilingue par page | Optimise les méta-titres, descriptions, FAQ et le maillage interne page par page. Maintient un statut de traitement et des instantanés de sauvegarde. Fonctionne comme noyau unique : toute optimisation SEO passe par ce moteur. Note : les trois tâches planifiées (vérification titre, description, état général) sont actuellement désactivées faute de forfait actif ; l'usage effectif est donc CLI ou via appelants directs. Évolutions récentes : gestion des exceptions de nommage de slugs, garde sectorielle sur certains types d'offres, lecture canonique des attributs produit en langue source même lors du traitement d'une autre langue, normalisation des valeurs LLM, routage FAQ source vide vers le modèle de génération historique, omission de formats non justifiés sur la verticale alimentation. | CLI |
| Correcteur de liens dans les descriptions | Vérifie que chaque lien interne d'une description produit pointe vers une URL qui répond avec succès, dans la langue de la description. Le système sonde la cible réelle (en suivant les redirections) plutôt que de recalculer les règles de routage. Une URL introuvable dans les deux langues voit son lien supprimé mais son texte d'ancre conservé. | CLI |
| Correcteur de résumés SEO | Détecte les résumés courts qui débordent sur la description longue et corrige automatiquement, avec instantané avant mutation et possibilité de retour arrière. | CLI |
| Sentinelle SEO technique multi-tenant | Surveille les indicateurs SEO de la flotte enrôlée et alerte sur les régressions. Lit les sitemaps déclarés dans robots.txt (y compris les index imbriqués et les URL enveloppées de CDATA). Relève également la lisibilité des fiches produit par les assistants d'achat (ChatGPT, Gemini, Perplexity) : un échantillon de fiches est évalué et le résultat est fusionné dans le verdict global. Les identifiants du compte Search Console sont transmis au conteneur d'exécution par l'environnement du processus, sans apparaître dans les arguments ni dans les journaux. |
Planifié / skill /seo-audit --sentinelle |
| Évaluateur de lisibilité agent | Répond à la question « ce site est-il lisible par un assistant d'achat ? » en trois étages : être trouvé (robots, flux marchand, sitemaps), être retenu (données structurées JSON-LD des fiches), pouvoir acheter (hors périmètre du relevé). Le module relève sans juger ; le verdict par fiche provient d'une règle du cœur du système. | CLI --tenant X ou --site URL ; skill /fiche-agent ; bibliothèque |
| Pont de jugement des fiches (Node) | Applique la règle de lisibilité agent du cœur du système à une liste de fiches JSON-LD reçue sur l'entrée standard. Retourne les verdicts dans le même ordre. Agnostique du tenant. | Bibliothèque (sous-processus) |
Hygiène du blog et similarité
| Composant | Rôle | Invocation |
|---|---|---|
| Nettoyage des articles blog | Supprime les doublons et les pages vides du blog. ⚠ Non planifié : la tâche automatique est désactivée. | CLI |
| Bibliothèque de similarité | Module partagé de calcul de similarité entre articles, utilisé par le moteur de publication. | Bibliothèque |
| Générateur de descriptions produit | Rédige des descriptions produit enrichies via un modèle de langage. | CLI |
Générateurs visuels
| Composant | Rôle | Invocation |
|---|---|---|
| Générateur de couvertures blog | Génère les images de couverture d'articles depuis une file d'attente. ⚠ Non planifié : les tâches automatiques sont désactivées. | CLI / bibliothèque |
| Générateur de carrousels LinkedIn | Produit des carrousels PDF au format 1080×1080 pixels pour LinkedIn. | CLI |
Surveillance du dictionnaire et couverture SEO source
| Composant | Rôle | Invocation |
|---|---|---|
| Vigie du dictionnaire | Surveille la présence des concepts du dictionnaire dans les articles. ⚠ Non planifié via la ligne de commande directe ; le planificateur interne pourrait l'exécuter toutes les 30 minutes (à confirmer). Récemment réaligné pour lire les articles publiés du blog via un lecteur de pages dédié, l'ancienne table source ayant disparu. | CLI / skill /dictionnaire |
| Vigie de couverture SEO source | Détecte les catégories sans méta-description ni description en langue source — angle mort du suivi de traduction qui ne couvre que les langues secondaires. Les articles sans contenu dans la langue source ne sont plus comptés comme trous de traduction. | Planifié / CLI / skill /seo-coverage |
Intégrations de données : Instagram et Search Console
| Composant | Rôle | Invocation |
|---|---|---|
| Synchronisation Instagram | Importe les posts Instagram d'un compte via l'API Graph (pagination complète) et les stocke en base. | Planifié / CLI |
| Renouvellement du token Instagram | Gère le cycle de vie du token d'accès Instagram pour un tenant : échange d'un token court en token long (60 jours), renouvellement avant expiration, dépôt manuel d'un token existant. Ces trois opérations sont mutuellement exclusives. La clé applicative partagée est lue depuis les variables d'environnement, jamais depuis des variables tenant-préfixées qui sont présentes en configuration d'audit mais sans usage fonctionnel Instagram. | Planifié hebdomadaire (dimanche) / CLI |
Rapport et suivi SEO
| Composant | Rôle | Invocation |
|---|---|---|
| Digest SEO bi-hebdomadaire | Couche de livraison sur la sentinelle SEO existante : lit l'historique de santé et les données Search Console granulaires, envoie un récapitulatif par email. Ne duplique pas le moteur SEO. Modes aperçu, test et envoi réel. | Planifié / CLI |
| Réparation de slugs d'articles | Corrige les identifiants d'URL des articles de blog pour respecter la convention de nommage (préfixe de catégorie suivi du segment final). Idempotent, multi-tenant, sans modification du contenu. | CLI |
| Déduplication de catégories | Supprime les catégories en double résultant d'imports répétés. | CLI |
| Déduplication de valeurs de caractéristiques | Nettoie les doublons dans les valeurs de caractéristiques catégorielles (couleur, forme, style). | CLI |
| Projection d'attributs vers la navigation à facettes | Projette les attributs canonicalisés issus du traitement LLM dans la table de navigation à facettes, en mode complément uniquement. | CLI |
| Re-catégorisation par taxonomie fournisseur | Attribue à chaque produit la catégorie issue de la taxonomie fournisseur officielle, en se basant sur la référence fournisseur comme clé de jointure. | CLI |
Connecteur Figma (Shyrka)
| Composant | Rôle | Invocation |
|---|---|---|
| Rapatriement de frames Figma (REST) | Télécharge les frames Figma marquées prêtes en PNG via l'API REST, avec un manifeste JSON. Pont entre Figma et l'agent sans passer par le mode développeur MCP. | CLI / skill /figma |
| Capture de frames Figma (navigateur) | Fallback navigateur lorsque l'API REST Figma est indisponible : ouvre le fichier en vue seule via un navigateur sans interface graphique, capture chaque frame en PNG et produit un manifeste au même format que le composant REST. Chaque entrée du manifeste porte deux champs de provenance supplémentaires (source_capture et render_width) qui évitent toute confusion entre captures et exports REST lors de la validation de qualité. |
CLI node <module-capture-figma> --url <lien-figma> / skill /figma |
Connecteurs Analytics
| Composant | Rôle | Invocation |
|---|---|---|
| Connecteur GA4 (lecture) | Accès souverain en lecture seule à l'API de données Google Analytics 4, réutilisant les identifiants Search Console. | CLI / bibliothèque |
| Façade d'intégration de maquette | Applique un plan JSON structuré à une variante de page d'accueil en brouillon dans la base de données de préprod d'un tenant. N'interprète jamais la maquette elle-même. | CLI / skill /integration-maquette |
Catégorisation et taxonomie
| Composant | Rôle | Invocation |
|---|---|---|
| Catégoriseur produit automatique | Dérive le type du produit et le range dans son rayon/étagère plutôt que de suivre le chemin fournisseur erroné. | CLI |
| Worker SEO en masse | Dépile la file de traitement SEO tenant par tenant et lance le moteur d'optimisation. C'est le « bouton magique » du back-office. | Planifié toutes les 5 minutes |
| Moteur SEO produit (grind) | Génère méta-données, H1 et slug différenciés pour les fiches produit, avec enrichissement du cache d'attributs. Ne marque plus une fiche comme « optimisée » si rien n'a été écrit. | CLI |
| Templater SEO produit déterministe | Fonctions pures sans dépendance base de données ni modèle de langage, importées par le moteur SEO. Gère la troncature propre des titres (sans mot de liaison orphelin), la clause catégorie conditionnelle et les introductions de caractéristiques par langue. | Bibliothèque |
| Validateurs produit allégés | Miroir simplifié des validateurs lourds du moteur de publication, pour les traitements produit légers. | Bibliothèque |
| Suivi de position SEO | Enregistre la position moyenne mensuelle par mot-clé depuis Search Console et alimente le tableau de bord de suivi. | Planifié le 2 de chaque mois |
| Synchronisation du statut SEO manuel | Remonte le statut SEO posé manuellement côté tenant vers le référentiel central. L'écriture se fait par lots, avec une seule instance active à la fois. | Planifié toutes les 15 minutes |
| Réconciliateur de taxonomie fournisseur | Détecte et corrige les doublons, nœuds redondants et profondeurs excessives dans l'arbre de catégories. | CLI (remédiation manuelle) |
| Sentinelle de taxonomie | Fait respecter les contraintes de l'arbre : profondeur bornée et zéro nœud parasite. Fonctionne en vérification planifiée et comme garde avant déploiement. | Planifié quotidien / hook pre-deploy |
| Fusion de catégories | Fusionne une catégorie source dans une catégorie cible : reparentage des enfants, déplacement des produits, désactivation de la source, reconstruction complète de l'arbre imbriqué. | CLI |
| Hiérarchisation des URLs catégorie | Transforme les liens internes de slugs plats en chemins imbriqués reconstruits depuis l'arbre de catégories, avec redirections 301 systématiques. | CLI / skill /hierarchie-categories |
| Compléteur de mégamenu | S'assure qu'un rayon avec produits a une entrée racine dans le mégamenu, et qu'une sous-catégorie avec produits a une entrée sous son rayon. Rafraîchit les liens périmés après optimisation de slug. | CLI |
| Optimiseur de slugs de catégories | Raccourcit les URLs en retirant les tokens déjà présents chez un ancêtre et les mots de liaison, avec redirections 301 et alertes en cas de dérive. | Planifié quotidien / CLI / skill /slug-optimizer |
Optimisation de contenu produit et de slugs
| Composant | Rôle | Invocation |
|---|---|---|
| Optimiseur de slugs produit | Différencie les slugs produit partagés par plusieurs fiches en enrichissant le nom et l'identifiant d'URL avec dimensions et poids. Idempotent, sans création de redirections (le routeur par identifiant suffit). | Skill /product-slug-optimizer / CLI |
| Rafraîchisseur de cibles de redirections | Identifie les redirections 301 dont la cible a vieilli et produit un fichier SQL de reciblage. N'écrit jamais directement en base. | CLI |
| Correcteur de slash final dans les redirections | Aligne les cibles des redirections catégorie sur la forme canonique déclarée par le site (lue via la balise link rel=canonical). |
CLI |
| Garde des URLs à trafic | Rejette quatre états problématiques sur les URLs portant le trafic d'une bascule : URL morte, chaîne de redirections trop longue, atterrissage non désiré sur la page d'accueil (soft-404), dérive. Les redirections calculées ne sont écrites nulle part ; seul ce rejeu les protège. | CLI |
Carte statique et vidéo
| Composant | Rôle | Invocation |
|---|---|---|
| Générateur de carte statique | Transforme des points géographiques en image WebP, sur fond de tuiles OpenStreetMap avec attribution incrustée. Projection et cadrage en fonctions pures. | CLI / skill /page-iso-figma |
| Encodeur de boucle vidéo hero | Convertit une source vidéo en boucle légère pour fond de hero (WebM + MP4 sans piste son, image d'attente). Le fichier source est fourni par le propriétaire des images ; aucun téléchargement automatique. | CLI (sous-commandes) |
Lecteur du blog interne et audit SEO mensuel
| Composant | Rôle | Invocation |
|---|---|---|
| Lecteur de pages du blog interne | Lecture seule des articles publiés du blog interne de la plateforme, par pages depuis un curseur, dans un budget de caractères. Existe parce que ces articles sont stockés dans une base accessible uniquement depuis la machine hôte ; le conteneur applicatif passe par le daemon hôte pour y accéder. | python3 -m <module-lecteur-blog> (daemon hôte) |
| Planificateur d'audits SEO mensuels | Le premier de chaque mois, ouvre une tâche d'audit SEO pour chaque tenant actif. Le planificateur ne fait qu'ouvrir le travail (une tâche backlog par tenant et par mois, idempotente) ; l'audit lui-même est conduit en session avec un modèle de langage. | Planifié mensuel / CLI |
Sous-famille — Mesh des sites : pôles SEO, Performance et Sécurité
Chaque site de la flotte est noté sur trois pôles (/100) dans le tableau de bord, chacun lié à un objectif cible (/10). Tout est mesuré sans modèle de langage, ce qui autorise l'exécution planifiée. La preuve d'un objectif et la note du pôle partagent une seule source de vérité.
| Composant | Rôle | Invocation |
|---|---|---|
| Sonde quotidienne performance/sécurité | Mesure le TTFB (médiane de 3 requêtes), la redirection HTTP→HTTPS, les en-têtes de sécurité (HSTS, CSP, protection contre le clickjacking, typage de contenu, politique de référent, permissions), les chemins sensibles exposés (détectés au contenu, pas au seul code HTTP 200), la divulgation de version serveur, et l'état des jails de protection contre les attaques par force brute. | Planifié quotidien |
| Instantané PageSpeed | Pour chaque site enrôlé : mesure en mobile de la page d'accueil et des pages les plus cliquées via Search Console sur 28 jours, via l'API PageSpeed Insights (données terrain et laboratoire séparées). | Planifié quotidien |
| Créateur d'objectifs de pôle | Crée les objectifs de pôle manquants (un par site × pôle). Un pôle ayant déjà eu un objectif, même annulé, ne renaît pas automatiquement. | Planifié quotidien |
| Preuve d'objectif de pôle | Lit la note du pôle depuis l'API du tableau de bord et rend un contrat de preuve : l'objectif est atteint si la note est supérieure ou égale à la cible et si le pôle est mesuré sur au moins la moitié de son barème. | CLI (--site, --pole, --json) |
| Mesureur d'objectif à la demande | Joue la commande de preuve d'un objectif et enregistre le résultat. N'écrit jamais dans la table principale des objectifs (dont les champs appartiennent au tick planifié). | CLI / tableau de bord |
| Audit de site à la demande | Exécute les mesures des trois pôles, fige les notes et génère des PDF d'audit (un par pôle et un document complet). Un audit bloqué depuis plus de 45 minutes est déclaré mort. | Planifié à la minute (drain) / CLI |
| Générateur PDF d'audit de site | Produit la photo figée d'un audit sous forme de document : trois pôles notés avec leurs couches et objectifs, sur la charte du rapport SEO mensuel. Chaque chiffre porte sa source et sa date. | Bibliothèque |
| Garde des URLs à trafic hérité | Vérifie les URLs qui portent le trafic d'une migration, en rejoant un fichier de référence. Refuse quatre états : URL morte, chaîne de redirections, soft-404 vers la page d'accueil, dérive de destination. | CLI |
Sous-famille — Google Search Console (GSC)
Architecture en deux couches : les modules JavaScript tournent dans le conteneur d'exécution applicatif (accès à l'API GSC, identifiants déchiffrés depuis l'environnement). Les orchestrateurs Python invoquent ces modules et effectuent les écritures en base. Les identifiants déchiffrés restent en mémoire vive — jamais en sortie standard, journaux ou base de données.
| Composant | Rôle | Invocation |
|---|---|---|
| Sonde GSC réutilisable | Retourne le trafic organique d'une propriété sur deux fenêtres de 28 jours. Aucun secret en sortie. | Bibliothèque (dans le conteneur applicatif) |
| Listeur de propriétés GSC | Liste les propriétés Search Console visibles par le compte de service. | Bibliothèque (dans le conteneur applicatif) |
| Import GSC dimensionnel | Récupère les données Search Console selon les dimensions date/requête/page et les écrit en base via upsert idempotent. Gère le backfill par tranches, le rattrapage des jours vides, les propriétés de domaine, et la boucle sur toute la flotte. La clé de déchiffrement est sélectionnée automatiquement parmi les candidates en testant laquelle ouvre réellement le blob chiffré. Les identifiants passent par l'environnement du sous-processus, jamais par les arguments de la ligne de commande. | CLI |
| Popularité produit depuis GSC | Recopie la demande Google d'un site vers sa base locale : calcule un score par produit (clics × 10 + impressions) depuis les données Search Console, et l'écrit dans la table de popularité du tenant pour alimenter la vitrine « meilleures ventes ». | Planifié quotidien |
| Soumission de sitemaps à GSC | Soumet un sitemap à Google Search Console via l'API et retourne un verdict JSON. | Bibliothèque (dans le conteneur applicatif) |
| Sonde GSC mensuelle | Agrège les données mois par mois pour le suivi de positionnement. Supporte les dimensions requête, page, pays et appareil. Un mois plafonné par la limite de lignes de l'API est signalé comme non comparable. | Bibliothèque (dans le conteneur applicatif) |
| Tendance GSC mensuelle | Diagnostic SEO : trafic agrégé par mois sur 16 mois (sans anonymisation des requêtes) et série journalière brute. Utilisé pour dater les bascules de taux de clic. | Bibliothèque / CLI (dans le conteneur applicatif) |
| Vigie couverture GSC | Suit le volume du rapport de couverture d'indexation et alerte sur la variation (pas sur le niveau absolu). | Planifié hebdomadaire |
| Réparateur d'URL orphelines | Pose des redirections 301 pour les URLs orphelines (404 ou renvoyant vers une 404), après vérification HTTP 200 de la cible. N'accepte jamais la page d'accueil ou une chaîne de redirections comme cible. | Skill /seo-orphelines / CLI |
| Sonde de propriété GSC | Énumère les propriétés Search Console ouvertes pour un domaine donné, plutôt que de deviner leur forme. Sort en erreur si le domaine n'est pas trouvé. | Skill /gsc-raccorder / CLI / bibliothèque |
| Rejeu d'inspection d'URL | Inspecte par lots une liste d'URLs via l'API d'inspection de Google, en lecture seule. Quota de 2 000 par jour et par propriété. Les URLs déjà inspectées sans erreur ne sont pas rejouées ; un code 429 arrête le traitement jusqu'au lendemain. Classe les écarts par cause (noindex, non indexée, canonique ailleurs). | CLI |
| Vérificateur de propriété GSC | Vérifie une propriété Search Console au nom du compte de service lorsqu'elle n'apparaît pas dans la liste. Délègue à un module JavaScript dans le conteneur applicatif. Pour une propriété de domaine, génère un jeton DNS. | CLI / skill /gsc-raccorder |
| Listeur de sitemaps GSC | Liste les sitemaps soumis à Search Console pour une propriété donnée. Lecture seule. | Skill /audit-forum-seo (dans le conteneur applicatif) |
| Interface Search Console (lecture navigateur) | Accès en lecture aux rapports de l'interface Search Console via une session navigateur automatisée, pour les données non exposées par l'API (rapport de couverture notamment). | CLI / bibliothèque |
| Structuration par la demande | Décide la profondeur optimale d'un arbre de catégories en se basant sur la demande mesurée : demande propre d'un nœud (requêtes portant son libellé et aucun libellé de ses enfants). Lecture seule. | CLI / skill /structuration / bibliothèque |
Traductions i18n (blog et contenu)
| Composant | Rôle | Invocation |
|---|---|---|
| Traduction des libellés d'interface | Traduit les libellés du hub du français vers l'anglais. | CLI |
| Complétion des contenus DB-first en anglais | Complète les champs de contenu en base qui n'existent qu'en français. | CLI |
| Traduction des produits en anglais | Traduit les fiches produit du français vers l'anglais. | CLI |
| Traduction des champs de payload JSON | Traduit les champs embarqués dans les blobs JSON des contenus. | CLI |
| Seed de traductions YAML vers la base | Initialise les traductions depuis des fichiers YAML vers la base de données. Assemble la commande distante de façon sécurisée (les secrets sont masqués dans les journaux). Distingue une langue absente d'une panne de connexion, et retourne une erreur si au moins un fichier a subi une panne. | CLI |
| Générateur de routes i18n | Génère par code les segments de route i18n depuis la base de données (catégories de niveau 2 et méta-langues du tenant) vers un fichier JSON consommé au build. Non bloquant en cas d'indisponibilité de la base. | Bibliothèque / CLI (build) |
| Régénérateur de slugs anglais | Régénère les identifiants d'URL anglais corrompus depuis le nom produit anglais. Déterministe, sans modèle de langage. | CLI |
| Re-traduction des noms produit anglais | Re-traduit via un modèle de langage les noms produit anglais restés en français (détection par analyse de caractères accentués). | CLI |
| Traduction des FAQ alimentation | Traduit du français vers l'anglais les FAQ produit et les fiches alimentation, via un modèle souverain. Lecture robuste par agrégation JSON, écriture par suppression et réinsertion dans une transaction. | CLI |
| Sweep qualité des descriptions produit anglaises | Re-traduit les descriptions courtes et longues HTML depuis la version française canonique. Garde-fous : rejet si une quantité présente en français disparaît ou si la structure HTML change. | CLI |
| Re-traduction du contenu builder | Repère les lignes en anglais valant encore le français ou vides, et les re-traduit par lot JSON. | CLI |
| Parité des packs de langue du cœur | Vérifie que toute clé de traduction présente dans le code existe dans chaque fichier de locale. Peut compléter les locales manquantes à la demande via un modèle de langage, en conservant les variables de pluriel. | Hook pre-commit / test automatisé / CLI |
| Audit de couverture blog i18n | Compte les articles creux par langue : corps manquant, FAQ absente, articles sans FAQ source. Présence uniquement, pas qualité. Surveille le relais nocturne (la publication n'écrit que la langue source). | CLI |
| Audit i18n en base (multi-tenant) | Audite l'état des traductions en base pour un tenant : langues actives, équilibre de volume par langue, taux de traduction réelle (textes identiques à la langue source). Lecture seule. | Skill /audit-i18n-db / CLI |
| Auditeur de réalité locale | Mesure, par table et colonne, le taux d'égalité à la langue source pour détecter les locales qui ne sont que des copies. La garde locale lit les termes attestés du glossaire en base, détecte les résidus de la langue source à l'intérieur des traductions, et ignore les cellules source vides. | Skills /seo-audit, /seo-enhance, /seo-meta, /traduire-catalogue / CLI |
| Registre des égalités FR→locale | Inventaire exhaustif des valeurs identiques à la langue source pour un catalogue actif. Décompose chaque égalité en catégories : vide, invariant attesté (marque, référence, catégorie profonde), cognat, localisable. Calcule trois taux (brut, hors invariants, hors invariants et cognats) et produit un fichier CSV du reliquat localisable. | CLI |
| Module d'invariants i18n | Module pur de la règle R : réduit une valeur éditoriale égale à la langue pivot à ses invariants token par token (marque, référence, et termes attestés dans le glossaire du tenant). Ne connaît aucun terme a priori — ils sont injectés depuis la base. | Bibliothèque |
| Audit d'intégrité des fiches produit par langue | Vérifie la cohérence des fiches produit par langue face à la langue de référence (nom, slug, métas, redirections actives). | CLI |
| Preuve SEO i18n page par page | Lit le HTML servi d'un échantillon de pages et vérifie dix critères techniques (statut HTTP, attribut de langue, canonical, hreflang, titre, description, H1, données structurées JSON-LD, fil d'Ariane, indexabilité). Lecture seule, sortie erreur au premier échec. | CLI |
| Moteur de traduction des corps CMS | Traduit les corps d'articles de blog vers toutes les langues servies par le tenant. Utilise le glossaire, le profil de marché et le routage IA configuré. Note : depuis une décision éditoriale récente, le blog n'est plus traduit — il est rédigé nativement pour chaque marché cible. | CLI / bibliothèque |
| Traducteur de FAQ d'articles | Traduit les questions et réponses des FAQ d'articles blog vers toutes les langues du tenant. Réutilise le prompt, le glossaire et les gardes du moteur de traduction CMS. L'écriture ajoute une ligne sans jamais remplacer l'existant. | CLI / bibliothèque |
| Pilote de mise en marché d'une locale | Gère l'état de mise en marché d'une locale d'un tenant en préprod : brouillon (invisible des moteurs) ou ouvert (verdict GO + décision validée). L'état est stocké dans la base du tenant. |
CLI |
| Réécriture contrôlée des liens CMS traduits | Réécrit les liens internes d'un corps CMS traduit vers des routes attestées, sans connaissance du tenant embarquée. Refuse tout lien sans destination vérifiée. Sauvegarde ciblée avant toute écriture en production. | CLI |
| Migration de slugs CMS avec redirections | Bascule les slugs CMS localisés avec leurs redirections 301 exactes, depuis une carte fournie au lancement. Vérification de l'état exact avant opération, mise à jour dans une seule transaction. | CLI |
Sous-famille — Autoblog (rédaction, relais, semis et réassort)
Chaîne quotidienne : semis → rédaction (06 h 30) → scènes (06 h 45) → parution par le worker du tenant → relais avec couverture (09 h xx) → vigie de file. Les tâches impliquant un modèle de langage portent une autorisation explicite dans la liste de contrôle des crons LLM.
| Composant | Rôle | Invocation |
|---|---|---|
| Rédacteur d'articles (mothership) | Rédige les articles d'un tenant depuis le vaisseau-mère et les dépose dans la file de publication en statut provided. Le fournisseur de modèle est contraint à la liste autorisée ; un fournisseur non admis est refusé par exception. Décrit également pour chaque article un brief visuel (1 infographie + 2 photos). |
Planifié quotidien (rédaction 06 h 30, scènes 06 h 45) |
| Relais de publication | Après la fenêtre de parution, déclenche la génération de couverture et la complétion de FAQ pour chaque article fraîchement publié. Le blog n'est plus traduit : il est rédigé nativement pour chaque marché. | Planifié quotidien (09 h 15 à 09 h 55 selon tenant) |
| Semis automatique de sujets | Ressème la file de rédaction lorsqu'elle passe sous 5 articles : lit le stock, rafraîchit la demande si nécessaire, propose un lot de sujets, le fait passer une assurance qualité (brief de marque, gabarit de titre, similarité) puis sème. | Planifié quotidien (06 h 05) |
| Vigie de file de rédaction | Refuse le silence de la file : mesure l'autonomie (jours de sujets restants), détecte une file pleine sans parution, les post échus non partis et les échecs en attente. Calcule l'autonomie en jours calendaires en tenant compte des jours de parution configurés. Alerte séparément en cas de cadence excessive (plus de 3 articles par semaine). | Planifié quotidien (07 h 20 et 09 h 15) / skill /diffusion |
| Semoir de sujets | Pour chaque sujet d'un fichier validé, résout ou crée la coquille CMS et enfile un job dans la file de publication. Ajoute automatiquement une consigne de couverture (marqueur, questions réelles à couvrir, plancher de 1 500 mots). Gère l'association à des avatars de persona. | CLI / skill /maillage-interne |
| Réassort perpétuel de la flotte | Orchestre le réassort des files autoblog de toute la flotte : découvre les tenants, régénère le stock minimal depuis la demande mesurée, avec un plafond de dépense DataForSEO. Une politique tenant inactive est réellement écartée du réassort. | CLI |
| Relecture hebdomadaire des articles produit | Relecture des articles décrivant la plateforme, confrontée au code réel (le juge de rédaction note la forme, pas l'exactitude). La rédaction dépose en review ; une session relit avant validation. Gestes : poser (cron lundi sans LLM), exporter, retenir, appliquer des corrections ciblées. |
Planifié lundi / CLI / skill |
| Règles d'admissibilité éditoriale | Fonctions pures sans effet de bord : rejette les intentions non informationnelles, les véhicules nommés, les proximités locales, les raisons sociales, les termes interdits du brief de marque, la demande périmée, les langues inactives. Dédoublonne par slug et similarité de titre. | Bibliothèque |
| Chercheur de sources d'autorité | Recherche pour chaque article en attente des sources d'autorité via un agent web. Valide mécaniquement que l'extrait cité figure mot pour mot dans le texte source, que la page traite bien du sujet, et que la source n'est pas déjà utilisée. Un octet nul dans le texte lu est écarté sans faire tomber le lot ; les incidents sont comptés et le processus sort en code 2 si au moins un job a échoué. | Planifié quotidien (06 h 10) |
| Contrat des visuels d'article | Module pur définissant les règles des visuels du corps d'article : 1 infographie + 2 photos, l'infographie ne montrant que des chiffres présents dans le texte. Le juge vision identifie les lignes de texte tronquées par le cadre ou une bande vide. | Bibliothèque |
| Générateur nocturne de visuels | Génère les visuels du corps d'article via un modèle de génération d'images, contrôlés par un juge vision distinct du fabricant. L'infographie est transcrite puis comparée au texte attendu. Au troisième refus, le visuel est abandonné et l'article paraît sans lui, avec une alerte. | Planifié quotidien (23 h 10 à 01 h 40 selon tenant) |
Sous-famille — FAQ des articles blog
| Composant | Rôle | Invocation |
|---|---|---|
| Rattrapage de FAQ française | Complète jusqu'à 15 Q/R les articles publiés sans FAQ, sans écraser l'existant. Lancé en sous-processus par le relais de publication. | CLI / worker (cron indirect) |
| Régénérateur de FAQ | Régénère la FAQ française des articles déjà servis sur un grounding catalogue renouvelé. Ne remplace l'ancienne que si la nouvelle atteint le seuil de qualité. | CLI |
| Purge des FAQ inline en doublon | Retire du corps d'un article le bloc FAQ inline lorsque la base porte déjà la FAQ de cette langue, pour éviter l'affichage en double. | CLI |
Sous-famille — Couvertures de catégorie
La cible de dépôt est lue dans la configuration du VPS client, jamais codée en dur.
| Composant | Rôle | Invocation |
|---|---|---|
| Résolveur de cible de couverture | Résout l'emplacement de dépôt de la couverture d'un tenant depuis sa configuration. Importé par tous les composants qui génèrent ou publient des couvertures. | Bibliothèque / CLI / skill /covers-categorie |
| Préparateur de dossier de couverture (lecture seule) | Pour chaque catégorie visée, rassemble la matière nécessaire à la génération de l'image (textes, produits du sous-arbre, fabricants, état de couverture actuel) et les textes alternatifs par langue. | Skill /covers-categorie |
| Publieur de couverture de catégorie | Dépose l'image d'une catégorie et son texte alternatif par langue en base. Validation du lot complet, dépôt des fichiers, écriture sécurisée, relecture. Sans l'option d'application, la transaction est annulée. | Skill /covers-categorie |
Sous-famille — Couvertures blog (photo réaliste)
| Composant | Rôle | Invocation |
|---|---|---|
| Chaînon nocturne de couvertures | Génère et publie les couvertures des articles ayant une scène mais pas encore d'image. Traite les articles publiés en priorité, puis le stock en attente de parution. Maximum 5 couvertures par nuit, abandon après 3 échecs consécutifs. | Planifié (21 h 40 à 07 h 50 selon tenant) |
| Générateur de couverture photo réaliste | Génère une couverture en photo réaliste via un modèle de génération d'images. Recadrage 1200×630 pixels, format WebP. Peut fonctionner sans navigateur via l'agent de génération (pris d'office lorsque le navigateur automatisé est indisponible). Vérifie l'autorisation de dépense payante avant tout appel. | CLI / skills /covers-categorie, /seo-enhance |
| Publieur de couverture blog | Dépose le fichier sur le VPS du tenant et écrit l'URL de couverture en base. Purge le cache SSR après écriture pour que la nouvelle image soit immédiatement servie. | CLI / skill /covers-categorie |
Sous-famille — Forum de dialogues d'agents
Chaîne « un fil ne part pas sans son texte » : le composant de demande remplit la file sans LLM, la résolution de source propose une URL d'autorité, le cadrage valide sous gate, le dialogue joue et publie, le scanner filtre les fuites. Aucun cron : le tirage reste un geste à la demande.
| Composant | Rôle | Invocation |
|---|---|---|
| Moteur de dialogue de forum | Joue un fil pédagogique avec des agents (question naïve, explication, challenges socratiques, arbitrage, récapitulatif). Passe un gate éditorial et un scan de fuite à chaque tour. Publie sur le site public après validation. | Skills /meta-forum-source, /forum-lecon, /sources-ouvrage, /wukong-post / CLI |
| Cadreur de fil de forum | Valide un fil dérivé d'une URL : garde mécanique (question naïve, angle nu, attribution de source, langue) puis jury LLM adverse avec une seule reprise ciblée. Remplace le dernier point d'arrêt humain avant la rédaction. | Skill /meta-forum-source / CLI |
| Gestionnaire de file de forum | Administre la file de l'autoforum : liste, ajoute, associe une source, dédoublonne, refuse, consulte le prochain sujet. Le passage en statut prêt exige une URL source. Volontairement sans cron ni daemon. | CLI / bibliothèque |
| Résolveur de source de forum | Cherche le texte qu'un fil débattra pour les sujets en attente de source, via un agent web sous sept gardes mécaniques (URL qui répond, domaine à auteur, attribution, thèse verbatim, source inédite). Propose ; n'écrit qu'avec l'option d'application. | CLI |
| Producteur de sujets de forum depuis la demande | Remplit la file du forum depuis la demande mesurée, sans LLM ni dépense. Les sujets naissent en statut « besoin de source », jamais avec une source inventée. | CLI |
| Scanner de fuites | Analyse mécanique par expressions régulières qui refuse qu'un contenu interne parte en publication : adresses réseau, noms de clients, chemins serveur, valeurs de secrets. Les noms de variables sont tolérés. | Bibliothèque |
| Lanceur autonome de forum | Commande unique « une URL → un fil publié, sans humain dans la boucle » : verrouille l'exécution (un seul run à la fois), matérialise le contexte de session, spawne une session d'agent, arbitre le résultat, alerte en cascade si la session meurt sans rapport. Ne publie jamais directement, ne relance jamais en boucle, ne débloque jamais un gate. | CLI |
Sous-famille — Indexation par vagues
Un domaine neuf n'est pas indexé d'un coup : un mécanisme de paliers ferme les pages minces en noindex jusqu'à leur vague. Un seul composant écrit cette table ; un autre mesure le taux d'indexation via l'inspection d'URL ; la commande d'ouverture de vague ne passe que si la vague précédente atteint le seuil.
| Composant | Rôle | Invocation |
|---|---|---|
| Gestionnaire de paliers d'indexation (catalogue profond) | Calcule les paliers par rôle (profondeur dans l'arbre, demande propre et héritée, produits par référence) et ouvre les vagues. Refuse d'écrire sur un précalcul d'agrégats périmé. Déterministe, zéro LLM. Kill-switch disponible. | Planifié quotidien / CLI / bibliothèque |
| Gestionnaire de paliers d'indexation (catalogue plat) | Variante pour les catalogues à faible profondeur d'arbre mais grand nombre de fiches fournisseur. Ouvre les catégories selon la demande (volumes + impressions GSC) et le stock, et les fiches selon leur état d'optimisation. Ne ferme jamais une page déjà ouverte. La demande est mesurée sur la requête réelle, avec possibilité de remplacer les requêtes calculées par des requêtes validées manuellement. | CLI / bibliothèque |
| Mesureur du taux d'indexation | Mesure la part d'URLs de la dernière vague indexées par Google (échantillon stratifié rôle × langue depuis le sitemap vivant). Ne compte que les catégories actives. Une page absente du sitemap qui se déclare elle-même noindex n'est pas comptée comme manquante. L'inspection se fait par lots de 25 URLs avec reprise automatique en cas d'interruption. |
Planifié hebdomadaire / CLI / bibliothèque |
| Module d'inspection d'URL (GSC) | Inspecte une liste d'URLs via l'API d'inspection de Google. Quota de 2 000 par jour et par propriété ; les URLs restantes sortent en erreur au premier dépassement. | Bibliothèque (dans le conteneur applicatif) |
Sous-famille — Maillage interne
Le maillage se mesure sur la Search Console au lieu de s'estimer. Les cibles sont lues depuis le sitemap et les données de trafic ; un candidat ambigu est abandonné ; chaque cible est vérifiée en HTTP avant usage.
| Composant | Rôle | Invocation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Détecteur d'occasions de liens internes | Famille des agents navigateur
Doctrine de protection IP : la réputation de l'adresse IP est gérée par un proxy SOCKS résidentiel, et non par les protections anti-bot de type Turnstile. Le navigateur tourne donc en mode graphique (headful) sur une machine à connexion résidentielle. Composants principaux
Sous-famille : provisioning, jukebox, cinémathèque et montages de la box de navigationScripts d'exploitation de la box de navigation (accès Tailscale). Les scripts de provisioning sont idempotents et sans élévation de privilèges (unités
Sous-famille : contrôle d'intégration de maquettes FigmaCorpus de maquettes par client (manifeste JSON, inventaire TSV des frames) ; source déclarée dans le registre de sources Figma. L'API REST payante de Figma est soumise à des limitations strictes (429), donc la capture passe par le navigateur de la box.
Famille comptabilité — banque, facturation et financesCette famille regroupe les automates et outils CLI qui couvrent l'ensemble du cycle financier : synchronisation des mouvements bancaires, catégorisation, rapprochement, émission de factures et devis, relances d'impayés, suivi fiscal de l'auto-entrepreneur et gestion des dépenses fournisseurs. Vue d'ensemble des composants
Import des relevés N26Le module d'import analyse un dump de relevé bancaire N26 et applique plusieurs niveaux de filtrage avant toute écriture :
Usage en ligne de commande :
La variable d'environnement Catégorisation automatique des transactionsLe moteur de catégorisation parcourt les transactions sans catégorie et leur affecte un libellé canonique à partir d'un référentiel de règles tiers → catégorie :
Rapprochement bancaire ↔ facturesLe moteur de rapprochement relie les transactions de revenu non rapprochées aux factures ouvertes (statut « envoyée » ou « en retard ») par montant exact et client :
CLI factures et devisL'interface en ligne de commande permet de créer, lister, accepter et archiver factures et devis ponctuels. Le rendu PDF est produit par un composant interne chartée (Playwright) :
Relances d'impayés avec challenge-codeLe module de relances multi-clients détecte les clients ayant au moins deux factures échues depuis plus de 30 jours, puis prépare une relance groupée :
FinOps auto-entrepreneur — moteur de calcul et automateLe moteur FinOps calcule en lecture seule les indicateurs fiscaux de l'auto-entrepreneur (CA encaissé, cotisations URSSAF dues, provisions, transferts personnels, seuils légaux, statut franchise de TVA). Il ne prend aucune décision fiscale et n'écrit rien en base ; les chiffres sont des drafts indicatifs à valider avec un comptable. L'automate associé envoie chaque lundi matin un récapitulatif hebdomadaire, et des alertes ponctuelles lorsqu'un seuil critique approche (J-3 avant une échéance URSSAF, franchise TVA ou versement libératoire dépassés à 90 %, délai de versement libératoire). Un mécanisme de sentinelles par fichier temporaire garantit qu'une alerte donnée n'est émise qu'une seule fois. Calcul du solde transférableCet outil calcule le montant transférable du compte professionnel vers le compte personnel après déduction des provisions obligatoires :
L'outil affiche le montant disponible et le détail des provisions. Il ne déclenche aucun virement. Générateur de propositions commercialesCe composant produit des propositions commerciales au format PDF en appliquant la charte graphique Synedre (palette, typographie, logo bicolore, blocs constat / décision / attention, cartouche « Bon pour accord »). Il lit la base de données marque, rend un HTML intermédiaire puis le convertit en PDF via Chromium. Une option
Veille des seuils fiscauxCe composant surveille les trois seuils fiscaux de l'auto-entrepreneur : franchise de TVA, éligibilité au versement libératoire et plafond du régime micro. Il consulte la table des déclarations URSSAF et émet un email unique par combinaison (année, seuil, palier). L'état des alertes déjà émises est persisté dans un fichier d'état local, créé à la première écriture.
Sous-famille — dépenses fournisseursCes quatre outils couvrent le cycle des factures reçues (achats fournisseurs), en miroir du cycle des factures émises. Aucun n'est planifié par cron à ce jour.
Sous-famille — comptabilité du foyer (périmètre personnel)Le périmètre personnel est strictement séparé du périmètre professionnel : les finances professionnelles vivent dans Synedre, les finances du foyer vivent dans un environnement dédié distinct.
Sous-famille — budget et débit GLM (quota Z.ai)Ces trois composants gèrent le quota hebdomadaire du fournisseur IA Z.ai (cycle remis à zéro chaque jeudi à 08 h 08, heure de Paris). La consommation est toujours mesurée sur la table de coût des runs — jamais estimée.
Sous-famille — jauge Anthropic et plafond quotidien API
Composants supprimésPlusieurs composants de cette famille ont été archivés lors d'une opération de nettoyage des scripts inactifs (aucun run détecté sur 30 jours, aucune référence active dans la configuration) :
Famille surveillance de marque et veilleCette famille regroupe les automates et outils dédiés à la veille compétitive, à la surveillance de marque, à la conformité de charte graphique et à la gestion des opportunités commerciales entrantes. Certains scripts sont actifs en tâche planifiée ; d'autres ne s'utilisent qu'en ligne de commande à la demande. Vue d'ensemble des composants
Sous-famille — Recherche de marque et génération de logo
Sous-famille — Vectorisation de logo
Le composant de vectorisation opère une chaîne complète en une seule façade (doctrine : un seul script par périmètre) :
Score calculé, jamais demandé au modèle de langage. Le sous-agent critique classe six axes de défaut (angularity, oversmoothing, noise, lost_detail, stroke_too_thin, stroke_too_thick) sur une échelle fermée Détection de polarité. Un échantillonnage des quatre bords de l'image détermine si le logo est en teinte claire sur fond sombre, auquel cas le masque est inversé — sans cette logique, un tel logo produisait un SVG blanc sur blanc vide. Ajustement de graisse de trait. Une étape de dilatation / érosion binaire (distincte du nettoyage anti-bruit) répond aux actions
Famille deploy / ship / infrastructure / sauvegardesRègle de gouvernance des livraisonsLa politique de déploiement repose sur une asymétrie explicite entre deux commandes publiques :
Bibliothèque centrale de déploiementUne bibliothèque partagée regroupe toutes les phases d'un déploiement : chronométrage, audit des agents en arrière-plan, poussée git, vérification et application des migrations de schéma, génération des routes i18n, build de l'application, empaquetage, envoi sur le serveur, redémarrage du conteneur et contrôle de santé. Fonctions notables :
Garde du troncUn garde sourcé par
Scanner de secrets dans le buildUn outil dédié analyse les fichiers de sortie d'un build et vérifie qu'aucune valeur secrète ne s'y trouve figée. Il croise les sources de secrets configurées et l'environnement du processus, filtre sur la forme du nom de variable et la longueur de la valeur, et parcourt les fichiers texte jusqu'à 32 Mo (les variantes compressées sont ignorées quand l'original est présent). La sortie indique le nom de la variable et le fichier concerné — jamais la valeur elle-même. Les variables à préfixe public ( Journal des livraisonsChaque déploiement ou ship réussi laisse une trace persistante : horodatage, cible, nature de l'opération (deploy ou ship). Ce journal permet de répondre à la question « depuis quand ce commit est-il en ligne ? » et alimente les règles de datation de mise en ligne dans les automates de traitement. Four — machine de build déportéeLe « four » désigne une machine Apple Silicon dédiée aux builds de l'application. Le vaisseau-mère lui envoie les sources via une connexion SSH restreinte à un unique wrapper de commandes. Ce wrapper n'accepte que trois verbes :
La machine de build n'a jamais accès aux secrets d'exécution, ne peut pas contacter le vaisseau-mère de sa propre initiative, et ne dispose d'aucun privilège système élevé. Un script d'installation idempotent configure cet environnement depuis le vaisseau-mère.
Scripts de déploiement et d'infrastructure
Façade DNS et API OVHUn client OVH partagé gère toutes les interactions avec l'API OVH : création et mise à jour idempotentes d'enregistrements DNS (PUT si existant, POST sinon), rafraîchissement de zone, et reprise automatique sur défaillance passagère. Les codes transitoires reconnus sont 429, 500, 502, 503, 504, et les erreurs 400 portant la marque d'un hoquet de transport. Deux reprises sont tentées (délais de 1 s puis 3 s), avec re-signature à chaque tentative. Les reprises ne s'appliquent qu'aux méthodes idempotentes (GET, HEAD, PUT, DELETE) — jamais à un POST, pour éviter tout doublon d'enregistrement. Pré-chauffe du cache SSRAprès un déploiement, un processus détaché crawle doucement les URL blog et catégories issues du sitemap. L'objectif est d'éviter que le premier visiteur réel supporte le coût d'un rendu lourd (un article de blog peut nécessiter une dizaine de requêtes base de données, parfois source d'erreurs 503). La pré-chauffe est lancée en arrière-plan, sans bloquer le déploiement, et peut être désactivée par variable d'environnement. Gestion du design system et de la charte graphique
Contrôles de santé et gardes de déploiementPlusieurs gardes s'intercalent dans la chaîne de déploiement :
Sonde de poids JavaScript initialUn outil en lecture seule analyse le HTML SSR d'une URL et compte les modules préchargés et scripts de module, en mesurant leur taille brute et compressée. Résultat : nombre exact de ressources et poids total en Ko.
Détection de dérive nginxUn outil confronte les configurations nginx versionnées dans le dépôt à celles effectivement chargées sur le VPS web. Il peut afficher l'écart ligne à ligne ou rapatrier la configuration active vers le dépôt. La direction inverse (pousser depuis le dépôt) n'est pas supportée par cet outil. Repli disque des assets NuxtAprès une bascule, le cache SSR peut resservir l'ancienne page tandis que les assets JavaScript répondent 404 — rendant les pages non interactives. Un outil pose sur les vhosts Nuxt une règle de repli : Nitro reste le service nominal, nginx ne sert le fichier depuis le disque que sur erreur 404, en privilégiant la variante précompressée si disponible. La transformation est validée localement, le VPS reçoit la configuration validée, avec sauvegarde et restauration automatique en cas d'échec. Surveillance des certificats TLSUne vigie surveille les dates d'expiration des certificats TLS sur toute la flotte. Les cibles sont enregistrées en base (domaines issus des configurations de VPS et entrées manuelles). Un silence du serveur est traité comme un statut inconnu et déclenche une alerte — jamais comme un statut « ok ». Les alertes précoces évitent les situations d'expiration silencieuse.
Vérification du canon d'image de baseUn outil vérifie que tous les conteneurs de la flotte utilisent bien l'image PostgreSQL de référence. Il interroge chaque VPS en SSH, consulte les conteneurs en cours d'exécution et signale toute dérive. Les dérogations documentées en base sont prises en compte. Les bases MySQL/MariaDB sont hors périmètre. Lecture seule ; codes de sortie distincts (conforme, dérive, inconcluant).
Synchronisation des rôles de conteneursUn automate nocturne rejoue les règles déclaratives de configuration des conteneurs de la flotte, en rechargeant les règles depuis leur source de référence plutôt qu'en recopiant les valeurs. Des gardes limitent le nombre de suppressions possibles par exécution. Dry-run par défaut. Médecin système du vaisseau-mèreUn processus de maintenance autonome ausculte régulièrement la santé système du vaisseau-mère et applique seul une liste fermée de soins préventifs :
Chaque acte est consigné en base. Ce qui dépasse la liste fermée (redémarrer un conteneur, toucher à PostgreSQL ou au swap) est remonté à l'opérateur sans être exécuté. Un soin dont le volume dépasse son plafond est refusé en totalité et signalé. Le médecin tourne sans LLM.
Rotation de credentials
Sauvegardes et restauration (S3 / stockage objet)
Bascule de machine vaisseau-mèreUn ensemble d'outils accompagne la migration à froid d'un vaisseau-mère vers un nouveau VPS :
Sous-famille — intégration avec une boutique PrestaShop legacy tierce
Façades OVH — registrar, alias email, droits API
Hygiène disque et rotation des espaces de travail
Santé système du vaisseau-mèreUn outil surveille la santé système locale : espace disque, mémoire, redémarrage en attente, paquets, capacité d'accueil du dump PostgreSQL nocturne, worktrees git accumulés, charge CPU, pression système (PSI), taux de création de processus, espace temporaire en RAM, et orphelins de sessions mortes. Peut alerter l'opérateur humain. Tourne quatre fois par jour.
Audit de bascule de machine
Gestion des poses de crontabUn outil pose, liste ou retire une ligne de crontab sans écraser les autres entrées existantes. Sauvegarde préalable, idempotence par marqueur nommé, relecture après écriture. Ne s'exécute pas lui-même en cron.
Provisioning de l'espace organisationnel des fondateursUn outil provisionne et valide l'espace privé des fondateurs sans afficher ni versionner de secret : création d'un rôle PostgreSQL dédié, sauvegarde du périmètre avant toute écriture, exécution de migrations rejouables (gouvernance, tableau de bord, profils visuels). Le secret généré est rangé dans le coffre hôte ignoré par git. Dry-run par défaut.
Façade de la recette PrestaShop 9Une façade shell gère le cycle de vie d'une boutique PrestaShop 9 de recette jetable : démarrage, arrêt, réinitialisation, installation de modules, console, logs. Deux corrections notables :
Inventaire et purge du cache image orphelinUn outil identifie les entrées de cache image qui ne correspondent plus à aucune image en base, et les déplace vers une corbeille horodatée (jamais de suppression directe). La destruction effective est protégée par un tampon de confirmation. Purge ciblée du cache SSRAprès une correction d'URL (un 200 remplacé par un 404 ne se propage pas spontanément), un outil purge le cache SSR d'un tenant en appelant l'endpoint de purge sur le VPS concerné. Supporte la purge par chemin ou la purge totale.
Archivage incrémental des photosUn processus nocturne réalise l'archivage incrémental des photos d'un téléphone Android vers le coffre de sauvegarde. L'absence du téléphone est traitée comme un état normal (sortie 0), non comme une erreur. La source est en lecture seule : rien n'est supprimé du téléphone. Sonde de parité de contenuUn outil compare le nombre de lignes dans les tables de contenu de référence entre deux instances de base de données : le hub interne et la base live du site public. Produit un entier égal au nombre de divergences détectées (une table inaccessible compte comme une divergence). Lecture seule. Famille : synchronisation OSS, refactoring et migrationsCette famille regroupe les outils de synchronisation entre le dépôt privé et la distribution publique open-source, les scripts de refactoring structurel, ainsi que les pipelines de migration de schéma et de données. Outils de synchronisation et de nettoyage OSS
Gestion des migrations DDL et modules
Connecteurs catalogue fournisseur — DropXL / vidaXLCette sous-famille alimente les boutiques de dropshipping depuis les flux fournisseurs DropXL et vidaXL, gère la synchronisation incrémentale des stocks et prix, et assure la migration des images produit vers le stockage objet souverain.
Scraping et ETL catalogue pièces automobilesPipeline sitemap-driven idempotent vers la base d'un tenant PrestaShop de préprod : scraping anti-ban avec gestion Cloudflare, cron incrémental avec verrou anti-chevauchement, téléchargement d'images et injection fan-out. Périmètre : environ 32 000 fiches produits (turbos, injecteurs, pompes haute pression, additifs). Le socle HTTP (session, backoff, anti-ban, limitation de débit) est mutualisé entre le scraper du site fournisseur et le comparateur de prix concurrents décrit ci-après.
Import catalogue WooCommerceReprise du catalogue public d'une boutique WooCommerce vers CodeMyShop : lecture seule de la Store API publique, aucune écriture en base, aucun déploiement.
Comparateur de prix concurrentsAlimente un module back-office PrestaShop affichant le prix des concurrents en regard du prix natif dans la liste produits. Distinct du pipeline d'import catalogue (ce sous-système compare des prix, il n'importe aucune fiche produit). Réutilise le socle HTTP mutualisé. L'orchestrateur hebdomadaire enchaîne les trois gestes (scraping → étiquetage de type de pièce → synchronisation PrestaShop) pour un concurrent à la fois, sous verrou. Deux lignes cron actives : mercredi à 01h00 et jeudi à 01h00, via le wrapper de cron. L'activation effective d'un concurrent est relue en base à chaque exécution — la base décide si le concurrent est actif, la crontab décide seulement quand lancer.
Seeds de démonstration
Lot de redirections produit « fidèles »Trois outils d'un même lot : préparer le fichier TSV, sauvegarder la table de redirections avant écriture, charger en table temporaire (avec rapport de recevabilité puis application). Aucun n'écrit en base sans l'option
Catalogue pièces auto — tenant de démonstration autoKURScripts qui montent et entretiennent la boutique du tenant autoKUR (catalogue, FAQ, images, emails, prix). Convention commune : dry-run par défaut,
|