# Chín practice Claude Code từ nhóm build nó

[MG](https://homus.dev/speakers/mg) · [MG](https://homus.dev/orgs/mg)

> Chín practice Claude Code từ nhóm build nó ở Anthropic: reviewer mới, ask rule, hook onFailure block, effort, compact, xoá prompt cũ, explainer.

Topics: Coding Agents, Workflow, Security

Canonical: https://homus.dev/talks/how-the-best-engineers-use-claude-code

## 1. Mở đầu: những gì nhóm build Claude Code đang làm

MG vào thẳng vấn đề: các engineer giỏi nhất dùng Claude Code như thế nào. Anh nói nếu bạn đang tìm những video skill hay tutorial cài đặt Claude Code kiểu thông thường thì có thể dừng xem ở đây. Theo anh, đây là video duy nhất bạn cần xem để tận dụng Claude Code được nhiều nhất (nhận định của MG trong video đăng ngày 02/11/2026).

![MG nói trước micro, bên cạnh dòng chữ THE BEST ENGINEER](https://homus.dev/photos/DuPZopuZzL8-0003.jpg)

MG nói trước micro ở đầu video, cạnh dòng chữ "THE BEST ENGINEER"; dòng nhỏ phía dưới giới thiệu anh là AI engineer, build với Claude Code hằng ngày (theo thẻ trong video đăng ngày 02/11/2026).

Theo MG, mọi thứ trong video đến từ chính những người build Claude Code ở Anthropic, và từ các bản cập nhật đã ship trong năm tuần trước khi video đăng ngày 02/11/2026. Anh nêu trước vài thứ sẽ có: một safety hook âm thầm cho mọi thứ đi qua; vì sao auto mode có thể push thẳng lên main theo mặc định; vì sao team của Anthropic không bao giờ để AI review công việc của chính nó; một pull request chạy 50 vòng review qua một đêm; một setting ngăn các sub-agent đốt hết usage limit của bạn; và vì sao Anthropic xoá phần lớn system prompt của chính mình.

## 2. Practice 1: đừng để Claude tự review code của chính nó

Practice đầu tiên: không bao giờ để Claude review công việc của chính nó. MG kể rằng từ giữa tháng 10, Claude Code dùng fork ở khắp nơi (theo video đăng ngày 02/11/2026). Một fork là một bản sao của cuộc hội thoại hiện tại. Nó biết mọi thứ bạn đã bàn, kể cả lý do Claude viết code theo cách nó đã viết.

![Hai khung hội thoại giống hệt nhau: cuộc hội thoại gốc và một fork là bản sao đầy đủ](https://homus.dev/photos/DuPZopuZzL8-0103.jpg)

Bên trái là cuộc hội thoại gốc (thêm retry cho getOrder, Claude giải thích cách làm, rồi thêm withRetry với backoff), bên phải là fork: một bản sao đầy đủ, chứa cùng lập luận. Nhãn góc phải ghi "forks by default · v2.1.302 · Oct 16" (slide trong video đăng ngày 02/11/2026).

Vì vậy, khi một fork review đoạn code đó, nó chia sẻ chung những điểm mù với bạn, và nó có xu hướng đồng ý với bạn (theo MG, video đăng ngày 02/11/2026). Anh dẫn trang best practices của Anthropic, nói rằng trang này viết rõ: một reviewer mới có ích vì nó chưa thấy lập luận của bạn. Trang best practices của Claude Code (đọc ngày 02/11/2026) liệt kê một trong những lợi ích của subagent là có được một reviewer chưa thấy code được viết ra như thế nào.

Theo MG (video đăng ngày 02/11/2026), lệnh có sẵn `/code-review` làm đúng việc đó: nó gửi các thay đổi của bạn tới một sub-agent mới, chưa từng thấy cuộc hội thoại. Nhóm Claude Code cũng làm như vậy với code của chính mình. Trong bài viết về cách nhóm review code, nhóm chia sẻ rằng từ tháng 6 đến tháng 9, số pull request được merge tăng hơn gấp đôi, trong khi tỉ lệ phải revert giảm hơn 40% (số liệu MG dẫn trong video đăng ngày 02/11/2026; bài viết trên claude.dev ghi cùng hai con số, đọc ngày 02/11/2026).

## 3. Practice 2: hỏi trước mọi lần push trong auto mode

Practice thứ hai bắt đầu từ một thay đổi mặc định. Theo MG, từ cuối tháng 9, auto mode là chế độ mặc định của Claude Code trong terminal và trong VS Code. Ở auto mode, Claude chạy phần lớn các action mà không hỏi bạn trước (theo video đăng ngày 02/11/2026).

![Màn hình khởi động Claude Code v2.1.316 với thông báo auto mode là permission mode mặc định](https://homus.dev/photos/DuPZopuZzL8-0143.jpg)

Màn hình đầu tiên của Claude Code v2.1.316 trong video đăng ngày 02/11/2026, với dòng "Auto mode is now Claude Code's default permission mode." và nhãn "default since v2.1.284 · Sep 28" ở góc trên.

Đây là điều MG nói phần lớn mọi người bỏ qua: tài liệu của Anthropic ghi rằng theo mặc định, auto mode cho phép push lên bất kỳ branch nào, kể cả main, và nó có thể mở pull request (theo MG, video đăng ngày 02/11/2026).

Bạn có thể nghĩ: được thôi, mình chỉ cần dặn Claude "đừng push lên main". Nhưng theo MG (video đăng ngày 02/11/2026), một rule bạn gõ trong chat có thể biến mất. Khi một cuộc hội thoại dài bị compact, nghĩa là Claude tóm tắt nó lại để giải phóng chỗ, tin nhắn chứa rule của bạn có thể bị bỏ đi.

Vì thế MG khuyên đặt rule ở chỗ nó không thể biến mất: trong file settings. Thêm một ask rule cho `git push`, và một rule cho việc tạo pull request. Theo anh (video đăng ngày 02/11/2026), auto mode vẫn tự chạy mọi thứ khác, nhưng một lần push giờ sẽ dừng lại và hỏi bạn trước.

![Claude Code ở auto mode dừng lại trước lệnh git push và hỏi có tiếp tục không](https://homus.dev/photos/DuPZopuZzL8-0223.jpg)

Một session thật ở auto mode trong video đăng ngày 02/11/2026: Claude định chạy `git push -u origin feature/retry 2>&1`, và dòng "Ask rule Bash(git push *) overrides auto mode for this command." hiện ra trước câu hỏi "Do you want to proceed?".

Và khi đang mở file đó, MG gợi ý bật luôn setting mới `blockWritesOutsideWorkingDirectories`. Theo anh (video đăng ngày 02/11/2026), setting này đảm bảo không có lần sửa nào rơi ra ngoài thư mục project của bạn.

## 4. Practice 3: hook chặn lại khi chính nó hỏng

Practice thứ ba nói về hook. Theo MG (video đăng ngày 02/11/2026), rất nhiều engineer đặt những rule quan trọng nhất của mình vào một hook. Hook là một script nhỏ mà Claude Code chạy trước một action, ví dụ để chặn một lần push lên main, hoặc để quét một commit tìm secret như API key.

Vị trí của hook mà MG mô tả trong video đăng ngày 02/11/2026: nó chạy giữa ý định của Claude Code và action thật.

Cái bẫy ở đây, theo MG (video đăng ngày 02/11/2026): một hook chỉ chặn được action khi nó thoát với exit code 2. Nếu script crash, có đường dẫn sai, hoặc chạy quá lâu, Claude Code coi đó là một hook thất bại, và action vẫn được thực hiện. Anh dẫn tài liệu của Anthropic nói thẳng: một policy hook có đường dẫn sai hoặc script bị crash sẽ cho mọi thứ đi qua.

![Trang Hooks reference của Anthropic, mục Block the action when a hook fails](https://homus.dev/photos/DuPZopuZzL8-0303.jpg)

Trang Hooks reference trong video đăng ngày 02/11/2026, mục "Block the action when a hook fails": khi hook lỗi hoặc timeout, Claude Code vẫn thực hiện action; muốn chặn thì đặt `"onFailure": "block"` trên hook `command` hoặc `http`, cần Claude Code v2.1.295 trở lên. Trang tài liệu này vẫn ghi như vậy khi đọc ngày 02/11/2026.

Theo MG, từ ngày 8/10 có một cách sửa bằng một dòng: trong hook settings, thêm `onFailure` là `block`. Từ đó, khi một hook không khởi động được, bị timeout hoặc crash, action sẽ bị chặn thay vì được cho qua (theo video đăng ngày 02/11/2026).

Ví dụ secret scanner mà MG đưa ra trong video đăng ngày 02/11/2026: nếu scanner bị down, nó nên dừng commit lại chứ không để commit đi qua mà chưa được quét.

MG bảo hãy nghĩ tới một secret scanner. Nếu nó bị down, nó nên dừng commit lại, chứ không để commit đi qua mà chưa được quét (lời khuyên trong video đăng ngày 02/11/2026).

## 5. Practice 4: làm cho review thật sự kết thúc

Practice thứ tư: đảm bảo các lần review thật sự kết thúc. MG chỉ ra vấn đề (video đăng ngày 02/11/2026): khi một người nhận được một comment nhỏ về style, người đó bỏ qua nó trong hai giây. Một AI agent thì không, nó sửa comment đó, và lần sửa ấy lại kích hoạt một lần review nữa, lần review này lại tìm ra một thứ mới để sửa.

![Bài viết How the Claude Code team does code review, đoạn về một PR chạy hơn năm mươi vòng review](https://homus.dev/photos/DuPZopuZzL8-0423.jpg)

Bài "How the Claude Code team does code review" trên claude.dev trong video đăng ngày 02/11/2026: đoạn được tô ghi rằng một người có thể bỏ qua một nit trong vài giây, còn agent thì sửa nó; ngay dưới là mục "Review has to converge" kể về một CLI PR qua hơn năm mươi vòng review và sửa trong một đêm, tới khi tác giả dừng nó lại.

Theo MG, ở nhóm Claude Code, một pull request đã đi qua hơn 50 vòng review trong một đêm (số liệu từ bài viết của nhóm, dẫn trong video đăng ngày 02/11/2026). Vì vậy nhóm đã thay đổi ba thứ:

- Reviewer bỏ qua style (theo MG, video đăng ngày 02/11/2026).

- Lần review thứ hai chỉ xem những gì đã thay đổi kể từ lần đầu (theo MG, video đăng ngày 02/11/2026).

- Sau ba vòng, reviewer bảo tác giả lùi lại và nghĩ lại cách tiếp cận, thay vì tiếp tục sửa (theo MG, video đăng ngày 02/11/2026).

Sau thay đổi đó, tỉ lệ pull request pass sau một lần review tăng từ 65% lên 78% (số MG dẫn trong video đăng ngày 02/11/2026; bài viết trên claude.dev có cùng hai con số trong biểu đồ "Pass after one review and fix round", đọc ngày 02/11/2026).

MG thêm một tip cho CI: dùng lệnh `claude ultrareview`, chứ không chạy code review ở print mode, vì print mode thoát ra trước khi các finding kịp tới (theo MG, video đăng ngày 02/11/2026).

![Trang tài liệu Find bugs with ultrareview, đoạn về subcommand claude ultrareview](https://homus.dev/photos/DuPZopuZzL8-0503.jpg)

Trang "Find bugs with ultrareview" của Anthropic trong video đăng ngày 02/11/2026. Ở chế độ non-interactive, chạy subcommand `claude ultrareview` với `--post`; dòng được tô ghi rằng trong một lần chạy `claude -p '/code-review ultra'`, Claude Code thoát trước khi finding tới nên không post gì, hãy dùng subcommand. Trang này vẫn ghi như vậy khi đọc ngày 02/11/2026.

## 6. Practice 5: low effort để viết, high effort để verify

Practice thứ năm. Theo MG (video đăng ngày 02/11/2026), phần lớn mọi người chạy mọi thứ ở mức effort cao nhất, nghĩ rằng nhiều effort hơn nghĩa là code tốt hơn. Anh dẫn hướng dẫn của chính Anthropic về cách dùng effort, nói rằng hướng dẫn này nói điều ngược lại: viết code ở low effort trong lúc bạn lái, rồi chuyển sang high effort để verify và test.

![Bài Spending your effort của Anthropic, danh sách vòng lặp với các dòng implement on low effort và verify and test on high effort được tô](https://homus.dev/photos/DuPZopuZzL8-0523.jpg)

Bài "Spending your effort" (Anthropic, ngày 25/9) trong video đăng ngày 02/11/2026: một vòng lặp gồm đưa Claude một spec và để nó phỏng vấn bạn, "Implement it on low effort", review rồi lặp lại ở low effort khi cần, và "Verify and test on high effort". Thẻ chú thích ghi "Low: write it while you steer".

Tại sao? Theo MG (video đăng ngày 02/11/2026), vì effort mua cho bạn việc kiểm tra và các edge case. Nó không sửa được một cách tiếp cận sai. Trong các bài test của Anthropic, effort tối đa thậm chí còn khiến model chọn sai cách hiểu đề bài thường xuyên hơn. Bài viết trên claude.dev (đọc ngày 02/11/2026) ghi rằng tăng effort thường giảm lỗi do thiếu edge case, nhưng không sửa được khi model có cách tiếp cận sai.

Và nếu một task hoá ra khó hơn bạn nghĩ, MG nói cứ gõ `ultrathink` trong lúc Claude đang làm. Theo anh, từ cuối tháng 10, việc này nâng effort cho phần còn lại của lượt đó thôi, rồi quay về setting bình thường của bạn (video đăng ngày 02/11/2026).

![Post trên X của Addy Osmani về việc gõ ultrathink khi Claude đang làm](https://homus.dev/photos/DuPZopuZzL8-0543.jpg)

Post trên X của Addy Osmani (Claude Code, Anthropic, ngày 1/11) trong video đăng ngày 02/11/2026: nếu task khó hơn dự kiến, gõ ultrathink khi Claude đang làm, nó nâng effort cho phần còn lại của lượt đó. Nhãn bên dưới ghi "Back since v2.1.311 · Oct 26".

## 7. Practice 6: effort riêng cho subagent

Practice thứ sáu. MG nói nếu usage limit của bạn cạn nhanh, đây có lẽ là lý do. Boris Cherny, người tạo ra Claude Code, đã đăng về chuyện này tuần trước (tính từ video đăng ngày 02/11/2026): theo mặc định, sub-agent kế thừa effort level của bạn, và nó có thể cộng dồn rất nhanh (theo MG, video đăng ngày 02/11/2026).

MG đưa ra một tình huống: bạn đặt effort extra high cho một bug khó rồi quên tắt. Giờ mọi subagent mà Claude khởi động, để search, để explore hay để test, cũng chạy ở extra high (theo MG, video đăng ngày 02/11/2026).

![Session chính ở /effort xhigh, ba subagent search, explore, test đều ở low nhờ CLAUDE_CODE_SUBAGENT_EFFORT=low](https://homus.dev/photos/DuPZopuZzL8-0623.jpg)

Session chính đặt `/effort xhigh` cho một bug khó, còn ba subagent search, explore và test đều chạy ở low nhờ `CLAUDE_CODE_SUBAGENT_EFFORT=low`.

Theo MG, bản sửa ra ngày 31/10: một setting mới tên là `CLAUDE_CODE_SUBAGENT_EFFORT`. Đặt nó là low thì các subagent thôi sao chép effort level của bạn, trong khi session chính vẫn giữ mức đó. Sau đó mở `/usage`: theo MG (video đăng ngày 02/11/2026), giờ nó cảnh báo bạn về những session nặng, và nhấn F sẽ áp dụng cách sửa được gợi ý.

## 8. Practice 7: compact trước khi nghỉ, không phải sau

Practice thứ bảy: compact trước khi nghỉ, không phải sau khi nghỉ. MG nói lời khuyên này đến thẳng từ hướng dẫn của Anthropic về chi phí của một task (video đăng ngày 02/11/2026).

Lý do, theo MG (video đăng ngày 02/11/2026): với một gói subscription, Claude giữ cuộc hội thoại của bạn trong cache khoảng một giờ, nhờ vậy mọi tin nhắn mới đều rẻ hơn. Nếu bạn rời đi lâu hơn thế, cache hết hạn, và tin nhắn kế tiếp của bạn phải dựng lại toàn bộ cuộc hội thoại với giá đầy đủ.

Hai con số trong ví dụ mà MG dẫn từ hướng dẫn của Anthropic (video đăng ngày 02/11/2026): cùng một khối công việc tốn $11.20 khi không có cache và khoảng $1.60 khi có cache.

Trong ví dụ của Anthropic, cùng một khối công việc tốn $11.20 khi không có cache và khoảng $1.60 khi có cache (theo MG, video đăng ngày 02/11/2026). Theo anh, Claude Code giờ tự compact một session lớn đang để không, ngay trước khi cache hết hạn. Nhưng khi đó bạn quay lại với một bản tóm tắt do Claude tự viết.

Vì vậy MG khuyên tự làm trước khi rời đi: gõ `/compact` và nói nó cần giữ lại những gì (lời khuyên trong video đăng ngày 02/11/2026). Trong session thật của anh, lệnh gõ vào là:

```
/compact keep the open bugs and the test plan
```

![Một session Claude Code với lệnh /compact keep the open bugs and the test plan, auto mode đang bật](https://homus.dev/photos/DuPZopuZzL8-0743.jpg)

Session thật "before you leave" trong video đăng ngày 02/11/2026: lệnh `/compact` kèm chỉ dẫn giữ lại các bug còn mở và test plan, dòng dưới báo auto mode đang bật.

Còn khi bạn chỉ muốn bỏ một hướng đi bế tắc, MG bảo dùng `/rewind`, không dùng compact. Theo anh (video đăng ngày 02/11/2026), rewind quay về một điểm trước đó vẫn còn nằm trong cache.

## 9. Practice 8: xoá bớt instruction cũ

Practice thứ tám, và MG nói đây là cái làm anh bất ngờ. Addy Osmani ở Anthropic chia sẻ rằng nhóm đã xoá hơn 80% system prompt của chính Claude Code mà không có sụt giảm đo được nào trong các coding eval (theo MG, video đăng ngày 02/11/2026).

![Bài của Addy Osmani: You're probably overprompting Claude, cùng thẻ 80% of the system prompt, removed](https://homus.dev/photos/DuPZopuZzL8-0803.jpg)

Bài "You're probably overprompting Claude" của Addy Osmani (ngày 29/10, trên x.com) trong video đăng ngày 02/11/2026: với các model như Claude Opus 5 và Claude Fable 5, hơn 80% system prompt của Claude Code đã được bỏ đi mà coding eval không giảm đo được; khi một model mới như Opus 5.5 ra, bạn có thể làm cùng thí nghiệm với instruction của mình, và lệnh /doctor prompt-audit đánh dấu những dòng viết cho model cũ. Thẻ bên phải ghi "80% of the system prompt, removed".

Theo MG (video đăng ngày 02/11/2026), các model mới hơn không cần lớp giàn giáo cũ. Những dòng như THINK CAREFULLY, IMPORTANT viết toàn chữ hoa, hay DON'T BE LAZY giờ khiến Claude làm quá tay: nhiều bước hơn và nhiều tool call hơn mức task cần.

Vì vậy, MG khuyên sau mỗi lần nâng cấp model, hãy xoá bớt instruction và chỉ thêm lại những gì model thực sự còn thiếu (lời khuyên trong video đăng ngày 02/11/2026). Để tìm những dòng đó, chạy `/doctor prompt-audit`. Theo MG, lệnh này kiểm tra CLAUDE.md, các rule và các skill của bạn để tìm những dòng viết cho model cũ, và nó không thay đổi gì cho tới khi bạn đồng ý (video đăng ngày 02/11/2026).

## 10. Practice 9: explainer mà bạn review được

Và practice thứ chín, nơi tất cả những điều này đang hướng tới. MG dẫn Andrej Karpathy, người đã nói rằng công việc của chúng ta sẽ đi lên các tầng trừu tượng, thành giám sát và thấu hiểu. Câu trích trên màn hình trong video đăng ngày 02/11/2026, từ post của Karpathy ngày 2/10, ghi: "a lot more of our work will rise up the abstractions into oversight and understanding."

Trong thực tế, theo MG (video đăng ngày 02/11/2026), điều đó có nghĩa là thôi chỉ đọc bản tóm tắt cuối cùng của Claude. Sau một thay đổi lớn, hãy yêu cầu ba thứ:

- Các cách tiếp cận thay thế, và điều gì loại bỏ từng cách (lời khuyên của MG, video đăng ngày 02/11/2026).

- Những gì nó không xác nhận được, và nó đã tìm ở đâu (lời khuyên của MG, video đăng ngày 02/11/2026).

- Một explainer của thay đổi đó dưới dạng một trang HTML có diagram (lời khuyên của MG, video đăng ngày 02/11/2026).

![Ba yêu cầu sau một thay đổi lớn, và trang explainer.html với diagram How the parts fit together](https://homus.dev/photos/DuPZopuZzL8-0903.jpg)

Ba yêu cầu ở phía trên, thứ ba đang được làm nổi: "One HTML page that explains it, with a diagram". Bên dưới là trang `explainer.html` của project acme-api với diagram "How the parts fit together": Caller gọi getOrder, getOrder đưa hàm vào withRetry (try, catch, sleep theo backoff), mỗi lần thử gọi global fetch, và một ghi chú đỏ rằng retries undefined thì không bao giờ throw (demo trong video đăng ngày 02/11/2026).

Theo MG (video đăng ngày 02/11/2026), nhóm Claude Code làm việc này để lan toả sự hiểu biết về chính code của nhóm, và đó là cách nhanh nhất để bắt được cái quyết định mà bạn sẽ đưa ra khác đi.

## 11. Kết: một setup tốt hơn quanh Claude

MG khép lại: đó là cách các engineer giỏi nhất dùng Claude Code. Theo anh (video đăng ngày 02/11/2026), không phải là prompt tốt hơn, mà là một setup tốt hơn quanh Claude.

Chín practice MG trình bày trong video đăng ngày 02/11/2026, mỗi ô là tên ngắn của một practice.

MG cảm ơn mọi người đã xem.

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

- Tên gốc: How the Best Engineers Use Claude Code
- Sự kiện: [YouTube](https://homus.dev/events/youtube)
- Video gốc: [https://www.youtube.com/watch?v=DuPZopuZzL8](https://www.youtube.com/watch?v=DuPZopuZzL8)

- Kênh YouTube MG (MG): [youtube.com/channel/UCj7NrzZWW3w3lHTk5v-GuXw](https://www.youtube.com/channel/UCj7NrzZWW3w3lHTk5v-GuXw)

- Claude Code best practices, có đoạn về reviewer chưa thấy code được viết ra như thế nào (đọc ngày 02/11/2026): [code.claude.com/docs/en/best-practices](https://code.claude.com/docs/en/best-practices)

- Claude Code permission modes, trang về auto mode (đọc ngày 02/11/2026): [code.claude.com/docs/en/permission-modes](https://code.claude.com/docs/en/permission-modes)

- Hooks reference, mục "Block the action when a hook fails" với `onFailure` (đọc ngày 02/11/2026): [code.claude.com/docs/en/hooks](https://code.claude.com/docs/en/hooks)

- Find bugs with ultrareview, đoạn về subcommand `claude ultrareview` (đọc ngày 02/11/2026): [code.claude.com/docs/en/ultrareview](https://code.claude.com/docs/en/ultrareview)

- Bài viết của nhóm Claude Code về code review, có các số merged PR, revert, hơn năm mươi vòng review và 65% lên 78% (đọc ngày 02/11/2026): [claude.dev/blog/solving-code-review-at-anthropic](https://claude.dev/blog/solving-code-review-at-anthropic)

- Spending your effort, bài của Anthropic về effort (đọc ngày 02/11/2026): [claude.dev/blog/spending-your-effort](https://claude.dev/blog/spending-your-effort)

Nguồn: https://homus.dev/talks/how-the-best-engineers-use-claude-code · cập nhật 2026-11-02
