Blog

Cách để Claude Code và Codex chạy qua đêm thông qua /goal vào năm 2026: Chế độ tự động 14 giờ

Markdown

Lệnh /goal trong Claude Code 2.1.139 và Codex CLI cho phép một tác nhân AI tự hoạt động trong nhiều giờ. Tôi giải thích cách thiết lập, đưa ra ví dụ thực tế và cho biết tính năng này tiêu tốn bao nhiêu token.

Đọc toàn bộ bài viết

Điểm chính

Lệnh /goal xuất hiện trong Claude Code 2.1.139 (ngày 11 tháng 5 năm 2026) và Codex CLI 0.128.0 (ngày 30 tháng 4 năm 2026, ổn định từ ngày 21 tháng 5). Bạn chỉ cần xác định tiêu chí “hoàn thành” một lần, rồi tác nhân sẽ tự xoay vòng qua các bước lập kế hoạch, thực hiện và xác minh cho đến khi đạt tiêu chí hoặc hết token. OpenAI đã công khai trình diễn một lần chạy kéo dài 25 giờ, sử dụng 13 triệu token. Tính năng này phù hợp với các công việc di trú, đo điểm chuẩn và tái cấu trúc có tiêu chí đo lường được. Tính năng này không phù hợp với các tác vụ UI, cơ sở dữ liệu production hoặc những yêu cầu mơ hồ như “làm cho tốt hơn”.

Thông tin về cách làm việc với Ailoot có trong tài liệu.

/goal là gì và tại sao nó xuất hiện vào năm 2026?

Điểm chính

Trước khi có /goal, mỗi lượt của tác nhân đều cần bạn thủ công ra lệnh “tiếp tục”. Nó mở một tệp, đọc, viết gì đó rồi dừng lại chờ. Lệnh /goal đặt tiêu chí hoàn thành một lần; tác nhân tự quyết định khi nào nhiệm vụ đã xong và không trả quyền điều khiển cho bạn cho đến khi hoàn tất.

Tình huống mà tất cả chúng ta từng trải qua trước tháng 4 năm 2026: Tôi giao cho Claude một nhiệm vụ: “di trú dự án từ Pydantic v1 sang v2”. Nó bắt đầu, dừng lại sau 30 giây, tôi xem nó đã làm gì, viết “tiếp tục”, nó thực hiện bước tiếp theo rồi lại dừng, và tôi lại viết “tiếp tục”. Với một đợt di trú lớn, như vậy đồng nghĩa với 200–300 lần “tiếp tục” thủ công; tôi thực chất đang trông chừng tác nhân thay vì viết song song một đoạn mã khác.

Phân tích của OpenAI cho rằng vấn đề không nằm ở sự “ngu ngốc” của mô hình, mà ở kiến trúc của vòng lặp. Mô hình không biết khi nào nên dừng nên cứ đạp phanh ở mỗi lượt. Hãy đưa cho nó tiêu chí “hoàn thành”, và nó sẽ tự quyết định.

Đó là cách /goal ra đời — một cơ chế được tích hợp vào harness, chứ không phải vào mô hình.

Nhận xét này được đưa ra tại hội nghị Code with Claude ở London vào ngày 19–20 tháng 5 năm 2026. Nó mô tả điều thực sự đã xảy ra trong tháng sau khi /goal ra mắt trên cả hai công cụ.

Thiết lập Goal mode trong Claude Code như thế nào?

Điểm chính

Claude Code 2.1.139 được phát hành ngày 11 tháng 5 năm 2026 cùng lệnh /goal. Một mô hình nhỏ (mặc định là Haiku) kiểm tra tiêu chí sau mỗi lượt. Nếu tiêu chí chưa đạt, Claude sẽ thực hiện thêm một lượt. Tiêu chí có thể dài tối đa 4.000 ký tự và mỗi phiên chỉ có một goal.

Ví dụ tối giản từ tài liệu chính thức của Anthropic:

claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"

