Cẩm nang đào tạo · Dành cho mọi người, kể cả non-tech

Loop Engineering
Nghệ thuật thiết kế những vòng lặp tự chạy

Kỹ năng cốt lõi của 2026 không phải là viết prompt giỏi hơn — mà là thiết kế cả một hệ thống biết tự tìm việc, tự làm, tự kiểm tra và tự quyết định bước tiếp theo, trong khi bạn chỉ giám sát.

📘 Tổng hợp từ "The Anthropic Playbook" (IEEE) + bản rút gọn 5 bậc ⏱️ Đọc trong ~25 phút 🎯 Mục tiêu: ai đọc cũng hiểu
“Người phụ trách Claude Code nói rằng anh ấy không còn ra lệnh (prompt) cho nó nữa. Anh ấy cho các vòng lặp chạy sẵn để chúng ra lệnh cho Claude và tự quyết định phải làm gì. Việc của anh ấy giờ là viết ra các vòng lặp đó.” — Boris Cherny (lead Claude Code, Anthropic), tháng 6/2026

⚡ Hiểu các từ khóa trong 60 giây (đọc phần này trước)

Tài liệu dùng vài từ tiếng Anh đã thành "tên riêng" trong ngành. Chỉ cần nhớ nghĩa đơn giản:

Prompt — lời yêu cầu
Câu lệnh bạn gõ cho AI, như nhắn tin đặt câu hỏi. "Viết giúp tôi email này" là một prompt.
Agent — trợ lý AI (tác tử)
Một "AI biết tự làm nhiều bước", không chỉ trả lời một câu. Hãy hình dung như một nhân viên thực tập làm việc qua máy tính.
Loop — vòng lặp
Chu trình lặp đi lặp lại: làm → kiểm tra → sửa → làm lại, đến khi đạt yêu cầu. Giống "nấu thử → nếm → nêm lại → nếm tiếp".
Loop Engineering — kỹ thuật vòng lặp
Kỹ năng thiết kế cái vòng lặp đó: ai tìm việc, ai làm, ai kiểm tra, lưu kết quả ở đâu, khi nào tự chạy lại. Đây là nội dung chính.
Generator & Evaluator — người làm & người chấm
"Generator" là AI viết ra kết quả. "Evaluator" là một AI khác chuyên soi lỗi và nói "chưa được". Tách hai vai này ra là bí quyết quan trọng nhất.
CI / test / PR (giải thích cực ngắn cho non-tech)
Test = bài kiểm tra tự động xem phần mềm chạy đúng không. CI = hệ thống tự chạy các test đó. PR (Pull Request) = một "đề xuất thay đổi" code, chờ người duyệt trước khi áp dụng — giống một bản nháp gửi sếp ký duyệt.

Phần 1

Loop Engineering thực sự là gì?

Hai năm qua, mọi "kỹ thuật về AI" đều dạy bạn làm việc tốt hơn. Loop Engineering thì khác: nó kéo bạn ra khỏi vị trí người làm việc.

Định nghĩa một câu

Người đặt tên và viết bài về khái niệm này là Addy Osmani (kỹ sư đội Google Chrome). Định nghĩa của ông rất ngắn:

Loop Engineering = tự thay thế chính mình ở vị trí người ra lệnh cho AI, và thiết kế một hệ thống làm việc đó thay bạn. Bạn không còn "đút" từng câu cho AI nữa — bạn thiết kế cái máy tự đút.

Trọng tâm nằm ở chữ "thay thế chính mình". Đây là sự dịch chuyển về vị trí: từ người vận hành cỗ máy sang người thiết kế cỗ máy. Thứ bạn viết ra không còn là lời nói cho AI, mà là một thứ tự động gửi lời nói đến AI.

🔥 Trong một tuần, 3 người cùng châm ngòi

Tháng 6/2026, ba nhóm độc lập va vào cùng một ý tưởng gần như cùng lúc:

  • Peter Steinberger (tác giả OpenClaw) đăng một bài đạt 8 triệu lượt xem: đừng ra lệnh cho AI nữa, hãy thiết kế vòng lặp ra lệnh cho chúng.
  • Boris Cherny (lead Claude Code, Anthropic) nói điều y hệt: anh không còn prompt Claude, mà để các loop chạy sẵn.
  • Addy Osmani ngày 7/6 viết hẳn bài tên "Loop Engineering", gộp lại ý của hai người trên và đặt tên cho hiện tượng.

Một mồi lửa, một tiếng vọng, một cái tên — tất cả trong một tuần.

⏳ Vì sao khái niệm này xuất hiện đúng lúc này?

Không phải ngẫu nhiên. Các công cụ xung quanh vừa âm thầm vượt một ngưỡng:

  • AI coding đã đủ tin cậy để hoàn thành một việc kha khá mà không cần ai ngồi canh.
  • Các công cụ lên lịch tự động (scheduling) đã có sẵn.
  • Chi phí cho mỗi lần chạy AI đã rẻ đủ để chạy lặp lại nhiều lần mà không thấy lãng phí.

Khi mọi mảnh ghép đã có, cách kết hợp chúng trở nên hiển nhiên với tất cả mọi người cùng lúc. Thực hành có trước, cái tên đến sau.

Phần 2

Tháp 4 tầng: từ Prompt đến Loop

Các "kỹ thuật về AI" không thay thế nhau — chúng chồng lên nhau, mỗi tầng lo một thứ lớn hơn tầng dưới. Loop nằm ở tầng cao nhất, ngay trên Harness.

🔁 Loop
(Vòng lặp)
Tự động hóa cái việc "chờ bạn". Lên lịch chạy lặp lại, sinh thêm trợ lý phụ, và tự đưa kết quả của mình thành đầu vào cho vòng sau.
"Làm sao để nó tự chạy, hết vòng này đến vòng khác?"
🛠️ Harness
(Bộ đồ nghề)
Trang bị cho một lần chạy: AI được dùng công cụ gì, làm hành động nào, thế nào là "xong". Nhưng nó không làm lần chạy đó lặp lại.
"Dùng công cụ nào? Hành động nào? Xong là khi nào?"
📚 Context
(Bối cảnh)
Lo tầm nhìn của AI ngay lúc này: cần nạp thông tin gì, tóm tắt ra sao, bỏ bớt thông tin cũ nào. Cửa sổ đầy nhiễu thì prompt hay đến mấy cũng phí.
"Cần đưa gì vào để AI giải được bài toán?"
💬 Prompt
(Lời yêu cầu)
Tầng đáy, quen thuộc nhất: nói gì với AI — câu chữ, ví dụ, vai trò, giọng điệu. Giới hạn ở một lượt trao đổi, và luôn cần con người có mặt để "đút" prompt vào.
"Tôi nên nói gì với AI?"

