{"meta":{"title":"Flottenmodus","intro":"Der Flottenmodus ist Copilots paralleles Orchestrierungsmuster für Aufgaben, die auf unabhängige Unteragenten verteilt werden können. In den Recherchenotizen zur Runtime wird der Flottenmodus beschrieben als „das in die Runtime integrierte Muster zum parallelen Beauftragen mehrerer Unter-Agents über das task-Tool mit SQL-Todos als gemeinsamem Koordinationsstatus“. Verwenden Sie diesen Modus, wenn eine übergeordnete Sitzung mehrere Worker koordinieren, ihre Ergebnisse erfassen und die Unterhaltung mit dem kombinierten Kontext fortsetzen soll.","product":"GitHub Copilot","breadcrumbs":[{"href":"/de/copilot","title":"GitHub Copilot"},{"href":"/de/copilot/how-tos","title":"Vorgehensweisen"},{"href":"/de/copilot/how-tos/copilot-sdk","title":"Copilot SDK"},{"href":"/de/copilot/how-tos/copilot-sdk/features","title":"Funktionen"},{"href":"/de/copilot/how-tos/copilot-sdk/features/fleet-mode","title":"Flottenmodus"}],"documentType":"article"},"body":"# Flottenmodus\n\nDer Flottenmodus ist Copilots paralleles Orchestrierungsmuster für Aufgaben, die auf unabhängige Unteragenten verteilt werden können. In den Recherchenotizen zur Runtime wird der Flottenmodus beschrieben als „das in die Runtime integrierte Muster zum parallelen Beauftragen mehrerer Unter-Agents über das task-Tool mit SQL-Todos als gemeinsamem Koordinationsstatus“. Verwenden Sie diesen Modus, wenn eine übergeordnete Sitzung mehrere Worker koordinieren, ihre Ergebnisse erfassen und die Unterhaltung mit dem kombinierten Kontext fortsetzen soll.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n## Wann der Flottenmodus verwendet werden sollte\n\nDer Flottenmodus ist nützlich, wenn die Arbeit vor der Ausführung unterteilt und jede Einheit ausgeführt werden kann, ohne auf die anderen zu warten.\n\nGeeignete Optionen sind:\n\n* Multi-Datei-Refactorings, bei denen jeder Worker für eine Datei, ein Paket oder ein Sprach-SDK zuständig ist.\n* Batchüberprüfungen, bei denen jeder Mitarbeiter eine separate Diff-, Modul- oder Warnungsgruppe überprüft.\n* Parallele Forschung in unabhängigen Repositorys, Diensten oder Featurebereichen.\n* Die Dokumentation wird aktualisiert, wo jeder Mitarbeiter eine Seite oder ein Thema besitzt.\n* Migrationsaufgaben, bei denen jeder Mitarbeiter ein eigenes Segment überprüfen und zurückmelden kann.\n\nVermeiden Sie den Flottenmodus für:\n\n* Sequenzielle Vorgänge, bei denen Schritt 2 die konkrete Ausgabe aus Schritt 1 benötigt.\n* Eng gekoppelte Bearbeitungen, bei denen Die Mitarbeiter für die gleichen Dateien kämpfen würden.\n* Kleine Aufgaben, die ein synchroner Sub-Agent oder der übergeordnete Agent schnell abschließen kann.\n* Aufgaben, die kontinuierliche gemeinsame Abstimmung statt klarer Zuständigkeit erfordern.\n\nDer Flottenmodus funktioniert am besten, wenn die übergeordnete Sitzung klare Arbeitseinheiten erstellen kann, einen Besitzer pro Einheit zuweisen und definieren kann, was jeder Mitarbeiter zurückgeben muss.\n\n## Starten des Flottenmodus\n\nDas SDK stellt den Flottenmodus über den Session-RPC-Namespace in mehreren Sprachen bereit. Die Bindung ist in der generierten RPC-Oberfläche experimentell; heften Sie sowohl das SDK als auch die Copilot CLI Runtime an, wenn Ihre Anwendung von ihnen abhängt.\n\n### Innerhalb einer Sitzung\n\nDie Verbindungsmethode ist `session.fleet.start`. Der optionale `prompt` ist mit den Anweisungen für die Flottenorchestrierung der Runtime kombiniert.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nconst result = await session.rpc.fleet.start({\n    prompt: \"Refactor each SDK package independently, then summarize the changes.\",\n});\n\nif (result.started) {\n    console.log(\"Fleet mode started\");\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot.rpc import FleetStartRequest\n\nresult = await session.rpc.fleet.start(\n    FleetStartRequest(\n        prompt=\"Review each service independently, then summarize the risks.\"\n    )\n)\n\nif result.started:\n    print(\"Fleet mode started\")\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\nprompt := \"Update each package independently, then report validation results.\"\nresult, err := session.RPC.Fleet.Start(ctx, &rpc.FleetStartRequest{\n    Prompt: &prompt,\n})\nif err != nil {\n    return err\n}\nif result.Started {\n    fmt.Println(\"Fleet mode started\")\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nvar result = await session.Rpc.Fleet.StartAsync(\n    \"Audit each project independently, then summarize the findings.\");\n\nif (result.Started)\n{\n    Console.WriteLine(\"Fleet mode started\");\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"rust\" data-label=\"Rust\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Rust</div>\n\n```rust\nuse github_copilot_sdk::rpc::FleetStartRequest;\n\nlet result = session\n    .rpc()\n    .fleet()\n    .start(FleetStartRequest {\n        prompt: Some(\"Research each crate independently, then summarize the plan.\".into()),\n    })\n    .await?;\n\nif result.started {\n    println!(\"Fleet mode started\");\n}\n```\n\n</div>\n\n</div>\n\nNative typisierte Bindings für den Flottenmodus wurden in Node.js/TypeScript, Python, Go, .NET und Rust verifiziert. In dieser Verzweigung wurde in `java/src/main/java` keine Java-Bindung gefunden, daher werden Java-Beispiele nicht angegeben, bis die Oberfläche verfügbar ist.\n\n### Vom Planmodus\n\nBei Benutzeroberflächen im Planmodus kann die Bereitstellung der Flotte über die Rückgabe der Ausgangsaktion `autopilot_fleet` gestartet werden. Die generierten Sitzungsereignistypen beschreiben sie wie:\n\n```typescript\ntype ExitPlanModeAction =\n  | \"exit_only\"\n  | \"interactive\"\n  | \"autopilot\"\n  /** Exit plan mode and continue with parallel autonomous workers. */\n  | \"autopilot_fleet\";\n```\n\nVerwenden Sie diese Methode, wenn ein Benutzer einen Plan genehmigt, der bereits unabhängige Arbeitsaufgaben enthält. Verwenden Sie `autopilot` für einen einzelnen autonomen Worker und `interactive`, wenn der Benutzer auf dem Laufenden bleiben soll.\n\n## Wie Sub-Agenten zusammenarbeiten\n\nDer Flottenmodus beruht auf einem expliziten Koordinationsstatus statt auf implizitem gemeinsam genutztem Speicher. Der übergeordnete Agent unterteilt die Arbeit in Todos, jeder Unter-Agent besitzt einen Todo, und der Orchestrator beauftragt Worker, deren Abhängigkeiten bereits abgeschlossen sind.\n\nDas kanonische Schema lautet:\n\n```sql\nCREATE TABLE todos (\n    id TEXT PRIMARY KEY,\n    title TEXT NOT NULL,\n    description TEXT,\n    status TEXT DEFAULT 'pending'\n);\n\nCREATE TABLE todo_deps (\n    todo_id TEXT,\n    depends_on TEXT,\n    PRIMARY KEY (todo_id, depends_on)\n);\n```\n\nJeder Todo durchläuft einen kleinen Zustandsautomaten:\n\n```text\npending -> in_progress -> done\n                       \\-> blocked\n```\n\nEin Unter-Agent sollte:\n\n1. genau ein verfügbares Todo beanspruchen und dazu `status = 'in_progress'` festlegen,\n2. nur innerhalb des Umfangs dieses Todos arbeiten,\n3. Speichern Sie das Ergebnis in der Konversation oder in der Ausgabe der entsprechenden Aufgabe.\n4. Legen Sie `status = 'done'` fest, wenn Sie fertig sind.\n5. Legen Sie fest `status = 'blocked'` , wann der Vorgang nicht fortgesetzt werden kann, und schließen Sie den Grund ein.\n\nDer Orchestrator kann Aufgaben finden, deren Abhängigkeiten mit einer Abfrage wie der folgenden erfüllt sind:\n\n```sql\nSELECT t.*\nFROM todos t\nWHERE t.status = 'pending'\n  AND NOT EXISTS (\n      SELECT 1\n      FROM todo_deps td\n      JOIN todos dep ON td.depends_on = dep.id\n      WHERE td.todo_id = t.id\n        AND dep.status != 'done'\n  );\n```\n\nDieses Muster weist jedem Worker eine klare Zuständigkeit zu und ermöglicht es der übergeordneten Sitzung, nachzuvollziehen, was bereit, in der Ausführung, abgeschlossen oder blockiert ist.\n\n## Lifecycle Hooks\n\nDer Fleet-Modus ruft Unteragenten über den Aufgabenmechanismus der Laufzeitumgebung auf. Die Runtime gibt Hook-Aktivitäten für Toolaufrufe durch Unter-Agents aus: Im Änderungsprotokoll zur Runtime 1.0.52 wird vermerkt, dass `preToolUse`, `postToolUse`, `subagentStart` und `subagentStop` für Toolaufrufe von Unter-Agents korrekt ausgelöst werden.\n\nIn dieser Verzweigung wurde kein dedizierter SDK-Hook-Rückruf für `subagentStart` oder `subagentStop` in der öffentlichen SDK-Oberfläche gefunden. Nutzer des SDK können die Aktivität des Sub-Agents über den generischen Sitzungsereignisstrom beobachten, der Ereignisse wie `subagent.started`, `subagent.completed`, `subagent.failed`, `subagent.selected` und `subagent.deselected` enthält.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nsession.on((event) => {\n    if (event.type === \"subagent.started\") {\n        console.log(`Started ${event.data.agentDisplayName}`);\n    }\n\n    if (event.type === \"subagent.completed\") {\n        console.log(`Completed ${event.data.agentDisplayName}`);\n    }\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\ndef handle_event(event):\n    if event.type == \"subagent.started\":\n        print(f\"Started {event.data.agent_display_name}\")\n    elif event.type == \"subagent.completed\":\n        print(f\"Completed {event.data.agent_display_name}\")\n\nunsubscribe = session.on(handle_event)\n```\n\n</div>\n\n</div>\n\nInformationen zur Hookkonfiguration, die bereits auf der SDK-Ebene verfügbar gemacht wird, finden Sie unter [Arbeiten mit Hooks](/de/copilot/how-tos/copilot-sdk/features/hooks). Informationen zu Event-Payloads von Sub-Agents finden Sie unter [Angepasste Agents und Orchestrierung von Unteragenten](/de/copilot/how-tos/copilot-sdk/features/custom-agents).\n\n## Plugin-Unteragenten\n\nDie Runtime kann über `--plugin-dir` Plug-Ins laden. Auf diese Weise geladene Plug-Ins können ihre Agents im Prompt-Modus als verfügbare `task(agent_type=...)`-Unter-Agent-Typen registrieren, was bedeutet, dass der Flottenmodus Aufgaben an diese über Plug-Ins bereitgestellte Workertypen zuweisen kann.\n\nDies ist derzeit eher ein Konfigurationsmuster auf Runtime-Ebene als eine dokumentierte Registrierungs-API auf SDK-Ebene. Konfigurieren Sie die Copilot CLI-Laufzeit mit dem Plug-In-Verzeichnis, und verbinden Sie dann den SDK-Client mit dieser Laufzeit. Native SDK-Hilfsprogramme zum Registrieren von Plug-In-Sub-Agent-Typen können in Zukunft hinzugefügt werden.\n\nKonzeptionell kann eine Flottenaufforderung dann nach einem bestimmten Arbeitstyp fragen:\n\n```text\nUse task(agent_type=\"security-review\") for each independent package.\nRun the workers in parallel and summarize only high-confidence findings.\n```\n\nHalten Sie die vom Plug-In bereitgestellten Sub-Agent-Typen schmal und beschreibend, damit der Orchestrator sie zuverlässig auswählen kann.\n\n## Bewährte Methoden\n\n* Zerlegen Sie die Arbeit in unabhängige Einheiten, bevor Sie den Flottenmodus starten.\n* Minimieren Sie Abhängigkeiten zwischen Todos; Abhängigkeiten reduzieren Parallelität.\n* Geben Sie jedem Todo eine dauerhafte ID, einen klaren Titel und eine vollständige Beschreibung.\n* Weisen Sie jedem Unter-Agent jeweils genau ein Todo zu.\n* Verwenden Sie Hintergrund-Unteragenten für echte parallele Verarbeitung.\n* Verwenden Sie synchrone Sub-Agent-Aufrufe für serialisierte Schritte oder Validierungsgates.\n* Stellen Sie jedem Sub-Agent einen vollständigen Kontext zur Verfügung; Sub-Agents sind über Anrufe hinweg statuslos.\n* Fügen Sie Dateipfade, Befehle, erwartete Ausgaben und Einschränkungen in jede Arbeitsaufforderung ein.\n* Beauftragen Sie nicht einen einzelnen Unter-Agent im Hintergrund; verwenden Sie stattdessen einen synchronen Aufruf oder Batch für mehrere Worker gleichzeitig.\n* Vermeiden Sie die Zuweisung überlappender Dateien an verschiedene Bearbeiter, es sei denn, der übergeordnete Agent wird Konflikte ausdrücklich abgleichen.\n* Sorgen Sie dafür, dass jeder Worker meldet, was er geändert hat, wie er die Änderung überprüft hat und was blockiert bleibt.\n* Lassen Sie den übergeordneten Agent das kombinierte Ergebnis überprüfen, nachdem die Mitarbeiter fertig sind.\n\n## Einschränkungen und offene Fragen\n\n* Der Flottenmodus wird über generierte Sitzungs-RPC-Bindungen bereitgestellt und ist in mehreren SDKs als experimentell gekennzeichnet.\n* Das SQL-Todos-Muster ist das kanonische Koordinationsmodell in der Anleitung der Runtime. Aber ob es sich um eine stabile Erweiterbarkeitsoption für SDK-Consumer handelt, ist nach wie vor eine offene Frage.\n* `subagentStart` und `subagentStop` sind Namen von Laufzeit-Hooks; dieser Branch stellt SDK-Nutzern den Lebenszyklus von Sub-Agents über den generischen Sitzungsereignisstrom bereit und nicht über dedizierte Hook-Callbacks.\n* Die Registrierung von Unter-Agents aus einem Plug-In wird in der Runtime-Ebene über `--plugin-dir` konfiguriert; in dieser Verzweigung wurde keine Hilfsfunktion zur Plug-In-Registrierung auf SDK-Ebene geprüft.\n* In der Java SDK-Quelle in dieser Verzweigung wurde keine systemeigenen Java-Bindungen für `session.fleet.start` gefunden.\n* Der Flottenmodus ersetzt nicht die Überprüfung durch den übergeordneten Agenten. Parallele Worker können inkonsistente Annahmen erzeugen, die der Orchestrator abgleichen muss.\n\n## Siehe auch\n\n* [Angepasste Agents und Orchestrierung von Unteragenten](/de/copilot/how-tos/copilot-sdk/features/custom-agents)\n* [Arbeiten mit Hooks](/de/copilot/how-tos/copilot-sdk/features/hooks)"}