You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Routing/Session isolation: harden followup routing so explicit cross-channel origin replies never fall back to the active dispatcher on route failure, preserve queued overflow summary routing metadata (`channel`/`to`/`thread`) across followup drain, and prefer originating channel context over internal provider tags for embedded followup runs. This prevents webchat/control-ui context from hijacking Discord-targeted replies in shared sessions. (#25864) Thanks @Gamedesigner.
44
44
- Messaging tool dedupe: treat originating channel metadata as authoritative for same-target `message.send` suppression in proactive runs (heartbeat/cron/exec-event), including synthetic-provider contexts, so `delivery-mirror` transcript entries no longer cause duplicate Telegram sends. (#25835) Thanks @jadeathena84-arch.
45
45
- Cron/Heartbeat delivery: stop inheriting cached session `lastThreadId` for heartbeat-mode target resolution unless a thread/topic is explicitly requested, so announce-mode cron and heartbeat deliveries stay on top-level destinations instead of leaking into active conversation threads. (#25730) Thanks @markshields-tl.
46
+
- Heartbeat defaults/prompts: switch the implicit heartbeat delivery target from `last` to `none` (opt-in for external delivery), and use internal-only cron/exec heartbeat prompt wording when delivery is disabled so background checks do not nudge user-facing relay behavior. (#25871, #24638, #25851)
46
47
- Security/Sandbox media: restrict sandbox media tmp-path allowances to OpenClaw-managed tmp roots instead of broad host `os.tmpdir()` trust, and add outbound/channel guardrails (tmp-path lint + media-root smoke tests) to prevent regressions in local media attachment reads. Thanks @tdjackey for reporting.
47
48
- Config/Plugins: treat stale removed `google-antigravity-auth` plugin references as compatibility warnings (not hard validation errors) across `plugins.entries`, `plugins.allow`, `plugins.deny`, and `plugins.slots.memory`, so startup no longer fails after antigravity removal. (#25538, #25862) Thanks @chilu18.
48
49
- Security/Message actions: enforce local media root checks for `sendAttachment` and `setGroupIcon` when `sandboxRoot` is unset, preventing attachment hydration from reading arbitrary host files via local absolute paths. Thanks @GCXWLP for reporting.
accountId:"ops-bot", // optional multi-account channel id
93
93
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.",
@@ -120,7 +120,7 @@ Example: two agents, only the second agent runs heartbeats.
120
120
defaults: {
121
121
heartbeat: {
122
122
every:"30m",
123
-
target:"last",
123
+
target:"last",// explicit delivery to last contact (default is "none")
124
124
},
125
125
},
126
126
list: [
@@ -149,7 +149,7 @@ Restrict heartbeats to business hours in a specific timezone:
149
149
defaults: {
150
150
heartbeat: {
151
151
every:"30m",
152
-
target:"last",
152
+
target:"last",// explicit delivery to last contact (default is "none")
153
153
activeHours: {
154
154
start:"09:00",
155
155
end:"22:00",
@@ -212,9 +212,9 @@ Use `accountId` to target a specific account on multi-account channels like Tele
212
212
- Explicit session key (copy from `openclaw sessions --json` or the [sessions CLI](/cli/sessions)).
213
213
- Session key formats: see [Sessions](/concepts/session) and [Groups](/channels/groups).
214
214
-`target`:
215
-
-`last` (default): deliver to the last used external channel.
215
+
-`last`: deliver to the last used external channel.
-`none`: run the heartbeat but **do not deliver** externally.
217
+
-`none` (default): run the heartbeat but **do not deliver** externally.
218
218
-`to`: optional recipient override (channel-specific id, e.g. E.164 for WhatsApp or a Telegram chat id). For Telegram topics/threads, use `<chatId>:topic:<messageThreadId>`.
219
219
-`accountId`: optional account id for multi-account channels. When `target: "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.
220
220
-`prompt`: overrides the default prompt body (not merged).
0 commit comments