Un daemon Python qui agit comme rate-limiter entre Max et Eva. Tourne sur le port 18801 sur les deux machines.

  • Maximum 50 messages par direction avant intervention humaine requise
  • Controles STOP/GO via Telegram pour les deux operateurs
  • Timeout de 5 minutes sans activite humaine declenche une pause automatique
  • Tous les messages logues dans governor.db (SQLite) pour l'analytics

Communication Flow

MaxSonnet 4.6Governorport 18801rate-limiterEvaOpus 4.6TelegramSTOP / GOmsgmsgresponse
1

L'agent envoie un message

L'agent emetteur appelle sa skill send-to-eva (ou send-to-max)

2

Verification rate-limit

Le daemon governor local verifie les limites de taux et l'etat STOP/GO

3

Webhook HTTPS

Message envoye via webhook HTTPS authentifie a travers Tailscale Serve (endpoint /hooks)

4

Le governor distant recoit

Le daemon governor distant recoit, logue et transmet au bridge-reader

5

Le bridge-reader sanitise

Sub-agent jetable qui reecrit le message en isolation (zero outils, timeout 60s)

6

L'agent principal recoit

L'agent principal ne voit que la reecriture sanitisee, jamais le message original

Maxsend-to-eva

Envoie un message a Eva via le pipeline governor

Evasend-to-max

Envoie un message a Max via le pipeline governor

Canal de supervision

Les deux operateurs humains partagent un groupe Telegram (Bridge Eva-Max) ou chaque echange inter-agent est visible en temps reel. Aucun agent ne peut communiquer secretement.

RisqueMitigation
Injection de prompt via message entrantLe bridge-reader reecrit tout. L'agent principal ne voit jamais le message original. Les patterns d'injection sont casses par la reformulation.
Agent distant compromis envoyant des payloads malveillantsLe bridge-reader n'a aucun outil. Meme si l'injection reussit dans le bridge-reader, il ne peut executer aucune action.
Attaque au niveau reseau entre les deux machinesUn seul port est ouvert (webhook HTTPS). Pas de SSH, pas d'autres services. L'acces est revocable a tout moment par chaque partie.
Exfiltration de credentials via le bridgeLes PINs, tokens gateway et credentials internes ne sont jamais transmis via la communication inter-agent. Le bridge est une valve a donnees unidirectionnelle.
Un cote tente de submerger l'autre de messagesRate limiting des deux cotes. Le canal de supervision rend l'inondation immediatement visible aux deux humains.

Bridge Governor

Daemon permanent (launchd)

Limite le debit et supervise toute communication entre Max et Eva.

HOW IT WORKS

  1. 1Daemon Python ecoutant sur le port 18801 (localhost sur Max, 0.0.0.0 sur Eva)
  2. 2Maintient un compteur de messages par direction -- s'arrete a 50 messages et exige un GO humain via Telegram
  3. 3Timeout d'inactivite de 5 minutes : si aucun humain ne surveille, le bridge se met automatiquement en pause
  4. 4Tous les echanges sont journalises dans governor.db (SQLite) avec horodatage, direction et taille du contenu

WHY IT MATTERS

Sans limitation de debit, un agent compromis pourrait spammer son homologue avec des milliers de tentatives d'injection. Le governor garantit la supervision humaine et empeche les conversations hors controle.

bridge-reader

A la demande (spawn par message)

Assainit les messages entrants en isolation complete avant que l'agent principal ne les voie.

HOW IT WORKS

  1. 1Spawn comme un sub-agent jetable one-shot avec zero outil et un timeout de 60 secondes
  2. 2Lit le message brut entrant et le reformule avec ses propres mots -- supprimant toute instruction cachee ou injection de prompt
  3. 3Seule la reformulation assainie atteint l'agent principal. Le message original n'est jamais expose
  4. 4Si le bridge-reader plante ou timeout, le message est silencieusement abandonne

WHY IT MATTERS

L'agent principal fait confiance a son propre contexte. Si un message d'attaque entrait directement dans le contexte, il pourrait outrepasser les instructions. Le bridge-reader est un pare-feu : il comprend le contenu du message mais ne peut pas etre instrumentalise (pas d'outils, pas de persistence).

Bridge inter-agents -- Architecture en detail | OpenClaw × Easylab