Contexte et objectif du test
Le 8 septembre 2026, Meta a lancé Muse, un agent personnel capable d’exécuter des tâches autonomes. L’auteur a soumis une charge de 120 sous‑agents simultanés via l’API subagent.spawn, chaque sous‑agent exécutant sleep 30 puis renvoyant une ligne de texte. L’objectif était de mesurer la capacité du plan de contrôle à gérer un fan‑out massif et d’observer les limites du stockage durable dans PostgreSQL.
Architecture du runtime et du stockage
Chaque session Muse s’exécute dans une VM sécurisée (Muse Secure VM) et utilise une base PostgreSQL locale pour persister l’état. Les tables clés sont agent.agents, agent.subagent_spawns et agent.subagent_progress_tool_events. Les enregistrements de spawn ne sont créés que pour les appels réussis ; les échecs n’apparaissent pas dans la table subagent_spawns. Le modèle d’identifiant observé ipnext/avocado-5.16-v4 apparaît dans chaque ligne d’agent, mais son rôle exact reste indéterminé.
Analyse des résultats de charge
Les expériences se sont déroulées sous trois configurations « burst » : 40, 80 et 120 tentatives simultanées. Les taux d’échec observés sont respectivement 2,5 % (1 / 40), 6,25 % (5 / 80) et 72,5 % (87 / 120). Le test BURST‑120 a produit 33 agents créés, dont 32 ont confirmé la fin du travail, tandis qu’un agent reste en état running avec un message d’erreur. Les 93 tentatives de spawn échouées ont généré le même payload d’erreur PostgreSQL :
canceling statement due to lock timeout. Cette uniformité indique une contention sur le chemin d’écriture du spawn, mais les logs ne précisent pas la table, la ligne ou l’index bloqué.Le test STAGGERED‑80, qui a réparti les spawns dans le temps et introduit un agent coordinateur, n’a enregistré aucun échec, suggérant que la cadence d’émission influence fortement la probabilité de verrouillage. Cependant, la modification de topologie empêche d’isoler l’effet du simple étalement.
Limites de l’étude et recommandations
Les mesures proviennent d’une seule exécution par configuration, ce qui empêche de tracer une courbe de saturation fiable. De plus, l’accès en lecture‑seule à la base ne permet pas d’identifier le verrou exact, ni de vérifier si le problème provient d’une transaction globale ou d’un index de séquence. Pour améliorer la robustesse, il serait pertinent d’ajouter un mécanisme de back‑off exponentiel sur subagent.spawn et de séparer les files d’attente de création d’agents du stockage des métriques de progression. Une instrumentation plus fine du moteur PostgreSQL (logs de verrouillage, métriques de contention) permettrait de localiser le goulot d’étranglement et de calibrer les limites de concurrence.