⬆ Càng lên cao, phạm vi quan tâm càng lớn: từ một câumột cửa sổmột lần chạymột vòng lặp tự chạy.

Trực giác quan trọng nhất của cả tài liệu: Cùng một lỗi, càng ở tầng cao thì "bán kính sát thương" càng lớn. Ở tầng Prompt, lỗi cho ra một câu trả lời sai — bạn thấy ngay. Ở tầng Loop, lỗi đó được ghi vào file trạng thái, sáng hôm sau được đọc lại như một sự thật đã đóng đinh, rồi xây tiếp lên trên qua nhiều vòng. Đến khi ai đó phát hiện, giả định sai đã thành cột chống đỡ cho cả công trình.

Chi phí của một lỗi tỉ lệ với số vòng nó sống sót trước khi bị bắt. Mà một vòng lặp, về bản chất, chính là cỗ máy tối đa hóa số vòng. Mọi thứ trong các phần sau (người chấm, điểm dừng cho con người, hạn mức chi phí) đều tồn tại để rút ngắn khoảng cách giữa lỗi và lúc phát hiện ra lỗi.

Phần 3

Cái thang 5 bậc — bạn đang ở đâu?

Trước khi đi sâu vào cấu trúc, đây là lộ trình thực tế để tự định vị: từ nơi gần như ai cũng bắt đầu, đến nơi những người giỏi nhất đang làm việc. Bạn leo từng nấc một.

1
Prompting — Ra lệnh từng câu
Bạn chính là vòng lặp. Gõ → đọc → gõ tiếp.
2
Manual Loop — Vòng lặp thủ công
Bạn tự tay lặp lại: làm → kiểm tra → sửa → lặp lại.
3
Verified Loop — Vòng lặp có kiểm chứng
Bạn định nghĩa "xong", một bài kiểm tra tự quyết định khi nào dừng.
4
Self-Running Loop — Vòng lặp tự chạy
Bạn đặt mục tiêu, vòng lặp tự chạy qua nhiều lượt đến khi đạt.
5
Autonomous Agents — Hệ thống tự vận hành
Các vòng lặp tự khởi động, chạy song song, và tự học để tốt lên.
1

Prompting

Bạn viết một prompt, đọc trả lời, viết prompt tiếp theo.

Nơi mọi người bắt đầuphần lớn dừng lại. Mỗi lượt đều cần bạn. Trần cứng: tốc độ của bạn bị giới hạn bởi tốc độ gõ và đọc. Bạn chính là vòng lặp — mà người chạy vòng lặp thì chậm, dễ mệt, mỗi lúc chỉ làm một việc.

Ví dụ non-tech: Như nhắn tin qua lại với trợ lý — hỏi, chờ, đọc, hỏi tiếp. Bạn phải có mặt cho từng tin nhắn. Rời đi là dừng.
Dấu hiệu bạn ở đây"Dùng AI" với bạn = một cửa sổ chat, gửi và đọc từng cái một. Ổn cho việc lẻ, nhưng điểm nghẽn là chính bạn.
2

The Manual Loop

Bạn tự tay lặp lại chu trình: làm → kiểm tra → sửa → lặp lại.

Bạn nhận ra: hầu hết việc thật là một chu trình, không phải một câu trả lời. Bạn chạy chu trình đó một cách có chủ đích: "giờ chạy thử", "giờ sửa lỗi đó", "giờ kiểm tra lại". Đây là vòng lặp thật đầu tiên — nhưng bạn vẫn là động cơ đẩy nó.

Ví dụ non-tech: Nấu ăn và "nếm → nêm lại → nếm tiếp" đến khi vừa miệng. Bạn đã biết đó là quy trình lặp — nhưng vẫn tự tay cầm muỗng nếm mỗi lần.
Dấu hiệu bạn ở đâyBạn gõ đi gõ lại "chạy lại đi", "giờ kiểm tra", "sửa cái đó" nhiều lần trong một buổi. Đã tư duy theo chu trình, nhưng vẫn là người quay tay.
3

The Verified Loop

Bạn định nghĩa "xong", và một bài kiểm tra tự quyết định khi nào dừng.

Bước nhảy kỹ năng thật sự đầu tiên. Thay vì "nhìn bằng mắt", bạn viết ra điều kiện thành công và để một bài kiểm tra thực thi nó: test đậu, mã sạch lỗi, kết quả khớp tiêu chí.

Cốt lõi: AI vừa làm việc là giám khảo tồi để tự chấm — nó hay báo cáo thành công quá mức. Vì vậy người kiểm tra phải tách rời người làm.
Ví dụ non-tech: Học sinh không tự chấm bài thi. Phải có giám khảo riêng / đáp án chuẩn. "Xong" là điều kiện đo được, không phải lời tự nhận.
Dấu hiệu bạn ở đâyBạn phát biểu được "xong" thành điều kiện máy kiểm tra được, không phải cảm giác. "Xong" giờ là một điều kiện, không phải phán đoán mỗi vòng.
4

The Self-Running Loop

Bạn đặt mục tiêu, vòng lặp tự chạy qua nhiều lượt đến khi đạt.

Vòng lặp tự chạy chính nó: đọc lỗi → truy nguyên → sửa → kiểm tra lại → lặp lại, mà không cần bạn lái từng lượt. Trong Claude Code, lệnh /goal chạy đến khi điều kiện bạn viết là đúng — và dùng một model riêng, nhanh hơn để chấm, thay vì tin lời AI làm việc.

Ví dụ non-tech: Giao việc cho nhân viên: "Làm đến khi đạt chuẩn này thì báo tôi." Bạn không đứng canh từng phút, chỉ ghé kiểm tra. Có một người giám sát chất lượng riêng xác nhận.
Kỷ luật bậc 4 — phải có rào chắn (guardrails) kẻo loop chạy loạn:
  • Giới hạn số vòng để nó không chạy vô tận.
  • Nạp đủ bối cảnh từ đầu để nó không lan man.
  • Chụp trạng thái trước mỗi vòng để một vòng tệ có thể quay lui.