Lệnh này khởi chạy tác nhân ở chế độ nền với một goal. Claude tìm các PR, đối chiếu chúng với CHANGELOG.md, bổ sung những dòng còn thiếu và dừng lại khi đạt tiêu chí.

Trong chế độ tương tác, chỉ cần nhập /goal rồi đến điều kiện:

/goal all pytest tests pass and mypy strict reports zero errors

Tiếp theo Claude sẽ làm như sau:

  • Sau mỗi lượt, một mô hình nhanh riêng biệt (mặc định là Haiku) nhận điều kiện hiện tại và lịch sử hội thoại
  • Mô hình này trả lời “có” hoặc “không” kèm lý do ngắn gọn
  • Nếu câu trả lời là “không”, Claude tự động thực hiện lượt tiếp theo mà không trả quyền điều khiển cho bạn
  • Nếu câu trả lời là “có”, goal được xóa và quyền điều khiển được trả lại cho bạn

Sau mỗi lượt, một mô hình nhỏ, nhanh sẽ kiểm tra xem điều kiện đã đạt chưa. Nếu chưa, Claude bắt đầu lượt tiếp theo mà không trả quyền điều khiển cho bạn.

— Tài liệu chính thức của Claude Code, https://code.claude.com/docs/en/goal

Các giới hạn cứng mà không ai nói với bạn cho đến khi gặp phải:

  • /goal chỉ hoạt động trong các thư mục làm việc đã chấp nhận hộp thoại xác nhận mức độ tin cậy. Nếu bạn dùng máy mới và Claude chưa ghi nhớ thư mục đó, lệnh sẽ thất bại
  • Trong môi trường doanh nghiệp có disableAllHooks hoặc allowManagedHooksOnly, lệnh này không khả dụng
  • Điều kiện có thể dài tối đa 4.000 ký tự
  • Mỗi phiên chỉ có thể có một goal đang hoạt động. Lệnh /goal mới sẽ đặt lại goal cũ
  • Với --resume, điều kiện được giữ nguyên, nhưng bộ đếm lượt, thời gian và token sẽ đặt lại

Các lệnh điều khiển:

  • /goal không có đối số — hiển thị trạng thái hiện tại
  • /goal clear (hoặc stop, off, reset, none, cancel) — xóa goal

Theo Anthropic, chi phí của bộ đánh giá “thường không đáng kể so với chi phí của lượt chính”. Haiku đánh giá tiêu chí và văn bản hội thoại, không gọi công cụ, nên bước kiểm tra này rẻ; phần tốn kém là các lượt của mô hình chính.

Thiết lập /goal trong Codex CLI như thế nào?

Điểm chính

Codex CLI 0.128.0 bổ sung /goal vào ngày 30 tháng 4 năm 2026 dưới dạng tính năng thử nghiệm. Ngày 21 tháng 5, chế độ này trở thành ổn định trong bản phát hành 26.519 / npm 0.133.0. Tính năng này hoạt động thông qua hai mẫu prompt — continuation.md (“tiếp tục”) và budget_limit.md (“dừng”). Goal gắn với thread và vẫn được giữ sau khi khởi động lại.

Lệnh này trông giống lệnh trong Claude:

codex
> /goal all vitest tests pass and there are no eslint errors

Codex cung cấp thêm các lệnh điều khiển goal:

LệnhChức năng
/goal conditionđặt goal
/goalxem trạng thái
/goal pausetạm dừng
/goal resumetiếp tục
/goal editthay đổi điều kiện (khi GA)
/goal clearxóa goal

Khác biệt chính so với Claude là Codex tự kiểm tra xem mình đã “xong” chưa, thay vì dùng một mô hình riêng. Sau mỗi lượt, Codex tự động chèn mẫu continuation.md từ kho openai/codex vào ngữ cảnh. Bản dịch sát nghĩa:

“Tiếp tục làm việc để hướng tới goal đang hoạt động của thread. Đừng lặp lại công việc đã hoàn thành. Chọn hành động cụ thể tiếp theo để tiến tới goal. Chỉ đánh dấu goal là đã đạt khi kiểm tra cho thấy goal thực sự đã được hoàn thành và không còn công việc cần thiết nào.”

