Codex GitHub Action
GitHub Events から Codex アクションをトリガーします
Codex GitHub Action(openai/codex-action@v1)を使用すると、CI/CD ジョブで Codex を実行したり、パッチを適用したり、GitHub Actions ワークフローからレビューを投稿したりできます。このアクションは Codex CLI をインストールし、API key を指定した場合は Responses API プロキシを起動して、指定した権限のもとで codex exec を実行します。
次のような場合に、このアクションを使用できます。
- CLI を自分で管理せずに、pull request やリリースに対する Codex のフィードバックを自動化する。
- CI パイプラインの一部として、Codex を活用した品質チェックを変更のマージ条件にする。
- ワークフローファイルから、繰り返し実行できる Codex タスク(コードレビュー、リリース準備、マイグレーション)を実行する。
CI の例については、非対話モードを参照し、openai/codex-action リポジトリでソースを確認してください。
前提条件
- OpenAI key を GitHub secret(例:
OPENAI_API_KEY)として保存し、ワークフローから参照します。 - Linux または macOS の runner でジョブを実行します。Windows の場合は、
safety-strategy: unsafeを設定してください。 - アクションを呼び出す前にコードを checkout し、Codex がリポジトリの内容を読み取れるようにします。
- 実行する prompt を決めます。
promptでインラインテキストを指定するか、prompt-fileでリポジトリに commit されたファイルを指定できます。
ワークフローの例
以下のサンプルワークフローは、新しい pull request をレビューし、Codex の応答を取得して、PR に投稿します。
name: Codex pull request review
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
codex:
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
final_message: ${{ steps.run_codex.outputs.final-message }}
steps:
- uses: actions/checkout@v5
with:
ref: refs/pull/${{ github.event.pull_request.number }}/merge
fetch-depth: 0
persist-credentials: false
- name: Run Codex
id: run_codex
uses: openai/codex-action@v1
with:
openai-api-key: ${{ secrets.OPENAI_API_KEY }}
prompt-file: .github/codex/prompts/review.md
output-file: codex-output.md
post_feedback:
runs-on: ubuntu-latest
needs: codex
if: needs.codex.outputs.final_message != ''
permissions:
issues: write
pull-requests: write
steps:
- name: Post Codex feedback
uses: actions/github-script@v7
with:
github-token: ${{ github.token }}
script: |
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
body: process.env.CODEX_FINAL_MESSAGE,
});
env:
CODEX_FINAL_MESSAGE: ${{ needs.codex.outputs.final_message }}.github/codex/prompts/review.md を独自の prompt ファイルに置き換えるか、インラインテキストには prompt 入力を使用してください。この例では、後から確認したり artifact としてアップロードしたりできるように、Codex の最終メッセージも codex-output.md に書き込みます。
codex exec の設定
codex exec のオプションに対応するアクション入力を設定して、Codex の実行方法を細かく調整できます。
promptまたはprompt-file(いずれか一方を選択):タスクのインライン指示、または Markdown やテキストが格納されたリポジトリ内のパスです。prompt は.github/codex/prompts/に保存することを検討してください。codex-args:追加の CLI flag です。JSON array(例:["--ephemeral"])または shell string(--profile ci)を指定して、session、profile、MCP settings を設定できます。modelとeffort:使用する Codex agent configuration を選択します。デフォルトを使用する場合は空のままにします。sandbox:sandbox mode(workspace-write、read-only、danger-full-access)を、実行中に Codex が必要とする権限に合わせます。output-file:Codex の最終メッセージをディスクに保存し、後続の step でアップロードや差分比較ができるようにします。codex-version:特定の CLI release に固定します。公開済みの最新バージョンを使用する場合は空のままにします。codex-home:step 間で configuration file や MCP setup を再利用する場合は、共有 Codex home directory を指定します。
権限の管理
制限しない限り、Codex は GitHub-hosted runner 上で広範なアクセス権を持ちます。次の入力を使用してアクセス範囲を制御してください。
safety-strategy(デフォルトはdrop-sudo)は、Codex を実行する前にsudoを削除します。この操作はジョブ内では元に戻せず、メモリ内の secret を保護します。Windows ではsafety-strategy: unsafeを設定する必要があります。unprivileged-userは、safety-strategy: unprivileged-userとcodex-userを組み合わせ、Codex を特定の account として実行します。その user が checkout されたリポジトリを読み書きできることを確認してください(所有権を修正する方法については、unprivileged-userの例を参照してください)。read-onlyは Codex によるファイルの変更や network の使用を防ぎますが、Codex 自体は引き続き昇格された権限で実行されます。secret の保護をread-onlyだけに依存しないでください。sandboxは Codex 内部での filesystem と network へのアクセスを制限します。タスクを完了できる範囲で最も制限の厳しいオプションを選択してください。allow-usersとallow-botsは、ワークフローをトリガーできる user を制限します。デフォルトでは write access を持つ user のみがアクションを実行できます。信頼する追加 account を明示的に列挙するか、デフォルトの動作を使用する場合はフィールドを空のままにしてください。
出力の取得
このアクションは、Codex の最後のメッセージを final-message output として出力します。上記の例のように job output に割り当てるか、後続の step で直接処理してください。runner から完全な transcript を収集したい場合は、output-file と artifact のアップロード機能を組み合わせます。構造化データが必要な場合は、codex-args で --output-schema を渡して JSON の形式を強制してください。
セキュリティチェックリスト
- ワークフローを開始できる user を制限します。誰でもリポジトリに対して Codex を実行できるようにするのではなく、信頼できる event または明示的な承認を使用してください。
- prompt injection を避けるため、pull request、commit message、issue body から取得した prompt 入力をサニタイズします。Codex に渡す前に、HTML comment や非表示テキストを確認してください。
safety-strategyをdrop-sudoのままにするか、Codex を権限のない user に切り替えて、OPENAI_API_KEYを保護します。multi-tenant runner では、アクションをunsafemode のままにしないでください。- 後続の step が予期しない状態変更を引き継がないように、Codex を job の最後の step として実行します。
- proxy log やアクションの出力によって secret 情報が漏えいした疑いがある場合は、直ちに key をローテーションしてください。
トラブルシューティング
- prompt と prompt-file の両方を設定した場合:入力の重複を削除し、source を必ず一つだけ指定してください。
- responses-api-proxy が server info を書き込まなかった場合:API key が存在し、有効であることを確認してください。proxy は
openai-api-keyを指定した場合にのみ起動します。 sudoが削除されるはずなのに、sudoが成功した場合:それより前の step でsudoが復元されていないこと、および runner OS が Linux または macOS であることを確認してください。新しい job で再実行します。drop-sudo実行後に permission error が発生した場合:アクションを実行する前に write access を付与してください(例:chmod -R g+rwX "$GITHUB_WORKSPACE"を使用するか、unprivileged-user pattern を使用します)。- 許可されていないトリガーがブロックされた場合:デフォルトの write collaborator 以外の service account を許可する必要がある場合は、
allow-usersまたはallow-botsの入力を調整してください。