Tự động mà không giới hạn chỉ là cách gây rối nhanh hơn.
Dấu hiệu bạn ở đâyVòng lặp tự chạy qua nhiều lượt. Bạn giám sát, không lái.
5

Autonomous Agents

Các vòng lặp tự khởi động, chạy song song, và tự cải thiện theo thời gian.

Loop design trở thành thiết kế hệ thống. Bạn không còn vận hành một AI — bạn điều hành một tổ chức nhỏ gồm nhiều AI. Ba yếu tố:

Tự khởi động
Self-starting: tự kích hoạt theo lịch/sự kiện — việc diễn ra mà không cần bạn nhấn "bắt đầu".
Song song
Parallel: nhiều loop chạy cùng lúc trong các "không gian làm việc tách biệt" (worktree), có một AI "trưởng nhóm" ghép kết quả.
Tự học
Self-improving: khi mắc lỗi, bài học được ghi vào file hướng dẫn (như CLAUDE.md hoặc một "skill"), nên sửa đổi đó tồn tại mãi trong mọi lần chạy sau.
Ví dụ non-tech: Một công ty tự vận hành: phòng ban tự nhận việc theo lịch, nhiều người làm song song, có quản lý ghép kết quả, mỗi lần rút kinh nghiệm thì ghi vào "sổ tay quy trình" để áp dụng mãi. Bạn là người thiết kế công ty đó.
Dấu hiệu bạn ở đâyBạn thiết kế hệ thống. Hệ thống chạy công việc. Đó là đỉnh của cái thang.

Cách leo lên từng bậc (một nấc một)

1 → 2
Ngừng xin một câu trả lời duy nhất. Nhận ra chu trình trong việc của bạn và chạy nó có chủ đích.
2 → 3
Viết "xong" thành điều kiện máy kiểm tra được, để bài kiểm tra quyết định — không phải bạn.
3 → 4
Giao việc "chạy vòng lặp" cho một lệnh mục tiêu (như /goal), và thêm rào chắn.
4 → 5
Để loop tự khởi động, chạy song song, và ghi lại bài học để tự cải thiện.

Phần 4

5 bước của một vòng lặp

Đừng hiểu "loop" là quay vòng vô nghĩa. Mỗi vòng làm 5 việc cụ thể. Bỏ bất kỳ bước nào, vòng lặp sẽ không quay — hoặc quay tại chỗ.

Bước 1
🔍 Discovery
Tự tìm việc đáng làm
Bước 2
📤 Handoff
Giao việc cho AI, tách biệt
Bước 3
✋ Verification
Bước duy nhất biết nói "KHÔNG"
Bước 4
💾 Persistence
Lưu trạng thái ra ngoài
Bước 5
⏰ Scheduling
Tự chạy lại vòng sau

📌 Một ví dụ cụ thể: "vòng lặp phân loại buổi sáng" của Osmani

Mỗi sáng, một tự-động-hóa tự khởi chạy. Một "skill phân loại" đọc: các bài test bị lỗi hôm qua, các vấn đề còn mở, các thay đổi code gần đây — rồi ghi kết quả vào một file. Với mỗi việc đáng làm, nó mở một "không gian làm việc tách biệt": một AI con soạn bản sửa, một AI con khác soi lỗi bản sửa đó dựa trên test. Một "đầu nối" tự động tạo đề xuất thay đổi (PR) và cập nhật phiếu việc. Thứ gì nó không xử lý được sẽ đẩy vào hộp chờ cho con người. Một file trạng thái được giữ lại để hôm sau chạy tiếp từ chỗ dừng.

Không bước nào cần đến tay người — nhưng nó dừng đúng chỗ cần dừng để chờ con người.

BướcNó làm gìTrong vòng lặp phân loạiVí dụ đời thường
🔍 Discovery
Tự tìm việc
Tự tìm ra việc của vòng này, thay vì được giao sẵn danh sáchSkill đọc test lỗi / vấn đề / thay đổi codeTrợ lý tự rà email & lịch xem hôm nay cần làm gì
📤 Handoff
Giao việc tách biệt
Chuyển việc cho AI làm, mỗi việc một không gian riêngMỗi việc mở một "worktree" riêngGiao mỗi nhân viên một bàn riêng để không giẫm chân nhau
✋ Verification
Đổi người để chấm
Một AI khác vào soi lỗi và nói "chưa được"AI con thứ hai soi lỗi dựa trên testGiám khảo riêng chấm bài, không để thí sinh tự chấm
💾 Persistence
Lưu ra ngoài
Ghi trạng thái ra nơi không bị xóa khi hội thoại kết thúcPR + hộp chờ + file trạng tháiGhi sổ công việc, không nhớ trong đầu rồi quên
⏰ Scheduling
Quay vòng
Làm một lượt trở thành cả vòng lặp tự lặp lạiTự-động-hóa chạy mỗi sángĐặt báo thức/lịch lặp lại, không phải tự nhớ mỗi ngày

Discovery đặt trần chất lượng cho cả vòng lặp: nếu tìm ra toàn việc vô giá trị, thì 4 bước còn lại có làm đẹp đến mấy cũng phục vụ cho... số 0.

Phần 5

6 bộ phận tạo nên một vòng lặp

Nếu "5 bước" mô tả điều gì xảy ra trong một vòng, thì "6 bộ phận" là những thứ phải có sẵn trong tay để vòng đó quay được. Chúng khớp 1-1 với các bước.