Khi số token gần chạm giới hạn, một mẫu thứ hai — budget_limit.md — sẽ được chèn vào:

“Goal đã chạm giới hạn token. Đừng bắt đầu công việc mới đáng kể. Hãy kết thúc lượt này sớm nhất có thể: tóm tắt tiến độ hữu ích, nêu công việc còn lại và các trở ngại, đồng thời để lại cho người dùng bước tiếp theo rõ ràng.”

Logic giống nhau: “đừng nói dối về những gì bạn đã làm”. Chỉ tiếp tục khi goal thực sự chưa đạt. budget_limit yêu cầu dừng lại, nhưng phải mô tả trung thực những gì còn dang dở.

Không như Claude, Codex gắn goal với thread chứ không phải phiên. Ví dụ: bạn có thể đóng terminal rồi mở lại vào buổi sáng, và /goal resume tiếp tục đúng goal đó cùng những thông tin trong bộ nhớ. Điều này hữu ích khi bạn chia lần chạy thành từng chặng theo lịch của mình.

/goal trong Claude Code khác /goal trong Codex như thế nào?

Điểm chính

Claude tách người viết và người phán xét: mô hình chính viết mã, còn một mô hình nhỏ riêng biệt làm nhiệm vụ đánh giá. Codex chỉ có một tác nhân tự kiểm tra công việc của mình — nó tự nhắc “đừng nói dối về những gì mình đã làm”. Hai kiến trúc khác nhau, nhưng nguy cơ lặp vòng thì như nhau.

Đây là điểm khác biệt thường bị bỏ qua nhất khi so sánh, vậy hãy cùng xem xét kỹ.

Khía cạnhClaude Code /goalCodex /goal
Phát hànhv2.1.139, ngày 11 tháng 5 năm 2026v0.128.0, ngày 30 tháng 4 năm 2026 (thử nghiệm) → v0.133.0 / 26.519, ngày 21 tháng 5 năm 2026 (ổn định)
Phạm vi goalPhiênThread (vẫn tồn tại sau khi khởi động lại)
Điều khiểnset, clear (+ bí danh)set, view, pause, resume, edit, clear
Ai kiểm tra xem đã “xong” chưaMô hình riêng biệt (mặc định là Haiku)Chính tác nhân đó, thông qua prompt được chèn vào
Quyền truy cập tệp của bộ đánh giáKhông; chỉ đánh giá dựa trên văn bản hội thoạiCó; có thể kiểm tra tệp, bài kiểm thử và log
Ngân sáchTrong văn bản điều kiện: “hoặc dừng sau 20 lượt”Giới hạn token tích hợp + tự động chèn budget_limit.md
Giới hạn chi tiêu cứngKhông có; chỉ giới hạn của gói đăng kýKhông có; chỉ giới hạn của gói đăng ký
Độ dài điều kiệnTối đa 4.000 ký tựKhông được nêu rõ
Nơi hoạt độngChế độ tương tác, -p, ứng dụng desktop, Remote ControlỨng dụng, tiện ích IDE, CLI, ứng dụng khách ACP

Khác biệt về khái niệm là Claude xem vòng lặp như một hợp đồng chất lượng (có bộ đánh giá bên ngoài), còn Codex xem nó như một cơ chế thực thi (tác nhân tự quản lý).

Trên thực tế: nếu muốn tiêu chí “hoàn thành” được đánh giá khách quan, hãy chọn Claude. Nếu muốn tác nhân có thể kiểm tra tệp và log khi đánh giá, hãy chọn Codex.

Đọc thêm về bản thân các công cụ trong hướng dẫn so sánh Codex và Claude Code.

Ví dụ thực tế: Di trú từ Pydantic v1 sang v2 trong 31 giờ

Điểm chính

Codex /goal đã hoàn thành việc di trú 14.000 dòng mã của một dịch vụ nội bộ từ Pydantic v1 sang v2 trong 31 giờ thực tế, chia thành bốn phiên. Chi phí khoảng $44 với gpt-5.3-codex.

