Skip to content

Instantly share code, notes, and snippets.

@sgoedecke
Last active August 4, 2025 00:34
Show Gist options
  • Save sgoedecke/2b4e8d5e6b21f536ea399f1728916ad5 to your computer and use it in GitHub Desktop.
Save sgoedecke/2b4e8d5e6b21f536ea399f1728916ad5 to your computer and use it in GitHub Desktop.
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.

Note: I've updated this to work for the latest version of Codex (the Rust one). If you're using the Python one, you'll have to go to a previous version of this Gist.

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: Install ripgrep
run: sudo apt-get update && sudo apt-get install -y ripgrep
- name: Process issue with Codex
env:
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
codex exec \
-c model=gpt-4.1 \
-c model_provider=github \
-c 'model_providers.github={name="GitHub Models", base_url="https://models.github.ai/inference", env_key="GH_TOKEN", wire_api="chat"}' \
--full-auto "$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
@sgoedecke
Copy link
Author

@naXa777 Thank you for the feedback! I've added a step to install ripgrep.

About the 413 error - unfortunately the free tier of GitHub Models doesn't have a large enough context window to run Codex (it's 8k tokens max). There's no way around that without going into your GitHub settings for Models and turning on paid usage.

in a public repository, anyone can create an issue with [codex] in the title, which would trigger the workflow.

If you did want to lock this down in a public repository, the easiest way would be to have some kind of allowlist in the workflow body, e.g.:

      - name: Check if user is allowed
        id: check_user
        run: |
          ALLOWED_USERS="user1 user2"
          if [[ " $ALLOWED_USERS " =~ " ${{ github.event.issue.user.login }} " ]]; then
            echo "allowed=true" >> $GITHUB_OUTPUT
          else
            echo "allowed=false" >> $GITHUB_OUTPUT
          fi

      - name: Comment and close if not allowed
        if: steps.check_user.outputs.allowed != 'true'
        run: |
          gh issue comment ${{ github.event.issue.number }} --body "Sorry, only approved users can create [codex] issues."
          gh issue close ${{ github.event.issue.number }}

You could also use the API to check for org membership if you wanted to get more sophisticated with it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment