Drop-in Codex AI agent with GitHub Models
This is a drop-in, zero-config Actions harness for OpenAI's Codex agent. It uses GitHub Models for inference, so you don't need to set up any secrets - just copy-pasting the action into your repo should work as-is.
You may need to go into your settings and check the "allow Actions to open PRs" checkbox.
To use it, open an issue in your repo with [codex] in the issue name.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
name: Codex on GitHub Models | |
on: | |
issues: | |
types: [opened] | |
jobs: | |
process-issue: | |
if: contains(github.event.issue.title, '[codex]') | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
issues: write | |
pull-requests: write | |
models: read | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Setup Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '22' | |
- name: Install Codex CLI | |
run: npm install -g @openai/codex | |
- name: Process issue with Codex | |
env: | |
OPENAI_API_KEY: ${{ secrets.GITHUB_TOKEN }} | |
ISSUE_BODY: ${{ github.event.issue.body }} | |
ISSUE_NUMBER: ${{ github.event.issue.number }} | |
ISSUE_TITLE: ${{ github.event.issue.title }} | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
INSTRUCTION="$ISSUE_TITLE --- $ISSUE_BODY" | |
BRANCH_NAME="codex/issue-$ISSUE_NUMBER" | |
git checkout -b $BRANCH_NAME | |
export OPENAI_BASE_URL=https://models.github.ai/inference | |
# any provider string would work here, it's just so codex knows it's using a custom model | |
codex --approval-mode full-auto --provider github --model openai/gpt-4.1 --quiet "$INSTRUCTION" | |
if [[ -n $(git status --porcelain) ]]; then | |
git config user.name "GitHub Models Codex Bot" | |
git config user.email "[email protected]" | |
git add . | |
git commit -m "Codex changes for issue #$ISSUE_NUMBER" | |
git push origin $BRANCH_NAME | |
# Create PR and comment on issue using the same token | |
gh pr create --title "Codex: ${{ github.event.issue.title }}" \ | |
--body "Auto-generated by Codex for issue #$ISSUE_NUMBER" \ | |
--base ${{ github.event.repository.default_branch }} \ | |
--head $BRANCH_NAME | |
gh issue comment $ISSUE_NUMBER --body "Codex created a PR for this issue" | |
else | |
gh issue comment $ISSUE_NUMBER --body "Codex processed this issue but made no changes" | |
fi |