CƯỜNG MÊ AI Đăng ký
CƯỜNG MÊ AI
Về mình Tài liệu
Đăng ký miễn phí
Hướng dẫn từng bước · Claude Code · Tự động hoá

Quy trình 4 AI làm việc nối ca: Bạn chỉ cần duyệt ở phút cuối

Năm file prompt dựng dây chuyền Planner, Coder, Tester, Reviewer trong Claude Code. Bạn chỉ duyệt ở khâu cuối.

5 prompt Trung cấp Đọc trong 18 phút · Tháng 9, 2026
Claude Code · dây chuyền 4 agent 1 Planner · Opus 5 2 Coder · Sonnet 4.6 3 Tester · Sonnet 4.6 4 Reviewer · Opus 5 5 Lệnh /ship gọi cả bốn 6 Sổ bàn giao .bangiao/ 7 Chạy được qua đêm Cường Mê AI · bốn AI nối ca, bạn duyệt ở phút cuối

Ý tưởng gốc rất đơn giản: Thay vì bắt một AI vừa nghĩ vừa làm vừa tự chấm điểm mình, ta chia việc ra cho bốn AI, mỗi con một vai, và bắt chúng bàn giao cho nhau bằng file. Nghe thì to tát nhưng tất cả những gì bạn phải làm chỉ là bỏ năm file text vào đúng chỗ trong dự án.

Trang này có đủ: Nội dung nguyên vẹn của năm file đó để bạn copy về, chỗ đặt từng file, cách cài cho người chưa từng mở thư mục ẩn bao giờ, và những cái bẫy khiến dây chuyền đứng im giữa đêm mà ít ai nói tới.

Cần có sẵn ba thứ

Một, Claude Code, tức bản Claude chạy trong cửa sổ dòng lệnh của máy tính chứ không phải bản web. Hai, một dự án code đang làm dở. Ba, biết dùng git ở mức tạo được nhánh mới. Thiếu cái đầu tiên thì cài Claude Code trước rồi hãy đọc tiếp.

Mục lục
  1. Vì sao chia bốn vai lại ăn đứt một AI ôm hết
  2. Dựng dây chuyền trong 5 phút
  3. Agent 1 (Planner): Người vẽ bản thiết kế
  4. Agent 2 (Coder): Người thi công
  5. Agent 3 (Tester): Người nghiệm thu
  6. Agent 4 (Reviewer): Người ký duyệt
  7. Lệnh /ship: Nhạc trưởng của cả bốn
  8. Tiền: Ai được chạy model đắt
  9. Để nó chạy trong lúc bạn ngủ
  10. Mẹo để dây chuyền chạy ngon

1. Vì sao chia bốn vai lại ăn đứt một AI ôm hết

Trước khi vào việc, mấy chữ sẽ gặp đi gặp lại trong bài, giải thích theo kiểu nói chuyện:

Chuyện gì xảy ra khi một AI ôm hết

Bắt một con vừa lên kế hoạch, vừa gõ code, vừa viết test, vừa tự chấm bài, thì mọi thứ dồn chung vào một cửa sổ ngữ cảnh. Ghi chú kế hoạch nằm cạnh code, code nằm cạnh log lỗi, log lỗi nằm cạnh nhận xét review. Cái bàn đầy giấy, và chất lượng tụt xuống không phải vì AI dốt mà vì nó đang gánh bốn vai một lúc.

Còn một chuyện tế nhị hơn. Khi người viết code cũng chính là người chấm code, nó sẽ nghiêng về kết luận nào mà nó vá được. Test đỏ thì nó sửa code cho xanh, thay vì dừng lại nói với bạn rằng thiết kế đang sai từ gốc. Bạn nhận được một mớ test xanh và một cảm giác an toàn giả.

Chia bốn thì mỗi con nhẹ đầu

Planner chỉ nghĩ chuyện kế hoạch. Coder chỉ nghĩ chuyện thi công. Tester chỉ nghĩ chuyện bắt lỗi. Reviewer chỉ nghĩ chuyện duyệt hay không duyệt. Bàn làm việc của con nào cũng gọn, và không con nào phải bênh vực sản phẩm của chính mình.

Thứ giữ cả dây chuyền lại với nhau: Cuốn sổ bàn giao

Bốn agent không nói chuyện trực tiếp với nhau. Chúng để lại file trong một thư mục chung tên là .bangiao, và con sau đọc file của con trước. Planner để lại bản kế hoạch. Coder đọc kế hoạch, làm xong thì để lại bản tóm tắt đã sửa những gì. Tester đọc bản tóm tắt, chạy test xong để lại kết quả. Reviewer đọc cả ba rồi để lại phán quyết.

Đúng kiểu ca trực nối ca trong nhà máy: Người về ghi sổ, người vào đọc sổ rồi làm tiếp. Không ai cần biết ba người kia đang nghĩ gì trong đầu.

