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
| Composant | Statut | Dé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
| Composant | Statut | Dé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"]
| Composant | Statut | Dé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"]
| Composant | Statut | Dé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"]
| Composant | Statut | Dé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"]
| Composant | Statut | Dé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
| Composant | Statut | Dé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 |
10 · Reporting & gouvernance
| Composant | Statut | Dé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
| Composant | Statut | Dé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é.