Nhiệm vụ được đặt ra như sau: “di trú từ Pydantic v1 sang v2, tất cả bài kiểm thử pytest phải chạy qua, và mypy strict phải báo cáo không có lỗi.”

Chuyện đã diễn ra như sau:

  • Phiên 1 (8 giờ) — Codex phân tích imports, viết lại các khai báo BaseModel và thiết lập mypy
  • Phiên 2 (10 giờ) — viết lại validators và làm hỏng khoảng 200 bài kiểm thử
  • Phiên 3 (7 giờ) — sửa các bài kiểm thử và phát hiện dependency vòng
  • Phiên 4 (6 giờ) — xử lý các lỗi mypy và hồi quy còn lại

Chi phí token:

“Tổng thời gian tính theo đồng hồ: khoảng 31 giờ trong bốn phiên. Tổng chi phí token Codex theo mức giá của gpt-5.3-codex: khoảng $44.”

Phần lớn chi phí đến từ token đầu ra của gpt-5.3-codex, với mức giá $14 cho mỗi triệu token. Điều đó có nghĩa 31 giờ làm việc tự động có chi phí xấp xỉ nhiều tuần đăng ký ChatGPT Plus.

Những việc tác nhân không tự làm:

  • Không viết tài liệu di trú cho nhóm (Codex không hiểu việc này là một phần của “di trú”)
  • Không cập nhật các tệp cấu hình để phát hành với phiên bản Pydantic mới
  • Bỏ sót một hồi quy production, chỉ được phát hiện một ngày sau đó

Nói cách khác, /goal làm 95% công việc; 5% còn lại vẫn phải làm thủ công. Điều đó là bình thường với thế hệ hiện tại và không phải lý do để không sử dụng nó.

14 giờ làm việc xuyên đêm với driver macOS

Các tác vụ phù hợp với những lần chạy dài qua đêm

Điểm chính

Driver là loại tác vụ không phù hợp với cách làm việc tương tác, nhưng lại rất thích hợp với các vòng lặp chạy dài.

Các loại tác vụ mà cách làm này mang lại lợi ích lớn nhất:

  • Công việc mức thấp, trong đó một vòng lặp và bước kiểm tra chỉ mất vài phút (biên dịch, chạy kiểm thử)
  • Di trú có tiêu chí chính thức rõ ràng (types, tests, lint)
  • Đo điểm chuẩn và tối ưu hóa có kết quả đo lường được
  • Tài liệu và changelog có cấu trúc rõ ràng

/goal của Claude cũng làm tốt những việc tương tự, nhưng Codex thường được chọn cho driver vì nó tự kiểm tra tệp và log thay vì dựa vào một người phán xét bên ngoài.

Chi phí là bao nhiêu và làm sao tránh đốt hết token qua đêm?

Điểm chính

/goal không có mức trần chi tiêu tối đa cố định — chỉ có giới hạn của gói bạn đang dùng. Một giờ Codex chạy thực tế tốn khoảng $1.50–$3 với gpt-5.3-codex. Claude tốn nhiều hơn để chạy nhưng ít hơn để đánh giá. Biện pháp bảo vệ duy nhất là ghi “hoặc dừng sau N lượt” ngay trong điều kiện.

Số liệu từ các báo cáo công khai:

Lần chạyThời lượngTokenChi phí
Bản demo công cụ thiết kế của OpenAI25 giờ13M(lần chạy nội bộ)
Pydantic v1→v231 giờ, 4 phiên~3.1M đầu ra~$44
Hệ thống phỏng vấn bằng giọng nóiTổng cộng 6 giờ 44 phút (41 phút tính toán)6,8 triệu đầu vào, 94% được cache-
Kiểm thử smoke test phông chữ5 phút188,832dưới 5% hạn mức tuần

