Codex Code Review (/review): Hướng Dẫn Kèm Ví Dụ Thật
/review là trình review diff riêng của Codex (OpenAI Codex CLI): nó không bao giờ sửa file trong working tree của bạn, chỉ đọc và trả về danh sách finding có mức ưu tiên. Bạn chạy được từ CLI, IDE extension, ChatGPT desktop app hoặc ChatGPT web, với 4 chế độ (preset) khác nhau tuỳ bạn muốn soi cái gì. Bài này đi thẳng vào cơ chế: 4 preset, các cờ CLI non-interactive để chạy trong script/CI, một ví dụ review thật, và khi nào cần gh để đọc PR trên GitHub.
- Codex là bề mặt tính năng đổi khá nhanh; các chi tiết dưới đây đã đối chiếu tài liệu chính thức tại thời điểm viết (08/2026) - kiểm tra docs live trước khi phụ thuộc vào tên cờ hay hành vi cụ thể.
/review thực chất làm gì?
/review chạy một sub-turn riêng, chỉ đọc: nó đọc diff bạn chỉ định, không đụng vào file trong working tree của bạn. Kết quả trả về là danh sách finding đã xếp theo mức ưu tiên, kèm vị trí trong diff - không phải một đoạn văn nhận xét chung chung. Đây là điểm khác cơ bản so với việc bạn tự dán diff vào chat rồi hỏi "xem giúp có bug không": /review là một luồng riêng, có cấu trúc, tách khỏi phiên code đang chạy.
Theo tài liệu chính thức (learn.chatgpt.com/docs/code-review, truy cập 08/2026), đây là công cụ review được thiết kế để dùng trước khi mở PR hoặc trước khi merge - không phải một chế độ "sửa hộ" như khi bạn giao việc bình thường cho Codex. Nếu bạn quen luồng review của Claude Code, cách nghĩ gần giống nhau: một bước riêng, đọc-trước-khi-viết.
4 chế độ (preset) của /review
Codex không có một nút "review" duy nhất - bạn chọn preset theo phạm vi diff mình muốn soi:
| Preset | Dùng khi nào | Phạm vi review |
|---|---|---|
| Base branch | Xong một nhánh, muốn soi toàn bộ trước khi mở PR | Codex tự tìm merge-base rồi review diff của cả nhánh so với gốc |
| Uncommitted | Đang code dở, chưa git add, muốn soi sớm | Staged + unstaged + untracked |
| A commit | Cần soi đúng một commit cụ thể, ví dụ trước khi rebase/squash | Đúng change set của SHA đó, không hơn không kém |
| Custom instructions | Có tiêu chí riêng, ví dụ chỉ soi bảo mật hoặc theo coding standard nội bộ | Freeform - bạn tự mô tả tiêu chí, Codex review theo đúng yêu cầu đó |
Trong composer, gõ /review rồi chọn preset từ menu. Ba preset đầu là "chọn phạm vi diff sẵn có"; preset thứ tư là chỗ bạn tự viết tiêu chí khi phạm vi mặc định không đủ - ví dụ "chỉ soi lỗ hổng auth" hay "review theo coding standard trong AGENTS.md".
Chạy /review ở đâu - CLI, IDE, app, web
/review không bị khoá vào một giao diện. Bốn bề mặt đang hỗ trợ:
- CLI - gõ
/reviewngay trong composer của phiên terminal, hoặc chạy lệnh không tương táccodex reviewtừ script/CI (xem phần cờ bên dưới). - IDE extension - composer y hệt CLI nhưng nhúng trong VS Code/JetBrains, review ngay cạnh diff đang mở, khỏi chuyển cửa sổ.
- ChatGPT desktop app - có pane review riêng, hợp khi bạn muốn tách hẳn cửa sổ review khỏi cửa sổ code.
- ChatGPT web - chạy review ngay trên trình duyệt, hữu ích khi không có máy dev sẵn trong tay.
Bốn bề mặt này dùng chung một cơ chế review, nhưng UI và tên gọi chi tiết trên từng bề mặt không chắc giống hệt nhau tuyệt đối - đây là chỗ nên kiểm tra docs live nếu bạn thấy tên nút hay vị trí menu lệch so với bài viết.
Cờ CLI non-interactive (cho script/CI)
Ngoài /review trong composer, Codex có lệnh codex review chạy không tương tác - hợp để nhét vào script hoặc pipeline CI. Theo learn.chatgpt.com/docs/cli/reference, truy cập 08/2026:
# Review diff so với nhánh base
codex review --base main
# Review đúng 1 commit, kèm title tuỳ chọn (--title cần đi cùng --commit)
codex review --commit <sha> --title "Fix invoice endpoint"
# Review phần chưa commit (staged + unstaged + untracked)
codex review --uncommitted
# Prompt tự do, đọc trực tiếp từ stdin
git diff | codex review -
# Khớp chặt với config.toml khi cần review nhất quán trong CI
codex review --base main --strict-config
Điểm cần nhớ: các cờ chọn phạm vi loại trừ lẫn nhau - bạn chỉ chọn đúng một trong --base, --commit, --uncommitted, hoặc một PROMPT/stdin cho mỗi lần chạy, không trộn chung. Đây là điểm hay bị đổi âm thầm giữa các bản Codex, nên kiểm tra lại tên cờ trước khi hardcode vào CI.
Review một diff thật - ví dụ minh hoạ
Lý thuyết là vậy, đây là dạng finding /review hay bắt được trên một route Node.js nhỏ (rút gọn để minh hoạ, không phải nguyên văn output). Route lấy hoá đơn theo ID cho một hệ thống multi-tenant:
// Trước
async function getInvoice(req, res) {
const invoice = await db.invoices.findOne({ id: req.params.id });
if (!invoice) return res.status(404).end();
res.json(invoice);
}
Finding 1 (severity: high, đúng): "Thiếu điều kiện lọc theo tenant - route chỉ query theo id, nên user của tenant A có thể xem hoá đơn của tenant B nếu đoán đúng ID. Thêm tenantId: req.user.tenantId vào filter." Đây là lỗi IDOR (insecure direct object reference) kinh điển - đúng cú pháp, chạy được, nhưng rò dữ liệu chéo tenant. Sửa lại:
// Sau
async function getInvoice(req, res) {
const invoice = await db.invoices.findOne({
id: req.params.id,
tenantId: req.user.tenantId,
});
if (!invoice) return res.status(404).end();
res.json(invoice);
}
Finding 2 (severity: medium, cần người xác nhận lại): /review còn gắn cờ "route này không giới hạn rate limit". Đúng về mặt code cục bộ - nhưng sau khi kiểm tra gateway.config.ts, route đã nằm sau rate limiter chung của API gateway rồi. Finding này không sai kỹ thuật, chỉ thiếu ngữ cảnh mà /review không nhìn thấy (config nằm ngoài phạm vi diff) - nên đây là trường hợp cần một người xác nhận trước khi tin, không phải cứ thấy finding là sửa theo.
Hai finding trong một lần chạy minh hoạ đúng cách nên đọc kết quả /review: finding 1 là lỗi thật, sửa ngay; finding 2 đúng về logic cục bộ nhưng sai ngữ cảnh hệ thống - cần bạn xác nhận, không nên tự động apply.
Review PR trên GitHub - khi nào cần gh
Có hai cơ chế khác nhau liên quan tới GitHub, dễ nhầm nếu đọc lướt:
1. Đọc ngữ cảnh PR cục bộ (cần gh). Khi bạn review một PR từ CLI, app, hoặc IDE, Codex cần gh đã cài và đăng nhập để lấy thông tin PR (title, description, comment). Theo docs: nếu gh chưa cài hoặc chưa xác thực, chi tiết PR có thể không hiện trong sidebar hay pane review. Cài và đăng nhập đơn giản:
gh auth login
2. Trigger review từ cloud qua comment (không cần gh local). Comment @codex review ngay trên một PR GitHub sẽ kích hoạt một review chạy phía cloud - cơ chế này tách biệt hoàn toàn với việc đọc PR context cục bộ ở trên, và không đòi hỏi bạn có gh trên máy. Điều kiện là repo đã cấu hình Codex cloud từ trước. Cơ chế này thuộc phạm vi sâu hơn của Codex Cloud - nếu bạn muốn cấu hình review tự động kiểu này, phần đó nằm trong hướng dẫn Codex Cloud, ở đây chỉ nêu một dòng để bạn không nhầm hai cơ chế.
Nên tin một finding của /review tới mức nào?
Nói thẳng: finding của /review là gợi ý đã xếp ưu tiên, không phải một cổng merge tự động. Ví dụ finding 2 ở trên cho thấy rõ - đúng cú pháp, đúng logic cục bộ, nhưng sai vì thiếu ngữ cảnh hệ thống. False positive kiểu đó xảy ra thường xuyên hơn bạn nghĩ khi review chỉ nhìn vào diff mà không thấy toàn bộ repo.
Vì vậy, một người (hoặc, nếu bạn đã cài Engineer Kit của AgentKit, skill/agent code-review của kit đó) vẫn là bên quyết định merge cuối cùng - /review chỉ rút ngắn phần soi cơ học để người review dồn sức vào phần khó hơn. AgentKit có lệnh /ak:review đóng gói sẵn luồng review tương tự chạy trong cả Claude Code lẫn Codex, tiện nếu bạn muốn một quy trình dựng sẵn thay vì tự ghép; nhưng nói rõ đây là bộ kit trả phí cài thêm lên trên - /review của Codex đã miễn phí và đủ dùng cho review cá nhân. Nếu bạn chưa cài, xem cách dùng AgentKit với Codex trước.
Muốn một agent review chuyên trách chạy song song với /review của Codex? AgentKit Engineer Kit đóng gói skill/agent code-review qua lệnh /ak:review, chạy được trên cả Codex lẫn Claude Code - không thay thế /review, chỉ thêm một lớp review có cấu hình sẵn.
Codex /review khác gì luồng review của Claude Code?
Cùng ý tưởng, khác công cụ. Claude Code cũng có /review riêng cùng một quy trình "chặn merge khi còn finding nghiêm trọng" - chi tiết 3 bước và ví dụ finding thật nằm ở bài AI code review cho Claude Code (bài đó không nhắc tới Codex, và bài này không nhắc lại nội dung của nó). Nếu bạn dùng cả hai công cụ, nguyên tắc chung vẫn giữ nguyên: review trên diff, xếp theo severity, và người vẫn quyết merge cuối cùng.
Câu hỏi thường gặp (FAQ)
4 chế độ (preset) của /review trong Codex là gì?
Base branch (review toàn bộ diff so với nhánh gốc), Uncommitted (staged + unstaged + untracked), A commit (đúng change set của một SHA cụ thể), và Custom instructions (bạn tự mô tả tiêu chí review, freeform).
/review có sửa code của tôi không?
Không. /review chạy một sub-turn chỉ đọc, không đụng vào file trong working tree. Nó chỉ trả về danh sách finding đã xếp ưu tiên - bạn tự quyết định sửa hay bỏ qua.
Có cần gh để review PR trên GitHub không?
Có, cho việc đọc ngữ cảnh PR cục bộ (title, description, comment) từ CLI/app/IDE - cần cài và đăng nhập gh, nếu không PR details có thể không hiện trong sidebar. Đây khác với việc comment @codex review, không cần gh local.
@codex review trên GitHub là gì?
Là một cách trigger review chạy phía cloud bằng cách comment @codex review ngay trên PR, tách biệt với việc đọc PR context cục bộ. Cần repo đã cấu hình Codex cloud từ trước; chi tiết sâu hơn thuộc về Codex Cloud, không phải phạm vi bài này.
Có chạy /review trong script hay CI được không?
Được, qua lệnh không tương tác codex review với các cờ --base, --commit, --uncommitted, hoặc một PROMPT/stdin - đúng một cờ phạm vi cho mỗi lần chạy, không trộn chung nhiều cờ.
/review có thay thế người duyệt (approve) không?
Không. Finding của /review là gợi ý đã xếp ưu tiên, có thể sai vì thiếu ngữ cảnh hệ thống (như finding 2 ở trên). Người - hoặc agent review chuyên trách như của AgentKit Engineer Kit - vẫn là bên quyết định merge cuối cùng.
Kết luận
Tóm gọn: /review của Codex có 4 preset, chạy được trên CLI/IDE/app/web, không bao giờ tự sửa file, và cần gh khi bạn muốn đọc ngữ cảnh PR cục bộ - còn @codex review trên comment là một cơ chế cloud riêng. Đọc finding như gợi ý đã xếp ưu tiên, không phải cổng merge tự động. Nếu bạn cũng dùng Claude Code, xem thêm luồng AI code review cho Claude Code; muốn hiểu Codex từ đầu, xem OpenAI Codex là gì.