Sổ bàn giao đi qua bốn tay
Yêu cầu của bạn
      ↓
[ Planner · Opus 5 ]     →  .bangiao/ke-hoach.md
      ↓
[ Coder · Sonnet 4.6 ]   →  code trong repo + .bangiao/thay-doi.md
      ↓
[ Tester · Sonnet 4.6 ]  →  file test + .bangiao/ket-qua-test.md
      ↓
[ Reviewer · Opus 5 ]    →  .bangiao/danh-gia.md  (CHỐT / CẦN SỬA / CHẶN)
      ↓
   Bạn đọc, bạn quyết, bạn gộp nhánh
Mẹo

Thư mục có dấu chấm ở đầu tên như .bangiao hay .claude là thư mục ẩn, Finder trên Mac mặc định không hiện. Bấm Cmd + Shift + dấu chấm để bật tắt. Windows thì vào tab View trong File Explorer rồi tích ô “Hidden items”.

2. Dựng dây chuyền trong 5 phút

Cả bộ máy này chỉ nằm trong hai thư mục, đặt ngay trong dự án của bạn:

Riêng .bangiao/ thì bạn khỏi tạo. Planner sẽ tự sinh ra nó ngay lần chạy đầu tiên.

Cách cài Dễ nhất
  1. Ở mỗi thẻ bên dưới, bấm Xem nội dung file rồi bấm Copy. Nội dung nguyên vẹn của file nằm hết trong đó.
  2. Mở Claude Code ngay bên trong thư mục dự án, dán nội dung vào khung chat rồi nhắn: “Tạo giúp mình file .claude/agents/planner.md với đúng nội dung này nha.” Đổi tên file cho khớp với từng thẻ.
  3. Làm lần lượt cho cả năm file. Claude tự tạo thư mục, bạn khỏi phải mở Finder hay Explorer lần nào.

Thích tự tay làm thì tạo hai thư mục .claude/agents và .claude/commands, tạo file text rồi dán nội dung vào. Nhớ giữ nguyên tên file: planner.md, coder.md, tester.md, reviewer.md, ship.md.

1

Ngó lại xem thư mục đã đúng chưa

Cài xong, dự án của bạn phải nhìn ra thế này:

Cấu trúc thư mục
du-an-cua-ban/
├── .claude/
│   ├── agents/
│   │   ├── planner.md
│   │   ├── coder.md
│   │   ├── tester.md
│   │   └── reviewer.md
│   └── commands/
│       └── ship.md
├── .bangiao/           ← Planner tự tạo ở lần chạy đầu
└── ... code của bạn ...
2

Hỏi Claude Code xem nó thấy agent chưa

Gõ /agents rồi Enter. Đủ bốn cái tên planner, coder, tester, reviewer hiện ra là ổn. Bản Claude Code của bạn không có lệnh đó thì nhắn thẳng “liệt kê các subagent đang có trong dự án này” cũng ra kết quả tương tự.

Thiếu tên nào thì soi hai chỗ: File có nằm đúng trong .claude/agents/ không, và dòng name: ở đầu file có trùng với tên file không.

3

Tách nhánh git trước mỗi lần chạy

Đây là thói quen phải có, không phải tuỳ chọn. Trước mỗi tính năng, mở Terminal trong dự án và gõ git checkout -b ten-tinh-nang. Bốn con AI muốn quậy gì thì quậy, tất cả nằm gọn trong một nhánh riêng, không vừa ý thì xoá cả nhánh là xong.

Cảnh báo

Đoạn nằm giữa hai dòng --- ở đầu mỗi file là phần khai báo cấu hình, và nó khó tính hơn bạn tưởng. Không được thêm khoảng trắng thừa trước name:, và tên công cụ ở dòng tools: phải viết hoa đúng chữ cái đầu như trong file gốc: Read, Write, Edit, Grep, Glob, Bash. Gõ read thay vì Read là agent mất quyền đọc file mà chẳng báo lỗi gì, bạn chỉ thấy nó tự nhiên làm việc dở đi.

Về dòng model trong file

Trong file bạn sẽ thấy model: opus và model: sonnet viết ngắn gọn như vậy. Đó là tên gọi tắt, và Claude Code tự hiểu là dùng bản mới nhất của dòng đó: Opus 5 cho hai con Planner với Reviewer, Sonnet 4.6 cho Coder với Tester. Cứ để tên gọi tắt, sau này có bản mới hơn thì file của bạn tự ăn theo, khỏi phải sửa lại từng cái.

3. Agent 1 (Planner): Người vẽ bản thiết kế

Planner tuyệt đối không gõ một dòng code nào. Việc duy nhất của nó là biến câu yêu cầu mơ hồ của bạn thành một bản kế hoạch cụ thể tới mức Coder cứ thế làm mà không phải đoán chữ nào.

Bản kế hoạch ở đây giống bản vẽ thi công hơn là một cái tóm tắt: Sửa file nào, viết hàm gì, hàm nhận vào và trả ra cái gì, gặp tình huống oái oăm nào thì phải xử lý ra sao.

Planner để lại gì trên sổ bàn giao

Đúng một file: .bangiao/ke-hoach.md. Trong đó có đường dẫn từng file, chữ ký từng hàm, danh sách trường hợp biên, và tên file mẫu để Coder bắt chước cách viết. Chỗ nào còn mơ hồ, nó không đoán bừa mà ghi lên đầu file thành mục CÂU HỎI CÒN BỎ NGỎ, và cả dây chuyền dừng ngay tại đó để chờ bạn trả lời.

Vì sao con này được chạy Opus 5

Kế hoạch là bước có đòn bẩy lớn nhất. Vẽ sai bản thiết kế thì thợ càng giỏi càng xây nhanh ra một cái nhà sai. Opus 5 là model mạnh nhất hiện có ở khoản suy luận kiến trúc và nhìn ra những tình huống ít ai nghĩ tới, mà nó lại chỉ chạy đúng một lượt cho mỗi tính năng, nên phần đắt thêm không đáng bao nhiêu so với cái nó cứu được.

planner.md (người vẽ bản thiết kế)

Đọc codebase rồi viết kế hoạch ra .bangiao/ke-hoach.md. Chỉ có bốn công cụ Read, Grep, Glob, Write. Cố tình không cho Edit và Bash để nó không thể lỡ tay sửa code dù muốn.

Đặt tại .claude/agents/ · Model: Opus 5 · Không đụng được vào code

.claude/agents/planner.md
---
name: planner
description: Biến một yêu cầu tính năng thành bản kế hoạch triển khai. Chặng đầu tiên của dây chuyền bốn agent.
tools: Read, Grep, Glob, Write
model: opus
---

Bạn là chuyên gia lập kế hoạch. Bạn KHÔNG viết code.

Khi nhận một yêu cầu tính năng:

1. Đọc những phần liên quan của codebase để nắm quy ước đang có: Cách đặt
   tên, cấu trúc thư mục, thư viện đang dùng, kiểu viết test.

2. Viết bản kế hoạch ra .bangiao/ke-hoach.md với đủ các mục sau:
   - Những file cần tạo mới hoặc cần sửa, kèm đường dẫn chính xác.
   - Chữ ký hàm hoặc interface cần có.
   - Các trường hợp biên bắt buộc phải xử lý.
   - Quy ước cần bám theo, ghi rõ TÊN FILE để copy quy ước từ đó.

3. Chỗ nào còn mơ hồ thì gom lên ĐẦU file thành mục CÂU HỎI CÒN BỎ NGỎ.
   Tuyệt đối không tự đoán ý người dùng.

Viết ngắn và chặt. Coder chỉ đọc đúng file này chứ không đọc gì khác, nên
đừng để hở chỗ nào, và cũng đừng thêm thắt yêu cầu mà không ai đòi.
Mẹo

Nếu bạn ngồi canh chứ không chạy qua đêm, hãy dừng lại sau chặng Planner và đọc .bangiao/ke-hoach.md. Sửa hai dòng trong bản kế hoạch mất nửa phút, còn để Coder xây sai rồi đập đi xây lại thì mất cả tiếng. Muốn dừng ở đó thì đừng gõ /ship, cứ nhắn “dùng subagent planner cho tính năng X” là nó chỉ chạy một chặng.

4. Agent 2 (Coder): Người thi công

Coder cầm bản thiết kế và xây đúng như bản thiết kế. Nó không bàn lại kế hoạch, không tự chấm điểm mình, không tiện tay dọn dẹp mấy file bên cạnh. Chỉ xây.

Coder để lại gì trên sổ bàn giao

Code thật trong repo, kèm file .bangiao/thay-doi.md ghi đã đụng vào những file nào, mỗi chỗ sửa để làm gì, và chỗ nào Tester nên soi kỹ. Chính bản ghi này giúp Tester biết cần nhắm vào đâu thay vì test lan man.

Vì sao con này chạy Sonnet 4.6

Khi bản thiết kế đã rõ, việc còn lại là gõ cho nhanh, cho chính xác, cho đúng phong cách repo. Đó đúng là sở trường của Sonnet 4.6, mà giá lại rẻ hơn Opus 5 nhiều lần. Coder cũng là con sinh ra nhiều chữ nhất trong cả dây chuyền, nên để nó ở model rẻ là chỗ tiết kiệm lớn nhất.

coder.md (người thi công)

Đọc .bangiao/ke-hoach.md, viết code, rồi ghi tóm tắt ra .bangiao/thay-doi.md. Có đủ bộ công cụ vì đây là agent duy nhất được phép chạm vào code sản phẩm.

Đặt tại .claude/agents/ · Model: Sonnet 4.6 · Được sửa code

.claude/agents/coder.md
---
name: coder
description: Triển khai bản kế hoạch nằm ở .bangiao/ke-hoach.md. Chặng thứ hai của dây chuyền, chạy ngay sau planner.
tools: Read, Write, Edit, Grep, Glob, Bash
model: sonnet
---

Bạn là chuyên gia triển khai.

1. Đọc trọn file .bangiao/ke-hoach.md. Nếu trong đó có mục CÂU HỎI CÒN BỎ
   NGỎ, hãy DỪNG LẠI và nêu các câu hỏi đó ra, đừng tự đoán.

2. Xây đúng những gì bản kế hoạch mô tả. Bám theo các quy ước mà nó chỉ
   định. Không thêm tính năng nào mà kế hoạch không yêu cầu.

3. Ghi tóm tắt ngắn ra .bangiao/thay-doi.md, gồm: Những file đã thay đổi,
   mỗi chỗ sửa để làm gì, và chỗ nào Tester nên soi kỹ.

Code bạn viết phải khớp phong cách sẵn có của repo. Không dọn dẹp, không
cải tiến những đoạn code không liên quan, không làm gì nằm ngoài phạm vi
bản kế hoạch.
Lưu ý

Câu “không thêm tính năng nào mà kế hoạch không yêu cầu” nhìn thì thừa, nhưng nó chặn đúng cái tật khó chịu nhất của AI: Đang sửa một file thì tiện tay refactor luôn ba file bên cạnh, sáng ra bạn nhìn git diff mà hoa mắt. Đừng xoá câu đó.

5. Agent 3 (Tester): Người nghiệm thu

Tester đọc xem thợ vừa xây gì, rồi viết test để chứng minh cái đó chạy đúng, rồi chạy thử. Test rớt thì cả dây chuyền dừng. Nó không được cầm búa đi sửa, chỉ được ghi vào sổ là chỗ nào hỏng.

Tester để lại gì trên sổ bàn giao

Các file test trong repo, kèm .bangiao/ket-qua-test.md nói rõ xanh hết hay là con nào rớt và rớt vì lý do gì.

Vì sao không cho nó tự sửa lỗi

Cho Tester sửa code là quay về đúng cái bẫy ban đầu: Người nghiệm thu kiêm luôn người thi công thì chẳng ai còn nghiệm thu thật nữa. Test rớt nghĩa là dây chuyền dừng, để Reviewer phán hoặc để sáng mai bạn tự xử. Cái giữ cho dây chuyền đáng tin chính là chuyện mỗi con chỉ làm đúng phần việc của mình.

tester.md (người nghiệm thu)

Đọc bản tóm tắt thay đổi và bản kế hoạch, viết test cho đường chạy thuận lợi, cho các trường hợp biên và ít nhất một trường hợp phải thất bại, chạy thử rồi ghi kết quả ra .bangiao/ket-qua-test.md.

Đặt tại .claude/agents/ · Model: Sonnet 4.6 · Chỉ viết file test

.claude/agents/tester.md
---
name: tester
description: Viết và chạy test cho những thay đổi mô tả trong .bangiao/thay-doi.md. Chặng thứ ba của dây chuyền.
tools: Read, Write, Edit, Grep, Glob, Bash
model: sonnet
---

Bạn là chuyên gia kiểm thử.

1. Đọc .bangiao/thay-doi.md để biết vừa có gì được xây và nằm ở đâu.

2. Đọc các file đã thay đổi và bản kế hoạch ở .bangiao/ke-hoach.md.

3. Viết test bao được ba nhóm: Đường chạy thuận lợi, các trường hợp biên
   mà bản kế hoạch đã nêu tên, và ít nhất một trường hợp phải thất bại.
   Dùng đúng framework test mà repo đang dùng.

4. Chạy test. Có con nào rớt thì ghi phần rớt vào .bangiao/ket-qua-test.md
   rồi DỪNG LẠI. Không tự sửa code.

5. Xanh hết thì cũng ghi rõ vào .bangiao/ket-qua-test.md.

Bạn chỉ được tạo và sửa file test. Không đụng vào code sản phẩm, kể cả
khi bạn đã nhìn ra chỗ sai và biết cách vá trong ba giây.

Bạn kiểm thử hành vi, không kiểm thử ruột gan bên trong. Một test rớt
nghĩa là dây chuyền dừng cho Reviewer xử lý, chứ không phải để bạn lách
cho nó xanh.
Lưu ý

Tester vẫn phải có quyền Write và Edit vì nó cần tạo file test. Nghĩa là về mặt kỹ thuật nó vẫn có thể sửa code sản phẩm, ràng buộc “không đụng vào code” nằm ở lời dặn trong file chứ không nằm ở quyền. Vậy nên sáng ra bạn cứ liếc git diff một lượt, xem nó có mò ra ngoài thư mục test không.

Mẹo

“Kiểm thử hành vi, không kiểm thử ruột gan” dịch ra đời thường là thế này: Test nên hỏi “đăng nhập sai 6 lần trong một phút thì có bị chặn không?”, đừng hỏi “cái biến đếm số lần thử có tên là counter không?”. Test bám hành vi thì đổi cách viết bên trong vẫn xanh, test bám ruột gan thì đụng đâu đỏ đó và bạn sẽ chán mà xoá hết.

6. Agent 4 (Reviewer): Người ký duyệt

Đây là cánh cửa cuối cùng trước khi có thứ gì đó chạm tới nhánh chính. Nó đọc hết mọi thứ ba con kia để lại, tự chạy git diff để xem code thật, rồi phán. Con này cũng chạy Opus 5, vì bắt được một lỗi tinh vi ở đây rẻ hơn nhiều so với việc gặp lại nó khi khách hàng đang dùng.

Chi tiết quan trọng nhất: Reviewer không được sửa

Đây là chủ ý, không phải quên cấp quyền. Nếu Reviewer sửa được code, gặp chỗ gợn nó sẽ vá cho êm rồi ghi “ổn” vào sổ, thế là bản đánh giá mất sạch giá trị. Một con chỉ được nhìn thì chẳng còn cách nào khác ngoài nói thật những gì nó thấy. Chính cái ràng buộc cứng đó làm nên chất lượng của bước cuối.

Cách siết cũng chỉ là một dòng: Ở mục tools: bạn cho nó Read, Grep, Glob và Bash, không Write, không Edit. Tài liệu chính thức của Claude Code cũng khuyên cấp cho mỗi subagent đúng bộ công cụ tối thiểu mà vai đó cần, không hơn.[1]

Bash thì vẫn phải để lại, vì không có nó thì Reviewer không chạy được git diff. Muốn chặt hơn nữa thì bỏ luôn Bash và tự dán kết quả diff vào cho nó đọc, đổi lại bạn mất khả năng chạy tự động qua đêm.

Ba phán quyết

Kết quả nằm ở .bangiao/danh-gia.md, luôn mở đầu bằng một trong ba chữ. Chữ “gộp nhánh” bên dưới nghĩa là đưa nhánh tính năng nhập vào nhánh chính:

reviewer.md (người ký duyệt)

Đọc kế hoạch, bản thay đổi, kết quả test, chạy git diff, rồi ghi phán quyết CHỐT, CẦN SỬA hoặc CHẶN ra .bangiao/danh-gia.md.

Đặt tại .claude/agents/ · Model: Opus 5 · Chỉ đọc, không sửa

.claude/agents/reviewer.md
---
name: reviewer
description: Đánh giá lần cuối toàn bộ kết quả của dây chuyền. Chặng thứ tư, ngay trước khi con người ký duyệt.
tools: Read, Grep, Glob, Bash
model: opus
---

Bạn là reviewer cấp cao. Bạn CHỈ ĐỌC. Bạn không sửa code.

1. Đọc bản kế hoạch, bản tóm tắt thay đổi và kết quả test trong thư mục
   .bangiao/.

2. Chạy git diff để nhìn chính xác những gì đã thay đổi.

3. Trả lời ba câu: Code có khớp bản kế hoạch không? Test có giá trị thật
   hay chỉ viết cho có? Có vấn đề gì về bảo mật, hiệu năng, tính đúng đắn
   không?

4. Ghi phán quyết ra .bangiao/danh-gia.md, mở đầu bằng đúng một dòng:

   PHAN QUYET: CHOT / CAN SUA / CHAN

   Nếu là CAN SUA hoặc CHAN, liệt kê rõ cần sửa cái gì, ở file nào, dòng
   nào. Không nói chung chung.

Bạn chỉ dùng Bash cho các lệnh đọc như git diff, git log, git status.
Không chạy lệnh làm thay đổi file hay thay đổi lịch sử git.

Bạn là tuyến phòng thủ cuối. Test xanh mà code sai thì vẫn phải nói CHAN.
Xanh không đồng nghĩa với đúng.
Lưu ý

Trong file, dòng phán quyết cố tình viết không dấu (CHOT, CAN SUA, CHAN). Lý do rất thực dụng: Sau này bạn muốn viết một đoạn script tự đọc kết quả, hoặc muốn tìm nhanh trong file, chuỗi không dấu đỡ rắc rối hơn nhiều. Phần diễn giải bên dưới thì cứ tiếng Việt có dấu bình thường.

7. Lệnh /ship: Nhạc trưởng của cả bốn

Bốn agent đứng riêng thì vẫn phải gọi từng con một. File này là người xâu chuỗi: Bạn gõ một dòng, nó gọi Planner, chờ có kế hoạch mới gọi Coder, chờ có bản thay đổi mới gọi Tester, và chỉ khi test xanh mới tới lượt Reviewer.

