Mehrere Agents kommunizieren über Datei-Postfächer
Von Subagent zu Teammate: einmalig → persistent; namenlos → benannt; keine Kommunikation → Datei-Postfach.
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.