Lektion 09 · Zusammenarbeit

Mehrere Agents kommunizieren über Datei-Postfächer

Von Subagent zu Teammate: einmalig → persistent; namenlos → benannt; keine Kommunikation → Datei-Postfach.

⏱ ~12 Min · 📝 3 interaktive Widgets · 🧑‍💻 Basiert auf shareAI-lab · s09_agent_teams.py

Was ist der Unterschied zwischen Subagent und Teammate?

Der Subagent aus S04 ist simpel: spawn → ausführen → Summary zurückgeben → sterben. Einmalig, namenlos, keine bidirektionale Kommunikation zwischen Parent und Child.

Der Teammate aus s09 ist ein benannter, wiederholbar aufweckbarer, nachrichten-fähiger unabhängiger Agent:

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

Die Anwendungsfälle unterscheiden sich:

  • Subagent eignet sich für "eine spezifische Erkundung" (z.B. einen PR reviewen).
  • Teammate eignet sich für "dauerhaft eine Rolle übernehmen" (z.B. ein langfristiger Reviewer, der bei jedem neuen Commit aufgeweckt wird).

Das Postfach ist eine JSONL-Datei

Wie kommunizieren Teammitglieder? s09 nutzt den simpelsten Mechanismus: append-only JSONL-Dateien.

.team/
  config.json          # Team-Verzeichnis
  inbox/
    alice.jsonl        # alle Nachrichten für alice
    bob.jsonl
    lead.jsonl

Senden: open("alice.jsonl", "a").write(msg); Lesen: gesamte Datei lesen, JSONL parsen, dann truncate leeren (drain-Semantik).

Warum Dateien statt Memory-Queue? Dateien sind persistent. Agent-Neustart, Prozessabsturz, sogar Maschinenrestart — Nachrichten bleiben erhalten. Außerdem sind sie lesbar und per grep durchsuchbar, was Debugging stark vereinfacht.

Vollständiger Nachrichtenfluss von lead zu alice

Das folgende Widget zeigt jeden Schritt auf Dateisystem-Ebene, wenn eine Nachricht gesendet wird.

5 Nachrichtentypen

s09 definiert 5 Nachrichtentypen (VALID_MSG_TYPES), implementiert aber nur die ersten zwei — die anderen drei kommen in Lektion s10 hinzu:

  • message — normale Textnachricht.
  • broadcast — an alle Teammates außer sich selbst.
  • shutdown_request / shutdown_response — graceful shutdown anfordern/bestätigen (s10).
  • plan_approval_response — Plan-Genehmigung (s10).

Warum deklariert aber nicht implementiert? s09 möchte die Protokollerweiterung offen halten — Nachrichtentypen sind eine Enumeration, ein neuer Typ erfordert nur einen Dictionary-Eintrag und einen Routing-Handler in _exec.

Interaktiv

Widget 1 · Mail Flow · Eine Nachricht von lead zu alice

Send klicken und jeden Schritt auf dem Dateisystem verfolgen: lead.send → alice.jsonl append → alice liest Postfach → truncate.

Interaktiv

Widget 2 · Team Config · Wer ist online, welcher Status?

.team/config.json ist das Team-Verzeichnis. Operationen durchführen (spawn / message / shutdown) und Konfigurationsänderungen beobachten.

Operationen
.team/config.json

        
Interaktiv

Widget 3 · Subagent vs Teammate · Was ist der richtige Typ?

6 Aufgaben — entscheide: subagent (spawn-then-die) oder teammate (spawn-then-live). Frage: Ist die Aufgabe einmalig?

0 / 6 richtig