Phần lớn lập trình viên dùng AI để code như dùng một khung chat: ra lệnh, ngồi nhìn, rồi nhảy vào sửa khi nó đi lạc. Cách làm có người giám sát (human-in-the-loop, HITL) này ổn cho bản chạy thử (prototype), nhưng đuối ngay khi tính năng phức tạp lên.
Ralph Loop là kỹ thuật chạy các agent lập trình AI (như Claude Code, Amp) trong một vòng lặp Bash, lặp đi lặp lại cho đến khi hoàn thành toàn bộ danh sách nhiệm vụ trong file PRD.
Thay vì để AI tự quyết định khi nào dừng dựa trên xác suất, Ralph buộc agent lặp lại phiên làm việc cho tới khi có kết quả kiểm chứng được qua test và lint.
Đó là bước chuyển từ điều hành agent theo từng bước sang chỉ định trạng thái cuối cùng, rồi để nó tự chạy đến đó.

Ralph Loop là gì?
Tên gọi Ralph Loop bắt nguồn từ nhân vật Ralph Wiggum trong The Simpsons—cậu bé nổi tiếng vì thất bại liên tục nhưng cứ kiên trì thử lại đến khi thành công. Kỹ thuật này do Geoffrey Huntley khởi xướng, dựa trên một hình dung đơn giản: phần mềm giống như nắm đất sét trên bàn xoay, kết quả chưa ưng thì ném lại vào vòng lặp để nhào nặn tiếp.
Về kiến trúc, Ralph chọn mô hình một khối (monolithic). Trong khi nhiều kỹ sư lao vào bài toán đa agent (multi-agent), Huntley cảnh báo rằng để các thực thể bất định (non-deterministic) nói chuyện với nhau rất dễ thành một mớ hỗn độn ("red hot mess"). Ralph đi hướng ngược lại: một tiến trình duy nhất, xử lý đúng một task mỗi vòng lặp. Khác biệt cốt lõi nằm ở mức độ tự trị:
- Vibe coding: code theo cảm tính, nhận đại đề xuất của AI mà không soi kỹ. Xem thêm vibe coding là gì.
- Planning: lập kế hoạch trước khi code, nhưng vẫn gói gọn trong một phiên làm việc dài nên dễ tích lũy sai số.
- Ralph: agent tự chọn task quan trọng nhất từ PRD, tự làm, tự kiểm tra và lặp lại cho đến khi đạt mục tiêu.
Vì sao chạy theo vòng lặp lại hiệu quả?
Hai kẻ thù lớn nhất của AI coding hiện nay là context rot (thối rữa ngữ cảnh) và compaction (nén dữ liệu). Một phiên làm việc kéo dài sẽ làm đầy mảng dữ liệu (array) của ngữ cảnh, buộc model phải tóm tắt lại lịch sử. Quá trình nén đó đánh rơi những chỉ dẫn quan trọng ở đầu phiên, khiến AI "ngu" dần theo thời gian.

Ralph xử lý gốc rễ bằng cơ chế fresh context. Vòng lặp Bash chạy bên ngoài sẽ giết và khởi động lại session AI hoàn toàn, xóa sạch dữ liệu rác và đưa model về trạng thái suy luận tốt nhất. Cách này hiệu quả hơn hẳn các plugin chạy bên trong Claude Code—vốn vẫn giữ session cũ nên không thật sự giải quyết được chuyện nén ngữ cảnh. Ralph còn chữa được tật "tưởng là xong" của model: nó dựng một hợp đồng thực thi, agent chỉ được thoát khi đưa ra bằng chứng kỹ thuật rằng code đã vượt qua mọi rào kiểm định.
Giải phẫu một Ralph Loop
Một Ralph Loop tiêu chuẩn gồm bốn thành phần ăn khớp với nhau để giữ trí nhớ qua mỗi lần reset ngữ cảnh:

- prd.json: danh sách nhiệm vụ có cấu trúc, mang các trường trạng thái như
passes: true/false. Đây là kim chỉ nam để agent tự xác định việc tiếp theo. - progress.txt: bộ nhớ ngắn hạn, ghi lại quyết định kiến trúc, bài học và blocker của từng vòng lặp. Agent đọc file này khi mở session mới để khỏi lặp lại sai lầm cũ.
- agents.md (hoặc CLAUDE.md): bộ nhớ dài hạn, lưu các quy ước và pattern riêng của dự án mà AI phải tuân thủ tuyệt đối.
- Completion Promise (sigil): từ khóa dừng vòng lặp, ví dụ
<promise>COMPLETE</promise>. Trong Claude Code, cơ chế này móc vào Stop Hook để chặn việc thoát session khi chưa đạt điều kiện hoàn thành.
Bắt đầu: từ HITL đến chạy tự động (AFK)
Đừng nhảy thẳng vào chạy tự động qua đêm. Hãy đi theo lộ trình ba cấp độ để xây dần sự tin cậy:

