Nhịp tim (Gateway)
Heartbeat hay Cron? Xem Cron vs Heartbeat để biết khi nào nên dùng từng loại.Heartbeat chạy các lượt tác tử định kỳ trong phiên chính để mô hình có thể phát hiện mọi thứ cần chú ý mà không làm phiền bạn bằng quá nhiều thông báo. Xử lý sự cố: /automation/troubleshooting
Khởi động nhanh (cho người mới)
- Giữ heartbeat được bật (mặc định là
30m, hoặc1hcho Anthropic OAuth/setup-token) hoặc đặt nhịp riêng của bạn. - Tạo một checklist
HEARTBEAT.mdnhỏ trong workspace của tác tử (tùy chọn nhưng khuyến nghị). - Quyết định nơi thông điệp heartbeat sẽ được gửi (
target: "last"là mặc định). - Tùy chọn: bật gửi reasoning của heartbeat để tăng tính minh bạch.
- Tùy chọn: giới hạn heartbeat trong giờ hoạt động (giờ địa phương).
Mặc định
- Chu kỳ:
30m(hoặc1hkhi Anthropic OAuth/setup-token là chế độ xác thực được phát hiện). Đặtagents.defaults.heartbeat.everyhoặc theo từng agentagents.list[].heartbeat.every; dùng0mđể tắt. - Nội dung prompt (cấu hình qua
agents.defaults.heartbeat.prompt):Read HEARTBEAT.md if it exists (workspace context). 36. Follow it strictly. 37. Do not infer or repeat old tasks from prior chats. 38. If nothing needs attention, reply HEARTBEAT_OK.Prompt heartbeat được gửi nguyên văn như thông điệp người dùng. Prompt hệ thống bao gồm một mục “Heartbeat” và lần chạy được gắn cờ nội bộ. Giờ hoạt động (heartbeat.activeHours) được kiểm tra theo múi giờ đã cấu hình. channels.<channel> 42. .heartbeatghi đè mặc định của kênh.channels.<channel> 45. .accounts.<id> 46. .heartbeat(các kênh đa tài khoản) ghi đè cài đặt theo kênh.- Nếu bất kỳ mục
agents.list[]nào có khốiheartbeat, chỉ những agent đó chạy heartbeat. Bên ngoài cửa sổ, các nhịp tim sẽ bị bỏ qua cho đến lần tick tiếp theo bên trong cửa sổ.
Mục đích của prompt heartbeat
Prompt mặc định được thiết kế có chủ ý là rộng:- Tác vụ nền: “Consider outstanding tasks” thúc đẩy tác tử rà soát các việc theo dõi (hộp thư đến, lịch, nhắc việc, công việc xếp hàng) và nêu bật điều gì đó khẩn cấp.
- Check-in với con người: “Checkup sometimes on your human during day time” gợi ý một thông điệp nhẹ kiểu “bạn có cần gì không?” thỉnh thoảng, nhưng tránh spam ban đêm bằng cách dùng múi giờ địa phương đã cấu hình (xem /concepts/timezone).
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 quá trình chạy heartbeat, OpenClaw xem
HEARTBEAT_OKlà một xác nhận (ack) khi nó xuất hiện ở đầu hoặc cuối của phản hồi. Token này sẽ bị loại bỏ và phản hồi sẽ được dropped if the remaining content is ≤ackMaxChars(default: 300). - Nếu
HEARTBEAT_OKxuất hiện ở giữa phản hồi, nó không được xử lý đặc biệt. - 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 điệp sẽ bị loại bỏ
và ghi log; một thông điệp chỉ gồm HEARTBEAT_OK sẽ bị loại.
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[].heartbeatđược gộp chồng lên; nếu bất kỳ tác tử nào có khốiheartbeat, chỉ những tác tử đó chạy heartbeat.channels.defaults.heartbeatđặt mặc định hiển thị cho tất cả các kênh.- Khối theo agent sẽ được gộp chồng lê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 agent).Ngoài khung giờ này (trước 9h sáng hoặc sau 10h tối theo Eastern), heartbeat sẽ bị bỏ qua. - Điều này có thể hữu ích khi agent đang quản lý nhiều phiên/codex và bạn muốn biết vì sao nó quyết định ping bạn — nhưng cũng có thể làm lộ nhiều chi tiết nội bộ hơn mức bạn muốn..accounts.<id>.heartbeat` (multi-account channels) overrides per-channel settings.
Heartbeat theo từng tác tử
If anyagents.list[] entry includes a heartbeat block, only those agents
run heartbeats. The per-agent block merges on top of agents.defaults.heartbeat
(so you can set shared defaults once and override per agent).
Ví dụ: hai tác tử, chỉ tác tử thứ hai chạy heartbeat.
Ví dụ giờ hoạt động
Giới hạn heartbeat trong giờ làm việc theo một múi giờ cụ thể:Ví dụ đa tài khoản
DùngaccountId để nhắm tới một tài khoản cụ thể trên các kênh đa tài khoản như Telegram:
Ghi chú trường
every: khoảng thời gian heartbeat (chuỗi thời lượng; đơn vị mặc định = phút).model: ghi đè mô hình tùy chọn cho các lượt heartbeat (provider/model).includeReasoning: khi bật, cũng gửi thông điệpReasoning:riêng khi khả dụng (cùng dạng với/reasoning on).session: khóa phiên tùy chọn cho các lượt heartbeat.main(mặc định): phiên chính của tác tử.- Khóa phiên tường minh (sao chép từ
openclaw sessions --jsonhoặc sessions CLI). - Định dạng khóa phiên: xem Sessions và Groups.
target:last(mặc định): gửi tới kênh bên ngoài được dùng gần nhất.- kênh tường minh:
whatsapp/telegram/discord/googlechat/slack/msteams/signal/imessage. none: chạy heartbeat nhưng không gửi ra bên ngoài.
to: ghi đè người nhận tùy chọn (id theo kênh, ví dụ E.164 cho WhatsApp hoặc chat id của Telegram).accountId: optional account id for multi-account channels. Whentarget: "last", the account id applies to the resolved last channel if it supports accounts; otherwise it is ignored. If the account id does not match a configured account for the resolved channel, delivery is skipped.prompt: ghi đè nội dung prompt mặc định (không gộp).ackMaxChars: số ký tự tối đa cho phép sauHEARTBEAT_OKtrước khi gửi.activeHours: restricts heartbeat runs to a time window. Object withstart(HH:MM, inclusive),end(HH:MM exclusive;24:00allowed for end-of-day), and optionaltimezone.- Bỏ qua hoặc
"user": dùngagents.defaults.userTimezonecủa bạn nếu đã đặt, nếu không thì dùng múi giờ của hệ thống máy chủ. "local": luôn dùng múi giờ hệ thống máy chủ.- Bất kỳ định danh IANA nào (ví dụ:
America/New_York): dùng trực tiếp; nếu không hợp lệ, sẽ quay về hành vi"user"ở trên. - Ngoài khung giờ hoạt động, heartbeat sẽ bị bỏ qua cho đến nhịp tiếp theo trong khung giờ.
- Bỏ qua hoặc
Hành vi gửi
- Heartbeats run in the agent’s main session by default (
agent:<id>:<mainKey>), orglobalwhensession.scope = "global". Setsessionto override to a specific channel session (Discord/WhatsApp/etc.). sessionchỉ ảnh hưởng đến ngữ cảnh chạy; việc gửi được điều khiển bởitargetvàto.- To deliver to a specific channel/recipient, set
target+to. Withtarget: "last", delivery uses the last external channel for that session. - Nếu hàng đợi chính đang bận, heartbeat sẽ bị bỏ qua và thử lại sau.
- Nếu
targetkhông phân giải được đích bên ngoài, lượt chạy vẫn diễn ra nhưng không có thông điệp gửi ra. - Các phản hồi chỉ dành cho heartbeat không giữ phiên hoạt động;
updatedAtcuối cùng sẽ được khôi phục để việc hết hạn khi nhàn rỗi diễn ra bình thường.
Kiểm soát hiển thị
By default,HEARTBEAT_OK acknowledgments are suppressed while alert content is
delivered. You can adjust this per channel or per account:
Ý nghĩa của từng cờ
showOk: gửi một ackHEARTBEAT_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-OK.useIndicator: phát các sự kiện chỉ báo cho các bề mặt trạng thái UI.
Ví dụ theo kênh vs theo tài khoản
Mẫu thường gặp
| Mục tiêu | Cấu hình |
|---|---|
| Hành vi mặc định (OK im lặng, có cảnh báo) | (không cần cấu hình) |
| Im lặng hoàn toàn (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ỉ ở một kênh | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md (tùy chọn)
If aHEARTBEAT.md file exists in the workspace, the default prompt tells the
agent to read it. Think of it as your “heartbeat checklist”: small, stable, and
safe to include every 30 minutes.
If HEARTBEAT.md exists but is effectively empty (only blank lines and markdown
headers like # Heading), OpenClaw skips the heartbeat run to save API calls.
Nếu tệp bị thiếu, heartbeat vẫn chạy và mô hình tự quyết định làm gì.
Giữ nó thật gọn (checklist hoặc nhắc việc ngắn) để tránh phình prompt.
Ví dụ HEARTBEAT.md:
Tác tử có thể cập nhật HEARTBEAT.md không?
Có — nếu bạn yêu cầu.HEARTBEAT.md chỉ là một tệp bình thường trong workspace của tác tử, vì vậy bạn có thể nói với
tác tử (trong một cuộc trò chuyện bình thường) những câu như:
- “Cập nhật
HEARTBEAT.mdđể thêm kiểm tra lịch hàng ngày.” - “Viết lại
HEARTBEAT.mdđể ngắn hơn và tập trung vào theo dõi hộp thư đến.”
HEARTBEAT.md — nó sẽ trở thành một phần của ngữ cảnh prompt.
Đá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 một heartbeat ngay lập tức bằng:heartbeat được cấu hình, một lần đánh thức thủ công sẽ chạy ngay
heartbeat của từng tác tử đó.
Dùng --mode next-heartbeat để chờ nhịp đã lên lịch tiếp theo.
Gửi reasoning (tùy chọn)
Theo mặc định, heartbeat chỉ gửi payload “câu trả lời” cuối cùng. Nếu bạn muốn minh bạch, hãy bật:agents.defaults.heartbeat.includeReasoning: true
Reasoning: (same shape as /reasoning on). This can be useful when the agent
is managing multiple sessions/codexes and you want to see why it decided to ping
you — but it can also leak more internal detail than you want. Prefer keeping it
off in group chats.
Nhận thức chi phí
Heartbeats run full agent turns. Shorter intervals burn more tokens. KeepHEARTBEAT.md small and consider a cheaper model or target: "none" if you
only want internal state updates.