chore(i18n): refresh uk translations
This commit is contained in:
parent
92de6e4d6c
commit
cb837b9910
@ -1,28 +1,28 @@
|
||||
---
|
||||
read_when:
|
||||
- Налаштування Slack або налагодження режиму socket/HTTP у Slack
|
||||
- Налаштування Slack або налагодження режиму сокета/HTTP у Slack
|
||||
summary: Налаштування Slack і поведінка під час виконання (Socket Mode + URL-адреси HTTP-запитів)
|
||||
title: Slack
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T23:03:44Z"
|
||||
generated_at: "2026-04-24T23:30:39Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: aef3302e3c535f6e4eaba8460b3a89fcfa7043a8a6da856f4a734c2d997c9374
|
||||
source_hash: d0ab5b0865102175477bacac2ef948cdb2e42892fdfd5adb73afe89f0f482de5
|
||||
source_path: channels/slack.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
Готово до продакшн-використання для приватних повідомлень і каналів через інтеграції застосунку Slack. Режим за замовчуванням — Socket Mode; також підтримуються URL-адреси HTTP-запитів.
|
||||
Готово до production для особистих повідомлень і каналів через інтеграції застосунку Slack. Режим за замовчуванням — Socket Mode; також підтримуються URL-адреси HTTP-запитів.
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="Сполучення" icon="link" href="/uk/channels/pairing">
|
||||
Для приватних повідомлень Slack за замовчуванням використовується режим сполучення.
|
||||
<Card title="Прив’язка" icon="link" href="/uk/channels/pairing">
|
||||
Для особистих повідомлень Slack режим прив’язки використовується за замовчуванням.
|
||||
</Card>
|
||||
<Card title="Slash-команди" icon="terminal" href="/uk/tools/slash-commands">
|
||||
Нативна поведінка команд і каталог команд.
|
||||
<Card title="Слеш-команди" icon="terminal" href="/uk/tools/slash-commands">
|
||||
Вбудована поведінка команд і каталог команд.
|
||||
</Card>
|
||||
<Card title="Усунення проблем каналів" icon="wrench" href="/uk/channels/troubleshooting">
|
||||
Діагностика між каналами та сценарії виправлення.
|
||||
<Card title="Усунення проблем із каналами" icon="wrench" href="/uk/channels/troubleshooting">
|
||||
Міжканальна діагностика та інструкції з відновлення.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@ -34,8 +34,8 @@ x-i18n:
|
||||
<Step title="Створіть новий застосунок Slack">
|
||||
У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**:
|
||||
|
||||
- виберіть **from a manifest** і виберіть робочий простір для вашого застосунку
|
||||
- вставте [приклад маніфесту](#manifest-and-scope-checklist) нижче та продовжуйте створення
|
||||
- виберіть **from a manifest** і виберіть робочий простір для свого застосунку
|
||||
- вставте [приклад маніфесту](#manifest-and-scope-checklist) нижче та продовжте створення
|
||||
- згенеруйте **App-Level Token** (`xapp-...`) з `connections:write`
|
||||
- встановіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
|
||||
</Step>
|
||||
@ -55,7 +55,7 @@ x-i18n:
|
||||
}
|
||||
```
|
||||
|
||||
Резервне значення через змінні середовища (лише для облікового запису за замовчуванням):
|
||||
Резервний варіант через змінні середовища (лише для облікового запису за замовчуванням):
|
||||
|
||||
```bash
|
||||
SLACK_APP_TOKEN=xapp-...
|
||||
@ -80,7 +80,7 @@ openclaw gateway
|
||||
<Step title="Створіть новий застосунок Slack">
|
||||
У налаштуваннях застосунку Slack натисніть кнопку **[Create New App](https://api.slack.com/apps/new)**:
|
||||
|
||||
- виберіть **from a manifest** і виберіть робочий простір для вашого застосунку
|
||||
- виберіть **from a manifest** і виберіть робочий простір для свого застосунку
|
||||
- вставте [приклад маніфесту](#manifest-and-scope-checklist) і оновіть URL-адреси перед створенням
|
||||
- збережіть **Signing Secret** для перевірки запитів
|
||||
- встановіть застосунок і скопіюйте показаний **Bot Token** (`xoxb-...`)
|
||||
@ -104,9 +104,9 @@ openclaw gateway
|
||||
```
|
||||
|
||||
<Note>
|
||||
Використовуйте унікальні шляхи webhook для багатьох HTTP-облікових записів
|
||||
Використовуйте унікальні шляхи Webhook для багатокористувацького HTTP
|
||||
|
||||
Надайте кожному обліковому запису окремий `webhookPath` (за замовчуванням `/slack/events`), щоб реєстрації не конфліктували.
|
||||
Для кожного облікового запису задавайте окремий `webhookPath` (типово `/slack/events`), щоб реєстрації не конфліктували.
|
||||
</Note>
|
||||
|
||||
</Step>
|
||||
@ -125,7 +125,7 @@ openclaw gateway
|
||||
|
||||
## Контрольний список маніфесту та scope
|
||||
|
||||
Базовий маніфест застосунку Slack однаковий для Socket Mode і URL-адрес HTTP-запитів. Відрізняється лише блок `settings` (і `url` для slash-команди).
|
||||
Базовий маніфест застосунку Slack однаковий для Socket Mode і URL-адрес HTTP-запитів. Відрізняється лише блок `settings` (і `url` слеш-команди).
|
||||
|
||||
Базовий маніфест (Socket Mode за замовчуванням):
|
||||
|
||||
@ -199,7 +199,7 @@ openclaw gateway
|
||||
}
|
||||
```
|
||||
|
||||
Для **режиму URL-адрес HTTP-запитів** замініть `settings` на HTTP-варіант і додайте `url` до кожної slash-команди. Потрібна публічна URL-адреса:
|
||||
Для **режиму URL-адрес HTTP-запитів** замініть `settings` на HTTP-варіант і додайте `url` до кожної слеш-команди. Потрібна публічна URL-адреса:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -229,19 +229,19 @@ openclaw gateway
|
||||
}
|
||||
```
|
||||
|
||||
### Додаткові параметри маніфесту
|
||||
### Додаткові налаштування маніфесту
|
||||
|
||||
Показують різні можливості, які розширюють наведені вище параметри за замовчуванням.
|
||||
Описано різні можливості, які розширюють наведені вище значення за замовчуванням.
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Необов’язкові нативні slash-команди">
|
||||
<Accordion title="Необов’язкові вбудовані слеш-команди">
|
||||
|
||||
Замість однієї налаштованої команди з нюансами можна використовувати кілька [нативних slash-команд](#commands-and-slash-behavior):
|
||||
Можна використовувати кілька [вбудованих слеш-команд](#commands-and-slash-behavior) замість однієї налаштованої команди, з такими нюансами:
|
||||
|
||||
- Використовуйте `/agentstatus` замість `/status`, оскільки команда `/status` зарезервована.
|
||||
- Одночасно можна зробити доступними не більше 25 slash-команд.
|
||||
- Одночасно можна зробити доступними не більше 25 слеш-команд.
|
||||
|
||||
Замініть наявний розділ `features.slash_commands` підмножиною [доступних команд](/uk/tools/slash-commands#command-list):
|
||||
Замініть наявний розділ `features.slash_commands` на підмножину [доступних команд](/uk/tools/slash-commands#command-list):
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Socket Mode (за замовчуванням)">
|
||||
@ -385,9 +385,9 @@ openclaw gateway
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="Необов’язкові scope авторства (операції запису)">
|
||||
Додайте bot scope `chat:write.customize`, якщо хочете, щоб у вихідних повідомленнях використовувалася identity активного агента (власне ім’я користувача та піктограма) замість identity застосунку Slack за замовчуванням.
|
||||
Додайте bot scope `chat:write.customize`, якщо хочете, щоб вихідні повідомлення використовували активну ідентичність агента (власні ім’я користувача та іконку) замість типової ідентичності застосунку Slack.
|
||||
|
||||
Якщо ви використовуєте піктограму emoji, Slack очікує синтаксис `:emoji_name:`.
|
||||
Якщо ви використовуєте іконку emoji, Slack очікує синтаксис `:emoji_name:`.
|
||||
</Accordion>
|
||||
<Accordion title="Необов’язкові scope токена користувача (операції читання)">
|
||||
Якщо ви налаштовуєте `channels.slack.userToken`, типовими scope читання є:
|
||||
@ -405,27 +405,27 @@ openclaw gateway
|
||||
|
||||
## Модель токенів
|
||||
|
||||
- `botToken` + `appToken` обов’язкові для Socket Mode.
|
||||
- Для HTTP-режиму потрібні `botToken` + `signingSecret`.
|
||||
- `botToken`, `appToken`, `signingSecret` і `userToken` приймають відкриті
|
||||
- Для Socket Mode потрібні `botToken` + `appToken`.
|
||||
- Для HTTP mode потрібні `botToken` + `signingSecret`.
|
||||
- `botToken`, `appToken`, `signingSecret` і `userToken` приймають звичайні текстові
|
||||
рядки або об’єкти SecretRef.
|
||||
- Токени в конфігурації мають пріоритет над резервними значеннями зі змінних середовища.
|
||||
- Резервні значення через змінні середовища `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовуються лише до облікового запису за замовчуванням.
|
||||
- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного значення через змінні середовища) і за замовчуванням працює лише в режимі читання (`userTokenReadOnly: true`).
|
||||
- Резервне значення зі змінних середовища `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` застосовується лише до облікового запису за замовчуванням.
|
||||
- `userToken` (`xoxp-...`) доступний лише в конфігурації (без резервного значення через змінні середовища) і за замовчуванням працює лише для читання (`userTokenReadOnly: true`).
|
||||
|
||||
Поведінка знімка стану:
|
||||
|
||||
- Перевірка облікового запису Slack відстежує поля `*Source` і `*Status`
|
||||
для кожного облікового запису (`botToken`, `appToken`, `signingSecret`, `userToken`).
|
||||
- Перевірка облікового запису Slack відстежує для кожних облікових даних поля
|
||||
`*Source` і `*Status` (`botToken`, `appToken`, `signingSecret`, `userToken`).
|
||||
- Статус може бути `available`, `configured_unavailable` або `missing`.
|
||||
- `configured_unavailable` означає, що обліковий запис налаштовано через SecretRef
|
||||
або інше неінлайнове джерело секретів, але поточний шлях команди/виконання
|
||||
або інше не вбудоване джерело секретів, але поточний шлях команди/виконання
|
||||
не зміг визначити фактичне значення.
|
||||
- У HTTP-режимі включається `signingSecretStatus`; у Socket Mode
|
||||
обов’язковою парою є `botTokenStatus` + `appTokenStatus`.
|
||||
- У HTTP mode включається `signingSecretStatus`; у Socket Mode
|
||||
потрібна пара — `botTokenStatus` + `appTokenStatus`.
|
||||
|
||||
<Tip>
|
||||
Для дій/читання каталогу токен користувача може мати пріоритет, якщо його налаштовано. Для запису пріоритетним лишається токен бота; запис через токен користувача дозволяється лише коли `userTokenReadOnly: false`, а токен бота недоступний.
|
||||
Для дій/читання каталогів може надаватися перевага токену користувача, якщо його налаштовано. Для запису перевага все одно надається bot token; запис через user token дозволений лише коли `userTokenReadOnly: false`, а bot token недоступний.
|
||||
</Tip>
|
||||
|
||||
## Дії та обмеження
|
||||
@ -434,8 +434,8 @@ openclaw gateway
|
||||
|
||||
Доступні групи дій у поточному інструментарії Slack:
|
||||
|
||||
| Група | За замовчуванням |
|
||||
| ---------- | ---------------- |
|
||||
| Група | Типово |
|
||||
| ---------- | ------- |
|
||||
| messages | enabled |
|
||||
| reactions | enabled |
|
||||
| pins | enabled |
|
||||
@ -447,29 +447,29 @@ openclaw gateway
|
||||
## Керування доступом і маршрутизація
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Політика приватних повідомлень">
|
||||
`channels.slack.dmPolicy` керує доступом до приватних повідомлень (застаріле: `channels.slack.dm.policy`):
|
||||
<Tab title="Політика DM">
|
||||
`channels.slack.dmPolicy` керує доступом до DM (застаріле: `channels.slack.dm.policy`):
|
||||
|
||||
- `pairing` (за замовчуванням)
|
||||
- `pairing` (типово)
|
||||
- `allowlist`
|
||||
- `open` (потребує, щоб `channels.slack.allowFrom` містив `"*"`; застаріле: `channels.slack.dm.allowFrom`)
|
||||
- `disabled`
|
||||
|
||||
Прапорці приватних повідомлень:
|
||||
Прапорці DM:
|
||||
|
||||
- `dm.enabled` (за замовчуванням true)
|
||||
- `dm.enabled` (типово true)
|
||||
- `channels.slack.allowFrom` (рекомендовано)
|
||||
- `dm.allowFrom` (застаріле)
|
||||
- `dm.groupEnabled` (для групових приватних повідомлень за замовчуванням false)
|
||||
- `dm.groupChannels` (необов’язковий allowlist для MPIM)
|
||||
- `dm.groupEnabled` (для групових DM типово false)
|
||||
- `dm.groupChannels` (необов’язковий allowlist MPIM)
|
||||
|
||||
Пріоритет для багатьох облікових записів:
|
||||
Пріоритет для кількох облікових записів:
|
||||
|
||||
- `channels.slack.accounts.default.allowFrom` застосовується лише до облікового запису `default`.
|
||||
- Іменовані облікові записи успадковують `channels.slack.allowFrom`, якщо їхній власний `allowFrom` не задано.
|
||||
- Іменовані облікові записи не успадковують `channels.slack.accounts.default.allowFrom`.
|
||||
|
||||
Pairing у приватних повідомленнях використовує `openclaw pairing approve slack <code>`.
|
||||
Прив’язка в DM використовує `openclaw pairing approve slack <code>`.
|
||||
|
||||
</Tab>
|
||||
|
||||
@ -480,28 +480,28 @@ openclaw gateway
|
||||
- `allowlist`
|
||||
- `disabled`
|
||||
|
||||
Allowlist каналів розміщується в `channels.slack.channels` і має використовувати стабільні ID каналів.
|
||||
Allowlist каналів знаходиться в `channels.slack.channels` і має використовувати стабільні ID каналів.
|
||||
|
||||
Примітка щодо виконання: якщо `channels.slack` повністю відсутній (налаштування лише через змінні середовища), під час виконання використовується резервне значення `groupPolicy="allowlist"` і записується попередження в журнал (навіть якщо встановлено `channels.defaults.groupPolicy`).
|
||||
Примітка щодо runtime: якщо `channels.slack` повністю відсутній (налаштування лише через env), runtime використовує резервне значення `groupPolicy="allowlist"` і записує попередження в журнал (навіть якщо задано `channels.defaults.groupPolicy`).
|
||||
|
||||
Визначення імені/ID:
|
||||
Визначення імен/ID:
|
||||
|
||||
- записи allowlist каналів і записи allowlist приватних повідомлень визначаються під час запуску, якщо доступ токена це дозволяє
|
||||
- записи імен каналів, які не вдалося визначити, зберігаються як налаштовані, але за замовчуванням ігноруються для маршрутизації
|
||||
- авторизація вхідних повідомлень і маршрутизація каналів за замовчуванням орієнтуються спочатку на ID; пряме зіставлення імені користувача/slug потребує `channels.slack.dangerouslyAllowNameMatching: true`
|
||||
- записи allowlist каналів і DM allowlist визначаються під час запуску, якщо доступ токена це дозволяє
|
||||
- нерозпізнані записи назв каналів зберігаються як налаштовано, але типово ігноруються під час маршрутизації
|
||||
- авторизація вхідних повідомлень і маршрутизація каналів типово працюють за принципом ID-first; пряме зіставлення імен користувачів/slug потребує `channels.slack.dangerouslyAllowNameMatching: true`
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="Згадки та користувачі каналів">
|
||||
Повідомлення в каналах за замовчуванням обробляються лише за наявності згадки.
|
||||
Повідомлення в каналах типово проходять через обмеження за згадками.
|
||||
|
||||
Джерела згадок:
|
||||
|
||||
- явна згадка застосунку (`<@botId>`)
|
||||
- шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервне значення — `messages.groupChat.mentionPatterns`)
|
||||
- неявна поведінка відповіді в треді боту (вимикається, коли `thread.requireExplicitMention` має значення `true`)
|
||||
- шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервне значення `messages.groupChat.mentionPatterns`)
|
||||
- неявна поведінка reply-to-bot у тредах (вимикається, коли `thread.requireExplicitMention` має значення `true`)
|
||||
|
||||
Керування на рівні каналу (`channels.slack.channels.<id>`; імена — лише через визначення під час запуску або `dangerouslyAllowNameMatching`):
|
||||
Керування для кожного каналу (`channels.slack.channels.<id>`; імена лише через визначення під час запуску або `dangerouslyAllowNameMatching`):
|
||||
|
||||
- `requireMention`
|
||||
- `users` (allowlist)
|
||||
@ -509,45 +509,45 @@ openclaw gateway
|
||||
- `skills`
|
||||
- `systemPrompt`
|
||||
- `tools`, `toolsBySender`
|
||||
- формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або шаблон `"*"`
|
||||
- формат ключа `toolsBySender`: `id:`, `e164:`, `username:`, `name:` або wildcard `"*"`
|
||||
(застарілі ключі без префікса, як і раніше, зіставляються лише з `id:`)
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Треди, сесії та теги відповідей
|
||||
## Треди, сесії та теги відповіді
|
||||
|
||||
- Приватні повідомлення маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`.
|
||||
- Із типовим `session.dmScope=main` приватні повідомлення Slack згортаються в основну сесію агента.
|
||||
- DM маршрутизуються як `direct`; канали — як `channel`; MPIM — як `group`.
|
||||
- Із типовим `session.dmScope=main` DM у Slack згортаються в основну сесію агента.
|
||||
- Сесії каналів: `agent:<agentId>:slack:channel:<channelId>`.
|
||||
- Відповіді в треді можуть створювати суфікси сесій треду (`:thread:<threadTs>`), коли це застосовно.
|
||||
- Відповіді в тредах можуть створювати суфікси сесій тредів (`:thread:<threadTs>`), коли це застосовно.
|
||||
- Типове значення `channels.slack.thread.historyScope` — `thread`; типове значення `thread.inheritParent` — `false`.
|
||||
- `channels.slack.thread.initialHistoryLimit` керує кількістю наявних повідомлень треду, які отримуються під час запуску нової сесії треду (за замовчуванням `20`; встановіть `0`, щоб вимкнути).
|
||||
- `channels.slack.thread.requireExplicitMention` (за замовчуванням `false`): якщо `true`, пригнічує неявні згадки в треді, тож бот відповідає лише на явні згадки `@bot` усередині тредів, навіть якщо бот уже брав участь у треді. Без цього відповіді в треді, де бот уже брав участь, обходять обмеження `requireMention`.
|
||||
- `channels.slack.thread.initialHistoryLimit` визначає, скільки наявних повідомлень треду буде отримано, коли починається нова сесія треду (типово `20`; встановіть `0`, щоб вимкнути).
|
||||
- `channels.slack.thread.requireExplicitMention` (типово `false`): коли має значення `true`, неявні згадки в тредах пригнічуються, і бот відповідає лише на явні згадки `@bot` усередині тредів, навіть якщо бот уже брав участь у треді. Без цього відповіді в треді за участю бота обходять обмеження `requireMention`.
|
||||
|
||||
Елементи керування тредами відповідей:
|
||||
Керування тредами відповідей:
|
||||
|
||||
- `channels.slack.replyToMode`: `off|first|all|batched` (за замовчуванням `off`)
|
||||
- `channels.slack.replyToModeByChatType`: для кожного `direct|group|channel`
|
||||
- `channels.slack.replyToMode`: `off|first|all|batched` (типово `off`)
|
||||
- `channels.slack.replyToModeByChatType`: для `direct|group|channel`
|
||||
- застаріле резервне значення для прямих чатів: `channels.slack.dm.replyToMode`
|
||||
|
||||
Підтримуються ручні теги відповідей:
|
||||
Підтримуються ручні теги відповіді:
|
||||
|
||||
- `[[reply_to_current]]`
|
||||
- `[[reply_to:<id>]]`
|
||||
|
||||
Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі `"off"` — у Slack треди приховують повідомлення з каналу, тоді як відповіді в Telegram залишаються видимими вбудовано.
|
||||
Примітка: `replyToMode="off"` вимикає **усі** треди відповідей у Slack, включно з явними тегами `[[reply_to_*]]`. Це відрізняється від Telegram, де явні теги все ще враховуються в режимі `"off"` — треди Slack приховують повідомлення з каналу, тоді як відповіді Telegram залишаються видимими вбудовано.
|
||||
|
||||
## Реакції підтвердження
|
||||
## Реакції-підтвердження
|
||||
|
||||
`ackReaction` надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення.
|
||||
`ackReaction` надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення.
|
||||
|
||||
Порядок визначення:
|
||||
|
||||
- `channels.slack.accounts.<accountId>.ackReaction`
|
||||
- `channels.slack.ackReaction`
|
||||
- `messages.ackReaction`
|
||||
- резервне значення emoji identity агента (`agents.list[].identity.emoji`, інакше "👀")
|
||||
- резервне значення emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
|
||||
|
||||
Примітки:
|
||||
|
||||
@ -556,22 +556,22 @@ openclaw gateway
|
||||
|
||||
## Потокова передача тексту
|
||||
|
||||
`channels.slack.streaming` керує поведінкою попереднього перегляду в реальному часі:
|
||||
`channels.slack.streaming` керує поведінкою live preview:
|
||||
|
||||
- `off`: вимкнути потоковий попередній перегляд у реальному часі.
|
||||
- `partial` (за замовчуванням): замінювати текст попереднього перегляду найновішим частковим виводом.
|
||||
- `block`: додавати фрагментовані оновлення попереднього перегляду.
|
||||
- `progress`: показувати текст стану поступу під час генерування, а потім надсилати остаточний текст.
|
||||
- `streaming.preview.toolProgress`: коли активний чернетковий попередній перегляд, спрямовувати оновлення інструментів/поступу в те саме редаговане повідомлення попереднього перегляду (за замовчуванням: `true`). Встановіть `false`, щоб зберегти окремі повідомлення для інструментів/поступу.
|
||||
- `off`: вимкнути потокову live preview.
|
||||
- `partial` (типово): замінювати текст попереднього перегляду останнім частковим виводом.
|
||||
- `block`: додавати оновлення попереднього перегляду частинами.
|
||||
- `progress`: показувати текст стану прогресу під час генерації, а потім надсилати фінальний текст.
|
||||
- `streaming.preview.toolProgress`: коли чернетковий попередній перегляд активний, спрямовувати оновлення інструментів/прогресу в те саме редаговане повідомлення попереднього перегляду (типово: `true`). Встановіть `false`, щоб залишити окремі повідомлення інструментів/прогресу.
|
||||
|
||||
`channels.slack.streaming.nativeTransport` керує нативною потоковою передачею тексту Slack, коли `channels.slack.streaming.mode` має значення `partial` (за замовчуванням: `true`).
|
||||
`channels.slack.streaming.nativeTransport` керує нативною потоковою передачею тексту Slack, коли `channels.slack.streaming.mode` має значення `partial` (типово: `true`).
|
||||
|
||||
- Для нативної потокової передачі тексту та відображення стану треду асистента Slack має бути доступний тред відповіді. Вибір треду, як і раніше, визначається `replyToMode`.
|
||||
- Кореневі повідомлення в каналах і групових чатах усе ще можуть використовувати звичайний чернетковий попередній перегляд, коли нативна потокова передача недоступна.
|
||||
- Приватні повідомлення Slack верхнього рівня за замовчуванням лишаються поза тредами, тому не показують попередній перегляд у стилі треду; використовуйте відповіді в треді або `typingReaction`, якщо хочете бачити поступ там.
|
||||
- Для медіа й нетекстових payload використовується звичайна доставка.
|
||||
- Остаточні медіа/помилкові відповіді скасовують очікувані редагування попереднього перегляду; придатні остаточні текстові/block-відповіді скидаються лише тоді, коли можуть редагувати попередній перегляд на місці.
|
||||
- Якщо потокова передача зламається посеред відповіді, OpenClaw повертається до звичайної доставки для решти payload.
|
||||
- Для нативної потокової передачі тексту та появи статусу треду Slack assistant має бути доступний тред відповіді. Вибір треду, як і раніше, підпорядковується `replyToMode`.
|
||||
- Корені каналів і групових чатів усе ще можуть використовувати звичайний чернетковий попередній перегляд, коли нативна потокова передача недоступна.
|
||||
- DM верхнього рівня в Slack типово залишаються поза тредами, тому не показують попередній перегляд у стилі треду; використовуйте відповіді в тредах або `typingReaction`, якщо там потрібен видимий прогрес.
|
||||
- Для медіа та нетекстових payload використовується звичайне доставлення.
|
||||
- Фінальні повідомлення media/error скасовують відкладені редагування попереднього перегляду; придатні фінальні повідомлення text/block скидаються лише тоді, коли можуть відредагувати попередній перегляд на місці.
|
||||
- Якщо потокова передача зламається посеред відповіді, OpenClaw переходить на звичайне доставлення для решти payload.
|
||||
|
||||
Використовуйте чернетковий попередній перегляд замість нативної потокової передачі тексту Slack:
|
||||
|
||||
@ -590,13 +590,13 @@ openclaw gateway
|
||||
|
||||
Застарілі ключі:
|
||||
|
||||
- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрується до `channels.slack.streaming.mode`.
|
||||
- булеве `channels.slack.streaming` автоматично мігрується до `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`.
|
||||
- застаріле `channels.slack.nativeStreaming` автоматично мігрується до `channels.slack.streaming.nativeTransport`.
|
||||
- `channels.slack.streamMode` (`replace | status_final | append`) автоматично мігрує до `channels.slack.streaming.mode`.
|
||||
- булеве значення `channels.slack.streaming` автоматично мігрує до `channels.slack.streaming.mode` і `channels.slack.streaming.nativeTransport`.
|
||||
- застаріле `channels.slack.nativeStreaming` автоматично мігрує до `channels.slack.streaming.nativeTransport`.
|
||||
|
||||
## Резервна реакція введення
|
||||
## Резервна реакція набору тексту
|
||||
|
||||
`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення виконання. Це найбільш корисно поза відповідями в треді, де використовується типовий індикатор стану "is typing...".
|
||||
`typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки OpenClaw обробляє відповідь, а потім видаляє її після завершення виконання. Це найкорисніше поза відповідями в тредах, де використовується типовий індикатор стану "is typing...".
|
||||
|
||||
Порядок визначення:
|
||||
|
||||
@ -606,39 +606,39 @@ openclaw gateway
|
||||
Примітки:
|
||||
|
||||
- Slack очікує shortcodes (наприклад, `"hourglass_flowing_sand"`).
|
||||
- Реакція є best-effort, і після завершення відповіді або шляху помилки автоматично робиться спроба очищення.
|
||||
- Реакція виконується за принципом best-effort, а очищення автоматично намагається виконатися після завершення відповіді або шляху помилки.
|
||||
|
||||
## Медіа, розбиття на частини та доставка
|
||||
## Медіа, розбиття на частини та доставлення
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Вхідні вкладення">
|
||||
Вкладення файлів Slack завантажуються з приватних URL-адрес, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне та дозволяють обмеження розміру.
|
||||
Файлові вкладення Slack завантажуються з приватних URL-адрес, розміщених у Slack (потік запитів з автентифікацією токеном), і записуються до сховища медіа, якщо отримання успішне та дозволяють обмеження розміру.
|
||||
|
||||
Типове обмеження розміру вхідних даних під час виконання — `20MB`, якщо його не перевизначено через `channels.slack.mediaMaxMb`.
|
||||
Типове обмеження розміру вхідних даних у runtime — `20MB`, якщо не перевизначено через `channels.slack.mediaMaxMb`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Вихідний текст і файли">
|
||||
- текстові частини використовують `channels.slack.textChunkLimit` (за замовчуванням 4000)
|
||||
- текстові частини використовують `channels.slack.textChunkLimit` (типово 4000)
|
||||
- `channels.slack.chunkMode="newline"` вмикає розбиття спочатку за абзацами
|
||||
- надсилання файлів використовує API завантаження Slack і може включати відповіді в треді (`thread_ts`)
|
||||
- обмеження вихідних медіа використовує `channels.slack.mediaMaxMb`, якщо налаштовано; інакше надсилання в канали використовує типові значення MIME-kind із конвеєра медіа
|
||||
- надсилання файлів використовує API завантаження Slack і може включати відповіді в тредах (`thread_ts`)
|
||||
- обмеження вихідних медіа дотримується `channels.slack.mediaMaxMb`, якщо його налаштовано; інакше надсилання в канал використовують типові значення MIME-kind із медіапайплайна
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Цілі доставки">
|
||||
<Accordion title="Цілі доставлення">
|
||||
Бажані явні цілі:
|
||||
|
||||
- `user:<id>` для приватних повідомлень
|
||||
- `user:<id>` для DM
|
||||
- `channel:<id>` для каналів
|
||||
|
||||
Приватні повідомлення Slack відкриваються через API розмов Slack під час надсилання до цілей користувача.
|
||||
DM у Slack відкриваються через API розмов Slack під час надсилання до цілей користувача.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Команди та поведінка slash-команд
|
||||
## Команди та поведінка слеш-команд
|
||||
|
||||
Slash-команди відображаються в Slack або як одна налаштована команда, або як кілька нативних команд. Налаштуйте `channels.slack.slashCommand`, щоб змінити типові параметри команди:
|
||||
Слеш-команди відображаються в Slack або як одна налаштована команда, або як кілька вбудованих команд. Налаштуйте `channels.slack.slashCommand`, щоб змінити типові параметри команди:
|
||||
|
||||
- `enabled: false`
|
||||
- `name: "openclaw"`
|
||||
@ -649,32 +649,32 @@ Slash-команди відображаються в Slack або як одна
|
||||
/openclaw /help
|
||||
```
|
||||
|
||||
Нативні команди потребують [додаткових параметрів маніфесту](#additional-manifest-settings) у вашому застосунку Slack і вмикаються через `channels.slack.commands.native: true` або натомість через `commands.native: true` у глобальних конфігураціях.
|
||||
Вбудовані команди потребують [додаткових налаштувань маніфесту](#additional-manifest-settings) у вашому застосунку Slack і вмикаються через `channels.slack.commands.native: true` або `commands.native: true` у глобальних конфігураціях.
|
||||
|
||||
- Автоматичний режим нативних команд для Slack **вимкнений**, тому `commands.native: "auto"` не вмикає нативні команди Slack.
|
||||
- Режим auto для вбудованих команд у Slack **вимкнений**, тому `commands.native: "auto"` не вмикає вбудовані команди Slack.
|
||||
|
||||
```txt
|
||||
/help
|
||||
```
|
||||
|
||||
Нативні меню аргументів використовують адаптивну стратегію рендерингу, яка показує модальне вікно підтвердження перед відправленням вибраного значення параметра:
|
||||
Меню аргументів вбудованих команд використовують адаптивну стратегію рендерингу, яка показує модальне вікно підтвердження перед відправленням значення вибраного параметра:
|
||||
|
||||
- до 5 параметрів: блоки кнопок
|
||||
- 6–100 параметрів: статичне меню вибору
|
||||
- понад 100 параметрів: зовнішній вибір з асинхронною фільтрацією параметрів, якщо доступні обробники параметрів інтерактивності
|
||||
- перевищено ліміти Slack: закодовані значення параметрів повертаються до кнопок
|
||||
- до 5 параметрів: button blocks
|
||||
- 6-100 параметрів: static select menu
|
||||
- понад 100 параметрів: external select з асинхронною фільтрацією параметрів, якщо доступні обробники параметрів interactivity
|
||||
- перевищено ліміти Slack: закодовані значення параметрів повертаються до buttons
|
||||
|
||||
```txt
|
||||
/think
|
||||
```
|
||||
|
||||
Сесії slash-команд використовують ізольовані ключі на кшталт `agent:<agentId>:slack:slash:<userId>` і все одно маршрутизують виконання команд до цільової сесії розмови через `CommandTargetSessionKey`.
|
||||
Сесії слеш-команд використовують ізольовані ключі на кшталт `agent:<agentId>:slack:slash:<userId>` і все одно маршрутизують виконання команд до цільової сесії розмови через `CommandTargetSessionKey`.
|
||||
|
||||
## Інтерактивні відповіді
|
||||
|
||||
Slack може відображати інтерактивні елементи керування у відповідях, створених агентом, але цю можливість за замовчуванням вимкнено.
|
||||
Slack може рендерити інтерактивні елементи відповіді, створені агентом, але ця можливість типово вимкнена.
|
||||
|
||||
Увімкнути глобально:
|
||||
Увімкніть її глобально:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -688,7 +688,7 @@ Slack може відображати інтерактивні елементи
|
||||
}
|
||||
```
|
||||
|
||||
Або увімкнути лише для одного облікового запису Slack:
|
||||
Або увімкніть її лише для одного облікового запису Slack:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -706,44 +706,43 @@ Slack може відображати інтерактивні елементи
|
||||
}
|
||||
```
|
||||
|
||||
Коли увімкнено, агенти можуть генерувати директиви відповідей лише для Slack:
|
||||
Коли її ввімкнено, агенти можуть надсилати директиви відповіді лише для Slack:
|
||||
|
||||
- `[[slack_buttons: Approve:approve, Reject:reject]]`
|
||||
- `[[slack_select: Choose a target | Canary:canary, Production:production]]`
|
||||
|
||||
Ці директиви компілюються в Slack Block Kit і спрямовують натискання або вибір назад через наявний шлях подій взаємодії Slack.
|
||||
Ці директиви компілюються в Slack Block Kit і маршрутизують натискання або вибір назад через наявний шлях подій взаємодії Slack.
|
||||
|
||||
Примітки:
|
||||
|
||||
- Це інтерфейс, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок.
|
||||
- Значення інтерактивних зворотних викликів — це непрозорі токени, згенеровані OpenClaw, а не необроблені значення, створені агентом.
|
||||
- Якщо згенеровані інтерактивні блоки перевищують обмеження Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання невалідного payload blocks.
|
||||
- Це UI, специфічний для Slack. Інші канали не перекладають директиви Slack Block Kit у власні системи кнопок.
|
||||
- Значення інтерактивних callback — це непрозорі токени, згенеровані OpenClaw, а не сирі значення, створені агентом.
|
||||
- Якщо згенеровані інтерактивні блоки перевищують ліміти Slack Block Kit, OpenClaw повертається до початкової текстової відповіді замість надсилання невалідного payload blocks.
|
||||
|
||||
## Підтвердження exec у Slack
|
||||
## Погодження exec у Slack
|
||||
|
||||
Slack може виступати як нативний клієнт підтвердження з інтерактивними кнопками та взаємодіями, замість повернення до Web UI або термінала.
|
||||
Slack може працювати як нативний клієнт погодження з інтерактивними кнопками та взаємодіями замість переходу до Web UI або термінала.
|
||||
|
||||
- Підтвердження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації в приватних повідомленнях/каналах.
|
||||
- Підтвердження Plugin також можуть визначатися через ту саму нативну поверхню кнопок Slack, коли запит уже потрапляє в Slack і тип ID підтвердження — `plugin:`.
|
||||
- Авторизація того, хто підтверджує, усе одно застосовується: лише користувачі, ідентифіковані як ті, хто може підтверджувати, можуть схвалювати або відхиляти запити через Slack.
|
||||
- Погодження exec використовують `channels.slack.execApprovals.*` для нативної маршрутизації DM/каналів.
|
||||
- Погодження Plugin, як і раніше, можуть визначатися через ту саму Slack-native поверхню кнопок, коли запит уже надходить у Slack, а тип id погодження — `plugin:`.
|
||||
- Авторизація того, хто погоджує, як і раніше, примусово перевіряється: лише користувачі, ідентифіковані як ті, хто погоджує, можуть погоджувати або відхиляти запити через Slack.
|
||||
|
||||
Це використовує ту саму спільну поверхню кнопок підтвердження, що й інші канали. Коли `interactivity` увімкнено в налаштуваннях вашого застосунку Slack, запити на підтвердження відображаються як кнопки Block Kit безпосередньо в розмові.
|
||||
Коли ці кнопки присутні, вони є основним UX підтвердження; OpenClaw
|
||||
має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що
|
||||
підтвердження в чаті недоступні або ручне підтвердження є єдиним шляхом.
|
||||
Це використовує ту саму спільну поверхню кнопок погодження, що й інші канали. Коли `interactivity` увімкнено в налаштуваннях вашого застосунку Slack, запити на погодження відображаються як кнопки Block Kit безпосередньо в розмові.
|
||||
Коли ці кнопки присутні, вони є основним UX погодження; OpenClaw
|
||||
має включати ручну команду `/approve` лише тоді, коли результат інструмента вказує, що погодження в чаті недоступні або ручне погодження — єдиний шлях.
|
||||
|
||||
Шлях конфігурації:
|
||||
|
||||
- `channels.slack.execApprovals.enabled`
|
||||
- `channels.slack.execApprovals.approvers` (необов’язково; за можливості використовує резервне значення з `commands.ownerAllowFrom`)
|
||||
- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, за замовчуванням: `dm`)
|
||||
- `channels.slack.execApprovals.approvers` (необов’язково; за можливості використовує резервне значення `commands.ownerAllowFrom`)
|
||||
- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, типово: `dm`)
|
||||
- `agentFilter`, `sessionFilter`
|
||||
|
||||
Slack автоматично вмикає нативні підтвердження exec, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один
|
||||
користувач, який може підтверджувати. Встановіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт підтвердження.
|
||||
Встановіть `enabled: true`, щоб примусово ввімкнути нативні підтвердження, коли визначаються користувачі, які можуть підтверджувати.
|
||||
Slack автоматично вмикає нативні погодження exec, коли `enabled` не задано або має значення `"auto"` і визначається принаймні один користувач, що погоджує.
|
||||
Установіть `enabled: false`, щоб явно вимкнути Slack як нативний клієнт погодження.
|
||||
Установіть `enabled: true`, щоб примусово ввімкнути нативні погодження, коли визначаються користувачі, що погоджують.
|
||||
|
||||
Типова поведінка без явної конфігурації підтверджень exec для Slack:
|
||||
Типова поведінка без явної конфігурації погодження exec для Slack:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -753,8 +752,8 @@ Slack автоматично вмикає нативні підтверджен
|
||||
}
|
||||
```
|
||||
|
||||
Явна нативна конфігурація Slack потрібна лише тоді, коли ви хочете перевизначити тих, хто може підтверджувати, додати фільтри або
|
||||
використовувати доставку в початковий чат:
|
||||
Явна Slack-native конфігурація потрібна лише тоді, коли ви хочете перевизначити користувачів, що погоджують, додати фільтри або
|
||||
використовувати доставлення до чату-джерела:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -770,37 +769,38 @@ Slack автоматично вмикає нативні підтверджен
|
||||
}
|
||||
```
|
||||
|
||||
Спільне переспрямування `approvals.exec` налаштовується окремо. Використовуйте його лише тоді, коли запити на підтвердження exec також мають
|
||||
маршрутизуватися до інших чатів або явно вказаних позасмугових цілей. Спільне переспрямування `approvals.plugin` також
|
||||
налаштовується окремо; нативні кнопки Slack все одно можуть визначати підтвердження Plugin, коли ці запити вже надходять
|
||||
Спільне переспрямування `approvals.exec` налаштовується окремо. Використовуйте його лише тоді, коли запити на погодження exec також мають
|
||||
маршрутизуватися до інших чатів або явно заданих зовнішніх цілей. Спільне переспрямування `approvals.plugin` також
|
||||
налаштовується окремо; Slack-native кнопки все одно можуть обробляти погодження Plugin, коли ці запити вже надходять
|
||||
у Slack.
|
||||
|
||||
`/approve` у тому самому чаті також працює в каналах Slack і приватних повідомленнях, які вже підтримують команди. Див. [Підтвердження exec](/uk/tools/exec-approvals), щоб ознайомитися з повною моделлю переспрямування підтверджень.
|
||||
`/approve` у тому самому чаті також працює в каналах і DM Slack, які вже підтримують команди. Повну модель переспрямування погоджень див. у [Погодження exec](/uk/tools/exec-approvals).
|
||||
|
||||
## Події та операційна поведінка
|
||||
|
||||
- Редагування/видалення повідомлень і трансляції тредів зіставляються із системними подіями.
|
||||
- Редагування/видалення повідомлень зіставляються із системними подіями.
|
||||
- Thread broadcasts (відповіді в тредах з опцією "Also send to channel") обробляються як звичайні повідомлення користувачів.
|
||||
- Події додавання/видалення реакцій зіставляються із системними подіями.
|
||||
- Події входу/виходу учасників, створення/перейменування каналів і додавання/видалення закріплень зіставляються із системними подіями.
|
||||
- `channel_id_changed` може мігрувати ключі конфігурації каналу, коли ввімкнено `configWrites`.
|
||||
- Метадані теми/призначення каналу вважаються недовіреним контекстом і можуть додаватися до контексту маршрутизації.
|
||||
- Ініціатор треду та початкове заповнення контексту історії треду фільтруються відповідно до налаштованих allowlist відправників, коли це застосовно.
|
||||
- Дії блоків і взаємодії з модальними вікнами генерують структуровані системні події `Slack interaction: ...` з розширеними полями payload:
|
||||
- `channel_id_changed` може мігрувати ключі конфігурації каналів, коли ввімкнено `configWrites`.
|
||||
- Метадані теми/призначення каналу вважаються недовіреним контекстом і можуть впроваджуватися в контекст маршрутизації.
|
||||
- Ініціатор треду та початкове наповнення контексту історією треду фільтруються за налаштованими allowlist відправників, де це застосовно.
|
||||
- Дії блоків і взаємодії з модальними вікнами створюють структуровані системні події `Slack interaction: ...` з насиченими полями payload:
|
||||
- дії блоків: вибрані значення, мітки, значення picker і метадані `workflow_*`
|
||||
- події модальних вікон `view_submission` і `view_closed` з маршрутизованими метаданими каналу та даними форм
|
||||
- події модальних вікон `view_submission` і `view_closed` з метаданими маршрутизованого каналу та полями форм
|
||||
|
||||
## Довідник з конфігурації
|
||||
## Довідник конфігурації
|
||||
|
||||
Основний довідник: [Довідник з конфігурації - Slack](/uk/gateway/config-channels#slack).
|
||||
Основний довідник: [Довідник конфігурації - Slack](/uk/gateway/config-channels#slack).
|
||||
|
||||
<Accordion title="Ключові поля Slack">
|
||||
<Accordion title="Високосигнальні поля Slack">
|
||||
|
||||
- режим/автентифікація: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*`
|
||||
- доступ до приватних повідомлень: `dm.enabled`, `dmPolicy`, `allowFrom` (застарілі: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels`
|
||||
- перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний варіант; не вмикайте без потреби)
|
||||
- mode/auth: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*`
|
||||
- доступ до DM: `dm.enabled`, `dmPolicy`, `allowFrom` (застаріле: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels`
|
||||
- перемикач сумісності: `dangerouslyAllowNameMatching` (аварійний режим; залишайте вимкненим, якщо немає потреби)
|
||||
- доступ до каналів: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention`
|
||||
- треди/історія: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
|
||||
- доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`, `streaming.preview.toolProgress`
|
||||
- доставлення: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`, `streaming.preview.toolProgress`
|
||||
- операції/можливості: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly`
|
||||
|
||||
</Accordion>
|
||||
@ -809,12 +809,12 @@ Slack автоматично вмикає нативні підтверджен
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Немає відповідей у каналах">
|
||||
Перевірте по порядку:
|
||||
Перевірте по черзі:
|
||||
|
||||
- `groupPolicy`
|
||||
- allowlist каналів (`channels.slack.channels`)
|
||||
- `requireMention`
|
||||
- allowlist `users` для конкретного каналу
|
||||
- allowlist `users` для кожного каналу
|
||||
|
||||
Корисні команди:
|
||||
|
||||
@ -826,14 +826,14 @@ openclaw doctor
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Повідомлення в приватних повідомленнях ігноруються">
|
||||
<Accordion title="Повідомлення DM ігноруються">
|
||||
Перевірте:
|
||||
|
||||
- `channels.slack.dm.enabled`
|
||||
- `channels.slack.dmPolicy` (або застаріле `channels.slack.dm.policy`)
|
||||
- підтвердження pairing / записи allowlist
|
||||
- події приватних повідомлень Slack Assistant: докладні журнали з `drop message_changed`
|
||||
зазвичай означають, що Slack надіслав відредаговану подію треду Assistant без
|
||||
- погодження прив’язки / записи allowlist
|
||||
- події Slack Assistant DM: докладні журнали з фразою `drop message_changed`
|
||||
зазвичай означають, що Slack надіслав подію редагування треду Assistant без
|
||||
придатного для відновлення відправника-людини в метаданих повідомлення
|
||||
|
||||
```bash
|
||||
@ -842,35 +842,35 @@ openclaw pairing list slack
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Socket Mode не підключається">
|
||||
Перевірте токени бота й застосунку та ввімкнення Socket Mode в налаштуваннях застосунку Slack.
|
||||
<Accordion title="Socket mode не підключається">
|
||||
Перевірте bot token + app token і те, що Socket Mode увімкнено в налаштуваннях застосунку Slack.
|
||||
|
||||
Якщо `openclaw channels status --probe --json` показує `botTokenStatus` або
|
||||
`appTokenStatus: "configured_unavailable"`, обліковий запис Slack
|
||||
налаштований, але поточне середовище виконання не змогло визначити значення,
|
||||
яке використовує SecretRef.
|
||||
налаштовано, але поточний runtime не зміг визначити значення,
|
||||
що надходить через SecretRef.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="HTTP-режим не отримує події">
|
||||
<Accordion title="HTTP mode не отримує події">
|
||||
Перевірте:
|
||||
|
||||
- signing secret
|
||||
- шлях webhook
|
||||
- URL-адреси запитів Slack (Events + Interactivity + Slash Commands)
|
||||
- Slack Request URLs (Events + Interactivity + Slash Commands)
|
||||
- унікальний `webhookPath` для кожного HTTP-облікового запису
|
||||
|
||||
Якщо у знімках облікових записів з’являється `signingSecretStatus: "configured_unavailable"`,
|
||||
HTTP-обліковий запис налаштований, але поточне середовище виконання не змогло
|
||||
визначити signing secret, який використовує SecretRef.
|
||||
Якщо в знімках облікового запису з’являється `signingSecretStatus: "configured_unavailable"`,
|
||||
HTTP-обліковий запис налаштовано, але поточний runtime не зміг
|
||||
визначити signing secret, що надходить через SecretRef.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Нативні/slash-команди не спрацьовують">
|
||||
Перевірте, що саме ви планували використовувати:
|
||||
<Accordion title="Вбудовані/slash-команди не спрацьовують">
|
||||
Перевірте, що саме ви хотіли використати:
|
||||
|
||||
- режим нативних команд (`channels.slack.commands.native: true`) з відповідними slash-командами, зареєстрованими в Slack
|
||||
- або режим однієї slash-команди (`channels.slack.slashCommand.enabled: true`)
|
||||
- режим вбудованих команд (`channels.slack.commands.native: true`) з відповідними слеш-командами, зареєстрованими в Slack
|
||||
- або режим однієї слеш-команди (`channels.slack.slashCommand.enabled: true`)
|
||||
|
||||
Також перевірте `commands.useAccessGroups` і allowlist каналів/користувачів.
|
||||
|
||||
@ -880,11 +880,11 @@ openclaw pairing list slack
|
||||
## Пов’язане
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Pairing" icon="link" href="/uk/channels/pairing">
|
||||
Зіставити користувача Slack із Gateway.
|
||||
<Card title="Прив’язка" icon="link" href="/uk/channels/pairing">
|
||||
Прив’яжіть користувача Slack до Gateway.
|
||||
</Card>
|
||||
<Card title="Групи" icon="users" href="/uk/channels/groups">
|
||||
Поведінка каналів і групових приватних повідомлень.
|
||||
Поведінка каналів і групових DM.
|
||||
</Card>
|
||||
<Card title="Маршрутизація каналів" icon="route" href="/uk/channels/channel-routing">
|
||||
Маршрутизація вхідних повідомлень до агентів.
|
||||
@ -895,7 +895,7 @@ openclaw pairing list slack
|
||||
<Card title="Конфігурація" icon="sliders" href="/uk/gateway/configuration">
|
||||
Структура конфігурації та пріоритетність.
|
||||
</Card>
|
||||
<Card title="Slash-команди" icon="terminal" href="/uk/tools/slash-commands">
|
||||
<Card title="Слеш-команди" icon="terminal" href="/uk/tools/slash-commands">
|
||||
Каталог команд і поведінка.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви використовуєте `openclaw browser` і хочете приклади для типових завдань
|
||||
- Ви використовуєте `openclaw browser` і хочете приклади для поширених завдань
|
||||
- Ви хочете керувати браузером, що працює на іншій машині, через вузол-хост
|
||||
- Ви хочете підключитися до локального Chrome, у якому вже виконано вхід, через Chrome MCP
|
||||
summary: Довідка CLI для `openclaw browser` (життєвий цикл, профілі, вкладки, дії, стан і налагодження)
|
||||
- Ви хочете під’єднатися до свого локального Chrome із виконаним входом через Chrome MCP
|
||||
summary: Довідник CLI для `openclaw browser` (життєвий цикл, профілі, вкладки, дії, стан і налагодження)
|
||||
title: Браузер
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T04:11:43Z"
|
||||
generated_at: "2026-04-24T23:30:41Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 1b93ea053b7fc047fad79397e0298cc530673a64d5873d98be9f910df1ea2fde
|
||||
source_hash: 07d8aad1aa28f9504d201d156178e9d7d6aa59a684aa26cde84d7946480364f6
|
||||
source_path: cli/browser.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -20,16 +20,16 @@ x-i18n:
|
||||
|
||||
Пов’язане:
|
||||
|
||||
- Інструмент Browser + API: [Інструмент Browser](/uk/tools/browser)
|
||||
- Інструмент браузера + API: [Browser tool](/uk/tools/browser)
|
||||
|
||||
## Поширені прапорці
|
||||
|
||||
- `--url <gatewayWsUrl>`: URL WebSocket Gateway (типово з конфігурації).
|
||||
- `--token <token>`: токен Gateway (якщо потрібен).
|
||||
- `--timeout <ms>`: тайм-аут запиту (мс).
|
||||
- `--expect-final`: очікувати фінальну відповідь Gateway.
|
||||
- `--browser-profile <name>`: вибрати профіль браузера (типовий береться з конфігурації).
|
||||
- `--json`: машиночитаний вивід (де підтримується).
|
||||
- `--expect-final`: чекати на фінальну відповідь Gateway.
|
||||
- `--browser-profile <name>`: вибрати профіль браузера (типовий із конфігурації).
|
||||
- `--json`: вивід у машиночитному форматі (де підтримується).
|
||||
|
||||
## Швидкий старт (локально)
|
||||
|
||||
@ -42,7 +42,7 @@ openclaw browser --browser-profile openclaw snapshot
|
||||
|
||||
## Швидке усунення несправностей
|
||||
|
||||
Якщо `start` завершується помилкою `not reachable after start`, спочатку перевірте готовність CDP. Якщо `start` і `tabs` виконуються успішно, але `open` або `navigate` не працюють, площина керування браузером справна, і збій зазвичай спричинений політикою SSRF для навігації.
|
||||
Якщо `start` завершується помилкою `not reachable after start`, спочатку перевірте готовність CDP. Якщо `start` і `tabs` виконуються успішно, але `open` або `navigate` завершуються помилкою, площина керування браузером працює справно, а причина зазвичай у політиці SSRF для навігації.
|
||||
|
||||
Мінімальна послідовність:
|
||||
|
||||
@ -52,7 +52,7 @@ openclaw browser --browser-profile openclaw tabs
|
||||
openclaw browser --browser-profile openclaw open https://example.com
|
||||
```
|
||||
|
||||
Докладні вказівки: [Усунення несправностей Browser](/uk/tools/browser#cdp-startup-failure-vs-navigation-ssrf-block)
|
||||
Докладні вказівки: [Усунення несправностей браузера](/uk/tools/browser#cdp-startup-failure-vs-navigation-ssrf-block)
|
||||
|
||||
## Життєвий цикл
|
||||
|
||||
@ -65,19 +65,15 @@ openclaw browser --browser-profile openclaw reset-profile
|
||||
|
||||
Примітки:
|
||||
|
||||
- Для профілів `attachOnly` і віддалених CDP `openclaw browser stop` закриває
|
||||
активну сесію керування та очищає тимчасові перевизначення емуляції, навіть
|
||||
якщо OpenClaw сам не запускав процес браузера.
|
||||
- Для локальних керованих профілів `openclaw browser stop` зупиняє запущений
|
||||
процес браузера.
|
||||
- Для профілів `attachOnly` і віддалених профілів CDP команда `openclaw browser stop` закриває активну сесію керування та очищає тимчасові перевизначення емуляції, навіть якщо OpenClaw не запускав процес браузера самостійно.
|
||||
- Для локальних керованих профілів `openclaw browser stop` зупиняє запущений процес браузера.
|
||||
|
||||
## Якщо команда відсутня
|
||||
|
||||
Якщо `openclaw browser` — невідома команда, перевірте `plugins.allow` у
|
||||
Якщо `openclaw browser` є невідомою командою, перевірте `plugins.allow` у
|
||||
`~/.openclaw/openclaw.json`.
|
||||
|
||||
Коли `plugins.allow` присутній, вбудований Plugin браузера має бути вказаний
|
||||
явно:
|
||||
Коли `plugins.allow` присутній, вбудований Plugin браузера має бути явно вказаний у списку:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -87,18 +83,17 @@ openclaw browser --browser-profile openclaw reset-profile
|
||||
}
|
||||
```
|
||||
|
||||
`browser.enabled=true` не відновлює підкоманду CLI, якщо список дозволених Plugin
|
||||
виключає `browser`.
|
||||
`browser.enabled=true` не відновлює підкоманду CLI, якщо список дозволених Plugin-ів виключає `browser`.
|
||||
|
||||
Пов’язане: [Інструмент Browser](/uk/tools/browser#missing-browser-command-or-tool)
|
||||
Пов’язане: [Browser tool](/uk/tools/browser#missing-browser-command-or-tool)
|
||||
|
||||
## Профілі
|
||||
|
||||
Профілі — це іменовані конфігурації маршрутизації браузера. На практиці:
|
||||
|
||||
- `openclaw`: запускає або підключається до окремого екземпляра Chrome, керованого OpenClaw (ізольований каталог користувацьких даних).
|
||||
- `user`: керує вашою наявною сесією Chrome, у якій уже виконано вхід, через Chrome DevTools MCP.
|
||||
- власні профілі CDP: вказують на локальну або віддалену кінцеву точку CDP.
|
||||
- `openclaw`: запускає або під’єднується до окремого екземпляра Chrome, керованого OpenClaw (ізольований каталог користувацьких даних).
|
||||
- `user`: керує вашою наявною сесією Chrome з виконаним входом через Chrome DevTools MCP.
|
||||
- користувацькі профілі CDP: вказують на локальну або віддалену кінцеву точку CDP.
|
||||
|
||||
```bash
|
||||
openclaw browser profiles
|
||||
@ -118,14 +113,18 @@ openclaw browser --browser-profile work tabs
|
||||
|
||||
```bash
|
||||
openclaw browser tabs
|
||||
openclaw browser tab new
|
||||
openclaw browser tab new --label docs
|
||||
openclaw browser tab label t1 docs
|
||||
openclaw browser tab select 2
|
||||
openclaw browser tab close 2
|
||||
openclaw browser open https://docs.openclaw.ai
|
||||
openclaw browser focus <targetId>
|
||||
openclaw browser close <targetId>
|
||||
openclaw browser open https://docs.openclaw.ai --label docs
|
||||
openclaw browser focus docs
|
||||
openclaw browser close t1
|
||||
```
|
||||
|
||||
`tabs` повертає сирий `targetId` і стабільний `tabId`, наприклад `t1`. Ви також можете призначити мітку за допомогою `open --label`, `tab new --label` або `tab label`.
|
||||
`focus`, `close`, знімки та дії приймають сирий `targetId`, `tabId`, мітку або унікальний префікс target-id.
|
||||
|
||||
## Знімок / знімок екрана / дії
|
||||
|
||||
Знімок:
|
||||
@ -144,12 +143,10 @@ openclaw browser screenshot --ref e12
|
||||
|
||||
Примітки:
|
||||
|
||||
- `--full-page` призначений лише для знімків сторінки; його не можна поєднувати з `--ref`
|
||||
або `--element`.
|
||||
- Профілі `existing-session` / `user` підтримують знімки екрана сторінки та знімки
|
||||
екрана `--ref` із виводу snapshot, але не підтримують знімки екрана CSS `--element`.
|
||||
- `--full-page` призначений лише для захоплення сторінки; його не можна поєднувати з `--ref` або `--element`.
|
||||
- Профілі `existing-session` / `user` підтримують знімки екрана сторінки та знімки екрана з `--ref` на основі виводу `snapshot`, але не підтримують знімки екрана CSS `--element`.
|
||||
|
||||
Навігація/клік/введення (автоматизація інтерфейсу на основі ref):
|
||||
Navigate/click/type (автоматизація UI на основі ref):
|
||||
|
||||
```bash
|
||||
openclaw browser navigate https://example.com
|
||||
@ -176,7 +173,7 @@ openclaw browser dialog --accept
|
||||
|
||||
## Стан і сховище
|
||||
|
||||
Область перегляду + емуляція:
|
||||
Viewport + емуляція:
|
||||
|
||||
```bash
|
||||
openclaw browser resize 1280 720
|
||||
@ -191,7 +188,7 @@ openclaw browser set headers '{"x-test":"1"}'
|
||||
openclaw browser set credentials myuser mypass
|
||||
```
|
||||
|
||||
Файли cookie + сховище:
|
||||
Cookies + сховище:
|
||||
|
||||
```bash
|
||||
openclaw browser cookies
|
||||
@ -226,34 +223,31 @@ openclaw browser create-profile --name brave-live --driver existing-session --us
|
||||
openclaw browser --browser-profile chrome-live tabs
|
||||
```
|
||||
|
||||
Цей шлях працює лише на хості. Для Docker, безголових серверів, Browserless або інших віддалених налаштувань замість цього використовуйте профіль CDP.
|
||||
Цей шлях доступний лише на хості. Для Docker, headless-серверів, Browserless або інших віддалених конфігурацій замість цього використовуйте профіль CDP.
|
||||
|
||||
Поточні обмеження existing-session:
|
||||
|
||||
- дії на основі snapshot використовують ref, а не CSS-селектори
|
||||
- `click` підтримує лише ліву кнопку миші
|
||||
- дії на основі `snapshot` використовують ref, а не CSS-селектори
|
||||
- `click` підтримує лише лівий клік
|
||||
- `type` не підтримує `slowly=true`
|
||||
- `press` не підтримує `delayMs`
|
||||
- `hover`, `scrollintoview`, `drag`, `select`, `fill` і `evaluate` відхиляють
|
||||
перевизначення тайм-ауту для окремого виклику
|
||||
- `hover`, `scrollintoview`, `drag`, `select`, `fill` і `evaluate` відхиляють перевизначення тайм-ауту для окремого виклику
|
||||
- `select` підтримує лише одне значення
|
||||
- `wait --load networkidle` не підтримується
|
||||
- завантаження файлів вимагає `--ref` / `--input-ref`, не підтримує CSS
|
||||
`--element`, і наразі підтримує лише один файл за раз
|
||||
- обробники діалогів не підтримують `--timeout`
|
||||
- знімки екрана підтримують знімки сторінки та `--ref`, але не CSS `--element`
|
||||
- `responsebody`, перехоплення завантажень, експорт PDF і пакетні дії досі
|
||||
вимагають керований браузер або сирий профіль CDP
|
||||
- завантаження файлів вимагає `--ref` / `--input-ref`, не підтримує CSS `--element` і наразі підтримує по одному файлу за раз
|
||||
- хуки діалогів не підтримують `--timeout`
|
||||
- знімки екрана підтримують захоплення сторінки та `--ref`, але не CSS `--element`
|
||||
- `responsebody`, перехоплення завантажень, експорт PDF і пакетні дії, як і раніше, вимагають керованого браузера або сирого профілю CDP
|
||||
|
||||
## Віддалене керування браузером (проксі вузла-хоста)
|
||||
|
||||
Якщо Gateway працює на іншій машині, ніж браузер, запустіть **вузол-хост** на машині, де є Chrome/Brave/Edge/Chromium. Gateway проксіюватиме дії браузера до цього вузла (окремий сервер керування браузером не потрібен).
|
||||
|
||||
Використовуйте `gateway.nodes.browser.mode`, щоб керувати автоматичною маршрутизацією, і `gateway.nodes.browser.node`, щоб закріпити конкретний вузол, якщо підключено кілька вузлів.
|
||||
Використовуйте `gateway.nodes.browser.mode` для керування автоматичною маршрутизацією та `gateway.nodes.browser.node` для прив’язки до конкретного вузла, якщо під’єднано кілька вузлів.
|
||||
|
||||
Безпека + віддалене налаштування: [Інструмент Browser](/uk/tools/browser), [Віддалений доступ](/uk/gateway/remote), [Tailscale](/uk/gateway/tailscale), [Безпека](/uk/gateway/security)
|
||||
Безпека + віддалене налаштування: [Browser tool](/uk/tools/browser), [Віддалений доступ](/uk/gateway/remote), [Tailscale](/uk/gateway/tailscale), [Безпека](/uk/gateway/security)
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Довідка CLI](/uk/cli)
|
||||
- [Довідник CLI](/uk/cli)
|
||||
- [Browser](/uk/tools/browser)
|
||||
|
||||
@ -1,109 +1,102 @@
|
||||
---
|
||||
read_when:
|
||||
- Редагування тексту системного prompt, списку інструментів або розділів часу/Heartbeat
|
||||
- Зміна поведінки початкового налаштування workspace або ін’єкції Skills
|
||||
summary: Що містить системний prompt OpenClaw і як він збирається
|
||||
title: Системний prompt
|
||||
- Редагування тексту системного промпту, списку інструментів або розділів часу/Heartbeat
|
||||
- Зміна bootstrap робочого простору або поведінки інʼєкції Skills
|
||||
summary: Що містить системний промпт OpenClaw і як він збирається
|
||||
title: Системний промпт
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T22:59:25Z"
|
||||
generated_at: "2026-04-24T23:30:39Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: ff0498b99974f1a75fc9b93ca46cc0bf008ebf234b429c05ee689a4a150d29f1
|
||||
source_hash: 83d9cc69fff164ba52d1fc1a9b04ea799f48dbd8b449bde63473c6dec4cb026a
|
||||
source_path: concepts/system-prompt.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
OpenClaw збирає власний системний prompt для кожного запуску агента. Prompt **належить OpenClaw** і не використовує типовий prompt pi-coding-agent.
|
||||
OpenClaw створює власний системний промпт для кожного запуску агента. Промпт **належить OpenClaw** і не використовує стандартний промпт pi-coding-agent.
|
||||
|
||||
Prompt збирається OpenClaw і ін’єктується в кожен запуск агента.
|
||||
Промпт збирається OpenClaw і впроваджується в кожен запуск агента.
|
||||
|
||||
Provider plugins можуть додавати cache-aware вказівки для prompt без заміни
|
||||
повного prompt, що належить OpenClaw. Runtime provider може:
|
||||
Плагіни провайдерів можуть додавати вказівки для промпту з урахуванням кешу, не замінюючи при цьому весь промпт, що належить OpenClaw. Середовище виконання провайдера може:
|
||||
|
||||
- замінювати невеликий набір іменованих базових розділів (`interaction_style`,
|
||||
- замінювати невеликий набір іменованих основних розділів (`interaction_style`,
|
||||
`tool_call_style`, `execution_bias`)
|
||||
- ін’єктувати **стабільний префікс** над межею кешу prompt
|
||||
- ін’єктувати **динамічний суфікс** під межею кешу prompt
|
||||
- впроваджувати **стабільний префікс** над межею кешу промпту
|
||||
- впроваджувати **динамічний суфікс** під межею кешу промпту
|
||||
|
||||
Використовуйте внески, що належать provider, для налаштування під конкретні сімейства моделей. Залишайте застарілу
|
||||
мутацію prompt через `before_prompt_build` для сумісності або справді глобальних змін prompt, а не для звичайної поведінки provider.
|
||||
Використовуйте внески, що належать провайдеру, для налаштування під конкретні сімейства моделей. Зберігайте застарілу мутацію промпту `before_prompt_build` для сумісності або справді глобальних змін промпту, а не для звичайної поведінки провайдера.
|
||||
|
||||
Накладка для сімейства OpenAI GPT-5 зберігає базове правило виконання невеликим і додає
|
||||
специфічні для моделі вказівки щодо фіксації persona, лаконічного виводу, дисципліни інструментів,
|
||||
паралельного пошуку, охоплення deliverable, перевірки, відсутнього контексту та
|
||||
гігієни terminal-tool.
|
||||
Оверлей для сімейства OpenAI GPT-5 зберігає основне правило виконання компактним і додає вказівки, специфічні для моделі: фіксація персони, лаконічний вивід, дисципліна використання інструментів, паралельний пошук, охоплення результатів, перевірка, відсутній контекст і гігієна інструментів термінала.
|
||||
|
||||
## Структура
|
||||
|
||||
Prompt навмисно компактний і використовує фіксовані розділи:
|
||||
Промпт навмисно компактний і використовує фіксовані розділи:
|
||||
|
||||
- **Tooling**: нагадування про джерело істини для structured-tool плюс вказівки щодо використання runtime-інструментів.
|
||||
- **Execution Bias**: компактні вказівки щодо доведення до кінця: діяти в поточному ході на
|
||||
запити, які можна виконати, продовжувати до завершення або блокування, відновлюватися після слабких результатів інструментів,
|
||||
перевіряти змінний стан наживо та верифікувати перед фіналізацією.
|
||||
- **Safety**: коротке нагадування про запобіжники, щоб уникати поведінки, спрямованої на здобуття влади, або обходу нагляду.
|
||||
- **Skills** (коли доступні): пояснює моделі, як завантажувати інструкції Skills на вимогу.
|
||||
- **OpenClaw Self-Update**: як безпечно інспектувати конфігурацію за допомогою
|
||||
`config.schema.lookup`, змінювати конфігурацію через `config.patch`, замінювати всю
|
||||
конфігурацію через `config.apply` і запускати `update.run` лише на явний запит користувача. Інструмент `gateway`, доступний лише власнику, також відмовляється переписувати
|
||||
- **Інструменти**: нагадування про структуровані інструменти як джерело істини плюс вказівки щодо використання інструментів під час виконання.
|
||||
- **Ухил виконання**: компактні вказівки щодо доведення справ до кінця: діяти в межах поточного ходу для запитів, які можна виконати, продовжувати до завершення або блокування, відновлюватися після слабких результатів інструментів, перевіряти змінний стан наживо та верифікувати перед завершенням.
|
||||
- **Безпека**: коротке нагадування про запобіжники, щоб уникати поведінки, спрямованої на здобуття влади, або обходу нагляду.
|
||||
- **Skills** (коли доступні): повідомляє моделі, як завантажувати інструкції Skills за потреби.
|
||||
- **Самооновлення 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 package) і коли її читати.
|
||||
- **Workspace Files (injected)**: вказує, що bootstrap-файли включено нижче.
|
||||
- **Sandbox** (коли ввімкнено): вказує sandboxed runtime, шляхи sandbox і те, чи доступний підвищений exec.
|
||||
- **Current Date & Time**: локальний час користувача, часовий пояс і формат часу.
|
||||
- **Reply Tags**: необов’язковий синтаксис тегів відповіді для підтримуваних provider.
|
||||
- **Heartbeats**: Heartbeat-prompt і поведінка підтвердження, коли Heartbeat увімкнено для типового агента.
|
||||
- **Runtime**: хост, ОС, node, модель, корінь репозиторію (коли виявлено), рівень мислення (один рядок).
|
||||
- **Reasoning**: поточний рівень видимості + підказка перемикання `/reasoning`.
|
||||
псевдонімами `tools.bash.*`, які нормалізуються до цих захищених шляхів exec.
|
||||
- **Робочий простір**: робочий каталог (`agents.defaults.workspace`).
|
||||
- **Документація**: локальний шлях до документації OpenClaw (репозиторій або npm package) і коли її читати.
|
||||
- **Файли робочого простору (впроваджені)**: вказує, що bootstrap-файли включено нижче.
|
||||
- **Пісочниця** (коли ввімкнено): вказує на ізольоване середовище виконання, шляхи пісочниці та чи доступне підвищене виконання.
|
||||
- **Поточна дата й час**: локальний час користувача, часовий пояс і формат часу.
|
||||
- **Теги відповіді**: необов’язковий синтаксис тегів відповіді для підтримуваних провайдерів.
|
||||
- **Heartbeat**: промпт Heartbeat і поведінка підтвердження, коли Heartbeat увімкнено для стандартного агента.
|
||||
- **Середовище виконання**: хост, ОС, node, модель, корінь репозиторію (коли визначено), рівень мислення (одним рядком).
|
||||
- **Міркування**: поточний рівень видимості + підказка перемикання /reasoning.
|
||||
|
||||
Розділ Tooling також містить runtime-вказівки для довготривалої роботи:
|
||||
Розділ «Інструменти» також містить вказівки під час виконання для довготривалої роботи:
|
||||
|
||||
- використовуйте Cron для відкладеного follow-up (`check back later`, нагадування, періодична робота)
|
||||
замість циклів сну через `exec`, прийомів затримки `yieldMs` або повторного
|
||||
- використовуйте cron для подальших дій у майбутньому (`check back later`, нагадування, повторювана робота)
|
||||
замість циклів сну через `exec`, трюків із затримкою `yieldMs` або повторного
|
||||
опитування `process`
|
||||
- використовуйте `exec` / `process` лише для команд, які запускаються зараз і продовжують виконуватися
|
||||
у фоновому режимі
|
||||
- коли ввімкнено автоматичне пробудження після завершення, запустіть команду один раз і покладайтеся на
|
||||
push-based шлях пробудження, коли вона виведе результат або завершиться помилкою
|
||||
- використовуйте `process` для журналів, статусу, введення або втручання, коли вам потрібно
|
||||
інспектувати запущену команду
|
||||
- якщо завдання більше, надавайте перевагу `sessions_spawn`; завершення субагента працює через
|
||||
push-based механізм і автоматично анонсується назад запитувачу
|
||||
- коли ввімкнено автоматичне пробудження після завершення, запускайте команду один раз і покладайтеся на
|
||||
push-орієнтований механізм пробудження, коли вона виведе результат або завершиться з помилкою
|
||||
- використовуйте `process` для логів, статусу, введення або втручання, коли вам потрібно
|
||||
перевірити виконувану команду
|
||||
- якщо завдання більше, віддавайте перевагу `sessions_spawn`; завершення субагента працює на основі
|
||||
push і автоматично оголошується назад запитувачу
|
||||
- не опитуйте `subagents list` / `sessions_list` у циклі лише для очікування
|
||||
завершення
|
||||
|
||||
Коли ввімкнено експериментальний інструмент `update_plan`, Tooling також вказує
|
||||
моделі використовувати його лише для нетривіальної багатокрокової роботи, підтримувати рівно один
|
||||
Коли ввімкнено експериментальний інструмент `update_plan`, розділ «Інструменти» також повідомляє
|
||||
моделі використовувати його лише для нетривіальної багатокрокової роботи, тримати рівно один
|
||||
крок `in_progress` і не повторювати весь план після кожного оновлення.
|
||||
|
||||
Запобіжники Safety у системному prompt мають рекомендаційний характер. Вони спрямовують поведінку моделі, але не забезпечують виконання політики. Для жорсткого контролю використовуйте політику інструментів, погодження exec, sandboxing і allowlist каналів; оператори можуть вимкнути це за задумом.
|
||||
Запобіжники безпеки в системному промпті мають рекомендаційний характер. Вони спрямовують поведінку моделі, але не забезпечують примусове застосування політики. Для жорсткого забезпечення використовуйте політику інструментів, погодження exec, пісочницю та allowlist каналів; оператори можуть вимкнути їх за задумом.
|
||||
|
||||
У каналах із нативними картками/кнопками погодження runtime-prompt тепер вказує
|
||||
агенту спершу покладатися на цей нативний UI погодження. Він має включати ручну
|
||||
команду `/approve` лише тоді, коли результат інструмента каже, що погодження в чаті недоступне або
|
||||
ручне погодження є єдиним шляхом.
|
||||
У каналах із нативними картками/кнопками погодження промпт середовища виконання тепер повідомляє
|
||||
агенту спочатку покладатися на цей нативний UI погодження. Він має включати ручну
|
||||
команду `/approve` лише тоді, коли результат інструмента каже, що погодження в чаті недоступні або
|
||||
ручне погодження — єдиний шлях.
|
||||
|
||||
## Режими prompt
|
||||
## Режими промпту
|
||||
|
||||
OpenClaw може рендерити менші системні prompt для субагентів. Runtime встановлює
|
||||
`promptMode` для кожного запуску (це не користувацька конфігурація):
|
||||
OpenClaw може рендерити менші системні промпти для субагентів. Середовище виконання встановлює
|
||||
`promptMode` для кожного запуску (це не користувацький параметр конфігурації):
|
||||
|
||||
- `full` (типово): включає всі розділи вище.
|
||||
- `minimal`: використовується для субагентів; пропускає **Skills**, **Memory Recall**, **OpenClaw
|
||||
Self-Update**, **Model Aliases**, **User Identity**, **Reply Tags**,
|
||||
**Messaging**, **Silent Replies** і **Heartbeats**. Tooling, **Safety**,
|
||||
Workspace, Sandbox, Current Date & Time (коли відомо), Runtime та ін’єктований
|
||||
- `full` (типово): включає всі наведені вище розділи.
|
||||
- `minimal`: використовується для субагентів; пропускає **Skills**, **Виклик пам’яті**, **Самооновлення OpenClaw**, **Псевдоніми моделей**, **Ідентичність користувача**, **Теги відповіді**,
|
||||
**Повідомлення**, **Тихі відповіді** та **Heartbeat**. **Інструменти**,
|
||||
**Безпека**, Робочий простір, Пісочниця, Поточна дата й час (коли відомо), Середовище виконання та впроваджений
|
||||
контекст залишаються доступними.
|
||||
- `none`: повертає лише базовий рядок ідентичності.
|
||||
|
||||
Коли `promptMode=minimal`, додаткові ін’єктовані prompt позначаються як **Subagent
|
||||
Context**, а не **Group Chat Context**.
|
||||
Коли `promptMode=minimal`, додаткові впроваджені промпти позначаються як **Контекст субагента**
|
||||
замість **Контекст групового чату**.
|
||||
|
||||
## Ін’єкція bootstrap workspace
|
||||
## Впровадження bootstrap робочого простору
|
||||
|
||||
Bootstrap-файли обрізаються та додаються в розділ **Project Context**, щоб модель бачила ідентичність і контекст профілю без потреби в явному читанні:
|
||||
Bootstrap-файли обрізаються та додаються в розділ **Контекст проєкту**, щоб модель бачила контекст ідентичності та профілю без явного читання:
|
||||
|
||||
- `AGENTS.md`
|
||||
- `SOUL.md`
|
||||
@ -111,71 +104,74 @@ Bootstrap-файли обрізаються та додаються в розд
|
||||
- `IDENTITY.md`
|
||||
- `USER.md`
|
||||
- `HEARTBEAT.md`
|
||||
- `BOOTSTRAP.md` (лише в абсолютно нових workspace)
|
||||
- `MEMORY.md`, коли присутній
|
||||
- `BOOTSTRAP.md` (лише в абсолютно нових робочих просторах)
|
||||
- `MEMORY.md` за наявності
|
||||
|
||||
Усі ці файли **ін’єктуються у вікно контексту** на кожному ході, якщо не застосовується
|
||||
окремий файловий запобіжник. `HEARTBEAT.md` пропускається у звичайних запусках, коли
|
||||
Heartbeat вимкнено для типового агента або
|
||||
`agents.defaults.heartbeat.includeSystemPromptSection` має значення false. Тримайте ін’єктовані
|
||||
файли стислими — особливо `MEMORY.md`, який з часом може зростати й призводити до
|
||||
неочікувано великого використання контексту та частішого Compaction.
|
||||
Усі ці файли **впроваджуються у вікно контексту** на кожному ході, якщо не застосовується окремий бар’єр для файла. `HEARTBEAT.md` пропускається під час звичайних запусків, коли
|
||||
Heartbeat вимкнено для стандартного агента або
|
||||
`agents.defaults.heartbeat.includeSystemPromptSection` має значення false. Зберігайте впроваджені
|
||||
файли лаконічними — особливо `MEMORY.md`, який з часом може розростатися та призводити до
|
||||
неочікувано високого використання контексту й частішої Compaction.
|
||||
|
||||
> **Примітка:** щоденні файли `memory/*.md` **не** є частиною звичайного bootstrap
|
||||
> Project Context. У звичайних ходах доступ до них відбувається на вимогу через
|
||||
> **Примітка:** щоденні файли `memory/*.md` **не** входять до звичайного bootstrap
|
||||
> Контексту проєкту. У звичайних ходах доступ до них відбувається за потреби через
|
||||
> інструменти `memory_search` і `memory_get`, тому вони не враховуються у
|
||||
> вікні контексту, якщо модель явно їх не читає. Виняток — прості ходи `/new` і
|
||||
> `/reset`: runtime може додавати нещодавню щоденну пам’ять як одноразовий блок
|
||||
> стартового контексту для цього першого ходу.
|
||||
> вікні контексту, якщо модель явно їх не читає. Виняток — порожні ходи `/new` і
|
||||
> `/reset`: середовище виконання може додати нещодавню щоденну пам’ять як одноразовий
|
||||
> блок стартового контексту для цього першого ходу.
|
||||
|
||||
Великі файли обрізаються з маркером. Максимальний розмір одного файла контролюється через
|
||||
`agents.defaults.bootstrapMaxChars` (типово: 12000). Загальний обсяг ін’єктованого bootstrap-вмісту
|
||||
між файлами обмежується через `agents.defaults.bootstrapTotalMaxChars`
|
||||
(типово: 60000). Відсутні файли ін’єктують короткий маркер відсутності файла. Коли відбувається обрізання,
|
||||
OpenClaw може ін’єктувати блок попередження в Project Context; це контролюється через
|
||||
Великі файли обрізаються з маркером. Максимальний розмір на файл керується через
|
||||
`agents.defaults.bootstrapMaxChars` (типово: 12000). Загальний обсяг впровадженого bootstrap-вмісту
|
||||
в усіх файлах обмежено `agents.defaults.bootstrapTotalMaxChars`
|
||||
(типово: 60000). Для відсутніх файлів впроваджується короткий маркер відсутнього файла. Коли відбувається обрізання,
|
||||
OpenClaw може впроваджувати блок попередження в Контекст проєкту; це керується через
|
||||
`agents.defaults.bootstrapPromptTruncationWarning` (`off`, `once`, `always`;
|
||||
типово: `once`).
|
||||
|
||||
Сесії субагентів ін’єктують лише `AGENTS.md` і `TOOLS.md` (інші bootstrap-файли
|
||||
Сесії субагентів впроваджують лише `AGENTS.md` і `TOOLS.md` (інші bootstrap-файли
|
||||
відфільтровуються, щоб контекст субагента залишався малим).
|
||||
|
||||
Внутрішні hooks можуть перехоплювати цей крок через `agent:bootstrap`, щоб змінювати або замінювати
|
||||
ін’єктовані bootstrap-файли (наприклад, підміняти `SOUL.md` альтернативною persona).
|
||||
Внутрішні хуки можуть перехоплювати цей крок через `agent:bootstrap`, щоб змінювати або замінювати
|
||||
впроваджені bootstrap-файли (наприклад, замінювати `SOUL.md` альтернативною персоною).
|
||||
|
||||
Якщо ви хочете, щоб агент звучав менш шаблонно, почніть із
|
||||
[Посібника з особистості SOUL.md](/uk/concepts/soul).
|
||||
[Посібника з індивідуальності SOUL.md](/uk/concepts/soul).
|
||||
|
||||
Щоб перевірити, який внесок робить кожен ін’єктований файл (сирий vs ін’єктований, обрізання, а також накладні витрати schema інструментів), використовуйте `/context list` або `/context detail`. Див. [Контекст](/uk/concepts/context).
|
||||
Щоб перевірити, який внесок дає кожен впроваджений файл (сирий чи впроваджений, обрізання, а також накладні витрати на схему інструмента), використовуйте `/context list` або `/context detail`. Див. [Контекст](/uk/concepts/context).
|
||||
|
||||
## Робота з часом
|
||||
## Обробка часу
|
||||
|
||||
Системний prompt включає окремий розділ **Current Date & Time**, коли відомий
|
||||
часовий пояс користувача. Щоб зберегти стабільність кешу prompt, тепер він містить лише
|
||||
Системний промпт містить окремий розділ **Поточна дата й час**, коли
|
||||
відомий часовий пояс користувача. Щоб зберігати стабільність кешу промпту, тепер він містить лише
|
||||
**часовий пояс** (без динамічного годинника чи формату часу).
|
||||
|
||||
Використовуйте `session_status`, коли агенту потрібен поточний час; картка статусу
|
||||
містить рядок із позначкою часу. Той самий інструмент також може за бажанням встановити
|
||||
перевизначення моделі для сесії (`model=default` очищає його).
|
||||
містить рядок позначки часу. Той самий інструмент також може за бажанням встановити перевизначення моделі
|
||||
для сесії (`model=default` очищає його).
|
||||
|
||||
Налаштовується через:
|
||||
|
||||
- `agents.defaults.userTimezone`
|
||||
- `agents.defaults.timeFormat` (`auto` | `12` | `24`)
|
||||
|
||||
Див. [Дата й час](/uk/date-time) для повних подробиць поведінки.
|
||||
Повну інформацію про поведінку див. у [Дата й час](/uk/date-time).
|
||||
|
||||
## Skills
|
||||
|
||||
Коли існують відповідні Skills, OpenClaw ін’єктує компактний **список доступних Skills**
|
||||
(`formatSkillsForPrompt`), який включає **шлях до файла** для кожної Skill. Prompt
|
||||
вказує моделі використовувати `read`, щоб завантажити `SKILL.md` за вказаним
|
||||
розташуванням (workspace, керованим або вбудованим). Якщо жодна Skill не підходить,
|
||||
розділ Skills пропускається.
|
||||
Коли існують придатні Skills, OpenClaw впроваджує компактний **список доступних Skills**
|
||||
(`formatSkillsForPrompt`), який містить **шлях до файла** для кожного skill. Промпт
|
||||
інструктує модель використовувати `read`, щоб завантажити SKILL.md у зазначеному
|
||||
розташуванні (робочий простір, кероване або вбудоване). Якщо жоден skill не є придатним, розділ
|
||||
Skills пропускається.
|
||||
|
||||
Відповідність включає запобіжники метаданих Skill, перевірки runtime-середовища/конфігурації
|
||||
Придатність включає бар’єри метаданих skill, перевірки середовища виконання/конфігурації
|
||||
та ефективний allowlist Skills агента, коли налаштовано `agents.defaults.skills` або
|
||||
`agents.list[].skills`.
|
||||
|
||||
Skills, вбудовані в плагін, є придатними лише тоді, коли плагін-власник увімкнено.
|
||||
Це дозволяє плагінам інструментів надавати глибші робочі інструкції, не вбудовуючи всі
|
||||
ці вказівки безпосередньо в опис кожного інструмента.
|
||||
|
||||
```
|
||||
<available_skills>
|
||||
<skill>
|
||||
@ -186,32 +182,32 @@ OpenClaw може ін’єктувати блок попередження в P
|
||||
</available_skills>
|
||||
```
|
||||
|
||||
Це зберігає базовий prompt малим, водночас дозволяючи цільове використання Skills.
|
||||
Це зберігає базовий промпт малим, але водночас дає змогу цільового використання Skills.
|
||||
|
||||
Бюджет списку Skills належить підсистемі Skills:
|
||||
|
||||
- Глобальне типове значення: `skills.limits.maxSkillsPromptChars`
|
||||
- Перевизначення для агента: `agents.list[].skillsLimits.maxSkillsPromptChars`
|
||||
|
||||
Узагальнені обмежені runtime-витяги використовують іншу поверхню:
|
||||
Загальні обмежені уривки середовища виконання використовують іншу поверхню:
|
||||
|
||||
- `agents.defaults.contextLimits.*`
|
||||
- `agents.list[].contextLimits.*`
|
||||
|
||||
Це розділення відокремлює розмір Skills від розміру runtime-читання/ін’єкції, такого як
|
||||
`memory_get`, результати live-інструментів і оновлення `AGENTS.md` після Compaction.
|
||||
Такий поділ зберігає розмір Skills окремо від розміру читання/впровадження під час виконання, такого
|
||||
як `memory_get`, живі результати інструментів і оновлення AGENTS.md після Compaction.
|
||||
|
||||
## Documentation
|
||||
## Документація
|
||||
|
||||
Коли доступно, системний prompt включає розділ **Documentation**, який вказує на
|
||||
локальний каталог документації OpenClaw (або `docs/` у workspace репозиторію, або документацію з вбудованого npm
|
||||
package) і також згадує публічне дзеркало, вихідний репозиторій, Discord спільноти та
|
||||
ClawHub ([https://clawhub.ai](https://clawhub.ai)) для виявлення Skills. Prompt вказує моделі спершу звертатися до локальної документації
|
||||
щодо поведінки, команд, конфігурації або архітектури OpenClaw і самостійно запускати
|
||||
`openclaw status`, коли це можливо (питаючи користувача лише тоді, коли доступу немає).
|
||||
Коли доступно, системний промпт містить розділ **Документація**, який вказує на
|
||||
локальний каталог документації OpenClaw (або `docs/` у робочому просторі репозиторію, або документацію вбудованого
|
||||
npm package) і також згадує публічне дзеркало, вихідний репозиторій, спільноту Discord і
|
||||
ClawHub ([https://clawhub.ai](https://clawhub.ai)) для пошуку Skills. Промпт інструктує модель спочатку звертатися до локальної документації
|
||||
щодо поведінки OpenClaw, команд, конфігурації чи архітектури та
|
||||
самостійно запускати `openclaw status`, коли це можливо (звертаючись до користувача лише тоді, коли доступу немає).
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Runtime агента](/uk/concepts/agent)
|
||||
- [Workspace агента](/uk/concepts/agent-workspace)
|
||||
- [Середовище виконання агента](/uk/concepts/agent)
|
||||
- [Робочий простір агента](/uk/concepts/agent-workspace)
|
||||
- [Рушій контексту](/uk/concepts/context-engine)
|
||||
|
||||
@ -1,41 +1,43 @@
|
||||
---
|
||||
read_when:
|
||||
- Додавання автоматизації браузера, керованої агентом
|
||||
- Налагодження, чому openclaw заважає вашому власному Chrome
|
||||
- Налагодження того, чому openclaw втручається у роботу вашого власного Chrome
|
||||
- Реалізація налаштувань браузера + життєвого циклу в застосунку macOS
|
||||
summary: Інтегрована служба керування браузером + команди дій
|
||||
summary: Інтегрований сервіс керування браузером + команди дій
|
||||
title: Браузер (керований OpenClaw)
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T07:42:12Z"
|
||||
generated_at: "2026-04-24T23:30:44Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 80805676213ef5195093163874a848955b3c25364b20045a8d759d03ac088e14
|
||||
source_hash: 58806d9728345ca32f0341a060bd53f8447f7614a1a5fdcad822d94f9bd48d40
|
||||
source_path: tools/browser.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
OpenClaw може запускати **виділений профіль Chrome/Brave/Edge/Chromium**, яким керує агент.
|
||||
OpenClaw може запускати **окремий профіль Chrome/Brave/Edge/Chromium**, яким керує агент.
|
||||
Він ізольований від вашого особистого браузера та керується через невеликий локальний
|
||||
сервіс керування всередині Gateway (лише loopback).
|
||||
|
||||
Погляд для початківців:
|
||||
Пояснення для початківців:
|
||||
|
||||
- Думайте про це як про **окремий браузер лише для агента**.
|
||||
- Профіль `openclaw` **не** торкається профілю вашого особистого браузера.
|
||||
- Агент може **відкривати вкладки, читати сторінки, натискати й вводити текст** у безпечному середовищі.
|
||||
- Вбудований профіль `user` підключається до вашої реальної сесії Chrome з входом через Chrome MCP.
|
||||
- Профіль `openclaw` **не** зачіпає ваш особистий профіль браузера.
|
||||
- Агент може **відкривати вкладки, читати сторінки, натискати та вводити текст** у безпечному середовищі.
|
||||
- Вбудований профіль `user` підключається до вашої справжньої авторизованої сесії Chrome через Chrome MCP.
|
||||
|
||||
## Що ви отримуєте
|
||||
|
||||
- Окремий профіль браузера з назвою **openclaw** (типово з помаранчевим акцентом).
|
||||
- Детерміноване керування вкладками (перелік/відкриття/фокус/закриття).
|
||||
- Дії агента (клік/введення/перетягування/вибір), знімки стану, скриншоти, PDF.
|
||||
- Необов’язкову підтримку кількох профілів (`openclaw`, `work`, `remote`, ...).
|
||||
- Детерміноване керування вкладками (перелік/відкриття/фокусування/закриття).
|
||||
- Дії агента (натискання/введення/перетягування/вибір), знімки стану, скриншоти, PDF.
|
||||
- Вбудований Skill `browser-automation`, який навчає агентів циклу відновлення snapshot,
|
||||
stable-tab, stale-ref і manual-blocker, коли ввімкнено Plugin браузера.
|
||||
- Необов’язкова підтримка кількох профілів (`openclaw`, `work`, `remote`, ...).
|
||||
|
||||
Цей браузер **не** є вашим основним щоденним браузером. Це безпечна, ізольована поверхня для
|
||||
автоматизації та перевірки з боку агента.
|
||||
Цей браузер **не** призначений для щоденного використання. Це безпечне, ізольоване середовище для
|
||||
автоматизації та перевірки агентом.
|
||||
|
||||
## Швидкий старт
|
||||
## Швидкий початок
|
||||
|
||||
```bash
|
||||
openclaw browser --browser-profile openclaw status
|
||||
@ -44,15 +46,15 @@ openclaw browser --browser-profile openclaw open https://example.com
|
||||
openclaw browser --browser-profile openclaw snapshot
|
||||
```
|
||||
|
||||
Якщо ви бачите “Browser disabled”, увімкніть це в конфігурації (див. нижче) і перезапустіть
|
||||
Якщо ви бачите “Браузер вимкнено”, увімкніть його в конфігурації (див. нижче) і перезапустіть
|
||||
Gateway.
|
||||
|
||||
Якщо `openclaw browser` взагалі відсутній або агент каже, що інструмент браузера
|
||||
недоступний, перейдіть до [Відсутня команда браузера або інструмент](/uk/tools/browser#missing-browser-command-or-tool).
|
||||
Якщо `openclaw browser` взагалі відсутня або агент каже, що інструмент браузера
|
||||
недоступний, перейдіть до [Відсутня команда або інструмент браузера](/uk/tools/browser#missing-browser-command-or-tool).
|
||||
|
||||
## Керування Plugin
|
||||
|
||||
Типовий інструмент `browser` — це вбудований Plugin. Вимкніть його, щоб замінити іншим Plugin, який реєструє ту саму назву інструмента `browser`:
|
||||
Типовий інструмент `browser` — це вбудований Plugin. Вимкніть його, щоб замінити іншим Plugin, який реєструє той самий інструмент із назвою `browser`:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -66,13 +68,29 @@ Gateway.
|
||||
}
|
||||
```
|
||||
|
||||
Для типових значень потрібні і `plugins.entries.browser.enabled`, і `browser.enabled=true`. Вимкнення лише Plugin прибирає CLI `openclaw browser`, метод Gateway `browser.request`, інструмент агента та сервіс керування як єдине ціле; ваш конфіг `browser.*` залишається недоторканим для заміни.
|
||||
Для типових налаштувань потрібні і `plugins.entries.browser.enabled`, і `browser.enabled=true`. Вимкнення лише Plugin прибирає CLI `openclaw browser`, метод Gateway `browser.request`, інструмент агента та сервіс керування як єдине ціле; ваша конфігурація `browser.*` залишається недоторканою для заміни.
|
||||
|
||||
Зміни конфігурації браузера потребують перезапуску Gateway, щоб Plugin міг повторно зареєструвати свій сервіс.
|
||||
|
||||
## Відсутня команда браузера або інструмент
|
||||
## Вказівки для агента
|
||||
|
||||
Якщо `openclaw browser` невідомий після оновлення, `browser.request` відсутній або агент повідомляє, що інструмент браузера недоступний, зазвичай причина — список `plugins.allow`, у якому немає `browser`. Додайте його:
|
||||
Plugin браузера постачається з двома рівнями вказівок для агента:
|
||||
|
||||
- Опис інструмента `browser` містить компактний контракт, який завжди активний: вибирайте
|
||||
правильний профіль, тримайте refs у межах тієї самої вкладки, використовуйте `tabId`/мітки для націлювання на вкладки
|
||||
і завантажуйте Skill браузера для багатокрокової роботи.
|
||||
- Вбудований Skill `browser-automation` містить довший робочий цикл:
|
||||
спочатку перевірити статус/вкладки, позначити вкладки завдання, зробити snapshot перед дією, повторно зняти snapshot
|
||||
після змін інтерфейсу, один раз відновити stale refs і повідомляти про login/2FA/captcha або
|
||||
блокування camera/microphone як про ручну дію, а не вгадувати.
|
||||
|
||||
Skills, вбудовані в Plugin, перелічуються в доступних Skills агента, коли
|
||||
Plugin увімкнено. Повні інструкції Skill завантажуються на вимогу, тому звичайні
|
||||
сеанси не оплачують повну вартість токенів.
|
||||
|
||||
## Відсутня команда або інструмент браузера
|
||||
|
||||
Якщо після оновлення `openclaw browser` невідома, `browser.request` відсутній або агент повідомляє, що інструмент браузера недоступний, зазвичай причина в списку `plugins.allow`, у якому немає `browser`. Додайте його:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -82,40 +100,39 @@ Gateway.
|
||||
}
|
||||
```
|
||||
|
||||
`browser.enabled=true`, `plugins.entries.browser.enabled=true` і `tools.alsoAllow: ["browser"]` не замінюють членство в allowlist — allowlist керує завантаженням Plugin, а політика інструментів застосовується лише після завантаження. Видалення `plugins.allow` повністю також відновлює типову поведінку.
|
||||
`browser.enabled=true`, `plugins.entries.browser.enabled=true` і `tools.alsoAllow: ["browser"]` не замінюють членство в allowlist — allowlist керує завантаженням Plugin, а політика інструментів виконується лише після завантаження. Видалення `plugins.allow` повністю також відновлює типову поведінку.
|
||||
|
||||
## Профілі: `openclaw` vs `user`
|
||||
## Профілі: `openclaw` і `user`
|
||||
|
||||
- `openclaw`: керований, ізольований браузер (розширення не потрібне).
|
||||
- `user`: вбудований профіль підключення Chrome MCP до вашої **реальної сесії Chrome**
|
||||
з входом.
|
||||
- `user`: вбудований профіль підключення Chrome MCP до вашої **справжньої авторизованої сесії Chrome**.
|
||||
|
||||
Для викликів інструмента браузера агентом:
|
||||
|
||||
- Типово: використовувати ізольований браузер `openclaw`.
|
||||
- Віддавайте перевагу `profile="user"`, коли важливі наявні сесії з входом і користувач
|
||||
знаходиться за комп’ютером, щоб натиснути/підтвердити будь-який запит на підключення.
|
||||
- Типово: використовуйте ізольований браузер `openclaw`.
|
||||
- Віддавайте перевагу `profile="user"`, коли важливі наявні авторизовані сесії і користувач
|
||||
перебуває за комп’ютером, щоб натиснути/підтвердити будь-який запит на підключення.
|
||||
- `profile` — це явне перевизначення, коли вам потрібен конкретний режим браузера.
|
||||
|
||||
Установіть `browser.defaultProfile: "openclaw"`, якщо хочете, щоб керований режим був типовим.
|
||||
|
||||
## Конфігурація
|
||||
|
||||
Налаштування браузера містяться в `~/.openclaw/openclaw.json`.
|
||||
Налаштування браузера зберігаються в `~/.openclaw/openclaw.json`.
|
||||
|
||||
```json5
|
||||
{
|
||||
browser: {
|
||||
enabled: true, // default: true
|
||||
enabled: true, // типово: true
|
||||
ssrfPolicy: {
|
||||
// dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access
|
||||
// allowPrivateNetwork: true, // legacy alias
|
||||
// dangerouslyAllowPrivateNetwork: true, // вмикайте лише для довіреного доступу до приватної мережі
|
||||
// allowPrivateNetwork: true, // застарілий псевдонім
|
||||
// hostnameAllowlist: ["*.example.com", "example.com"],
|
||||
// allowedHostnames: ["localhost"],
|
||||
},
|
||||
// cdpUrl: "http://127.0.0.1:18792", // legacy single-profile override
|
||||
remoteCdpTimeoutMs: 1500, // remote CDP HTTP timeout (ms)
|
||||
remoteCdpHandshakeTimeoutMs: 3000, // remote CDP WebSocket handshake timeout (ms)
|
||||
// cdpUrl: "http://127.0.0.1:18792", // застаріле перевизначення одного профілю
|
||||
remoteCdpTimeoutMs: 1500, // тайм-аут HTTP для віддаленого CDP (мс)
|
||||
remoteCdpHandshakeTimeoutMs: 3000, // тайм-аут WebSocket handshake для віддаленого CDP (мс)
|
||||
defaultProfile: "openclaw",
|
||||
color: "#FF4500",
|
||||
headless: false,
|
||||
@ -144,41 +161,41 @@ Gateway.
|
||||
|
||||
<AccordionGroup>
|
||||
|
||||
<Accordion title="Порти та доступність">
|
||||
<Accordion title="Порти та досяжність">
|
||||
|
||||
- Сервіс керування прив’язується до loopback на порту, похідному від `gateway.port` (типово `18791` = gateway + 2). Перевизначення `gateway.port` або `OPENCLAW_GATEWAY_PORT` зсуває похідні порти в тій самій групі.
|
||||
- Локальні профілі `openclaw` автоматично призначають `cdpPort`/`cdpUrl`; задавайте їх лише для віддаленого CDP. Якщо `cdpUrl` не задано, типово використовується керований локальний CDP-порт.
|
||||
- `remoteCdpTimeoutMs` застосовується до перевірок доступності HTTP для віддаленого (не-loopback) CDP; `remoteCdpHandshakeTimeoutMs` застосовується до WebSocket handshake віддаленого CDP.
|
||||
- Сервіс керування прив’язується до local loopback на порті, похідному від `gateway.port` (типово `18791` = gateway + 2). Перевизначення `gateway.port` або `OPENCLAW_GATEWAY_PORT` зсуває похідні порти в тій самій групі.
|
||||
- Локальні профілі `openclaw` автоматично призначають `cdpPort`/`cdpUrl`; задавайте їх лише для віддаленого CDP. Якщо `cdpUrl` не задано, типово використовується локальний керований порт CDP.
|
||||
- `remoteCdpTimeoutMs` застосовується до перевірок доступності HTTP віддаленого CDP (не-loopback); `remoteCdpHandshakeTimeoutMs` застосовується до WebSocket handshakes віддаленого CDP.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Політика SSRF">
|
||||
|
||||
- Навігація браузера та відкриття вкладок захищені від SSRF перед навігацією та, наскільки можливо, повторно перевіряються на фінальному URL `http(s)` після неї.
|
||||
- У строгому режимі SSRF також перевіряються виявлення віддалених CDP-ендпойнтів і запити `/json/version` (`cdpUrl`).
|
||||
- `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` типово вимкнено; вмикайте лише тоді, коли доступ браузера до приватної мережі свідомо вважається довіреним.
|
||||
- `browser.ssrfPolicy.allowPrivateNetwork` залишається підтримуваним як застарілий синонім.
|
||||
- Навігація браузера та open-tab захищені від SSRF перед навігацією і повторно перевіряються в міру можливості за фінальним URL `http(s)` після неї.
|
||||
- У строгому режимі SSRF discovery віддаленої кінцевої точки CDP і перевірки `/json/version` (`cdpUrl`) також перевіряються.
|
||||
- `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` типово вимкнено; вмикайте лише тоді, коли доступ браузера до приватної мережі є навмисно довіреним.
|
||||
- `browser.ssrfPolicy.allowPrivateNetwork` залишається підтримуваним як застарілий псевдонім.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Поведінка профілів">
|
||||
<Accordion title="Поведінка профілю">
|
||||
|
||||
- `attachOnly: true` означає ніколи не запускати локальний браузер; лише підключатися, якщо він уже працює.
|
||||
- `attachOnly: true` означає ніколи не запускати локальний браузер; підключатися лише якщо він уже працює.
|
||||
- `color` (на верхньому рівні та для кожного профілю) тонує інтерфейс браузера, щоб ви могли бачити, який профіль активний.
|
||||
- Типовий профіль — `openclaw` (керований автономний). Використовуйте `defaultProfile: "user"`, щоб вибрати браузер користувача з входом.
|
||||
- Порядок автовиявлення: системний браузер за замовчуванням, якщо він на базі Chromium; інакше Chrome → Brave → Edge → Chromium → Chrome Canary.
|
||||
- `driver: "existing-session"` використовує Chrome DevTools MCP замість сирого CDP. Не задавайте `cdpUrl` для цього драйвера.
|
||||
- Типовий профіль — `openclaw` (керований автономний). Використовуйте `defaultProfile: "user"`, щоб перейти до авторизованого браузера користувача.
|
||||
- Порядок автовизначення: системний браузер за замовчуванням, якщо він Chromium-based; інакше Chrome → Brave → Edge → Chromium → Chrome Canary.
|
||||
- `driver: "existing-session"` використовує Chrome DevTools MCP замість сирого CDP. Не задавайте `cdpUrl` для цього driver.
|
||||
- Установіть `browser.profiles.<name>.userDataDir`, коли профіль existing-session має підключатися до нестандартного профілю користувача Chromium (Brave, Edge тощо).
|
||||
|
||||
</Accordion>
|
||||
|
||||
</AccordionGroup>
|
||||
|
||||
## Використання Brave (або іншого браузера на базі Chromium)
|
||||
## Використання Brave (або іншого Chromium-based браузера)
|
||||
|
||||
Якщо вашим **системним браузером за замовчуванням** є браузер на базі Chromium (Chrome/Brave/Edge тощо),
|
||||
OpenClaw автоматично використовує його. Установіть `browser.executablePath`, щоб перевизначити
|
||||
автовиявлення:
|
||||
Якщо вашим **системним браузером за замовчуванням** є Chromium-based браузер (Chrome/Brave/Edge тощо),
|
||||
OpenClaw використовує його автоматично. Установіть `browser.executablePath`, щоб перевизначити
|
||||
автовизначення:
|
||||
|
||||
```bash
|
||||
openclaw config set browser.executablePath "/usr/bin/google-chrome"
|
||||
@ -219,17 +236,17 @@ openclaw config set browser.executablePath "/usr/bin/google-chrome"
|
||||
## Локальне та віддалене керування
|
||||
|
||||
- **Локальне керування (типово):** Gateway запускає loopback-сервіс керування і може запускати локальний браузер.
|
||||
- **Віддалене керування (хост вузла):** запустіть хост вузла на машині, де є браузер; Gateway проксіює до нього дії браузера.
|
||||
- **Віддалене керування (host Node):** запустіть host Node на машині, де є браузер; Gateway проксуватиме до нього дії браузера.
|
||||
- **Віддалений CDP:** установіть `browser.profiles.<name>.cdpUrl` (або `browser.cdpUrl`), щоб
|
||||
підключитися до віддаленого браузера на базі Chromium. У такому разі OpenClaw не запускатиме локальний браузер.
|
||||
підключитися до віддаленого Chromium-based браузера. У цьому випадку OpenClaw не запускатиме локальний браузер.
|
||||
|
||||
Поведінка зупинки відрізняється залежно від режиму профілю:
|
||||
Поведінка під час зупинки відрізняється залежно від режиму профілю:
|
||||
|
||||
- локальні керовані профілі: `openclaw browser stop` зупиняє процес браузера, який
|
||||
запустив OpenClaw
|
||||
- профілі лише для підключення та профілі віддаленого CDP: `openclaw browser stop` закриває активну
|
||||
сесію керування і скидає перевизначення емуляції Playwright/CDP (viewport,
|
||||
колірну схему, локаль, часовий пояс, офлайн-режим та подібний стан), навіть
|
||||
сесію керування та скидає перевизначення емуляції Playwright/CDP (viewport,
|
||||
color scheme, locale, timezone, offline mode та подібний стан), навіть
|
||||
якщо OpenClaw не запускав жодного процесу браузера
|
||||
|
||||
URL віддаленого CDP можуть містити автентифікацію:
|
||||
@ -237,22 +254,22 @@ URL віддаленого CDP можуть містити автентифік
|
||||
- Токени запиту (наприклад, `https://provider.example?token=<token>`)
|
||||
- HTTP Basic auth (наприклад, `https://user:pass@provider.example`)
|
||||
|
||||
OpenClaw зберігає автентифікацію під час виклику ендпойнтів `/json/*` і під час підключення
|
||||
до CDP WebSocket. Для токенів віддавайте перевагу змінним середовища або менеджерам секретів
|
||||
замість коміту їх у конфігураційні файли.
|
||||
OpenClaw зберігає автентифікацію під час виклику кінцевих точок `/json/*` і під час підключення
|
||||
до WebSocket CDP. Для токенів віддавайте перевагу змінним середовища або менеджерам секретів
|
||||
замість коміту їх у файли конфігурації.
|
||||
|
||||
## Node browser proxy (типово без додаткової конфігурації)
|
||||
## Node browser proxy (типовий шлях без додаткової конфігурації)
|
||||
|
||||
Якщо ви запускаєте **хост вузла** на машині, де є ваш браузер, OpenClaw може
|
||||
Якщо ви запускаєте **host Node** на машині, де є ваш браузер, OpenClaw може
|
||||
автоматично маршрутизувати виклики інструмента браузера до цього вузла без жодної додаткової конфігурації браузера.
|
||||
Це типовий шлях для віддалених gateway.
|
||||
|
||||
Нотатки:
|
||||
Примітки:
|
||||
|
||||
- Хост вузла надає доступ до свого локального сервера керування браузером через **proxy command**.
|
||||
- Host Node відкриває свій локальний сервер керування браузером через **proxy command**.
|
||||
- Профілі беруться з власної конфігурації `browser.profiles` вузла (так само, як локально).
|
||||
- `nodeHost.browserProxy.allowProfiles` — необов’язковий параметр. Залиште його порожнім для застарілої/типової поведінки: усі налаштовані профілі залишаються доступними через proxy, включно з маршрутами створення/видалення профілів.
|
||||
- Якщо ви задаєте `nodeHost.browserProxy.allowProfiles`, OpenClaw розглядає це як межу мінімальних привілеїв: можна адресувати лише профілі з allowlist, а маршрути створення/видалення постійних профілів блокуються на поверхні proxy.
|
||||
- `nodeHost.browserProxy.allowProfiles` є необов’язковим. Залиште його порожнім для застарілої/типової поведінки: усі налаштовані профілі залишаються доступними через proxy, включно з маршрутами створення/видалення профілів.
|
||||
- Якщо ви задаєте `nodeHost.browserProxy.allowProfiles`, OpenClaw розглядає це як межу мінімальних привілеїв: лише профілі з allowlist можуть бути ціллю, а маршрути створення/видалення постійних профілів блокуються на поверхні proxy.
|
||||
- Вимкніть це, якщо воно вам не потрібне:
|
||||
- На вузлі: `nodeHost.browserProxy.enabled=false`
|
||||
- На gateway: `gateway.nodes.browser.mode="off"`
|
||||
@ -260,9 +277,9 @@ OpenClaw зберігає автентифікацію під час викли
|
||||
## Browserless (хостинговий віддалений CDP)
|
||||
|
||||
[Browserless](https://browserless.io) — це хостинговий сервіс Chromium, який надає
|
||||
URL підключення CDP через HTTPS і WebSocket. OpenClaw може використовувати будь-яку форму, але
|
||||
URL підключення CDP через HTTPS і WebSocket. OpenClaw може використовувати обидва формати, але
|
||||
для профілю віддаленого браузера найпростішим варіантом є прямий URL WebSocket
|
||||
з документації Browserless щодо підключення.
|
||||
з документації з підключення Browserless.
|
||||
|
||||
Приклад:
|
||||
|
||||
@ -283,41 +300,41 @@ URL підключення CDP через HTTPS і WebSocket. OpenClaw може
|
||||
}
|
||||
```
|
||||
|
||||
Нотатки:
|
||||
Примітки:
|
||||
|
||||
- Замініть `<BROWSERLESS_API_KEY>` на ваш реальний токен Browserless.
|
||||
- Виберіть регіональний ендпойнт, який відповідає вашому обліковому запису Browserless (див. їхню документацію).
|
||||
- Замініть `<BROWSERLESS_API_KEY>` на ваш справжній токен Browserless.
|
||||
- Виберіть кінцеву точку регіону, яка відповідає вашому обліковому запису Browserless (див. їхню документацію).
|
||||
- Якщо Browserless надає вам базовий URL HTTPS, ви можете або перетворити його на
|
||||
`wss://` для прямого підключення CDP, або залишити URL HTTPS і дозволити OpenClaw
|
||||
виявити `/json/version`.
|
||||
|
||||
## Провайдери прямого WebSocket CDP
|
||||
|
||||
Деякі хостингові браузерні сервіси надають **прямий ендпойнт WebSocket** замість
|
||||
стандартного виявлення CDP на основі HTTP (`/json/version`). OpenClaw приймає три
|
||||
Деякі хостингові сервіси браузера надають **пряму кінцеву точку WebSocket** замість
|
||||
стандартного HTTP-based discovery для CDP (`/json/version`). OpenClaw приймає три
|
||||
форми URL CDP і автоматично вибирає правильну стратегію підключення:
|
||||
|
||||
- **Виявлення HTTP(S)** — `http://host[:port]` або `https://host[:port]`.
|
||||
- **HTTP(S) discovery** — `http://host[:port]` або `https://host[:port]`.
|
||||
OpenClaw викликає `/json/version`, щоб виявити URL WebSocket debugger, а потім
|
||||
підключається. Резервного переходу на WebSocket немає.
|
||||
- **Прямі ендпойнти WebSocket** — `ws://host[:port]/devtools/<kind>/<id>` або
|
||||
підключається. Fallback до WebSocket немає.
|
||||
- **Прямі кінцеві точки WebSocket** — `ws://host[:port]/devtools/<kind>/<id>` або
|
||||
`wss://...` зі шляхом `/devtools/browser|page|worker|shared_worker|service_worker/<id>`.
|
||||
OpenClaw підключається безпосередньо через WebSocket handshake і повністю пропускає
|
||||
OpenClaw підключається напряму через WebSocket handshake і повністю пропускає
|
||||
`/json/version`.
|
||||
- **Кореневі URL WebSocket без шляху** — `ws://host[:port]` або `wss://host[:port]` без
|
||||
- **Кореневі bare WebSocket** — `ws://host[:port]` або `wss://host[:port]` без
|
||||
шляху `/devtools/...` (наприклад, [Browserless](https://browserless.io),
|
||||
[Browserbase](https://www.browserbase.com)). OpenClaw спочатку пробує HTTP
|
||||
виявлення через `/json/version` (нормалізуючи схему до `http`/`https`);
|
||||
якщо виявлення повертає `webSocketDebuggerUrl`, він використовується, інакше OpenClaw
|
||||
переходить до прямого WebSocket handshake на корені без шляху. Це дозволяє
|
||||
підключатися навіть bare `ws://`, спрямованому на локальний Chrome, оскільки Chrome приймає
|
||||
WebSocket upgrade лише на конкретному шляху для цілі з
|
||||
discovery через `/json/version` (нормалізуючи схему до `http`/`https`);
|
||||
якщо discovery повертає `webSocketDebuggerUrl`, він використовується, інакше OpenClaw
|
||||
переходить до прямого WebSocket handshake на bare root. Це дозволяє
|
||||
bare `ws://`, спрямованому на локальний Chrome, усе ж підключатися, оскільки Chrome
|
||||
приймає WebSocket upgrades лише на конкретному шляху для цілі з
|
||||
`/json/version`.
|
||||
|
||||
### Browserbase
|
||||
|
||||
[Browserbase](https://www.browserbase.com) — це хмарна платформа для запуску
|
||||
headless-браузерів із вбудованим розв’язанням CAPTCHA, stealth mode та residential
|
||||
headless браузерів із вбудованим розв’язанням CAPTCHA, stealth mode та residential
|
||||
proxy.
|
||||
|
||||
```json5
|
||||
@ -337,64 +354,65 @@ proxy.
|
||||
}
|
||||
```
|
||||
|
||||
Нотатки:
|
||||
Примітки:
|
||||
|
||||
- [Зареєструйтеся](https://www.browserbase.com/sign-up) і скопіюйте свій **API Key**
|
||||
з [панелі Overview](https://www.browserbase.com/overview).
|
||||
- Замініть `<BROWSERBASE_API_KEY>` на ваш реальний API key Browserbase.
|
||||
- Browserbase автоматично створює сесію браузера під час підключення WebSocket, тому
|
||||
з [Overview dashboard](https://www.browserbase.com/overview).
|
||||
- Замініть `<BROWSERBASE_API_KEY>` на ваш справжній API key Browserbase.
|
||||
- Browserbase автоматично створює сесію браузера під час підключення WebSocket, тож
|
||||
крок ручного створення сесії не потрібен.
|
||||
- Безкоштовний тариф дозволяє одну одночасну сесію та одну годину браузера на місяць.
|
||||
Ліміти платних планів дивіться в [pricing](https://www.browserbase.com/pricing).
|
||||
- Повний довідник API, посібники з SDK та приклади інтеграції дивіться в [документації Browserbase](https://docs.browserbase.com).
|
||||
Обмеження платних тарифів дивіться в [pricing](https://www.browserbase.com/pricing).
|
||||
- Повний довідник API,
|
||||
посібники з SDK та приклади інтеграції дивіться в [документації Browserbase](https://docs.browserbase.com).
|
||||
|
||||
## Безпека
|
||||
|
||||
Ключові ідеї:
|
||||
|
||||
- Керування браузером доступне лише через loopback; доступ проходить через автентифікацію Gateway або pairing з вузлом.
|
||||
- Автономний loopback HTTP API браузера використовує **лише автентифікацію зі спільним секретом**:
|
||||
bearer auth через токен gateway, `x-openclaw-password` або HTTP Basic auth із
|
||||
- Керування браузером доступне лише через loopback; доступ проходить через auth Gateway або pairing вузла.
|
||||
- Окремий loopback HTTP API браузера використовує **лише auth на основі shared secret**:
|
||||
bearer auth токена gateway, `x-openclaw-password` або HTTP Basic auth із
|
||||
налаштованим паролем gateway.
|
||||
- Заголовки ідентичності Tailscale Serve та `gateway.auth.mode: "trusted-proxy"`
|
||||
**не** автентифікують цей автономний loopback API браузера.
|
||||
- Якщо керування браузером увімкнене й не налаштовано автентифікацію зі спільним секретом, OpenClaw
|
||||
**не** автентифікують цей окремий loopback API браузера.
|
||||
- Якщо керування браузером увімкнено й не налаштовано жодної auth на основі shared secret, OpenClaw
|
||||
автоматично генерує `gateway.auth.token` під час запуску та зберігає його в конфігурації.
|
||||
- OpenClaw **не** генерує цей токен автоматично, коли `gateway.auth.mode` уже має значення
|
||||
- OpenClaw **не** генерує цей токен автоматично, якщо `gateway.auth.mode` уже має значення
|
||||
`password`, `none` або `trusted-proxy`.
|
||||
- Тримайте Gateway та всі хости вузлів у приватній мережі (Tailscale); уникайте публічного доступу.
|
||||
- Ставтеся до URL/токенів віддаленого CDP як до секретів; віддавайте перевагу env vars або менеджеру секретів.
|
||||
- Тримайте Gateway і будь-які node host у приватній мережі (Tailscale); уникайте публічного доступу.
|
||||
- Розглядайте URL/токени віддаленого CDP як секрети; віддавайте перевагу змінним середовища або менеджеру секретів.
|
||||
|
||||
Поради щодо віддаленого CDP:
|
||||
|
||||
- За можливості віддавайте перевагу зашифрованим ендпойнтам (HTTPS або WSS) і короткоживучим токенам.
|
||||
- Уникайте вбудовування довгоживучих токенів безпосередньо в конфігураційні файли.
|
||||
- За можливості віддавайте перевагу зашифрованим кінцевим точкам (HTTPS або WSS) і короткоживучим токенам.
|
||||
- Уникайте вбудовування довгоживучих токенів безпосередньо у файли конфігурації.
|
||||
|
||||
## Профілі (кілька браузерів)
|
||||
|
||||
OpenClaw підтримує кілька іменованих профілів (конфігурації маршрутизації). Профілі можуть бути:
|
||||
OpenClaw підтримує кілька іменованих профілів (конфігурацій маршрутизації). Профілі можуть бути:
|
||||
|
||||
- **керовані OpenClaw**: виділений екземпляр браузера на базі Chromium із власним каталогом даних користувача + портом CDP
|
||||
- **віддалені**: явний URL CDP (браузер на базі Chromium, що працює деінде)
|
||||
- **наявна сесія**: ваш наявний профіль Chrome через автопідключення Chrome DevTools MCP
|
||||
- **керованими OpenClaw**: окремий екземпляр Chromium-based браузера з власним каталогом user data + портом CDP
|
||||
- **віддаленими**: явний URL CDP (Chromium-based браузер, що працює в іншому місці)
|
||||
- **наявною сесією**: ваш наявний профіль Chrome через автоматичне підключення Chrome DevTools MCP
|
||||
|
||||
Типові значення:
|
||||
|
||||
- Профіль `openclaw` створюється автоматично, якщо його немає.
|
||||
- Профіль `user` вбудований для підключення existing-session через Chrome MCP.
|
||||
- Профілі existing-session, окрім `user`, вмикаються явно; створюйте їх через `--driver existing-session`.
|
||||
- Профіль `user` є вбудованим для existing-session attach через Chrome MCP.
|
||||
- Профілі existing-session, крім `user`, є опціональними; створюйте їх за допомогою `--driver existing-session`.
|
||||
- Локальні порти CDP типово виділяються з діапазону **18800–18899**.
|
||||
- Видалення профілю переміщує його локальний каталог даних до Trash.
|
||||
|
||||
Усі ендпойнти керування приймають `?profile=<name>`; CLI використовує `--browser-profile`.
|
||||
Усі кінцеві точки керування приймають `?profile=<name>`; CLI використовує `--browser-profile`.
|
||||
|
||||
## Existing-session через Chrome DevTools MCP
|
||||
|
||||
OpenClaw також може підключатися до запущеного профілю браузера на базі Chromium через
|
||||
OpenClaw також може підключатися до запущеного профілю Chromium-based браузера через
|
||||
офіційний сервер Chrome DevTools MCP. Це повторно використовує вкладки та стан входу,
|
||||
які вже відкриті в цьому профілі браузера.
|
||||
|
||||
Офіційні довідкові матеріали та налаштування:
|
||||
Офіційні довідкові матеріали та посилання для налаштування:
|
||||
|
||||
- [Chrome for Developers: Використання Chrome DevTools MCP із вашою сесією браузера](https://developer.chrome.com/blog/chrome-devtools-mcp-debug-your-browser-session)
|
||||
- [README Chrome DevTools MCP](https://github.com/ChromeDevTools/chrome-devtools-mcp)
|
||||
@ -403,15 +421,15 @@ OpenClaw також може підключатися до запущеного
|
||||
|
||||
- `user`
|
||||
|
||||
Необов’язково: створіть власний користувацький профіль existing-session, якщо вам потрібні
|
||||
Необов’язково: створіть власний custom existing-session profile, якщо вам потрібні
|
||||
інша назва, колір або каталог даних браузера.
|
||||
|
||||
Типова поведінка:
|
||||
|
||||
- Вбудований профіль `user` використовує автопідключення Chrome MCP, яке націлюється на
|
||||
типовий локальний профіль Google Chrome.
|
||||
- Вбудований профіль `user` використовує авто-підключення Chrome MCP, яке націлюється на
|
||||
локальний профіль Google Chrome за замовчуванням.
|
||||
|
||||
Використовуйте `userDataDir` для Brave, Edge, Chromium або нетипового профілю Chrome:
|
||||
Використовуйте `userDataDir` для Brave, Edge, Chromium або нестандартного профілю Chrome:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -431,8 +449,8 @@ OpenClaw також може підключатися до запущеного
|
||||
Потім у відповідному браузері:
|
||||
|
||||
1. Відкрийте сторінку inspect цього браузера для віддаленого налагодження.
|
||||
2. Увімкніть віддалене налагодження.
|
||||
3. Залиште браузер запущеним і підтвердьте запит на підключення, коли OpenClaw під’єднається.
|
||||
2. Увімкніть remote debugging.
|
||||
3. Не закривайте браузер і підтвердьте запит на підключення, коли OpenClaw приєднається.
|
||||
|
||||
Поширені сторінки inspect:
|
||||
|
||||
@ -440,7 +458,7 @@ OpenClaw також може підключатися до запущеного
|
||||
- Brave: `brave://inspect/#remote-debugging`
|
||||
- Edge: `edge://inspect/#remote-debugging`
|
||||
|
||||
Live attach smoke test:
|
||||
Smoke test для live attach:
|
||||
|
||||
```bash
|
||||
openclaw browser --browser-profile user start
|
||||
@ -449,58 +467,59 @@ openclaw browser --browser-profile user tabs
|
||||
openclaw browser --browser-profile user snapshot --format ai
|
||||
```
|
||||
|
||||
Як виглядає успіх:
|
||||
Ознаки успіху:
|
||||
|
||||
- `status` показує `driver: existing-session`
|
||||
- `status` показує `transport: chrome-mcp`
|
||||
- `status` показує `running: true`
|
||||
- `tabs` перелічує вже відкриті вкладки браузера
|
||||
- `snapshot` повертає ref з вибраної live-вкладки
|
||||
- `tabs` показує список уже відкритих вкладок браузера
|
||||
- `snapshot` повертає refs з вибраної активної вкладки
|
||||
|
||||
Що перевірити, якщо підключення не працює:
|
||||
|
||||
- цільовий браузер на базі Chromium має версію `144+`
|
||||
- віддалене налагодження увімкнене на сторінці inspect цього браузера
|
||||
- браузер показав запит на підключення, і ви його підтвердили
|
||||
- `openclaw doctor` переносить стару конфігурацію браузера на основі розширення та перевіряє, що
|
||||
Chrome встановлено локально для типових профілів автопідключення, але він не може
|
||||
увімкнути віддалене налагодження в браузері за вас
|
||||
- цільовий Chromium-based браузер має версію `144+`
|
||||
- у сторінці inspect цього браузера ввімкнено remote debugging
|
||||
- браузер показав запит на підключення і ви його підтвердили
|
||||
- `openclaw doctor` мігрує стару конфігурацію браузера на основі розширення і перевіряє, що
|
||||
Chrome локально встановлено для типових профілів авто-підключення, але він не може
|
||||
увімкнути для вас remote debugging на боці браузера
|
||||
|
||||
Використання агентом:
|
||||
|
||||
- Використовуйте `profile="user"`, коли вам потрібен стан браузера користувача з виконаним входом.
|
||||
- Якщо ви використовуєте власний профіль existing-session, передайте його явну назву профілю.
|
||||
- Використовуйте `profile="user"`, коли вам потрібен стан авторизованого браузера користувача.
|
||||
- Якщо ви використовуєте custom existing-session profile, передайте явну назву цього профілю.
|
||||
- Обирайте цей режим лише тоді, коли користувач перебуває за комп’ютером, щоб підтвердити
|
||||
запит на підключення.
|
||||
- Gateway або хост вузла може запускати `npx chrome-devtools-mcp@latest --autoConnect`
|
||||
- Gateway або node host може запускати `npx chrome-devtools-mcp@latest --autoConnect`
|
||||
|
||||
Нотатки:
|
||||
Примітки:
|
||||
|
||||
- Цей шлях є ризикованішим, ніж ізольований профіль `openclaw`, оскільки він може
|
||||
виконувати дії у вашій сесії браузера з виконаним входом.
|
||||
- OpenClaw не запускає браузер для цього драйвера; він лише підключається.
|
||||
- Цей шлях має вищий ризик, ніж ізольований профіль `openclaw`, оскільки він може
|
||||
виконувати дії у вашій авторизованій сесії браузера.
|
||||
- OpenClaw не запускає браузер для цього driver; він лише підключається.
|
||||
- Тут OpenClaw використовує офіційний потік Chrome DevTools MCP `--autoConnect`. Якщо
|
||||
встановлено `userDataDir`, його буде передано далі для націлювання на цей каталог даних користувача.
|
||||
- Existing-session може підключатися на вибраному хості або через підключений
|
||||
browser node. Якщо Chrome розташований деінде й browser node не підключений, використовуйте
|
||||
натомість віддалений CDP або хост вузла.
|
||||
задано `userDataDir`, він передається далі для націлювання на цей каталог даних користувача.
|
||||
- Existing-session може підключатися на вибраному host або через підключений
|
||||
browser node. Якщо Chrome працює деінде і browser node не підключено, використовуйте
|
||||
віддалений CDP або node host.
|
||||
|
||||
<Accordion title="Обмеження функції existing-session">
|
||||
|
||||
Порівняно з керованим профілем `openclaw`, драйвери existing-session мають більше обмежень:
|
||||
|
||||
- **Скриншоти** — працюють знімки сторінки та знімки елементів через `--ref`; CSS-селектори `--element` не підтримуються. `--full-page` не можна поєднувати з `--ref` або `--element`. Для скриншотів сторінки або елементів на основі ref Playwright не потрібен.
|
||||
- **Дії** — `click`, `type`, `hover`, `scrollIntoView`, `drag` і `select` потребують ref зі snapshot (без CSS-селекторів). `click` підтримує лише ліву кнопку. `type` не підтримує `slowly=true`; використовуйте `fill` або `press`. `press` не підтримує `delayMs`. `type`, `hover`, `scrollIntoView`, `drag`, `select`, `fill` та `evaluate` не підтримують тайм-аути для окремих викликів. `select` приймає одне значення.
|
||||
- **Очікування / upload / dialog** — `wait --url` підтримує точні, часткові та glob-шаблони; `wait --load networkidle` не підтримується. Хуки upload потребують `ref` або `inputRef`, по одному файлу за раз, без CSS `element`. Хуки dialog не підтримують перевизначення тайм-аутів.
|
||||
- **Функції лише для керованого режиму** — пакетні дії, експорт PDF, перехоплення завантажень і `responsebody` як і раніше потребують шляху керованого браузера.
|
||||
- **Дії** — `click`, `type`, `hover`, `scrollIntoView`, `drag` і `select` потребують snapshot refs (без CSS-селекторів). `click` підтримує лише ліву кнопку миші. `type` не підтримує `slowly=true`; використовуйте `fill` або `press`. `press` не підтримує `delayMs`. `type`, `hover`, `scrollIntoView`, `drag`, `select`, `fill` і `evaluate` не підтримують тайм-аути для окремого виклику. `select` приймає одне значення.
|
||||
- **Очікування / завантаження / діалоги** — `wait --url` підтримує точні, часткові та glob-шаблони; `wait --load networkidle` не підтримується. Hooks завантаження потребують `ref` або `inputRef`, по одному файлу за раз, без CSS `element`. Hooks діалогів не підтримують перевизначення тайм-аутів.
|
||||
- **Функції лише для керованого режиму** — пакетні дії, експорт PDF, перехоплення завантажень і `responsebody` досі потребують шляху керованого браузера.
|
||||
|
||||
</Accordion>
|
||||
|
||||
## Гарантії ізоляції
|
||||
|
||||
- **Виділений каталог даних користувача**: ніколи не торкається профілю вашого особистого браузера.
|
||||
- **Виділені порти**: уникає `9222`, щоб запобігти конфліктам із dev-процесами.
|
||||
- **Детерміноване керування вкладками**: націлювання на вкладки через `targetId`, а не через “last tab”.
|
||||
- **Окремий каталог user data**: ніколи не зачіпає ваш особистий профіль браузера.
|
||||
- **Окремі порти**: уникає `9222`, щоб не конфліктувати з робочими процесами розробки.
|
||||
- **Детерміноване керування вкладками**: націлюйте вкладки за сирим `targetId`, стабільними
|
||||
дескрипторами `tabId`, такими як `t1`, або мітками, які ви призначаєте через `open --label` / `tab label`.
|
||||
|
||||
## Вибір браузера
|
||||
|
||||
@ -516,41 +535,41 @@ openclaw browser --browser-profile user snapshot --format ai
|
||||
|
||||
Платформи:
|
||||
|
||||
- macOS: перевіряє `/Applications` і `~/Applications`.
|
||||
- Linux: шукає `google-chrome`, `brave`, `microsoft-edge`, `chromium` тощо.
|
||||
- Windows: перевіряє типові місця встановлення.
|
||||
- macOS: перевіряються `/Applications` і `~/Applications`.
|
||||
- Linux: шукаються `google-chrome`, `brave`, `microsoft-edge`, `chromium` тощо.
|
||||
- Windows: перевіряються поширені місця встановлення.
|
||||
|
||||
## Control API (необов’язково)
|
||||
## API керування (необов’язково)
|
||||
|
||||
Для сценаріїв і налагодження Gateway надає невеликий **HTTP Control API лише для loopback**
|
||||
разом із відповідним CLI `openclaw browser` (знімки стану, ref, розширені можливості wait,
|
||||
вивід JSON, сценарії налагодження). Повний довідник див. у
|
||||
[Browser control API](/uk/tools/browser-control).
|
||||
Для створення скриптів і налагодження Gateway надає невеликий **HTTP API керування
|
||||
лише для loopback** плюс відповідний CLI `openclaw browser` (snapshots, refs, wait
|
||||
power-ups, вивід JSON, робочі процеси налагодження). Повний довідник дивіться в
|
||||
[API керування браузером](/uk/tools/browser-control).
|
||||
|
||||
## Усунення несправностей
|
||||
|
||||
Для проблем, специфічних для Linux (особливо snap Chromium), див.
|
||||
Щодо проблем, специфічних для Linux (особливо snap Chromium), дивіться
|
||||
[Усунення несправностей браузера](/uk/tools/browser-linux-troubleshooting).
|
||||
|
||||
Для конфігурацій із розділеними хостами WSL2 Gateway + Windows Chrome див.
|
||||
[WSL2 + Windows + усунення несправностей віддаленого Chrome CDP](/uk/tools/browser-wsl2-windows-remote-cdp-troubleshooting).
|
||||
Для конфігурацій із розділеними host WSL2 Gateway + Windows Chrome дивіться
|
||||
[Усунення несправностей WSL2 + Windows + віддалений Chrome CDP](/uk/tools/browser-wsl2-windows-remote-cdp-troubleshooting).
|
||||
|
||||
### Помилка запуску CDP vs блокування SSRF під час навігації
|
||||
### Збій запуску CDP проти блокування SSRF під час навігації
|
||||
|
||||
Це різні класи помилок, і вони вказують на різні шляхи виконання коду.
|
||||
Це різні класи збоїв, і вони вказують на різні шляхи в коді.
|
||||
|
||||
- **Помилка запуску або готовності CDP** означає, що OpenClaw не може підтвердити, що площина керування браузером працює справно.
|
||||
- **Блокування SSRF під час навігації** означає, що площина керування браузером працює справно, але ціль переходу сторінки відхилена політикою.
|
||||
- **Збій запуску або готовності CDP** означає, що OpenClaw не може підтвердити, що площина керування браузером працює справно.
|
||||
- **Блокування SSRF під час навігації** означає, що площина керування браузером працює справно, але ціль навігації сторінки відхиляється політикою.
|
||||
|
||||
Поширені приклади:
|
||||
|
||||
- Помилка запуску або готовності CDP:
|
||||
- Збій запуску або готовності CDP:
|
||||
- `Chrome CDP websocket for profile "openclaw" is not reachable after start`
|
||||
- `Remote CDP for profile "<name>" is not reachable at <cdpUrl>`
|
||||
- Блокування SSRF під час навігації:
|
||||
- потоки `open`, `navigate`, snapshot або відкриття вкладок завершуються помилкою політики браузера/мережі, тоді як `start` і `tabs` усе ще працюють
|
||||
|
||||
Використовуйте цю мінімальну послідовність, щоб розрізнити ці випадки:
|
||||
Використайте цю мінімальну послідовність, щоб розрізнити ці два випадки:
|
||||
|
||||
```bash
|
||||
openclaw browser --browser-profile openclaw start
|
||||
@ -560,21 +579,21 @@ openclaw browser --browser-profile openclaw open https://example.com
|
||||
|
||||
Як читати результати:
|
||||
|
||||
- Якщо `start` завершується помилкою `not reachable after start`, спочатку усувайте проблеми готовності CDP.
|
||||
- Якщо `start` успішний, але `tabs` завершується помилкою, площина керування все ще несправна. Розглядайте це як проблему доступності CDP, а не проблему навігації сторінки.
|
||||
- Якщо `start` і `tabs` успішні, але `open` або `navigate` завершуються помилкою, площина керування браузером працює, а проблема в політиці навігації або цільовій сторінці.
|
||||
- Якщо `start` завершується помилкою `not reachable after start`, спочатку усувайте проблему готовності CDP.
|
||||
- Якщо `start` успішний, але `tabs` завершується помилкою, площина керування все ще несправна. Розглядайте це як проблему досяжності CDP, а не проблему навігації сторінкою.
|
||||
- Якщо `start` і `tabs` успішні, але `open` або `navigate` завершується помилкою, площина керування браузером працює, а проблема в політиці навігації або в цільовій сторінці.
|
||||
- Якщо `start`, `tabs` і `open` усі успішні, базовий шлях керування керованим браузером працює справно.
|
||||
|
||||
Важливі деталі поведінки:
|
||||
|
||||
- Конфігурація браузера типово використовує fail-closed об’єкт політики SSRF, навіть якщо ви не налаштовуєте `browser.ssrfPolicy`.
|
||||
- Для локального керованого профілю `openclaw` на loopback перевірки справності CDP навмисно пропускають перевірку доступності SSRF браузера для власної локальної площини керування OpenClaw.
|
||||
- Захист навігації є окремим. Успішний результат `start` або `tabs` не означає, що подальша ціль `open` або `navigate` буде дозволена.
|
||||
- Конфігурація браузера типово використовує об’єкт політики SSRF із fail-closed, навіть якщо ви не налаштовуєте `browser.ssrfPolicy`.
|
||||
- Для локального керованого профілю `openclaw` на loopback перевірки справності CDP навмисно пропускають застосування SSRF reachability браузера до власної локальної площини керування OpenClaw.
|
||||
- Захист навігації є окремим. Успішний результат `start` або `tabs` не означає, що пізніша ціль `open` або `navigate` дозволена.
|
||||
|
||||
Рекомендації з безпеки:
|
||||
|
||||
- **Не** послаблюйте політику SSRF браузера типово.
|
||||
- Віддавайте перевагу вузьким виняткам для хостів, таким як `hostnameAllowlist` або `allowedHostnames`, замість широкого доступу до приватної мережі.
|
||||
- Типово **не** послаблюйте політику SSRF браузера.
|
||||
- Віддавайте перевагу вузьким виняткам для host, таким як `hostnameAllowlist` або `allowedHostnames`, замість широкого доступу до приватної мережі.
|
||||
- Використовуйте `dangerouslyAllowPrivateNetwork: true` лише в навмисно довірених середовищах, де доступ браузера до приватної мережі потрібен і перевірений.
|
||||
|
||||
## Інструменти агента + як працює керування
|
||||
@ -585,20 +604,20 @@ openclaw browser --browser-profile openclaw open https://example.com
|
||||
|
||||
Як це відображається:
|
||||
|
||||
- `browser snapshot` повертає стабільне дерево інтерфейсу (AI або ARIA).
|
||||
- `browser snapshot` повертає стабільне дерево UI (AI або ARIA).
|
||||
- `browser act` використовує ID `ref` зі snapshot для click/type/drag/select.
|
||||
- `browser screenshot` захоплює пікселі (усю сторінку або елемент).
|
||||
- `browser` приймає:
|
||||
- `profile` для вибору іменованого профілю браузера (openclaw, chrome або віддалений CDP).
|
||||
- `target` (`sandbox` | `host` | `node`) для вибору місця розташування браузера.
|
||||
- У sandbox-сесіях `target: "host"` потребує `agents.defaults.sandbox.browser.allowHostControl=true`.
|
||||
- Якщо `target` не вказано: sandbox-сесії типово використовують `sandbox`, сесії без sandbox типово використовують `host`.
|
||||
- Якщо підключено вузол із підтримкою браузера, інструмент може автоматично маршрутизуватися до нього, якщо ви явно не зафіксуєте `target="host"` або `target="node"`.
|
||||
- `target` (`sandbox` | `host` | `node`) для вибору, де працює браузер.
|
||||
- У sandboxed sessions `target: "host"` вимагає `agents.defaults.sandbox.browser.allowHostControl=true`.
|
||||
- Якщо `target` пропущено: sandboxed sessions типово використовують `sandbox`, а non-sandbox sessions — `host`.
|
||||
- Якщо підключено node з підтримкою браузера, інструмент може автоматично маршрутизуватися до нього, якщо ви явно не зафіксуєте `target="host"` або `target="node"`.
|
||||
|
||||
Це зберігає детермінованість агента й допомагає уникати крихких селекторів.
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Огляд інструментів](/uk/tools) — усі доступні інструменти агента
|
||||
- [Пісочниця](/uk/gateway/sandboxing) — керування браузером у sandbox-середовищах
|
||||
- [Пісочниця](/uk/gateway/sandboxing) — керування браузером у sandboxed environments
|
||||
- [Безпека](/uk/gateway/security) — ризики керування браузером і посилення захисту
|
||||
|
||||
@ -1,62 +1,55 @@
|
||||
---
|
||||
read_when:
|
||||
- Додавання або зміна Skills
|
||||
- Зміна правил фільтрації або завантаження Skills
|
||||
summary: 'Skills: керовані чи робочого простору, правила фільтрації та прив’язка конфігурації/env'
|
||||
- Додавання або змінення Skills
|
||||
- Зміна правил gatekeeping або завантаження Skills
|
||||
summary: 'Skills: керовані vs робочий простір, правила gatekeeping і wiring конфігурації/env'
|
||||
title: Skills
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T23:08:41Z"
|
||||
generated_at: "2026-04-24T23:30:41Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 3c7db23e1eb818d62283376cb33353882a9cb30e4476c5775218137da2ba82d9
|
||||
source_hash: 346058f4d85cd66f7b05f6ddd7ee3b8959f05da8645c62ce5531a955eedf7a83
|
||||
source_path: tools/skills.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
OpenClaw використовує папки Skills, сумісні з **[AgentSkills](https://agentskills.io)**, щоб навчати агента користуватися інструментами. Кожен Skill — це каталог, що містить `SKILL.md` з YAML frontmatter та інструкціями. OpenClaw завантажує **комплектні Skills** плюс необов’язкові локальні перевизначення й фільтрує їх під час завантаження на основі середовища, конфігурації та наявності бінарних файлів.
|
||||
OpenClaw використовує папки навичок, **сумісні з [AgentSkills](https://agentskills.io)**, щоб навчати агента користуватися інструментами. Кожна навичка — це каталог, що містить `SKILL.md` з YAML frontmatter та інструкціями. OpenClaw завантажує **вбудовані навички** плюс необов’язкові локальні перевизначення та фільтрує їх під час завантаження на основі середовища, конфігурації та наявності бінарних файлів.
|
||||
|
||||
## Розташування та пріоритет
|
||||
|
||||
OpenClaw завантажує Skills з таких джерел:
|
||||
OpenClaw завантажує навички з таких джерел:
|
||||
|
||||
1. **Додаткові папки Skills**: налаштовуються через `skills.load.extraDirs`
|
||||
2. **Комплектні Skills**: постачаються разом з установленням (npm-пакет або OpenClaw.app)
|
||||
3. **Керовані/локальні Skills**: `~/.openclaw/skills`
|
||||
4. **Персональні Skills агента**: `~/.agents/skills`
|
||||
5. **Skills агента проєкту**: `<workspace>/.agents/skills`
|
||||
6. **Skills робочого простору**: `<workspace>/skills`
|
||||
1. **Додаткові папки навичок**: налаштовуються через `skills.load.extraDirs`
|
||||
2. **Вбудовані навички**: постачаються разом з інсталяцією (npm package або OpenClaw.app)
|
||||
3. **Керовані/локальні навички**: `~/.openclaw/skills`
|
||||
4. **Персональні навички агента**: `~/.agents/skills`
|
||||
5. **Навички агента проєкту**: `<workspace>/.agents/skills`
|
||||
6. **Навички робочого простору**: `<workspace>/skills`
|
||||
|
||||
Якщо назви Skills конфліктують, пріоритет такий:
|
||||
Якщо назва навички конфліктує, пріоритет такий:
|
||||
|
||||
`<workspace>/skills` (найвищий) → `<workspace>/.agents/skills` → `~/.agents/skills` → `~/.openclaw/skills` → комплектні Skills → `skills.load.extraDirs` (найнижчий)
|
||||
`<workspace>/skills` (найвищий) → `<workspace>/.agents/skills` → `~/.agents/skills` → `~/.openclaw/skills` → вбудовані навички → `skills.load.extraDirs` (найнижчий)
|
||||
|
||||
## Skills для окремого агента vs спільні Skills
|
||||
## Навички для окремого агента vs спільні навички
|
||||
|
||||
У конфігураціях **multi-agent** кожен агент має власний робочий простір. Це означає:
|
||||
У конфігураціях **з кількома агентами** кожен агент має власний робочий простір. Це означає:
|
||||
|
||||
- **Skills для окремого агента** розміщуються в `<workspace>/skills` лише для цього агента.
|
||||
- **Skills агента проєкту** розміщуються в `<workspace>/.agents/skills` і застосовуються до
|
||||
цього робочого простору перед звичайною папкою `skills/` робочого простору.
|
||||
- **Персональні Skills агента** розміщуються в `~/.agents/skills` і застосовуються до всіх
|
||||
робочих просторів на цій машині.
|
||||
- **Спільні Skills** розміщуються в `~/.openclaw/skills` (керовані/локальні) і видимі
|
||||
**всім агентам** на цій самій машині.
|
||||
- **Спільні папки** також можна додати через `skills.load.extraDirs` (найнижчий
|
||||
пріоритет), якщо ви хочете мати спільний набір Skills для кількох агентів.
|
||||
- **Навички для окремого агента** знаходяться в `<workspace>/skills` лише для цього агента.
|
||||
- **Навички агента проєкту** знаходяться в `<workspace>/.agents/skills` і застосовуються до цього робочого простору перед звичайною папкою `skills/` робочого простору.
|
||||
- **Персональні навички агента** знаходяться в `~/.agents/skills` і застосовуються в усіх робочих просторах на цій машині.
|
||||
- **Спільні навички** знаходяться в `~/.openclaw/skills` (керовані/локальні) і видимі **всім агентам** на цій самій машині.
|
||||
- **Спільні папки** також можна додати через `skills.load.extraDirs` (найнижчий пріоритет), якщо ви хочете мати спільний набір навичок, який використовують кілька агентів.
|
||||
|
||||
Якщо один і той самий Skill із тією самою назвою існує в кількох місцях, діє звичайний пріоритет:
|
||||
перемагає робочий простір, потім Skills агента проєкту, потім персональні Skills агента,
|
||||
потім керовані/локальні, потім комплектні, потім extra dirs.
|
||||
Якщо та сама назва навички існує в кількох місцях, застосовується звичайний пріоритет: робочий простір має перевагу, далі йдуть навички агента проєкту, потім персональні навички агента, потім керовані/локальні, потім вбудовані, а потім додаткові каталоги.
|
||||
|
||||
## Allowlist Skills для агента
|
||||
## Списки дозволених навичок агента
|
||||
|
||||
**Розташування** Skill і **видимість** Skill — це окремі механізми керування.
|
||||
**Розташування** навички та її **видимість** — це окремі механізми керування.
|
||||
|
||||
- Розташування/пріоритет визначає, яка копія Skill з однаковою назвою перемагає.
|
||||
- Allowlist агента визначає, які з видимих Skills агент реально може використовувати.
|
||||
- Розташування/пріоритет визначає, яка копія однойменної навички перемагає.
|
||||
- Списки дозволених навичок агента визначають, які з видимих навичок агент фактично може використовувати.
|
||||
|
||||
Використовуйте `agents.defaults.skills` для спільної бази, а потім перевизначайте для окремих агентів через
|
||||
`agents.list[].skills`:
|
||||
Використовуйте `agents.defaults.skills` для спільного базового набору, а потім перевизначайте для окремих агентів через `agents.list[].skills`:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -67,7 +60,7 @@ OpenClaw завантажує Skills з таких джерел:
|
||||
list: [
|
||||
{ id: "writer" }, // успадковує github, weather
|
||||
{ id: "docs", skills: ["docs-search"] }, // замінює значення за замовчуванням
|
||||
{ id: "locked-down", skills: [] }, // без Skills
|
||||
{ id: "locked-down", skills: [] }, // без навичок
|
||||
],
|
||||
},
|
||||
}
|
||||
@ -75,77 +68,75 @@ OpenClaw завантажує Skills з таких джерел:
|
||||
|
||||
Правила:
|
||||
|
||||
- Не задавайте `agents.defaults.skills`, якщо за замовчуванням Skills не мають бути обмежені.
|
||||
- Не задавайте `agents.list[].skills`, щоб успадкувати `agents.defaults.skills`.
|
||||
- Установіть `agents.list[].skills: []`, щоб не було Skills.
|
||||
- Непорожній список `agents.list[].skills` є фінальним набором для цього агента; він
|
||||
не зливається зі значеннями за замовчуванням.
|
||||
- Не вказуйте `agents.defaults.skills`, якщо за замовчуванням навички не мають бути обмежені.
|
||||
- Не вказуйте `agents.list[].skills`, щоб успадкувати `agents.defaults.skills`.
|
||||
- Встановіть `agents.list[].skills: []`, щоб не дозволити жодних навичок.
|
||||
- Непорожній список `agents.list[].skills` є остаточним набором для цього агента; він не зливається зі значеннями за замовчуванням.
|
||||
|
||||
OpenClaw застосовує фактичний набір Skills агента до побудови prompt,
|
||||
виявлення slash-команд Skills, синхронізації sandbox і snapshot Skills.
|
||||
OpenClaw застосовує ефективний набір навичок агента під час побудови prompt, виявлення slash-команд навичок, синхронізації sandbox та знімків навичок.
|
||||
|
||||
## Plugins + Skills
|
||||
|
||||
Plugins можуть постачати власні Skills, указуючи каталоги `skills` у
|
||||
`openclaw.plugin.json` (шляхи відносно кореня plugin). Skills plugin завантажуються,
|
||||
коли plugin увімкнено. Сьогодні ці каталоги зливаються в той самий
|
||||
шлях із низьким пріоритетом, що й `skills.load.extraDirs`, тож Skill із такою самою назвою з комплектного,
|
||||
керованого, агентського або робочого простору перевизначає їх.
|
||||
Ви можете фільтрувати їх через `metadata.openclaw.requires.config` у записі
|
||||
конфігурації plugin. Див. [Plugins](/uk/tools/plugin) для виявлення/конфігурації і [Tools](/uk/tools) для
|
||||
поверхні інструментів, якої навчають ці Skills.
|
||||
Plugins можуть постачати власні навички, вказуючи каталоги `skills` у
|
||||
`openclaw.plugin.json` (шляхи відносно кореня plugin). Навички plugin
|
||||
завантажуються, коли plugin увімкнено. Це правильне місце для інструкцій з
|
||||
використання інструментів, які надто довгі для опису інструмента, але мають бути
|
||||
доступні щоразу, коли plugin встановлено; наприклад, browser plugin постачає
|
||||
навичку `browser-automation` для багатокрокового керування браузером. Наразі ці
|
||||
каталоги об’єднуються в той самий шлях з низьким пріоритетом, що й
|
||||
`skills.load.extraDirs`, тому однойменна вбудована, керована, агентська навичка
|
||||
або навичка робочого простору перевизначає їх.
|
||||
Ви можете застосувати до них gatekeeping через `metadata.openclaw.requires.config` у записі конфігурації plugin.
|
||||
Див. [Plugins](/uk/tools/plugin) щодо виявлення/конфігурації та [Tools](/uk/tools) щодо
|
||||
поверхні інструментів, якої навчають ці навички.
|
||||
|
||||
## Skill Workshop
|
||||
|
||||
Необов’язковий, експериментальний plugin Skill Workshop може створювати або оновлювати Skills робочого простору
|
||||
з повторно використовуваних процедур, помічених під час роботи агента. Його вимкнено за замовчуванням, і його потрібно явно ввімкнути через
|
||||
Необов’язковий експериментальний plugin Skill Workshop може створювати або оновлювати навички робочого простору з повторно використовуваних процедур, помічених під час роботи агента. Він вимкнений за замовчуванням і має бути явно увімкнений через
|
||||
`plugins.entries.skill-workshop`.
|
||||
|
||||
Skill Workshop записує лише в `<workspace>/skills`, сканує згенерований вміст,
|
||||
підтримує очікування підтвердження або автоматичні безпечні записи, ізолює небезпечні
|
||||
пропозиції та оновлює snapshot Skills після успішних записів, щоб нові
|
||||
Skills могли ставати доступними без перезапуску Gateway.
|
||||
підтримує очікування схвалення або автоматичні безпечні записи, поміщає небезпечні
|
||||
пропозиції в карантин і оновлює знімок навичок після успішного запису, щоб нові
|
||||
навички могли стати доступними без перезапуску Gateway.
|
||||
|
||||
Використовуйте його, коли хочете, щоб виправлення на кшталт “наступного разу перевіряй attribution GIF” або
|
||||
важко здобуті workflow на кшталт чеклістів QA для медіа стали довговічними
|
||||
процедурними інструкціями. Починайте з очікування підтвердження; використовуйте автоматичні записи
|
||||
лише в довірених робочих просторах після перегляду його пропозицій. Повний посібник:
|
||||
[Plugin Skill Workshop](/uk/plugins/skill-workshop).
|
||||
Використовуйте його, коли ви хочете, щоб виправлення на кшталт «наступного разу перевіряй атрибуцію GIF» або складно здобуті робочі процеси на кшталт чеклістів медіа-QA стали стійкими процедурними інструкціями. Починайте з режиму очікування схвалення; автоматичні записи використовуйте лише в довірених робочих просторах після перегляду його пропозицій. Повний посібник:
|
||||
[Skill Workshop Plugin](/uk/plugins/skill-workshop).
|
||||
|
||||
## ClawHub (установлення + синхронізація)
|
||||
## ClawHub (інсталяція + синхронізація)
|
||||
|
||||
ClawHub — це публічний реєстр Skills для OpenClaw. Переглянути можна на
|
||||
[https://clawhub.ai](https://clawhub.ai). Використовуйте вбудовані команди `openclaw skills`,
|
||||
щоб виявляти/установлювати/оновлювати Skills, або окремий CLI `clawhub`, коли
|
||||
вам потрібні workflow публікації/синхронізації.
|
||||
ClawHub — це публічний реєстр навичок для OpenClaw. Переглянути можна на
|
||||
[https://clawhub.ai](https://clawhub.ai). Використовуйте нативні команди `openclaw skills`
|
||||
для пошуку/встановлення/оновлення навичок або окремий CLI `clawhub`, коли
|
||||
потрібні робочі процеси публікації/синхронізації.
|
||||
Повний посібник: [ClawHub](/uk/tools/clawhub).
|
||||
|
||||
Поширені потоки:
|
||||
Поширені сценарії:
|
||||
|
||||
- Установити Skill у ваш робочий простір:
|
||||
- Встановити навичку у свій робочий простір:
|
||||
- `openclaw skills install <skill-slug>`
|
||||
- Оновити всі встановлені Skills:
|
||||
- Оновити всі встановлені навички:
|
||||
- `openclaw skills update --all`
|
||||
- Синхронізувати (сканування + публікація оновлень):
|
||||
- Синхронізація (сканування + публікація оновлень):
|
||||
- `clawhub sync --all`
|
||||
|
||||
Вбудована команда `openclaw skills install` встановлює в активний каталог `skills/`
|
||||
робочого простору. Окремий CLI `clawhub` також встановлює в `./skills` у
|
||||
поточному робочому каталозі (або повертається до налаштованого робочого простору OpenClaw).
|
||||
OpenClaw підхоплює це як `<workspace>/skills` у наступній сесії.
|
||||
Нативна команда `openclaw skills install` встановлює в активний каталог `skills/`
|
||||
робочого простору. Окремий CLI `clawhub` також встановлює в `./skills` у вашому
|
||||
поточному робочому каталозі (або використовує налаштований робочий простір OpenClaw як запасний варіант).
|
||||
OpenClaw підхопить це як `<workspace>/skills` у наступній сесії.
|
||||
|
||||
## Примітки щодо безпеки
|
||||
|
||||
- Ставтеся до сторонніх Skills як до **недовіреного коду**. Читайте їх перед увімкненням.
|
||||
- Для недовірених вхідних даних і ризикованих інструментів віддавайте перевагу sandboxed-запускам. Див. [Sandboxing](/uk/gateway/sandboxing).
|
||||
- Виявлення Skills у робочому просторі та додаткових каталогах приймає лише корені Skills і файли `SKILL.md`, чий розв’язаний realpath залишається в межах налаштованого кореня.
|
||||
- Установлення залежностей Skill через Gateway (`skills.install`, initial setup і UI налаштувань Skills) запускають вбудований сканер небезпечного коду перед виконанням метаданих інсталятора. Результати рівня `critical` блокують за замовчуванням, якщо викликач явно не задасть небезпечне перевизначення; підозрілі результати все одно лише попереджають.
|
||||
- `openclaw skills install <slug>` працює інакше: він завантажує папку Skill із ClawHub у робочий простір і не використовує вищезгаданий шлях метаданих інсталятора.
|
||||
- `skills.entries.*.env` і `skills.entries.*.apiKey` вводять секрети в процес **хоста**
|
||||
для цього ходу агента (а не в sandbox). Не допускайте секретів у prompt і журналах.
|
||||
- Для ширшої моделі загроз і чеклістів див. [Безпека](/uk/gateway/security).
|
||||
- Ставтеся до сторонніх навичок як до **ненадійного коду**. Читайте їх перед увімкненням.
|
||||
- Для ненадійних вхідних даних і ризикованих інструментів віддавайте перевагу sandbox-запускам. Див. [Sandboxing](/uk/gateway/sandboxing).
|
||||
- Виявлення навичок у робочому просторі та додаткових каталогах приймає лише корені навичок і файли `SKILL.md`, чий обчислений realpath залишається всередині налаштованого кореня.
|
||||
- Встановлення залежностей навичок через Gateway (`skills.install`, onboarding та UI налаштувань Skills) запускає вбудований сканер небезпечного коду перед виконанням метаданих інсталятора. Знахідки рівня `critical` блокуються за замовчуванням, якщо викликач явно не встановить небезпечне перевизначення; підозрілі знахідки, як і раніше, лише попереджають.
|
||||
- `openclaw skills install <slug>` відрізняється: ця команда завантажує папку навички ClawHub у робочий простір і не використовує описаний вище шлях метаданих інсталятора.
|
||||
- `skills.entries.*.env` і `skills.entries.*.apiKey` інʼєктують секрети в **host**-процес
|
||||
для цього ходу агента (не в sandbox). Не допускайте потрапляння секретів у prompt і логи.
|
||||
- Для ширшої моделі загроз і чеклістів див. [Security](/uk/gateway/security).
|
||||
|
||||
## Формат (AgentSkills + сумісний з Pi)
|
||||
## Формат (сумісний з AgentSkills + Pi)
|
||||
|
||||
`SKILL.md` має містити принаймні:
|
||||
|
||||
@ -159,23 +150,23 @@ description: Generate or edit images via a provider-backed image workflow
|
||||
Примітки:
|
||||
|
||||
- Ми дотримуємося специфікації AgentSkills щодо структури/призначення.
|
||||
- Парсер, який використовується вбудованим агентом, підтримує лише **однорядкові** ключі frontmatter.
|
||||
- Парсер, який використовує вбудований агент, підтримує лише **однорядкові** ключі frontmatter.
|
||||
- `metadata` має бути **однорядковим JSON-об’єктом**.
|
||||
- Використовуйте `{baseDir}` в інструкціях, щоб посилатися на шлях до папки Skill.
|
||||
- Використовуйте `{baseDir}` в інструкціях, щоб посилатися на шлях до папки навички.
|
||||
- Необов’язкові ключі frontmatter:
|
||||
- `homepage` — URL, що відображається як “Website” в UI Skills на macOS (також підтримується через `metadata.openclaw.homepage`).
|
||||
- `user-invocable` — `true|false` (типово: `true`). Коли `true`, Skill відкривається як slash-команда користувача.
|
||||
- `disable-model-invocation` — `true|false` (типово: `false`). Коли `true`, Skill виключається з prompt моделі (але все ще доступний через виклик користувачем).
|
||||
- `command-dispatch` — `tool` (необов’язково). Коли встановлено `tool`, slash-команда оминає модель і напряму диспетчеризується до інструмента.
|
||||
- `command-tool` — назва інструмента для виклику, коли встановлено `command-dispatch: tool`.
|
||||
- `command-arg-mode` — `raw` (типово). Для диспетчеризації до інструмента пересилає рядок сирих аргументів до інструмента (без розбору на рівні core).
|
||||
- `homepage` — URL, що відображається як «Website» у macOS UI для Skills (також підтримується через `metadata.openclaw.homepage`).
|
||||
- `user-invocable` — `true|false` (типове значення: `true`). Якщо `true`, навичка доступна як slash-команда користувача.
|
||||
- `disable-model-invocation` — `true|false` (типове значення: `false`). Якщо `true`, навичка виключається з model prompt (але все ще доступна через виклик користувачем).
|
||||
- `command-dispatch` — `tool` (необов’язково). Якщо встановлено `tool`, slash-команда обходить model і напряму диспетчеризується до інструмента.
|
||||
- `command-tool` — назва інструмента, який треба викликати, коли встановлено `command-dispatch: tool`.
|
||||
- `command-arg-mode` — `raw` (типове значення). Для dispatch до інструмента передає сирий рядок args в інструмент (без парсингу core).
|
||||
|
||||
Інструмент викликається з параметрами:
|
||||
`{ command: "<raw args>", commandName: "<slash command>", skillName: "<skill name>" }`.
|
||||
|
||||
## Фільтрація (фільтри під час завантаження)
|
||||
## Gatekeeping (фільтри під час завантаження)
|
||||
|
||||
OpenClaw **фільтрує Skills під час завантаження** за допомогою `metadata` (однорядковий JSON):
|
||||
OpenClaw **фільтрує навички під час завантаження** за допомогою `metadata` (однорядковий JSON):
|
||||
|
||||
```markdown
|
||||
---
|
||||
@ -194,26 +185,26 @@ metadata:
|
||||
|
||||
Поля в `metadata.openclaw`:
|
||||
|
||||
- `always: true` — завжди включати Skill (пропускає інші фільтри).
|
||||
- `emoji` — необов’язковий emoji, який використовує UI Skills на macOS.
|
||||
- `homepage` — необов’язковий URL, що показується як “Website” в UI Skills на macOS.
|
||||
- `os` — необов’язковий список платформ (`darwin`, `linux`, `win32`). Якщо задано, Skill підходить лише для цих ОС.
|
||||
- `always: true` — завжди включати навичку (пропустити інші gate).
|
||||
- `emoji` — необов’язкове emoji, яке використовує macOS UI для Skills.
|
||||
- `homepage` — необов’язковий URL, що показується як «Website» у macOS UI для Skills.
|
||||
- `os` — необов’язковий список платформ (`darwin`, `linux`, `win32`). Якщо встановлено, навичка доступна лише на цих ОС.
|
||||
- `requires.bins` — список; кожен елемент має існувати в `PATH`.
|
||||
- `requires.anyBins` — список; у `PATH` має існувати хоча б один елемент.
|
||||
- `requires.env` — список; env-змінна має існувати **або** бути наданою в конфігурації.
|
||||
- `requires.anyBins` — список; у `PATH` має існувати принаймні один елемент.
|
||||
- `requires.env` — список; змінна env має існувати **або** бути надана в конфігурації.
|
||||
- `requires.config` — список шляхів `openclaw.json`, які мають бути truthy.
|
||||
- `primaryEnv` — назва env-змінної, пов’язаної з `skills.entries.<name>.apiKey`.
|
||||
- `install` — необов’язковий масив специфікацій інсталятора, який використовує UI Skills на macOS (brew/node/go/uv/download).
|
||||
- `primaryEnv` — назва змінної env, пов’язаної з `skills.entries.<name>.apiKey`.
|
||||
- `install` — необов’язковий масив специфікацій інсталятора, який використовує macOS UI для Skills (brew/node/go/uv/download).
|
||||
|
||||
Примітка про sandboxing:
|
||||
Примітка щодо sandboxing:
|
||||
|
||||
- `requires.bins` перевіряється на **хості** під час завантаження Skill.
|
||||
- `requires.bins` перевіряється на **host** під час завантаження навички.
|
||||
- Якщо агент працює в sandbox, бінарний файл також має існувати **всередині контейнера**.
|
||||
Установіть його через `agents.defaults.sandbox.docker.setupCommand` (або через користувацький образ).
|
||||
Встановіть його через `agents.defaults.sandbox.docker.setupCommand` (або через власний образ).
|
||||
`setupCommand` виконується один раз після створення контейнера.
|
||||
Установлення пакетів також потребує мережевого виходу, записуваної кореневої FS і користувача root у sandbox.
|
||||
Приклад: Skill `summarize` (`skills/summarize/SKILL.md`) потребує CLI `summarize`
|
||||
усередині контейнера sandbox, щоб працювати там.
|
||||
Для встановлення пакетів також потрібні вихід у мережу, коренева ФС з можливістю запису та користувач root у sandbox.
|
||||
Приклад: навичці `summarize` (`skills/summarize/SKILL.md`) потрібен CLI `summarize`
|
||||
у контейнері sandbox, щоб працювати там.
|
||||
|
||||
Приклад інсталятора:
|
||||
|
||||
@ -244,27 +235,27 @@ metadata:
|
||||
|
||||
Примітки:
|
||||
|
||||
- Якщо вказано кілька інсталяторів, gateway вибирає **один** бажаний варіант (brew, якщо доступний, інакше node).
|
||||
- Якщо вказано кілька інсталяторів, Gateway вибирає **один** бажаний варіант (brew, якщо доступний, інакше node).
|
||||
- Якщо всі інсталятори мають тип `download`, OpenClaw показує кожен запис, щоб ви могли бачити доступні артефакти.
|
||||
- Специфікації інсталятора можуть містити `os: ["darwin"|"linux"|"win32"]`, щоб фільтрувати варіанти за платформою.
|
||||
- Установлення через Node враховують `skills.install.nodeManager` у `openclaw.json` (типово: npm; варіанти: npm/pnpm/yarn/bun).
|
||||
Це впливає лише на **установлення Skills**; runtime Gateway і далі має бути Node
|
||||
- Встановлення через Node враховують `skills.install.nodeManager` у `openclaw.json` (типове значення: npm; варіанти: npm/pnpm/yarn/bun).
|
||||
Це впливає лише на **встановлення навичок**; середовище виконання Gateway, як і раніше, має бути Node
|
||||
(Bun не рекомендується для WhatsApp/Telegram).
|
||||
- Вибір інсталятора через Gateway орієнтується на пріоритети, а не лише на node:
|
||||
коли специфікації встановлення змішують типи, OpenClaw надає перевагу Homebrew, якщо
|
||||
- Вибір інсталятора через Gateway базується на пріоритетах, а не лише на node:
|
||||
коли специфікації встановлення змішують різні типи, OpenClaw надає перевагу Homebrew, якщо
|
||||
увімкнено `skills.install.preferBrew` і існує `brew`, потім `uv`, потім
|
||||
налаштований node manager, а потім інші резервні варіанти, як-от `go` або `download`.
|
||||
налаштованому менеджеру node, а далі іншим запасним варіантам на кшталт `go` або `download`.
|
||||
- Якщо кожна специфікація встановлення має тип `download`, OpenClaw показує всі варіанти завантаження
|
||||
замість зведення до одного бажаного інсталятора.
|
||||
- Установлення Go: якщо `go` відсутній, а `brew` доступний, gateway спочатку встановлює Go через Homebrew і за можливості встановлює `GOBIN` у `bin` Homebrew.
|
||||
- Установлення через download: `url` (обов’язково), `archive` (`tar.gz` | `tar.bz2` | `zip`), `extract` (типово: auto, якщо виявлено archive), `stripComponents`, `targetDir` (типово: `~/.openclaw/tools/<skillKey>`).
|
||||
замість того, щоб зводити їх до одного бажаного інсталятора.
|
||||
- Встановлення Go: якщо `go` відсутній, а `brew` доступний, gateway спочатку встановлює Go через Homebrew і за можливості встановлює `GOBIN` у `bin` Homebrew.
|
||||
- Встановлення через download: `url` (обов’язково), `archive` (`tar.gz` | `tar.bz2` | `zip`), `extract` (типове значення: auto, якщо архів виявлено), `stripComponents`, `targetDir` (типове значення: `~/.openclaw/tools/<skillKey>`).
|
||||
|
||||
Якщо `metadata.openclaw` відсутнє, Skill завжди підходить (якщо тільки
|
||||
його не вимкнено в конфігурації або не заблоковано через `skills.allowBundled` для комплектних Skills).
|
||||
Якщо `metadata.openclaw` відсутній, навичка завжди доступна (якщо вона не
|
||||
вимкнена в конфігурації або не заблокована `skills.allowBundled` для вбудованих навичок).
|
||||
|
||||
## Перевизначення конфігурації (`~/.openclaw/openclaw.json`)
|
||||
|
||||
Комплектні/керовані Skills можна вмикати/вимикати та постачати їм значення env:
|
||||
Вбудовані/керовані навички можна вмикати або вимикати та передавати їм значення env:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -272,7 +263,7 @@ metadata:
|
||||
entries: {
|
||||
"image-lab": {
|
||||
enabled: true,
|
||||
apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // або plaintext-рядок
|
||||
apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // або plaintext string
|
||||
env: {
|
||||
GEMINI_API_KEY: "GEMINI_KEY_HERE",
|
||||
},
|
||||
@ -288,69 +279,69 @@ metadata:
|
||||
}
|
||||
```
|
||||
|
||||
Примітка: якщо назва Skill містить дефіси, беріть ключ у лапки (JSON5 дозволяє ключі в лапках).
|
||||
Примітка: якщо назва навички містить дефіси, візьміть ключ у лапки (JSON5 дозволяє ключі в лапках).
|
||||
|
||||
Якщо ви хочете стандартну генерацію/редагування зображень усередині самого OpenClaw, використовуйте основний
|
||||
інструмент `image_generate` з `agents.defaults.imageGenerationModel` замість
|
||||
комплектного Skill. Приклади Skills тут наведено для користувацьких або сторонніх workflow.
|
||||
Якщо вам потрібне стандартне генерування/редагування зображень усередині самого OpenClaw, використовуйте core-інструмент
|
||||
`image_generate` з `agents.defaults.imageGenerationModel` замість
|
||||
вбудованої навички. Наведені тут приклади навичок призначені для кастомних або сторонніх робочих процесів.
|
||||
|
||||
Для нативного аналізу зображень використовуйте інструмент `image` з `agents.defaults.imageModel`.
|
||||
Для нативної генерації/редагування зображень використовуйте `image_generate` з
|
||||
`agents.defaults.imageGenerationModel`. Якщо ви вибираєте `openai/*`, `google/*`,
|
||||
`fal/*` або іншу image-модель певного provider, додайте також auth/API-ключ
|
||||
цього provider.
|
||||
Для нативного генерування/редагування зображень використовуйте `image_generate` з
|
||||
`agents.defaults.imageGenerationModel`. Якщо ви виберете `openai/*`, `google/*`,
|
||||
`fal/*` або іншу специфічну для провайдера модель зображень, також додайте auth/API
|
||||
ключ цього провайдера.
|
||||
|
||||
Ключі конфігурації за замовчуванням збігаються з **назвою Skill**. Якщо Skill визначає
|
||||
Ключі конфігурації за замовчуванням відповідають **назві навички**. Якщо навичка визначає
|
||||
`metadata.openclaw.skillKey`, використовуйте цей ключ у `skills.entries`.
|
||||
|
||||
Правила:
|
||||
|
||||
- `enabled: false` вимикає Skill, навіть якщо він комплектний/встановлений.
|
||||
- `env`: вводиться **лише якщо** змінна ще не задана в процесі.
|
||||
- `apiKey`: зручний варіант для Skills, які оголошують `metadata.openclaw.primaryEnv`.
|
||||
Підтримує plaintext-рядок або об’єкт SecretRef (`{ source, provider, id }`).
|
||||
- `config`: необов’язковий набір для користувацьких полів на рівні Skill; користувацькі ключі мають жити тут.
|
||||
- `allowBundled`: необов’язковий allowlist лише для **комплектних** Skills. Якщо задано,
|
||||
підходять лише комплектні Skills зі списку (керовані/робочого простору Skills не зачіпаються).
|
||||
- `enabled: false` вимикає навичку, навіть якщо вона вбудована/встановлена.
|
||||
- `env`: інʼєктується **лише якщо** змінна ще не встановлена в процесі.
|
||||
- `apiKey`: зручний механізм для навичок, які оголошують `metadata.openclaw.primaryEnv`.
|
||||
Підтримує plaintext string або об’єкт SecretRef (`{ source, provider, id }`).
|
||||
- `config`: необов’язковий контейнер для кастомних полів для кожної навички; кастомні ключі мають бути саме тут.
|
||||
- `allowBundled`: необов’язковий allowlist **лише** для вбудованих навичок. Якщо задано, доступними є лише
|
||||
вбудовані навички зі списку (керовані/робочого простору навички не зачіпаються).
|
||||
|
||||
## Ін’єкція середовища (для кожного запуску агента)
|
||||
## Інʼєкція середовища (для кожного запуску агента)
|
||||
|
||||
Коли починається запуск агента, OpenClaw:
|
||||
|
||||
1. Зчитує метадані Skill.
|
||||
1. Читає метадані навички.
|
||||
2. Застосовує будь-які `skills.entries.<key>.env` або `skills.entries.<key>.apiKey` до
|
||||
`process.env`.
|
||||
3. Будує system prompt з **придатними** Skills.
|
||||
3. Будує system prompt із **доступними** навичками.
|
||||
4. Відновлює початкове середовище після завершення запуску.
|
||||
|
||||
Це **обмежено запуском агента**, а не глобальним середовищем оболонки.
|
||||
Це **обмежено запуском агента**, а не глобальним shell-середовищем.
|
||||
|
||||
Для комплектного backend `claude-cli` OpenClaw також матеріалізує той самий
|
||||
придатний snapshot як тимчасовий plugin Claude Code і передає його через
|
||||
`--plugin-dir`. Тоді Claude Code може використовувати власний нативний resolver Skills, тоді як
|
||||
OpenClaw і далі володіє пріоритетами, allowlist для окремих агентів, фільтрацією та
|
||||
ін’єкцією env/API-ключів `skills.entries.*`. Інші CLI-backend використовують
|
||||
Для вбудованого backend `claude-cli` OpenClaw також матеріалізує той самий
|
||||
доступний snapshot як тимчасовий plugin Claude Code і передає його через
|
||||
`--plugin-dir`. Після цього Claude Code може використовувати власний нативний resolver навичок, тоді як
|
||||
OpenClaw, як і раніше, керує пріоритетом, allowlist для кожного агента, gatekeeping та
|
||||
інʼєкцією env/API key через `skills.entries.*`. Інші CLI-backend використовують
|
||||
лише каталог prompt.
|
||||
|
||||
## Snapshot сесії (продуктивність)
|
||||
|
||||
OpenClaw створює snapshot придатних Skills **під час старту сесії** й повторно використовує цей список для наступних ходів у тій самій сесії. Зміни в Skills або конфігурації набувають чинності в наступній новій сесії.
|
||||
OpenClaw створює snapshot доступних навичок **коли починається сесія** і повторно використовує цей список для наступних ходів у тій самій сесії. Зміни в навичках або конфігурації набувають чинності в наступній новій сесії.
|
||||
|
||||
Skills також можуть оновлюватися посеред сесії, коли ввімкнено спостерігач Skills або коли з’являється новий придатний віддалений node (див. нижче). Розглядайте це як **гаряче перезавантаження**: оновлений список буде підхоплено на наступному ході агента.
|
||||
Навички також можуть оновлюватися посеред сесії, коли увімкнено watcher навичок або коли з’являється новий доступний віддалений node (див. нижче). Думайте про це як про **hot reload**: оновлений список підхоплюється на наступному ході агента.
|
||||
|
||||
Якщо для цієї сесії змінюється фактичний allowlist Skills агента, OpenClaw
|
||||
оновлює snapshot, щоб видимі Skills залишалися узгодженими з поточним
|
||||
Якщо для цієї сесії змінюється ефективний allowlist навичок агента, OpenClaw
|
||||
оновлює snapshot, щоб видимі навички залишалися узгодженими з поточним
|
||||
агентом.
|
||||
|
||||
## Віддалені macOS Node (Gateway на Linux)
|
||||
## Віддалені macOS nodes (Linux gateway)
|
||||
|
||||
Якщо Gateway працює на Linux, але підключено **macOS Node** **з дозволеним `system.run`** (безпека Exec approvals не встановлена в `deny`), OpenClaw може вважати Skills лише для macOS придатними, коли потрібні бінарні файли присутні на цьому node. Агент має виконувати такі Skills через інструмент `exec` з `host=node`.
|
||||
Якщо Gateway працює на Linux, але **macOS node** підключено **з дозволеним `system.run`** (налаштування безпеки Exec approvals не встановлено в `deny`), OpenClaw може вважати навички лише для macOS доступними, якщо потрібні бінарні файли присутні на цьому node. Агент має виконувати такі навички через інструмент `exec` із `host=node`.
|
||||
|
||||
Це спирається на те, що node повідомляє про підтримку команд і на перевірку бінарних файлів через `system.run`. Якщо macOS Node пізніше від’єднається, Skills залишаться видимими; виклики можуть завершуватися помилкою, доки node не перепідключиться.
|
||||
Це спирається на те, що node повідомляє про підтримку команд, а також на перевірку бінарних файлів через `system.run`. Якщо macOS node пізніше відключиться, навички залишатимуться видимими; виклики можуть не працювати, доки node не перепідключиться.
|
||||
|
||||
## Спостерігач Skills (автооновлення)
|
||||
## Watcher навичок (автооновлення)
|
||||
|
||||
За замовчуванням OpenClaw стежить за папками Skills і підвищує версію snapshot Skills, коли змінюються файли `SKILL.md`. Це налаштовується в `skills.load`:
|
||||
За замовчуванням OpenClaw стежить за папками навичок і збільшує snapshot навичок, коли змінюються файли `SKILL.md`. Налаштовується це в `skills.load`:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -363,12 +354,12 @@ Skills також можуть оновлюватися посеред сесі
|
||||
}
|
||||
```
|
||||
|
||||
## Вплив на токени (список Skills)
|
||||
## Вплив на токени (список навичок)
|
||||
|
||||
Коли Skills придатні, OpenClaw вводить у system prompt компактний XML-список доступних Skills (через `formatSkillsForPrompt` у `pi-coding-agent`). Вартість є детермінованою:
|
||||
Коли навички доступні, OpenClaw інʼєктує компактний XML-список доступних навичок у system prompt (через `formatSkillsForPrompt` у `pi-coding-agent`). Вартість детермінована:
|
||||
|
||||
- **Базовий overhead (лише коли є ≥1 Skill):** 195 символів.
|
||||
- **На кожен Skill:** 97 символів + довжина XML-escaped значень `<name>`, `<description>` і `<location>`.
|
||||
- **Базові накладні витрати (лише коли ≥1 навички):** 195 символів.
|
||||
- **На одну навичку:** 97 символів + довжина XML-escaped значень `<name>`, `<description>` і `<location>`.
|
||||
|
||||
Формула (символи):
|
||||
|
||||
@ -378,29 +369,29 @@ total = 195 + Σ (97 + len(name_escaped) + len(description_escaped) + len(locati
|
||||
|
||||
Примітки:
|
||||
|
||||
- XML-escaping розширює `& < > " '` до сутностей (`&`, `<` тощо), збільшуючи довжину.
|
||||
- Кількість токенів залежить від tokenizer моделі. Груба оцінка в стилі OpenAI — ~4 символи на токен, тож **97 символів ≈ 24 токени** на Skill плюс фактична довжина ваших полів.
|
||||
- XML escaping перетворює `& < > " '` на сутності (`&`, `<` тощо), збільшуючи довжину.
|
||||
- Кількість токенів залежить від tokenizer моделі. Груба оцінка в стилі OpenAI — ~4 символи на токен, тож **97 символів ≈ 24 токени** на одну навичку плюс фактична довжина ваших полів.
|
||||
|
||||
## Життєвий цикл керованих Skills
|
||||
## Життєвий цикл керованих навичок
|
||||
|
||||
OpenClaw постачає базовий набір Skills як **комплектні Skills** у складі
|
||||
встановлення (npm-пакет або OpenClaw.app). `~/.openclaw/skills` існує для локальних
|
||||
перевизначень (наприклад, закріплення/патчування Skill без зміни комплектної
|
||||
копії). Skills робочого простору належать користувачу й перевизначають обидва варіанти у разі конфлікту назв.
|
||||
OpenClaw постачається з базовим набором навичок як **вбудованими навичками** у складі
|
||||
інсталяції (npm package або OpenClaw.app). `~/.openclaw/skills` існує для локальних
|
||||
перевизначень (наприклад, pinning/patching навички без змінення вбудованої
|
||||
копії). Навички робочого простору належать користувачу та перевизначають обидва варіанти в разі конфлікту назв.
|
||||
|
||||
## Довідка з конфігурації
|
||||
## Довідник конфігурації
|
||||
|
||||
Див. [Конфігурація Skills](/uk/tools/skills-config), щоб переглянути повну схему конфігурації.
|
||||
Див. [Skills config](/uk/tools/skills-config), щоб переглянути повну схему конфігурації.
|
||||
|
||||
## Шукаєте більше Skills?
|
||||
## Шукаєте більше навичок?
|
||||
|
||||
Перегляньте [https://clawhub.ai](https://clawhub.ai).
|
||||
|
||||
---
|
||||
|
||||
## Пов’язано
|
||||
## Пов’язане
|
||||
|
||||
- [Створення Skills](/uk/tools/creating-skills) — створення користувацьких Skills
|
||||
- [Конфігурація Skills](/uk/tools/skills-config) — довідка з конфігурації Skills
|
||||
- [Slash-команди](/uk/tools/slash-commands) — усі доступні slash-команди
|
||||
- [Creating Skills](/uk/tools/creating-skills) — створення кастомних навичок
|
||||
- [Skills Config](/uk/tools/skills-config) — довідник конфігурації навичок
|
||||
- [Slash Commands](/uk/tools/slash-commands) — усі доступні slash-команди
|
||||
- [Plugins](/uk/tools/plugin) — огляд системи plugin
|
||||
|
||||
Loading…
Reference in New Issue
Block a user