Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Heartbeat và Cron? Xem Tự động hóa & tác vụ để biết hướng dẫn về thời điểm nên dùng từng loại.
Bắt đầu nhanh (người mới)
Chọn nhịp chạy
Giữ Heartbeat được bật (mặc định là
30m, hoặc 1h cho xác thực Anthropic OAuth/token, bao gồm tái sử dụng Claude CLI) hoặc đặt nhịp riêng của bạn.Thêm HEARTBEAT.md (tùy chọn)
Tạo một danh sách kiểm tra
HEARTBEAT.md nhỏ hoặc khối tasks: trong không gian làm việc của agent.Quyết định nơi gửi thông báo Heartbeat
target: "none" là mặc định; đặt target: "last" để định tuyến tới liên hệ gần nhất.Mặc định
- Khoảng thời gian:
30m(hoặc1hkhi chế độ xác thực được phát hiện là Anthropic OAuth/token, bao gồm tái sử dụng Claude CLI). Đặtagents.defaults.heartbeat.everyhoặcagents.list[].heartbeat.everycho từng agent; dùng0mđể tắt. - Nội dung lời nhắc (có thể cấu hình qua
agents.defaults.heartbeat.prompt):Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK. - Lời nhắc Heartbeat được gửi nguyên văn dưới dạng thông báo người dùng. Lời nhắc hệ thống chỉ bao gồm phần “Heartbeat” khi Heartbeat được bật cho agent mặc định, và lượt chạy được đánh dấu nội bộ.
- Khi Heartbeat bị tắt bằng
0m, các lượt chạy bình thường cũng bỏ quaHEARTBEAT.mdkhỏi ngữ cảnh khởi động để mô hình không thấy các chỉ dẫn chỉ dành cho Heartbeat. - Giờ hoạt động (
heartbeat.activeHours) được kiểm tra theo múi giờ đã cấu hình. Ngoài khung giờ đó, Heartbeat bị bỏ qua cho đến tick tiếp theo nằm trong khung giờ. - Heartbeat tự động hoãn trong khi công việc cron đang hoạt động hoặc đang xếp hàng. Đặt
heartbeat.skipWhenBusy: trueđể cũng hoãn trên các làn bận bổ sung (agent phụ hoặc công việc lệnh lồng nhau); điều này hữu ích cho Ollama cục bộ và các máy chủ runtime đơn bị hạn chế khác.
Lời nhắc Heartbeat dùng để làm gì
Lời nhắc mặc định được cố ý để rộng:- Tác vụ nền: “Xem xét các tác vụ còn tồn đọng” nhắc agent xem lại các mục cần theo dõi (hộp thư đến, lịch, lời nhắc, công việc đang xếp hàng) và hiển thị bất kỳ điều gì khẩn cấp.
- Kiểm tra với con người: “Thỉnh thoảng hỏi thăm con người của bạn trong giờ ban ngày” nhắc một thông báo nhẹ kiểu “bạn cần gì không?” thỉnh thoảng, nhưng tránh làm phiền ban đêm bằng cách dùng múi giờ địa phương đã cấu hình của bạn (xem Múi giờ).
agents.defaults.heartbeat.prompt (hoặc agents.list[].heartbeat.prompt) thành nội dung tùy chỉnh (được gửi nguyên văn).
Hợp đồng phản hồi
- Nếu không có gì cần chú ý, trả lời bằng
HEARTBEAT_OK. - Trong các lượt chạy Heartbeat, OpenClaw coi
HEARTBEAT_OKlà xác nhận khi nó xuất hiện ở đầu hoặc cuối câu trả lời. Token này bị loại bỏ và câu trả lời bị bỏ nếu phần nội dung còn lại ≤ackMaxChars(mặc định: 300). - Nếu
HEARTBEAT_OKxuất hiện ở giữa câu trả lời, nó không được xử lý đặc biệt. - Đối với cảnh báo, không bao gồm
HEARTBEAT_OK; chỉ trả về văn bản cảnh báo.
HEARTBEAT_OK lạc chỗ ở đầu/cuối thông báo sẽ bị loại bỏ và ghi log; thông báo chỉ có HEARTBEAT_OK sẽ bị bỏ.
Cấu hình
Phạm vi và thứ tự ưu tiên
agents.defaults.heartbeatđặt hành vi Heartbeat toàn cục.agents.list[].heartbeathợp nhất lên trên; nếu bất kỳ agent nào có khốiheartbeat, chỉ các agent đó chạy Heartbeat.channels.defaults.heartbeatđặt mặc định hiển thị cho tất cả kênh.channels.<channel>.heartbeatghi đè mặc định của kênh.channels.<channel>.accounts.<id>.heartbeat(kênh nhiều tài khoản) ghi đè cài đặt theo kênh.
Heartbeat theo từng agent
Nếu bất kỳ mụcagents.list[] nào có khối heartbeat, chỉ những agent đó chạy Heartbeat. Khối theo từng agent được hợp nhất trên agents.defaults.heartbeat (vì vậy bạn có thể đặt mặc định dùng chung một lần và ghi đè theo từng agent).
Ví dụ: hai agent, chỉ agent thứ hai chạy Heartbeat.
Ví dụ về giờ hoạt động
Giới hạn Heartbeat trong giờ làm việc theo một múi giờ cụ thể:Thiết lập 24/7
Nếu bạn muốn Heartbeat chạy cả ngày, hãy dùng một trong các mẫu sau:- Bỏ hẳn
activeHours(không có giới hạn khung thời gian; đây là hành vi mặc định). - Đặt khung thời gian cả ngày:
activeHours: { start: "00:00", end: "24:00" }.
Ví dụ nhiều tài khoản
Sử dụngaccountId để nhắm đến một tài khoản cụ thể trên các kênh nhiều tài khoản như Telegram:
Ghi chú trường
Khoảng thời gian Heartbeat (chuỗi thời lượng; đơn vị mặc định = phút).
Ghi đè mô hình tùy chọn cho các lần chạy Heartbeat (
provider/model).Khi bật, cũng gửi thông báo
Reasoning: riêng khi có sẵn (cùng cấu trúc với /reasoning on).Khi là true, các lần chạy Heartbeat dùng ngữ cảnh khởi động nhẹ và chỉ giữ
HEARTBEAT.md từ các tệp khởi động workspace.Khi là true, mỗi Heartbeat chạy trong một phiên mới không có lịch sử hội thoại trước đó. Sử dụng cùng mẫu cô lập như cron
sessionTarget: "isolated". Giảm đáng kể chi phí token cho mỗi Heartbeat. Kết hợp với lightContext: true để tiết kiệm tối đa. Định tuyến gửi vẫn dùng ngữ cảnh phiên chính.Khi là true, các lần chạy Heartbeat sẽ trì hoãn trên các làn bận bổ sung: công việc subagent hoặc lệnh lồng nhau. Các làn Cron luôn trì hoãn Heartbeat, ngay cả khi không có cờ này, để máy chủ mô hình cục bộ không chạy lời nhắc Cron và Heartbeat cùng lúc.
last: gửi đến kênh bên ngoài được dùng gần nhất.- kênh rõ ràng: bất kỳ kênh hoặc id plugin nào đã cấu hình, ví dụ
discord,matrix,telegram, hoặcwhatsapp. none(mặc định): chạy Heartbeat nhưng không gửi ra bên ngoài.
Kiểm soát hành vi gửi trực tiếp/DM.
allow: cho phép gửi Heartbeat trực tiếp/DM. block: chặn gửi trực tiếp/DM (reason=dm-blocked).Ghi đè người nhận tùy chọn (id theo kênh, ví dụ E.164 cho WhatsApp hoặc id cuộc trò chuyện Telegram). Với chủ đề/luồng Telegram, dùng
<chatId>:topic:<messageThreadId>.Id tài khoản tùy chọn cho các kênh nhiều tài khoản. Khi
target: "last", id tài khoản áp dụng cho kênh gần nhất đã phân giải nếu kênh đó hỗ trợ tài khoản; nếu không thì bị bỏ qua. Nếu id tài khoản không khớp với tài khoản đã cấu hình cho kênh đã phân giải, việc gửi sẽ bị bỏ qua.Ghi đè nội dung lời nhắc mặc định (không hợp nhất).
Số ký tự tối đa được phép sau
HEARTBEAT_OK trước khi gửi.Khi là true, sẽ ẩn các payload cảnh báo lỗi công cụ trong các lần chạy Heartbeat.
Giới hạn các lần chạy Heartbeat trong một khung thời gian. Đối tượng có
start (HH:MM, bao gồm; dùng 00:00 cho đầu ngày), end (HH:MM không bao gồm; cho phép 24:00 cho cuối ngày), và timezone tùy chọn.- Bị bỏ qua hoặc
"user": dùngagents.defaults.userTimezonecủa bạn nếu được đặt, nếu không thì dùng múi giờ hệ thống máy chủ. "local": luôn dùng múi giờ hệ thống máy chủ.- Bất kỳ mã định danh IANA nào (ví dụ
America/New_York): được dùng trực tiếp; nếu không hợp lệ, quay về hành vi"user"ở trên. startvàendkhông được bằng nhau đối với một cửa sổ hoạt động; các giá trị bằng nhau được xem là độ rộng bằng không (luôn ở ngoài cửa sổ).- Ngoài cửa sổ hoạt động, Heartbeat bị bỏ qua cho đến tick tiếp theo nằm trong cửa sổ.
Hành vi phân phối
Định tuyến phiên và đích
Định tuyến phiên và đích
- Heartbeat chạy trong phiên chính của tác tử theo mặc định (
agent:<id>:<mainKey>), hoặcglobalkhisession.scope = "global". Đặtsessionđể ghi đè sang một phiên kênh cụ thể (Discord/WhatsApp/v.v.). sessionchỉ ảnh hưởng đến ngữ cảnh chạy; việc phân phối được kiểm soát bởitargetvàto.- Để phân phối đến một kênh/người nhận cụ thể, đặt
target+to. Vớitarget: "last", việc phân phối dùng kênh bên ngoài cuối cùng cho phiên đó. - Các lượt phân phối Heartbeat cho phép đích trực tiếp/DM theo mặc định. Đặt
directPolicy: "block"để chặn gửi đến đích trực tiếp trong khi vẫn chạy lượt Heartbeat. - Nếu hàng đợi chính, lane phiên đích, lane Cron, hoặc một tác vụ Cron đang hoạt động bận, Heartbeat sẽ bị bỏ qua và thử lại sau.
- Nếu
skipWhenBusy: true, các lane tác tử con và lane lồng nhau cũng trì hoãn các lần chạy Heartbeat. - Nếu
targetkhông phân giải được đích bên ngoài nào, lượt chạy vẫn diễn ra nhưng không có tin nhắn đi nào được gửi.
Khả năng hiển thị và hành vi bỏ qua
Khả năng hiển thị và hành vi bỏ qua
- Nếu
showOk,showAlerts, vàuseIndicatorđều bị tắt, lượt chạy bị bỏ qua ngay từ đầu vớireason=alerts-disabled. - Nếu chỉ tắt phân phối cảnh báo, OpenClaw vẫn có thể chạy Heartbeat, cập nhật dấu thời gian tác vụ đến hạn, khôi phục dấu thời gian nhàn rỗi của phiên, và ẩn payload cảnh báo gửi ra ngoài.
- Nếu đích Heartbeat đã phân giải hỗ trợ trạng thái đang nhập, OpenClaw hiển thị đang nhập trong khi lượt chạy Heartbeat đang hoạt động. Trạng thái này dùng cùng đích mà Heartbeat sẽ gửi đầu ra trò chuyện đến, và bị tắt bởi
typingMode: "never".
Vòng đời phiên và kiểm toán
Vòng đời phiên và kiểm toán
- Các phản hồi chỉ dành cho Heartbeat không giữ phiên tiếp tục hoạt động. Siêu dữ liệu Heartbeat có thể cập nhật hàng phiên, nhưng hết hạn do nhàn rỗi dùng
lastInteractionAttừ tin nhắn người dùng/kênh thật cuối cùng, và hết hạn hằng ngày dùngsessionStartedAt. - Lịch sử Control UI và WebChat ẩn các prompt Heartbeat và xác nhận chỉ OK. Bản ghi phiên bên dưới vẫn có thể chứa các lượt đó để kiểm toán/phát lại.
- Tác vụ nền tách rời có thể đưa một sự kiện hệ thống vào hàng đợi và đánh thức Heartbeat khi phiên chính cần nhanh chóng chú ý đến điều gì đó. Lần đánh thức đó không biến lượt chạy Heartbeat thành một tác vụ nền.
Điều khiển khả năng hiển thị
Theo mặc định, các xác nhậnHEARTBEAT_OK bị ẩn trong khi nội dung cảnh báo được phân phối. Bạn có thể điều chỉnh điều này theo từng kênh hoặc từng tài khoản:
Tác dụng của từng cờ
showOk: gửi xác nhậnHEARTBEAT_OKkhi mô hình trả về phản hồi chỉ OK.showAlerts: gửi nội dung cảnh báo khi mô hình trả về phản hồi không phải OK.useIndicator: phát sự kiện chỉ báo cho các bề mặt trạng thái UI.
Ví dụ theo kênh và theo tài khoản
Mẫu phổ biến
| Mục tiêu | Cấu hình |
|---|---|
| Hành vi mặc định (OK im lặng, bật cảnh báo) | (không cần cấu hình) |
| Hoàn toàn im lặng (không tin nhắn, không chỉ báo) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false } |
| Chỉ chỉ báo (không tin nhắn) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true } |
| OK chỉ trong một kênh | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md (tùy chọn)
Nếu một tệpHEARTBEAT.md tồn tại trong workspace, prompt mặc định yêu cầu tác tử đọc tệp đó. Hãy xem nó như “danh sách kiểm tra Heartbeat” của bạn: nhỏ, ổn định, và an toàn để đưa vào mỗi 30 phút.
Trong các lần chạy bình thường, HEARTBEAT.md chỉ được chèn khi hướng dẫn Heartbeat được bật cho tác tử mặc định. Tắt nhịp Heartbeat bằng 0m hoặc đặt includeSystemPromptSection: false sẽ bỏ nó khỏi ngữ cảnh bootstrap bình thường.
Nếu HEARTBEAT.md tồn tại nhưng thực chất trống (chỉ có dòng trống và tiêu đề markdown như # Heading), OpenClaw bỏ qua lượt chạy Heartbeat để tiết kiệm lệnh gọi API. Lần bỏ qua đó được báo cáo là reason=empty-heartbeat-file. Nếu thiếu tệp, Heartbeat vẫn chạy và mô hình quyết định cần làm gì.
Giữ nó thật nhỏ (danh sách kiểm tra hoặc lời nhắc ngắn) để tránh làm phình prompt.
Ví dụ HEARTBEAT.md:
Khối tasks:
HEARTBEAT.md cũng hỗ trợ một khối tasks: có cấu trúc nhỏ cho các kiểm tra theo khoảng thời gian bên trong chính Heartbeat.
Ví dụ:
Hành vi
Hành vi
- OpenClaw phân tích cú pháp khối
tasks:và kiểm tra từng tác vụ theointervalriêng của nó. - Chỉ các tác vụ đến hạn được đưa vào prompt Heartbeat cho tick đó.
- Nếu không có tác vụ nào đến hạn, Heartbeat bị bỏ qua hoàn toàn (
reason=no-tasks-due) để tránh lãng phí một lệnh gọi mô hình. - Nội dung không phải tác vụ trong
HEARTBEAT.mdđược giữ nguyên và nối thêm làm ngữ cảnh bổ sung sau danh sách tác vụ đến hạn. - Dấu thời gian lần chạy cuối của tác vụ được lưu trong trạng thái phiên (
heartbeatTaskState), nên các khoảng thời gian vẫn tồn tại qua các lần khởi động lại bình thường. - Dấu thời gian tác vụ chỉ được nâng lên sau khi một lượt chạy Heartbeat hoàn tất đường dẫn phản hồi bình thường. Các lượt chạy
empty-heartbeat-file/no-tasks-duebị bỏ qua không đánh dấu tác vụ là đã hoàn tất.
Tác tử có thể cập nhật HEARTBEAT.md không?
Có — nếu bạn yêu cầu nó làm vậy.HEARTBEAT.md chỉ là một tệp bình thường trong workspace của tác tử, nên bạn có thể bảo tác tử (trong một cuộc trò chuyện bình thường) điều gì đó như:
- “Cập nhật
HEARTBEAT.mdđể thêm kiểm tra lịch hằng ngày.” - “Viết lại
HEARTBEAT.mdsao cho ngắn hơn và tập trung vào theo dõi hộp thư đến.”
Đánh thức thủ công (theo yêu cầu)
Bạn có thể đưa một sự kiện hệ thống vào hàng đợi và kích hoạt Heartbeat ngay lập tức bằng:heartbeat, một lần đánh thức thủ công sẽ chạy ngay từng Heartbeat của các tác tử đó.
Dùng --mode next-heartbeat để chờ tick đã lên lịch tiếp theo.
Phân phối lập luận (tùy chọn)
Theo mặc định, Heartbeat chỉ phân phối payload “câu trả lời” cuối cùng. Nếu muốn minh bạch, hãy bật:agents.defaults.heartbeat.includeReasoning: true
Reasoning: (cùng dạng với /reasoning on). Điều này có thể hữu ích khi tác tử đang quản lý nhiều phiên/codex và bạn muốn xem lý do nó quyết định ping bạn — nhưng nó cũng có thể rò rỉ nhiều chi tiết nội bộ hơn mức bạn muốn. Nên tắt tính năng này trong trò chuyện nhóm.
Nhận thức chi phí
Heartbeat chạy các lượt tác tử đầy đủ. Khoảng thời gian ngắn hơn tiêu tốn nhiều token hơn. Để giảm chi phí:- Dùng
isolatedSession: trueđể tránh gửi toàn bộ lịch sử hội thoại (~100K token giảm xuống còn ~2-5K mỗi lần chạy). - Dùng
lightContext: trueđể giới hạn các tệp bootstrap chỉ cònHEARTBEAT.md. - Đặt
modelrẻ hơn (ví dụollama/llama3.2:1b). - Giữ
HEARTBEAT.mdnhỏ. - Dùng
target: "none"nếu bạn chỉ muốn cập nhật trạng thái nội bộ.
Tràn ngữ cảnh sau Heartbeat
Nếu một Heartbeat dùng mô hình cục bộ nhỏ hơn, ví dụ một mô hình Ollama có cửa sổ 32k, và lượt phiên chính tiếp theo báo tràn ngữ cảnh, hãy kiểm tra xem Heartbeat trước đó có để phiên trên mô hình Heartbeat hay không. Thông báo đặt lại của OpenClaw nêu rõ điều này khi mô hình runtime cuối cùng khớp vớiheartbeat.model đã cấu hình.
Dùng isolatedSession: true để chạy Heartbeat trong một phiên mới, kết hợp với lightContext: true để có prompt nhỏ nhất, hoặc chọn một mô hình Heartbeat có cửa sổ ngữ cảnh đủ lớn cho phiên dùng chung.
Liên quan
- Tự động hóa & Tác vụ — toàn bộ cơ chế tự động hóa trong một góc nhìn
- Tác vụ nền — cách theo dõi công việc tách rời
- Múi giờ — cách múi giờ ảnh hưởng đến lịch Heartbeat
- Khắc phục sự cố — gỡ lỗi các vấn đề tự động hóa