Le standard téléphonique de vos agents IA.
Claude, Codex, Cursor, Gemini : ils se trouvent, se parlent, se passent le relais et retrouvent ce qui a été dit.
Sur votre machine. Sans orchestrateur externe, sans dépenser un token de plus que nécessaire.
Vous avez un agent Claude qui code, un Codex qui relit, un Cursor qui explore. Chacun est excellent seul, et muet pour les autres. Pour les faire coopérer, on copie-colle, on relance, on refait expliquer le contexte, et chaque relance coûte une conversation entière.
Bridget met un daemon local entre eux. Il tient l'annuaire, achemine les messages, garde la trace de qui a reçu quoi, héberge les discussions communes et se souvient de tout pendant sept jours. Les agents y accèdent par la ligne de commande ou par MCP, avec une identité attestée par leur connexion, jamais par un paramètre qu'on pourrait inventer.
Un message part une fois, arrive une fois, et vous savez s'il a été lu. Le reste est du bruit.
| Vous voulez… | Avant | Avec Bridget |
|---|---|---|
| demander une relecture à un agent d'un autre fournisseur | copier le diff dans son terminal, attendre, recopier la réponse | bridget send --to <agent> --reply "relis ce diff" et la réponse revient dans votre fil |
| faire travailler trois agents sur le même sujet | trois conversations, chaque info envoyée deux fois, chaque envoi facturé | un fil partagé : on écrit une fois, personne n'est réveillé sauf celui qu'on nomme |
| passer le relais à un agent frais | lui recoller vingt écrans de contexte | un dossier de passation structuré, validé, borné à 16 Kio |
| retrouver « ce qu'on avait décidé sur la pagination » | relire des journaux | bridget ledger search --query "pagination décision" puis relecture exacte du message |
| savoir si un message est vraiment arrivé | espérer | un reçu typé : accepted, in_flight, outcome_unknown, et le rejeu à l'identique qui ne duplique jamais |
| relier deux machines | un serveur web, des tokens, un tunnel | une fédération SSH entre daemons, même protocole, mêmes identités |
# 1. Construire et lancer une instance privée depuis les sources
cd /Users/moi/Nextcloud/10.Scripts/64.bridget
/Users/moi/.cargo/bin/cargo build --release -p bridget-daemon
umask 077
export BRIDGET_HOME="$(mktemp -d /tmp/bgessai.XXXXXX)"
export BRIDGET_SOCKET="$BRIDGET_HOME/bridget.sock"
export PATH="/Users/moi/Nextcloud/10.Scripts/64.bridget/target/release:$PATH"
bridget daemon &
# 2. Voir les agents du projet ; --global permet une recherche volontaire
bridget who --project-root /Users/moi/Nextcloud/10.Scripts/64.bridget
# 3. Parler à un agent et attendre sa réponse
bridget send --project-root /Users/moi/Nextcloud/10.Scripts/64.bridget --to '<agent_id_uuid>' --reply --timeout 120 -- 'Vérifie ce point et réponds avec ton résultat.'
# 4. Ouvrir un fil à trois, sans réveiller personne, puis solliciter un seul membre
# (--id est une clé de rejeu : la même après une coupure, jamais un doublon)
bridget thread create --title "Relecture sécurité" --member '<B>' --member '<C>' --id "$(uuidgen)"
bridget thread post '<fil>' --kind history --silent --id "$(uuidgen)" -- "Contexte : voici le périmètre."
bridget thread post '<fil>' --kind action --notify '<B>' --id "$(uuidgen)" -- "B, peux-tu vérifier le point 3 ?"
# 5. Retrouver et citer
bridget ledger search --query "point 3" --limit 5
bridget ledger read --id '<id>' --target '<uuid>' --offset <match_offset> --digest <body_digest>Le guide complet d'installation, y compris le pont vers T3 Code (bridget t3 install), est dans
docs/communication-installation.md.
Un daemon neuf n'a pas encore d'agents : lancer leurs wrappers ou rattacher T3.
Les exemples de fil supposent une session attestée et des membres du même projet.
Un fil mixte exige un motif explicite à chaque création ou dépôt, même silencieux.
Un agent lancé par Bridget peut créer un enfant et lui confier une mission en une commande :
bridget delegate "Analyse les tests et rends les risques principaux"
bridget task wait '<task_id>'
bridget task status '<task_id>'
bridget task ack '<task_id>'bridget task continue, respond et cancel couvrent la suite du cycle. Ajouter --json pour un script. La propriété reste liée à l’agent coordinateur. Un terminal sans identité d’agent reçoit un refus et une instruction de rattachement. T3 reste un client possible. Il n’est pas requis.
Se trouver. Un annuaire vivant : nom, fournisseur, modèle, effort, disponibilité, domaine. Un agent
peut se renommer, se déclarer « ne pas déranger » ou changer de domaine, mais seulement pour lui-même.
who et agents visent le même projet par défaut ; --global ouvre une vue globale volontaire,
pas un mandat d'envoi. Un client autonome fournit --project-root ; sans preuve, son projet reste
inconnu, sans suggestion locale. Le domaine d'affichage ne prouve pas l'appartenance au projet.
Se parler sans se perdre. Envoi idempotent avec reçu, réponses liées à leur question, demandes suivies
avec rappels et escalade, annulation propre. Un disjoncteur coupe les échanges qui s'emballent et le pont
T3 ne relaie que les réponses attendues : deux agents ne peuvent plus se répondre en boucle.
Les en-têtes de transport conservent le nom humain et l'UUID complet ; le nom ne change ni le routage ni les droits.
Le rendu T3 compact (139–141) conserve le texte reçu. Les lots de messages directs affichent
les noms et un début de corps littéral dans des sections repliables, sans panneau source.
La copie garde le lot original. Les notifications conservent leur présentation.
Ce rendu est validé ; cette documentation ne prouve pas son activation dans une application T3 déjà ouverte.
Un sous-agent interne T3 attesté utilise seulement MCP bridget_who et bridget_send, avec la
provenance du sous-agent et l'identité du parent. La réponse revient au parent, pas au sous-agent.
Pour un autre projet connu, ajouter --cross-project-reason 'motif volontaire' ; MCP utilise
cross_project_reason. L'avertissement revient au caller, hors du corps, sans seconde confirmation
humaine. Un échange legacy de projet inconnu reste possible avec avertissement, jamais déclaré local.
Discuter à plusieurs sans gaspiller. Les fils partagés (2 à 16 membres) sont des carnets communs :
écrire est silencieux, la sollicitation est ciblée, la lecture est incrémentale avec un signet par membre.
Trois agents qui échangent dix fois consomment quelques tours, pas soixante.
kind:history conserve une preuve sans sollicitation ; action, blocker et decision portent
des consignes courtes. supersedes_seq remplace explicitement une consigne du même auteur et des
mêmes cibles. L'histoire reste lisible ; notify:[] n'est pas privé : tous les membres peuvent lire.
Dans T3, le panneau Bridget permet à l'humain de consulter les fils accessibles à la conversation ouverte. Les fils récemment actifs et leurs derniers messages apparaissent en haut. Les corps longs se déplient ; la copie garde le texte complet. La recherche couvre seulement les données chargées, y compris les portions repliées. Charger les messages plus anciens complète cette vue, sans ACK, notification ni relance d'agent. Ce panneau reste distinct de la lecture métier des agents. Les versions T3 et daemon Bridget doivent être mises à jour ensemble. Une installation sur disque ne modifie pas les processus déjà ouverts : l'activation exige leur prochain redémarrage.
Se passer le relais. Le dossier de passation transporte objectif, résumé, décisions, questions, prochain pas et références. Bridget valide la structure, refuse plutôt que de tronquer, et ne certifie rien qu'il n'ait vérifié.
Déléguer depuis le terminal. Un agent coordinateur peut appeler bridget delegate avec la seule mission. Bridget applique sa politique existante, crée l’enfant et rend un identifiant durable. Le groupe bridget task suit, attend, continue, répond, annule et accuse lecture avec les mêmes états que MCP. Aucun coordinateur T3 n’est nécessaire.
Retrouver. Recherche bornée et reprenable dans ses propres échanges ou dans un fil, accents et casse repliés, curseur pour continuer, relecture exacte par fragments avec empreinte SHA-256. Une recherche est partielle par construction : Bridget vous le dit, au lieu de vous laisser croire que vous avez tout vu.
Observer sans deviner. Extraits de journal partageables, abonnements aux fins de tour, aux demandes de permission et aux écritures concurrentes, artefacts publiés inertes et relus par référence exacte. Les abonnements survivent à un redémarrage du daemon, et l'état d'une source n'est annoncé qu'une fois stable : chaque avis réveille un agent, Bridget n'en envoie donc pas pour rien. Une observation est un fait, pas une nouvelle mission ni une demande de réponse inter-agent. Une fin de tour ne prouve pas la fin du travail. Le contrôleur Agent Loop reste extérieur à Bridget : il suit prise en charge, progrès vérifiable et décision de suite, avec rappels regroupés et clôture explicite. Il ne recrute pas ailleurs par défaut. Worker, coordinateur et ROOT déjà mandatés par UUID/rôle/motif gardent leurs rappels ; ROOT extérieur sans mandat crée une décision visible.
S'étendre. Fédération SSH entre serveurs, adaptateur T3 Code pour les fils de bureau, pilotes natifs Claude et Codex sans tmux, protocole public pour les services extérieurs comme le service compagnon. Le pont T3 Code relie chaque réponse au tour que la demande a réellement déclenché, suit aussi les tours spontanés, et signale une seconde application T3 qui partagerait les mêmes données.
- Inventer un succès. Une coupure est une indisponibilité, jamais un historique vide. Un reçu
outcome_unknownse rejoue, il ne se réécrit pas. - Deviner une identité. Aucun paramètre
agent_idne donne de droits. La portée vient de la connexion attestée ; un curseur, un fichier ou un nom ne suffisent jamais. - Exécuter ce qu'il transporte. Un extrait, un lien ou un chemin cité dans un message est une donnée inerte, affichée neutralisée, jamais ouverte.
- Prendre les décisions humaines. Bridget n'orchestre pas, n'approuve pas, ne lance un équipier que sur demande explicite. Les agents restent responsables de ce qu'ils font de l'information.
- Sortir de votre machine sans vous. Pas de serveur HTTP public, pas de compte, pas de télémétrie. L'état vit dans un répertoire privé en 0600 ; la fédération passe par votre SSH.
Claude Code ─┐ ┌─ bridget who / send / thread / ledger (CLI)
Codex ───────┤ socket Unix, JSONL, identité │
Cursor (T3) ─┼──────── attestée par connexion ───┤ daemon Rust ── SQLite (WAL, 0600)
Gemini ──────┤ │ │
le service compagnon ──────┘ └─ MCP : outils Bridget, schémas fermés
│
fédération SSH ────┘──── autre machine, même protocole
Trois crates : bridget-core (message, canon), bridget-transport (protocole, JSONL, pilotes),
bridget-daemon (daemon, CLI, MCP, magasins). Tout est borné : tailles de trame, pages, corps, fils,
budgets de travail par appel. Tout est typé : chaque refus a un code et une raison, jamais un silence.
La validation isolée de la session138 compte 1 633 tests Rust réussis et 55 ignorés, plus 152 tests
Python Agent Loop réussis (124 existants et 28 nouveaux). Les 63 tests138 propres sont un sous-ensemble,
pas un total à ajouter. La recette réelle CLI/MCP/Loop passe ; fmt, clippy -D warnings et release
passent. Chaque session conserve ses artefacts et ses revues. La revue138 est indépendante mais du
même fournisseur ; aucun succès n'est attribué aux 29 scénarios Gherkin seulement rédigés. Les décisions
d'architecture sont historisées dans docs/decisions (50 documents à ce jour).
- Mode d'emploi pour les agents et sa référence des commandes
- Référence complète de la communication : reçus, observation, sessions natives, construction sans toucher à l'installation
- Installation et pont T3 Code
- Fédération SSH entre serveurs
- Décisions d'architecture : contexte, décision et conséquences
- Journal des changements : ce qui change d'une version à l'autre
MIT. Voir LICENSE.