Bộ phậnLà gì (giải thích cho non-tech)Phục vụ bước
⏰ Automations
Tự-động-hóa
Bộ hẹn giờ / kích hoạt tự khởi động vòng lặp theo lịch hoặc sự kiện. Không có nó thì bạn chỉ có một lần chạy, không phải vòng lặp. Có loại chạy trên máy của bạn (máy phải bật) và loại chạy trên đám mây (máy tắt vẫn chạy).Scheduling
📁 Worktrees
Không gian làm việc tách biệt
Cơ chế cho phép nhiều AI làm việc trên các "bản sao thư mục" riêng trong cùng một dự án. Hai AI sửa cùng một file một lúc cũng rối như hai người cùng viết đè lên một trang giấy. Worktree biến "chạy nhưng lộn xộn" thành "chạy và sạch sẽ".Handoff
📘 Skills
Kiến thức cố định
Một file (SKILL.md) lưu kiến thức về dự án để AI không phải giải thích lại từ đầu mỗi vòng. Nó trả "nợ ý định" (intent debt) — cái giá của việc lặp đi lặp lại "dự án này là gì, luật là gì, bẫy ở đâu". Skill thì tái dùng & bảo trì được; một đống prompt dán thì không.Discovery
🔌 Connectors
Đầu nối
Cầu nối (xây trên chuẩn MCP) gắn vòng lặp với thế giới bên ngoài: hệ thống quản lý việc, cơ sở dữ liệu, Slack... Một vòng lặp chỉ nhìn thấy file trên máy là một vòng lặp tí hon. Đầu nối quyết định "tầm nhìn" của vòng lặp.Persistence / Discovery
👥 Sub-agents
AI con (người làm ≠ người chấm)
Tách AI viết ra khỏi AI chấm. Khi một AI vừa đá bóng vừa thổi còi, trọng tài sẽ thiên vị. Nghịch lý: chỉnh một "giám khảo độc lập" cho khó tính dễ hơn nhiều so với bắt người viết tự khắt khe với chính mình.Verification
🧠 Memory
Bộ nhớ trên đĩa
Trạng thái được lưu ngoài một cuộc hội thoại — một file hoặc một bảng. Khi cửa sổ hội thoại bị xóa, AI quên sạch; để hôm nay nối tiếp hôm qua, bộ nhớ phải nằm trên đĩa. AI thì quên, kho lưu trữ thì không.Persistence
Ghi nhớ — Memory ≠ Context. "Context" (bối cảnh) là thứ AI thấy trong vòng này và bị xóa khi làm mới. "Memory" (bộ nhớ) tồn tại xuyên các vòng và các ngày. Một bên là trí nhớ ngắn hạn, một bên là cuốn sổ ghi chép.

Có đủ 6 bộ phận, vòng lặp mới có "bộ xương": tự-động-hóa làm nó cử động, worktree giúp nó không tự giẫm chân, skill giúp nó không làm lại việc cũ, đầu nối cho nó nhìn ra ngoài, AI con giúp nó tự sửa mình, bộ nhớ giúp nó nhớ. Nhưng xây xong mới chỉ là khởi đầu: cùng bộ phận đó, hai người xây có thể ra hai kết quả hoàn toàn trái ngược.

Phần 6 · Phần quan trọng nhất

Trái tim: Người làm vs. Người chấm

Phần khó nhất của một vòng lặp không phải là làm cho AI chạy — mà là đặt vào trong đó một thứ biết nói "KHÔNG". Và chính AI viết code lại là kẻ ít có khả năng nói điều đó nhất.

😅 Nó luôn tự khen mình

Bảo một AI tự chấm thứ nó vừa làm, nó sẽ tự khen một cách đầy tự tin — kể cả khi con người nhìn vào thấy rõ chất lượng chỉ tầm tầm (quan sát của kỹ sư Anthropic, Prithvi Rajasekaran).

Đây không phải vấn đề thông minh, mà là "tự chấm bài của chính mình". Khi AI nhìn lại sản phẩm, nó không thấy kết quả — nó thấy chuỗi lý lẽ đã thuyết phục chính nó làm như vậy. Trong một vòng lặp, lỗi này bị khuếch đại: mỗi vòng nó gật đầu với chính mình, càng chạy lâu càng trôi xa khỏi chất lượng thật.

🎯 Chỉnh một kẻ hoài nghi, đừng sửa một tác giả khiêm tốn

Cố làm cho người viết tự phê bình hơn thì hiệu quả kém. Rajasekaran phát hiện: chỉnh một giám khảo độc lập cho hoài nghi thì dễ hơn nhiều.

Khác biệt là về cấu trúc, không phải câu chữ: bạn không thể bắt một tác giả bước ra ngoài góc nhìn của chính họ, nhưng bạn có thể đổi sang một AI khác, với hướng dẫn hoàn toàn khác, nhìn code từ đầu mà không mang theo bất kỳ "định kiến tự thuyết phục" nào.

Ý tưởng vay mượn từ GAN (mạng đối nghịch): một bên xây, một bên bới lỗi.

🖱️ Người chấm phải HÀNH ĐỘNG, không chỉ ĐỌC

Đổi AI thôi chưa đủ. Nếu giám khảo chỉ đọc code, nó chấm "trông có vẻ đúng", chứ không phải "chạy có đúng không". Rajasekaran nối giám khảo với công cụ Playwright để nó mở trang web, bấm nút, chụp màn hình, kiểm tra thật như một nhân viên QA. Cơ sở để chấm chuyển từ "đoạn code này trông ổn" sang "tôi đã bấm nút, trang chuyển đúng, đây là ảnh chụp màn hình".

Hiệu chỉnh quan trọng: hãy bảo giám khảo mặc định coi code là HỎNG cho đến khi được chứng minh ngược lại. Tư thế mặc định phải là nghi ngờ, không phải tin tưởng.

⚙️ Trong sản phẩm thực tế: lệnh /goal

Claude Code biến cấu trúc này thành một tính năng có sẵn: cho AI một điều kiện và để nó chạy đến khi điều kiện đạt. Sau mỗi vòng, một model nhỏ, nhanh, mới tinh kiểm tra xem điều kiện đã thỏa chưa — "xong" do một model khác quyết định, không phải model đang làm việc.

# Giám khảo (.claude/agents/reviewer.md)
VAI TRÒ: Người soi lỗi đối nghịch (adversarial reviewer).
MẶC ĐỊNH: code này HỎNG cho đến khi chứng minh ngược lại.
KHÔNG khen. Hãy tìm cái gì sai.
KIỂM TRA theo thứ tự:
  1. Nó có chạy không? (thực thi, đừng chỉ đọc)
  2. Test: chạy thật, dán kết quả thật ra.
  3. Các trường hợp biên mà tác giả bỏ sót.
  4. Hành vi có khớp yêu cầu không?
DÙNG Playwright: mở trang, bấm, chụp màn hình, kiểm tra DOM.
  → Chấm HÀNH VI, không chấm Ý ĐỊNH.
KẾT LUẬN: PASS chỉ khi MỌI mục đều đạt.
  Ngược lại: REJECT + liệt kê từng lý do.

# Điều kiện dừng, do một model nhỏ mới tinh chấm
/goal tất cả test trong test/auth đều đậu và bước lint sạch lỗi