Điều quan trọng cần hiểu là Claude Code và Codex đều không cung cấp giới hạn cứng kiểu “dừng chi tiêu khi đạt $N”. Có ba biện pháp bảo vệ:

  1. Giới hạn gói đăng ký — Pro, Max hoặc Enterprise. Với gói Max của Anthropic ($100/tháng), một lần chạy 14 giờ qua đêm vẫn nằm trong hạn mức tuần và còn dư
  2. Giới hạn văn bản trong điều kiện — ghi thẳng “hoặc dừng sau 20 lượt” vào /goal. Bộ đánh giá của Claude sẽ đọc điều này và đóng goal
  3. Giới hạn token trong Codex — cơ chế tích hợp sẽ chèn budget_limit.md khi hết token

Những gì khiến hóa đơn tăng cao qua đêm:

  • Tiêu chí mơ hồ như “làm cho tiện hơn” — tác nhân sẽ không bao giờ dừng vì bộ đánh giá không biết “tốt hơn” nghĩa là gì
  • Truy cập các API bên ngoài mà không có stub — mỗi lần thử lại đều tốn token
  • Ngữ cảnh dài — sau 6.7M token, quá trình nén ngữ cảnh bắt đầu và một phần bộ nhớ bị mất

Đọc thêm về cách tiết kiệm chi phí trong các hướng dẫn token của Claude Code được dùng vào đâu và cách không dùng hết hạn mức.

Khi nào KHÔNG nên chạy /goal: 5 tình huống

Điểm chính

Tiêu chí mơ hồ như “làm cho đẹp”, chỉnh sửa một dòng, cơ sở dữ liệu production chứa dữ liệu người dùng, thay đổi quan trọng đối với bảo mật và tác vụ có dependency bên ngoài không rõ ràng. Trong cả năm tình huống này, tác nhân hoặc sẽ mắc kẹt trong vòng lặp, hoặc đốt token vô ích.

Tài liệu của OpenAI nói rõ những việc KHÔNG nên làm:

  1. Chỉnh sửa một dòng — chạy /goal để đổi tên một biến tốn kém hơn làm thủ công
  2. Goal mơ hồ — “cải thiện hiệu suất”, “làm mã sạch hơn”, “làm cho tiện hơn”. Bộ đánh giá không có tiêu chí, vì vậy tác nhân sẽ quay vòng mãi
  3. Cơ sở dữ liệu production có dữ liệu người dùng — tác nhân có thể làm hỏng quá trình di trú, và khôi phục từ bản sao lưu tốn kém hơn mọi khoản tiết kiệm
  4. Thay đổi bảo mật — xác thực, mã hóa, xử lý thanh toán. Trong những trường hợp này, một người cần xem lại mọi commit
  5. API bên ngoài không có stub — mỗi lỗi mạng đều tốn token và nằm ngoài tầm kiểm soát của bạn

Nên làm gì nếu tác nhân bị mắc kẹt?

Điểm chính

Dấu hiệu của một vòng lặp là tác nhân chỉnh sửa cùng một chỗ trong 3–4 lượt rồi hoàn tác. Ngắt nó bằng Ctrl+C, kiểm tra log, sau đó làm tiêu chí nghiêm ngặt hơn hoặc thu hẹp nhiệm vụ vào một phần. Trong Claude, /goal clear sẽ hữu ích; trong Codex, hãy dùng /goal pause rồi sửa điều kiện.

Cách nhận biết nhanh một vòng lặp:

  • Tác nhân chạm vào cùng các tệp trong 3+ lượt rồi đưa chúng về trạng thái trước đó
  • Log liên tục ghi nhận các lỗi mà tác nhân đã phản hồi trước đây
  • Theo bạn, điều kiện đã được đáp ứng nhưng tác nhân lại nói “chưa đạt”
  • Mức dùng token mỗi lượt tăng lên nhưng mã không có tiến triển

Tiếp theo nên làm gì:

  • Trong Claude Code: chạy /goal clear, sau đó làm điều kiện cụ thể hơn
  • Trong Codex: chạy /goal pause, kiểm tra thread hiện tại, sửa điều kiện bằng /goal edit, rồi chạy /goal resume
  • Với cả hai: kiểm tra xem tiêu chí có thực sự xác minh được không (một lệnh trả về exit 0 hoặc tạo ra đầu ra cụ thể)

