# Đừng bắt coding agent tự review code của chính nó

[DevOps Toolbox](https://homus.dev/speakers/devops-toolbox) · [DevOps Toolbox](https://homus.dev/orgs/devops-toolbox)

> Cài PR-Agent open source làm GitHub Action để review PR: nén context, committable suggestions, skills, dynamic context và self-reflection.

Topics: Coding Agents, Dev Tools, Workflow

Canonical: https://homus.dev/talks/stop-asking-your-coding-agent-to-review-its-own-code

## 1. Thật lòng đi: bạn có đọc code của mình không?

Người dẫn kênh DevOps Toolbox mở đầu bằng một câu hỏi thẳng: hãy thành thật, bạn không thật sự nhìn vào code của mình, đúng không? Ý anh là, chắc chắn thỉnh thoảng bạn có liếc qua, có thể là lúc sửa bug hoặc lúc đụng tới những phần quan trọng, nhạy cảm. Nhưng ai thật sự đi qua mọi thứ, từng dòng một, để chắc rằng code theo đúng guidelines, best practices, security, và nói chung là những thứ của nghề làm software?

![Người dẫn kênh DevOps Toolbox nói trước camera, bên trái có dòng chữ TO HAVE YOUR BACK, bên phải là hình minh hoạ một robot đứng sau lưng người đang ngồi làm việc](https://homus.dev/photos/gEJ26rECifc-0029.jpg)

Phần mở đầu: dòng chữ "To have your back" cùng hình minh hoạ một robot đứng sau lưng người đang ngồi code, đúng ý "có ai đó chống lưng cho bạn" mà anh nói (video đăng ngày 30/10/2026).

Theo anh (video đăng ngày 30/10/2026), ngoài kia có những dịch vụ mà bạn có thể outsource việc này. Nhưng sao không thử một lựa chọn open source? Một công cụ dùng AI để tự động review, viết mô tả và cải thiện pull request từ đầu tới cuối. Nói cách của anh: có ai đó chống lưng cho bạn.

Anh kể công cụ này từng là một sản phẩm thương mại, thứ mà những cái tên lớn thật sự trả tiền để dùng, và rồi đội làm ra nó đã tử tế đóng góp toàn bộ codebase cho cộng đồng. Theo anh (video đăng ngày 30/10/2026), điều đó có nghĩa là bạn có thể dùng nó, sửa nó, nhưng quan trọng nhất là tự host nó. Cắm bất kỳ LLM nào vào, dùng subscription của chính bạn hoặc một model chạy local, bạn được tự do làm theo ý mình. Và rồi anh bắt đầu.

## 2. PR-Agent, và cái prompt review đáng xấu hổ

Công cụ đó là **PR-Agent**: một agent open source mô tả, review và cải thiện pull request. Anh lưu ý rằng ba động từ đó không chỉ nằm trong tiêu đề, mà chính là các lệnh mà công cụ này đi kèm. Trang docs trên màn hình (video đăng ngày 30/10/2026) cho thấy các lệnh `/describe`, `/review`, `/improve` và `/ask`, ghi rằng có thể chạy PR-Agent từ một comment trên PR, một webhook, CI hoặc terminal, và liệt kê các nền tảng GitHub, GitLab, Bitbucket, Azure DevOps và Gitea.

![Trang chủ docs của PR-Agent: tiêu đề PR-Agent, mô tả open-source AI agent, ví dụ một PR Reviewer Guide và khung Quick start với lệnh docker run](https://homus.dev/photos/gEJ26rECifc-0055.jpg)

Trang chủ docs của PR-Agent như trên màn hình (video đăng ngày 30/10/2026): một ví dụ PR Reviewer Guide do lệnh `/review` sinh ra, và khung Quick start chạy review từ terminal bằng `docker run` với một OpenAI key và một GitHub token.

Theo anh, dự án nằm dưới tổ chức riêng của nó trên GitHub, the-pr-agent, và có hơn 13.000 sao (video đăng ngày 30/10/2026; trang repo ghi 13.8k sao, đọc ngày 30/10/2026). Anh nói đây đúng là thứ anh đang tìm.

Để có bối cảnh, anh kể: vài tháng trước, khi tìm hiểu OpenCode, anh nhận ra mình có thể chạy nó như một GitHub Action. Thế là anh làm vậy, với model miễn phí mà họ cung cấp lúc đó (theo lời anh, video đăng ngày 30/10/2026). Và dù cực kỳ xấu hổ về thứ sắp cho xem, anh vẫn mở ra cái prompt anh đã thêm vào workflow, về cơ bản chỉ nói "review the changes in this pull request thoroughly". Anh tự chế giễu: "Làm tốt lắm anh bạn, chuẩn không cần chỉnh."

![File opencode.yml trên GitHub: workflow chạy opencode khi có comment chứa /oc hoặc /opencode, với prompt review ở cuối](https://homus.dev/photos/gEJ26rECifc-0123.jpg)

File `.github/workflows/opencode.yml` trong repo của anh (video đăng ngày 30/10/2026): job chạy OpenCode khi một comment chứa `/oc` hoặc `/opencode`, và toàn bộ việc review dồn vào một đoạn prompt ngắn ở cuối file.

Phần prompt trên màn hình (video đăng ngày 30/10/2026):

```
Review the changes in this pull request thoroughly.
After your review, decide whether the PR is ready to merge.
If you determine it is ready, run the following shell command to approve it:
gh pr review ${{ github.event.issue.number }} --approve --body ""
If you find issues that must be fixed first, do NOT approve - instead leave a review comment explaining what needs to change.
The GH_TOKEN environment variable is already available for the gh CLI.
```

Từ đó anh đặt vấn đề: sao không dùng hẳn một công cụ sinh ra cho đúng việc này?

## 3. PR-Agent xử lý một PR thế nào, và chuyện nén context

Anh mô tả luồng làm việc của PR-Agent (theo anh và sơ đồ trong README, video đăng ngày 30/10/2026): đó là một công cụ nhận một lệnh làm đầu vào, xử lý context, lập một bản snapshot của thay đổi, được nén và tính theo token (token-aware), hỏi lại người dùng nếu có gì chưa rõ, rồi "lao vào quậy". Anh nói ngay là đùa thôi: thật ra nó bắt tay làm việc, tìm các issue tương tự, viết mô tả, đưa code suggestions và best practices, xem changelog, rồi mới đưa ra bản review.

![Sơ đồ trong README của PR-Agent: Make request, Digest request, Planning, Which function, rồi các tool và kết quả tương ứng](https://homus.dev/photos/gEJ26rECifc-0143.jpg)

Yêu cầu đi vào bước digest (phát hiện trạng thái PR, hunks), bước planning (nén token-aware, phân tích yêu cầu, hỏi lại người dùng), rồi rẽ sang từng tool như `/review`, `/describe`, `/improve`, `/ask`, mỗi tool cho ra một loại kết quả trên PR. Thanh nhỏ phía dưới là phần đồ hoạ của video tóm lại các bước Command, Context, Snapshot, Ask, Go.

Anh đoán chỉ cần nhắc tới chữ "nén" (compression) là đã đủ làm người xem tò mò. Trước tiên, PR-Agent làm việc với GitHub, GitLab, với Bitbucket "nếu bạn đã rẽ nhầm một lần trong đời", và thậm chí cả Azure DevOps "nếu bạn rẽ nhầm hơn một lần", như anh đùa (danh sách nền tảng theo video đăng ngày 30/10/2026).

Về chuyện nén, anh giải thích (video đăng ngày 30/10/2026): nếu PR đủ nhỏ thì không có vấn đề gì. Nếu PR quá lớn, như các thay đổi do AI làm ra thường hay thế, nó bắt đầu nén: bắt đầu từ các file bị xoá, rồi tới hunks và patches, bỏ hình ảnh, các package đã nén và file binary, về cơ bản là dọn sạch một lượt trước khi mọi thứ đi vào cỗ máy ăn token của bạn.

![Trang Compression Strategy trong docs PR-Agent: Overview, Small PR, Large PR và Compression strategy](https://homus.dev/photos/gEJ26rECifc-0203.jpg)

Trang Compression Strategy trong docs như trên màn hình (video đăng ngày 30/10/2026): hai kịch bản PR vừa hoặc không vừa một prompt; với PR nhỏ thì bỏ file binary và mở rộng context quanh mỗi patch; với PR lớn thì ưu tiên phần thêm hơn phần xoá và gộp các file bị xoá thành một danh sách.

Theo anh (video đăng ngày 30/10/2026), bạn còn cấu hình được nó: tất nhiên là đổi model, nhưng còn cả kích thước, fallback models, context bổ sung, timeouts, giới hạn token và nhiều thứ khác.

## 4. Cài PR-Agent thành GitHub Action

Tới lúc bắt tay vào làm. Anh nói cái tên PR-Agent đã cho thấy nó được làm ra để nằm trong một nền tảng git. Và vì đây là PR chứ không phải MR (merge request; "nếu bạn biết chữ đó thì tôi xin chia buồn", anh đùa), anh chọn GitHub. Theo anh (video đăng ngày 30/10/2026), PR-Agent cũng có lựa chọn chạy local, nhưng anh để dành phần đó cho sau.

Theo anh (video đăng ngày 30/10/2026), có sẵn một GitHub Action để bạn dùng. Nó cần một key cho nền tảng AI, và một GitHub token để action có quyền làm việc từ bên trong: trả lời trên PR, thực hiện thay đổi, đưa code suggestions, v.v. Anh dùng workmux để tạo một worktree cho việc này. Lần này anh làm từng bước, bằng tay, "như những ngày tươi đẹp của năm 2024".

Trong thư mục GitHub workflows, anh thêm file YAML cho PR-Agent. Theo anh (video đăng ngày 30/10/2026), bạn có thể chỉnh các loại event để nó được kích hoạt, rồi tới bản thân job nếu bạn muốn thêm gì. File của anh trên màn hình:

![File pr-agent.yml mở trong editor terminal: trigger pull_request và issue_comment, job pr_agent_job dùng the-pr-agent/pr-agent@main](https://homus.dev/photos/gEJ26rECifc-0303.jpg)

File `pr-agent.yml` trong editor của anh (video đăng ngày 30/10/2026): job chạy trên mỗi pull request và trả lời comment của người dùng, bỏ qua event do bot gửi, cấp quyền ghi cho issues và pull-requests.

```
on:
pull_request:
types: [opened, reopened, ready_for_review, synchronize]
issue_comment:
jobs:
pr_agent_job:
if: ${{ github.event.sender.type != 'Bot' }}
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
pull-requests: write
name: Run pr agent on every pull request, respond to user comments
steps:
- name: PR Agent action step
id: pragent
uses: the-pr-agent/pr-agent@main
env:
OPENAI_KEY: ${{ secrets.OPENAI_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```

Theo anh (video đăng ngày 30/10/2026), action đã tự lấy public image của PR-Agent trên Docker Hub, cái tên mà anh thú nhận lúc nào cũng đọc nhầm thành "pregnant" (trên trang docs, image ghi là `pragent/pr-agent`). Việc còn lại chỉ là thêm GitHub secret, cả hai: đặt `OPENAI_KEY`, còn với GitHub token thì có tin tốt. Theo anh và docs trên màn hình (video đăng ngày 30/10/2026), `GITHUB_TOKEN` sẽ được GitHub tự động tạo và nhận khi file được push lên, một chi tiết anh thấy rất chu đáo.

Theo anh (video đăng ngày 30/10/2026), docs có các ví dụ cấu hình cho từng nền tảng và từng tuỳ chọn, nhưng anh nghĩ đã đủ để bắt đầu với một thay đổi code. Trước đó, anh thêm file YAML, push lên production, merge, và thế là sẵn sàng.

## 5. Chạy thử với một thay đổi thật

Anh tạo một thay đổi thật, sửa một bug mà anh lẽ ra phải sửa từ lâu. "Bạn tưởng AI chữa được bệnh trì hoãn", anh đùa. Dù sao thì thay đổi cũng đã xong và PR được tạo (demo trong video đăng ngày 30/10/2026).

![Màn hình Open a pull request trên GitHub với tiêu đề fix: restore a compact midweek rankings table và phần mô tả gồm Summary, Changes, Testing](https://homus.dev/photos/gEJ26rECifc-0503.jpg)

Màn hình tạo PR trên GitHub (demo trong video đăng ngày 30/10/2026): tiêu đề "fix: restore a compact midweek rankings table", phần mô tả chia thành Summary, Changes và Testing, nói về việc dựng lại bảng xếp hạng giữa tuần dạng gọn cho Telegram.

Lúc này có hai pipeline đang chạy, và cái thứ hai là bản thay thế mới (demo trong video đăng ngày 30/10/2026). Theo anh (video đăng ngày 30/10/2026), các action có in log nếu bạn cần debug những lỗi như thiếu key hay lỗi xác thực. Nhưng nếu mọi thứ diễn ra đúng kế hoạch, bạn sẽ thấy kết quả như trên màn hình.

Kết quả bắt đầu bằng chỉ số mà anh gọi là "rất cần cho con người": mức công sức để review (review effort). Phần thú vị hơn là code suggestions, mỗi suggestion được đánh dấu mức impact, còn nội dung suggestion thì được thu gọn lại (demo trong video đăng ngày 30/10/2026).

![Comment PR Reviewer Guide của github-actions: Estimated effort to review 1, No relevant tests, No security concerns identified, và ba vùng cần chú ý Error Suppression, Slice Panic, Reversed Ranking](https://homus.dev/photos/gEJ26rECifc-0523.jpg)

Comment "PR Reviewer Guide" mà bot `github-actions` để lại (demo trong video đăng ngày 30/10/2026): effort review 1 trên 5, không có test liên quan, không phát hiện vấn đề security, và ba vùng nên xem kỹ: lỗi database bị nuốt thành bảng xếp hạng rỗng, phép cắt `entries[:3]` gây panic khi nhóm có ít hơn ba người, và thứ tự xếp hạng bị đảo ngược.

Anh đánh giá (video đăng ngày 30/10/2026): điều này rất tuyệt và cực kỳ hữu ích, nhưng chưa hoàn toàn tới nơi.

## 6. So với CodeRabbit: committable code suggestions và file TOML đặt sai tên

Anh muốn nói thẳng về "con voi trong phòng": CodeRabbit. Theo anh (video đăng ngày 30/10/2026), đó là một sản phẩm thương mại, một dịch vụ trả phí. Anh nói chuyện này chẳng có gì mới với ai. Anh là một khách hàng trả tiền vui vẻ ở chỗ làm, và đã như vậy một thời gian, nhưng với các project cá nhân, anh muốn công cụ open source này thay thế.

Dù vậy, theo anh (video đăng ngày 30/10/2026), CodeRabbit có code suggestions áp dụng được ngay từ bản review, không cần thêm một bước nào nữa. Anh muốn có điều đó, và chỉ cách làm tương tự với PR-Agent.

Cách thứ nhất là kích hoạt nó bằng tay, với tuỳ chọn committable code suggestions đặt là `true`. Trang docs của tool improve ghi cách gọi này là `/improve --pr_code_suggestions.committable_code_suggestions=true` (đọc ngày 30/10/2026). Theo anh (video đăng ngày 30/10/2026), cách tốt hơn là cấu hình hẳn agent bằng một file `.pr_agent.toml`, đặt đúng mục đó thành `true`.

Và đây là lý do, theo lời anh, "con người dở tệ": anh đặt tên file là "pr underscore agent underscore toml" và mất gần trọn một tiếng sau đó mà không hiểu vì sao nó không chạy. Anh để người xem tự rút ra kết luận. Trên màn hình, terminal của anh cho thấy lệnh `git add .pr_agent_toml`, với dấu gạch dưới thay cho dấu chấm trước `toml` (demo trong video đăng ngày 30/10/2026). Khi đã nhận ra lỗi, và anh nhất quyết không nói lỗi đó do AI hay do chính anh, anh có thể dùng slash command `/review`.

![Terminal với các lệnh v .pr_agent_toml, git add .pr_agent_toml và gc adding](https://homus.dev/photos/gEJ26rECifc-0623.jpg)

Terminal của anh (demo trong video đăng ngày 30/10/2026): mở file, `git add .pr_agent_toml` rồi commit. Tên file ở đây có dấu gạch dưới thay cho dấu chấm, trong khi docs của PR-Agent gọi file cấu hình local là `.pr_agent.toml` (đọc ngày 30/10/2026).

Lệnh được PR-Agent nhận, và bạn thấy emoji đôi mắt quen thuộc cho biết nó đã thật sự được nhìn thấy. Bản review được chuẩn bị xong, và đây là kết quả: trước tiên là một review guide, một chi tiết anh nói đang dần thích, tóm lại những gì anh cần biết, rồi tới code suggestions (demo trong video đăng ngày 30/10/2026).

![PR #234 DO NOT MERGE: swallow workout errors for reviewer training, với PR Reviewer Guide và một comment review kèm Suggestion và Suggested change](https://homus.dev/photos/gEJ26rECifc-0643.jpg)

Trên màn hình là PR #234 có tiêu đề "DO NOT MERGE: swallow workout errors for reviewer training" (demo trong video đăng ngày 30/10/2026): PR Reviewer Guide chỉ ra hai lỗi bị nuốt mất (lookup và update), và bên dưới là một comment review gắn vào dòng code, có Suggestion với mức importance 9 cùng một "Suggested change" áp dụng được ngay.

Giờ anh có thể dễ dàng đi qua từng suggestion và áp dụng thay đổi ngay từ phần thảo luận của PR. Làm xong là có thể merge (demo trong video đăng ngày 30/10/2026).

## 7. Thiếu nút approve all, skills và dynamic context

Anh vẫn thấy thiếu một chi tiết nhỏ mà CodeRabbit có: approve all changes. Theo anh (video đăng ngày 30/10/2026), với CodeRabbit bạn chỉ cần tick một ô là mọi thay đổi được áp dụng từ cùng một chỗ. "Tôi biết bạn đang nghĩ gì", anh nói: anh có đọc trước khi bấm nút đó. "Hay là không?"

Dù sao đi nữa, theo anh (video đăng ngày 30/10/2026), tìm mãi anh vẫn không thấy tuỳ chọn đó trong dự án này. Nên nếu bạn là maintainer đang xem, đó là gợi ý khiêm tốn của anh.

Điểm hay ở đây, theo anh (video đăng ngày 30/10/2026), là agent này sẵn sàng để cắm skills của bạn vào. Chẳng hạn, đưa cho nó hướng dẫn review Terraform nếu đó là thứ bạn đang làm. Bạn sẽ cần bật skill lên. Skills có thể giới hạn trong những path cụ thể, và số token của chúng cũng có thể đặt trần để bạn không "quậy quá tay".

![Trang Agent Skills trong docs PR-Agent: ví dụ skill terraform-standards và khối Configuration với enabled, paths, max_skills_tokens](https://homus.dev/photos/gEJ26rECifc-0723.jpg)

Trang Agent Skills trong docs như trên màn hình (video đăng ngày 30/10/2026): một skill là thư mục có file `SKILL.md`, ví dụ `terraform-standards`; skills tắt theo mặc định và được cấu hình bằng `enabled`, `paths` và `max_skills_tokens`.

Ví dụ skill trên trang docs (video đăng ngày 30/10/2026):

```
---
name: terraform-standards
description: Use when reviewing Terraform code - checks state safety and risky deletions.
---

# Terraform Review Guidance

- Flag any resource deletion that is not explicitly called out in the PR description.
- Require `prevent_destroy` on stateful resources.
- ...
```

Một phần cực kỳ hữu ích khác, theo anh (video đăng ngày 30/10/2026), là dynamic context. Bạn không chỉ có phần nén đã nói ở đầu để tiết kiệm token; tính năng này giúp AI hiểu đoạn code nó đang review. Anh nói nhìn vào một bản diff thì chẳng có bao nhiêu context. Agent mở rộng ra những đoạn code xung quanh để hiểu, và để đưa ra thêm chi tiết và logic. Rồi sau đó, và chỉ sau đó, nó mới đưa ra phản hồi và suggestions. Để bật, đặt allow dynamic context thành `true` trong file TOML của bạn; trang docs ghi tên khoá là `allow_dynamic_context` trong mục `[config]` (đọc ngày 30/10/2026).

## 8. Self-reflection, các tool khác và lời kết

Tính năng quan trọng cuối cùng anh nhắc là quá trình self-reflection: theo anh (video đăng ngày 30/10/2026), nó buộc agent tự chấm điểm kết quả của chính mình, về cơ bản là tự làm QA, điều anh thấy rất hay.

![Trang Self-reflection trong docs PR-Agent, phần Example Results với bảng PR Code Suggestions có cột Score 9, 8, 7](https://homus.dev/photos/gEJ26rECifc-0806.jpg)

Trang Self-reflection trong docs như trên màn hình (video đăng ngày 30/10/2026): ví dụ bảng PR Code Suggestions với cột Score được khoanh lại (9, 8, 7), cho thấy mỗi suggestion được chấm điểm để xếp hạng và lọc bớt những đề xuất kém quan trọng.

Theo anh (video đăng ngày 30/10/2026), còn nhiều tool khác bạn có thể dùng, như thêm docs hoặc labels, tìm các issue tương tự, cập nhật help documentation hoặc changelog.

Anh nói PR-Agent không phải lựa chọn duy nhất trong mảng open source, thậm chí không phải cái phổ biến nhất nếu chỉ tính số sao, nhưng là cái anh tin dùng tại thời điểm làm video (video đăng ngày 30/10/2026). Anh cũng đang thử một lựa chọn khác và sẽ xem trong vài tuần tới nó có đủ tốt không.

Những gì anh trình bày trong video, theo lời anh (video đăng ngày 30/10/2026): từ một prompt review chung chung chạy trong GitHub Action sang PR-Agent với các tính năng nén, dynamic context, skills, committable suggestions và self-reflection.

Dù thế nào, anh gọi công cụ này là "món quà từ trời". Sau nhiều tháng dùng một prompt chỉ nói "review this code, make no mistakes", với anh đây là một bước nâng cấp đáng hoan nghênh (video đăng ngày 30/10/2026). Anh cảm ơn mọi người đã xem.

## Nguồn và liên kết

- Tên gốc: Stop Asking Your Coding Agent to Review Its Own Code
- Sự kiện: [YouTube](https://homus.dev/events/youtube)
- Video gốc: [https://www.youtube.com/watch?v=gEJ26rECifc](https://www.youtube.com/watch?v=gEJ26rECifc)

- Kênh YouTube DevOps Toolbox (DevOps Toolbox): [youtube.com/channel/UCYeiozh-4QwuC1sjgCmB92w](https://www.youtube.com/channel/UCYeiozh-4QwuC1sjgCmB92w)

- Repo PR-Agent trên GitHub (13.8k sao, đọc ngày 30/10/2026): [github.com/the-pr-agent/pr-agent](https://github.com/the-pr-agent/pr-agent)

- Docs PR-Agent (đọc ngày 30/10/2026): [docs.pr-agent.ai](https://docs.pr-agent.ai/)

- Cài PR-Agent làm GitHub Action, secret `OPENAI_KEY` và `GITHUB_TOKEN` (đọc ngày 30/10/2026): [docs.pr-agent.ai/installation/github](https://docs.pr-agent.ai/installation/github/)

- Compression strategy (đọc ngày 30/10/2026): [docs.pr-agent.ai/core-abilities/compression_strategy](https://docs.pr-agent.ai/core-abilities/compression_strategy/)

- Tool improve và tuỳ chọn `committable_code_suggestions` (đọc ngày 30/10/2026): [docs.pr-agent.ai/tools/improve](https://docs.pr-agent.ai/tools/improve/)

- File cấu hình local `.pr_agent.toml` (đọc ngày 30/10/2026): [docs.pr-agent.ai/usage-guide/configuration_options](https://docs.pr-agent.ai/usage-guide/configuration_options/)

- Agent Skills (đọc ngày 30/10/2026): [docs.pr-agent.ai/core-abilities/agent_skills](https://docs.pr-agent.ai/core-abilities/agent_skills/)

- Dynamic context và `allow_dynamic_context` (đọc ngày 30/10/2026): [docs.pr-agent.ai/core-abilities/dynamic_context](https://docs.pr-agent.ai/core-abilities/dynamic_context/)

- Self-reflection (đọc ngày 30/10/2026): [docs.pr-agent.ai/core-abilities/self_reflection](https://docs.pr-agent.ai/core-abilities/self_reflection/)

Nguồn: https://homus.dev/talks/stop-asking-your-coding-agent-to-review-its-own-code · cập nhật 2026-10-30
