Nicht interaktiver Modus
Verwenden Sie codex exec, um Codex in Skripten und CI auszuführen
Im nicht interaktiven Modus können Sie Codex aus Skripten heraus ausführen (beispielsweise in Continuous-Integration-Aufträgen (CI)), ohne die interaktive TUI zu öffnen.
Sie rufen ihn mit codex exec auf.
Details zu den einzelnen Flags finden Sie unter codex exec.
Wann Sie codex exec verwenden sollten
Verwenden Sie codex exec, wenn Codex Folgendes tun soll:
- Als Teil einer Pipeline ausgeführt werden (CI, Prüfungen vor dem Zusammenführen, geplante Aufträge).
- Ausgaben erzeugen, die Sie an andere Tools weiterleiten können (beispielsweise zum Erstellen von Versionshinweisen oder Zusammenfassungen).
- Sich nahtlos in CLI-Workflows einfügen, die Befehlsausgaben an Codex und die Codex-Ausgabe an andere Tools weiterleiten.
- Mit expliziten, vorab festgelegten Sandbox- und Genehmigungseinstellungen ausgeführt werden.
Grundlegende Verwendung
Übergeben Sie eine Aufgabenanweisung als einzelnes Argument:
codex exec "summarize the repository structure and list the top 5 risky areas"Während codex exec ausgeführt wird, schreibt Codex den Fortschritt fortlaufend nach stderr und gibt nur die abschließende Agentennachricht auf stdout aus. Dadurch lässt sich das Endergebnis einfach umleiten oder weiterleiten:
codex exec "generate release notes for the last 10 commits" | tee release-notes.mdVerwenden Sie --ephemeral, wenn Sie die Sitzungs-Rollout-Dateien nicht dauerhaft auf dem Datenträger speichern möchten:
codex exec --ephemeral "triage this repository and suggest next steps"Wenn stdin weitergeleitet wird und Sie zusätzlich ein Prompt-Argument angeben, behandelt Codex den Prompt als Anweisung und den weitergeleiteten Inhalt als zusätzlichen Kontext.
So können Sie die Eingabe einfach mit einem Befehl erzeugen und direkt an Codex übergeben:
curl -s https://jsonplaceholder.typicode.com/comments \
| codex exec "format the top 20 items into a markdown table" \
> table.mdWeitere fortgeschrittene Muster für die Weiterleitung über stdin finden Sie unter Fortgeschrittene stdin-Weiterleitung.
Berechtigungen und Sicherheit
Standardmäßig wird codex exec in einer schreibgeschützten Sandbox ausgeführt. Legen Sie für Automatisierungen nur die mindestens für den Workflow erforderlichen Berechtigungen fest:
- Bearbeitungen zulassen:
codex exec --sandbox workspace-write "<task>" - Umfassenderen Zugriff zulassen:
codex exec --sandbox danger-full-access "<task>"
Verwenden Sie danger-full-access nur in einer kontrollierten Umgebung (beispielsweise in einem isolierten CI-Runner oder Container).
Codex behält codex exec --full-auto als veraltetes Kompatibilitäts-Flag bei und gibt eine Warnung aus. Verwenden Sie in neuen Skripten vorzugsweise das explizite Flag --sandbox workspace-write.
Verwenden Sie --ignore-user-config, wenn bei einer Ausführung $CODEX_HOME/config.toml nicht geladen werden soll, und --ignore-rules, wenn Sie in einer kontrollierten Automatisierungsumgebung die benutzer- und projektspezifischen Execpolicy-Dateien .rules überspringen müssen.
Wenn Sie einen aktivierten MCP-Server mit required = true konfigurieren und seine Initialisierung fehlschlägt, wird codex exec mit einem Fehler beendet, anstatt ohne diesen Server fortzufahren.
Maschinenlesbare Ausgabe erzeugen
Verwenden Sie die Ausgabe im JSON-Lines-Format, um Codex-Ausgaben in Skripten zu verarbeiten:
codex exec --json "summarize the repo structure" | jqWenn Sie --json aktivieren, wird stdout zu einem JSON-Lines-Datenstrom (JSONL), sodass Sie jedes Ereignis erfassen können, das Codex während der Ausführung ausgibt. Zu den Ereignistypen gehören thread.started, turn.started, turn.completed, turn.failed, item.* und error.
Zu den Elementtypen gehören Agentennachrichten, Schlussfolgerungen, Befehlsausführungen, Dateiänderungen, MCP-Tool-Aufrufe, Websuchen und Planaktualisierungen.
Beispiel für einen JSON-Datenstrom (jede Zeile ist ein JSON-Objekt):
{"type":"thread.started","thread_id":"0199a213-81c0-7800-8aa1-bbab2a035a53"}
{"type":"turn.started"}
{"type":"item.started","item":{"id":"item_1","type":"command_execution","command":"bash -lc ls","status":"in_progress"}}
{"type":"item.completed","item":{"id":"item_3","type":"agent_message","text":"Repo contains docs, sdk, and examples directories."}}
{"type":"turn.completed","usage":{"input_tokens":24763,"cached_input_tokens":24448,"output_tokens":122,"reasoning_output_tokens":0}}Wenn Sie nur die abschließende Nachricht benötigen, schreiben Sie sie mit -o <path>/--output-last-message <path> in eine Datei. Dadurch wird die abschließende Nachricht in die Datei geschrieben und weiterhin auf stdout ausgegeben (Details finden Sie unter codex exec).
Strukturierte Ausgaben mit einem Schema erstellen
Wenn Sie strukturierte Daten für nachgelagerte Schritte benötigen, verwenden Sie --output-schema, um eine abschließende Antwort anzufordern, die einem JSON Schema entspricht.
Dies ist für automatisierte Workflows nützlich, die stabile Felder benötigen (beispielsweise Auftragszusammenfassungen, Risikoberichte oder Veröffentlichungsmetadaten).
schema.json
{
"type": "object",
"properties": {
"project_name": { "type": "string" },
"programming_languages": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["project_name", "programming_languages"],
"additionalProperties": false
}Führen Sie Codex mit dem Schema aus und schreiben Sie die abschließende JSON-Antwort auf den Datenträger:
codex exec "Extract project metadata" \
--output-schema ./schema.json \
-o ./project-metadata.jsonBeispiel für die abschließende Ausgabe (stdout):
{
"project_name": "Codex CLI",
"programming_languages": ["Rust", "TypeScript", "Shell"]
}In Automatisierungen authentifizieren
codex exec verwendet standardmäßig die gespeicherte CLI-Authentifizierung erneut. In CI ist es üblich, Anmeldedaten explizit bereitzustellen:
Authentifizierung mit API key verwenden
Verwenden Sie für GitHub Actions die Codex GitHub Action, anstatt die CLI selbst zu installieren und zu authentifizieren. Die Action wurde entwickelt, um die Offenlegung des API key zu verringern, indem sie Codex installiert, einen Responses API-Proxy startet und Codex mit einer konfigurierbaren Sicherheitsstrategie ausführt.
Legen Sie OPENAI_API_KEY oder CODEX_API_KEY nicht als Umgebungsvariable auf Auftragsebene in Workflows fest, die vom Repository kontrollierten Code auschecken oder ausführen. Build-Skripte, Tests, Lebenszyklus-Hooks von Abhängigkeiten oder eine kompromittierte Action im selben Auftrag können diese Umgebungsvariablen auslesen.
Legen Sie für andere Automatisierungsumgebungen CODEX_API_KEY nur für den einzelnen Aufruf von codex exec fest und stellen Sie sicher, dass in derselben Prozessumgebung kein nicht vertrauenswürdiger Code ausgeführt wird.
Um für eine einzelne Ausführung einen anderen API key zu verwenden, legen Sie CODEX_API_KEY inline fest:
CODEX_API_KEY=<api-key> codex exec --json "triage open bug reports"CODEX_API_KEY wird nur in codex exec unterstützt.
API keys sind die richtige Standardeinstellung für Automatisierungen, da sie einfacher bereitzustellen und zu rotieren sind. Verwenden Sie diesen Weg nur, wenn Sie ausdrücklich eine Ausführung als Ihr Codex-Konto benötigen.
Verwenden Sie diesen Workflow nicht für öffentliche oder Open-Source-Repositorys. Wenn codex login
auf dem Runner keine Option ist, stellen Sie auth.json über einen sicheren Speicher bereit, führen Sie
Codex auf dem Runner aus, damit Codex die Datei direkt aktualisiert, und bewahren Sie die aktualisierte Datei
zwischen den Ausführungen auf.
Siehe Authentifizierung eines Codex-Kontos in CI/CD aufrechterhalten (fortgeschritten).
Eine nicht interaktive Sitzung fortsetzen
Wenn Sie eine vorherige Ausführung fortsetzen müssen (beispielsweise in einer zweistufigen Pipeline), verwenden Sie den Unterbefehl resume:
codex exec "review the change for race conditions"
codex exec resume --last "fix the race conditions you found"Sie können mit codex exec resume <SESSION_ID> auch eine bestimmte Sitzungs-ID angeben.
Git-Repository erforderlich
Codex setzt voraus, dass Befehle innerhalb eines Git-Repositorys ausgeführt werden, um destruktive Änderungen zu verhindern. Umgehen Sie diese Prüfung mit codex exec --skip-git-repo-check, wenn Sie sicher sind, dass die Umgebung sicher ist.
Gängige Automatisierungsmuster
Beispiel: CI-Fehler in GitHub Actions automatisch beheben
Verwenden Sie für GitHub-Actions-Workflows openai/codex-action, anstatt Codex zu installieren und den API key an einen Shell-Schritt zu übergeben. Die Action startet einen sicheren Proxy für den OpenAI API key.
Sie können Codex verwenden, um automatisch Korrekturen vorzuschlagen, wenn ein CI-Workflow fehlschlägt. Das Muster sieht wie folgt aus:
- Lösen Sie einen nachgelagerten Workflow aus, wenn Ihr Haupt-CI-Workflow mit einem Fehler abgeschlossen wird.
- Checken Sie den fehlgeschlagenen Commit ausschließlich mit Leseberechtigungen für das Repository aus.
- Führen Sie Einrichtungsbefehle vor Codex aus, ohne diesen Schritten Ihren OpenAI API key offenzulegen.
- Führen Sie die Codex GitHub Action aus.
- Speichern Sie die lokalen Änderungen von Codex als Patch-Artefakt.
- Wenden Sie den Patch in einem separaten Auftrag an und öffnen Sie einen Pull Request.
Der nachfolgende Codex-Auftrag verfügt nur über contents: read. Nachdem Codex ausgeführt wurde, serialisiert er lediglich den Diff als Artefakt. Der Auftrag open_pr erhält Schreibberechtigungen für das Repository, aber nicht OPENAI_API_KEY.
Das Beispiel setzt ein Node.js-Projekt voraus. Passen Sie die Einrichtungs- und Testbefehle an Ihren Technologie-Stack an.
Eine ausführlichere Sicherheitscheckliste finden Sie in den Sicherheitshinweisen zur Codex GitHub Action.
name: Codex auto-fix on CI failure
on:
workflow_run:
workflows: ["CI"]
types: [completed]
jobs:
generate_fix:
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
has_patch: ${{ steps.diff.outputs.has_patch }}
steps:
- uses: actions/checkout@v5
with:
ref: ${{ github.event.workflow_run.head_sha }}
fetch-depth: 0
persist-credentials: false
- uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies
run: |
if [ -f package-lock.json ]; then npm ci; fi
- name: Run Codex
uses: openai/codex-action@v1
with:
openai-api-key: ${{ secrets.OPENAI_API_KEY }}
prompt: |
The CI workflow "${{ github.event.workflow_run.name }}" failed for commit
${{ github.event.workflow_run.head_sha }}.
Run `npm test --silent` to reproduce the failure. Identify the minimal
change needed to make the tests pass, implement only that change, and
run `npm test --silent` again.
Do not refactor unrelated files.
- name: Create patch artifact
id: diff
run: |
git add -N .
git diff --binary HEAD > codex.patch
if [ -s codex.patch ]; then
echo "has_patch=true" >> "$GITHUB_OUTPUT"
else
echo "has_patch=false" >> "$GITHUB_OUTPUT"
fi
- name: Upload patch artifact
if: steps.diff.outputs.has_patch == 'true'
uses: actions/upload-artifact@v4
with:
name: codex-fix-patch
path: codex.patch
if-no-files-found: error
open_pr:
runs-on: ubuntu-latest
needs: generate_fix
if: needs.generate_fix.outputs.has_patch == 'true'
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v5
with:
ref: ${{ github.event.workflow_run.head_sha }}
fetch-depth: 0
- uses: actions/download-artifact@v4
with:
name: codex-fix-patch
- name: Apply Codex patch
run: git apply --index codex.patch
- name: Open pull request
env:
GH_TOKEN: ${{ github.token }}
FAILED_HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }}
FAILED_HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
RUN_ID: ${{ github.event.workflow_run.run_id }}
run: |
branch="codex/auto-fix-$RUN_ID"
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git switch -c "$branch"
git commit -m "Auto-fix failing CI via Codex"
git push origin "$branch"
{
echo "Codex generated this patch after CI failed for \`$FAILED_HEAD_SHA\`."
echo
echo "Review the changes before merging."
} > pr-body.md
gh pr create \
--base "$FAILED_HEAD_BRANCH" \
--head "$branch" \
--title "Auto-fix failing CI via Codex" \
--body-file pr-body.mdFortgeschrittene stdin-Weiterleitung
Wenn ein anderer Befehl Eingaben für Codex erzeugt, wählen Sie das stdin-Muster danach aus, woher die Anweisung stammen soll. Verwenden Sie Prompt-plus-stdin, wenn die Anweisung bereits feststeht und Sie die weitergeleitete Ausgabe als Kontext übergeben möchten. Verwenden Sie codex exec -, wenn stdin zum vollständigen Prompt werden soll.
Prompt-plus-stdin verwenden
Prompt-plus-stdin ist nützlich, wenn ein anderer Befehl bereits die Daten erzeugt, die Codex untersuchen soll. In diesem Modus schreiben Sie die Anweisung selbst und leiten die Ausgabe als Kontext weiter. Damit eignet er sich ideal für CLI-Workflows, die auf Befehlsausgaben, Protokollen und generierten Daten basieren.
npm test 2>&1 \
| codex exec "summarize the failing tests and propose the smallest likely fix" \
| tee test-summary.mdProtokolle zusammenfassen
tail -n 200 app.log \
| codex exec "identify the likely root cause, cite the most important errors, and suggest the next three debugging steps" \
> log-triage.mdTLS- oder HTTP-Probleme untersuchen
curl -vv https://api.example.com/health 2>&1 \
| codex exec "explain the TLS or HTTP failure and suggest the most likely fix" \
> tls-debug.mdEine für Slack geeignete Aktualisierung vorbereiten
gh run view 123456 --log \
| codex exec "write a concise Slack-ready update on the CI failure, including the likely cause and next step" \
| pbcopyEinen Kommentar für einen Pull Request aus CI-Protokollen entwerfen
gh run view 123456 --log \
| codex exec "summarize the failure in 5 bullets for the pull request thread" \
| gh pr comment 789 --body-file -codex exec - verwenden, wenn stdin der Prompt ist
Wenn Sie das Prompt-Argument weglassen, liest Codex den Prompt aus stdin. Verwenden Sie codex exec -, wenn Sie dieses Verhalten ausdrücklich erzwingen möchten.
Der Sentinel - ist nützlich, wenn ein anderer Befehl oder ein anderes Skript den gesamten Prompt dynamisch erzeugt. Dies eignet sich gut, wenn Sie Prompts in Dateien speichern, Prompts mit Shell-Skripten zusammensetzen oder aktuelle Befehlsausgaben mit Anweisungen kombinieren, bevor Sie den gesamten Prompt an Codex übergeben.
cat prompt.txt | codex exec -printf "Summarize this error log in 3 bullets:\n\n%s\n" "$(tail -n 200 app.log)" \
| codex exec -generate_prompt.sh | codex exec - --json > result.jsonl