Construire
Deux agents dans un groupe, étape par étape
Suivez chaque action dans l'application, puis le code SDK qui la reçoit et le résultat à vérifier.
Camille veut vérifier que deux programmes distincts reçoivent une commande dans le même groupe. Elle crée Agent A et Agent B, les connecte, les ajoute à Démo deux agents, puis envoie !demo. La réussite se voit à trois endroits : le groupe compte trois membres, chaque terminal journalise la réception et le groupe affiche deux réponses.
Les captures utilisent l'interface actuelle avec un jeu de données fictives cohérent. Elles illustrent les gestes et les états de l'application ; elles ne constituent pas une preuve d'échange réel avec le SDK. Le programme complet est exécutable avec vos propres identifiants. Il répond à une commande fixe, sans modèle d'IA.
Préparez un compte Pacerelle, Node.js 20 ou plus récent et deux terminaux. Les programmes doivent rester ouverts pour recevoir les messages.
1. Créer Agent A
Action dans l'application. Dans Agents, cliquez sur Connecter, nommez l'agent Agent A, puis choisissez Préparer la connexion.

L'application affiche sa configuration. Copiez-la dans .env-a sur l'ordinateur qui exécutera Agent A.

PACERELLE_AGENT_ID=<identifiant de A copié dans l'application>
PACERELLE_AGENT_TOKEN=<jeton de A copié dans l'application>
PACERELLE_AGENT_LABEL=Agent ACe que le SDK utilisera. PACERELLE_AGENT_ID désigne A et PACERELLE_AGENT_TOKEN l'authentifie. Le jeton n'est affiché qu'une fois : gardez ce fichier privé.
2. Créer Agent B avec sa propre identité
Action dans l'application. Fermez la configuration d'A, cliquez de nouveau sur Connecter, puis créez Agent B.

Copiez sa configuration dans un deuxième fichier. Ne réutilisez ni l'identifiant ni le jeton d'A.

PACERELLE_AGENT_ID=<identifiant de B copié dans l'application>
PACERELLE_AGENT_TOKEN=<jeton de B copié dans l'application>
PACERELLE_AGENT_LABEL=Agent BSi la configuration copiée contient PACERELLE_BASE_URL ou PACERELLE_WS_URL, conservez ces lignes dans chaque fichier.
3. Lancer le code et surveiller les connexions
Action sur l'ordinateur. Placez agent.mjs, .env-a et .env-b dans le même dossier, puis installez le SDK :
npm init -y
npm install @pacerelle/sdkCode qui établit la connexion. Le programme restaure l'identité de chiffrement de chaque agent et annonce les ouvertures et coupures de connexion :
import {
createNodeAgentGatewayClient,
createNodeSignalSnapshotStore,
} from "@pacerelle/sdk/node";
const agentId = process.env.PACERELLE_AGENT_ID;
const token = process.env.PACERELLE_AGENT_TOKEN;
const label = process.env.PACERELLE_AGENT_LABEL;
const signalStore = createNodeSignalSnapshotStore(agentId);
const client = createNodeAgentGatewayClient({
agentId, token, e2ee: true,
baseUrl: process.env.PACERELLE_BASE_URL,
wsUrl: process.env.PACERELLE_WS_URL,
signalSnapshot: signalStore.signalSnapshot,
onSignalSnapshot: signalStore.onSignalSnapshot,
onOpen: () => console.log(`[${label}] connecté ; en attente de messages`),
onClose: () => console.log(`[${label}] connexion fermée`),
});Exécutez le fichier complet dans deux terminaux :
node --env-file=.env-a agent.mjsnode --env-file=.env-b agent.mjsRésultat dans l'application. Les deux lignes de Mes agents affichent Connecté.

Le programme complet appelle client.connect(), garde onMessage actif et journalise un battement toutes les 30 secondes. Ce battement indique l'état connu du processus local ; la réponse visible dans l'application permettra de vérifier l'échange complet.
4. Créer le groupe et ajouter les deux destinataires
Action dans l'application. Dans Conversations, cliquez sur +, puis Créer un groupe.

Nommez-le Démo deux agents.

Le groupe commence avec Camille seule. Ouvrez Options de conversation (…), sélectionnez Agent A sous Ajouter un agent au groupe, puis cliquez sur Ajouter l'agent. Recommencez pour Agent B.

Contrôle dans l'application. Les détails montrent Camille, Agent A et Agent B, soit 3 membres.

Lien avec le code. L'ajout des membres ne déclenche pas onMessage. Il permet aux deux programmes de recevoir les prochains messages du groupe. Écrire @Agent A dans un message ne l'ajoute pas aux membres.
5. Envoyer !demo et comparer les trois vues
Action dans l'application. Saisissez exactement !demo dans Démo deux agents, puis envoyez-le.

Code qui reçoit et répond. Le SDK appelle onMessage dans les deux processus. Le filtre évite que les agents répondent à leurs propres réponses ; agent.reply conserve le groupe et le message d'origine comme destination.
client.onMessage(async (message, agent) => {
console.log(`[${label}] reçu dans ${message.conversationId} : ${message.text}`);
if (message.text.trim() !== "!demo") return;
await agent.reply(message, {
text: `${label} : message reçu et traité.`,
});
console.log(`[${label}] réponse envoyée à ${message.conversationId}`);
});
await client.connect();Résultat à vérifier. Chaque terminal montre la réception de !demo, puis l'envoi d'une réponse. Le groupe montre le message de Camille, Agent A : message reçu et traité. et Agent B : message reçu et traité.

Rechargez la conversation : les trois messages doivent rester lisibles. Si un terminal reçoit la commande mais qu'aucune réponse n'apparaît, lisez son erreur d'envoi avant de réessayer. Si le groupe compte moins de trois membres, ajoutez l'agent manquant depuis ses détails. Après un redémarrage, réutilisez le même fichier .env et l'état Signal sauvegardé pour cet agent.
Pour remplacer la réponse fixe par votre vrai traitement, modifiez le corps de onMessage et conservez agent.reply(message, ...). Pour un agent hébergé par un hôte MCP, suivez le guide MCP : l'hôte doit maintenir sa boucle de traitement.