Đây chính là nguyên tắc "maker–checker" (người-làm / người-kiểm) — có từ hàng chục năm trong ngân hàng: người nhập lệnh chuyển tiền lớn và người duyệt lệnh bắt buộc phải là hai người khác nhau. (Lưu ý: /goal chạy-đến-khi-đạt, khác /loop vốn chỉ chạy lại theo chu kỳ.)

Sàn của một vòng lặp chính là người chấm của nó. Trình độ người làm quyết định vòng lặp có thể tạo ra cái gì; trình độ người chấm quyết định nó sẽ không để lọt ra cái gì. Tách bạch người làm khỏi người chấm, chỉnh người chấm thành kẻ hoài nghi, bắt nó kiểm chứng bằng hành động, và giao tiếng nói cuối cùng cho một model mới tinh — đó là 4 việc giúp vòng lặp lớn lên khả năng nói "KHÔNG".

Phần 7

5 kiểu vòng lặp hỏng

Các thất bại còn dạy ta nhiều hơn thành công, và phổ biến hơn nhiều. Mỗi kiểu hỏng tương ứng với một trong 5 bước bị bỏ qua hoặc làm ẩu.

Bỏ qua: Verification

🙃 Vòng lặp gật gù (Nodding Loop)

Phổ biến nhất. AI viết code rồi chính nó tuyên bố là tốt. Không có kiểm tra độc lập, mỗi vòng cho ra kết quả tự-duyệt, và lỗi tích tụ với tốc độ máy móc. Dấu hiệu: một vòng lặp chạy hàng trăm vòng mà chưa từng một lần nói "không" với chính nó — điều bất khả thi về mặt thống kê với bất kỳ công việc thật nào.

✓ Cách sửa: tách người làm / người chấm (Phần 6).
Bỏ qua: Persistence

🧠 Vòng lặp đãng trí (Amnesiac Loop)

Tìm ra việc tốt, làm xong, rồi quên là đã làm — vì kết quả chỉ nằm trong cửa sổ hội thoại đã bị xóa. Vòng sau lại phát hiện cùng việc đó, hoặc tệ hơn, làm lại và xung đột với lần trước. Dấu hiệu: không có tiến triển tích lũy, mỗi sáng lại bắt đầu từ cùng một chỗ.

✓ Cách sửa: một file trạng thái trên đĩa — AI quên, kho lưu trữ thì không.
Bỏ qua: Scheduling

🤚 Vòng lặp thủ công (Manual Loop)

Có 4 bước tốt nhưng không có tự-động-hóa thì không phải vòng lặp — chỉ là một script con người chạy bằng tay rồi quên chạy lại. Hôm demo thì ấn tượng, rồi lặng lẽ dừng ngày bạn lơ là. Dấu hiệu: lần chạy cuối cùng là... ngày nó được demo.

✓ Cách sửa: một bộ kích hoạt thật (hẹn giờ / sự kiện) không phụ thuộc vào việc bạn nhớ.
Bỏ qua: Discovery

🙈 Vòng lặp mù (Blind Loop)

Con người vẫn giao việc mỗi sáng — "sửa 3 lỗi này" — nên vòng lặp đã tự động hóa việc làm nhưng chưa tự động hóa việc tìm. Tiết kiệm ít hơn vẻ ngoài, vì chọn việc gì để làm thường mới là phần tốn kém. Dấu hiệu: bạn vẫn dành buổi sáng để quyết định loop nên làm gì.

✓ Cách sửa: đưa logic "tìm việc" vào một skill để loop tự tìm việc.
Bỏ qua: Handoff

🧶 Vòng lặp rối (Tangled Loop)

Chạy nhiều AI song song nhưng để chúng cùng sửa một thư mục, nên các chỉnh sửa đụng nhau và mớ kết quả không ai gỡ nổi. Vấn đề chỉ lộ ra khi chạy song song: một AI thì ổn, nhưng sáng đầu tiên 5 AI cùng chạy là rối.

✓ Cách sửa: mỗi việc một worktree tách biệt.
Quy luật chung

📎 Chúng đi theo cụm

5 kiểu này không độc lập. Vòng lặp thiếu kiểm chứng thường cũng thiếu lưu trữ — đội nào ẩu ở một khâu thường ẩu ở các khâu khác. Vòng lặp kỷ luật cài đủ 5 bước; vòng lặp vội vàng chỉ cài Discovery + Handoff (hai bước cho ra kết quả nhìn thấy được) và bỏ 3 bước tạo ra sự an toàn.

Phần 8

3 vòng lặp chạy thật ngoài đời

Ba trường hợp công khai, khác nhau hoàn toàn về quy mô nhưng cùng một "bộ xương": một bộ kích hoạt nhấn nút bắt đầu, một bộ ràng buộc giữ nó đi đúng đường, và một điểm kiểm tra của con người ở cuối. "Chạy trong lúc bạn ngủ" chưa bao giờ là chuyện model mạnh cỡ nào — mà là bộ xương đó vững cỡ nào.

Quy mô: 1 người

Buổi sáng của một kỹ sư

Vòng lặp phân loại của Osmani chạy tự động mỗi sáng (đã mô tả ở Phần 4). Chi tiết đáng nhấn lại: tự-động-hóa gọi một skill, chứ không phải một khối hướng dẫn khổng lồ dán vào lịch chạy mà chẳng ai cập nhật. Đây là hình ảnh một vòng lặp một người có thể vận hành — một người, một máy, việc tay chân được làm xong mỗi sáng.

Quy mô: doanh nghiệp lớn

"Minions" của Stripe

1.300+  đề xuất thay đổi code (PR) được gộp mỗi tuần, không một dòng nào viết tay (kể bởi kỹ sư Stripe, Steve Kaliski).

Bộ kích hoạt rất nhẹ — gọi bot trong Slack, hoặc thả một biểu tượng cảm xúc. Thứ làm nó đáng tin cậy nằm ở đoạn trước khi AI thức dậy: một "bộ điều phối tất định" (deterministic orchestrator) ráp sẵn bối cảnh — quét link, kéo dữ liệu từ Jira, tìm tài liệu, dùng công cụ định vị code liên quan. Để AI tự tìm bối cảnh là phần khó kiểm soát nhất, nên việc đó — vốn có thể viết thành luật cứng — được lấy ra khỏi tay model.

Điểm phản trực giác nhất: Minions không dựa trên một model mạnh hơn. Nó là một nhánh của công cụ mã nguồn mở Goose, và luận điểm cốt lõi là: độ tin cậy đến từ chất lượng của các ràng buộc, không phải từ kích cỡ của model.

