Bỏ qua để đến nội dung

Chạy prompt theo lịch

Bài viết được dịch tự động từ bài viết gốc, chưa được kiểm tra lại bởi con người. Chỉ những bài viết có dấu tick xanh cạnh tiêu đề là đã được kiểm tra.

Scheduled task cho phép Claude tự chạy lại một prompt theo chu kỳ. Dùng để poll một deployment, theo dõi PR, kiểm tra lại build đang chạy lâu, hay tự nhắc mình làm gì đó sau trong phiên. Muốn phản ứng theo sự kiện thay vì poll, xem Channels - CI có thể đẩy lỗi thẳng vào phiên. Muốn phiên tiếp tục làm việc từng lượt cho đến khi đạt điều kiện thay vì theo chu kỳ thời gian, xem /goal.

Task gắn với phiên hiện tại: sống trong hội thoại đang mở và dừng khi bạn bắt đầu hội thoại mới. Resume bằng --resume hoặc --continue sẽ khôi phục lại task chưa hết hạn (task lặp lại tạo trong 7 ngày gần nhất, hoặc task một lần chưa tới giờ chạy). Muốn lập lịch độc lập với phiên, dùng Routines (chạy trên hạ tầng Anthropic), Desktop scheduled task, hoặc GitHub Actions.

Cloud (Routines)Desktop/loop
Chạy trênCloud của AnthropicMáy bạnMáy bạn
Cần máy bậtKhông
Cần phiên đang mởKhôngKhông
Bền vững qua restartKhôi phục khi --resume nếu chưa hết hạn
Truy cập file cục bộKhông (clone mới)
MCP serverConnector cấu hình theo từng taskFile config và connectorKế thừa từ phiên
Permission promptKhông (chạy tự động)Cấu hình theo từng taskKế thừa từ phiên
Lịch tuỳ chỉnhQua /schedule trong CLI
Chu kỳ tối thiểu1 giờ1 phút1 phút

/loop là skill đóng gói sẵn, cách nhanh nhất để chạy lặp một prompt trong khi phiên vẫn mở. Cả interval lẫn prompt đều tuỳ chọn, tuỳ bạn cung cấp gì mà loop hoạt động khác nhau:

Bạn cung cấpVí dụĐiều gì xảy ra
Interval + prompt/loop 5m check the deployPrompt chạy theo lịch cố định
Chỉ prompt/loop check the deployPrompt chạy theo interval do Claude tự chọn mỗi lần lặp
Chỉ interval, hoặc không có gì/loopChạy prompt bảo trì mặc định, hoặc loop.md nếu có

Bạn cũng có thể truyền một skill làm prompt, ví dụ /loop 20m /review-pr 1234, để lặp lại skill đó mỗi vòng.

Khi bạn cung cấp interval, Claude chuyển nó thành biểu thức cron, lên lịch job, và xác nhận chu kỳ cùng job ID.

/loop 5m check if the deployment finished and tell me what happened

Interval có thể đứng trước prompt (30m) hoặc sau như một mệnh đề (every 2 hours). Đơn vị hỗ trợ: s (giây), m (phút), h (giờ), d (ngày). Giây được làm tròn lên phút gần nhất vì cron chỉ có độ chi tiết theo phút. Interval không khớp bước cron sạch (như 7m hay 90m) sẽ được làm tròn về interval gần nhất và Claude cho bạn biết đã chọn gì.

Khi bỏ trống interval, Claude chọn động thay vì chạy theo lịch cố định. Sau mỗi vòng, Claude chọn độ trễ từ 1 phút đến 1 giờ dựa trên những gì quan sát được - chờ ngắn khi build sắp xong hay PR đang hoạt động, chờ dài hơn khi không có gì đang chờ. Độ trễ và lý do được in ra cuối mỗi vòng.

/loop check whether CI passed and address any review comments

Khi yêu cầu lịch động, Claude có thể dùng trực tiếp Monitor tool - chạy script nền và stream từng dòng output, tránh việc phải poll và thường tiết kiệm token hơn.

Loop lịch động cũng xuất hiện trong danh sách scheduled task như bình thường. Quy tắc jitter không áp dụng cho nó, nhưng thời hạn 7 ngày vẫn áp dụng.