Thường thì nguyên nhân của vòng lặp nằm ở chính nhiệm vụ, chứ không phải tác nhân. Điều kiện “tất cả bài kiểm thử đều đạt” giả định rằng ngay từ đầu các bài kiểm thử có thể đạt. Nếu có vấn đề kiến trúc sâu trong mã, tác nhân sẽ tiếp tục xoay quanh triệu chứng.

Tiêu chí “hoàn thành”: Kỷ luật nhiệm vụ cho /goal

Điểm chính

Tiêu chí tốt là một lệnh trả về exit 0 hoặc đầu ra cụ thể. “Tất cả bài kiểm thử đều đạt” là tiêu chí tốt. “Mã sạch hơn” thì không. Tốt nhất là kết hợp một bước kiểm tra chính thức với một chỉ số đo lường được — ví dụ, kiểm thử cộng với mức độ bao phủ tối thiểu.

OpenAI nêu rõ quy tắc này trong Codex Cookbook chính thức:

Goal không được xem là hoàn thành chỉ vì mô hình nghĩ rằng nó đã hoàn thành. Goal chỉ hoàn thành khi kết quả đã được kiểm tra bằng các tệp, bài kiểm thử, log, điểm chuẩn hoặc những sản phẩm cụ thể khác.

— OpenAI Codex Cookbook, Sử dụng Goals trong Codex, https://developers.openai.com/cookbook/examples/codex/using_goals_in_codex

Các mẫu tiêu chí thực sự hiệu quả:

Loại tiêu chíCách diễn đạt
Kiểm thử“pytest tests/ trả về exit 0 và coverage tối thiểu 80%”
Types“mypy strict báo cáo không có lỗi trên src/”
Lint“eslint . trả về exit 0 trên tất cả các tệp đã thay đổi”
Build“npm run build hoàn tất thành công, không có lỗi TypeScript”
Benchmark“k6 run perf test cho thấy p95 dưới 200 ms”
Diff“git diff chỉ hiển thị thay đổi trong các tệp X, Y, Z”
Kết hợp“pytest đạt AND mypy strict báo cáo không có lỗi AND ruff check đạt”

Ví dụ kết hợp các tiêu chí: kiểm thử, mypy và lint. Chỉ cần một bước kiểm tra còn không đạt thì goal chưa được đóng. Bộ đánh giá không có cơ hội gian lận.

Các mẫu cần tránh:

  • “Mã tốt hơn”
  • “Khả năng sử dụng đã cải thiện”
  • “Hiệu suất đã cải thiện”
  • “Tài liệu đã đầy đủ”

Khác biệt giữa “hoạt động” và “không hoạt động” nằm ở khả năng xác minh. Nếu không thể kiểm tra tiêu chí bằng một lệnh, thì hoàn toàn không thể kiểm tra tiêu chí đó. Đây cũng là ý OpenAI muốn nói với cụm từ “tính nhất quán trên chặng dài”: tác nhân có thể suy nghĩ trong thời gian dài, nhưng không thể tự quyết định thế nào là “đủ tốt”.

Bạn có thể thử ý tưởng “một prompt — một kết quả” trên dự án thật: đặt /goal, xác định tiêu chí, chạy rồi phân tích điều gì đã sai.

Tìm hiểu về Ailoot.

Xem thêm chi tiết

Câu hỏi thường gặp

Tiêu chí hoàn thành /goal hữu ích là gì?

Nêu kết quả kiểm tra được: kiểm thử, type check, build hoặc benchmark và kết quả cần đạt. Kết hợp rõ các kiểm tra và phạm vi tệp được phép; «làm tốt hơn» không cho điểm dừng đo được.

Làm gì khi tác nhân lặp cùng sửa thất bại?

Ngắt chạy và xem log. Nếu cứ chạm rồi hoàn tác cùng tệp, thu hẹp việc hoặc làm tiêu chí cụ thể hơn; xác minh kiểm tra yêu cầu thực sự có thể đạt trước khi tiếp tục.

Tất cả bài viết