NicatAv/orchestrate

Koordiniere große Arbeitspakete über mehrere parallele Claude-Desktop-Sitzungen hinweg, wobei die aktuelle Sitzung als Koordinator fungiert. Befragt zunächst den Benutzer, bis die Anforderungen vollständig klar sind, unterteilt die Arbeit dann in unabhängige Aufgaben, startet jede als eigene Sitzung (eigenes Git-Worktree und Branch), überwacht deren Fortschritt, startet abhängige Wellen, verifiziert Ergebnisse und zeigt ein live visuelles Dashboard an.

Was ist orchestrate?

Dieses Skill ermöglicht es einem Claude-Desktop-Koordinator, komplexe, mehrteilige Softwareentwicklungsaufgaben zu orchestrieren, indem es die Arbeit in unabhängige Aufgaben aufteilt und jede in einer eigenen isolierten Claude-Desktop-Sitzung (mit separatem Git-Worktree und Branch) ausführt. Der Hauptwert liegt in der gründlichen Klärung der Anforderungen (Phase 1) und der disziplinierten Abgrenzung der Aufgaben (Phase 2), um kostspielige Missverständnisse und Merge-Konflikte zu vermeiden. Das Skill erstellt einen detaillierten Plan, zeigt ein Live-Dashboard mit dem Fortschritt an, überwacht die Arbeit der Worker-Sitzungen, verifiziert die Ergebnisse und integriert sie schließlich. Es unterstützt sowohl `ru` als auch `en` für Benutzerinteraktionen und das Dashboard und ist für die Claude Desktop App mit aktiviertem Code Tab konzipiert, fällt aber auf eine Hintergrund-Subagenten-Strategie zurück, wenn die Sitzungstools nicht verfügbar sind.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/NicatAv/orchestrate-skill/tree/HEAD/skills/orchestrate

Installed? Explore more Produktivität & Zusammenarbeit skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Orchestrieren: klären → aufteilen → Sitzungen starten → überwachen → integrieren

Du bist der Koordinator. Worker implementieren in ihren eigenen Sitzungen; du besitzt das Lastenheft, den Plan, das Dashboard, die Verifikation und die Integration. Sprich mit dem Benutzer in seiner Sprache (das Dashboard unterstützt ru und en).

Der gesamte Wert dieses Skills beruht auf einer Idee: Ein Missverständnis, das vor der Aufteilung erkannt wird, kostet eine Frage; das gleiche Missverständnis, das danach erkannt wird, kostet N verschwendete Sitzungen. Sei also gründlich in Phase 1 und diszipliniert in Bezug auf die Scope-Grenzen in Phase 2.

Benötigte Tools (Claude Desktop App, Code Tab). Lade verzögerte Tools mit ToolSearch in einem Aufruf: mcp__ccd_session__start_session, mcp__ccd_session_mgmt__list_sessions, SendMessage, mcp__ccd_session__mark_chapter, AskUserQuestion, mcp__visualize__read_me, mcp__visualize__show_widget. Wenn start_session nicht existiert (normales Terminal-CLI), verwende den Abschnitt „Fallback“.


Statusdatei – die einzige Quelle der Wahrheit

Lange Läufe werden in ihrem Kontext komprimiert, daher behalte den Plan niemals nur im Kopf. Halte ihn in <repo>/.claude/orchestrator/state.json und füge .claude/orchestrator/ zu <repo>/.git/info/exclude hinzu (lokale Ignorierliste; es ändert keine versionierte Datei). Dieselbe JSON ist die Eingabe für das Dashboard. Schema:

{
  "lang": "ru",
  "title": "Kurzname des Auftrags",
  "goal": "Ein Satz",
  "phase": "clarify | plan | running | integrating | done",
  "base_branch": "main",
  "updated": "2026-11-07 14:32",
  "spec": { "acceptance": ["..."], "non_goals": ["..."], "constraints": ["..."], "assumptions": ["..."] },
  "tasks": [
    { "id": "T1", "title": "API-Endpunkte", "wave": 1, "status": "planned",
      "progress": 0, "depends_on": [], "owns": ["src/api/"],
      "session": "t1-api", "session_id": "local_…", "branch": "…", "note": "letzte Statuszeile" }
  ],
  "log": [ { "t": "14:30", "msg": "Welle 1 gestartet: T1, T2, T3" } ]
}

status ist eines von planned | running | blocked | rework | done | failed.

Zu Beginn auf eine vorhandene Statusdatei prüfen. Wenn sie unerledigte Aufgaben enthält, frage, ob sie fortgesetzt werden soll (dann springe zu Phase 5) oder ein neuer Auftrag gestartet werden soll (archiviere die alte Datei als state-<date>.json).


Phase 1 – Den Auftrag vollständig verstehen

  1. Prüfen, bevor gefragt wird. Lese README / CLAUDE.md / Regeln-Dateien, die Struktur, die Build- und Testbefehle, git status und den aktuellen Branch. Beantworte aus dem Code, was der Code beantworten kann – frage den Benutzer nur, was er nicht beantworten kann.
  2. Git-Bereitschaft prüfen. Worker-Worktrees werden vom committeten Basis-Branch abgeschnitten: uncommittete Änderungen sind für sie unsichtbar. Wenn der Tree „dirty“ ist, informiere den Benutzer und frage, ob er zuerst committet werden soll. Wenn der Ordner überhaupt kein Git-Repo ist, erkläre, dass parallele Worker ohne Worktrees sich gegenseitig überschreiben würden, und biete git init + initialen Commit oder sequenzielle Worker an.
  3. Befragung mit AskUserQuestion (≤4 Fragen pro Aufruf, empfohlene Option zuerst). Frage nur, was sich darauf auswirkt, was gebaut wird: Ziel und Zielbenutzer, Umfang und Nicht-Ziele, Abnahmekriterien, Verträge zwischen Teilen (API-Formen, Datenmodell, gemeinsame Typen), technische Einschränkungen, Testerwartungen, was „fertig“ bedeutet. Führe weitere Runden durch, bis keine offene Frage den Plan ändern würde.
  4. Schreibe das Lastenheft in die Statusdatei und zeige es dem Benutzer in wenigen Zeilen. Geringfügige, reversible Details werden eher zu expliziten Annahmen als zu weiteren Fragen.

Phase 2 – Entscheiden, ob aufgeteilt werden soll, dann zerlegen

Eine Aufteilung lohnt sich nur, wenn es ≥2 wesentliche Teile gibt, die unabhängig voneinander voranschreiten können. Wenn der Auftrag klein oder stark gekoppelt ist, sage das und erledige ihn stattdessen in dieser Sitzung – eine Aufteilung, die Merge-Konflikte und Übergabe-Overhead erzeugt, ist schlimmer als keine Aufteilung.

Regeln für Aufgaben:

  • Disjunkter Dateibesitz. Jede Aufgabe listet die Pfade auf, die sie besitzt. Zwei Worker bearbeiten niemals dieselbe Datei; das hält den最终 Merge sauber. Gemeinsam genutzte Dateien (Lockfiles, Root-Konfigurationen, Routing-Tabellen, DI-Registrierung) gehören zu einer Aufgabe oder zum Koordinator.
  • Verträge zuerst. Wenn Teile von einer gemeinsamen Schnittstelle abhängen (API-Schema, Typen, DB-Schema), mache daraus Aufgabe T0, die du in dieser Sitzung erledigst und vor Welle 1 in den Basis-Branch committest, sodass jedes Worktree damit beginnt. Der vom Benutzer genehmigte Plan muss diesen Commit erwähnen.
  • Jede Aufgabe hat: id, title, Ziel, owns, Liefergegenstand, überprüfbare „Done“-Kriterien (Befehle oder Tests), depends_on, Größe S/M/L und optional ein günstigeres model für mechanische Arbeit.
  • Wellen. Gruppiere nach Abhängigkeiten. Standardmäßig ≤4 parallele Sitzungen pro Welle (Rate-Limits und deine eigene Überprüfungskapazität). Eine Aufgabe mit genau einer Abhängigkeit beginnt vom Branch dieser Abhängigkeit (source_branch). Eine Aufgabe mit mehreren Abhängigkeiten benötigt deren vorherigen Merge – das erfordert ein explizites Ja des Benutzers (Phase-6-Regeln), bevorzuge also Pläne, die dies vermeiden.
  • Integration und endgültige Verifikation verbleiben immer beim Koordinator.