Chữ $ARGUMENTS trong file là chỗ trống: Mọi thứ bạn gõ sau /ship sẽ được nhét vào đúng vị trí đó.[2] Nhờ vậy một file duy nhất dùng cho mọi tính năng, không phải sửa gì thêm. Muốn đổi tên lệnh thì đổi tên file, đặt là lam.md thì lệnh thành /lam.

ship.md (nhạc trưởng)

Chạy trọn bốn chặng, tự dừng khi gặp câu hỏi bỏ ngỏ hoặc test rớt, có chốt chặn không cho chạy trên nhánh chính, và không bao giờ tự gộp nhánh.

Đặt tại .claude/commands/ · Gõ: /ship

.claude/commands/ship.md
---
description: Chạy trọn dây chuyền bốn agent cho một yêu cầu tính năng.
---

Chạy trọn dây chuyền làm tính năng cho: $ARGUMENTS

Làm lần lượt các chặng dưới đây, không nhảy cóc. Sau mỗi chặng, kiểm tra
file bàn giao đã tồn tại rồi mới sang chặng kế tiếp.

0. Xem đang đứng trên nhánh git nào. Nếu là nhánh chính (main hoặc
   master), dừng lại và báo cho tôi, không chạy tiếp.
   Sau đó dọn thư mục .bangiao/, tức xoá ke-hoach.md, thay-doi.md,
   ket-qua-test.md và danh-gia.md của lần chạy trước, để không ai đọc
   nhầm file cũ.

1. Giao việc cho subagent planner kèm yêu cầu tính năng ở trên.
   Chờ tới khi có .bangiao/ke-hoach.md.

2. Nếu bản kế hoạch có mục CÂU HỎI CÒN BỎ NGỎ, dừng lại và đưa các câu
   hỏi đó cho tôi. Nếu không có, giao việc cho subagent coder.
   Chờ tới khi có .bangiao/thay-doi.md.

3. Giao việc cho subagent tester.
   Chờ tới khi có .bangiao/ket-qua-test.md.
   Có test rớt thì dừng lại và cho tôi xem phần rớt.

4. Giao việc cho subagent reviewer. Cho tôi xem .bangiao/danh-gia.md.

Báo lại phán quyết cuối cùng. Không gộp nhánh, không push, không tạo pull
request. Cứ để nguyên nhánh đó cho tôi tự xem.

Gõ như thế nào

Mở Claude Code trong dự án, tách nhánh mới, rồi gõ một dòng kiểu như dưới đây. Chữ “endpoint” trong ví dụ đầu là địa chỉ mà ứng dụng gọi tới trên máy chủ, ở đây là chỗ xử lý việc đăng nhập:

Gõ trong Claude Code
/ship thêm giới hạn tần suất cho endpoint đăng nhập
Gõ trong Claude Code
/ship làm trang cài đặt người dùng, có phần bật tắt nhận email thông báo
Gõ trong Claude Code
/ship viết lại module thanh toán để đỡ được nhiều loại tiền tệ

Từ đó nhạc trưởng lo phần còn lại. Trục trặc ở chặng nào thì nó dừng ngay chặng đó và nói rõ chuyện gì đã xảy ra, chứ không âm thầm đi tiếp.

Cảnh báo

Dây chuyền không bao giờ tự gộp nhánh, và bạn cũng đừng sửa ship.md để nó tự gộp. Nghe thì tiện, nhưng lúc đó bạn đã bỏ mất cửa chốt duy nhất còn lại là con người. Nó làm, bạn quyết.

8. Tiền: Ai được chạy model đắt

Nói thẳng: Chạy bốn agent tốn token hơn hẳn chạy một con. Đó là cái giá của chất lượng. Nhưng cách chia model dưới đây giữ hoá đơn ở mức chịu được, vì hai vai ngốn nhiều chữ nhất đều nằm ở model rẻ.

Phần lớn token rơi vào Coder và Tester, tức hai vai đang chạy model rẻ, nên hoá đơn không đội lên theo số lượng agent. Tỉ lệ cụ thể nhảy theo độ lớn của tính năng, vậy nên đừng tin con số của ai hết, chạy vài lần rồi tự xem mức tiêu thụ của mình.

Cách chia này cũng khớp với những gì đội kỹ thuật của Anthropic chia sẻ khi họ dựng hệ nhiều agent: Chạy nhiều agent tốn token gấp bội một phiên chat thường, nên chọn model theo từng vai là cần câu chính để giữ chi phí.[3]

Lưu ý

Muốn rẻ nữa thì đổi model: opus trong planner.md thành sonnet cho những tính năng nhỏ và đã rõ ràng từ đầu. Nhưng hễ tính năng đụng nhiều file hoặc dính tới bảo mật, cứ để Opus 5, đừng tiết kiệm nhầm chỗ.

