Codex Code Review Alternative for Gating and Routing PRs
What OpenAI's Codex GitHub review does according to its own docs, where merge enforcement still happens, and how a required check with routed questions compares.
Published 10 min readBy the Warpway team
Before you pick an alternative to Codex code review, decide what the review should control. OpenAI's docs describe Codex's GitHub review as a reviewer you call with @codex review or turn on for every pull request. It flags only P0 and P1 issues. OpenAI calls it "an additional reviewer" and says tests, branch protections and required approvals still do the hard enforcement. If you want the review result itself to block merges, and want questions it can't settle sent to a specific person, you need something that reports a required check and routes questions. You can build a fail-closed gate around Codex in GitHub Actions, or use a tool built for gating and routing, such as Warpway.
What Codex code review does, according to OpenAI's docs
As of November 2026, OpenAI's Codex code review in GitHub page and related docs describe this workflow:
- Setup. Connect the repository to Codex, choose it in Codex settings and turn on code review. Configuring automatic reviews requires push or admin permission on the GitHub repository.
- On-demand reviews. Comment
@codex reviewon a pull request. Codex reacts with 👀 and posts a review. You can narrow a single review in the same comment, for example@codex review for issues in the database migration. - Automatic reviews. Turn on Automatic review and choose when reviews run with Review trigger. No comment is needed.
- Severity threshold. In GitHub, Codex flags only P0 and P1 issues.
- Repository rules. Add a
## Code Review Rulessection to theAGENTS.mdfile closest to the code the rules cover. Repository-wide rules go in the root file and service-specific rules go in nested files. OpenAI advises keeping rules concise and leaving formatting and lint to CI. - Security review. A separate, deeper security review, triggered with
@codex security review, is in research preview. - Billing. OpenAI's pricing page says Code Review usage applies when Codex runs reviews through GitHub, either because someone tagged it or because automatic reviews are on. It also says the API-key option has "no cloud-based features (GitHub code review, Slack, etc.)". As of November 2026 it lists Plus at $20 a month, and Business at $20 per user per month billed annually or $25 billed monthly.
OpenAI is direct about where enforcement happens. Its July 2026 post, Custom Code Review rules for Codex, says "Codex Code Review is still an additional reviewer" and that "tests, branch protections, and required approvals continue to provide hard enforcement." The GitHub docs page says review rules "don't replace tests, branch protections, or required approvals." The use-case page says it's for teams that want "another review signal before human merge approval."
Why teams look for an alternative
Some teams want a second reviewer that comments on serious problems and leaves enforcement to their existing GitHub rules. That is what Codex is designed for, and those teams may not need an alternative. Teams usually start looking when they need one of these three things.
1. The review result should decide the merge. OpenAI's GitHub page describes a review posted on the pull request. It does not describe a check run or pass/fail status you could add to a ruleset. Enforcement stays with your branch protection and the people who approve.
2. "Nothing flagged" should be distinguishable from "not investigated." Because Codex flags only P0 and P1 issues, the review is limited to high-priority problems. If you plan to gate on any reviewer, you also need to know two things. Were the risky parts of the change actually examined? What happens when the run fails partway? Ask every tool you evaluate how it reports "couldn't finish."
3. Some questions are not code questions. "Should unused credits survive a subscription cancellation?" is a product decision. A reviewer can raise it in a comment, but then it waits for whoever reads the thread. OpenAI's docs describe findings posted on the pull request. They don't describe assigning an open question to a named owner or tracking whether it was answered.
Option 1: Keep Codex and wrap it in a fail-closed gate
If you're happy with Codex's findings and only need enforcement, OpenAI's codex-action runs the Codex CLI inside a GitHub Actions workflow. It takes an openai-api-key and either a prompt or a prompt-file, and it returns Codex's final-message as an output. In the README's review example, a separate job posts that message as a pull request comment. The README describes no pass/fail logic based on findings, so you have to write the gate yourself.
The part people get wrong is the failure mode. GitHub accepts a required status check as passing when it is successful, skipped or neutral (GitHub Docs). A gate that fails only when it sees a bad verdict will pass when Codex errors, times out or is skipped. Make the gate pass only on an explicit verdict:
name: codex-gate
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
final_message: ${{ steps.codex.outputs.final-message }}
steps:
- uses: actions/checkout@v4
with:
ref: refs/pull/${{ github.event.pull_request.number }}/merge
persist-credentials: false
- id: codex
uses: openai/codex-action@v1 # pin to a release you have reviewed
with:
openai-api-key: ${{ secrets.OPENAI_API_KEY }}
prompt-file: .github/codex/review-prompt.md
gate:
needs: review
if: always()
runs-on: ubuntu-latest
steps:
- name: Pass only on an explicit verdict
env:
REVIEW_RESULT: ${{ needs.review.result }}
FINAL_MESSAGE: ${{ needs.review.outputs.final_message }}
run: |
if [ "$REVIEW_RESULT" != "success" ]; then
echo "::error::Codex review did not finish"; exit 1
fi
last="$(printf '%s\n' "$FINAL_MESSAGE" | sed '/^[[:space:]]*$/d' | tail -n 1)"
if [ "$last" != 'VERDICT: PASS' ]; then
echo "::error::No explicit PASS verdict"; exit 1
fiYour prompt file must tell Codex to end with exactly VERDICT: PASS or VERDICT: BLOCK. Then make the gate job a required check. Know these limits before you rely on it:
- The verdict is model output, produced after the model reads the pull request's text, so a crafted description or comment can try to steer it. See prompt injection in AI code review.
- The README warns that the default
drop-sudostrategy's changes "can outlive a job on reused self-hosted runners," and that "the OpenAI API key still flows through the proxy" even inread-onlymode. It recommends disposable runners. - This setup uses an API key, not the ChatGPT-plan GitHub integration.
- Questions Codex raises still end up in a comment that isn't assigned to anyone.
Option 2: Warpway, a required check that routes questions to people
Warpway is a GitHub App. On each eligible pull request it runs an investigation through lenses, then reports one check, Warpway / Review, and one summary comment that it edits in place as the review progresses (how reviews work). It differs from Codex's documented workflow in three ways.
A required check bound to the commit
At trust level 2 (Gate), which needs the Team plan, the check concludes success only when your review policy is satisfied. It concludes action_required when only human questions remain. It concludes failure for blocking findings, lenses that couldn't finish, failing required CI, invalid configuration or a system error. To enforce it, add Warpway / Review as a required check in a ruleset and select the Warpway app as its source (merge gating). Each check run is tied to the exact head commit, so a new commit starts a new run. The policy is evaluated by deterministic code from the stored results, not by a model. The severities that block merges are a setting you control:
version: 1
required_lenses:
- correctness
- security
- testing
merge_gate:
block_on_severities:
- critical
- high
require_zero_open_human_tasks: true
fail_on_incomplete: trueWarpway reads .warpway.yml from the base branch, so a pull request cannot loosen the policy used to review it.
Lens states that fail closed
Every lens ends in exactly one of four states:
| State | On GitHub | Effect for a required lens |
|---|---|---|
| Cleared | Passed | Satisfies the lens |
| Issue found | Issues found | Blocks while a finding at a blocking severity is open |
| Human decision required | Waiting on a named person | Blocks until the question is answered and the lens is re-run |
| Incomplete | Couldn't finish | Blocks, and never changes to Cleared on its own |
A failed model call, a repository that can't be fetched, or a verification run that times out each make the lens Incomplete. Warpway never reports success while blockers exist. The workflow gate above is a hand-built version of this behavior.
Questions routed to a named person
When a lens can't settle something important, it creates a human task. A task has a specific question, why it matters, the evidence gathered so far, the relevant lines, the expected answers and what each answer will lead to. Routing picks who gets it, checking sources in priority order: the rule's owner, the lens owner, CODEOWNERS, configured contacts, people who reviewed or recently changed the code, the linked issue and topic expertise. Each assignment includes a written reason for picking that person. Engineers answer on GitHub with /warpway answer <code> <answer>. On the Team plan, product or policy owners can answer in a Slack direct message. A vague reply such as "Sounds fine" triggers one follow-up question. "I'm not the right person" sends the task to the next candidate. If nobody suitable is found, the task stays visible as unassigned rather than disappearing. Here is a check summary from Warpway's docs:
1 open question waiting on Priya Shah · nothing else is blocking
| Lens | Result |
| Correctness | ✅ Passed |
| Security | ✅ Passed |
| Testing / Reliability | ✅ Passed |
| Product Semantics | 🙋 Waiting on Priya Shah |For a finding on a real change, see the Hono c.json(undefined) replay. It is a merged open-source pull request that was run through Warpway on 2026-10-07, in the state it was in before merge.
What Warpway doesn't do
- It works only with GitHub.
- It never merges or pushes code. Its Contents permission is read-only, so it doesn't commit fixes to your branch.
- A passing check is not a GitHub approval. Required approvals still come from people unless you enable auto-approval (Team plan, trust level 4, enabled by an Owner) and your GitHub rules count its approval.
- Merge gating needs the Team plan. On Free, the check concludes
neutral. - It doesn't report on merge-queue groups, so don't require its check in a ruleset that also gates a merge queue.
Codex vs a Codex Actions gate vs Warpway
| Codex GitHub review | Codex in Actions (your gate) | Warpway | |
|---|---|---|---|
| Starts on | @codex review or automatic reviews | Your workflow triggers | Opened, reopened, new commits, ready for review; or a manual re-run |
| Posts | A review on the PR | Whatever your workflow posts | One check, one summary comment, annotations on concrete findings |
| Flags | P0 and P1 only | Whatever your prompt asks for | All severities; which ones block is configurable |
| Blocks merges | Not described; OpenAI calls it an additional reviewer | Yes, if the gate job is required | Yes, at Gate with the check required |
| If the run fails | Not described | Whatever your workflow does | Lens is Incomplete; check doesn't pass |
| Open questions | PR comment | PR comment | Task routed to a named person in GitHub or Slack |
| Rules live in | AGENTS.md | Your prompt file | .warpway.yml on the base branch |
Running Codex and Warpway together
You don't have to remove Codex. Warpway's lenses can read existing comments and reviews on a pull request. They treat them as untrusted data, never as instructions. A staged rollout looks like this:
- Install Warpway on the repositories where Codex already reviews, and leave Codex's triggers as they are.
- Start at Observe or Assist. The check finishes
neutraland blocks nothing. At Assist, questions start reaching people. See trust levels. - For a week or two, compare what each tool flagged, and look at which questions Warpway asked and who it asked.
- Raise the repository to Gate and make
Warpway / Reviewa required check. - Keep GitHub's required approvals.
For more on staging, see how to roll out AI code review.
Which to choose
- Codex alone fits if you want a second reviewer and your existing branch protection and approvals already enforce what you need.
- Codex plus an Actions gate fits if you want Codex's output to block merges and you're willing to maintain the prompt, the parsing, the fail-closed logic and the runner hardening.
- Warpway fits if you're on GitHub and want the gate, an explicit "couldn't finish" state and routed questions built into the tool.
If you're also comparing other review bots, see the Claude Code Review, Copilot code review and Cursor Bugbot alternatives.
Frequently asked questions
Can I use Codex code review in GitHub with only an OpenAI API key?
As of November 2026, OpenAI's Codex pricing page says the API-key option has no cloud-based features, and GitHub code review is one of them. GitHub reviews come from a ChatGPT plan and count against its Code Review usage. If you only have an API key, the option is OpenAI's codex-action, which runs Codex inside your own GitHub Actions workflow.
Does Warpway also send my code to OpenAI?
Yes. Warpway's hosted service runs every review step on an OpenAI model through OpenAI's API, with response storage turned off. Warpway does not train models on your code, and Warpway's model providers documentation says OpenAI does not train on API data unless the customer opts in, which Warpway has not, and may keep API inputs and outputs for up to 30 days for abuse monitoring. If you are leaving Codex because you want a different model provider, keep this in mind.
Can Warpway block merges on the Free plan?
No. On the Free plan the trust level is capped at Assist, where the Warpway / Review check finishes as neutral and GitHub counts that as passing. Merge gating needs the Team plan, which its billing docs list at $30 per developer per month and which has a 14-day trial with no card required. People who only answer questions do not use a seat.
Does a passing Warpway check count as a GitHub approval?
No. The check and an approving review are separate things, so if your branch requires approvals, people still give them. The exception is auto-approval, which is off by default, needs the Team plan, trust level 4 and an Owner to enable it, approves only when every deterministic condition passes for the exact commit, and counts toward required approvals only if your GitHub rules count it. Warpway never merges.