{"id":58796,"date":"2026-02-20T12:04:22","date_gmt":"2026-02-20T12:04:22","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=58796"},"modified":"2026-02-20T12:04:22","modified_gmt":"2026-02-20T12:04:22","slug":"private-self-review-of-github-prs-with-codex-without-posting-comments","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/private-self-review-of-github-prs-with-codex-without-posting-comments\/","title":{"rendered":"Private Self-Review of GitHub PRs with Codex (Without Posting Comments)"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Private Self-Review of GitHub PRs with Codex (Without Posting Comments)<\/h2>\n\n\n\n<p>If you like Codex as a reviewer but don\u2019t want its feedback to show up publicly on your pull requests, the trick is simple:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use the <strong>GitHub integration<\/strong> only when you <em>want<\/em> a visible PR review.<\/li>\n\n\n\n<li>Use <strong>Codex CLI (local)<\/strong> for <strong>private self-review<\/strong>\u2014nothing gets posted back to GitHub.<\/li>\n<\/ul>\n\n\n\n<p>This tutorial shows exactly how to set that up.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Why this matters<\/h2>\n\n\n\n<p>When Codex is connected to GitHub PRs, its review output appears <strong>in the PR<\/strong> like any other review comment. Anyone with access to the PR can see it.<\/p>\n\n\n\n<p>So if your goal is:<\/p>\n\n\n\n<p>\u2705 \u201cReview only when I ask\u201d<br>\u2705 \u201cKeep the feedback private for my own self-review\u201d<\/p>\n\n\n\n<p>\u2026then local review via <strong>Codex CLI<\/strong> is the right workflow.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Part 1: Stop Codex from auto-reviewing PRs<\/h2>\n\n\n\n<p>In <strong>Codex \u2192 Settings \u2192 Code review<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Keep <strong>Personal auto review preferences<\/strong> = <strong>OFF<\/strong><\/li>\n\n\n\n<li>Don\u2019t enable repository-level automatic review triggers (like \u201creview on PR open\u201d)<\/li>\n<\/ol>\n\n\n\n<p>This ensures Codex won\u2019t review every PR automatically.<\/p>\n\n\n\n<p><strong>Result:<\/strong> Codex reviews happen only when you explicitly request them.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Part 2: Understand \u201cWill Codex review the entire codebase?\u201d<\/h2>\n\n\n\n<p><strong>No.<\/strong> Codex CLI review is usually focused on <strong>your diff<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>your PR branch vs a base branch (ex: <code>main<\/code>)<\/li>\n\n\n\n<li>a single commit<\/li>\n\n\n\n<li>only uncommitted changes<\/li>\n<\/ul>\n\n\n\n<p>Codex may open surrounding files for context, but it is not doing a full repo-wide audit unless you explicitly ask for that kind of analysis.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Part 3: Private self-review of a PR using Codex CLI<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1 \u2014 Check out the PR branch locally<\/h3>\n\n\n\n<p>If you use GitHub CLI:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">gh pr checkout <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">PR_NUMBER<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Or with git:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">git fetch origin pull\/<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">PR_NUMBER<\/span>&gt;<\/span>\/head:pr-<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">PR_NUMBER<\/span>&gt;<\/span>\ngit checkout pr-<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">PR_NUMBER<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Step 2 \u2014 Run Codex CLI in your repo<\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd \/path\/to\/your\/repo\ncodex\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Step 3 \u2014 Run a private review<\/h3>\n\n\n\n<p>Inside Codex CLI:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">\/review\n<\/code><\/span><\/pre>\n\n\n<p>Then choose what you want to review:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Branch vs base<\/strong> (recommended): review your PR branch compared to <code>main<\/code><\/li>\n\n\n\n<li><strong>Single commit<\/strong>: useful if your PR is large\u2014review in chunks<\/li>\n\n\n\n<li><strong>Uncommitted changes<\/strong>: great before you commit or push<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4 \u2014 Confirm what\u2019s being reviewed (optional)<\/h3>\n\n\n\n<p>To see the exact diff Codex is looking at:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">\/diff\n<\/code><\/span><\/pre>\n\n\n<p><strong>That\u2019s it.<\/strong><br>You now get review feedback privately in your terminal\/IDE and nothing is posted to the PR.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Best practice workflow (simple and effective)<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Before pushing<\/strong>: run <code>\/review<\/code> on uncommitted or staged changes<\/li>\n\n\n\n<li><strong>Before opening PR<\/strong>: run <code>\/review<\/code> against <code>main<\/code><\/li>\n\n\n\n<li><strong>Only when needed<\/strong>: use <code>@codex review<\/code> in GitHub to get a team-visible review<\/li>\n<\/ol>\n\n\n\n<p>This gives you both:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>private self-review whenever you want<\/li>\n\n\n\n<li>public review only when you choose<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Can Codex review my PR privately <em>inside GitHub<\/em> without others seeing it?<\/h3>\n\n\n\n<p>No. If Codex posts a review to the PR via the GitHub integration, it\u2019s visible to anyone who can access that PR. For private feedback, run the review locally using Codex CLI (or your IDE) instead.<\/p>\n\n\n\n<p>Yes \u2014 <strong>it can \u201ccost\u201d in the sense that it consumes your Codex allowance (quota)<\/strong>, and <strong>may consume paid credits<\/strong> if you go past the included limits.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">If you\u2019re using Codex with your ChatGPT login (Plus \/ Pro \/ Business \/ Enterprise \/ Edu)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>No extra charge up to your plan\u2019s included limits<\/strong> \u2014 Codex is included with these plans. (<a href=\"https:\/\/developers.openai.com\/codex\/pricing\/\" target=\"_blank\" rel=\"noopener\">OpenAI Developers<\/a>)<\/li>\n\n\n\n<li>Your PR self-review (via <strong>Codex CLI <code>\/review<\/code><\/strong>) will consume your <strong>local-message \/ local-task usage window<\/strong>. (<a href=\"https:\/\/developers.openai.com\/codex\/pricing\/\" target=\"_blank\" rel=\"noopener\">OpenAI Developers<\/a>)<\/li>\n\n\n\n<li>If you hit the included limits, you can <strong>extend usage by buying ChatGPT credits<\/strong> (so then it <em>does<\/em> cost). (<a href=\"https:\/\/developers.openai.com\/codex\/pricing\/\" target=\"_blank\" rel=\"noopener\">OpenAI Developers<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">If you trigger review in GitHub (<code>@codex review<\/code>)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>That counts as <strong>Code Review usage<\/strong> (cloud\/GitHub), and it\u2019s the type that\u2019s explicitly \u201ccharged\u201d in the rate card \/ credits model. (<a href=\"https:\/\/help.openai.com\/en\/articles\/11481834-chatgpt-rate-card\" target=\"_blank\" rel=\"noopener\">OpenAI Help Center<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">If you authenticate Codex with an API key<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Then it\u2019s <strong>pay-as-you-go API billing<\/strong> (\u201cpay only for the tokens Codex uses\u201d), separate from your ChatGPT subscription. (<a href=\"https:\/\/developers.openai.com\/codex\/pricing\/\" target=\"_blank\" rel=\"noopener\">OpenAI Developers<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How to check what you\u2019re spending<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In Codex: <strong>usage dashboard<\/strong> (and in CLI you can use <code>\/status<\/code> to see remaining limits). (<a href=\"https:\/\/developers.openai.com\/codex\/pricing\/\" target=\"_blank\" rel=\"noopener\">OpenAI Developers<\/a>)<\/li>\n<\/ul>\n\n\n\n<p>If you tell me which plan you\u2019re on (Plus\/Pro\/Business\/Enterprise) and whether you\u2019re using <strong>GitHub <code>@codex review<\/code><\/strong> or <strong>CLI <code>\/review<\/code><\/strong>, I can tell you exactly which quota bucket you\u2019re consuming.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Private Self-Review of GitHub PRs with Codex (Without Posting Comments) If you like Codex as a reviewer but don\u2019t want its feedback to show up publicly on your pull requests,&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-58796","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/58796","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=58796"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/58796\/revisions"}],"predecessor-version":[{"id":58797,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/58796\/revisions\/58797"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=58796"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=58796"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=58796"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}