Lektion 12 · Zusammenarbeit

Verschiedene Agenten sollten nicht denselben Baum ergreifen.

„Nach Verzeichnis isolieren, nach Aufgaben-ID koordinieren.“ Zwei Ebenen stören sich nicht gegenseitig.

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

Ein schwieriges Problem mit Parallelagenten

s09-s11 ermöglicht es Ihnen, mehrere Teamkollegen gleichzeitig zu starten, aber es gibt eine Gefahr: Sie befinden sich alle im selben Arbeitsverzeichnis. Alice ändert auth.py und Bob ändert gleichzeitig auch auth.py – Git-Konflikte, Dateiverwirrung und gegenseitige Kontamination von Tests.

Die Lösung für s12 ist git worktree: Im selben Warehouse können Sie über git worktree add verschiedene Zweige in verschiedenen Verzeichnissen auschecken. Jeder Agent erhält seinen eigenen Arbeitsbaum und arbeitet in seinem eigenen Verzeichnis, unsichtbar für die anderen.

my-repo/ # Hauptarbeitsbereich (für Lead)
.worktrees/
  alice-auth/ # Alices Isolationsverzeichnis
    (Zweig: wt/alice-auth)
  bob-api/ # bobs Isolationsverzeichnis
    (Zweig: wt/bob-api)
  index.json # Worktree-Registrierung
  events.jsonl # Lebenszyklus-Ereignisprotokoll

Arbeitsteilung in zwei Ebenen

s12 Teilen Sie das System explizit in zwei Ebenen auf:

  • Steuerungsebene: JSON-Datei in .tasks/. Eine Aufgabe ist eine abstrakte Einheit dessen, „was zu tun ist“, einschließlich Abhängigkeiten, Eigentümer und Status.
  • Ausführungsebene: Verzeichnis in .worktrees/. Worktree ist der physische Container „wo es zu tun ist“, ein Verzeichnis + ein Zweig.

Die beiden sind bidirektional über task.worktree und worktree.task_id verbunden.

Diese Art der Entkopplung ermöglicht Ihnen: Den Aufgabenverwaltungsmechanismus wiederzuverwenden, aber die Ausführungsumgebung zu ändern (z. B. nicht Git Worktree, sondern Docker-Container). Oder ändern Sie den Aufgabenmechanismus, verwenden Sie aber den Arbeitsbaum wieder (z. B. keine JSON-Datei, sondern eine Datenbank).

Demonstration des Lebenszyklus

Gehen Sie es unten vollständig durch: Aufgabe erstellen → Arbeitsbaum erstellen → Befehle ausführen → behalten oder entfernen. Jeder Schritt verfügt über einen Ereignisprotokoll-Eintrag (events.jsonl), der zur Beobachtbarkeit in der Produktion verwendet wird.

keep vs remove

Es gibt zwei Enden, wenn Worktree seine Mission erfüllt:

  • remove: git worktree remove --force, lösche das Verzeichnis. Auch Filialen werden grundsätzlich aufgeräumt. Es ist gleichbedeutend mit „Ich möchte diese Erkundung nicht mehr.“
  • keep: Markieren Sie nur status: beibehalten in .worktrees/index.json, und das physische Verzeichnis bleibt erhalten. Es ist äquivalent zu „Ich werde dieses Ergebnis erhalten, warte, bis ich es zusammenführe.“

Gemeinsamer Modus: Subagent führt einen experimentellen Refactor aus → wird mit guten Ergebnissen ausgeführt → behalten → menschliche Überprüfung → wird mit dem Hauptzweig zusammengeführt → manuell entfernt. Schlechte Wirkung? Einfach entfernen und wegwerfen.

Interaktiv

Widget 1 · Lebenszyklus · Von der Aufgabe erstellen bis zum Behalten/Entfernen

Lösen Sie schrittweise 5 Ereignisse aus. Sehen Sie sich links den Festplattenstatus (.tasks/ + .worktrees/) und rechts das Ereignisprotokoll (events.jsonl) an.

磁盘状态
events.jsonl(append-only)
Interaktiv

Widget 2 · Parallele Spuren · 3 Agenten gleichzeitig in 3 Arbeitsbäumen

Alice / Bob / Charlie ändern dieselbe Datei gleichzeitig in verschiedenen Arbeitsbäumen. Sind sie füreinander sichtbar? Wird es einen Konflikt geben?

📂 .worktrees/alice/
📂 .worktrees/bob/
📂 .worktrees/charlie/
Interaktiv

Widget 3 · Entscheidungsfluss · Wählen Sie für jeden Schritt den richtigen nächsten Schritt

Wenn ein Agent in der Produktion die Arbeit im Arbeitsbaum abschließt, sollte sie beibehalten oder entfernt werden? 5 Szenen.

答对 0 / 5