Codex GitHub Action(openai/codex-action@v1)を使うと、GitHub Actions のワークフローから、CI/CD ジョブでの Codex の実行、パッチの適用、レビューの投稿ができます。
このアクションは Codex CLI をインストールし、API キーが指定されていれば Responses API プロキシを起動したうえで、指定した権限で codex exec を実行します。
このアクションは、次のような場合に利用できます。
- CLI を自分で管理せずに、pull requests やリリースに対する Codex のフィードバックを自動化したい場合
- CI パイプラインで Codex に品質チェックを任せ、チェックの通過を変更の取り込み条件にしたい場合
- コードレビュー、リリース準備、移行など、繰り返し行うタスクをワークフローファイルから Codex で実行したい場合
CI での使用例は非対話モードを、アクションのソースコードは openai/codex-action リポジトリを参照してください。
前提条件
- OpenAI の API キーを GitHub のシークレット(例:
OPENAI_API_KEY)として保存し、ワークフローから参照します。 - ジョブは Linux または macOS のランナーで実行します。Windows では
safety-strategy: unsafeを設定してください。 - Codex がリポジトリの内容を読み取れるように、アクションを呼び出す前にコードをチェックアウトします。
- 実行するプロンプトを決めます。
promptでテキストを直接指定するか、prompt-fileでリポジトリにコミット済みのファイルを指定できます。
ワークフローの例
次のワークフローは、新しい pull requests をレビューし、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 入力にテキストを直接指定してください。この例では、Codex の最終メッセージを codex-output.md にも書き出すため、後から内容を確認したり、アーティファクトとしてアップロードしたりできます。
codex exec の設定
codex exec のオプションに対応するアクション入力を設定すると、Codex の実行方法を細かく調整できます。
promptまたはprompt-file(どちらか一方):指示を直接入力するか、タスクを記述した Markdown ファイルまたはテキストファイルのリポジトリ内のパスを指定します。プロンプトの保存先には.github/codex/prompts/を検討してください。codex-args:追加の CLI フラグを指定します。JSON 配列(例:["--ephemeral"])またはシェルで使う形式の文字列(--profile ci)で、セッション、プロファイル、MCP の設定を指定できます。modelとeffort:Codex エージェントのモデルと推論強度を選びます。空欄にするとデフォルト値が使われます。sandbox:実行時に Codex が必要とする権限に応じて、サンドボックスモード(workspace-write、read-only、danger-full-access)を選びます。output-file:Codex の最終メッセージをファイルに保存し、後続のステップでアップロードや差分の確認ができるようにします。codex-version:CLI のバージョンを固定します。空欄にすると、公開済みの最新バージョンが使われます。codex-home:複数のステップで設定ファイルや MCP の設定を再利用する場合は、共有する Codex ホームディレクトリを指定します。
権限の管理
GitHub ホステッドランナーでは、明示的に制限しない限り、Codex に広範なアクセス権があります。次の入力で、Codex のアクセス範囲やアクションを実行できるアカウントを制限できます。
safety-strategyのデフォルト値drop-sudoでは、Codex の実行前にsudoを削除し、メモリ上のシークレットを保護します。この操作はジョブ内では元に戻せません。Windows ではsafety-strategy: unsafeを設定する必要があります。unprivileged-userを使う場合は、safety-strategy: unprivileged-userとcodex-userを組み合わせて、指定したアカウントで Codex を実行します。そのユーザーがチェックアウト済みのリポジトリを読み書きできることを確認してください(所有権の修正方法はunprivileged-userの例を参照)。read-onlyでは、Codex によるファイルの変更やネットワークの使用を禁止しますが、Codex 自体は引き続き昇格した権限で実行されます。シークレットの保護をread-onlyだけに頼らないでください。sandboxは、Codex 内からのファイルシステムとネットワークへのアクセスを制限します。タスクを完了できる範囲で、権限が最も限定されたオプションを選んでください。allow-usersとallow-botsは、ワークフローを起動できるアカウントを制限します。デフォルトでは、書き込み権限を持つユーザーだけがアクションを実行できます。追加で許可する信頼済みアカウントを明示的に列挙するか、デフォルトの動作を使う場合は空欄にしてください。
出力の取得
アクションは、Codex の最終メッセージを final-message 出力として返します。上の例のようにジョブの出力に割り当てるか、後続のステップで直接利用できます。ランナーから実行記録全体を取得したい場合は、output-file とアーティファクトのアップロード機能を組み合わせます。構造化データが必要な場合は、--output-schema を codex-args 経由で渡し、出力の JSON が指定したスキーマに従うようにします。
セキュリティチェックリスト
- ワークフローを起動できるユーザーを制限してください。誰でもリポジトリに対して Codex を実行できるようにするのは避け、信頼できるイベントを使うか、明示的な承認を求めてください。
- プロンプトインジェクションを防ぐため、pull requests、コミットメッセージ、イシューの本文からプロンプトに取り込む入力をサニタイズしてください。HTML コメントや非表示のテキストは、Codex に渡す前に内容を確認してください。
OPENAI_API_KEYを保護するため、safety-strategyはdrop-sudoのままにするか、特権のないユーザーで Codex を実行してください。マルチテナントのランナーでは、アクションをunsafeモードのままにしないでください。- 後続のステップに予期しない状態変更が引き継がれないよう、Codex はジョブの最後のステップで実行してください。
- プロキシのログやアクションの出力から機密情報が漏えいした疑いがある場合は、直ちにキーをローテーションしてください。
トラブルシューティング
- prompt と prompt-file の両方を指定した場合:入力を一方だけ残し、プロンプトの指定元を 1 つにしてください。
- responses-api-proxy がサーバー情報を書き出さない場合:API キーが設定されていて、有効であることを確認してください。プロキシが起動するのは
openai-api-keyを指定した場合だけです。 sudoを削除する設定なのにsudoが成功する場合:それ以前のステップでsudoが復元されていないことと、ランナーの OS が Linux または macOS であることを確認してください。新しいジョブで再実行してください。drop-sudo適用後に権限エラーが発生する場合:アクションの実行前に書き込み権限を付与してください。たとえば、chmod -R g+rwX "$GITHUB_WORKSPACE"を実行するか、unprivileged-user を使った構成にします。- 権限のないアカウントからの起動がブロックされた場合:デフォルトで許可される書き込み権限を持つコラボレーターに加えて、サービスアカウントにも実行を許可する必要がある場合は、
allow-usersまたはallow-botsの入力を調整してください。