chore(i18n): refresh uk translations
This commit is contained in:
parent
f4eb5203c5
commit
b2a7a81645
@ -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 пропускається.
|
||||
</available_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`, коли це можливо (і звертатися до користувача лише тоді, коли доступу немає).
|
||||
|
||||
@ -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 | <channel id> (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.<channel>.heartbeat` перевизначає типові налаштування каналу.
|
||||
- `channels.<channel>.accounts.<id>.heartbeat` (канали з кількома обліковими записами) перевизначає налаштування для конкретного каналу.
|
||||
- `agents.list[].heartbeat` зливається поверх нього; якщо будь-який агент має блок `heartbeat`, heartbeat запускаються **лише для цих агентів**.
|
||||
- `channels.defaults.heartbeat` задає типові параметри видимості для всіх каналів.
|
||||
- `channels.<channel>.heartbeat` перевизначає типові параметри каналу.
|
||||
- `channels.<channel>.accounts.<id>.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 використовуйте `<chatId>:topic:<messageThreadId>`.
|
||||
- `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 використовуйте `<chatId>:topic:<messageThreadId>`.
|
||||
- `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:<id>:<mainKey>`),
|
||||
або в `global`, коли `session.scope = "global"`. Установіть `session`, щоб перевизначити це на
|
||||
- Heartbeat типово запускаються в основній сесії агента (`agent:<id>:<mainKey>`),
|
||||
або в `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) — налагодження проблем автоматизації
|
||||
|
||||
Loading…
Reference in New Issue
Block a user