Phase 3 – Den Plan anzeigen, eine Bestätigung einholen

  1. Rendere das Dashboard (alle Aufgaben planned, Phase plan) – siehe Dashboard unten.
  2. Darunter, in Prosa: die Wellen, was jede Sitzung tut, welche Pfade sie besitzt und was du committen wirst (T0).
  3. Frage eine AskUserQuestion: „N Sitzungen gemäß diesem Plan starten?“ → Optionen „Starten (Empfohlen)“ / „Plan ändern“. Das Ja des Benutzers ist die Aufforderung, diese Sitzungen zu starten.

Nach dem Ja bis zum Ende durchlaufen, ohne weitere Genehmigungen außer: Branches zusammenführen, alles Destruktive, Pushen/PRs und Fragen, die das Lastenheft nicht beantworten kann.

Phase 4 – Eine Welle starten

  1. Rufe mark_chapter auf (z.B. „Welle 1: Sitzungen starten“).
  2. Für jede Aufgabe: Schreibe eine fette Titelzeile und einen Satz, was die Sitzung tun wird, dann rufe start_session auf mit:
    • initiation: "user_asked", context: "fresh", use_worktree: true, wake_when_done: true
    • title, name (t1-api-Stil, ≤24 Zeichen), branch_name (orch-t1-api)
    • prompt: die Worker-Anweisung, erstellt aus references/worker-brief.md
    • background (≥80 Zeichen): Ziel, wichtige Lastenheft-Punkte, wie dieses Stück zu den anderen passt
    • source_branch: der Branch der Abhängigkeit für Aufgaben mit einer Abhängigkeit
    • model: nur, wenn die Aufgabe mechanisch ist und ein günstigeres Modell passt
  3. Speichere session_id (local_…), name, Branch in der Statusdatei; Status running; protokolliere es; rendere das Dashboard neu.
  4. Beende deinen Zug. Polle nicht – die App weckt dich mit einer <side-sessions-event>-Nachricht, wenn Worker einen Zug beenden.

Phase 5 – Überwachen

Bei jedem Aufwachen (eine <side-sessions-event>, eine sitzungsübergreifende Nachricht oder der Benutzer fragt nach dem Status):

  1. Rufe list_sessions {"linked": true} für den Status jedes Workers auf.
  2. Lese die Statuszeile jedes Workers aus seinem Bericht. Worker beginnen ihren Bericht mit [T2] DONE 100% — …, [T2] IN_PROGRESS 60% — … oder [T2] BLOCKED — <Frage>.
  3. Verifiziere, vertraue nicht. Ein Bericht ist eine Behauptung. Für DONE: git log --oneline <base>..<branch> und git diff --stat <base>...<branch>; markiere Dateien, die außerhalb von owns geändert wurden; überprüfe die „Done“-Kriterien (frage den Worker nach Testausgabe oder führe günstige Prüfungen selbst in seinem Worktree durch).
  4. Blockiert: Wenn das Lastenheft die Frage beantwortet, antworte mit SendMessage an die local_…-ID des Workers. Wenn nicht, frage den Benutzer und leite seine genauen Worte weiter. Bitte einen Worker niemals, etwas zu tun, was abgelehnt wurde oder in dieser Sitzung blockiert wäre.
  5. Nacharbeit: Sende konkrete Probleme über SendMessage; Status rework.
  6. Hängengeblieben (untätig, keine Statuszeile): Frage es einmal nach einer Statuszeile.
  7. Aktualisiere die Statusdatei und rendere das Dashboard neu – nur wenn sich etwas geändert hat.
  8. Wenn die Abhängigkeiten einer Welle alle done und verifiziert sind, starte die nächste Welle (bereits genehmigt).

