Bỏ qua để vào nội dung chính
Claude Code /loop, /goal Và Codex Goal Mode: Chạy Agent Qua Đêm

Claude Code /loop, /goal Và Codex Goal Mode: Chạy Agent Qua Đêm

Bởi Benjamin Hayes
10 thg 8, 20266 phút đọc

So sánh /loop, /goal của Claude Code và Goal Mode của Codex CLI: khi nào dùng cơ chế nào, kèm ví dụ chạy Pi coding agent trong Docker Sandbox cho dự án Java.

Task refactor lớn treo qua đêm, sáng ra bạn vẫn phải bấm Enter tiếp

Bạn giao cho Claude Code một đợt refactor xuyên nhiều file, hoặc nhờ nó săn một flaky test khó chịu suốt cả buổi. Vấn đề là agent chỉ chạy một turn rồi dừng, còn bạn thì không thể ngồi cắm màn hình để bấm continue mỗi vài phút. /loop, /goal của Claude Code và Goal Mode của Codex CLI được sinh ra để giải quyết đúng khoảng trống đó — nhưng cơ chế kích hoạt lượt kế tiếp của từng công cụ khác nhau khá nhiều, và hiểu sai sẽ khiến bạn đốt API credit vô ích hoặc agent dừng làm việc quá sớm.

Vì sao mô hình one-turn không chịu nổi task dài hơi

Luồng agent tiêu chuẩn là một vòng khép kín: bạn gửi prompt, agent đọc file, chạy lệnh CLI, sửa code, rồi trả quyền điều khiển lại cho bạn. Mô hình này hợp với việc atomic như thêm một null check. Nhưng nó vỡ trận với task kéo dài nhiều giờ hoặc nhiều ngày — migrate codebase, refactor diện rộng, săn flaky test, hay giữ một PR ở trạng thái xanh cho tới khi merge. Cách xử lý thủ công trước đây là paste lại lệnh continue mỗi vài phút, hoặc tự viết shell script bọc quanh CLI. Cả Claude Code lẫn Codex CLI giờ đã tích hợp sẵn khả năng này vào binary, chỉ là mỗi bên đi theo một hướng khác nhau.

/loop của Claude Code: tự động hoá theo thời gian

Lệnh /loop hoạt động như một scheduler nội bộ cho các task lặp lại trong phiên đang mở — nó session-scoped, nghĩa là task tồn tại chừng nào cuộc hội thoại còn sống. Có ba cách dùng chính. Với nhịp cố định, bạn khai báo khoảng thời gian kiểu /loop 5m check deployment status; hệ thống map nó thành một lịch giống cron, giây được làm tròn về phút gần nhất để agent kích hoạt đúng theo nhịp bạn định. Với self-paced polling, bạn bỏ trống khoảng thời gian và để Claude tự quản nhịp độ — sau mỗi vòng lặp, agent phân tích context và quyết định nên chờ một phút hay tới một giờ dựa trên hoạt động quan sát được. Còn maintenance mode là gọi /loop không kèm tham số nào, kích hoạt một routine mặc định quản lý PR comment, CI failure và sức khoẻ branch — bạn tuỳ biến hành vi này toàn cục qua file .claude/loop.md.

/goal của Claude Code: tự động hoá theo điều kiện hoàn thành

Khác với /loop chạy theo nhịp thời gian, lệnh /goal — ra mắt từ bản 2.1.139 — chuyển trọng tâm sang trạng thái hoàn thành. Bạn định nghĩa một điều kiện thành công, và sau mỗi turn, một model phụ nhẹ hơn (thường là Haiku) sẽ đánh giá lịch sử hội thoại so với goal đó. Nếu evaluator trả lời "chưa", agent chạy thêm một turn; nếu trả lời "xong", goal được đánh dấu hoàn thành. Cơ chế này không thay thế lớp permission, nó chỉ đóng vai trò một hook thường trực để đánh giá tiến độ — và làm việc cực tốt với những task kiểu chạy test suite tới khi pass. Ví dụ tối giản: tạo một thư mục có hàm lỗi và bộ test tương ứng, rồi chạy /goal `npx jest` exits 0 — agent sẽ tự lặp cho tới khi lệnh đó thoát với mã 0.

Goal Mode của Codex CLI: nhắm tới task kéo dài nhiều ngày

Cách tiếp cận goal của OpenAI Codex CLI được thiết kế cho độ bền, nhắm tới những task trải dài nhiều ngày chứ không chỉ vài giờ. Sau khi bật qua cấu hình (hoặc cờ --enable goals), agent vận hành qua các trạng thái cụ thể: pursuing, paused, achieved, và budget-limited. Điểm cần nhớ: quyền tự chủ càng cao thì mức giám sát bạn cần đặt ra càng phải tăng theo — nguyên tắc được nhắc tới thẳng là luôn coi diff cuối cùng như bản nháp của một junior engineer, không merge thẳng chỉ vì goal báo "achieved".

Ví dụ thực tế: chạy Pi coding agent trong Docker Sandbox cho dự án Java

Để agent chạy xuyên nhiều giờ mà không lo nó đụng vào máy thật, ghép nó với một sandbox cô lập là bước tiếp theo hợp lý. Docker Sandbox cung cấp môi trường microVM cô lập cho AI coding agent — mỗi sandbox có Docker daemon, filesystem và network riêng, nên agent có thể build container, cài package, chạy dev tool và sửa file bên trong một môi trường tách biệt hoàn toàn khỏi máy bạn. Một ví dụ cụ thể đang được cộng đồng dùng là ghép Docker Sandbox với Pi — một coding harness terminal tối giản hỗ trợ TypeScript extension, skill, prompt template và package — để dựng riêng một môi trường phát triển Java tái sử dụng được. Kết hợp này cho bạn một pattern gọn: /goal hoặc /loop điều phối vòng lặp, Docker Sandbox lo phần cô lập, còn bạn chỉ cần review diff cuối ngày thay vì canh máy suốt buổi.

Checklist áp dụng cho task chạy dài

  • Task atomic (thêm null check, giải thích hàm) — không cần /loop hay /goal, cứ chạy một turn bình thường.
  • Task lặp theo nhịp cố định (kiểm tra deploy mỗi 5 phút) — dùng /loop với khoảng thời gian tường minh.
  • Task không rõ khi nào xong nhưng có điều kiện pass/fail rõ ràng (test suite, build) — dùng /goal với lệnh kiểm tra cụ thể.
  • Task đa ngày, cần khả năng tạm dừng và tiếp tục — cân nhắc Codex Goal Mode với các trạng thái pursuing/paused/achieved.
  • Bất kể chọn cơ chế nào, chạy trong Docker Sandbox nếu agent có quyền cài package hoặc chạy lệnh ngoài phạm vi repo hiện tại.

Việc nên làm tiếp theo

Nếu bạn đang dùng Claude Code, thử /goal trên một bug thật kèm test suite có sẵn trước — đây là trường hợp an toàn nhất để cảm nhận cơ chế evaluator. Nếu bạn cần task chạy qua nhiều ngày làm việc, đọc kỹ phần cấu hình Goal Mode của Codex CLI trước khi bật cờ --enable goals trên một repo production. Và dù chọn công cụ nào, đừng bỏ qua bước review diff cuối cùng — đó vẫn là junior engineer, chỉ là một junior không bao giờ mệt.

Không spam, hủy đăng ký bất kỳ lúc nào.

Bài viết liên quan