Kiến trúc của nó đan xen các "cổng tất định" (luật cứng) với các "bước sáng tạo" của AI: AI viết code → một quy trình cứng chạy bộ kiểm tra lỗi mà AI không được phép bỏ qua → AI sửa lỗi → một bước cứng lưu lại. Bất cứ gì logic tất định giải được thì không bao giờ đưa cho model xác suất. Ranh giới bạn vẽ ở đâu quyết định vòng lặp có đáng tin hay không. Và 1.300 PR đó vẫn được con người duyệt — con người không rời đi, chỉ đổi bàn: từ chỗ viết sang chỗ duyệt.

Hạ tầng: chạy ở đâu?

"Chạy lúc bạn ngủ" thực sự dựa vào cái gì?

Chạy trên máy của bạn (local) thì máy phải bật — tắt máy là loop dừng. Muốn chạy khi máy tắt, câu trả lời đúng là chạy trên đám mây (Cloud Routines hoặc lịch trên CI). Không một bộ lập lịch nào làm được tất cả:

Tiêu chí☁️ Đám mây (Cloud)🖥️ Máy bàn (Desktop)⌨️ /loop (local)
Chạy ở đâuđám mâymáy của bạnmáy của bạn
Máy phải bật?Không
Phải mở phiên làm việc?KhôngKhông
Khoảng cách chạy tối thiểu1 giờ1 phút1 phút
Thấy được file trên máy?Không

Quy tắc chọn (rất đơn giản): Việc của loop có dính chặt vào máy của bạn không? Cần kiểm tra một tiến trình đang chạy trên laptop mỗi phút → bắt buộc local (đám mây không thấy được, và không chạy nhanh hơn 1 giờ/lần). Cần quét kho code lúc 3 giờ sáng và mở PR → đừng buộc vào laptop (laptop bị gập nắp, hết pin, bị mang đi) → dùng đám mây. Loop trưởng thành thường dùng cả hai: local cho các kiểm tra nhanh bên trong, cloud cho lượt quét qua đêm.

Cảnh giác với những con số lan truyền như "~90% Claude Code do chính nó viết". Phần lớn là tóm tắt nghe lại, chỉ nên xem là tham khảo thô. Ba trường hợp ở trên đều từ nguồn trực tiếp — đáng tin hơn một con số nghe kêu.

Phần 9

4 chi phí ngầm phải trả

Một vòng lặp tự chạy cũng là một vòng lặp tự mắc lỗi. Nó chạy càng vui vẻ, nó sai càng lặng lẽ. Cả 4 chi phí dưới đây đều không hú còi báo động khi loop đang chạy.

💳 Nợ kiểm chứng (Verification debt)

Mỗi PR mở ra và gộp vào đều tiết kiệm thời gian — nhưng thời gian đó biến thành kết quả chưa được kiểm chứng chờ trả nợ. Lỗi ẩn ở chỗ test không phủ tới, trong khoảng cách giữa "chạy được" và "đúng", tích tụ đến một buổi sáng phát hành thì nổ tung cùng lúc.

🛡️ Phòng vệ: một người chấm độc lập — khác với người làm.

🗺️ Mục ruỗng hiểu biết (Comprehension rot)

Loop xuất code bạn không viết càng nhanh, khoảng cách giữa cái đang tồn tạicái bạn thực sự hiểu càng lớn. Đọc code chán hơn viết code, mà loop đã giành phần viết; kho code phình to trong khi bản đồ trong đầu bạn đứng yên.

🛡️ Phòng vệ: đọc kết quả của loop đều đặn, tự ép mình giải thích vài thay đổi. Không giải thích được = bản đồ cần cập nhật.

🏳️ Đầu hàng nhận thức (Cognitive surrender)

Khi loop tự chạy trơn tru, ta dễ thôi có chính kiến và nhận đại bất cứ gì nó trả về. Đây là phiên bản thái độ của hai cái trên: không phải "không có thời gian" mà là "không buồn bận tâm nữa". Loop càng đáng tin, càng dễ giao phó luôn cả phán đoán.

🛡️ Phòng vệ: một lằn ranh — loop được phép thực thi, nhưng không được phép quyết định. Bạn ít nhất phải còn khả năng nói "cái này sai".

💸 Cháy túi token (Token blowout)

Chi phí duy nhất đập thẳng vào hóa đơn, và khó ước lượng trước: loop sinh trợ lý phụ, thử lại, chạy vòng này đến vòng khác — một con bug có thể quay vòng vô ích cả đêm và đẻ ra một hóa đơn lạ lẫm thay vì code đã sửa.

🛡️ Phòng vệ: đặt hạn mức cứng trước khi chạy — ngân sách mỗi lần chạy, ngân sách mỗi ngày, số lần thử lại tối đa.

🔗 Một ví dụ về "nợ dồn" (debt compounding)

Một loop mở 20 PR qua đêm, tất cả test đều xanh. Nhìn bề mặt là một chiến thắng. Nhưng giả sử 3 trong 20 chứa lỗi tinh vi mà test không phủ:

  • Không có người chấm độc lập → 3 lỗi đó được gộp vào → nợ kiểm chứng.
  • Con người gộp 20 PR mà không đọc → bản đồ trong đầu giờ tụt sau 20 thay đổi → mục ruỗng hiểu biết.
  • Vì loop chạy quá mượt → sáng hôm sau con người thôi đọc luôn → đầu hàng nhận thức.
  • Vì loop sinh trợ lý và thử lại thoải mái cả đêm → hóa đơn gấp ba dự tính → cháy túi token.

3 lỗi chôn vùi giờ nằm trong một kho code mà con người không còn hiểu trọn, được canh giữ bởi một con người đã thôi nhìn — chỉ bị phát hiện khi một trong số đó nổ ra thành sự cố thật.

4 chi phí không phải 4 rủi ro riêng lẻ — chúng là MỘT thất bại đeo 4 cái mặt nạ. Chúng nuôi nhau: càng nhiều output chưa kiểm chứng → càng ít hiểu → càng đầu hàng → loop càng chạy lâu không người canh → hóa đơn càng to → lại càng nhiều output chưa kiểm chứng. Phòng vệ chung cho cả 4 là một: giữ một con người còn khả năng nói "không", và cài một bộ kiểm tra mà con người không cần thức để chạy.

