Loops und autonome Runs in Gemini CLI
Manche Programmierarbeit besteht einfach aus demselben Schritt in Wiederholung, bis eine Bedingung erfüllt ist: Code korrigieren, Tests laufen lassen, Fehler lesen, wieder korrigieren. Gemini CLI kann diesen ganzen Zyklus für Sie in einem agentischen Loop ausführen, Dateien bearbeiten und Befehle ausführen, bis die Aufgabe wirklich erledigt ist oder eine Guardrail ihn stoppt. In dieser Lektion geht es darum, diesen Loop bewusst, unbeaufsichtigt und sicher laufen zu lassen.
Der Loop ist der Standard, kein Trick
Wenn Sie Gemini CLI eine Aufgabe geben, antwortet es nicht einmal und hört dann auf. Es plant, ruft Tools auf (Datei lesen, Datei schreiben, Shell-Befehl ausführen), beobachtet das Ergebnis und entscheidet über die nächste Aktion. Dieser Zyklus aus Beobachten und Handeln wiederholt sich, bis das Modell das Ziel für erreicht hält.
Das ist das ReAct-Muster (reason + act), verdrahtet mit einer echten Shell. Die wichtige Veränderung für Sie: Sie prompten nicht mehr nach Text. Sie übergeben ein Ziel und eine Reihe von Tools und lassen den Agenten dann gegen echtes Feedback Ihres Rechners iterieren.
Eine einzelne Anfrage ist richtig, wenn die Ausgabe die Antwort ist: „Erkläre diese Funktion“, „Schreibe eine Regex“. Ein Loop ist richtig, wenn Erfolg durch eine externe Prüfung definiert ist, die der Agent nicht vortäuschen kann:
- Iterieren, bis die Test-Suite durchläuft.
- Dasselbe Refactoring gebündelt auf 40 Dateien anwenden.
- Lint- und Typfehler so lange beheben, bis der Build sauber ist.
- Eine Dependency aktualisieren und dann jedem Fehler nachgehen, den das verursacht.
Der Unterschied liegt darin, ob es eine überprüfbare Abbruchbedingung gibt. Wenn ja, schlägt ein Loop einen Chat, weil der Agent seine eigene Arbeit an der Realität misst.
Nicht-interaktive Runs
Der interaktive Modus ist die REPL, die Sie bereits kennen. Für Automatisierung brauchen Sie den nicht-interaktiven (headless) Modus: ein Befehl, kein Hin und Her, Beenden, wenn fertig. Verwenden Sie das Flag -p (prompt).
gemini -p "Run the test suite with 'npm test'. If anything fails, \
read the output, fix the code, and re-run until all tests pass. \
Do not modify test files." --model flashDer Agent hat jetzt den vollständigen Loop in der Hand. ErErDas Verhältnis von Interaktionen (Likes, Kommentare, Shares) zur Reichweite eines Inhalts. Zeigt, wie stark die Zielgruppe reagiert, gemessen an der Zahl der Personen, die den Inhalt gesehen haben.Vollständige Definition ansehen → führt npm test aus, wertet Fehler aus, bearbeitet den Quellcode und startet erneut, bis alles grün ist oder eine GuardrailGuardrailRegeln und Kontrollen, die ein KI-System in sicheren, rechtskonformen und markengerechten Grenzen halten und unerwünschte Ausgaben blockieren.Vollständige Definition ansehen → greift.
Die wichtigsten Flags hier:
--modelwählt die Stufe. Greifen Sie bei engen, klar abgegrenzten Loops zu Flash (schnelle, günstige Iteration). Wechseln Sie zu Pro, wenn das Reasoning wirklich schwierig ist: verworrene Fehler, Architekturentscheidungen, mehrdeutige Spezifikationen. Die Aliaseflashundprofolgen der aktuellen Gemini-Generation, sodass Ihre Skripte nicht brechen, wenn eine fest gepinnte Version wiegemini-2.5-flashabgekündigt wird. Pinnen Sie eine vollständige Modell-ID nur, wenn Sie reproduzierbares Verhalten brauchen, und prüfen Sie dann den Abkündigungsplan.--yolo(oder--approval-mode=yolo) genehmigt Tool-Aufrufe automatisch, sodass der Loop nie für eine Bestätigung pausiert. Mächtig und gefährlich. Wie Sie das eindämmen, folgt weiter unten.--output-format jsonliefert ein strukturiertes Ergebnis (Antwort, Statistiken, Fehler), das ein Skript oder CI-Schritt parsen kann, statt Text auszulesen.
Weil es ein einfacher Befehl ist, passt der nicht-interaktive Modus direkt in CI, cron oder einen Git-Hook. Das bedeutet „autonom“ in der Praxis: kein Mensch in der REPL.
Scheduling und unbeaufsichtigte Trigger
Gemini CLI hat keinen eingebauten Scheduler. Sie binden es in die Tools ein, die Sie bereits nutzen. Das ist ein Feature, keine Lücke: Die CLI bleibt ein kombinierbarer Unix-Baustein.
Ein nächtlicher Dependency- und Test-Durchlauf per cron:
# Täglich 2:00 Uhr: Upgrades versuchen, Tests grün halten, PR öffnen
0 2 * * * cd /srv/app && gemini -p "$(cat prompts/nightly-deps.txt)" \
--yolo --model flash >> logs/nightly.log 2>&1Oder ein GitHub-Actions-Job, ausgelöst nach Zeitplan oder durch issue-Labels, bei dem Gemini CLI triagiert und einen Fix-Branch entwirft. Das Muster ist identisch: Ein externer Trigger startet einen nicht-interaktiven Run, und der Run übernimmt das Looping.
Die offizielle Flag-Referenz und Konfiguration finden Sie in der [Gemini-CLI-Dokumentation](https://github.com/google-gemini/gemini-cli).
Gemini CLI: Agentic coding from your terminal
Ausgearbeitetes Beispiel: iterieren, bis der Build durchläuft
Hier ist ein sauberer, eingegrenzter autonomer Run, den Sie anpassen kkDie durchschnittliche Zahl neuer Nutzer, die jeder bestehende Nutzer über Empfehlungen generiert. Über 1,0 verstärkt sich das Wachstum selbst und wird exponentiell.Vollständige Definition ansehen →önnen. Er begrenzt die Arbeit, verbietet riskante Schritte und liefert ein prüfbares Ergebnis, statt stillschweigend auf main zu pushen.
#!/usr/bin/env bash
set -euo pipefail
BRANCH="auto/fix-build-$(date +%Y%m%d-%H%M)"
git switch -c "$BRANCH"
gemini --yolo --model flash -p '
Goal: make the build and tests pass.
Steps:
1. Run "npm run build" and "npm test".
2. If either fails, read the error, make the smallest fix, re-run.
3. Repeat until both succeed.
Rules:
- Never edit files under /tests or /node_modules.
- Never touch package.json versions.
- If unresolved after 8 attempts, stop and summarize what remains.
'
# Review-Gate durch einen Menschen: Der Agent hat gebrancht, wir entscheiden über den Merge.
git push -u origin "$BRANCH"
echo "Review the PR before merging: $BRANCH"Achten Sie darauf, was das sicher statt leichtsinnig macht:
- Die Abbruchbedingung ist extern und objektiv. Ob „beide erfolgreich“ sind, entscheiden die Exit-Codes von
buildundtest, nicht die Meinung des Modells. - Die Obergrenze für Versuche steht im Prompt. „8 Versuche, dann stoppen und zusammenfassen“ verhindert eine Endlosspirale bei einem nicht behebbaren Fehler.
- Gesperrte Pfade sind explizit benannt. Der Agent kann Tests nicht dadurch zum Bestehen bringen, dass er sie löscht, ein klassischer Fehlermodus.
- Das Ergebnis landet auf einem Branch. Kein autonomer Run berührt Ihren main-Branch. Ein Mensch öffnet und merged den PR.
Dieser letzte Punkt ist die ganze Philosophie. Autonomie ist für die Arbeit da. Der Merge bleibt Ihre Sache.
Abbruchbedingungen: wie Loops tatsächlich enden
Ein agentischer Loop endet aus einem von vier Gründen. Planen Sie für alle vier.
- Erfolg. Die überprüfbare Bedingung ist erfüllt (Tests grün, Dateien verarbeitet). Das ist der Idealfall.
- Limit für Versuche oder Turns. Sie haben festgelegt, dass nach N Versuchen Schluss ist. Setzen Sie das immer. Loops ohne Obergrenze sind der Grund, warum man um 3 Uhr nachts einen außer Kontrolle geratenen Run entdeckt.
- Kosten- oder Token-Limit. Der Run erreicht ein von Ihnen gesetztes Budget (nächster Abschnitt).
- Harter Fehler, von dem sich der Agent nicht erholen kann. Fehlende Zugangsdaten, ein Befehl, der nicht existiert, eine Berechtigungssperre.
Der gefährliche Fall ist keiner davon: Der Agent glaubt, Fortschritte zu machen, dreht sich aber mit demselben fehlerhaften Fix im Kreis. Deshalb ist „kleinster Fix, erneut ausführen“ plus Versuchslimit besser als ein offenes „mach weiter“. Begrenzen Sie jede Dimension: Versuche, Zeit und Geld.
Kostenobergrenzen und Budgetkontrolle
Ein unbeaufsichtigter Loop, der in jedem Turn ein Modell aufruft, kann unbemerkt Kosten anhäufen. Drei Verteidigungslinien, von der günstigsten zur härtesten:
Wählen Sie das Modell passend zur Aufgabe. Flash bewältigt die meisten Loops nach dem Muster „iterieren bis grün“ zu einem Bruchteil der Kosten von Pro. Schicken Sie keinen Linter-Fix-Loop an Pro.
Begrenzen Sie den Loop im Prompt. Weniger Versuche bedeuten weniger Turns und damit weniger TokensTokensEin Token ist die grundlegende Texteinheit, die Sprachmodelle verarbeiten, oft ein Wortfragment, ein ganzes Wort oder ein Satzzeichen und nicht ein einzelnes Zeichen.Vollständige Definition ansehen →. Ein enges, konkretes Ziel konvergiert schneller als ein vages.
Behalten Sie die Obergrenze auf Kontoebene im Blick. Wenn Sie über die kostenpflichtige Gemini APIAPIApplication Programming Interface: eine standardisierte Schnittstelle, über die Anwendungen kommunizieren und Daten austauschen, ohne die interne Funktionsweise der jeweils anderen zu kennen.Vollständige Definition ansehen → oder Vertex AI arbeiten, richten Sie Cloud-Billing-Budgets und Benachrichtigungen für das Projekt ein, nicht nur Limits in Ihrem Prompt. Seien Sie sich im Klaren, was sie leisten: Ein Budget verschickt Benachrichtigungen, es stoppt die Ausgaben nicht von selbst. Um die Nutzung tatsächlich zu unterbinden, brauchen Sie einen zusätzlichen Schritt, etwa eine Budget-Benachrichtigung, die eine Funktion zum Deaktivieren der Abrechnung auslöst, oder API-Kontingentlimits für das Projekt. Das ist Ihre eigentliche Absicherung, denn Limits auf Prompt-Ebene kann ein verwirrter Agent wegargumentieren, Kontingentlimits nicht.
Eine praktische Regel: Lassen Sie --yolo nie mit einem kostenpflichtigen Key laufen, ohne vorher Budget-Benachrichtigungen und ein Kontingent oder eine Abschaltung eingerichtet zu haben. Die Obergrenze im Prompt schützt Sie vor Logikfehlern. Die Obergrenze auf Kontoebene schützt Sie vor allem anderen.
Wissenscheck
1. Was unterscheidet laut der Lektion grundsätzlich eine Aufgabe, die sich für einen agentischen Loop eignet, von einer, die sich für eine einzelne Anfrage eignet?
2. Die Lektion beschreibt das Standardverhalten von Gemini CLI als ReAct-Muster. Was bedeutet dieses Muster in diesem Zusammenhang?
3. Welche Modellstufe empfiehlt die Lektion für einen engen, klar abgegrenzten Loop wie „Lint-Fehler beheben, bis der Build sauber ist“, und warum?
4. Wählen Sie ALLE Aussagen aus, die laut der Lektion auf den nicht-interaktiven Modus von Gemini CLI zutreffen.
Wählen Sie alle richtigen Antworten aus.
5. Wählen Sie ALLE Szenarien aus, in denen laut der Lektion ein Loop die richtige Wahl ist und keine einzelne Anfrage.
Wählen Sie alle richtigen Antworten aus.
Review-Gates für unbeaufsichtigte Arbeit
Je weitreichender die Befugnisse eines autonomen Runs, desto dringender braucht er ein Gate zwischen „Agent fertig“ und „Änderung ist live“. Ein Review-Gate ist jeder Kontrollpunkt, an dem ein Mensch oder eine automatisierte Prüfung zustimmen muss, bevor sich die Arbeit weiter ausbreitet.
Schichten Sie diese vom geringsten zum größten Vertrauen:
1. Freigabeabfragen (interaktiv)
Der Standard. Die CLI pausiert vor jedem Schreibvorgang oder Shell-Befehl und fragt nach. Gut zum Erkunden, nutzlos für unbeaufsichtigte Runs, weil niemand da ist, um zuzustimmen.
2. Sandboxing (das Container-Gate)
Bevor Sie zu --yolo greifen, begrenzen Sie den möglichen Schaden. Führen Sie den Agenten mit aktiviertem Sandboxing aus, damit Tool-Aufrufe in einem isolierten Container laufen und nicht direkt auf Ihrem Rechner. Selbst ein verwirrter Loop kommt dann nicht an Dateien oder Netzwerke außerhalb der Box. Aktivieren Sie es und beschränken Sie das Arbeitsverzeichnis:
gemini --sandbox --yolo -p "$(cat prompts/refactor.txt)"Kombinieren Sie Sandboxing mit einem Scratch-Checkout in git, und der Agent kann buchstäblich nichts beschädigen, was Ihnen wichtig ist.
3. Das Branch-und-PR-Gate
Wie im ausgearbeiteten Beispiel: Autonome Runs schreiben auf einen Feature-Branch und öffnen einen Pull Request. Ihre bestehende CI (Tests, Security-Scans) läuft auf dem PR, und ein Mensch genehmigt den Merge. Das ist für die meisten Teams der Sweet Spot: volle Autonomie innerhalb des Loops, volle Kontrolle an der Grenze.
4. CI als objektiver Richter
Vertrauen Sie nicht auf das „Ich bin fertig“ des Agenten. Lassen Sie Ihre pipelinepipelineAlle aktiven Verkaufschancen über die Phasen des Vertriebsprozesses hinweg, zusammen mit ihrem gesamten potenziellen Wert und ihrer Abschlusswahrscheinlichkeit.Vollständige Definition ansehen → entscheiden. Die Aufgabe des Agenten ist es, einen Branch zu liefern, der die CI besteht. Schlägt die CI fehl, wird der PR nicht gemerged, Punkt. So wird Ihre bestehende Test- und Lint-Infrastruktur zum Schiedsrichter autonomer Arbeit, und genau darin ist sie gut.
Batch-Loops über viele Dateien
Der andere klassische Loop lautet nicht „bis eine Bedingung erfüllt ist“, sondern „für jedes Element“. Gleiche Mechanik, andere Form.
gemini --yolo --model flash -p '
For every *.py file under /src:
- Add type hints to all public functions.
- Run "mypy" on the file after editing.
- If mypy errors, fix and re-check that file before moving on.
Skip files that already pass mypy cleanly. Report a table of files
changed and files skipped when finished.
'Beachten Sie die Prüfung pro Element (mypy nach jeder Bearbeitung). Das hält den Batch ehrlich: Der Agent weist jede Datei nach, bevor er weitergeht, statt alle 40 zu bearbeiten und zu hoffen. Wenn ein Batch groß ist und die Elemente unabhängig sind, ist das deutlich besser als 40 separate Chat-Sitzungen, weil der Agent Kontext und seine eigenen Qualitätsprüfungen mitnimmt.
Für strukturierte, wiederholbare Pipelines jenseits spontaner CLI-Runs (mehrere spezialisierte Agenten, umfassendere Orchestrierung, Evaluation) steigen Sie auf das Agent Development Kit (ADK) um. Die CLI ist der schnelle Weg; im ADK leben produktive Loops mit ordentlichem Testing und Deployment.
Wann ein Loop das falsche Werkzeug ist
Autonomie ist nicht kostenlos, greifen Sie also nicht reflexartig danach:
- Es gibt keine objektive Prüfung. Wenn Erfolg „mach den Text besser“ heißt, hat der Loop nichts, woran er sich messen kann. Das ist eine einzelne Anfrage mit menschlichem Review.
- Jeder Schritt erfordert Urteilsvermögen. Die Migration eines Zahlungsablaufs ist kein Loop, den Sie einfach laufen lassen. Es ist eine Reihe von Entscheidungen, die Sie interaktiv mit dem Agenten treffen.
- Die Kosten einer falschen autonomen Aktion sind hoch und keine Sandbox fängt sie vollständig ab. Dann bleibt der Mensch in jedem Turn beteiligt.
Der Loop lohnt sich genau dann, wenn die Prüfung billig und objektiv ist und die Arbeit mühsam. Das trifft auf den größten Teil der Fleißarbeit in einer Codebasis zu, und deshalb ist das Thema wichtig.
Das Wichtigste in Kürze
- Nutzen Sie einen Loop, wenn Erfolg extern überprüfbar ist (Tests, Build, Lint, Typprüfungen) und die Arbeit repetitiv ist. Nutzen Sie eine einzelne Anfrage, wenn die Ausgabe die Antwort ist oder jeder Schritt Urteilsvermögen erfordert.
- Lassen Sie Runs mit `gemini -p` unbeaufsichtigt laufen, binden Sie sie für Scheduling in cron oder CI ein und wählen Sie die Modellstufe passend zur Aufgabe (Flash für enge Loops, Pro für schwieriges Reasoning). Verwenden Sie lieber die Aliase
flashundproals gepinnte Versions-IDs, die abgekündigt werden. - Begrenzen Sie jeden Loop auf drei Achsen: Versuche (im Prompt), Zeit und Geld. Cloud-Billing-Budgets benachrichtigen nur, ergänzen Sie also Kontingentlimits oder eine automatische Abschaltung, wenn die Ausgaben tatsächlich stoppen sollen.
- Lassen Sie `--yolo` nie ungeschützt laufen. Dämmen Sie es mit
--sandboxein und lassen Sie autonome Arbeit auf einem Branch und PR landen, damit Ihre bestehende CI der objektive Richter ist und ein Mensch über den Merge entscheidet. - Verbieten Sie die Schummelwege explizit (keine Tests bearbeiten, keine Versionen anheben), damit der Agent die Abbruchbedingung nicht auf dem falschen Weg erfüllen kann.