Loops und autonome Runs in Codex
# Loops und autonome Runs in Codex
Manche Coding-Arbeit ist derselbe Schritt in Wiederholung, bis eine Bedingung erfüllt ist: Tests laufen lassen, den Fehler lesen, den Code patchen, Tests erneut laufen lassen. Genau dieses Muster sollte Codex automatisieren, nicht als einmalige Anfrage, sondern als agentischer Loop, der weiter editiert und ausführt, bis die Aufgabe wirklich erledigt ist.
Der agentische Loop, konkret
Sie wissen bereits, dass ein Agent plant, handelt und beobachtet. In Codex ist dieser Loop in einem echten Workspace verankert: ein Checkout Ihres Repos, eine Shell und die Möglichkeit, Befehle auszuführen. Jeder Turn sieht so aus:
1. Aufgabe und aktuellen Zustand des Repos lesen.
2. Eine Aktion entscheiden (eine Datei editieren, einen Befehl ausführen).
3. Sie in der Sandbox ausführen und die Ausgabe erfassen.
4. Das Ergebnis mit dem Ziel vergleichen. Wenn nicht erfüllt, weiter im Loop.
Der entscheidende Unterschied zu einem einzelnen Prompt ist der Schritt observe. Codex sieht stdout, Exit-Codes und Stack Traces und speist sie in die nächste Entscheidung zurück. Deshalb funktioniert „mach, dass die Tests durchlaufen“: Die Test-Ausgabe *ist* das Signal, das den nächsten Edit steuert.
Codex gibt es in zwei Formen, die dieselbe Engine nutzen: den CLI/IDE-Agenten, der lokal gegen Ihren Working Tree läuft, und Codex cloud, das den Loop auf der Infrastruktur von OpenAI gegen ein verbundenes GitHub-Repo ausführt. In der Cloud-Version leben autonome und geplante Runs. Die aktuelle Oberfläche finden Sie in der Codex-Dokumentation.
Wann ein Loop besser ist als eine einzelne Anfrage
Eine einzelne Anfrage ist richtig, wenn die Änderung begrenzt ist und Sie das Diff auf einen Blick prüfen kkThe average number of new users each existing user generates through referrals. Above 1.0, growth compounds on itself and becomes exponential.Vollständige Definition ansehen →önnen. Greifen Sie zum Loop, wenn die Aufgabe eine überprüfbare Stop-Bedingung hat, die der Agent selbst prüfen kann:
- Iterieren, bis die Tests grün sind. Die Test-Suite definiert „fertig“. Der Agent braucht Sie zwischen den Versuchen nicht.
- Ein Backlog von Dateien abarbeiten. Jede Komponente von einer veralteten APIAPIApplication Programming Interface: a standardised interface that lets applications communicate and exchange data without knowing each other's internal workings.Vollständige Definition ansehen → migrieren, Type Hints in einem Verzeichnis ergänzen oder ein Pattern über 40 Module hinweg anheben. Der Loop lautet „für jede Datei: Änderung anwenden, deren Tests laufen lassen, weiter“.
- Fixen, bis Lint- und Type-Checks durchlaufen.
ruff,mypy,tsc: Jedes liefert einen sauberen Exit-Code, gegen den Sie loopen kkThe average number of new users each existing user generates through referrals. Above 1.0, growth compounds on itself and becomes exponential.Vollständige Definition ansehen →önnen.
Die Gemeinsamkeit: Es gibt ein maschinell prüfbares Orakel. Wenn „fertig“ subjektiv ist („mach die UI schöner“), verbrennt ein Loop nur Budget bei der Jagd auf ein Ziel, das ererThe ratio of interactions (likes, comments, shares) to reach for a given piece of content, used to gauge how well audiences respond relative to how many people saw it.Vollständige Definition ansehen → nicht messen kann. Solche Aufgaben bleiben interaktive Sessions.
Iterieren, bis die Tests grün sind
Hier ist der kanonische Loop. Sie geben Codex das Ziel, den Befehl, der es verifiziert, und eine Obergrenze. Lokal sieht das nach einem Prompt plus Config aus; in der Cloud richten Sie es pro Task ein. Dieses YAML ist die Art von Task-Spezifikation, die Sie einem geplanten Codex-Run übergeben würden:
task: Fix the failing tests in the billing module.
repo: acme/payments
branch: fix/billing-tests
setup:
- pip install -e ".[dev]"
verify:
command: pytest tests/billing -q
success_when: exit_code == 0
limits:
max_iterations: 8
max_wall_clock_minutes: 20
on_success:
open_pull_request: true
reviewers: [payments-team]Der Loop, den der Agent tatsächlich ausführt, ist als Pseudocode trivial und lohnt sich zu sehen, damit Sie genau wissen, worauf ererThe ratio of interactions (likes, comments, shares) to reach for a given piece of content, used to gauge how well audiences respond relative to how many people saw it.Vollständige Definition ansehen → optimiert:
for attempt in range(max_iterations):
result = run("pytest tests/billing -q")
if result.exit_code == 0:
commit("fix: billing tests green")
break
# Codex liest result.stdout, editiert die relevanten Dateien,
# dann führt der Loop denselben Befehl erneut aus.
apply_fix(diagnose(result.stdout))
else:
report("gave up after max_iterations; latest diff attached")Zwei Dinge machen das sicher, statt es entgleisen zu lassen. Erstens ist verify.command die *einzige* Definition von Erfolg, der Agent kann den Sieg also nicht nach Gefühl erklären. Zweitens endet der Loop entweder bei grünen Tests oder an einer harten Obergrenze. Es gibt keinen Weg, auf dem ererThe ratio of interactions (likes, comments, shares) to reach for a given piece of content, used to gauge how well audiences respond relative to how many people saw it.Vollständige Definition ansehen → endlos läuft.
Autonome und geplante Runs starten
In Codex cloud verbinden Sie ein GitHub-Repo und starten dann Tasks, die ohne Ihre Anwesenheit laufen. Es gibt drei Wege, einen anzustoßen:
- On demand. Aufgabe beschreiben, Repo und Branch wählen, und Codex startet eine Umgebung, führt den Loop aus und öffnet am Ende einen PR.
- Geplant. Codex unterstützt wiederkehrende Runs, derselbe Mechanismus, der hinter ChatGPT scheduled tasks steht. Ein nächtlicher Job „führe die komplette Suite auf
mainaus, behebe Flakes, öffne einen PR“ ist der Klassiker. - Event-getrieben, über die API. Verdrahten Sie einen Run so, dass ererThe ratio of interactions (likes, comments, shares) to reach for a given piece of content, used to gauge how well audiences respond relative to how many people saw it.Vollständige Definition ansehen → aus CI oder von einem Webhook heraus startet (etwa ein neues Issue mit Label
codex), mit der Responses API plus Tools, oder orchestrieren Sie mehrstufige Steuerung mit dem Agents SDK.
Das Mental Model: Ein On-demand-Run ist Ihr Druck auf den Startknopf. Ein geplanter Run ist ein Cron Job, der zufällig ein Agent ist. Beide legen ihre Arbeit in einem Branch und einem Pull Request ab, nie direkt auf main.
Ein geplantes Backlog-Beispiel
Angenommen, Sie migrieren eine Codebase weg von einem veralteten Logging-Call. Sie wollen nicht 40 Dateien babysitten. Planen Sie einen nächtlichen Run:
> „Ersetze in bis zu 6 Dateien, die noch old_logger nutzen, diesen gemäß docs/logging.md durch structlog, führe pytest für jedes berührte Modul aus und öffne einen PR mit dem Titel chore: migrate logging (batch). Überspringe Dateien, deren Tests nach der Änderung fehlschlagen, und vermerke sie in der PR-Beschreibung.“
Diese Spezifikation hat eine Batch-Größe (Kostenkontrolle), einen Verify-Schritt pro Datei (Korrektheit) und eine explizite Notausstiegsklausel für die harten Fälle (keine kaputte Änderung erzwingen). Über eine Woche leert sich das Backlog selbst, ein prüfbarer PR nach dem anderen.
Building with Codex
Stop-Bedingungen: was einen Loop tatsächlich beendet
Ein unbeaufsichtigter Loop braucht mehr als einen Ausgang. Planen Sie alle davon ein:
- Erfolgsbedingung erfüllt. Der Verify-Befehl gibt Exit-Code 0 zurück. Das ist der Happy Path.
- Iterations-Obergrenze.
max_iterationsstoppt die Spirale „editieren, weiter rot, wieder editieren“. Wenn acht Versuche die Tests nicht grün bekommen, schaffen es mehr Versuche selten. - Wall-Clock-/Budget-Grenze. Eine Zeit- oder TokenTokenA token is the basic unit of text that language models process, often a word fragment, whole word, or punctuation mark rather than a single character.Vollständige Definition ansehen →-Obergrenze. Wenn Codex nicht konvergiert, soll es *günstig* stoppen und Ihnen ein Diff übergeben, statt sich festzufressen.
- Erkennung von Stillstand. Wenn zwei aufeinanderfolgende Versuche die identische Fehlerausgabe produzieren, steckt der Agent fest. Ein guter Loop behandelt das als Stop, nicht als Grund, denselben Fix erneut zu versuchen.
Nennen Sie jede Obergrenze explizit. Der typische Fehlermodus autonomer Runs ist meist kein schlechter Edit, sondern ein Agent, der sich an einem Problem abarbeitet, das ererThe ratio of interactions (likes, comments, shares) to reach for a given piece of content, used to gauge how well audiences respond relative to how many people saw it.Vollständige Definition ansehen → nicht lösen kann, während die Uhr läuft.
Kostengrenzen und die Sandbox
Jeder Codex-cloud-Run läuft in einem isolierten Container: eine frische Umgebung mit Ihrem Repo, ohne Zugriff auf Ihre anderen Systeme, sofern Sie ihn nicht gewähren. Diese Isolation ist Ihre erste Kosten- und Sicherheitsgrenze, denn ein Loop, der Produktion nicht anfassen kann, kann keinen Produktionsvorfall auslösen.
Steuern Sie die Ausgaben auf zwei Ebenen:
- Pro Run: die Iterations- und Zeitgrenzen von oben. Eine 20-Minuten-Obergrenze für einen nächtlichen Job begrenzt den Worst Case.
- Pro Account: setzen Sie Usage Limits in den Billing-Einstellungen der OpenAI-Plattform, damit ein falsch konfigurierter Zeitplan nicht eine Woche lang unbemerkt die ganze Nacht läuft.
Steuern Sie außerdem, was der Loop erreichen kann. Der Netzwerkzugriff in der Codex-Umgebung ist konfigurierbar; für einen Test-Fixing-Job braucht der Agent Ihr Repo und Package-Installs, nicht das offene Internet. Schneiden Sie die Umgebung auf das zu, was die Aufgabe erfordert. Ein Loop mit weniger Fähigkeiten ist ein Loop mit weniger Möglichkeiten, Sie zu überraschen.
Wissenscheck
1. Was ist der entscheidende Unterschied zwischen einem agentischen Loop in Codex und einem einzelnen One-shot-Prompt?
2. Was ist laut Lektion das bestimmende Merkmal einer Aufgabe, die sich gut für einen autonomen Loop eignet?
3. Warum rät die Lektion, eine Aufgabe wie „mach die UI schöner“ als interaktive Session zu behandeln statt als autonomen Loop?
4. Wählen Sie ALLE der folgenden Punkte, die laut Lektion gültige Beispiele für Aufgaben mit einer überprüfbaren Stop-Bedingung sind, die sich für einen Loop eignen.
Wählen Sie alle richtigen Antworten aus.
5. Wählen Sie ALLE korrekten Aussagen über die zwei in der Lektion beschriebenen Formen von Codex.
Wählen Sie alle richtigen Antworten aus.
Review Gates: vertrauen, aber das Diff prüfen
Die wichtigste Sicherheitseigenschaft überhaupt: ein autonomer Codex-Run produziert einen Pull Request, keinen Merge. Die Ausgabe des Loops landet auf einem Branch und wartet auf einen Menschen. Ihre bestehenden GitHub-Schutzmechanismen gelten weiter, und Sie sollten sich auf sie stützen:
- Erforderliche Reviews. Branch Protection bedeutet, dass ein Codex-PR ohne menschliche (oder CI-) Freigabe nicht gemergt werden kann. Behandeln Sie den Agenten als Contributor, dessen PRs immer ein Review brauchen.
- CI als zweites Orakel. Der Agent hat die Tests lokal in seiner Sandbox laufen lassen; CI führt sie erneut in Ihrer echten PipelinePipelineAll active sales opportunities across the stages of the sales process, together with their combined potential value and probability of closing.Vollständige Definition ansehen → aus. Wenn CI widerspricht, war das „grün“ des Loops umgebungsspezifisch, und Sie haben es gerade abgefangen.
- Abgegrenzte Diffs. Grenzen für die Batch-Größe (sechs Dateien, ein Modul) halten PRs klein genug, um sie wirklich zu reviewen. Ein autonomes Diff über 3.000 Zeilen ist nicht reviewbar und verfehlt den Zweck.
Denken Sie an einen funnelfunnelThe customer journey from awareness to purchase, typically Awareness, Interest, Consideration, Decision, Action, with prospects narrowing at each stage.Vollständige Definition ansehen →: Der Loop iteriert frei innerhalb der Sandbox, aber der Ausgang ist ein schmales, prüfbares Gate. Freiheit *innen*, Kontrolle *an der Grenze*.
Einen Codex-PR schnell lesen
Weil der Run jede Aktion protokolliert, kommen seine PRs mit einer Spur: welche Befehle ererThe ratio of interactions (likes, comments, shares) to reach for a given piece of content, used to gauge how well audiences respond relative to how many people saw it.Vollständige Definition ansehen → ausgeführt hat, welche Ausgabe ererThe ratio of interactions (likes, comments, shares) to reach for a given piece of content, used to gauge how well audiences respond relative to how many people saw it.Vollständige Definition ansehen → gesehen hat und warum ererThe ratio of interactions (likes, comments, shares) to reach for a given piece of content, used to gauge how well audiences respond relative to how many people saw it.Vollständige Definition ansehen → jeden Edit gemacht hat. Prüfen Sie im Review drei Dinge: Passt das Diff zum genannten Ziel, ist der Verify-Befehl wirklich durchgelaufen (und wurde nicht deaktiviert oder mit @skip versehen), und ist die Änderung auf das beschränkt, was Sie verlangt haben. Ein Loop, der „Tests passieren lässt“, indem ererThe ratio of interactions (likes, comments, shares) to reach for a given piece of content, used to gauge how well audiences respond relative to how many people saw it.Vollständige Definition ansehen → den fehlschlagenden Test löscht, ist der klassische Trick. Lesen Sie darauf hin.
Alles zusammengesetzt
Ein gut entworfener autonomer Run liest sich wie ein Vertrag. Ziel, eine maschinell prüfbare Definition von „fertig“, harte Grenzen für Iterationen und Zeit, eine schmale Umgebung und ein Ausgang, der nur ein PR ist. Geben Sie Codex alle fünf, und Sie kkThe average number of new users each existing user generates through referrals. Above 1.0, growth compounds on itself and becomes exponential.Vollständige Definition ansehen →önnen es über Nacht allein lassen, mit derselben Zuversicht, die Sie einem Junior Engineer mit einem gut spezifizierten Ticket entgegenbringen: Entweder erledigt es das Ticket oder es sagt Ihnen, warum nicht.
Key Takeaways
- Nutzen Sie einen Loop nur, wenn „fertig“ maschinell prüfbar ist. Tests bestehen, Lint sauber, ein Exit-Code eines Type-Checks. Ist das Ziel subjektiv, bleibt es interaktiv.
- Setzen Sie immer drei Grenzen: Erfolgsbedingung, Iterationslimit und Zeit-/Budget-Obergrenze. Der gefährliche Fehlerfall ist ein Agent, der sich an einem unlösbaren Problem abarbeitet, nicht ein einzelner schlechter Edit.
- Planen Sie wiederkehrende Arbeit (Backlog-Migrationen, nächtliche Test-Fixes) mit Batch-Größen und Verifikation pro Element, damit jeder Run die Queue in kleinen, prüfbaren PRs abbaut.
- Halten Sie die Sandbox schmal. Gewähren Sie nur den Repo-Zugriff und das Netzwerk, die die Aufgabe braucht; setzen Sie Usage Limits auf Account-Ebene, damit ein falsch konfigurierter Zeitplan keine Kosten hochtreiben kann.
- Der Ausgang ist ein Pull Request, niemals ein Merge. Erzwingen Sie Branch Protection und lassen Sie Tests erneut in CI laufen, und lesen Sie das Diff immer auf den Trick „fehlschlagenden Test gelöscht“ hin.
Was Sie aus dieser Lektion umsetzen
Diese Maßnahmen sind im Playbook der Rolle zusammengefasst.
- Branch Protection einrichten: PR, Review und erfolgreiche Checks verpflichtend, bevor Codex läuft
- Autonome Loops nur mit maschinell prüfbarer Done-Bedingung und harten Obergrenzen laufen lassen
- Jeden Diff auf den Trick mit gelöschten fehlschlagenden Tests und auf Scope Creep prüfen