Điều thú vị nhất của Loop Engineering là nó cho một người làm việc của cả đội. Điều nguy hiểm nhất nằm đúng chỗ đó: một đội thì còn cãi nhau, còn một người cộng với một đống loop dễ thành một "phòng vọng âm" nơi không ai phản biện.

Phần 10

Kinh tế học của phán đoán

Loop làm cho việc tạo ra (code, kế hoạch, bản sửa) gần như miễn phí. Thứ còn lại khan hiếm là phán đoán. Đây không phải khẩu hiệu — nó là một quan sát kinh tế có hệ quả.

📈 Cái gì trở nên dư thừa?

Khi một nguồn lực trở nên dư thừa, giá của nó rớt. Loop làm code, kế hoạch, bản sửa, PR trở nên dư thừa — một kỹ sư với một loop tốt có thể tạo ra sản lượng của cả một đội nhỏ. Việc gõ phím, viết khuôn mẫu, refactor máy móc... sụp về gần bằng 0 chi phí.

Phản ứng đầu tiên hợp lý: điều này làm kỹ sư kém giá trị hơn. Sự thật thì ngược lại — nhưng chỉ với những ai nắm giữ được thứ khan hiếm.

💎 Cái gì vẫn khan hiếm?

Thứ khan hiếm là phán đoán để quyết định giữ cái nào trong đống output dư thừa. Loop tạo được trăm bản, nhưng không nói được bản nào đúng — chỉ bản nào trông có vẻ hợp lý. Khoảng cách giữa "trông hợp lý" và "thực sự đúng" chính là nơi nghề kỹ sư tồn tại.

Khi việc tạo ra tiến về miễn phí, toàn bộ giá trị của kỹ sư cô đặc lại vào khoảng cách đó — phán đoán thuần khiết, đã gột sạch lớp lao động tay chân từng vây quanh nó.

⚔️ Cái khuếch đại cắt cả hai chiều. Vì loop khuếch đại phán đoán, một sai lầm trong phán đoán cũng bị khuếch đại. Thời xưa, một quyết định tồi tốn một đoạn code viết tay sai — phạm vi hẹp, đủ chậm để bắt kịp. Thời nay, một quyết định tồi được thực thi trung thành, hàng loạt, hàng trăm lần, bởi một cỗ máy không hề dừng lại để hỏi xem nó có đúng không. Loop đã gỡ mất "bánh răng chậm" từng cứu kỹ sư. Đây là lý do kỷ luật "vẫn làm kỹ sư" không phải tình cảm tùy chọn, mà là điều kiện vận hành bắt buộc.

Loop là một dấu nhân trung thành — và thứ nó nhân lên chính là con người vận hành nó.

Phần 11

3 kỷ luật vận hành

Nếu phán đoán là nguồn lực khan hiếm, câu hỏi thực tế là: tiêu nó cho khéo bằng cách nào? Ba kỷ luật nên thành thói quen thường trực.

Luôn đọc một mẫu (Read a Sample)

Chống "mục ruỗng hiểu biết" không phải bằng cách đọc mọi thứ loop tạo ra (vậy thì mất ý nghĩa), mà đọc một mẫu đại diện, mỗi ngày, và tự ép mình giải thích từng thay đổi đã chọn: nó làm gì và vì sao làm thế. Không giải thích nổi = bản đồ trong đầu đã tụt lại. Mẫu không cần lớn — cần đều đặn và thật sự được soi.

Đặt hạn mức trước khi chạy (Cap Before You Ship)

Chống "cháy túi token" bằng cách đặt trần cứng trước lần đầu chạy không người canh, không phải sau hóa đơn gây sốc đầu tiên. Ngân sách mỗi lần chạy + ngân sách mỗi ngày + số lần thử lại tối đa = bộ ngắt mạch, biến một rủi ro vô hạn thành rủi ro có biên. Loop không có trần là loop đã giao quyền chi tiêu cho chính những con bug của nó.

Luôn chừa một cánh cửa mở (Keep One Door Open)

Chống "đầu hàng nhận thức" bằng cấu trúc, không chỉ bằng thái độ. Cài ít nhất một điểm dừng nơi loop tạm dừng chờ con người — không phải vì con người sẽ luôn can thiệp, mà vì sự tồn tại của điểm dừng giữ con người ở vị thế có thể can thiệp. Người hàn chết mọi cánh cửa, đến ngày buộc phải vào sẽ nhận ra mình không còn giữ chìa khóa.

Phần 12 · Thực hành

Tự xây vòng lặp đầu tiên

Pipeline của Stripe là đích đến, không phải điểm xuất phát. Vòng lặp đầu tiên nên nhỏ đến mức gần như không giống một hệ thống — một thứ tí hon kiểm tra cái gì đó theo giờ.

Chạy một /loop

Lệnh /loop chạy lại cùng một việc theo chu kỳ. Nó gắn với phiên làm việc, chạy trên máy của bạn (tắt máy là dừng).

/loop 5m kiểm tra deploy   # cố định: mỗi 5 phút
/loop kiểm tra deploy      # AI tự căn nhịp
/loop                     # chạy file .claude/loop.md

Đọc CI & vấn đề; phân loại trước

Chạy lại một dòng chưa phải vòng lặp. Cho nó một việc: mỗi sáng nhìn 3 thứ và liệt kê cái nào đáng xử lý. Lên lịch + tự tìm việc = vòng lặp nhập môn. Logic tìm việc nên nằm trong một skill, không nằm trong lịch.

# .claude/skills/morning-triage/SKILL.md
NAME: morning-triage
WHEN: được tự-động-hóa gọi mỗi sáng.
READ:
  - các lần chạy CI bị lỗi từ hôm qua
  - vấn đề mở ra trong 24h qua
  - các thay đổi đã gộp từ lần chạy trước
JUDGE: với mỗi mục, có đáng hành động không?
  Bỏ nhiễu. Chỉ giữ phát hiện đáng làm.
OUTPUT: ghi phát hiện + trạng thái vào
  ./state/triage.md (mỗi phát hiện một dòng).

Thêm một file trạng thái

Đừng để kết quả trong cửa sổ chat. Ghi mọi phát hiện và mức độ đã xử lý vào một file (hoặc một bảng). AI quên; kho lưu trữ thì không.