- Cấp 1 (cái tua-vít): chạy thủ công từng lần (HITL). Bạn quan sát cách AI xử lý, tinh chỉnh prompt và bản PRD. Đây là bước mài rìu quan trọng nhất.
- Cấp 2 (cái khoan): chạy vòng lặp có giám sát—cho phép lặp nhiều lần liên tục nhưng vẫn theo dõi định kỳ để can thiệp khi agent đi chệch hướng.
- Cấp 3 (cái máy đục): chạy tự động hoàn toàn qua đêm (AFK). Cắm thêm thông báo qua WhatsApp hay Telegram khi vòng lặp kết thúc để bạn đỡ phải liên tục chuyển ngữ cảnh.
Dưới đây là script Bash minh họa (afk-ralph.sh) với các tham số đã tối ưu:
#!/bin/bash
set -e
ITERATIONS=$1
for i in $(seq 1 $ITERATIONS); do
echo "Khởi động vòng lặp thứ $i..."
# Chạy Claude với cờ bỏ qua xác nhận quyền và trỏ thẳng vào file ngữ cảnh
OUTPUT=$(claude -p "Thực hiện task quan trọng nhất trong prd.json. Chạy test/lint trước khi commit." @prd.json @progress.txt --dangerously-skip-permissions)
if echo "$OUTPUT" | grep -q "<promise>COMPLETE</promise>"; then
echo "Nhiệm vụ hoàn thành."
break
fi
doneNhững nguyên tắc giữ Ralph đi đúng hướng
- Repo bẩn thì prompt sạch cũng vô dụng: chỉ dẫn trong prompt luôn yếu thế trước mã nguồn đang có. Codebase của bạn mà rác thì Ralph sẽ đẻ thêm rác, mặc kệ prompt bảo "viết code sạch". Dọn repo trước khi chạy loop.
- Ưu tiên việc rủi ro trước: đừng để Ralph chọn việc dễ làm trước. Ép agent xử lý các "architectural spike"—những điểm rủi ro về kiến trúc—ngay từ đầu, vì sai ở giai đoạn này sẽ kéo theo nợ kỹ thuật (technical debt) nghiêm trọng khi chạy tự động hàng loạt.
- Nhiệm vụ nguyên tử: mỗi task trong PRD phải đủ nhỏ để giải quyết trọn vẹn trong một cửa sổ ngữ cảnh.
- Docker sandbox: với chế độ AFK, cô lập môi trường bằng Docker là bắt buộc, để chặn các lệnh phá hoại hệ thống (chẳng hạn
rm -rf) từ một agent non-deterministic.
Khi nào nên — và không nên — dùng Ralph
Nên dùng khi:
- Xây tính năng mới từ một bản PRD (Product Requirements Document) có cấu trúc rõ ràng.
- Vòng lặp test coverage: ép agent tìm những đoạn code chưa có test và viết bổ sung cho đến khi đạt mức coverage mục tiêu.
- Vòng lặp linting: sửa hàng loạt lỗi linter một cách tuần tự.
- Vòng lặp entropy: quét codebase để xóa export thừa, dọn code rác và refactor các mẫu code cũ.
Không nên dùng khi:
- Thiết kế kiến trúc cốt lõi ban đầu—phần này cần tư duy con người qua chế độ HITL.
- Các tác vụ đòi hỏi thẩm mỹ hoặc phán đoán chủ quan liên tục.
Về chi phí: chạy Ralph với model Sonnet tốn khoảng $10/giờ. Luôn đặt giới hạn số vòng lặp tối đa để kiểm soát ngân sách và giữ tính idempotent cho cả quy trình.
Các câu hỏi thường gặp
Ralph có phải là một plugin không? Không. Ralph chuẩn là một vòng lặp Bash chạy bên ngoài AI agent. Nhờ vậy nó giết và hồi sinh session hoàn toàn để xóa sạch ngữ cảnh cũ, thay vì lặp bên trong session—vốn vẫn gây thối rữa ngữ cảnh.
Có nên dùng model local không? Chưa nên. Các model local hiện tại chưa đủ sức suy luận để gánh những vòng lặp tự trị phức tạp. Claude Sonnet đang là tiêu chuẩn vàng về cân bằng giữa hiệu năng và chi phí cho Ralph Loop.
Tại sao không chạy song song nhiều agent? Chạy song song sinh ra tranh chấp khi nhiều agent cùng sửa một file hoặc phụ thuộc lẫn nhau. Vòng lặp tuần tự, một khối cho kết quả ổn định, dễ kiểm soát và ít lỗi logic hơn.
Tài liệu tham khảo
- Everyone's Using Ralph Loops Wrong. Here's What Actually Works. — Alex Dunlop
- 11 Tips For AI Coding With Ralph Wiggum — Matt Pocock
- Everything is a Ralph Loop — Geoffrey Huntley
- Getting Started With Ralph — AI Hero
- Claude Code Ralph Loop: From Basic Prompts to Autonomous Overnight Builds — Joe Njenga
- snarktank/ralph — GitHub
- Ralph Loops: Build Dumb AI Loops That Ship — Chris Parsons, Cherrypick