Khi bỏ trống cả prompt, Claude dùng prompt bảo trì có sẵn. Mỗi vòng, Claude lần lượt: tiếp tục việc dang dở trong hội thoại → chăm sóc PR của branch hiện tại (review comment, CI fail, merge conflict) → chạy các đợt dọn dẹp (tìm bug, đơn giản hoá) khi không còn việc gì khác. Claude không tự khởi xướng việc mới ngoài phạm vi này, và hành động không thể hoàn tác (như push hay xoá) chỉ thực hiện khi tiếp nối việc transcript đã cho phép.

/loop

/loop trơn chạy prompt này theo interval động. Thêm interval, ví dụ /loop 15m, để chạy cố định. Muốn thay prompt mặc định bằng của riêng bạn, xem phần loop.md bên dưới.

File loop.md thay thế prompt bảo trì mặc định bằng chỉ dẫn của riêng bạn. Nó định nghĩa một prompt mặc định duy nhất cho /loop trơn, không phải danh sách nhiều task, và bị bỏ qua khi bạn cung cấp prompt trực tiếp trên dòng lệnh.

Claude tìm file ở hai vị trí, dùng cái đầu tiên tìm thấy:

Đường dẫnPhạm vi
.claude/loop.mdCấp dự án, ưu tiên hơn nếu cả hai cùng tồn tại
~/.claude/loop.mdCấp user, áp dụng cho mọi dự án không có file riêng

File là Markdown thuần, không cần cấu trúc bắt buộc. Viết như thể bạn đang gõ trực tiếp prompt cho /loop:

.claude/loop.md
Check the `release/next` PR. If CI is red, pull the failing job log,
diagnose, and push a minimal fix. If new review comments have arrived,
address each one and resolve the thread. If everything is green and
quiet, say so in one line.

Chỉnh sửa loop.md có hiệu lực từ vòng lặp kế tiếp. Khi không có loop.md ở đâu cả, loop dùng lại prompt bảo trì mặc định. Giữ file ngắn gọn - nội dung vượt quá 25.000 byte sẽ bị cắt.

Muốn dừng /loop khi đang chờ vòng kế tiếp, nhấn Esc - thao tác này xoá lần đánh thức đang chờ nên loop không chạy lại nữa. Task lên lịch bằng cách hỏi trực tiếp Claude không bị ảnh hưởng bởi Esc, vẫn giữ nguyên đến khi bạn xoá.

Ở chế độ tự chọn interval, Claude cũng có thể tự kết thúc loop khi thấy việc đã xong, bằng cách gọi tool ScheduleWakeup với stop: true. Nếu một vòng kết thúc mà không lên lịch lại cũng không dừng, Claude Code tự đặt một lần đánh thức dự phòng sau khoảng 20 phút và kết thúc loop nếu vòng đó cũng không lên lịch lại.

Loop theo lịch cố định chạy đến khi bạn dừng hoặc hết 7 ngày.

Với nhắc nhở một lần, mô tả bằng ngôn ngữ tự nhiên thay vì dùng /loop. Claude lên lịch một task chạy một lần rồi tự xoá.

remind me at 3pm to push the release branch
in 45 minutes, check whether the integration tests passed

Claude ghim giờ chạy vào đúng phút bằng biểu thức cron và xác nhận thời điểm sẽ chạy.

Hỏi Claude bằng ngôn ngữ tự nhiên để liệt kê hoặc huỷ task:

what scheduled tasks do I have?
cancel the deploy check job

Bên dưới, Claude dùng các tool sau:

ToolMục đích
CronCreateLên lịch task mới. Nhận biểu thức cron 5 trường, prompt, và có lặp lại hay chỉ chạy một lần
CronListLiệt kê mọi task đang lên lịch cùng ID, lịch, prompt
CronDeleteHuỷ task theo ID

Mỗi task có ID 8 ký tự để truyền cho CronDelete. Một phiên chứa tối đa 50 task cùng lúc.