# ./state/triage.md  (bộ nhớ của loop)
| phát hiện       | nguồn    | trạng thái |
|-----------------|----------|------------|
| test auth chập  | CI #4821 | đang sửa   |
| lỗi null deref  | issue 92 | PR đã mở   |
| thư viện cũ     | commit a3| hộp chờ    |

Thêm một người chấm (Evaluator)

Bước quan trọng nhất và dễ bị bỏ qua nhất. /goal chạy đến khi điều kiện đạt, với một model khác chấm xem đã đạt chưa.

/goal tất cả test trong test/auth đậu và bước lint sạch lỗi

Thêm worktree để chạy song song

Dùng --worktree để mỗi AI nền có một không gian riêng, không giẫm chân nhau.

# mỗi phát hiện một worktree tách biệt
claude --worktree fix/auth-test  "soạn bản sửa"
claude --worktree fix/null-deref "soạn bản sửa"

✅ Bảng kiểm cho vòng lặp đầu tiên (6 yếu tố)

Hai yếu tố đầu quyết định loop có chạy được không; bốn yếu tố sau quyết định nó có gặp rắc rối không một khi đã chạy. Người mới hay chỉ làm 2 cái đầu — và kết quả là một loop không ai canh, không ai dừng được, cứ gật gù với chính nó.

Yếu tốTự hỏi mình
Nguồn DiscoveryNó đọc gì theo giờ? (CI / vấn đề / thay đổi code / hộp chờ)
File trạng tháiFile nào trên đĩa giữ bộ nhớ xuyên các vòng?
Người chấmCó một bộ kiểm tra độc lập biết nói "không" chưa?
Cách lyMỗi AI song song có worktree riêng chưa?
Trần tokenĐã đặt trần chi tiêu chưa? Ai dừng nó nếu nó chạy loạn?
Điểm con người duyệtBước nào dừng lại cho bạn xem, thay vì tự động chạy thẳng một mạch?

Lời khuyên khép lại: vòng lặp đầu tiên nên nhỏ, nhưng phải cài đủ bộ kiểm tra biết nói "không"điểm con người duyệt. Lớn lên thì thêm chạy song song sau cùng, sau khi các bộ kiểm tra đã được chứng minh. Một vòng lặp giành được quyền chạy nhiều AI bằng cách trước hết chứng minh nó dừng được một AI tồi.

Phần 13

Tự đánh giá: Bạn đang ở bậc nào?

Đánh dấu những câu đúng với bạn. Câu được đánh dấu ở bậc cao nhất chính là bậc hiện tại của bạn.

Thông điệp cốt lõi

Phần lớn mọi người kẹt ở bậc 1–2 không phải vì các bậc cao khó, mà vì chưa ai nói cho họ biết cái thang này tồn tại.

Câu duy nhất cần mang theo — câu mà cả ngành hội tụ lại chỉ trong một tuần:
“Đừng ra lệnh cho AI nữa. Hãy thiết kế hệ thống ra lệnh cho nó — nhưng thiết kế như một người vẫn quyết tâm làm kỹ sư, chứ không chỉ là người bấm nút Start.”

Mọi thứ kỹ thuật trong tài liệu này — người chấm, file trạng thái, hạn mức ngân sách, cánh cửa để mở — đều phục vụ một tư thế duy nhất: giữ cho một con người vẫn còn khả năng nói "KHÔNG" với một cỗ máy được tạo ra để nói "CÓ" thật nhanh.

📝 Ghi chú thực chiến cho tháng đầu tiên

  • Loop sống sót là loop nhỏ đã chiếm được niềm tin, không phải loop tham vọng đòi hỏi niềm tin. Bắt đầu với một phát hiện xử lý trọn vẹn từ đầu đến cuối, rồi mới mở rộng.
  • Công sức kỹ thuật nên đổ vào người chấm. Người làm mạnh + người chấm yếu = rác đầy tự tin. Người làm vừa phải + người chấm sắc bén = tiến triển chậm mà chắc — và cái thứ hai mới là cái tích lũy được.
  • Điểm con người duyệt không phải giàn giáo tạm để gỡ đi khi đã tin loop. Nó là tính năng vĩnh viễn giữ cho loop đáng tin. Ngày bạn gỡ nó là ngày "mục ruỗng hiểu biết" bắt đầu thật sự.
  • Đặt trần ngân sách với giả định "sẽ có thứ quay vô ích qua đêm" — vì rồi sẽ có. Cái trần là ranh giới giữa "một dòng kỳ lạ trong log" và "một khoản tiền trên hóa đơn".

Điều khiến các đội bất ngờ không phải việc xây loop (giờ thật sự dễ) — mà là cảm giác dễ chịu khi loop "cứ chạy ngon" làm xói mòn chính những kỷ luật đã khiến nó chạy ngon, và sự xói mòn đó vô hình cho đến buổi sáng nó không còn vô hình nữa.

Phần 14

Bảng thuật ngữ

Thuật ngữNghĩa
Loop (Vòng lặp)Một hệ thống tự tìm việc, làm, kiểm chứng, lưu trữ và lên lịch lại — mà không có con người trong vòng quay bên trong.
Harness (Bộ đồ nghề)Bộ kit trang bị cho một lần chạy của AI: công cụ, hành động được phép, cách phục hồi, định nghĩa "xong".
Move (Bước)Một trong 5 bước của một vòng quay: Discovery, Handoff, Verification, Persistence, Scheduling.
Part (Bộ phận)Một trong 6 thành phần hiện thực hóa các bước.
Generator (Người làm)AI viết ra kết quả.
Evaluator (Người chấm)Một AI riêng để chấm, mặc định nghi ngờ và kiểm chứng bằng hành động.
WorktreeCơ chế cho mỗi AI song song một thư mục làm việc riêng.
SkillKiến thức về dự án được cố định trong một file SKILL.md.
Connector (Đầu nối)Giao diện (qua chuẩn MCP) nối loop với các hệ thống bên ngoài.
Memory (Bộ nhớ)Trạng thái lưu trên đĩa, sống sót qua bất kỳ cuộc hội thoại nào.
Intent debt (Nợ ý định)Cái giá lặp lại của việc giải thích lại dự án mỗi lần — được trả bằng một skill.
Verification debt (Nợ kiểm chứng)Kết quả chưa kiểm chứng tích tụ trong khoảng giữa "chạy được" và "đúng".
Maker–checkerNguyên tắc ngân hàng: người làm và người duyệt bắt buộc là hai người khác nhau — áp vào điều kiện dừng của loop.