


























@@ -50,6 +50,7 @@ Example config:
5050 directPolicy: "allow", // default: allow direct/DM targets; set "block" to suppress
5151 lightContext: true, // optional: only inject HEARTBEAT.md from bootstrap files
5252 isolatedSession: true, // optional: fresh session each run (no conversation history)
53+ skipWhenBusy: true, // optional: also defer when subagent or nested lanes are busy
5354// activeHours: { start: "08:00", end: "24:00" },
5455// includeReasoning: true, // optional: send separate `Reasoning:` message too
5556 },
@@ -65,6 +66,7 @@ Example config:
6566- The heartbeat prompt is sent **verbatim** as the user message. The system prompt includes a "Heartbeat" section only when heartbeats are enabled for the default agent, and the run is flagged internally.
6667- When heartbeats are disabled with `0m`, normal runs also omit `HEARTBEAT.md` from bootstrap context so the model does not see heartbeat-only instructions.
6768- Active hours (`heartbeat.activeHours`) are checked in the configured timezone. Outside the window, heartbeats are skipped until the next tick inside the window.
69+- Heartbeats automatically defer while cron work is active or queued. Set `heartbeat.skipWhenBusy: true` to defer on extra busy lanes (subagent or nested command work) as well; this is useful for local Ollama and other constrained single-runtime hosts.
68706971## What the heartbeat prompt is for
7072@@ -98,6 +100,7 @@ Outside heartbeats, stray `HEARTBEAT_OK` at the start/end of a message is stripp
98100 includeReasoning: false, // default: false (deliver separate Reasoning: message when available)
99101 lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files
100102 isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history)
103+ skipWhenBusy: false, // default: false; true also waits for subagent/nested lanes
101104 target: "last", // default: none | options: last | none | <channel id> (core or plugin, e.g. "bluebubbles")
102105 to: "+15551234567", // optional channel-specific override
103106 accountId: "ops-bot", // optional multi-account channel id
@@ -230,6 +233,9 @@ Use `accountId` to target a specific account on multi-account channels like Tele
230233<ParamField path="isolatedSession" type="boolean" default="false">
231234 When true, each heartbeat runs in a fresh session with no prior conversation history. Uses the same isolation pattern as cron `sessionTarget: "isolated"`. Dramatically reduces per-heartbeat token cost. Combine with `lightContext: true` for maximum savings. Delivery routing still uses the main session context.
232235</ParamField>
236+<ParamField path="skipWhenBusy" type="boolean" default="false">
237+ When true, heartbeat runs defer on extra busy lanes: subagent or nested command work. Cron lanes always defer heartbeats, even without this flag, so local-model hosts do not run cron and heartbeat prompts at the same time.
238+</ParamField>
233239<ParamField path="session" type="string">
234240 Optional session key for heartbeat runs.
235241@@ -287,7 +293,8 @@ Use `accountId` to target a specific account on multi-account channels like Tele
287293- `session` only affects the run context; delivery is controlled by `target` and `to`.
288294- To deliver to a specific channel/recipient, set `target` + `to`. With `target: "last"`, delivery uses the last external channel for that session.
289295- Heartbeat deliveries allow direct/DM targets by default. Set `directPolicy: "block"` to suppress direct-target sends while still running the heartbeat turn.
290-- If the main queue is busy, the heartbeat is skipped and retried later.
296+- If the main queue, target session lane, cron lane, or an active cron job is busy, the heartbeat is skipped and retried later.
297+- If `skipWhenBusy: true`, subagent and nested lanes also defer heartbeat runs.
291298- If `target` resolves to no external destination, the run still happens but no outbound message is sent.
292299293300</Accordion>
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。