Bộ lập lịch kiểm tra mỗi giây xem có task nào đến hạn và đưa vào hàng đợi ưu tiên thấp. Prompt lên lịch chạy giữa các lượt của bạn, không chạy khi Claude đang trả lời dở. Nếu Claude đang bận khi task đến hạn, prompt chờ đến khi lượt hiện tại kết thúc.

Mọi thời gian được hiểu theo múi giờ địa phương của bạn. Biểu thức cron như 0 9 * * * nghĩa là 9 giờ sáng nơi bạn chạy Claude Code, không phải UTC.

Để tránh mọi phiên gọi API cùng một thời điểm, bộ lập lịch thêm một độ lệch xác định vào giờ chạy:

  • Task lặp lại chạy trễ tối đa 30 phút so với lịch (hoặc tối đa nửa chu kỳ, với task chạy thường xuyên hơn mỗi giờ)
  • Task một lần đặt vào đúng giờ hoặc nửa giờ chạy sớm tối đa 90 giây

Độ lệch được suy ra từ ID task, nên cùng một task luôn nhận cùng độ lệch. Nếu cần chính xác về thời gian, chọn phút không phải :00 hay :30, ví dụ 3 9 * * * thay vì 0 9 * * *.

Task lặp lại tự động hết hạn 7 ngày sau khi tạo - chạy lần cuối rồi tự xoá. Điều này giới hạn thời gian một loop bị quên có thể chạy. Nếu cần task lặp lại tồn tại lâu hơn, huỷ và tạo lại trước khi hết hạn, hoặc dùng Routines/Desktop scheduled task.

CronCreate nhận biểu thức cron 5 trường chuẩn: phút giờ ngày-trong-tháng tháng ngày-trong-tuần. Hỗ trợ wildcard (*), giá trị đơn (5), bước (*/15), khoảng (1-5), danh sách phân tách bằng dấu phẩy (1,15,30).

Ví dụÝ nghĩa
*/5 * * * *Mỗi 5 phút
0 * * * *Đầu mỗi giờ
7 * * * *Phút thứ 7 mỗi giờ
0 9 * * *9 giờ sáng mỗi ngày theo giờ địa phương
0 9 * * 1-59 giờ sáng các ngày trong tuần
30 14 15 3 *14:30 ngày 15 tháng 3

Ngày-trong-tuần dùng 0 hoặc 7 cho Chủ nhật, 6 cho thứ Bảy. Cú pháp mở rộng như L, W, ?, hay tên viết tắt (MON, JAN) không được hỗ trợ. Khi cả ngày-trong-tháng và ngày-trong-tuần đều bị ràng buộc, một ngày khớp nếu một trong hai trường khớp (theo ngữ nghĩa vixie-cron chuẩn).

Đặt CLAUDE_CODE_DISABLE_CRON=1 trong môi trường để tắt hoàn toàn bộ lập lịch. Các tool cron và /loop không còn khả dụng, và task đã lên lịch ngừng chạy.

Lập lịch gắn với phiên có một số giới hạn cố hữu:

  • Task chỉ chạy khi Claude Code đang chạy và rảnh. Đóng terminal hay để phiên thoát sẽ dừng chúng lại. Đưa phiên vào chạy nền vẫn giữ task /loop chạy tiếp.
  • Không có “catch-up” cho lần chạy bị lỡ - nếu giờ chạy trôi qua khi Claude đang bận, task chỉ chạy một lần khi Claude rảnh, không chạy bù từng lần đã lỡ.
  • Bắt đầu hội thoại mới xoá mọi task gắn phiên. Resume bằng --resume/--continue khôi phục task chưa hết hạn. Bash và monitor chạy nền không bao giờ được khôi phục khi resume.
  • Claude Code lưu danh sách scheduled task trong thư mục .claude của dự án; việc lên lịch sẽ báo lỗi nếu thư mục đó, hoặc file task bên trong, là một symlink.

Với tự động hoá cần chạy không giám sát dựa trên cron:

  • Routines: chạy trên hạ tầng Anthropic theo lịch, qua API call, hoặc theo sự kiện GitHub
  • GitHub Actions: dùng trigger schedule trong CI
  • Desktop scheduled task: chạy cục bộ trên máy bạn