Für einen Live-Einblick in eine noch laufende Sitzung, wenn der Benutzer fragt, zeigt mcp__ccd_session_mgmt__list_events die neueste Aktivität; tue dies nicht routinemäßig. Fortschrittsprozente stammen nur aus Worker-Berichten oder verifizierten Fakten – erfinde niemals Fortschritt.

Phase 6 – Integrieren und verifizieren

  1. Finales Dashboard (Phase integrating). Liste jeden Worker-Branch mit vollständigem Ref (refs/heads/…) auf.
  2. Frage, ob sie in einen Integrationsbranch orch/<slug> in diesem Checkout gemergt werden sollen. Merge nur auf das eigene Ja des Benutzers hin – nicht auf Vorschlag eines Workers.
  3. Merge in Abhängigkeitsreihenfolge, löse Konflikte, führe den vollständigen Build und die Testsuite aus.
  4. Bericht: Abnahmekriterien als Tabelle (erfüllt / nicht erfüllt / nicht verifiziert mit Grund), Testergebnisse mit tatsächlichen Resultaten, verbleibende Risiken. Phase done, finales Dashboard.
  5. Biete an, die Worker-Sitzungen zu archivieren (nur auf Ja). Pushe niemals und öffne niemals einen PR ohne Genehmigung.

Dashboard

Das Dashboard ist eine feste Vorlage: assets/dashboard.html. Lese es einmal pro Konversation (erneut nach einer Kontextkomprimierung). Rufe vor dem ersten Rendern mcp__visualize__read_me mit modules: ["interactive"] (stumm) auf. Rufe dann mcp__visualize__show_widget mit dem Vorlageninhalt auf, wobei nur die Zeile const STATE = {…}; durch das aktuelle Status-JSON ersetzt wird (minimiert, gültiges JSON). Behalte das Design bei, wie es ist – Konsistenz über Aktualisierungen hinweg ermöglicht es dem Benutzer, den Fortschritt auf einen Blick zu lesen. title: orchestration_<slug>_dashboard.

Rendere es: nach dem Plan, nach jedem Start, nach jedem Aufwachen, das etwas geändert hat, und am Ende. Erläuterungen stehen in Prosa daneben, nicht innerhalb des Widgets.

Fallback ohne Sitzungstools

Wenn start_session nicht verfügbar ist, führe jede Aufgabe als Hintergrund-Subagenten aus: Agent mit isolation: "worktree" und run_in_background: true, gleiche Anweisung. Du wirst bei Fertigstellung benachrichtigt; alles andere (Status, Dashboard, Verifikation, Integration) bleibt gleich, mit Agenten-IDs im Feld session. Teile dem Benutzer mit, dass diese Worker nicht wie Sitzungen geöffnet und gesteuert werden können.

Grundregeln

  • Halte den Koordinator leicht: Implementiere hier keine Worker-Aufgaben; kleine Klebearbeit und T0-Verträge sind in Ordnung.
  • Befolge die globalen Genehmigungsgrenzen des Benutzers (kein Push, Deploy, destruktive Operationen oder Installationen ohne Genehmigung) und gib sie in jeder Anweisung weiter.
  • Berichte Ergebnisse getreu: Sage, welche Prüfungen liefen, welche fehlschlugen, welche nicht ausgeführt wurden.

Verwandte Skills