diff --git a/docs/uk/concepts/system-prompt.md b/docs/uk/concepts/system-prompt.md index 29c5f55bb..448ef6213 100644 --- a/docs/uk/concepts/system-prompt.md +++ b/docs/uk/concepts/system-prompt.md @@ -1,102 +1,101 @@ --- read_when: - - Редагування тексту системного запиту, списку tools або розділів часу/heartbeat - - Зміна поведінки bootstrap робочого простору або інʼєкції Skills -summary: Що містить системний запит OpenClaw і як він збирається -title: Системний запит + - Редагування тексту системного prompt, списку інструментів або розділів часу/heartbeat + - Зміна bootstrap робочого простору або поведінки ін’єкції Skills +summary: Що містить системний prompt OpenClaw і як він збирається +title: Системний prompt x-i18n: - generated_at: "2026-04-05T18:02:24Z" + generated_at: "2026-04-07T23:53:52Z" model: gpt-5.4 provider: openai - source_hash: f14ba7f16dda81ac973d72be05931fa246bdfa0e1068df1a84d040ebd551c236 + source_hash: e55fc886bc8ec47584d07c9e60dfacd964dc69c7db976ea373877dc4fe09a79a source_path: concepts/system-prompt.md workflow: 15 --- -# Системний запит +# Системний prompt -OpenClaw створює власний системний запит для кожного запуску агента. Цей запит **належить OpenClaw** і не використовує типовий запит pi-coding-agent. +OpenClaw створює власний системний prompt для кожного запуску агента. Цей prompt **належить OpenClaw** і не використовує стандартний prompt pi-coding-agent. -Запит збирається OpenClaw і додається до кожного запуску агента. +Prompt збирається OpenClaw і впроваджується в кожен запуск агента. -Плагіни провайдерів можуть додавати cache-aware інструкції для запиту без заміни -повного запиту, яким володіє OpenClaw. Runtime провайдера може: +Плагіни провайдерів можуть додавати cache-aware настанови для prompt без заміни +повного prompt, що належить OpenClaw. Середовище виконання провайдера може: - замінювати невеликий набір іменованих основних розділів (`interaction_style`, `tool_call_style`, `execution_bias`) -- додавати **стабільний префікс** над межею prompt cache -- додавати **динамічний суфікс** під межею prompt cache +- впроваджувати **stable prefix** над межею кешу prompt +- впроваджувати **dynamic suffix** під межею кешу prompt -Використовуйте внески від провайдерів для налаштування під конкретні сімейства моделей. Застарілу -мутацію запиту `before_prompt_build` залишайте для сумісності або для справді глобальних змін запиту, а не для звичайної поведінки провайдера. +Використовуйте внески, що належать провайдеру, для налаштування під конкретні сімейства моделей. Зберігайте застарілу +мутацію prompt `before_prompt_build` для сумісності або справді глобальних змін prompt, а не для звичайної поведінки провайдера. ## Структура -Запит навмисно компактний і використовує фіксовані розділи: +Prompt навмисно компактний і використовує фіксовані розділи: -- **Tooling**: нагадування про джерело істини для structured-tool плюс інструкції runtime щодо використання tools. -- **Safety**: коротке нагадування про запобіжники, щоб уникати поведінки, спрямованої на здобуття влади, або обходу нагляду. +- **Інструментарій**: нагадування про джерело істини для structured-tool та настанови щодо використання інструментів під час виконання. +- **Безпека**: коротке нагадування про запобіжники, щоб уникати поведінки, спрямованої на здобуття влади, або обходу нагляду. - **Skills** (коли доступні): пояснює моделі, як завантажувати інструкції навичок на вимогу. -- **Самооновлення OpenClaw**: як безпечно перевіряти конфігурацію через - `config.schema.lookup`, змінювати конфігурацію через `config.patch`, замінювати повну - конфігурацію через `config.apply` і запускати `update.run` лише на явний - запит користувача. Інструмент `gateway`, доступний лише власнику, також відмовляється переписувати +- **Самооновлення OpenClaw**: як безпечно перевіряти конфігурацію за допомогою + `config.schema.lookup`, змінювати конфігурацію через `config.patch`, замінювати всю + конфігурацію за допомогою `config.apply` і запускати `update.run` лише за явним + запитом користувача. Інструмент `gateway`, доступний лише власнику, також відмовляється переписувати `tools.exec.ask` / `tools.exec.security`, включно із застарілими - псевдонімами `tools.bash.*`, які нормалізуються до цих захищених exec-шляхів. -- **Workspace**: робочий каталог (`agents.defaults.workspace`). -- **Documentation**: локальний шлях до документації OpenClaw (репозиторій або npm-пакунок) і коли її читати. -- **Workspace Files (injected)**: вказує, що bootstrap-файли включено нижче. -- **Sandbox** (коли ввімкнено): вказує на sandbox runtime, шляхи sandbox і чи доступний підвищений exec. -- **Current Date & Time**: локальний час користувача, часовий пояс і формат часу. -- **Reply Tags**: необов’язковий синтаксис тегів відповіді для підтримуваних провайдерів. -- **Heartbeats**: запит heartbeat і поведінка ack. -- **Runtime**: хост, ОС, node, модель, корінь репозиторію (коли виявлено), рівень thinking (один рядок). -- **Reasoning**: поточний рівень видимості + підказка для перемикання `/reasoning`. + псевдонімами `tools.bash.*`, які нормалізуються до цих захищених шляхів exec. +- **Робочий простір**: робочий каталог (`agents.defaults.workspace`). +- **Документація**: локальний шлях до документації OpenClaw (репозиторій або npm package) і коли її слід читати. +- **Файли робочого простору (впроваджені)**: вказує, що bootstrap-файли включено нижче. +- **Пісочниця** (коли увімкнено): вказує, що використовується ізольоване середовище виконання, шляхи пісочниці та чи доступний exec із підвищеними правами. +- **Поточна дата й час**: локальний для користувача час, часовий пояс і формат часу. +- **Теги відповіді**: необов’язковий синтаксис тегів відповіді для підтримуваних провайдерів. +- **Heartbeats**: prompt heartbeat та поведінка підтвердження, коли heartbeats увімкнено для агента за замовчуванням. +- **Середовище виконання**: хост, ОС, node, модель, корінь репозиторію (якщо виявлено), рівень thinking (один рядок). +- **Міркування**: поточний рівень видимості + підказка про перемикач /reasoning. -Розділ Tooling також містить інструкції runtime для довготривалої роботи: +Розділ «Інструментарій» також містить настанови для тривалих завдань під час виконання: -- використовувати cron для майбутніх дій (`check back later`, нагадування, повторювана робота) - замість циклів сну через `exec`, трюків затримки `yieldMs` або повторного опитування `process` -- використовувати `exec` / `process` лише для команд, які стартують зараз і продовжують працювати +- використовуйте cron для майбутніх повторних дій (`check back later`, нагадування, періодичні завдання) + замість циклів сну `exec`, трюків із затримкою `yieldMs` або повторного опитування `process` +- використовуйте `exec` / `process` лише для команд, які запускаються зараз і продовжують виконуватися у фоновому режимі -- коли ввімкнено автоматичне пробудження після завершення, запускати команду лише один раз і покладатися на - шлях push-сповіщення, коли вона виводить результат або завершується з помилкою -- використовувати `process` для журналів, стану, введення або втручання, коли потрібно - перевірити запущену команду -- якщо завдання більше, надавати перевагу `sessions_spawn`; завершення субагента відбувається через push - і автоматично анонсується назад запитувачу -- не опитувати `subagents list` / `sessions_list` у циклі лише для очікування +- коли ввімкнено автоматичне пробудження після завершення, запустіть команду один раз і покладайтеся на + push-based шлях пробудження, коли вона виведе результат або завершиться з помилкою +- використовуйте `process` для журналів, стану, введення або втручання, коли потрібно + перевірити команду, що виконується +- якщо завдання більше, надавайте перевагу `sessions_spawn`; завершення субагента працює через + push-based механізм і автоматично оголошується назад запитувачу +- не опитуйте `subagents list` / `sessions_list` у циклі лише для очікування завершення -Коли ввімкнено експериментальний інструмент `update_plan`, Tooling також повідомляє -моделі використовувати його лише для нетривіальної багатокрокової роботи, підтримувати рівно один -крок `in_progress` і не повторювати весь план після кожного оновлення. +Коли ввімкнено експериментальний інструмент `update_plan`, розділ «Інструментарій» також повідомляє +моделі використовувати його лише для нетривіальних багатокрокових завдань, підтримувати рівно один крок +`in_progress` і не повторювати весь план після кожного оновлення. -Запобіжники безпеки в системному запиті мають рекомендаційний характер. Вони спрямовують поведінку моделі, але не забезпечують примусове виконання політики. Для жорсткого контролю використовуйте політики tools, схвалення exec, sandboxing і allowlist каналів; оператори можуть вимкнути це за задумом. +Запобіжники безпеки в системному prompt мають рекомендаційний характер. Вони спрямовують поведінку моделі, але не забезпечують виконання політики. Для жорсткого застосування використовуйте політику інструментів, схвалення exec, пісочницю та списки дозволів каналів; оператори навмисно можуть вимкнути це. -На каналах із рідними картками/кнопками схвалення запит runtime тепер інструктує -агента насамперед покладатися на цей рідний UI схвалення. Він має додавати ручну -команду `/approve` лише тоді, коли результат tool повідомляє, що схвалення в чаті недоступні або -ручне схвалення є єдиним шляхом. +У каналах із нативними картками/кнопками схвалення prompt середовища виконання тепер повідомляє +агенту спочатку покладатися на цей нативний UI схвалення. Він має включати ручну +команду `/approve` лише тоді, коли результат інструмента каже, що схвалення в чаті недоступні або +єдиний шлях — ручне схвалення. -## Режими запиту +## Режими prompt -OpenClaw може рендерити менші системні запити для субагентів. Runtime встановлює +OpenClaw може рендерити менші системні prompt для субагентів. Середовище виконання встановлює `promptMode` для кожного запуску (це не користувацьке налаштування): -- `full` (за замовчуванням): включає всі наведені вище розділи. -- `minimal`: використовується для субагентів; пропускає **Skills**, **Memory Recall**, **Самооновлення OpenClaw**, **Model Aliases**, **User Identity**, **Reply Tags**, - **Messaging**, **Silent Replies** і **Heartbeats**. Tooling, **Safety**, - Workspace, Sandbox, Current Date & Time (коли відомо), Runtime та інʼєктований +- `full` (за замовчуванням): включає всі розділи вище. +- `minimal`: використовується для субагентів; опускає **Skills**, **Виклик пам’яті**, **Самооновлення OpenClaw**, **Псевдоніми моделей**, **Ідентичність користувача**, **Теги відповіді**, + **Повідомлення**, **Тихі відповіді** та **Heartbeats**. Інструментарій, **Безпека**, + Робочий простір, Пісочниця, Поточна дата й час (коли відомо), Середовище виконання та впроваджений контекст залишаються доступними. - `none`: повертає лише базовий рядок ідентичності. -Коли `promptMode=minimal`, додаткові інʼєктовані запити позначаються як **Subagent -Context** замість **Group Chat Context**. +Коли `promptMode=minimal`, додаткові впроваджені prompt позначаються як **Контекст субагента** замість **Контекст групового чату**. -## Інʼєкція bootstrap робочого простору +## Впровадження bootstrap робочого простору -Bootstrap-файли обрізаються та додаються в розділ **Project Context**, щоб модель бачила контекст ідентичності та профілю без потреби в явному читанні: +Bootstrap-файли обрізаються й додаються в розділ **Контекст проєкту**, щоб модель бачила контекст ідентичності та профілю без потреби в явному читанні: - `AGENTS.md` - `SOUL.md` @@ -105,62 +104,65 @@ Bootstrap-файли обрізаються та додаються в розд - `USER.md` - `HEARTBEAT.md` - `BOOTSTRAP.md` (лише в абсолютно нових робочих просторах) -- `MEMORY.md`, якщо він є, інакше `memory.md` як резервний варіант у нижньому регістрі +- `MEMORY.md`, якщо присутній, інакше `memory.md` як резервний варіант у нижньому регістрі -Усі ці файли **інʼєктуються у вікно контексту** на кожному ході, а отже -витрачають токени. Тримайте їх стислими — особливо `MEMORY.md`, який може -зростати з часом і призводити до неочікувано великого використання контексту та частішого -ущільнення. +Усі ці файли **впроваджуються у вікно контексту** на кожному ході, якщо не застосовується +специфічне для файлу обмеження. `HEARTBEAT.md` пропускається в звичайних запусках, коли +heartbeats вимкнено для агента за замовчуванням або +`agents.defaults.heartbeat.includeSystemPromptSection` має значення false. Тримайте впроваджені +файли стислими — особливо `MEMORY.md`, який з часом може зростати та призводити до +неочікувано високого використання контексту й частішого ущільнення. -> **Примітка:** щоденні файли `memory/*.md` **не** інʼєктуються автоматично. До -> них звертаються на вимогу через tools `memory_search` і `memory_get`, тож вони -> не впливають на вікно контексту, якщо модель явно їх не читає. +> **Примітка:** щоденні файли `memory/*.md` **не** впроваджуються автоматично. До +> них звертаються на вимогу через інструменти `memory_search` і `memory_get`, тому вони +> не враховуються у вікні контексту, якщо модель явно їх не читає. -Великі файли обрізаються з маркером. Максимальний розмір одного файла контролюється -через `agents.defaults.bootstrapMaxChars` (за замовчуванням: 20000). Загальний обсяг інʼєктованого bootstrap-вмісту -між файлами обмежується `agents.defaults.bootstrapTotalMaxChars` -(за замовчуванням: 150000). Для відсутніх файлів інʼєктується короткий маркер відсутності. Коли відбувається обрізання, -OpenClaw може додавати блок попередження в Project Context; це контролюється через +Великі файли обрізаються з маркером. Максимальний розмір для кожного файлу контролюється через +`agents.defaults.bootstrapMaxChars` (за замовчуванням: 20000). Загальний обсяг впровадженого bootstrap-вмісту +в усіх файлах обмежується `agents.defaults.bootstrapTotalMaxChars` +(за замовчуванням: 150000). Відсутні файли впроваджують короткий маркер відсутнього файлу. Коли відбувається обрізання, +OpenClaw може впровадити блок попередження в Контекст проєкту; це контролюється через `agents.defaults.bootstrapPromptTruncationWarning` (`off`, `once`, `always`; за замовчуванням: `once`). -Сесії субагентів інʼєктують лише `AGENTS.md` і `TOOLS.md` (інші bootstrap-файли -відфільтровуються, щоб контекст субагента залишався малим). +Сесії субагентів впроваджують лише `AGENTS.md` і `TOOLS.md` (інші bootstrap-файли +відфільтровуються, щоб зберегти контекст субагента невеликим). -Внутрішні hooks можуть перехоплювати цей крок через `agent:bootstrap`, щоб змінити або замінити -інʼєктовані bootstrap-файли (наприклад, підмінити `SOUL.md` на альтернативну персону). +Внутрішні хуки можуть перехоплювати цей крок через `agent:bootstrap`, щоб змінювати або замінювати +впроваджені bootstrap-файли (наприклад, замінювати `SOUL.md` на альтернативну персону). Якщо ви хочете, щоб агент звучав менш узагальнено, почніть із -[Посібника з індивідуальності SOUL.md](/concepts/soul). +[SOUL.md Personality Guide](/uk/concepts/soul). -Щоб перевірити, який внесок дає кожен інʼєктований файл (сирий проти інʼєктованого, обрізання, а також накладні витрати схеми tool), використовуйте `/context list` або `/context detail`. Див. [Context](/concepts/context). +Щоб перевірити, який внесок робить кожен впроваджений файл (сирий чи впроваджений, обрізання, а також накладні витрати на схему інструментів), використовуйте `/context list` або `/context detail`. Див. [Контекст](/uk/concepts/context). ## Обробка часу -Системний запит включає окремий розділ **Current Date & Time**, коли -відомий часовий пояс користувача. Щоб зберігати prompt cache стабільним, тепер він містить лише +Системний prompt включає окремий розділ **Поточна дата й час**, коли відомий +часовий пояс користувача. Щоб зберегти стабільність кешу prompt, тепер він містить лише **часовий пояс** (без динамічного годинника чи формату часу). Використовуйте `session_status`, коли агенту потрібен поточний час; картка стану -містить рядок з часовою позначкою. Той самий tool також може за бажанням встановлювати перевизначення моделі для сесії -(`model=default` очищає його). +містить рядок із часовою позначкою. Той самий інструмент також може за потреби встановити перевизначення моделі +для окремої сесії (`model=default` очищає його). Налаштовується через: - `agents.defaults.userTimezone` - `agents.defaults.timeFormat` (`auto` | `12` | `24`) -Див. [Date & Time](/date-time) для повного опису поведінки. +Див. [Дата й час](/uk/date-time) для повного опису поведінки. ## Skills -Коли існують допустимі навички, OpenClaw інʼєктує компактний **список доступних навичок** -(`formatSkillsForPrompt`), який включає **шлях до файла** для кожної навички. Запит -інструктує модель використовувати `read`, щоб завантажити SKILL.md за вказаним -розташуванням (workspace, managed або bundled). Якщо допустимих навичок немає, розділ -Skills пропускається. +Коли існують відповідні Skills, OpenClaw впроваджує компактний **список доступних skills** +(`formatSkillsForPrompt`), який містить **шлях до файлу** для кожної навички. Prompt +вказує моделі використовувати `read` для завантаження SKILL.md у вказаному +розташуванні (робочий простір, кероване або вбудоване). Якщо жодна навичка не підходить, +розділ Skills пропускається. -Допустимість включає метадані навичок, перевірки runtime environment/config і ефективний allowlist навичок агента, коли налаштовано `agents.defaults.skills` або +Відповідність включає обмеження метаданих навички, перевірки середовища виконання/конфігурації +та ефективний список дозволів навичок агента, коли налаштовано `agents.defaults.skills` або `agents.list[].skills`. ``` @@ -173,12 +175,13 @@ Skills пропускається. ``` -Це дозволяє зберігати базовий запит невеликим, водночас забезпечуючи цільове використання навичок. +Це зберігає базовий prompt компактним, водночас забезпечуючи цільове використання навичок. -## Documentation +## Документація -Коли доступно, системний запит включає розділ **Documentation**, який указує на -локальний каталог документації OpenClaw (або `docs/` у робочому просторі репозиторію, або документацію з вбудованого npm-пакунка) і також згадує публічне дзеркало, вихідний репозиторій, спільноту Discord і -ClawHub ([https://clawhub.ai](https://clawhub.ai)) для пошуку Skills. Запит інструктує модель спочатку звертатися до локальної документації -щодо поведінки, команд, конфігурації чи архітектури OpenClaw, а також самостійно виконувати -`openclaw status`, коли це можливо (запитуючи користувача лише тоді, коли доступу немає). +Коли доступно, системний prompt включає розділ **Документація**, який вказує на +локальний каталог документації OpenClaw (або `docs/` у робочому просторі репозиторію, або документацію з вбудованого npm +package), а також згадує публічне дзеркало, вихідний репозиторій, спільноту Discord і +ClawHub ([https://clawhub.ai](https://clawhub.ai)) для пошуку skills. Prompt наказує моделі спочатку звертатися до локальної документації +щодо поведінки OpenClaw, команд, конфігурації чи архітектури, а також самостійно запускати +`openclaw status`, коли це можливо (і звертатися до користувача лише тоді, коли доступу немає). diff --git a/docs/uk/gateway/heartbeat.md b/docs/uk/gateway/heartbeat.md index eed6cffa5..e42febbba 100644 --- a/docs/uk/gateway/heartbeat.md +++ b/docs/uk/gateway/heartbeat.md @@ -2,36 +2,36 @@ read_when: - Налаштування частоти heartbeat або повідомлень - Вибір між heartbeat і cron для запланованих завдань -summary: Heartbeat опитує повідомлення та правила сповіщень +summary: Повідомлення опитування heartbeat і правила сповіщень title: Heartbeat x-i18n: - generated_at: "2026-04-05T18:04:52Z" + generated_at: "2026-04-07T23:54:23Z" model: gpt-5.4 provider: openai - source_hash: f417b0d4453bed9022144d364521a59dec919d44cca8f00f0def005cd38b146f + source_hash: a8021d747637060eacb91ec5f75904368a08790c19f4fca32acda8c8c0a25e41 source_path: gateway/heartbeat.md workflow: 15 --- # Heartbeat (Gateway) -> **Heartbeat чи Cron?** Див. [Automation & Tasks](/automation), щоб зрозуміти, коли що використовувати. +> **Heartbeat чи Cron?** Див. [Автоматизація й завдання](/uk/automation), щоб зрозуміти, коли що використовувати. -Heartbeat запускає **періодичні цикли агента** в основній сесії, щоб модель могла -показувати все, що потребує уваги, не засипаючи вас повідомленнями. +Heartbeat запускає **періодичні ходи агента** в основній сесії, щоб модель могла +виявляти все, що потребує уваги, не засипаючи вас повідомленнями. -Heartbeat — це запланований цикл основної сесії — він **не** створює записи [background task](/automation/tasks). -Записи завдань призначені для відокремленої роботи (запуски ACP, subagent, ізольовані cron-завдання). +Heartbeat — це запланований хід основної сесії — він **не** створює записів [фонових завдань](/uk/automation/tasks). +Записи завдань призначені для відокремленої роботи (запуски ACP, субагенти, ізольовані cron-завдання). -Усунення несправностей: [Scheduled Tasks](/automation/cron-jobs#troubleshooting) +Усунення проблем: [Заплановані завдання](/uk/automation/cron-jobs#troubleshooting) ## Швидкий старт (для початківців) -1. Залиште heartbeat увімкненим (за замовчуванням це `30m`, або `1h` для Anthropic OAuth/token auth, включно з повторним використанням Claude CLI) або задайте власну частоту. +1. Залиште heartbeat увімкненим (типово це `30m`, або `1h` для автентифікації Anthropic OAuth/token, включно з повторним використанням Claude CLI) або задайте власну частоту. 2. Створіть невеликий контрольний список `HEARTBEAT.md` або блок `tasks:` у робочому просторі агента (необов’язково, але рекомендовано). -3. Вирішіть, куди мають надходити повідомлення heartbeat (`target: "none"` — значення за замовчуванням; установіть `target: "last"`, щоб спрямовувати їх до останнього контакту). -4. Необов’язково: увімкніть доставку reasoning heartbeat для більшої прозорості. -5. Необов’язково: використовуйте полегшений bootstrap-контекст, якщо для запусків heartbeat потрібен лише `HEARTBEAT.md`. +3. Вирішіть, куди мають надходити повідомлення heartbeat (`target: "none"` — типовий варіант; задайте `target: "last"`, щоб спрямовувати їх до останнього контакту). +4. Необов’язково: увімкніть доставку міркувань heartbeat для прозорості. +5. Необов’язково: використовуйте полегшений bootstrap-контекст, якщо запускам heartbeat потрібен лише `HEARTBEAT.md`. 6. Необов’язково: увімкніть ізольовані сесії, щоб не надсилати повну історію розмови під час кожного heartbeat. 7. Необов’язково: обмежте heartbeat активними годинами (за місцевим часом). @@ -44,7 +44,7 @@ Heartbeat — це запланований цикл основної сесії heartbeat: { every: "30m", target: "last", // явна доставка до останнього контакту (типово "none") - directPolicy: "allow", // типово: дозволяти цілі direct/DM; установіть "block", щоб приглушити + directPolicy: "allow", // типово: дозволяти прямі/DM-одержувачі; задайте "block", щоб приглушити lightContext: true, // необов’язково: інжектувати лише HEARTBEAT.md з bootstrap-файлів isolatedSession: true, // необов’язково: нова сесія для кожного запуску (без історії розмови) // activeHours: { start: "08:00", end: "24:00" }, @@ -55,44 +55,47 @@ Heartbeat — це запланований цикл основної сесії } ``` -## Значення за замовчуванням +## Типові значення -- Інтервал: `30m` (або `1h`, коли виявленим режимом auth є Anthropic OAuth/token, включно з повторним використанням Claude CLI). Установіть `agents.defaults.heartbeat.every` або для окремого агента `agents.list[].heartbeat.every`; використовуйте `0m`, щоб вимкнути. -- Тіло prompt (налаштовується через `agents.defaults.heartbeat.prompt`): +- Інтервал: `30m` (або `1h`, коли виявленим режимом автентифікації є Anthropic OAuth/token, включно з повторним використанням Claude CLI). Задайте `agents.defaults.heartbeat.every` або для конкретного агента `agents.list[].heartbeat.every`; використайте `0m`, щоб вимкнути. +- Тіло prompt’а (налаштовується через `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.` -- Prompt heartbeat надсилається **дослівно** як повідомлення користувача. System - prompt містить розділ “Heartbeat”, а запуск внутрішньо позначається відповідним прапорцем. +- Prompt heartbeat надсилається **дослівно** як повідомлення користувача. Системний + prompt містить розділ “Heartbeat” лише тоді, коли heartbeat увімкнено для + типового агента, а запуск внутрішньо позначено відповідним прапорцем. +- Коли heartbeat вимкнено через `0m`, звичайні запуски також не включають `HEARTBEAT.md` + до bootstrap-контексту, щоб модель не бачила інструкції лише для heartbeat. - Активні години (`heartbeat.activeHours`) перевіряються в налаштованому часовому поясі. - Поза межами цього вікна heartbeat пропускаються до наступного тіку в межах вікна. + Поза вікном heartbeat пропускаються до наступного тіку всередині вікна. ## Для чого потрібен prompt heartbeat -Prompt за замовчуванням навмисно зроблено широким: +Типовий prompt навмисно сформульований широко: -- **Фонові завдання**: “Consider outstanding tasks” підштовхує агента переглядати - наступні дії (вхідні, календар, нагадування, завдання в черзі) і показувати все термінове. -- **Людська перевірка**: “Checkup sometimes on your human during day time” підштовхує до - періодичного легкого повідомлення на кшталт “чи щось потрібно?”, але уникає нічного спаму - завдяки використанню вашого налаштованого місцевого часового поясу (див. [/concepts/timezone](/concepts/timezone)). +- **Фонові завдання**: “Consider outstanding tasks” спонукає агента переглянути + подальші дії (вхідні, календар, нагадування, чергу роботи) і виявити все термінове. +- **Перевірка стану людини**: “Checkup sometimes on your human during day time” спонукає + до зрідка легкого повідомлення “чи щось тобі потрібно?”, але без нічного спаму + завдяки використанню вашого налаштованого місцевого часового поясу (див. [/concepts/timezone](/uk/concepts/timezone)). -Heartbeat може реагувати на завершені [background tasks](/automation/tasks), але сам запуск heartbeat не створює запис завдання. +Heartbeat може реагувати на завершені [фонові завдання](/uk/automation/tasks), але сам запуск heartbeat не створює запису завдання. -Якщо ви хочете, щоб heartbeat робив щось дуже конкретне (наприклад, “перевірити статистику Gmail PubSub” -або “перевірити стан gateway”), установіть `agents.defaults.heartbeat.prompt` (або -`agents.list[].heartbeat.prompt`) у власне тіло prompt, яке надсилатиметься дослівно. +Якщо ви хочете, щоб heartbeat виконував щось дуже конкретне (наприклад, “перевір статистику Gmail PubSub” +або “перевір стан gateway”), задайте `agents.defaults.heartbeat.prompt` (або +`agents.list[].heartbeat.prompt`) як власне тіло prompt’а (надсилається дослівно). ## Контракт відповіді -- Якщо нічого не потребує уваги, дайте відповідь **`HEARTBEAT_OK`**. +- Якщо нічого не потребує уваги, відповідайте **`HEARTBEAT_OK`**. - Під час запусків heartbeat OpenClaw трактує `HEARTBEAT_OK` як підтвердження, якщо він з’являється - **на початку або в кінці** відповіді. Токен видаляється, а відповідь + на **початку або в кінці** відповіді. Токен видаляється, а відповідь відкидається, якщо решта вмісту має **≤ `ackMaxChars`** (типово: 300). -- Якщо `HEARTBEAT_OK` з’являється **в середині** відповіді, він не обробляється - особливим чином. +- Якщо `HEARTBEAT_OK` з’являється **посередині** відповіді, він не обробляється + спеціальним чином. - Для сповіщень **не** включайте `HEARTBEAT_OK`; повертайте лише текст сповіщення. Поза heartbeat випадковий `HEARTBEAT_OK` на початку/в кінці повідомлення видаляється -та записується в журнал; повідомлення, яке складається лише з `HEARTBEAT_OK`, відкидається. +і логуються; повідомлення, яке складається лише з `HEARTBEAT_OK`, відкидається. ## Конфігурація @@ -103,14 +106,14 @@ Heartbeat може реагувати на завершені [background tasks] heartbeat: { every: "30m", // типово: 30m (0m вимикає) model: "anthropic/claude-opus-4-6", - includeReasoning: false, // типово: false (доставляти окреме повідомлення Reasoning:, коли доступно) - lightContext: false, // типово: false; true залишає лише HEARTBEAT.md із bootstrap-файлів робочого простору + includeReasoning: false, // типово: false (доставляти окреме повідомлення Reasoning: коли доступне) + lightContext: false, // типово: false; true залишає лише HEARTBEAT.md з bootstrap-файлів робочого простору isolatedSession: false, // типово: false; true запускає кожен heartbeat у новій сесії (без історії розмови) target: "last", // типово: none | варіанти: last | none | (core або plugin, наприклад "bluebubbles") to: "+15551234567", // необов’язкове перевизначення для конкретного каналу - accountId: "ops-bot", // необов’язковий id каналу для multi-account + accountId: "ops-bot", // необов’язковий id каналу з кількома обліковими записами 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.", - ackMaxChars: 300, // макс. кількість символів після HEARTBEAT_OK + ackMaxChars: 300, // макс. кількість символів, дозволена після HEARTBEAT_OK }, }, }, @@ -120,18 +123,18 @@ Heartbeat може реагувати на завершені [background tasks] ### Область дії та пріоритет - `agents.defaults.heartbeat` задає глобальну поведінку heartbeat. -- `agents.list[].heartbeat` накладається поверх; якщо будь-який агент має блок `heartbeat`, heartbeat запускаються **лише для цих агентів**. -- `channels.defaults.heartbeat` задає типові налаштування видимості для всіх каналів. -- `channels..heartbeat` перевизначає типові налаштування каналу. -- `channels..accounts..heartbeat` (канали з кількома обліковими записами) перевизначає налаштування для конкретного каналу. +- `agents.list[].heartbeat` зливається поверх нього; якщо будь-який агент має блок `heartbeat`, heartbeat запускаються **лише для цих агентів**. +- `channels.defaults.heartbeat` задає типові параметри видимості для всіх каналів. +- `channels..heartbeat` перевизначає типові параметри каналу. +- `channels..accounts..heartbeat` (канали з кількома обліковими записами) перевизначає параметри для конкретного каналу. ### Heartbeat для окремих агентів -Якщо будь-який запис `agents.list[]` містить блок `heartbeat`, **лише ці агенти** -запускатимуть heartbeat. Блок для окремого агента накладається поверх `agents.defaults.heartbeat` -(тобто ви можете один раз задати спільні значення за замовчуванням і перевизначати їх для окремих агентів). +Якщо будь-який запис `agents.list[]` містить блок `heartbeat`, heartbeat запускаються **лише для цих агентів**. +Блок для окремого агента зливається поверх `agents.defaults.heartbeat` +(тож ви можете один раз задати спільні типові значення й перевизначити їх для окремих агентів). -Приклад: два агенти, heartbeat запускається лише для другого. +Приклад: два агенти, heartbeat запускається лише для другого агента. ```json5 { @@ -160,7 +163,7 @@ Heartbeat може реагувати на завершені [background tasks] ### Приклад активних годин -Обмежте heartbeat робочими годинами в певному часовому поясі: +Обмежте heartbeat робочими годинами в конкретному часовому поясі: ```json5 { @@ -180,21 +183,21 @@ Heartbeat може реагувати на завершені [background tasks] } ``` -Поза цим вікном (до 9 ранку або після 10 вечора за східним часом) heartbeat пропускаються. Наступний запланований тік у межах цього вікна відпрацює нормально. +Поза цим вікном (до 9:00 або після 22:00 за східним часом) heartbeat пропускаються. Наступний запланований тік усередині вікна відпрацює як зазвичай. ### Налаштування 24/7 -Якщо ви хочете, щоб heartbeat працювали весь день, використовуйте один із цих варіантів: +Якщо ви хочете, щоб heartbeat працювали весь день, використайте один із цих шаблонів: -- Повністю опустіть `activeHours` (без обмеження часовим вікном; це поведінка за замовчуванням). -- Установіть повноденне вікно: `activeHours: { start: "00:00", end: "24:00" }`. +- Повністю пропустіть `activeHours` (без обмеження часовим вікном; це типова поведінка). +- Задайте повноденне вікно: `activeHours: { start: "00:00", end: "24:00" }`. -Не встановлюйте однаковий час для `start` і `end` (наприклад, `08:00` до `08:00`). -Це вважається вікном нульової ширини, тому heartbeat завжди пропускаються. +Не задавайте однаковий час для `start` і `end` (наприклад, від `08:00` до `08:00`). +Це трактується як вікно нульової ширини, тому heartbeat завжди пропускаються. ### Приклад із кількома обліковими записами -Використовуйте `accountId`, щоб націлитися на конкретний обліковий запис у multi-account каналах, таких як Telegram: +Використовуйте `accountId`, щоб націлитися на конкретний обліковий запис у каналах із кількома обліковими записами, як-от Telegram: ```json5 { @@ -205,7 +208,7 @@ Heartbeat може реагувати на завершені [background tasks] heartbeat: { every: "1h", target: "telegram", - to: "12345678:topic:42", // необов’язково: спрямувати в конкретну тему/тред + to: "12345678:topic:42", // необов’язково: спрямувати до конкретної теми/гілки accountId: "ops-bot", }, }, @@ -223,67 +226,67 @@ Heartbeat може реагувати на завершені [background tasks] ### Примітки щодо полів -- `every`: інтервал heartbeat (рядок тривалості; одиниця за замовчуванням = хвилини). +- `every`: інтервал heartbeat (рядок тривалості; одиниця типово = хвилини). - `model`: необов’язкове перевизначення моделі для запусків heartbeat (`provider/model`). -- `includeReasoning`: якщо ввімкнено, також доставляє окреме повідомлення `Reasoning:`, коли воно доступне (така сама форма, як у `/reasoning on`). -- `lightContext`: якщо `true`, запуски heartbeat використовують полегшений bootstrap-контекст і залишають лише `HEARTBEAT.md` із bootstrap-файлів робочого простору. -- `isolatedSession`: якщо `true`, кожен heartbeat виконується в новій сесії без попередньої історії розмов. Використовує той самий шаблон ізоляції, що й cron `sessionTarget: "isolated"`. Різко зменшує витрати токенів на кожен heartbeat. Поєднуйте з `lightContext: true` для максимальної економії. Маршрутизація доставки все одно використовує контекст основної сесії. +- `includeReasoning`: якщо увімкнено, також доставляє окреме повідомлення `Reasoning:` коли воно доступне (той самий формат, що й для `/reasoning on`). +- `lightContext`: якщо true, запуски heartbeat використовують полегшений bootstrap-контекст і зберігають лише `HEARTBEAT.md` із bootstrap-файлів робочого простору. +- `isolatedSession`: якщо true, кожен heartbeat запускається в новій сесії без попередньої історії розмови. Використовує той самий шаблон ізоляції, що й cron `sessionTarget: "isolated"`. Радикально зменшує витрати токенів на кожен heartbeat. Поєднуйте з `lightContext: true` для максимальної економії. Маршрутизація доставки все одно використовує контекст основної сесії. - `session`: необов’язковий ключ сесії для запусків heartbeat. - `main` (типово): основна сесія агента. - - Явний ключ сесії (скопіюйте з `openclaw sessions --json` або з [sessions CLI](/cli/sessions)). - - Формати ключів сесій: див. [Sessions](/concepts/session) і [Groups](/channels/groups). + - Явний ключ сесії (скопіюйте з `openclaw sessions --json` або з [CLI сесій](/cli/sessions)). + - Формати ключів сесій: див. [Сесії](/uk/concepts/session) і [Групи](/uk/channels/groups). - `target`: - - `last`: доставити в останній використаний зовнішній канал. + - `last`: доставляти до останнього використаного зовнішнього каналу. - явний канал: будь-який налаштований канал або id plugin, наприклад `discord`, `matrix`, `telegram` або `whatsapp`. - - `none` (типово): виконати heartbeat, але **не доставляти** його назовні. -- `directPolicy`: керує поведінкою доставки в direct/DM: - - `allow` (типово): дозволяти доставку heartbeat у direct/DM. - - `block`: приглушити доставку в direct/DM (`reason=dm-blocked`). -- `to`: необов’язкове перевизначення отримувача (id, специфічний для каналу, наприклад E.164 для WhatsApp або id чату Telegram). Для тем/тредів Telegram використовуйте `:topic:`. -- `accountId`: необов’язковий id облікового запису для multi-account каналів. Якщо `target: "last"`, id облікового запису застосовується до визначеного останнього каналу, якщо він підтримує облікові записи; інакше ігнорується. Якщо id облікового запису не відповідає налаштованому обліковому запису для визначеного каналу, доставка пропускається. -- `prompt`: перевизначає типове тіло prompt (не зливається). + - `none` (типово): запускати heartbeat, але **не доставляти** назовні. +- `directPolicy`: керує поведінкою доставки напряму/в DM: + - `allow` (типово): дозволяти доставку heartbeat напряму/у DM. + - `block`: приглушити доставку напряму/у DM (`reason=dm-blocked`). +- `to`: необов’язкове перевизначення одержувача (id, специфічний для каналу, наприклад E.164 для WhatsApp або chat id Telegram). Для тем/гілок Telegram використовуйте `:topic:`. +- `accountId`: необов’язковий id облікового запису для каналів із кількома обліковими записами. Коли `target: "last"`, id облікового запису застосовується до визначеного останнього каналу, якщо він підтримує облікові записи; інакше ігнорується. Якщо id облікового запису не відповідає налаштованому обліковому запису для визначеного каналу, доставку буде пропущено. +- `prompt`: перевизначає типове тіло prompt’а (без злиття). - `ackMaxChars`: макс. кількість символів, дозволена після `HEARTBEAT_OK` перед доставкою. -- `suppressToolErrorWarnings`: якщо `true`, приглушує payload попереджень про помилки інструментів під час запусків heartbeat. -- `activeHours`: обмежує запуски heartbeat часовим вікном. Об’єкт із `start` (HH:MM, включно; використовуйте `00:00` для початку дня), `end` (HH:MM, невключно; для кінця дня дозволено `24:00`) і необов’язковим `timezone`. - - Пропущено або `"user"`: використовує ваш `agents.defaults.userTimezone`, якщо задано, інакше повертається до системного часового поясу хоста. - - `"local"`: завжди використовує системний часовий пояс хоста. - - Будь-який ідентифікатор IANA (наприклад, `America/New_York`): використовується напряму; якщо він недійсний, відбувається fallback до поведінки `"user"`, описаної вище. - - `start` і `end` не повинні бути однаковими для активного вікна; однакові значення вважаються нульовою шириною (завжди поза вікном). - - Поза активним вікном heartbeat пропускаються до наступного тіку в межах вікна. +- `suppressToolErrorWarnings`: якщо true, приглушує payload-и попереджень про помилки інструментів під час запусків heartbeat. +- `activeHours`: обмежує запуски heartbeat часовим вікном. Об’єкт із `start` (HH:MM, включно; використовуйте `00:00` для початку доби), `end` (HH:MM, не включно; `24:00` дозволено для кінця доби) та необов’язковим `timezone`. + - Пропущено або `"user"`: використовує ваш `agents.defaults.userTimezone`, якщо задано, інакше переходить до часового поясу системи хоста. + - `"local"`: завжди використовує часовий пояс системи хоста. + - Будь-який IANA-ідентифікатор (наприклад, `America/New_York`): використовується безпосередньо; якщо він недійсний, виконується перехід до поведінки `"user"` вище. + - `start` і `end` не мають бути однаковими для активного вікна; однакові значення трактуються як нульова ширина (завжди поза вікном). + - Поза активним вікном heartbeat пропускаються до наступного тіку всередині вікна. ## Поведінка доставки -- Heartbeat за замовчуванням виконуються в основній сесії агента (`agent::`), - або в `global`, коли `session.scope = "global"`. Установіть `session`, щоб перевизначити це на +- Heartbeat типово запускаються в основній сесії агента (`agent::`), + або в `global`, коли `session.scope = "global"`. Задайте `session`, щоб перевизначити це на конкретну сесію каналу (Discord/WhatsApp тощо). - `session` впливає лише на контекст запуску; доставкою керують `target` і `to`. -- Щоб доставляти в конкретний канал/отримувача, задайте `target` + `to`. З +- Щоб доставляти до конкретного каналу/одержувача, задайте `target` + `to`. З `target: "last"` доставка використовує останній зовнішній канал для цієї сесії. -- Доставки heartbeat за замовчуванням дозволяють цілі direct/DM. Установіть `directPolicy: "block"`, щоб приглушити надсилання на direct-цілі, але все одно виконати цикл heartbeat. +- Доставки heartbeat типово дозволяють напряму/у DM. Задайте `directPolicy: "block"`, щоб приглушити надсилання на прямі адресати, але все одно виконувати хід heartbeat. - Якщо основна черга зайнята, heartbeat пропускається й повторюється пізніше. -- Якщо `target` не розв’язується в жодну зовнішню ціль, запуск усе одно відбувається, але +- Якщо `target` не визначає жодного зовнішнього призначення, запуск усе одно відбувається, але вихідне повідомлення не надсилається. -- Якщо `showOk`, `showAlerts` і `useIndicator` усі вимкнені, запуск пропускається одразу з `reason=alerts-disabled`. -- Якщо вимкнено лише доставку сповіщень, OpenClaw усе одно може виконати heartbeat, оновити часові позначки належних завдань, відновити часову позначку idle сесії та приглушити зовнішній payload сповіщення. -- Відповіді лише heartbeat **не** підтримують активність сесії; останнє значення `updatedAt` - відновлюється, тому завершення строку бездіяльності працює нормально. -- Відокремлені [background tasks](/automation/tasks) можуть ставити системну подію в чергу та пробуджувати heartbeat, коли основній сесії потрібно швидко помітити щось важливе. Таке пробудження не робить запуск heartbeat фоновим завданням. +- Якщо `showOk`, `showAlerts` і `useIndicator` усі вимкнені, запуск пропускається відразу як `reason=alerts-disabled`. +- Якщо вимкнено лише доставку сповіщень, OpenClaw все одно може виконати heartbeat, оновити часові мітки завдань, відновити часову мітку простою сесії та приглушити зовнішній payload сповіщення. +- Відповіді лише для heartbeat **не** підтримують сесію активною; останнє значення `updatedAt` + відновлюється, щоб завершення через простій працювало як зазвичай. +- Відокремлені [фонові завдання](/uk/automation/tasks) можуть ставити в чергу системну подію й пробуджувати heartbeat, коли основна сесія має швидко щось помітити. Таке пробудження не перетворює heartbeat на фонове завдання. ## Керування видимістю -За замовчуванням підтвердження `HEARTBEAT_OK` приглушуються, а вміст сповіщень -доставляється. Ви можете налаштувати це для кожного каналу або облікового запису: +Типово підтвердження `HEARTBEAT_OK` приглушуються, а вміст сповіщень +доставляється. Ви можете налаштувати це для каналу або облікового запису: ```yaml channels: defaults: heartbeat: showOk: false # Приховати HEARTBEAT_OK (типово) - showAlerts: true # Показувати повідомлення-сповіщення (типово) - useIndicator: true # Видавати події індикатора (типово) + showAlerts: true # Показувати повідомлення сповіщень (типово) + useIndicator: true # Генерувати події індикатора (типово) telegram: heartbeat: - showOk: true # Показувати OK-підтвердження в Telegram + showOk: true # Показувати підтвердження OK у Telegram whatsapp: accounts: work: @@ -291,17 +294,17 @@ channels: showAlerts: false # Приглушити доставку сповіщень для цього облікового запису ``` -Пріоритет: для облікового запису → для каналу → типові налаштування каналу → вбудовані типові значення. +Пріоритет: для облікового запису → для каналу → типові значення каналу → вбудовані типові значення. ### Що робить кожен прапорець - `showOk`: надсилає підтвердження `HEARTBEAT_OK`, коли модель повертає відповідь лише з OK. - `showAlerts`: надсилає вміст сповіщення, коли модель повертає відповідь не-OK. -- `useIndicator`: видає події індикатора для поверхонь статусу UI. +- `useIndicator`: генерує події індикатора для UI-поверхонь стану. -Якщо **всі три** мають значення false, OpenClaw повністю пропускає запуск heartbeat (без виклику моделі). +Якщо **усі три** значення false, OpenClaw повністю пропускає запуск heartbeat (без виклику моделі). -### Приклади для каналу та облікового запису +### Приклади для каналу й облікового запису ```yaml channels: @@ -324,25 +327,30 @@ channels: ### Поширені шаблони -| Мета | Конфігурація | -| ---------------------------------------- | ------------------------------------------------------------------------------------------ | -| Поведінка за замовчуванням (тихі OK, сповіщення ввімкнені) | _(конфігурація не потрібна)_ | -| Повністю тихо (без повідомлень, без індикатора) | `channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false }` | -| Лише індикатор (без повідомлень) | `channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true }` | -| OK лише в одному каналі | `channels.telegram.heartbeat: { showOk: true }` | +| Ціль | Конфігурація | +| ---------------------------------------- | ---------------------------------------------------------------------------------------- | +| Типова поведінка (тихі OK, сповіщення увімкнено) | _(конфігурація не потрібна)_ | +| Повністю тихо (без повідомлень і без індикатора) | `channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false }` | +| Лише індикатор (без повідомлень) | `channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true }` | +| OK лише в одному каналі | `channels.telegram.heartbeat: { showOk: true }` | ## HEARTBEAT.md (необов’язково) -Якщо у робочому просторі існує файл `HEARTBEAT.md`, prompt за замовчуванням каже +Якщо у робочому просторі є файл `HEARTBEAT.md`, типовий prompt вказує агенту його прочитати. Сприймайте його як свій “контрольний список heartbeat”: невеликий, стабільний і безпечний для включення кожні 30 хвилин. -Якщо `HEARTBEAT.md` існує, але фактично порожній (лише порожні рядки та markdown-заголовки -на кшталт `# Heading`), OpenClaw пропускає запуск heartbeat, щоб заощадити виклики API. -Такий пропуск позначається як `reason=empty-heartbeat-file`. -Якщо файлу немає, heartbeat усе одно виконується, і модель сама вирішує, що робити. +Під час звичайних запусків `HEARTBEAT.md` інжектується лише тоді, коли +вказівки heartbeat увімкнено для типового агента. Вимкнення частоти heartbeat через `0m` або +задання `includeSystemPromptSection: false` прибирає його зі звичайного bootstrap- +контексту. -Тримайте його маленьким (короткий контрольний список або нагадування), щоб уникнути роздування prompt. +Якщо `HEARTBEAT.md` існує, але фактично порожній (лише порожні рядки та markdown- +заголовки на кшталт `# Heading`), OpenClaw пропускає запуск heartbeat, щоб заощадити виклики API. +Цей пропуск позначається як `reason=empty-heartbeat-file`. +Якщо файла немає, heartbeat усе одно запускається, і модель сама вирішує, що робити. + +Тримайте його коротким (невеликий контрольний список або нагадування), щоб уникати роздування prompt’а. Приклад `HEARTBEAT.md`: @@ -379,71 +387,72 @@ tasks: Поведінка: -- OpenClaw розбирає блок `tasks:` і перевіряє кожне завдання щодо його власного `interval`. -- До prompt heartbeat для цього тіку включаються лише **належні** завдання. -- Якщо немає жодного належного завдання, heartbeat повністю пропускається (`reason=no-tasks-due`), щоб уникнути марного виклику моделі. -- Вміст у `HEARTBEAT.md`, який не є завданнями, зберігається й додається як додатковий контекст після списку належних завдань. -- Часові позначки останнього запуску завдань зберігаються в стані сесії (`heartbeatTaskState`), тому інтервали переживають звичайні перезапуски. -- Часові позначки завдань просуваються вперед лише після того, як запуск heartbeat проходить свій звичайний шлях відповіді. Пропущені запуски `empty-heartbeat-file` / `no-tasks-due` не позначають завдання як завершені. +- OpenClaw розбирає блок `tasks:` і перевіряє кожне завдання за його власним `interval`. +- До prompt’а heartbeat для цього тіку включаються лише **прострочені** завдання. +- Якщо жодне завдання не прострочене, heartbeat повністю пропускається (`reason=no-tasks-due`), щоб уникнути марного виклику моделі. +- Вміст `HEARTBEAT.md`, що не належить до завдань, зберігається й додається як додатковий контекст після списку прострочених завдань. +- Часові мітки останнього запуску завдань зберігаються в стані сесії (`heartbeatTaskState`), тож інтервали переживають звичайні перезапуски. +- Часові мітки завдань оновлюються лише після того, як запуск heartbeat завершує свій звичайний шлях відповіді. Пропущені запуски `empty-heartbeat-file` / `no-tasks-due` не позначають завдання як виконані. -Режим завдань корисний, коли ви хочете, щоб один файл heartbeat містив кілька періодичних перевірок, але без витрат на всі з них у кожному тіку. +Режим завдань корисний, коли ви хочете, щоб один файл heartbeat містив кілька періодичних перевірок, не оплачуючи всі з них на кожному тікові. ### Чи може агент оновлювати HEARTBEAT.md? Так — якщо ви його про це попросите. -`HEARTBEAT.md` — це просто звичайний файл у робочому просторі агента, тож ви можете сказати +`HEARTBEAT.md` — це звичайний файл у робочому просторі агента, тож ви можете сказати агенту (у звичайному чаті) щось на кшталт: -- “Онови `HEARTBEAT.md`, додавши щоденну перевірку календаря.” +- “Онови `HEARTBEAT.md`, щоб додати щоденну перевірку календаря.” - “Перепиши `HEARTBEAT.md`, щоб він був коротшим і зосередженим на подальших діях щодо вхідних.” -Якщо ви хочете, щоб це відбувалося проактивно, можете також включити явний рядок у -свій prompt heartbeat на кшталт: “If the checklist becomes stale, update HEARTBEAT.md +Якщо ви хочете, щоб це відбувалося проактивно, ви також можете додати явний рядок до +свого prompt’а heartbeat, наприклад: “If the checklist becomes stale, update HEARTBEAT.md with a better one.” -Примітка щодо безпеки: не розміщуйте секрети (API ключі, номери телефонів, приватні токени) у -`HEARTBEAT.md` — він стає частиною контексту prompt. +Примітка щодо безпеки: не додавайте секрети (ключі API, номери телефонів, приватні токени) до +`HEARTBEAT.md` — він стає частиною контексту prompt’а. -## Ручне пробудження (на вимогу) +## Ручне пробудження (за запитом) -Ви можете поставити системну подію в чергу й одразу запустити heartbeat за допомогою: +Ви можете поставити системну подію в чергу й негайно запустити heartbeat за допомогою: ```bash openclaw system event --text "Check for urgent follow-ups" --mode now ``` -Якщо `heartbeat` налаштовано для кількох агентів, ручне пробудження негайно запустить heartbeat кожного з них. +Якщо `heartbeat` налаштовано для кількох агентів, ручне пробудження негайно запустить heartbeat кожного з цих +агентів. Використовуйте `--mode next-heartbeat`, щоб дочекатися наступного запланованого тіку. -## Доставка reasoning (необов’язково) +## Доставка міркувань (необов’язково) -За замовчуванням heartbeat доставляють лише фінальний payload “відповіді”. +Типово heartbeat доставляють лише фінальний payload “answer”. -Якщо ви хочете більшої прозорості, увімкніть: +Якщо ви хочете прозорості, увімкніть: - `agents.defaults.heartbeat.includeReasoning: true` -Якщо ввімкнено, heartbeat також доставлятимуть окреме повідомлення з префіксом -`Reasoning:` (така сама форма, як у `/reasoning on`). Це може бути корисно, коли агент -керує кількома сесіями/codex і ви хочете бачити, чому він вирішив вам написати -— але це також може розкрити більше внутрішніх деталей, ніж вам хотілося б. У групових чатах краще залишати це -вимкненим. +Коли це ввімкнено, heartbeat також доставлятимуть окреме повідомлення з префіксом +`Reasoning:` (той самий формат, що й для `/reasoning on`). Це може бути корисно, коли агент +керує кількома сесіями/codex і ви хочете бачити, чому він вирішив написати +вам — але це також може розкривати більше внутрішніх деталей, ніж вам потрібно. У групових чатах краще залишати цю опцію +вимкненою. -## Усвідомлення вартості +## Обізнаність щодо вартості -Heartbeat запускають повноцінні цикли агента. Коротші інтервали спалюють більше токенів. Щоб зменшити витрати: +Heartbeat виконують повні ходи агента. Коротші інтервали витрачають більше токенів. Щоб зменшити вартість: - Використовуйте `isolatedSession: true`, щоб не надсилати повну історію розмови (~100K токенів зменшується до ~2-5K на запуск). - Використовуйте `lightContext: true`, щоб обмежити bootstrap-файли лише `HEARTBEAT.md`. -- Задайте дешевшу `model` (наприклад, `ollama/llama3.2:1b`). +- Виберіть дешевшу `model` (наприклад, `ollama/llama3.2:1b`). - Тримайте `HEARTBEAT.md` невеликим. - Використовуйте `target: "none"`, якщо вам потрібні лише внутрішні оновлення стану. ## Пов’язане -- [Automation & Tasks](/automation) — огляд усіх механізмів автоматизації -- [Background Tasks](/automation/tasks) — як відстежується відокремлена робота -- [Timezone](/concepts/timezone) — як часовий пояс впливає на планування heartbeat -- [Troubleshooting](/automation/cron-jobs#troubleshooting) — налагодження проблем автоматизації +- [Автоматизація й завдання](/uk/automation) — усі механізми автоматизації з першого погляду +- [Фонові завдання](/uk/automation/tasks) — як відстежується відокремлена робота +- [Часовий пояс](/uk/concepts/timezone) — як часовий пояс впливає на планування heartbeat +- [Усунення проблем](/uk/automation/cron-jobs#troubleshooting) — налагодження проблем автоматизації