9. Để nó chạy trong lúc bạn ngủ

Đây là phần vui nhất, và cũng là phần nhiều người thất bại ngay đêm đầu tiên. Không phải vì dây chuyền dở, mà vì hai cái bẫy rất đời thường dưới đây.

Hai thứ làm dây chuyền đứng im tới sáng

Bẫy một, máy ngủ. Claude Code chạy trên máy bạn chứ không chạy trên mây, gập nắp laptop là nó tắt theo. Cắm sạc, để nguyên máy mở nắp, tắt chế độ ngủ. Trên Mac, mở thêm một cửa sổ Terminal rồi gõ caffeinate -i và để nguyên đó tới sáng. Lệnh này chỉ ngăn máy tự ngủ lúc rảnh, gập nắp vào thì vẫn ngủ như thường. Trên Windows thì vào Power & battery, chỉnh cho máy không tự ngủ khi đang cắm điện.

Bẫy hai, hộp thoại xin phép. Mặc định Claude Code hỏi ý bạn trước khi chạy lệnh hay sửa file. Bạn đang ngủ thì không ai bấm đồng ý, và nó ngồi chờ suốt đêm. Muốn chạy qua đêm thì phải cấp sẵn quyền, và đây là chỗ phải cân nhắc chứ không có đáp án chung. Mục ngay dưới nói rõ ba mức, kèm cái giá của từng mức.

Cấp quyền tới đâu, mất kiểm soát tới đó

Ba cách dưới đây xếp từ chặt tới lỏng. Càng xuống dưới càng ít bị hỏi, và càng ít cơ hội chặn lại khi nó làm sai.

Mức 1, duyệt tay vài đêm đầu. Chạy vài tính năng lúc bạn còn ngồi đó. Mỗi lần nó xin phép một lệnh bạn thấy hợp lý, chọn “Yes, and don’t ask again”. Claude Code tự ghi lại thành một dòng cho phép trong .claude/settings.local.json, file riêng của bạn và không bị đẩy lên git. Sau vài đêm, danh sách đó đủ để dây chuyền chạy trơn mà bạn chẳng phải nới thêm gì. Đây là cách nên chọn.

Mức 2, tự viết danh sách cho phép. Nóng ruột thì viết thẳng file, mỗi dòng là một công cụ hoặc một kiểu lệnh. Quan trọng hơn cả danh sách cho phép là danh sách chặn, vì chặn luôn thắng cho phép. Gõ /permissions trong Claude Code để xem dòng nào đang có hiệu lực và tới từ file nào.

.claude/settings.local.json
{
  "permissions": {
    "allow": [
      "Edit",
      "Write",
      "Bash(git diff:*)",
      "Bash(git status:*)",
      "Bash(npm test:*)"
    ],
    "deny": [
      "Bash(rm:*)",
      "Bash(git push:*)",
      "Bash(git checkout:*)",
      "Bash(curl:*)",
      "Read(./.env)"
    ]
  }
}

Đổi npm test thành lệnh chạy test thật của dự án bạn. Hai dòng chặn git push và git checkout giữ cho nó không đẩy code lên hay tự nhảy nhánh trong lúc bạn ngủ, còn Read(./.env) giữ file khoá bí mật nằm ngoài tầm với.

Mức 3, tắt hỏi. Có chế độ cho nó tự duyệt mọi thứ, và có cả cờ bỏ qua sạch phần xin phép. Chạy kiểu đó thì nó xoá file, gọi mạng hay chạy bất cứ lệnh nào cũng không ai cản, sáng ra gặp chuyện thì chẳng còn bước nào để lần lại. Nếu buộc phải dùng, chỉ dùng trong repo của riêng bạn, trên nhánh phụ, trên máy không chứa dữ liệu công ty hay khoá bí mật, và đã commit sạch trước khi đi ngủ.

Ba điều hay bị vấp

Một, quyền do Claude Code giữ chứ không do lời dặn trong file agent, nên viết “không được xoá file” vào reviewer.md không thay được một dòng chặn thật. Hai, danh sách để trong .claude/settings.json là file chung của dự án, mỗi người phải bấm tin cậy thư mục thì mới có hiệu lực, còn settings.local.json của riêng bạn thì ăn ngay. Ba, các chế độ tự duyệt không nhận từ file trong dự án, phải đặt ở cấu hình của máy hoặc truyền lúc mở Claude Code.

Trước khi đi ngủ

Tách nhánh mới. Kiểm tra máy không tự ngủ. Gõ /ship kèm yêu cầu, rồi ngồi lại chừng một phút xem chặng Planner khởi động trơn tru đã, thấy nó bắt đầu đọc file thì mới yên tâm đi ngủ.

Sáng hôm sau

