Infra-IA propriétaire egery / Alvo

Carte d'architecture complète — départements, super-agents, sous-agents, pipelines. Le principe : un circuit imprimé — le LLM rédige aux bords, le code calcule au centre, l'humain valide aux sorties sensibles.

Inventaire réel au 02/07/2026 · 50 handlers worker Railway · 45 crons pg_cron · ~70 edge functions Supabase · 3 services Oracle — Source : ARCHITECTURE.md (GitHub, modifiable par PR)

🟢 prod fiable en production 🟠 à fiabiliser existe, à corriger ou en pause 🔵 V2 à venir — cible 31 août

1 · Vue d'ensemble — les départements

CEO décide le quoi · CAIO construit le comment · PM garantit le fini. Chaque département = un super-agent orchestrateur + des sous-agents déterministes. Tout passe par un bus unique.

flowchart TD
    subgraph PILOTAGE["🎛️ PILOTAGE"]
        CEO["CEO — Aurélien
cap · paris · cash"] CAIO["CAIO — Claude
build · doctrine · fiabilité"] PM["PM — Marwa
plan · WIP max 3 · DoD"] end subgraph INTERFACES["🔌 INTERFACES"] DISCORD["Discord
slash commands"] SLACK["Slack"] COWORK["Cowork — lanes"] WEBHOOKS["Webhooks
Cal.com · HubSpot · Yousign
Aircall · Brevo · WhatsApp"] end BUS[("⚡ BUS UNIQUE
ai_agent_tasks
idempotence · retry · trace")] subgraph DEPTS["🏭 DÉPARTEMENTS — worker Railway"] D1["Production M&A"] D2["Juridique & contrats"] D3["Data & enrichissement"] D4["Veille Oracle"] D5["Commercial & RDV"] D6["Finance"] D7["Média & growth"] D8["Reporting & gouvernance"] end subgraph SOCLE1["🧱 SOCLE"] LLM["lib/llm.js — cerveau interchangeable"] DOC["Doctrine R1-R9"] SEC["RLS · secrets"] GAT["Gates humains"] end CEO --> CAIO --> BUS PM -.suit.-> BUS DISCORD --> BUS SLACK --> BUS COWORK --> BUS WEBHOOKS --> BUS BUS --> D1 & D2 & D3 & D4 & D5 & D6 & D7 & D8 D1 & D2 & D3 & D4 & D5 & D6 & D7 & D8 -.-> SOCLE1

2 · Le plan de contrôle — état réel vs cible

Trois circuits coexistent aujourd'hui. La V2 n'en garde qu'un : la file ai_agent_tasks, traitée par le worker (98 % done sur ~1 360 tâches / 30 j).

flowchart LR
    subgraph NOW["ÉTAT ACTUEL — 3 plans"]
        W["🟢 Worker Railway
file ai_agent_tasks"] EF["🟠 Edge functions autonomes"] CW["🟠 9 rapports Cowork
brûlent du Max"] end subgraph TGT["CIBLE V2 — 1 seul plan"] BUS2[("Bus ai_agent_tasks")] --> WK2["Worker — 50 handlers"] end NOW ==>|migration| TGT
ComposantStatutDétail
Worker Railway (boucle blindée, heartbeat, reaper)🟢98 % done / 30 jours
45 crons pg_cron off-Max🟢Alimentent la file
9 rapports en tâches Cowork🟠À migrer en pg_cron → handler rapport
Double plan de contrôle (edge vs worker)🟠À trancher : le worker devient le plan unique
POST Discord depuis Cowork (exit 56)🟠Relay edge/Railway à construire
Routage notifications Discord/Slack🟠Audit émetteurs + mapping canal/événement

3 · Production M&A — « /espace ACME » → espace cédant complet

La vision produit : une commande Discord déclenche parsing FEC → retraitements → VDD → valorisation → matching → espace cédant déployé. Même fiabilité pour toute l'équipe.

flowchart TD
    CMD["/espace ACME — Discord"] --> GW["discord-interactions"]
    GW --> Q[("ai_agent_tasks")]
    Q --> ORCH["Super-agent orchestrateur
pipeline / pipeline_deep"] ORCH --> S1["1· fec.js — parsing FEC (code)"] S1 --> S2["2· Retraitements EBITDA
waterfall R2 (code)"] S2 --> S3["3· vdd_deep — VDD 7 axes
LLM narratif (R1)"] S3 --> S4["4· Valorisation déterministe
code + grilles versionnées"] S4 --> S5["5· Matching acquéreurs
HOT / WARM / SIGNAL"] S5 --> S6["6· espace.js — patch baseline v5"] S6 --> GATE{"Gate humain pret_rdv ?"} GATE -->|validé| DEP["webdeploy → Vercel
xxx-cedant.alvo.app + notif ✓"] GATE -->|refusé| ORCH
ComposantStatutDétail
Handlers fec, vdd_deep, espace, memo, ma, docgen, webdeploy🟢Tournent individuellement
Baselines espace v5 + design system teaser🟢Patcher, jamais recréer
Cascade complète bout-en-bout🟠0 run depuis le 18/06 — cure de fiabilité
Gate pret_rdv🟠0/24 dossiers — objectif 1 dossier validé (P2)
Slash /espace unique équipe (slice pilote VDD+Valo)🔵V2 — modèle de référence à cloner

4 · Juridique & contractualisation

Priorité n°1 CEO : NDA / mandat / contrat agent en une commande → brouillon Yousign → validation humaine. L'argent et la signature restent un geste humain (doctrine).

flowchart TD
    TRIG["Slash command ou stage HubSpot"] --> Q[("ai_agent_tasks")]
    Q --> FETCH["Re-fetch deal HubSpot
fail hard si champ manquant"] FETCH --> TPL["Template versionné
merge déterministe"] TPL --> DOCG["docgen · nda · nda_agent
mandat · contract"] DOCG --> GATE{"Gate humain — diff affiché"} GATE -->|GO| YS["yousign_send / batch
BROUILLON — activation humaine"] GATE -->|corriger| DOCG YS --> CB["yousign-webhook → HubSpot + trace"]
ComposantStatutDétail
nda, nda_agent, mandat, contract, docgen, legal🟢Brouillon + validation humaine
yousign_send (43 ok) / batch / cancel / callback🟢Volontairement gated
Erreurs config (payload signers, zone signature DOCX)🟠2 templates bloqués a_valider
Brouillons Yousign en doublon🟠Nettoyage manuel + idempotence stricte V2
Chaîne complète en 1 commande idempotente🔵V2 priorité 1
Cession de droits IP (Antoine / Esteban)🟠Acte écrit AVANT départ — bloquant egery Vision

5 · Data & enrichissement

Chantier 0 de la V2 : nettoyage / structuration data cédants-repreneurs (Marwa + Lauren). Supabase = source de vérité, HubSpot = CRM synchronisé.

flowchart LR
    subgraph SRC["Sources"]
        FEC2["FEC"]
        PAP["Pappers"]
        APO["Apollo"]
        MKT["Dealsuite · Fusacq"]
        PASS["Passeports alvo.app"]
    end
    SRC --> H["Sous-agents enrich ·
pappers_lookup · marketplace_ingest ·
passport-intake · fec"] H --> DB[("Supabase")] DB <-->|"sync 30/15 min"| HS["HubSpot"]
ComposantStatutDétail
Ingestion marketplaces + syncs HubSpot bidirectionnels🟢
Pipeline passeports → HubSpot🟢83 profils sans submission = gap UX 🟠
Doublons HubSpot (backfill 05/06)🟠Fusion à programmer
Nettoyage data cédants-repreneurs🔵Chantier 0 — précède tout

6 · Veille — Oracle

Un moteur prédictif, deux déclinaisons : Alvo Vision (qui vend / qui achète) et egery Vision (sourcing du véhicule d'investissement SPV).

flowchart TD
    SRC2["BODACC · Pappers · CFNEWS · Fusacq
LinkedIn · Indeed · presse · PSE"] --> DET["oracle-detect (5h)"] DET --> ENR["oracle-enrich (horaire)"] ENR --> SCORE["Croisement · scoring"] SCORE --> DIG["Digest 20h → Discord #veille-marche"] SCORE --> HOT["Signaux chauds → dept Commercial"]
ComposantStatutDétail
Chaîne detect → enrich → digest + heartbeat🟢Off-Max
Bundle egery-oracle v3 (3 services Railway)🟢agent-runtime · scrapers-cron · oracle-worker
Veille PSE hebdo (vivier agents)🟢
Alvo Vision (produit)🔵Couche Vision du blueprint
egery Vision (sourcing SPV)🔵Dépend IP sécurisée 🟠

7 · Commercial & RDV

Objectif ROI V2 : encaisser 30-40 RDV/semaine dès septembre. La chaîne pré-RDV est le maillon à reconstruire.

flowchart TD
    CAL["Cal.com webhook"] --> Q[("ai_agent_tasks")]
    AIR["Aircall pull → transcribe → call_analysis"] --> Q
    NOSHOW["no-show checker 5min
+ statut invités GCal 15min"] --> Q Q --> MB["meeting_brief — brief J-1"] Q --> RC["rdv_check"] Q --> RP["rdv_post"] Q --> REL["relances zombies · brief CRO 7h"] MB & RC & RP -.->|"🟠 EN PAUSE — données fantômes"| RB["🔵 V2 : rebuild sur
vraie source calendrier"]
ComposantStatutDétail
Webhooks Cal.com, no-show, GCal, chaîne Aircall🟢
Brief CRO quotidien, relances zombies, enrich HOT🟢Doctrine R7 v2
Chaîne pré-RDV (meeting_brief, rdv_check, rdv_post)🟠EN PAUSE — données RDV fantômes
Rebuild sur source fiable + brief J-1 18h🔵Condition du scale SDR

8 · Finance

ComposantStatutDétail
qonto_scan (600 tx/15 s) · qonto-sync nightly🟢
qonto_invoice — émission APRÈS GO humain🟢422 IBAN ponctuel 🟠
Suite Pennylane (sync, reconcile, categorize, justify)🟢
P1 CASH — encaissement signé dormant🟠Relances brouillon + émissions gated

9 · Média & growth

ComposantStatutDétail
media, seopage — articles .news (Astro, SEO+GEO)🟢
Brevo : campagnes, webhooks, segments, drafts leads🟢Templates validés
Sourcing agents (CSV campaign, PSE ciblé)🟢
Webflow alvo.app — corrections CTA restantes🟠10 bugs identifiés

10 · Reporting & gouvernance

ComposantStatutDétail
sync_state, daily_digest, caio_brief, heartbeat, reaper🟢Auto-surveillance
Directeurs (commercial, ops, finance, juridique, gouvernance, research)🟢directeur-tech pausé volontairement
9 rapports soir/pre-daily en tâches Cowork🟠À migrer off-Max
Mémoire cockpit_memory (lanes, doctrine, a-start/a-push)🟢Gouvernance lanes v1
Fiches contexte → 3 couches (doctrine/référentiels/état)🔵Chantier contrats d'agents

11 · Le socle transverse

ComposantStatutDétail
lib/llm.js — routeur LLM (Anthropic ↔ self-host, 2 env vars)🟢Prérequis structurel de l'infra propriétaire
Doctrine R1-R9 versionnée🟢LLM rédige / code calcule · valo déterministe · zéro MVP sans capture BDD
RLS 100 % des tables · api_credentials chiffré🟢Posture data défendable RGPD
Gates humains (argent, signature, envoi externe)🟢Non négociable
Contrats d'agents (mission, I/O typées, outils, escalade)🔵Gabarit V2
Self-host GPU FR/UE + vLLM (POC financé Guillaume)🔵Gelé jusqu'à cash + PM sécurisés

12 · Roadmap V2 — cible 31 août

Une seule roadmap fusionnée (blueprint CAIO v2 + Vision/Oracle + roadmap Marwa 6 couches). Owner archi pressenti : Alexis Pratt. WIP max 3 chantiers.

flowchart LR
    C0["Chantier 0 🔵
Nettoyage data
cédants-repreneurs"] --> C1["Chantier 1 🔵
Contractualisation
slash → Yousign brouillon"] C1 --> C2["Chantier 2 🔵
Espace cédant
FEC → VDD → valo"] C2 --> C3["🎯 Septembre
30-40 RDV/semaine
encaissés par l'infra"] T1["En continu 🟠
plan de contrôle unique ·
rapports off-Max · notifications ·
idempotence Yousign · pré-RDV"] -.-> C1 & C2

Principes non négociables : jamais de document juridique envoyé sans checkpoint humain · merge template déterministe · templates read-only versionnés (SHA loggué) · idempotence par clé composite · fail hard + alerte, jamais de fallback silencieux · brief J-1 18h même dégradé.