Skip to main content
agentl.aio exécute des agents depuis une boucle asyncio, sans changer la sémantique du langage. Trois agents qui attendent chacun une API de deux secondes ne prennent plus six secondes.

Un agent reste séquentiel

Chaque action est jugée sur l’état laissé par la précédente. Rendre concurrentes deux actions d’un même agent reviendrait à juger la seconde sur un état que la première est en train de changer : une faille TOCTOU créée par le runtime lui-même. La concurrence est donc :
  • entre agents : une société fait tiquer ses agents en même temps ;
  • aux frontières : attendre un outil, un capteur ou le modèle ne bloque que l’agent qui attend.
Le cœur reste déterministe. La trace d’un agent ne dépend que de ce que ses frontières ont rendu, pas de l’ordre dans lequel les coroutines se sont terminées. Les journaux publiés avec la v1.8.2 se rejouent à l’octet en asynchrone.

Un hôte asynchrone

AsyncHost a le même contrat que Host : décorateurs sensor, tool, subagent, reconciler, approbateur. Les fonctions synchrones restent acceptées. invoke exige le même permis du noyau.

Un agent

store=FileStore(...) rend l’exécution durable : une exécution annulée ou tuée reprend sans doubler un effet.

Les bornes

Un délai dépassé n’a pas le même sens selon la frontière :
Un outil trop lent n’est jamais présumé réussi ni relancé à l’aveugle. En exécution durable, il est tranché à la reprise comme toute action interrompue.
Un message refusé par une boîte de réception pleine est tracé et compté, jamais perdu en silence.

Annulation

L’annulation est coopérative : l’agent s’arrête au prochain franchissement de frontière (Cancelled, que rien n’avale), et les appels en vol sont annulés.

Une société réellement concurrente

AsyncSociety avance par tours synchronisés :
  1. au début d’un tour, chaque agent reçoit un instantané de la mémoire partagée ;
  2. tous les agents tiquent en parallèle, dans les bornes de Limits, partagées par toute la société ;
  3. à la barrière, les messages sont remis et les écritures SHARED fusionnées, dans l’ordre déclaré des agents.
Un message envoyé au tour t est lu au tour t+1. C’est une sémantique différente du tour de rôle de Society, mais elle ne dépend pas de l’ordonnanceur : même programme, mêmes hôtes, même résultat.

MCP asynchrone

AsyncMCPHost et connect_async branchent un serveur MCP sur la boucle de l’agent au lieu d’ouvrir une boucle privée. Voir l’API Python.

Exécution durable

Survivre à une annulation ou à un crash sans doubler un effet.