Mở nhánh đó, đọc .bangiao/danh-gia.md trước tiên:

Quyết gộp rồi thì hai dòng dưới đây là xong, chạy trong Terminal ở thư mục dự án:

Gộp nhánh vào nhánh chính
git checkout main
git merge ten-tinh-nang

# đổi main thành master nếu dự án của bạn đặt tên nhánh chính như vậy
# không ưng thì bỏ luôn cả nhánh: git branch -D ten-tinh-nang

Dây chuyền không tự gộp gì hết, nó luôn để nguyên nhánh cho bạn xem lại. Nó làm việc, bạn ra quyết định, và đó là ranh giới không nên xoá.

Mẹo

Đêm đầu tiên đừng thả một tính năng to. Chọn thứ bạn tự làm được trong nửa tiếng, sáng ra so kết quả của nó với cách bạn định làm. Đó là cách nhanh nhất để biết mình tin nó được tới đâu, thay vì tin theo cảm tính.

10. Mẹo để dây chuyền chạy ngon

Bảy điều dưới đây là thứ chỉ nhận ra sau khi chạy thật vài lần. Bấm vào từng dòng để mở ra đọc:

Yêu cầu càng rõ, kết quả càng gọn

So hai câu này: “thêm giới hạn tần suất ở đâu đó” và “thêm giới hạn tần suất cho endpoint đăng nhập, tối đa 5 lần thử mỗi phút cho mỗi địa chỉ IP, quá thì trả về mã 429”. Cùng một dây chuyền, nhưng câu thứ hai cho ra bản kế hoạch chặt hơn hẳn, vì Planner không phải đoán.

Bắt đầu từ việc nhỏ

Vài lần đầu nên chọn tính năng có ranh giới rõ: Thêm một endpoint, dựng một trang cài đặt, viết lại một module. Tin được ở việc nhỏ rồi hãy nâng dần lên.

Đọc bốn file trong .bangiao

Kể cả khi phán quyết là CHỐT, cứ mở cả bốn file ra đọc. Bạn sẽ thấy được cách từng con suy nghĩ, và sau vài lần bạn tự nhiên viết yêu cầu tốt hơn vì đã biết Planner cần gì để làm việc.

Dọn sổ bàn giao giữa các lần chạy

Trước mỗi tính năng mới, xoá sạch nội dung trong .bangiao/ để không con nào đọc nhầm file của lần trước. File ship.md ở trên đã dọn sẵn ở chặng 0, nhưng nếu bạn gọi từng agent bằng tay thì phải tự nhớ.

Nhiều tính năng cùng lúc thì cần worktree

Worktree hiểu nôm na là mở thêm một bản sao của dự án ở thư mục khác, đứng trên nhánh khác, nhưng dùng chung lịch sử git. Muốn chạy song song nhiều tính năng thì mỗi cái phải có worktree riêng, không thì bốn con của tính năng này sẽ sửa đè lên file của tính năng kia.

Mở worktree cho một tính năng
git worktree add ../du-an-tinh-nang-a -b tinh-nang-a
cd ../du-an-tinh-nang-a

# mở Claude Code ngay trong thư mục này rồi gõ /ship
# làm xong thì dọn: git worktree remove ../du-an-tinh-nang-a
Đừng gỡ chốt chặn cho nhanh

Khi Planner nêu câu hỏi và dây chuyền dừng, đó là lúc nó đang làm đúng việc chứ không phải đang cản đường bạn. Trả lời rồi chạy lại. Cái cảm giác muốn xoá bước dừng đó khỏi ship.md sẽ đến sớm thôi, và cứ tin mình, đừng chiều nó.

Sửa file agent cho hợp dự án của bạn

Năm file này là điểm xuất phát chứ không phải khuôn đúc. Dự án của bạn luôn viết test bằng một framework nhất định, hay bắt buộc rà một danh sách bảo mật trước khi duyệt? Thêm thẳng vào phần thân của tester.md hoặc reviewer.md. Agent chạy đúng theo những gì bạn viết trong đó, không hơn không kém, và đó vừa là điểm mạnh vừa là điểm yếu của cách làm này.

Đăng ký sớm

Khoá học AI của mình sắp mở

Để lại email, mình báo trước ngày mở đăng ký và giữ mức giảm 20% cho người đăng ký sớm.

Miễn phí · Không spam · Huỷ bất cứ lúc nào

Nguồn tham khảo 4 nguồn
  1. Tài liệu Claude Code, mục Subagents: Cấu trúc file, phần khai báo name, description, tools, model và nơi đặt file
  2. Tài liệu Claude Code, mục Skills và custom commands: File trong .claude/commands/ và cách hoạt động của $ARGUMENTS
  3. Anthropic Engineering: How we built our multi-agent research system
  4. Anthropic Engineering: Claude Code best practices
Đọc tiếp
Tìm hiểu về Cường