Der Spickzettel zum Seminar Codex für Entwickler, zweiter Teil: der laufende Betrieb — arbeiten, prüfen, zurückrollen, Rechte setzen, anbinden, automatisieren. Auftrag, Kontext und Planung stehen auf dem ersten Blatt, Codex: Auftrag und Kontext. Konfigurationsschlüssel und Kommandonamen ändern sich; maßgeblich bleibt die offizielle Codex-Dokumentation. Das Blatt sammelt Entscheidungen — die Arbeitsweise vermittelt es nicht.
Auftragsformen im Projekt
Analyse, ohne etwas zu ändern — der Zusatz mit den Dateipfaden macht die Antwort nachprüfbar statt nur plausibel:
Beschreibe den Aufbau: Schichten und Zuständigkeiten.
Wie läuft eine Buchung vom Endpunkt bis zur Datenbank?
Welche Stellen wirken riskant oder ungetestet?
Ändere nichts, belege alles mit Dateipfaden.
Refactoring — „Tests unverändert” ist die schärfste Bedingung, sie verbietet das Anpassen der Messlatte:
Ziel: Preisberechnung aus src/api nach src/buchung ziehen.
Bedingung: Verhalten unverändert, Tests unverändert.
Ergebnis: npm test grün, keine neue Abhängigkeit.
Grenzen: Keine Signatur nach außen ändern.
Ein Schnitt, ein Auftrag: Jeder Schnitt ist einzeln prüfbar und rückholbar, Fehler zeigen sich früh und lokal, ein Abbruch kostet nur den letzten Schritt.
Modul: Codex im Softwareprojekt
Fehlersuche und Tests
| Ohne Reproduktion | Mit Reproduktion |
|---|---|
| Plausible Vermutungen | Messbare Aussagen |
| Änderung auf Verdacht | Änderung mit Nachweis |
| Fehler kommt später wieder | Test hält ihn fern |
| Diskussion über Meinungen | Diskussion über Belege |
„Behoben ohne Test” heißt nur: heute nicht mehr sichtbar. Der Agent findet gern die erste, nicht die eigentliche Ursache.
| Prüft Verhalten | Zeichnet Code nach |
|---|---|
| Rabatt ab 5 Personen greift | Methode wird einmal aufgerufen |
| Storno nach 48 h abgelehnt | Interne Konstante ist gesetzt |
| Fehlerfall liefert Meldung | Reihenfolge der Aufrufe stimmt |
Der rechte Test bricht bei jedem Refactoring — und schützt trotzdem vor nichts.
Modul: Codex im Softwareprojekt
Prüfen, iterieren, abbrechen
/diff # Änderungen ansehen, inkl. neuer Dateien
/review # Hinweise vom Agenten einholen
npm test # selbst laufen lassen
git add -p # bewusst einzeln übernehmen
Das eigene Testkommando ersetzt keine Durchsicht — und die Durchsicht keinen Testlauf. Beim Durchsehen zählen: neue Dateien, die niemand verlangt hat, Änderungen an Konfiguration und Abhängigkeiten, entfernte Prüfungen und Sonderfälle, Formatierungsrauschen, das die Sicht verstellt.
| Situation | Richtiger Schritt |
|---|---|
| Fast richtig, ein Detail stört | gezielt nachschärfen |
| Ansatz grundsätzlich falsch | verwerfen, neu planen |
| Kontext ist verworren | neue Session mit klarem Auftrag |
| Dritter Versuch scheitert | selbst schreiben |
Die letzte Zeile ist ernst gemeint. Abbruchsignale: dieselbe Fehlerklasse kehrt zurück, jede Korrektur bricht etwas anderes, die Erklärungen werden allgemeiner statt genauer, der Prüfaufwand übersteigt den Schreibaufwand.
Modul: Codex im Softwareprojekt
Wege zurück
git restore <datei> # eine Datei verwerfen
git restore . # alle Änderungen verwerfen
git reset --hard HEAD # auf den letzten Commit
git revert <commit> # Commit zurücknehmen
Nach Härte sortiert. Verworfen wird auch, was du selbst geschrieben hast; neue, ungetrackte Dateien bleiben dabei liegen. Ohne Commit vor dem Lauf hilft kein Rücksprung — und auf geteilten Branches ist Umschreiben der Historie tabu.
Modul: Git, Sessions und parallele Arbeit
Sessions und Worktrees
codex # neue Session starten
codex resume # gespeicherte Session fortsetzen
/new # neues Thema, gleiche Sitzung
/clear # Verlauf zurücksetzen
Sessions hängen am Arbeitsverzeichnis — im Worktree beginnt eine eigene Ablage.
| Weg | Bleibt erhalten | Wofür |
|---|---|---|
| Abzweig | ja, als eigene Session | zweiter Lösungsweg |
| Nebenfrage | nein, nur kurzzeitig | schnelle Zwischenfrage |
git worktree add ../kv-rabatt -b feature/rabatt
git worktree add ../kv-storno -b fix/storno
git worktree list
git worktree remove ../kv-rabatt
Jeder Worktree hat eigenen Stand und eigene Sessions; gemeinsam ist nur die Historie. Abhängigkeiten müssen je Worktree installiert werden, lokale Dienste und Ports kollidieren schnell, aufgeräumt wird über den Git-Befehl.
| Ebene | Warum getrennt |
|---|---|
| Branch | eigenes, prüfbares Diff |
| Arbeitsverzeichnis | keine Dateikonflikte |
| Session | kein vermischter Kontext |
| Review | eine Entscheidung je Aufgabe |
Drei bis vier parallele Aufgaben sind erfahrungsgemäß die Grenze des Überschaubaren — Ergebnisse stapeln sich sonst schneller, als sie geprüft werden.
Modul: Git, Sessions und parallele Arbeit
Sandbox und Freigaben
| Modus | Was möglich ist |
|---|---|
read-only | lesen, sonst nichts ohne Freigabe |
workspace-write | lesen, im Arbeitsbereich ändern, Befehle |
danger-full-access | keine Beschränkung |
| Freigaberegel | Wann gefragt wird |
|---|---|
untrusted | vor allem außerhalb vertrauter Befehle |
on-request | wenn die Sandbox-Grenze im Weg steht |
never | gar nicht |
Beide Regler wirken zusammen — erst ihre Kombination ergibt das tatsächliche
Verhalten. Voreinstellung für lokale Arbeit ist workspace-write mit
on-request; der Netzzugriff bleibt dabei zu.
/permissions # Voreinstellung in der Session wählen
/status # aktuelle Rechte und Modus anzeigen
/approve # laufende Anfrage freigeben
# ~/.codex/config.toml
sandbox_mode = "workspace-write"
approval_policy = "on-request"
[profiles.sichten] # fremde Repositorien nur lesen
sandbox_mode = "read-only"
approval_policy = "untrusted"
In der Session gesetzte Rechte gelten nur für diese Session; Profile machen die Entscheidung wiederholbar, nehmen sie aber nicht ab. Die Sandbox schützt den Rechner, nicht das Repository.
Modul: Sicherheit, Permissions und Autonomie
Autonomie nach Risiko
| Aufgabe | Autonomie | Warum |
|---|---|---|
| Code lesen, erklären | hoch | kein Schaden möglich |
| Feature im Branch | mittel | Diff und Tests fangen ab |
| Abhängigkeiten ändern | niedrig | wirkt über das Projekt hinaus |
| Migration, Deployment | keine | schwer umkehrbar |
Die Frage ist nicht, ob der Agent es kann, sondern was ein Fehler kostet. Autonomie setzt voraus: sauberer Ausgangszustand in der Versionskontrolle, Tests, die eine Verschlechterung bemerken, ein klar benannter Wirkungsbereich und jemand, der das Ergebnis tatsächlich prüft.
| Ansatz | Kontrolle | Passt für |
|---|---|---|
| Viele Rückfragen | vor der Aktion | fremder Code, heikle Pfade |
| Selbstständig im Branch | nach dem Lauf | eigenes Projekt mit Tests |
| Ohne Rückfragen | nur im Review | isolierte Umgebung |
Ganz ohne Kontrolle geht keine der drei Zeilen — sie verschieben nur ihren Ort.
Modul: Sicherheit, Permissions und Autonomie
MCP anbinden
| Bauform | Läuft | Typisch für |
|---|---|---|
| Lokal | als Prozess auf deiner Maschine | Dateien, Datenbanken, CLI |
| Entfernt | als Dienst über HTTP | SaaS-Werkzeuge, Teamdienste |
| Ohne MCP | Mit MCP |
|---|---|
| Ticketinhalt hineinkopieren | Ticket wird gelesen |
| Schema aus dem Code raten | Schema wird abgefragt |
| Screenshot beschreiben | Entwurf wird abgerufen |
| Ergebnis manuell übertragen | Ergebnis wird eingetragen |
Jede Zeile spart Handarbeit — und erweitert zugleich den Wirkungsbereich des Agenten.
codex mcp add <name> -- <startbefehl>
codex mcp add <name> --url https://…
codex mcp list # angebundene Server zeigen
/mcp # in der Session prüfen
[mcp_servers.schema]
command = "npx"
args = ["-y", "beispiel-db-mcp"]
[mcp_servers.tickets]
url = "https://mcp.beispiel.de/mcp"
bearer_token_env_var = "TICKET_TOKEN"
Zugangsdaten gehören in Umgebungsvariablen, nie in die Konfigurationsdatei selbst. MCP ist ein Protokoll, kein Qualitätsversprechen: Ein Server bringt fremden Code auf die Maschine.
Modul: MCP und externe Werkzeuge
Werkzeuge nach Wirkung einstufen
| Art | Beispiel | Risiko |
|---|---|---|
| Lesend | Schema abfragen, Ticket abrufen | gering |
| Schreibend | Kommentar eintragen | mittel |
| Ausführend | Abfrage laufen lassen | hoch |
Die Risikostufe bestimmt, ob eine Freigabe je Aufruf sinnvoll ist. Prüfen, gegen welche Umgebung ein Werkzeug tatsächlich arbeitet.
| Frage | Kontext | Werkzeug |
|---|---|---|
| Wann geladen | von Anfang an | beim Aufruf |
| Kostet Platz | dauerhaft | nur das Ergebnis |
| Beispiel | Projektregeln | Schemaabfrage |
Was selten gebraucht wird, gehört hinter ein Werkzeug — nicht in den ständigen Kontext. Zu viele Werkzeuge machen die Auswahl unzuverlässig.
Modul: MCP und externe Werkzeuge
Automatisieren: Befehl oder SDK
| Zugang | Steuerung | Passt für |
|---|---|---|
| Interaktiv | Mensch am Terminal | Entwicklung, Erkundung |
| Nicht-interaktiv | ein Befehl im Skript | Pipelines, Hooks |
| SDK | eigener Programmcode | Werkzeuge, Dienste |
codex exec "Ergänze fehlende Tests in src/buchung"
codex exec --json "Prüfe die offenen Änderungen"
Die strukturierte Ausgabe lässt sich im Skript auswerten, der reine Text nur lesen. Erst den Befehl versuchen — das SDK lohnt, wenn dessen Grenzen erreicht sind: Lauf begleiten und steuern, Ereignisse statt Text, eingebettet in eine Anwendung statt in ein Skript.
Ohne Aufsicht gilt: Es gibt niemanden, der eine Rückfrage beantwortet, Rechte müssen vorab feststehen, Fehler müssen im Ergebnis erkennbar sein, und der Umfang muss vorhersagbar begrenzt bleiben.
| Gut automatisierbar | Besser interaktiv |
|---|---|
| Prüfliste je Änderung | Entwurfsentscheidungen |
| Changelog aus Commits | Umbau der Architektur |
| Testlücken benennen | Fehlersuche ohne Reproduktion |
| Formalien kontrollieren | Alles mit Ermessen |
Die rechte Spalte hat gemeinsam, dass jemand das Ergebnis bewerten muss.
Modul: Codex SDK und Automatisierungen
Anlässe und Einsatzfelder
| Anlass | Ergebnis |
|---|---|
| Neuer Pull Request | Prüfhinweise als Kommentar |
| Nächtlicher Lauf | Bericht über Testlücken |
| Vor dem Release | Changelog aus den Commits |
| Neues Ticket | Einschätzung des Aufwands |
Vorher klären: Wer liest das Ergebnis und entscheidet daraufhin? Was passiert bei einem Ausfall? Wie viel Rauschen toleriert das Team? Was kostet der Lauf, mal Anzahl der Anlässe?
| Feld | Beispiel |
|---|---|
| Dokumentation | veraltete Abschnitte finden |
| Migration | betroffene Stellen erheben |
| Aufwand | Umfang einer Änderung abschätzen |
| Einarbeitung | Rundgang durch ein Modul erzeugen |
Gemeinsam ist allen: Der Agent liest viel und schreibt wenig — genau seine Stärke.
Modul: Codex SDK und Automatisierungen
Lokal oder Cloud
| Merkmal | Lokal | Cloud |
|---|---|---|
| Arbeitsstand | dein aktueller | frischer Klon |
| Aufsicht | direkt, mit Freigaben | asynchron |
| Werkzeuge | deine Umgebung | eingerichtete Umgebung |
| Parallelität | begrenzt | mehrere Aufgaben |
Der Unterschied ist nicht die Fähigkeit des Agenten, sondern was er vorfindet.
| Gehört nach lokal | Gehört in die Cloud |
|---|---|
| Halbfertiger Arbeitsstand | Sauberer Branch |
| Lokale Datenbank, Dienste | Alles im Repository |
| Enge Zusammenarbeit | Klar umrissener Auftrag |
| Zugangsdaten nötig | Mehrere Aufgaben parallel |
| Ressource | Warum nicht auslagerbar |
|---|---|
| Laufende Dienste | Zustand entsteht zur Laufzeit |
| Testdatenbank | Daten liegen nicht im Repository |
| Interne Netze | von außen nicht erreichbar |
| Halbfertige Arbeit | nicht committet, nicht sichtbar |
Genau diese vier Punkte sind der Grund, warum lokal die Voreinstellung bleibt.
Modul: Codex lokal, im Web und in der Cloud
Auftrag für einen unbeaufsichtigten Lauf
Ziel: Tests in src/buchung um Fehlerfälle ergänzen.
Kontext: tests/buchung als Vorbild nehmen.
Ergebnis: npm test grün, keine Quelldatei geändert.
Grenzen: Keine neue Abhängigkeit, kein Test gelöscht.
Bei Unklarheit: Annahme dokumentieren, nicht raten.
Die letzte Zeile ersetzt die Rückfrage, die in der Cloud niemand stellen kann. Unbeaufsichtigte Läufe scheitern an ungesagtem Wissen, fehlendem Fertig-Kriterium, unbegrenztem Umfang und daran, dass nicht gesagt ist, was bei Unklarheit gilt. Zurück kommt das Ergebnis nur über den lokalen Bau- und Testlauf — grün in der Cloud heißt nicht grün bei dir.
Modul: Codex lokal, im Web und in der Cloud
Typische Fallen
- Eigene und Agentenänderungen im selben Commit — und Arbeiten direkt auf dem Hauptbranch. Beides macht das Diff unlesbar.
- Zustimmen, weil die Erklärung überzeugend klingt. Die Erklärung des Agenten ist nicht der Code.
- Ein Diff über 40 Dateien wird erfahrungsgemäß überflogen; teilweise durchgeführte Umbenennungen sind schlimmer als keine.
- Angepasste Tests statt angepassten Codes verdecken Verhaltensänderungen.
- Freigaben im Minutentakt führen zum blinden Bestätigen — genau dem, was sie verhindern sollen.
- Die Ignorierdatei hält Inhalte aus dem Kontext, nicht vom Zugriff fern. Shell-Befehle des Agenten lesen an ihr vorbei.
- Ein Geheimnis, das der Agent gelesen hat, gilt als kompromittiert.
- Vergessene MCP-Server laufen weiter und kosten Kontext; Rechte werden beim Anbinden vergeben und danach nie geprüft.
- Ein Lauf, der auf eine Freigabe wartet, hängt still — ohne Zeitlimit blockiert ein Fehllauf die Pipeline.
- Ignorierte Dateien fehlen im Cloud-Klon — auch nötige wie Konfiguration und Beispieldaten.
- Ergebnisse übernehmen, weil der Aufwand sonst verloren wäre.