Chapitres

DOC-05 / Référence technique · Chapitre 10

Le Catalogue des Façades

Une façade par module : recenser les points d'entrée exécutables du harness agentique, par famille et mode d'invocation.

À quoi sert un catalogue de façades

Le harness agentique du Synedre n'est pas un monolithe : c'est une constellation de petits points d'entrée exécutables — des scripts Python sous synedre/ et des binaires sous bin/. Chacun porte un rôle unique. Le catalogue des façades recense ces points d'entrée avec, pour chacun, sa famille, son rôle en une ligne et son mode d'invocation type. Le but : qu'un ingénieur reprenant le dépôt retrouve rapidement quel script fait quoi, sans relire des centaines de fichiers.

Le principe directeur est simple — un module, une façade. Quand un domaine du système (l'email client, le scan antivirus, le déploiement) doit être touché, il existe un point d'entrée unique et obligatoire. On ne contourne jamais une façade : c'est elle qui porte les garde-fous.

Méthode d'extraction et couverture

Les descriptions du catalogue ne sont pas inventées : elles sont extraites programmatiquement du premier docstring ou commentaire de tête de chaque fichier. Pour le Python, une boucle lit le docstring du module ; pour les binaires bin/*, la première ligne de description non-bannière. Quand un fichier ne porte qu'un en-tête boilerplate (@author / @copyright), le vrai docstring est repêché quelques lignes plus bas. Ce repêchage n'est pas systématique, et la fiabilité de chaque entrée est annotée plutôt que survendue.

La couverture est suivie explicitement : on distingue le total réel de fichiers sur disque du nombre effectivement détaillé dans le catalogue.

CatégorieTotal réel sur disqueCouvert
synedre/*.py~180tous listés ou rattachés à une famille
bin/* (entrées exécutables)~80 entréesscripts exécutables détaillés ; fichiers de données et caches non détaillés un-à-un
Drift détecté. Une vérification croisée entre le crontab et le contenu réel de synedre/ révèle plusieurs dizaines d'entrées cron mortes : elles pointent vers des fichiers Python supprimés ou renommés. Le catalogue documente cet écart au lieu de le masquer — un catalogue honnête recense aussi ses propres trous. Ces entrées sont à nettoyer.

La légende des invocations

Chaque façade porte un mode d'invocation type. Comprendre ce vocabulaire suffit à savoir comment un script est censé être déclenché.

CodeSignification
cronLancé par le scheduler, souvent via un wrapper-watchdog commun
CLIAppelé à la main en ligne de commande
skillFaçade derrière un skill Claude Code (.claude/skills/<nom>/)
hookHook Claude Code (SessionStart / UserPromptSubmit / PreToolUse / PostToolUse / Stop)
libModule importé, pas un point d'entrée autonome
workerDaemon ou boucle drainant une file en base

Le socle commun et la couche de données

Toutes les familles convergent vers une base de données unique, accédée exclusivement à travers une façade Python PostgreSQL. Aucun script ne parle à la base en direct : il passe par cette façade, qui centralise la connexion, et par une façade d'environnement qui charge les variables de configuration. Les secrets vivent dans des fichiers d'environnement hors-dépôt (gitignorés) — jamais en clair dans le code ni dans la documentation.

Au-dessus de cette couche se trouve un socle de façades transverses, partagées par toutes les autres familles.

FaçadeRôleInvocation
Façade PostgreSQLAccès Python à la base unique pour tous les automateslib
Helper connexion sandboxConnexion base pour les agents en bac à sablelib
Façade d'environnementChargement centralisé des variables de configurationlib
Logger structuréLogging obligatoire pour tous les automateslib
Wrapper cronWatchdog autonome des automates planifiéscron
Façade IACouche agnostique multi-fournisseurs (embed / complete)lib
Invocation d'agentAppeler un agent du Synedre depuis n'importe quel automateCLI / lib
Filtre PIIPurge les données personnelles avant tout envoi au pipeline LLMlib

Atlas et l'orchestration

La famille atlas porte le cœur orchestrateur : recevoir un email entrant, classifier son intention (run, chantier, question, bruit), puis agir. Une règle de doctrine encadre l'invocation des agents : un agent est toujours appelé via un terminal pseudo-tty (node-pty) qui capture son flux de pensée pour audit, jamais en mode opaque.

FaçadeRôleInvocation
Poll inboxRelève la boîte d'orchestration à intervalle réguliercron
Classifier d'intentClassifie l'intention d'un message via LLMlib / CLI
SpawnLance une intelligence headless pour agir sur les messages classifiésworker
Ship-via-emailDéclenche une mise en production par email, avec triple vérification anti-usurpationCLI
Monitoring post-shipSurveille après mise en production, avec rollback automatique uniquecron
Cycle ReAct par tâcheExécute le cycle raisonnement-action d'une tâcheworker
Détecteur de dériveAuto-pause les tâches bloquées trop longtemps ou trop coûteuses en tokenscron
QA post-deployContrôle qualité à deux niveaux après déploiementcron / CLI

Les chantiers

La famille chantiers matérialise le workflow de création en plusieurs étapes : lire la demande, auditer les agents disponibles, rédiger une lettre de mission, recruter explicitement l'équipe, créer le squelette atomique (chantier + travaux + tâches). La façade officielle « chantier depuis email » exécute ces étapes sous contrainte.

FaçadeRôleInvocation
Chantier depuis emailCréation d'un chantier client à partir d'un email entrantCLI / skill
Live chantierSuivi en direct des événements agents sur un chantierCLI
Lettre de missionGénère un brouillon de lettre de missionlib
Auto-explode discoveryPipeline LLM transformant une découverte en tâches d'implémentationworker
Estimateur de tokensEstime le coût en tokens et recommande un modèle par tâchelib
Détecteur de patternsRepère les patterns récurrents dans les itérations de tâchescron
QA de validationValidation qualité d'un travail par son équipeworker
Scanner de leadsDétecte les leads entrants depuis les réservations de rendez-vouscron / skill

Audits, qualité et sécurité

Une famille entière veille sur la santé du système : audits nocturnes des automates, du schéma de base, des dépendances, des backups ; pentest automatisé ; audit d'accessibilité ; monitoring HTTP des sites en production. Le principe : observer en continu, alerter, et n'appliquer un correctif automatique que sous garde-fou strict.

FaçadeRôleInvocation
Audit des automatesAudit nocturne de tous les automatescron
Audit du schémaAudit quotidien du schéma de base vs convention de nommagecron
Surveillance des backupsVérification quotidienne des sauvegardes de basecron
Test de restaurationTest mensuel de restaurabilité d'un dump de basecron
PentestPentest automatiséCLI / skill
Audit d'accessibilitéAudit WCAG 2.2 AACLI
Monitoring uptimeMonitoring HTTP des sites en productioncron
QA gate (relecture)Verdict heuristique de relecture qualité (go / avec réserves / no-go)CLI
Audit infraAudit infra unifié vaisseau-mère et tenantsCLI / skill
Audit OSS-safetyScan du cœur OSS contre toute fuite de lexique propre à un tenantCLI
Smoke test multi-tenantTest de fumée des sites, échec si réponse HTTP en erreur serveurCLI

Mémoire, cicatrices et apprentissage

Cette famille porte la boucle d'apprentissage du système : récolte des cicatrices depuis l'historique git, requalification par LLM, injection des cicatrices actives au démarrage de session via des hooks, consolidation mémoire nocturne, et recall sémantique par recherche vectorielle. La mémoire vit sur trois niveaux — mémoire de travail, second cerveau Zettelkasten, mémoire sémantique vectorielle — mais la base de données reste la seule source de vérité.

FaçadeRôleInvocation
Récolte de cicatricesRécolte automatique des cicatrices depuis l'historique gitcron
Requalification de cicatricesReclassification LLM par lots des cicatricescron
Injection au démarrageHook reconnectant la mémoire active en début de sessionhook
Injection avant outilHook injectant les cicatrices avant exécution d'un outilhook
Leçon post-chantierDrafte une rétrospective pédagogique après un chantierCLI / skill
Consolidation nocturneConsolidation de la mémoire pendant la nuitcron
Recall sémantiqueRecherche vectorielle retrouvant la note pertinenteCLI / skill
Indexation du second cerveauIndexe le Zettelkasten dans la base sémantiquecron
Suivi du contexteEstimation du budget contexte consommé en sessionlib / skill
Hard-floor immuableChargement et validation du manifest des blocs P0 immuableslib / skill

Inbox et email client

Une règle dure gouverne cette famille : l'intelligence n'envoie jamais directement un email à un client. Tout passe par une façade email unique, en deux temps — un brouillon, puis un envoi explicite après validation humaine. Un hook bloque toute tentative d'utiliser un client SMTP en direct. Les identifiants de boîte vivent dans un fichier d'environnement hors-dépôt ; leurs valeurs n'apparaissent nulle part dans le code ni la documentation.

FaçadeRôleInvocation
Email clientWorkflow d'envoi : brouillon, relecture, envoi, archivageCLI (façade unique)
Garde façade emailHook imposant la façade email obligatoirehook
Sync inboxRelève la boîte de réception vers la basecron
Inbox directConnexion directe au serveur de mail, en repli d'urgenceCLI / skill
Scan antivirus PJFaçade de scan des pièces jointes avant ouvertureCLI / skill
Ton de voixRésolution du registre de rédaction par lead ou clientlib
Sync rendez-vousSynchronise les réservations vers le pipeline CRMcron
Alerte de coûtVérifie le cumul mensuel d'API LLM contre le budgetcron

Blog, SEO et contenu

La famille contenu porte la publication DB-first : moteur de publication, nettoyage d'articles, génération de couvertures et de carrousels, surveillance des doublons SEO, génération de descriptions produit, et une sous-famille de traductions FR → EN (et DE) couvrant l'interface, le contenu de base et les fiches produit.

FaçadeRôleInvocation
Moteur de publicationPublication DB-first d'articlesCLI / skill
Hygiène blogNettoyage automatique des articlescron
Générateur de couverturesGénère les images de couverture d'articlescron / CLI
Générateur de carrouselsProduit des carrousels sociaux au format carréCLI
Radar de cannibalisationDétecte les doublons et quasi-doublons SEOcron
Générateur de fiches produitRédige les descriptions de produitsCLI
Traduction de contenuComplète les champs FR-only en EN dans la baseCLI

Agents navigateur

Une famille pilote Playwright pour les automatisations web. Sa doctrine de protection est instructive : un proxy SOCKS traite la réputation d'adresse mais pas la détection comportementale du navigateur ; certaines actions exigent donc un navigateur visible sur une machine résidentielle. La classification de la protection précède toujours le code du flux.

FaçadeRôleInvocation
Agent navigateurAutomate Playwright avec sortie résidentielle via proxylib
Worker navigateurWorker à navigateur visible sur machine résidentielleworker
File de jobs navigateurInterface de la file de jobs navigateurCLI
Capture d'écranCapture des pages via Chromium headlessCLI / lib
Scan de flotteScan de la flotte de sitescron / CLI

Banque, facturation et finance

La famille finance couvre la synchronisation bancaire, l'import de relevés avec anti-doublons, la facturation récurrente et les relances, ainsi que le suivi des correctifs de production. Les opérations d'écriture sur une base de production passent par un wrapper sécurisé dédié.

FaçadeRôleInvocation
Sync bancairePoint d'entrée cron du domaine banquecron / skill
Import de relevéParse un export bancaire avec dédoublonnageCLI / skill
Facturation récurrenteCron quotidien de facturation récurrentecron
RelancesCron quotidien de relances et rapprochementcron

Déploiement, ship et infra

Cette famille incarne la règle dure d'asymétrie entre déployer et mettre en production. ./deploy est toujours le travail de l'intelligence : elle déploie en préprod sans demander. ./ship est la mise en production, geste manuel exclusif du Fondateur — l'intelligence n'y touche jamais. Sur le vaisseau-mère lui-même, déployer signifie un rebuild en direct, sans préprod. Et avant tout déploiement, on committe : les modifications non committées sont perdues au rebuild.

FaçadeRôleInvocation
Helpers de déploiementFonctions communes aux scripts de déploiementlib
Validation deploy.yamlParse et valide la config de déploiementlib
Vérification git propreVérifie que l'arbre git est propre avant déploiementCLI
Write SQL sécurisé en prodWrapper sécurisé pour toute écriture SQL en productionCLI
Bootstrap tenantInitialise un nouveau tenant depuis le templateCLI
ProvisioningProvisionne automatiquement une machine pour un clientCLI
Health check post-shipContrôle de santé et rollback automatique après mise en productionCLI
Sauvegarde chiffréeBackup chiffré des fichiers critiques vers stockage objetcron / CLI
Restore depuis stockageRestauration d'une base depuis une sauvegarde objetCLI

Les hooks Claude Code

Au-delà des familles ci-dessus, un sous-système entier vit dans des fichiers de configuration de hooks. Les hooks câblent les façades aux moments-clés du cycle de vie d'une session : démarrage, avant et après chaque outil, soumission de prompt, et fin de session.

MomentRôle du hook
SessionStartRéinitialise le suivi de contexte, charge le brief de session, injecte la mémoire active
PreToolUse:BashGarde-fou écriture en production, façade email obligatoire, injection des cicatrices
PreToolUse:Edit|WriteInjection des cicatrices avant modification de fichier
PreToolUse:AgentInjection des cicatrices avant invocation d'agent
PostToolUseTracking automatique du contexte, log des cycles ReAct, télémétrie agent
StopLibération des locks de chantier, garde-fou git-clean (bloque si l'arbre git n'est pas propre), cascade de synchronisation chantier
Le garde-fou « git non committé au moment du Stop » est ce qui matérialise la doctrine de commit en flux : aucun travail terminé ne reste non committé. Le hook bloque la fin de session tant que l'arbre n'est pas propre.

Notes de fiabilité

Un bon catalogue est honnête sur ses limites. Trois réserves accompagnent celui-ci :

  • Les scripts dont le seul en-tête était du boilerplate ont vu leur vrai rôle repêché plus bas dans le fichier — aucun rôle n'a été inventé, et les cas incertains sont annotés.
  • La colonne « invocation » mélange du certain (présence vérifiée dans le crontab) et de l'inféré (mention « cron quotidien » lue dans un docstring). Pour la vérité d'ordonnancement, seul l'examen direct du scheduler fait foi.
  • Le mapping skill ↔ façade est sourcé des fiches de skill, qui n'ont pas toutes été ouvertes une à une : à confirmer au cas par cas.

C'est l'esprit du catalogue : recenser fidèlement, signaler le drift, et ne jamais survendre la certitude.