Lección 09 · Colaboración

Múltiples agents comunicándose por buzones de archivo

De subagent a teammate: puntual → persistente; sin nombre → con nombre; sin comunicación → buzón de archivo.

⏱ ~12 min · 📝 3 widgets interactivos · 🧑‍💻 Basado en shareAI-lab · s09_agent_teams.py

¿En qué se diferencia un subagent de un teammate?

El subagent de s04 es directo y descartable: spawn → ejecuta → devuelve summary → muere. Es de un solo uso, sin nombre, sin comunicación bidireccional entre padre e hijo.

El teammate de s09 es un agent independiente con nombre, que puede activarse repetidamente y enviar y recibir mensajes:

subagent (s04):  spawn -> execute -> return -> destroyed
teammate (s09):  spawn -> work -> idle -> work -> ... -> shutdown

Los dos tienen usos diferentes:

  • El subagent es ideal para «explorar algo concreto» (por ejemplo, hacer un review de un PR).
  • El teammate es ideal para «desempeñar un rol de forma continuada» (por ejemplo, un reviewer permanente que se activa con cada nuevo commit).

El buzón es un archivo JSONL

¿Cómo se comunican los miembros del equipo? s09 usa el mecanismo más sencillo posible: archivos JSONL append-only.

.team/
  config.json          # lista de miembros del equipo
  inbox/
    alice.jsonl        # todos los mensajes para alice van aquí (append)
    bob.jsonl
    lead.jsonl

Enviar es un open("alice.jsonl", "a").write(msg); leer es leer el archivo completo, parsear el JSONL y luego truncate para vaciarlo (semántica de drain).

¿Por qué archivos y no una queue en memoria? Los archivos son persistentes por naturaleza. Reinicio del agent, caída del proceso, incluso reinicio de la máquina — los mensajes siguen ahí. Además son legibles con grep, lo que hace el debugging mucho más cómodo.

Traza completa de un mensaje de lead a alice

El siguiente widget te permite enviar un mensaje a alice y ver cada paso que ocurre en el sistema de archivos.

5 tipos de mensajes

s09 define 5 tipos de mensajes (VALID_MSG_TYPES), aunque solo implementa los dos primeros — los tres restantes se añaden en la lección de protocolos s10:

  • message — mensaje de texto normal.
  • broadcast — envía a todos los teammates excepto al emisor.
  • shutdown_request / shutdown_response — solicitud/respuesta de apagado elegante (s10).
  • plan_approval_response — aprobación de plan (s10).

¿Por qué declarar tipos sin implementarlos? s09 quiere que el «protocolo» sea extensible — los tipos de mensaje son un enum, añadir uno nuevo solo requiere una entrada en el diccionario y un case en el router _exec.

Interactivo

Widget 1 · Mail Flow · traza de un mensaje de lead a alice

Pulsa Send y sigue cada paso: lead.send → append alice.jsonl → alice lee el inbox en el siguiente turno → truncate.

Interactivo

Widget 2 · Team Config · quién está online y en qué estado

.team/config.json es el directorio del equipo. Realiza varias operaciones (spawn / message / shutdown) y observa cómo cambia la configuración.

Operaciones
.team/config.json

        
Interactivo

Widget 3 · Subagent vs Teammate · elige qué usar

6 escenarios de tareas. Decide si usar subagent (spawn-y-muere) o teammate (spawn-y-vive). Piensa si la tarea es «de una sola vez» o necesita persistencia.

Correctas 0 / 6