Viele Änderungen betreffen mehr als ein Repository: ein Feld in der API, seine Anzeige in der App, eine Zeile in der Doku. Ein Task kann all das. Er hat je Repo einen Teil, jeder ein Worktree auf demselben Branch-Namen. Die Repos kannst du vorher wählen oder den Agenten holen lassen, was er braucht; so oder so siehst du jedes, sobald es dazukommt.

Einen Task über mehrere Repos starten

Es gibt zwei Wege:

  • In Neuer Task… kein Repo oder mehrere wählen. Der Agent startet in einem eigenen Ordner unter ~/.cavvy/initiatives, der kein Repository ist und schon je gewähltem Repo einen Worktree enthält. Weitere holt er sich, wenn er sie braucht.
  • Ein gewöhnlicher Task in einem Repo. Er bekommt einen zweiten Teil, sobald sein Agent ein weiteres Repo holt. Der Agent arbeitet weiter, wo er gestartet ist, und cavvy task add nennt ihm den Pfad des neuen Worktrees.

Wie der Agent ein Repo holt

In einem Task sagt Cavvy Claude Code und Codex, welche weiteren Repos das Projekt hat. Der Agent listet sie auf und holt, was er braucht:

cavvy repos
cavvy task add shop-api

cavvy task add legt einen Worktree des Repos auf demselben Branch an, ausgehend von dessen Hauptbranch, und gibt seinen Pfad aus. Dort arbeitet und committet der Agent. Einrichtung und .worktreeinclude des Repos gelten wie bei jedem Task; die Einrichtung läuft in einem Seitenterminal, während der Agent weitermacht.

Auf das Projekt ist der Agent nicht beschränkt. cavvy task add ~/Developer/billing holt ein anderes Repo desselben Rechners, cavvy task add --clone <url> klont erst eines, neben das erste Repo des Projekts. Ein solches Repo kommt sofort ins Projekt, mit neu markiert. Siehe CLI.

Nichts geschieht unbemerkt

Jeder Teil, den ein Agent holt, erscheint sofort in der Liste unter seinem Task, ungelesen und mit Mitteilung: „… hat shop-api geholt“. Ein Repo, das neu im Projekt ist, zeigt zusätzlich neu in der Seitenleiste. Die Zeile des Tasks zeigt den dringendsten Zustand all seiner Teile, und die Teile stehen immer darunter, nie eingeklappt. Der Task erscheint bei jedem Repo, in dem er einen Teil hat.

Ein Teil kann eine eigene Sitzung haben, etwa eine, die du darin gestartet hast. Dann ändert der Agent des Tasks diesen Teil nicht nebenher: Seine Regeln sagen ihm, die Arbeit mit cavvy send an diese Sitzung zu übergeben und mit cavvy wait auf sie zu warten.

Eingreifen

Wählst du einen Task oder einen seiner Teile aus, bietet eine Leiste über den Reitern:

ElementWas es tut
Repo holenHolt selbst ein Repo des Projekts dazu, so wie der Agent mit cavvy task add.
Alle Änderungen prüfen…Ein Fenster mit den Änderungen aller Repos, mit Gesehen-Marken je Task.
Task abschließen…Schließt alle Teile gemeinsam ab; siehe unten.
Task anhalten…Stoppt nach Rückfrage alle Agenten des Tasks. Worktrees und Commits bleiben; Neu starten setzt jede Sitzung fort.
VerlaufWer was gestartet hat, welches Repo geholt wurde, welche Prüfungen bestanden oder fehlschlugen, was gemergt, geparkt oder gelöscht wurde.

Prüfen

Jeder Teil wird für sich geprüft: Fertig heißt läuft in jedem Repo mit neuen Commits, und jedes Repo behält seine eigenen Prüfungen und seinen Reviewer. Alle Änderungen prüfen…, im Menü des Tasks auch als Alle Änderungen des Tasks prüfen…, zeigt jedes Repo in einem Fenster. Das Review-Fenster eines Teils listet oben alle Repos des Tasks; ein Klick wechselt zu Änderungen, Übersicht und Prüfungen eines anderen Repos. Auch ein Teil ohne eigene Sitzung bekommt das volle Review (Review öffnen, ⇧⌘D); Kommentare und Zurückgeben… gehen an den Agenten, der daran arbeitet.

Gemeinsam abschließen

Task abschließen… in der Leiste, oder Abschließen… auf der Karte des Tasks, schließt alle Teile auf einmal ab, oder keinen. Das Fenster nummeriert die Teile in der Reihenfolge, in der sie hineingehen; zieh sie, um sie zu ändern, denn jede Basis wird der Reihe nach gepusht, und ein Push kann ein Deployment auslösen. Jeder Teil sagt, was ihn am Mergen hindern würde.

WegWas passiert
Alle Teile mergenPrüft vorher jeden Teil und mergt nur, wenn keiner scheitern würde. Dann mergt es alle in ihren Hauptordnern und pusht sie erst danach, der Reihe nach.
Merge Requests öffnenPusht jeden Teil mit Commits und öffnet dort einen Merge Request; die Requests verweisen aufeinander. Die Teile bleiben für Korrekturen aus dem Review offen.
Alle Teile parkenPusht den Branch jedes Teils und entfernt seinen Worktree. Sie warten unter Geparkt, bis du sie fortsetzt oder abschließt.

Basen nach origin pushen und Worktrees und Branches aufräumen sind Schalter über den Wegen; sie stehen zunächst so, wie es die Einstellungen des Projekts sagen. Sind in einem Teil Prüfungen fehlgeschlagen, wird nichts gemergt, bis du Auch Teile mit fehlgeschlagenen Checks einschaltest. Mergen und Parken stoppen vorher die Agenten des Tasks.

Scheitert ein Push auf halbem Weg, sind die Teile, die schon auf dem Server sind, erledigt, und der Rest bleibt hier gemergt. Rest erneut pushen pusht ihn, der Reihe nach. Ein Force-Push kommt nie vor. Sind die Merge Requests auf dem Server gemergt, hat dasselbe Fenster nichts mehr zu mergen, und sein Knopf heißt Task aufräumen.

Ein Teil, der nicht ins Ergebnis gehört, kann vorher gehen: Teil entfernen… löscht ihn, und Cavvy hebt seine Arbeit 30 Tage auf (siehe Abschließen).

Einen einzelnen Teil kannst du weiterhin mit seinem eigenen Abschließen… beenden. Ist kein Teil mehr übrig, entfernt Task entfernen im Menü des Tasks seinen Ordner.

Grenzen

Alle Teile eines Tasks laufen auf einem Rechner: dem mit den gewählten Repos, sonst dem mit den meisten Repos des Projekts, im leeren Projekt deinem Mac. Ein Projekt darf Repos anderer Rechner enthalten, aber ein Task kann sie nicht holen.