chore(i18n): refresh uk translations
This commit is contained in:
parent
f8b99d433b
commit
3ea9280c77
@ -1,14 +1,14 @@
|
||||
---
|
||||
read_when:
|
||||
- Центр усунення несправностей спрямував вас сюди для глибшої діагностики
|
||||
- Центр усунення несправностей направив вас сюди для глибшої діагностики
|
||||
- Вам потрібні стабільні розділи посібника на основі симптомів із точними командами
|
||||
summary: Детальний посібник з усунення несправностей для Gateway, каналів, автоматизації, Node і браузера
|
||||
title: Усунення несправностей
|
||||
x-i18n:
|
||||
generated_at: "2026-04-21T07:13:40Z"
|
||||
generated_at: "2026-04-22T20:50:00Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: add7625785e3b78897c750b4785b7fe84a3d91c23c4175de750c4834272967f9
|
||||
source_hash: 6df9cfcce30542401fc3d815781e226d45bb5462580722fa5353e404eef28ee6
|
||||
source_path: gateway/troubleshooting.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -16,11 +16,11 @@ x-i18n:
|
||||
# Усунення несправностей Gateway
|
||||
|
||||
Ця сторінка — детальний посібник.
|
||||
Почніть із [/help/troubleshooting](/uk/help/troubleshooting), якщо спочатку хочете швидкий сценарій первинної діагностики.
|
||||
Почніть із [/help/troubleshooting](/uk/help/troubleshooting), якщо спочатку хочете швидкий сценарій діагностики.
|
||||
|
||||
## Послідовність команд
|
||||
|
||||
Спочатку виконайте це, саме в такому порядку:
|
||||
Спочатку виконайте ці команди в такому порядку:
|
||||
|
||||
```bash
|
||||
openclaw status
|
||||
@ -33,11 +33,11 @@ openclaw channels status --probe
|
||||
Очікувані ознаки справного стану:
|
||||
|
||||
- `openclaw gateway status` показує `Runtime: running`, `Connectivity probe: ok` і рядок `Capability: ...`.
|
||||
- `openclaw doctor` не повідомляє про блокувальні проблеми конфігурації/служби.
|
||||
- `openclaw channels status --probe` показує живий стан транспорту для кожного акаунта і,
|
||||
- `openclaw doctor` не повідомляє про блокувальні проблеми конфігурації/сервісу.
|
||||
- `openclaw channels status --probe` показує живий стан транспорту для кожного облікового запису та,
|
||||
де це підтримується, результати probe/audit, такі як `works` або `audit ok`.
|
||||
|
||||
## Додаткове використання Anthropic 429 потрібне для довгого контексту
|
||||
## Anthropic 429: для довгого контексту потрібне додаткове використання
|
||||
|
||||
Використовуйте це, коли журнали/помилки містять:
|
||||
`HTTP 429: rate_limit_error: Extra usage is required for long context requests`.
|
||||
@ -50,14 +50,14 @@ openclaw config get agents.defaults.models
|
||||
|
||||
Зверніть увагу на таке:
|
||||
|
||||
- Вибрана модель Anthropic Opus/Sonnet має `params.context1m: true`.
|
||||
- Поточні облікові дані Anthropic не мають права на використання довгого контексту.
|
||||
- Запити падають лише на довгих сесіях/запусках моделі, яким потрібен шлях 1M beta.
|
||||
- Для вибраної моделі Anthropic Opus/Sonnet встановлено `params.context1m: true`.
|
||||
- Поточні облікові дані Anthropic не дають права на використання довгого контексту.
|
||||
- Запити не вдаються лише для довгих сесій/запусків моделі, яким потрібен beta-шлях 1M.
|
||||
|
||||
Варіанти виправлення:
|
||||
|
||||
1. Вимкніть `context1m` для цієї моделі, щоб повернутися до звичайного вікна контексту.
|
||||
2. Використайте облікові дані Anthropic, які мають право на запити з довгим контекстом, або перейдіть на ключ Anthropic API.
|
||||
2. Використайте облікові дані Anthropic, які мають право на запити з довгим контекстом, або перейдіть на Anthropic API key.
|
||||
3. Налаштуйте резервні моделі, щоб запуски продовжувалися, коли запити Anthropic із довгим контекстом відхиляються.
|
||||
|
||||
Пов’язане:
|
||||
@ -66,13 +66,13 @@ openclaw config get agents.defaults.models
|
||||
- [/reference/token-use](/uk/reference/token-use)
|
||||
- [/help/faq#why-am-i-seeing-http-429-ratelimiterror-from-anthropic](/uk/help/faq#why-am-i-seeing-http-429-ratelimiterror-from-anthropic)
|
||||
|
||||
## Локальний OpenAI-сумісний бекенд проходить прямі probe, але запуски агента падають
|
||||
## Локальний OpenAI-compatible backend проходить прямі probe, але запуски агента не вдаються
|
||||
|
||||
Використовуйте це, коли:
|
||||
|
||||
- `curl ... /v1/models` працює
|
||||
- малі прямі виклики `/v1/chat/completions` працюють
|
||||
- запуски моделі OpenClaw падають лише під час звичайних ходів агента
|
||||
- запуски моделей OpenClaw не вдаються лише під час звичайних ходів агента
|
||||
|
||||
```bash
|
||||
curl http://127.0.0.1:1234/v1/models
|
||||
@ -85,33 +85,31 @@ openclaw logs --follow
|
||||
|
||||
Зверніть увагу на таке:
|
||||
|
||||
- прямі малі виклики успішні, але запуски OpenClaw падають лише на більших prompt
|
||||
- помилки бекенда про те, що `messages[].content` очікує рядок
|
||||
- збої бекенда, які з’являються лише за більших підрахунків prompt-token або повних prompt середовища виконання агента
|
||||
- прямі малі виклики успішні, але запуски OpenClaw не вдаються лише на більших prompt
|
||||
- backend повертає помилки про те, що `messages[].content` очікує рядок
|
||||
- backend аварійно завершується лише за більшої кількості токенів у prompt або з повними prompt середовища виконання агента
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- `messages[...].content: invalid type: sequence, expected a string` → бекенд
|
||||
не приймає структуровані частини вмісту Chat Completions. Виправлення: установіть
|
||||
- `messages[...].content: invalid type: sequence, expected a string` → backend
|
||||
відхиляє структуровані частини вмісту Chat Completions. Виправлення: установіть
|
||||
`models.providers.<provider>.models[].compat.requiresStringContent: true`.
|
||||
- прямі малі запити успішні, але запуски агента OpenClaw падають через збої
|
||||
бекенда/моделі (наприклад, Gemma на деяких збірках `inferrs`) → транспорт OpenClaw,
|
||||
імовірно, уже налаштований правильно; збій відбувається в бекенді через більшу форму
|
||||
prompt середовища виконання агента.
|
||||
- прямі малі запити успішні, але запуски агентів OpenClaw не вдаються через аварії backend/моделі
|
||||
(наприклад, Gemma у деяких збірках `inferrs`) → транспорт OpenClaw,
|
||||
імовірно, уже налаштований правильно; проблема в тому, що backend не справляється з більшою формою prompt середовища агента.
|
||||
- збої зменшуються після вимкнення інструментів, але не зникають → схеми інструментів
|
||||
були частиною навантаження, але решта проблеми все одно полягає в обмеженнях моделі/сервера
|
||||
вищого рівня або в багу бекенда.
|
||||
були частиною навантаження, але решта проблеми все ще пов’язана з upstream-обмеженнями моделі/сервера або помилкою backend.
|
||||
|
||||
Варіанти виправлення:
|
||||
|
||||
1. Установіть `compat.requiresStringContent: true` для бекендів Chat Completions, що підтримують лише рядки.
|
||||
2. Установіть `compat.supportsTools: false` для моделей/бекендів, які не можуть
|
||||
надійно обробляти поверхню схем інструментів OpenClaw.
|
||||
3. Де можливо, зменште навантаження prompt: менший bootstrap робочого простору, коротша
|
||||
історія сесії, легша локальна модель або бекенд із кращою підтримкою довгого контексту.
|
||||
4. Якщо малі прямі запити й надалі проходять, а ходи агента OpenClaw все одно падають
|
||||
усередині бекенда, вважайте це обмеженням сервера/моделі вищого рівня та створіть
|
||||
там repro з прийнятою формою payload.
|
||||
1. Установіть `compat.requiresStringContent: true` для backend Chat Completions, які підтримують лише рядковий вміст.
|
||||
2. Установіть `compat.supportsTools: false` для моделей/backend, які не можуть надійно обробляти
|
||||
поверхню схем інструментів OpenClaw.
|
||||
3. Де можливо, зменште навантаження від prompt: менший bootstrap робочого простору, коротша
|
||||
історія сесії, легша локальна модель або backend із кращою підтримкою довгого контексту.
|
||||
4. Якщо прямі малі запити й далі успішні, а ходи агента OpenClaw все одно аварійно завершуються
|
||||
всередині backend, вважайте це обмеженням upstream-сервера/моделі й подайте туди
|
||||
відтворюваний приклад із прийнятною формою payload.
|
||||
|
||||
Пов’язане:
|
||||
|
||||
@ -121,7 +119,7 @@ openclaw logs --follow
|
||||
|
||||
## Немає відповідей
|
||||
|
||||
Якщо канали працюють, але відповіді немає, перш ніж щось перепідключати, перевірте маршрутизацію та політику.
|
||||
Якщо канали працюють, але відповідей немає, перевірте маршрутизацію та політику, перш ніж щось перепідключати.
|
||||
|
||||
```bash
|
||||
openclaw status
|
||||
@ -133,14 +131,14 @@ openclaw logs --follow
|
||||
|
||||
Зверніть увагу на таке:
|
||||
|
||||
- Очікує підтвердження pairing для відправників у DM.
|
||||
- Обмеження згадування в групі (`requireMention`, `mentionPatterns`).
|
||||
- Для відправників у DM pairing очікує підтвердження.
|
||||
- Обмеження згадування для груп (`requireMention`, `mentionPatterns`).
|
||||
- Невідповідності allowlist каналу/групи.
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- `drop guild message (mention required` → повідомлення групи ігнорується, доки немає згадки.
|
||||
- `pairing request` → відправника потрібно схвалити.
|
||||
- `drop guild message (mention required` → повідомлення групи ігнорується, доки немає згадування.
|
||||
- `pairing request` → відправнику потрібне схвалення.
|
||||
- `blocked` / `allowlist` → відправника/канал було відфільтровано політикою.
|
||||
|
||||
Пов’язане:
|
||||
@ -149,7 +147,7 @@ openclaw logs --follow
|
||||
- [/channels/pairing](/uk/channels/pairing)
|
||||
- [/channels/groups](/uk/channels/groups)
|
||||
|
||||
## Підключення dashboard/control UI
|
||||
## Підключення UI dashboard/control
|
||||
|
||||
Коли dashboard/control UI не підключається, перевірте URL, режим автентифікації та припущення щодо безпечного контексту.
|
||||
|
||||
@ -163,48 +161,48 @@ openclaw gateway status --json
|
||||
|
||||
Зверніть увагу на таке:
|
||||
|
||||
- Правильний URL probe і URL dashboard.
|
||||
- Невідповідність режиму автентифікації/токена між клієнтом і Gateway.
|
||||
- Правильний probe URL і URL dashboard.
|
||||
- Невідповідність режиму автентифікації/токена між клієнтом і gateway.
|
||||
- Використання HTTP там, де потрібна ідентичність пристрою.
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- `device identity required` → небезпечний контекст або відсутня автентифікація пристрою.
|
||||
- `origin not allowed` → браузерний `Origin` відсутній у `gateway.controlUi.allowedOrigins`
|
||||
(або ви підключаєтеся з браузерного origin не з loopback без явного
|
||||
- `origin not allowed` → `Origin` браузера не входить до `gateway.controlUi.allowedOrigins`
|
||||
(або ви підключаєтеся з browser origin не на loopback без явного
|
||||
allowlist).
|
||||
- `device nonce required` / `device nonce mismatch` → клієнт не завершує
|
||||
challenge-based потік автентифікації пристрою (`connect.challenge` + `device.nonce`).
|
||||
автентифікацію пристрою на основі challenge (`connect.challenge` + `device.nonce`).
|
||||
- `device signature invalid` / `device signature expired` → клієнт підписав неправильний
|
||||
payload (або payload із застарілою часовою міткою) для поточного handshake.
|
||||
- `AUTH_TOKEN_MISMATCH` із `canRetryWithDeviceToken=true` → клієнт може виконати одну довірену повторну спробу з кешованим токеном пристрою.
|
||||
- Ця повторна спроба з кешованим токеном повторно використовує кешований набір scope, збережений із paired
|
||||
токеном пристрою. Виклики з явним `deviceToken` / явними `scopes` натомість зберігають
|
||||
свій запитаний набір scope.
|
||||
- Поза цим шляхом повторної спроби пріоритет автентифікації підключення такий: спочатку явний спільний
|
||||
token/password, потім явний `deviceToken`, потім збережений токен пристрою,
|
||||
payload (або використав застарілу часову позначку) для поточного handshake.
|
||||
- `AUTH_TOKEN_MISMATCH` з `canRetryWithDeviceToken=true` → клієнт може виконати одну довірену повторну спробу з кешованим токеном пристрою.
|
||||
- Ця повторна спроба з кешованим токеном повторно використовує кешований набір scope, збережений із прив’язаним
|
||||
токеном пристрою. Виклики з явним `deviceToken` / явними `scopes` зберігають
|
||||
запитаний ними набір scope.
|
||||
- Поза цим шляхом повторної спроби пріоритет автентифікації connect такий: явний спільний
|
||||
token/password спочатку, потім явний `deviceToken`, потім збережений токен пристрою,
|
||||
потім bootstrap token.
|
||||
- На асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого
|
||||
`{scope, ip}` серіалізуються до того, як лімітер зафіксує помилку. Тому дві неправильні
|
||||
- У шляху async Tailscale Serve Control UI невдалі спроби для одного й того самого
|
||||
`{scope, ip}` серіалізуються до того, як limiter зафіксує збій. Тому дві хибні
|
||||
одночасні повторні спроби від того самого клієнта можуть показати `retry later`
|
||||
у другій спробі замість двох звичайних невідповідностей.
|
||||
- `too many failed authentication attempts (retry later)` від loopback-клієнта з browser-origin
|
||||
→ повторні помилки від того самого нормалізованого `Origin` тимчасово блокуються; інший localhost origin використовує окремий bucket.
|
||||
- повторюваний `unauthorized` після цієї повторної спроби → дрейф shared token/device token; оновіть конфігурацію токена та за потреби повторно схваліть/перевипустіть токен пристрою.
|
||||
- `too many failed authentication attempts (retry later)` від loopback-клієнта з browser origin
|
||||
→ повторні збої з того самого нормалізованого `Origin` тимчасово блокуються; інший localhost origin використовує окремий bucket.
|
||||
- повторюване `unauthorized` після цієї повторної спроби → розсинхронізація shared token/device token; оновіть конфігурацію токена та повторно схваліть/перевипустіть токен пристрою за потреби.
|
||||
- `gateway connect failed:` → неправильна ціль host/port/url.
|
||||
|
||||
### Швидка мапа детальних кодів автентифікації
|
||||
### Коротка карта кодів деталей автентифікації
|
||||
|
||||
Використовуйте `error.details.code` із невдалої відповіді `connect`, щоб вибрати наступну дію:
|
||||
Використовуйте `error.details.code` з невдалої відповіді `connect`, щоб вибрати наступну дію:
|
||||
|
||||
| Detail code | Значення | Рекомендована дія |
|
||||
| Код деталей | Значення | Рекомендована дія |
|
||||
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `AUTH_TOKEN_MISSING` | Клієнт не надіслав обов’язковий спільний токен. | Вставте/установіть токен у клієнті та повторіть спробу. Для шляхів dashboard: `openclaw config get gateway.auth.token`, потім вставте його в налаштуваннях Control UI. |
|
||||
| `AUTH_TOKEN_MISMATCH` | Спільний токен не збігся з токеном автентифікації Gateway. | Якщо `canRetryWithDeviceToken=true`, дозвольте одну довірену повторну спробу. Повторні спроби з кешованим токеном повторно використовують збережені схвалені scope; виклики з явним `deviceToken` / `scopes` зберігають запитаний набір scope. Якщо помилка лишається, виконайте [контрольний список відновлення після дрейфу токена](/cli/devices#token-drift-recovery-checklist). |
|
||||
| `AUTH_DEVICE_TOKEN_MISMATCH` | Кешований токен для конкретного пристрою застарів або був відкликаний. | Перевипустіть/повторно схваліть токен пристрою за допомогою [CLI пристроїв](/cli/devices), а потім підключіться знову. |
|
||||
| `PAIRING_REQUIRED` | Ідентичність пристрою потребує схвалення. Перевірте `error.details.reason` для `not-paired`, `scope-upgrade`, `role-upgrade` або `metadata-upgrade` і використовуйте `requestId` / `remediationHint`, якщо вони є. | Схваліть запит, що очікує розгляду: `openclaw devices list`, потім `openclaw devices approve <requestId>`. Оновлення scope/role використовують той самий потік після того, як ви перевірите запитаний доступ. |
|
||||
| `AUTH_TOKEN_MISSING` | Клієнт не надіслав обов’язковий спільний token. | Вставте/установіть token у клієнті й повторіть спробу. Для шляхів dashboard: `openclaw config get gateway.auth.token`, потім вставте його в налаштуваннях Control UI. |
|
||||
| `AUTH_TOKEN_MISMATCH` | Спільний token не збігся з токеном автентифікації gateway. | Якщо `canRetryWithDeviceToken=true`, дозвольте одну довірену повторну спробу. Повторні спроби з кешованим токеном повторно використовують збережені схвалені scope; виклики з явними `deviceToken` / `scopes` зберігають запитані scope. Якщо збій повторюється, виконайте [контрольний список відновлення розсинхронізації токенів](/cli/devices#token-drift-recovery-checklist). |
|
||||
| `AUTH_DEVICE_TOKEN_MISMATCH` | Кешований токен для конкретного пристрою застарів або відкликаний. | Перевипустіть/повторно схваліть токен пристрою за допомогою [CLI пристроїв](/cli/devices), а потім підключіться знову. |
|
||||
| `PAIRING_REQUIRED` | Ідентичність пристрою потребує схвалення. Перевірте `error.details.reason`: `not-paired`, `scope-upgrade`, `role-upgrade` або `metadata-upgrade`, і використовуйте `requestId` / `remediationHint`, якщо вони є. | Схваліть очікуваний запит: `openclaw devices list`, потім `openclaw devices approve <requestId>`. Підвищення scope/ролей використовує той самий процес після перевірки запитаного доступу. |
|
||||
|
||||
Перевірка міграції автентифікації пристрою v2:
|
||||
Перевірка міграції device auth v2:
|
||||
|
||||
```bash
|
||||
openclaw --version
|
||||
@ -212,16 +210,16 @@ openclaw doctor
|
||||
openclaw gateway status
|
||||
```
|
||||
|
||||
Якщо журнали показують помилки nonce/signature, оновіть клієнт, що підключається, і переконайтеся, що він:
|
||||
Якщо журнали показують помилки nonce/signature, оновіть клієнт, який підключається, і переконайтеся, що він:
|
||||
|
||||
1. чекає на `connect.challenge`
|
||||
2. підписує payload, прив’язаний до challenge
|
||||
3. надсилає `connect.params.device.nonce` із тим самим nonce challenge
|
||||
3. надсилає `connect.params.device.nonce` з тим самим nonce challenge
|
||||
|
||||
Якщо `openclaw devices rotate` / `revoke` / `remove` неочікувано відхиляється:
|
||||
Якщо `openclaw devices rotate` / `revoke` / `remove` неочікувано заборонено:
|
||||
|
||||
- сесії токенів paired-device можуть керувати лише **власним** пристроєм, якщо
|
||||
виклик не має також `operator.admin`
|
||||
- сесії з токеном прив’язаного пристрою можуть керувати лише **власним** пристроєм, якщо
|
||||
виклик також не має `operator.admin`
|
||||
- `openclaw devices rotate --scope ...` може запитувати лише ті operator scope,
|
||||
які сесія виклику вже має
|
||||
|
||||
@ -233,32 +231,32 @@ openclaw gateway status
|
||||
- [/gateway/remote](/uk/gateway/remote)
|
||||
- [/cli/devices](/cli/devices)
|
||||
|
||||
## Служба Gateway не запущена
|
||||
## Сервіс Gateway не запущений
|
||||
|
||||
Використовуйте це, коли службу встановлено, але процес не утримується в робочому стані.
|
||||
Використовуйте це, коли сервіс установлено, але процес не залишається запущеним.
|
||||
|
||||
```bash
|
||||
openclaw gateway status
|
||||
openclaw status
|
||||
openclaw logs --follow
|
||||
openclaw doctor
|
||||
openclaw gateway status --deep # також сканувати системні служби
|
||||
openclaw gateway status --deep # also scan system-level services
|
||||
```
|
||||
|
||||
Зверніть увагу на таке:
|
||||
|
||||
- `Runtime: stopped` із підказками щодо завершення.
|
||||
- Невідповідність конфігурації служби (`Config (cli)` проти `Config (service)`).
|
||||
- Конфлікти портів/слухачів.
|
||||
- Невідповідність конфігурації сервісу (`Config (cli)` проти `Config (service)`).
|
||||
- Конфлікти порту/слухача.
|
||||
- Додаткові встановлення launchd/systemd/schtasks, коли використовується `--deep`.
|
||||
- Підказки з очищення `Other gateway-like services detected (best effort)`.
|
||||
- Підказки очищення `Other gateway-like services detected (best effort)`.
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- `Gateway start blocked: set gateway.mode=local` або `existing config is missing gateway.mode` → локальний режим Gateway не ввімкнено, або файл конфігурації було перезаписано/пошкоджено і він втратив `gateway.mode`. Виправлення: установіть `gateway.mode="local"` у своїй конфігурації або повторно виконайте `openclaw onboard --mode local` / `openclaw setup`, щоб знову проставити очікувану конфігурацію локального режиму. Якщо ви запускаєте OpenClaw через Podman, типовий шлях до конфігурації — `~/.openclaw/openclaw.json`.
|
||||
- `Gateway start blocked: set gateway.mode=local` або `existing config is missing gateway.mode` → локальний режим gateway не ввімкнено, або файл конфігурації було пошкоджено і він втратив `gateway.mode`. Виправлення: установіть `gateway.mode="local"` у своїй конфігурації або повторно виконайте `openclaw onboard --mode local` / `openclaw setup`, щоб знову проставити очікувану конфігурацію локального режиму. Якщо ви запускаєте OpenClaw через Podman, типовий шлях до конфігурації: `~/.openclaw/openclaw.json`.
|
||||
- `refusing to bind gateway ... without auth` → прив’язка не до loopback без дійсного шляху автентифікації gateway (token/password або trusted-proxy, якщо налаштовано).
|
||||
- `another gateway instance is already listening` / `EADDRINUSE` → конфлікт порту.
|
||||
- `Other gateway-like services detected (best effort)` → існують застарілі або паралельні модулі launchd/systemd/schtasks. У більшості налаштувань на одній машині має бути один Gateway; якщо вам справді потрібно більше одного, ізолюйте порти + конфігурацію/стан/робочий простір. Див. [/gateway#multiple-gateways-same-host](/uk/gateway#multiple-gateways-same-host).
|
||||
- `Other gateway-like services detected (best effort)` → існують застарілі або паралельні launchd/systemd/schtasks unit. У більшості конфігурацій на одну машину має бути один gateway; якщо вам справді потрібно більше одного, ізолюйте порти + config/state/workspace. Див. [/gateway#multiple-gateways-same-host](/uk/gateway#multiple-gateways-same-host).
|
||||
|
||||
Пов’язане:
|
||||
|
||||
@ -282,17 +280,17 @@ openclaw doctor
|
||||
- `Config auto-restored from last-known-good`
|
||||
- `gateway: invalid config was restored from last-known-good backup`
|
||||
- `config reload restored last-known-good config after invalid-config`
|
||||
- Файл із часовою міткою `openclaw.json.clobbered.*` поруч з активною конфігурацією
|
||||
- Системна подія головного агента, що починається з `Config recovery warning`
|
||||
- Файл `openclaw.json.clobbered.*` з часовою позначкою поруч з активною конфігурацією
|
||||
- Системну подію головного агента, що починається з `Config recovery warning`
|
||||
|
||||
Що сталося:
|
||||
|
||||
- Відхилена конфігурація не пройшла валідацію під час запуску або гарячого перезавантаження.
|
||||
- OpenClaw зберіг відхилений payload як `.clobbered.*`.
|
||||
- Активну конфігурацію було відновлено з останньої перевіреної останньої відомої справної копії.
|
||||
- На наступному ході головного агента з’явиться попередження не переписувати відхилену конфігурацію всліпу.
|
||||
- Активну конфігурацію було відновлено з останньої валідованої останньої відомої справної копії.
|
||||
- Наступний хід головного агента отримує попередження не переписувати сліпо відхилену конфігурацію.
|
||||
|
||||
Перевірка і виправлення:
|
||||
Перевірка й виправлення:
|
||||
|
||||
```bash
|
||||
CONFIG="$(openclaw config file)"
|
||||
@ -304,8 +302,8 @@ openclaw doctor
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- існує `.clobbered.*` → було відновлено зовнішнє пряме редагування або читання під час запуску.
|
||||
- існує `.rejected.*` → запис конфігурації, яким керував OpenClaw, не пройшов перевірки схеми або перевірки clobber перед підтвердженням.
|
||||
- Існує `.clobbered.*` → було відновлено зовнішнє пряме редагування або зчитування під час запуску.
|
||||
- Існує `.rejected.*` → запис конфігурації, виконаний OpenClaw, не пройшов перевірки схеми або цілісності перед commit.
|
||||
- `Config write rejected:` → запис намагався прибрати обов’язкову структуру, різко зменшити файл або зберегти невалідну конфігурацію.
|
||||
- `Config last-known-good promotion skipped` → кандидат містив замасковані placeholder секретів, наприклад `***`.
|
||||
|
||||
@ -325,7 +323,7 @@ openclaw doctor
|
||||
|
||||
## Попередження probe Gateway
|
||||
|
||||
Використовуйте це, коли `openclaw gateway probe` щось досягає, але все одно виводить блок попереджень.
|
||||
Використовуйте це, коли `openclaw gateway probe` до чогось доходить, але все одно виводить блок попередження.
|
||||
|
||||
```bash
|
||||
openclaw gateway probe
|
||||
@ -336,15 +334,15 @@ openclaw gateway probe --ssh user@gateway-host
|
||||
Зверніть увагу на таке:
|
||||
|
||||
- `warnings[].code` і `primaryTargetId` у виводі JSON.
|
||||
- Чи стосується попередження SSH fallback, кількох Gateway, відсутніх scope або нерозв’язаних посилань auth.
|
||||
- Чи стосується попередження SSH fallback, кількох gateway, відсутніх scope або нерозв’язаних auth ref.
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- `SSH tunnel failed to start; falling back to direct probes.` → налаштування SSH не спрацювало, але команда все одно спробувала прямі налаштовані/loopback цілі.
|
||||
- `multiple reachable gateways detected` → відповіло більше однієї цілі. Зазвичай це означає навмисну конфігурацію з кількома Gateway або застарілі/дубльовані слухачі.
|
||||
- `Read-probe diagnostics are limited by gateway scopes (missing operator.read)` → підключення спрацювало, але detail RPC обмежено scope; виконайте pairing ідентичності пристрою або використайте облікові дані з `operator.read`.
|
||||
- `Capability: pairing-pending` або `gateway closed (1008): pairing required` → Gateway відповів, але цьому клієнту все ще потрібне pairing/схвалення перед звичайним доступом оператора.
|
||||
- нерозв’язане попередження SecretRef у тексті `gateway.auth.*` / `gateway.remote.*` → матеріал автентифікації був недоступний у цьому шляху команди для цілі, що не вдалася.
|
||||
- `SSH tunnel failed to start; falling back to direct probes.` → налаштування SSH не вдалося, але команда все одно спробувала прямі налаштовані/loopback-цілі.
|
||||
- `multiple reachable gateways detected` → відповіло більше однієї цілі. Зазвичай це означає навмисну конфігурацію з кількома gateway або застарілі/дубльовані listener.
|
||||
- `Read-probe diagnostics are limited by gateway scopes (missing operator.read)` → підключення спрацювало, але деталізований RPC обмежено scope; прив’яжіть ідентичність пристрою або використайте облікові дані з `operator.read`.
|
||||
- `Capability: pairing-pending` або `gateway closed (1008): pairing required` → gateway відповів, але цьому клієнту все ще потрібне pairing/схвалення перед звичайним доступом оператора.
|
||||
- нерозв’язане попередження SecretRef для `gateway.auth.*` / `gateway.remote.*` → auth-матеріал був недоступний у цьому шляху команди для цілі, що завершилась невдачею.
|
||||
|
||||
Пов’язане:
|
||||
|
||||
@ -354,7 +352,7 @@ openclaw gateway probe --ssh user@gateway-host
|
||||
|
||||
## Канал підключений, але повідомлення не проходять
|
||||
|
||||
Якщо стан каналу показує підключення, але потік повідомлень не працює, зосередьтеся на політиці, дозволах і правилах доставки, специфічних для каналу.
|
||||
Якщо стан каналу — connected, але потік повідомлень не працює, зосередьтеся на політиці, дозволах і правилах доставки, специфічних для каналу.
|
||||
|
||||
```bash
|
||||
openclaw channels status --probe
|
||||
@ -366,13 +364,13 @@ openclaw config get channels
|
||||
|
||||
Зверніть увагу на таке:
|
||||
|
||||
- Політика DM (`pairing`, `allowlist`, `open`, `disabled`).
|
||||
- Груповий allowlist і вимоги до згадувань.
|
||||
- Політику DM (`pairing`, `allowlist`, `open`, `disabled`).
|
||||
- Allowlist групи та вимоги до згадувань.
|
||||
- Відсутні дозволи/scopes API каналу.
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- `mention required` → повідомлення ігнорується через політику згадувань у групі.
|
||||
- `mention required` → повідомлення ігнорується політикою згадування в групі.
|
||||
- `pairing` / сліди очікування схвалення → відправника не схвалено.
|
||||
- `missing_scope`, `not_in_channel`, `Forbidden`, `401/403` → проблема з автентифікацією/дозволами каналу.
|
||||
|
||||
@ -385,7 +383,7 @@ openclaw config get channels
|
||||
|
||||
## Доставка Cron і Heartbeat
|
||||
|
||||
Якщо Cron або Heartbeat не запустився чи не доставився, спочатку перевірте стан планувальника, а потім ціль доставки.
|
||||
Якщо Cron або Heartbeat не запустилися чи не доставили результат, спочатку перевірте стан scheduler, а потім ціль доставки.
|
||||
|
||||
```bash
|
||||
openclaw cron status
|
||||
@ -397,19 +395,19 @@ openclaw logs --follow
|
||||
|
||||
Зверніть увагу на таке:
|
||||
|
||||
- Cron увімкнено і є наступне пробудження.
|
||||
- Статус історії запусків завдання (`ok`, `skipped`, `error`).
|
||||
- Cron увімкнено, і присутнє наступне пробудження.
|
||||
- Статус історії виконання завдань (`ok`, `skipped`, `error`).
|
||||
- Причини пропуску Heartbeat (`quiet-hours`, `requests-in-flight`, `alerts-disabled`, `empty-heartbeat-file`, `no-tasks-due`).
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- `cron: scheduler disabled; jobs will not run automatically` → Cron вимкнено.
|
||||
- `cron: timer tick failed` → збій тіку планувальника; перевірте помилки файлів/журналів/середовища виконання.
|
||||
- `cron: timer tick failed` → збій тіку scheduler; перевірте помилки файлів/журналів/середовища виконання.
|
||||
- `heartbeat skipped` з `reason=quiet-hours` → поза вікном активних годин.
|
||||
- `heartbeat skipped` з `reason=empty-heartbeat-file` → `HEARTBEAT.md` існує, але містить лише порожні рядки / заголовки markdown, тому OpenClaw пропускає виклик моделі.
|
||||
- `heartbeat skipped` з `reason=no-tasks-due` → `HEARTBEAT.md` містить блок `tasks:`, але жодне із завдань не має виконуватися на цьому тіку.
|
||||
- `heartbeat: unknown accountId` → недійсний id акаунта для цілі доставки Heartbeat.
|
||||
- `heartbeat skipped` з `reason=dm-blocked` → ціль Heartbeat визначилась як пункт призначення в стилі DM, тоді як `agents.defaults.heartbeat.directPolicy` (або перевизначення для конкретного агента) має значення `block`.
|
||||
- `heartbeat skipped` з `reason=empty-heartbeat-file` → `HEARTBEAT.md` існує, але містить лише порожні рядки / markdown-заголовки, тому OpenClaw пропускає виклик моделі.
|
||||
- `heartbeat skipped` з `reason=no-tasks-due` → `HEARTBEAT.md` містить блок `tasks:`, але жодне із завдань не має виконуватися під час цього тіку.
|
||||
- `heartbeat: unknown accountId` → недійсний account id для цілі доставки Heartbeat.
|
||||
- `heartbeat skipped` з `reason=dm-blocked` → ціль Heartbeat була визначена як пункт призначення стилю DM, тоді як `agents.defaults.heartbeat.directPolicy` (або перевизначення для конкретного агента) встановлено в `block`.
|
||||
|
||||
Пов’язане:
|
||||
|
||||
@ -417,9 +415,9 @@ openclaw logs --follow
|
||||
- [/automation/cron-jobs](/uk/automation/cron-jobs)
|
||||
- [/gateway/heartbeat](/uk/gateway/heartbeat)
|
||||
|
||||
## Збій інструмента paired Node
|
||||
## Збій інструмента прив’язаного Node
|
||||
|
||||
Якщо Node paired, але інструменти не працюють, ізолюйте стан переднього плану, дозволів і схвалення.
|
||||
Якщо Node прив’язано, але інструменти не працюють, ізолюйте стан foreground, дозволів і схвалення.
|
||||
|
||||
```bash
|
||||
openclaw nodes status
|
||||
@ -432,14 +430,14 @@ openclaw status
|
||||
Зверніть увагу на таке:
|
||||
|
||||
- Node онлайн з очікуваними можливостями.
|
||||
- Дозволи ОС для камери/мікрофона/геолокації/екрана.
|
||||
- Стан схвалень exec і allowlist.
|
||||
- Надані дозволи ОС для камери/мікрофона/геолокації/екрана.
|
||||
- Стан схвалення exec і allowlist.
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- `NODE_BACKGROUND_UNAVAILABLE` → застосунок Node має бути на передньому плані.
|
||||
- `*_PERMISSION_REQUIRED` / `LOCATION_PERMISSION_REQUIRED` → бракує дозволу ОС.
|
||||
- `SYSTEM_RUN_DENIED: approval required` → схвалення exec очікує.
|
||||
- `SYSTEM_RUN_DENIED: approval required` → очікується схвалення exec.
|
||||
- `SYSTEM_RUN_DENIED: allowlist miss` → команду заблоковано allowlist.
|
||||
|
||||
Пов’язане:
|
||||
@ -448,9 +446,9 @@ openclaw status
|
||||
- [/nodes/index](/uk/nodes/index)
|
||||
- [/tools/exec-approvals](/uk/tools/exec-approvals)
|
||||
|
||||
## Збій інструмента браузера
|
||||
## Збій browser tool
|
||||
|
||||
Використовуйте це, коли дії інструмента браузера не вдаються, хоча сам Gateway справний.
|
||||
Використовуйте це, коли дії browser tool не вдаються, хоча сам gateway справний.
|
||||
|
||||
```bash
|
||||
openclaw browser status
|
||||
@ -463,30 +461,30 @@ openclaw doctor
|
||||
Зверніть увагу на таке:
|
||||
|
||||
- Чи встановлено `plugins.allow` і чи містить він `browser`.
|
||||
- Чинний шлях до виконуваного файла браузера.
|
||||
- Валідний шлях до виконуваного файла браузера.
|
||||
- Досяжність профілю CDP.
|
||||
- Доступність локального Chrome для профілів `existing-session` / `user`.
|
||||
- Наявність локального Chrome для профілів `existing-session` / `user`.
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- `unknown command "browser"` або `unknown command 'browser'` → вбудований Plugin браузера виключено через `plugins.allow`.
|
||||
- інструмент браузера відсутній / недоступний, хоча `browser.enabled=true` → `plugins.allow` виключає `browser`, тому Plugin ніколи не завантажувався.
|
||||
- `Failed to start Chrome CDP on port` → процес браузера не вдалося запустити.
|
||||
- `unknown command "browser"` або `unknown command 'browser'` → вбудований browser Plugin виключено через `plugins.allow`.
|
||||
- browser tool відсутній / недоступний, хоча `browser.enabled=true` → `plugins.allow` виключає `browser`, тому Plugin ніколи не завантажився.
|
||||
- `Failed to start Chrome CDP on port` → не вдалося запустити процес браузера.
|
||||
- `browser.executablePath not found` → налаштований шлях недійсний.
|
||||
- `browser.cdpUrl must be http(s) or ws(s)` → налаштований URL CDP використовує непідтримувану схему, таку як `file:` або `ftp:`.
|
||||
- `browser.cdpUrl has invalid port` → налаштований URL CDP має некоректний або неприпустимий порт.
|
||||
- `Could not find DevToolsActivePort for chrome` → наявна сесія Chrome MCP `existing-session` ще не змогла приєднатися до вибраного каталогу даних браузера. Відкрийте сторінку inspect браузера, увімкніть віддалене налагодження, залиште браузер відкритим, схваліть перший запит на приєднання, а потім повторіть спробу. Якщо стан входу не потрібен, надайте перевагу керованому профілю `openclaw`.
|
||||
- `No Chrome tabs found for profile="user"` → профіль приєднання Chrome MCP не має відкритих локальних вкладок Chrome.
|
||||
- `Remote CDP for profile "<name>" is not reachable` → налаштована віддалена кінцева точка CDP недосяжна з хоста Gateway.
|
||||
- `Browser attachOnly is enabled ... not reachable` або `Browser attachOnly is enabled and CDP websocket ... is not reachable` → профіль лише для приєднання не має досяжної цілі, або HTTP endpoint відповів, але WebSocket CDP усе одно не вдалося відкрити.
|
||||
- `Playwright is not available in this gateway build; '<feature>' is unsupported.` → у поточному встановленні Gateway немає повного пакета Playwright; ARIA-знімки й базові знімки сторінки все ще можуть працювати, але навігація, AI-знімки, знімки елементів за CSS-селекторами й експорт PDF залишаються недоступними.
|
||||
- `browser.cdpUrl must be http(s) or ws(s)` → налаштований CDP URL використовує непідтримувану схему, таку як `file:` або `ftp:`.
|
||||
- `browser.cdpUrl has invalid port` → налаштований CDP URL має помилковий або неприпустимий порт.
|
||||
- `Could not find DevToolsActivePort for chrome` → Chrome MCP existing-session ще не зміг під’єднатися до вибраного каталогу даних браузера. Відкрийте сторінку inspect браузера, увімкніть remote debugging, тримайте браузер відкритим, схваліть перший запит на підключення, а потім повторіть спробу. Якщо стан входу не потрібен, віддайте перевагу керованому профілю `openclaw`.
|
||||
- `No Chrome tabs found for profile="user"` → профіль підключення Chrome MCP не має відкритих локальних вкладок Chrome.
|
||||
- `Remote CDP for profile "<name>" is not reachable` → налаштований віддалений endpoint CDP недосяжний із хоста gateway.
|
||||
- `Browser attachOnly is enabled ... not reachable` або `Browser attachOnly is enabled and CDP websocket ... is not reachable` → профіль лише з attach не має досяжної цілі, або HTTP endpoint відповів, але CDP WebSocket все одно не вдалося відкрити.
|
||||
- `Playwright is not available in this gateway build; '<feature>' is unsupported.` → у поточній інсталяції gateway бракує вбудованої залежності середовища виконання `playwright-core` для browser Plugin; виконайте `openclaw doctor --fix`, потім перезапустіть gateway. Знімки ARIA та базові знімки сторінок усе ще можуть працювати, але навігація, AI snapshots, знімки елементів за CSS-селекторами та експорт PDF залишаться недоступними.
|
||||
- `fullPage is not supported for element screenshots` → запит на знімок екрана поєднав `--full-page` з `--ref` або `--element`.
|
||||
- `element screenshots are not supported for existing-session profiles; use ref from snapshot.` → виклики знімків екрана Chrome MCP / `existing-session` мають використовувати захоплення сторінки або `--ref` зі snapshot, а не CSS `--element`.
|
||||
- `existing-session file uploads do not support element selectors; use ref/inputRef.` → хуки завантаження файлів Chrome MCP потребують посилань snapshot, а не CSS-селекторів.
|
||||
- `existing-session file uploads currently support one file at a time.` → надсилайте одне завантаження за виклик у профілях Chrome MCP.
|
||||
- `element screenshots are not supported for existing-session profiles; use ref from snapshot.` → виклики знімків екрана Chrome MCP / `existing-session` повинні використовувати захоплення сторінки або `--ref` зі snapshot, а не CSS `--element`.
|
||||
- `existing-session file uploads do not support element selectors; use ref/inputRef.` → хуки завантаження файлів у Chrome MCP потребують snapshot ref, а не CSS-селекторів.
|
||||
- `existing-session file uploads currently support one file at a time.` → для профілів Chrome MCP надсилайте по одному файлу за виклик.
|
||||
- `existing-session dialog handling does not support timeoutMs.` → хуки діалогів у профілях Chrome MCP не підтримують перевизначення timeout.
|
||||
- `response body is not supported for existing-session profiles yet.` → `responsebody` поки що вимагає керований браузер або профіль raw CDP.
|
||||
- застарілі перевизначення viewport / dark-mode / locale / offline у профілях лише для приєднання або віддалених CDP → виконайте `openclaw browser stop --browser-profile <name>`, щоб закрити активну контрольну сесію та звільнити стан емуляції Playwright/CDP без перезапуску всього Gateway.
|
||||
- `response body is not supported for existing-session profiles yet.` → `responsebody` поки що потребує керованого браузера або сирого профілю CDP.
|
||||
- застарілі перевизначення viewport / dark-mode / locale / offline у профілях attach-only або remote CDP → виконайте `openclaw browser stop --browser-profile <name>`, щоб закрити активну керовану сесію й звільнити стан емуляції Playwright/CDP без перезапуску всього gateway.
|
||||
|
||||
Пов’язане:
|
||||
|
||||
@ -495,9 +493,9 @@ openclaw doctor
|
||||
|
||||
## Якщо ви оновилися і щось раптово зламалося
|
||||
|
||||
Більшість збоїв після оновлення — це дрейф конфігурації або суворіші типові значення, які тепер примусово застосовуються.
|
||||
Більшість збоїв після оновлення — це дрейф конфігурації або жорсткіші типові значення, які тепер примусово застосовуються.
|
||||
|
||||
### 1) Поведінка автентифікації та перевизначення URL змінилася
|
||||
### 1) Змінилася поведінка автентифікації та перевизначення URL
|
||||
|
||||
```bash
|
||||
openclaw gateway status
|
||||
@ -508,15 +506,15 @@ openclaw config get gateway.auth.mode
|
||||
|
||||
Що перевірити:
|
||||
|
||||
- Якщо `gateway.mode=remote`, виклики CLI можуть бути спрямовані на віддалений Gateway, тоді як ваша локальна служба справна.
|
||||
- Явні виклики з `--url` не повертаються до збережених облікових даних.
|
||||
- Якщо `gateway.mode=remote`, виклики CLI можуть бути спрямовані на віддалений Gateway, тоді як ваш локальний сервіс справний.
|
||||
- Явні виклики `--url` не повертаються до збережених облікових даних.
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- `gateway connect failed:` → неправильна ціль URL.
|
||||
- `unauthorized` → endpoint досяжний, але автентифікація неправильна.
|
||||
|
||||
### 2) Обмеження bind і auth стали суворішими
|
||||
### 2) Обмеження прив’язки та автентифікації стали жорсткішими
|
||||
|
||||
```bash
|
||||
openclaw config get gateway.bind
|
||||
@ -528,15 +526,15 @@ openclaw logs --follow
|
||||
|
||||
Що перевірити:
|
||||
|
||||
- Прив’язки не до loopback (`lan`, `tailnet`, `custom`) потребують дійсного шляху автентифікації gateway: спільна автентифікація token/password або правильно налаштоване розгортання `trusted-proxy` не для loopback.
|
||||
- Старі ключі, такі як `gateway.token`, не замінюють `gateway.auth.token`.
|
||||
- Прив’язки не до loopback (`lan`, `tailnet`, `custom`) потребують дійсного шляху автентифікації Gateway: спільна автентифікація token/password або правильно налаштоване розгортання `trusted-proxy` не на loopback.
|
||||
- Старі ключі на кшталт `gateway.token` не замінюють `gateway.auth.token`.
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- `refusing to bind gateway ... without auth` → прив’язка не до loopback без дійсного шляху автентифікації gateway.
|
||||
- `Connectivity probe: failed` коли середовище виконання працює → Gateway живий, але недоступний із поточними auth/url.
|
||||
- `Connectivity probe: failed`, тоді як runtime запущено → gateway живий, але недоступний із поточною auth/url.
|
||||
|
||||
### 3) Стан pairing та ідентичності пристрою змінився
|
||||
### 3) Змінився стан pairing та ідентичності пристрою
|
||||
|
||||
```bash
|
||||
openclaw devices list
|
||||
@ -547,15 +545,15 @@ openclaw doctor
|
||||
|
||||
Що перевірити:
|
||||
|
||||
- Незавершені схвалення пристроїв для dashboard/nodes.
|
||||
- Незавершені схвалення pairing у DM після змін політики або ідентичності.
|
||||
- Очікувані схвалення пристроїв для dashboard/nodes.
|
||||
- Очікувані схвалення pairing у DM після змін політики або ідентичності.
|
||||
|
||||
Поширені ознаки:
|
||||
|
||||
- `device identity required` → автентифікацію пристрою не виконано.
|
||||
- `pairing required` → відправника/пристрій потрібно схвалити.
|
||||
|
||||
Якщо після перевірок конфігурація служби і середовище виконання все ще не збігаються, перевстановіть метадані служби з того самого каталогу профілю/стану:
|
||||
Якщо після перевірок конфігурація сервісу та runtime все ще не збігаються, перевстановіть метадані сервісу з того самого каталогу profile/state:
|
||||
|
||||
```bash
|
||||
openclaw gateway install --force
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
---
|
||||
read_when:
|
||||
- Додавання автоматизації браузера, керованої агентом
|
||||
- Налагодження того, чому openclaw заважає вашому власному Chrome
|
||||
- Реалізація налаштувань браузера та його життєвого циклу в застосунку macOS
|
||||
- Налагодження причин, через які openclaw заважає вашому власному Chrome
|
||||
- Реалізація налаштувань браузера та життєвого циклу в застосунку macOS
|
||||
summary: Інтегрований сервіс керування браузером + команди дій
|
||||
title: Браузер (керований OpenClaw)
|
||||
x-i18n:
|
||||
generated_at: "2026-04-19T10:22:58Z"
|
||||
generated_at: "2026-04-22T20:49:59Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 3f7d37b34ba48dc7c38f8c2e77f8bb97af987eac6a874ebfc921f950fb59de4b
|
||||
source_hash: 865b0020d66366a62939f8ed28b9cda88d56ee7f5245b1b24a4e804ce55ea42d
|
||||
source_path: tools/browser.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -20,19 +20,19 @@ OpenClaw може запускати **окремий профіль Chrome/Brav
|
||||
Він ізольований від вашого особистого браузера та керується через невеликий локальний
|
||||
сервіс керування всередині Gateway (лише loopback).
|
||||
|
||||
Погляд для початківців:
|
||||
Пояснення для початківців:
|
||||
|
||||
- Думайте про це як про **окремий браузер лише для агента**.
|
||||
- Профіль `openclaw` **не** торкається вашого особистого профілю браузера.
|
||||
- Профіль `openclaw` **не** торкається профілю вашого особистого браузера.
|
||||
- Агент може **відкривати вкладки, читати сторінки, натискати та вводити текст** у безпечному середовищі.
|
||||
- Вбудований профіль `user` підключається до вашої справжньої сесії Chrome, у якій ви вже ввійшли, через Chrome MCP.
|
||||
- Вбудований профіль `user` підключається до вашої реальної сесії Chrome, у якій виконано вхід, через Chrome MCP.
|
||||
|
||||
## Що ви отримуєте
|
||||
|
||||
- Окремий профіль браузера з назвою **openclaw** (типово з помаранчевим акцентом).
|
||||
- Детерміноване керування вкладками (список/відкрити/фокус/закрити).
|
||||
- Детерміноване керування вкладками (перелік/відкриття/фокусування/закриття).
|
||||
- Дії агента (натискання/введення/перетягування/вибір), знімки, скриншоти, PDF.
|
||||
- Необов’язкова підтримка кількох профілів (`openclaw`, `work`, `remote`, ...).
|
||||
- Необов’язкову підтримку кількох профілів (`openclaw`, `work`, `remote`, ...).
|
||||
|
||||
Цей браузер **не** призначений для вашого щоденного використання. Це безпечна, ізольована поверхня для
|
||||
автоматизації та перевірки агентом.
|
||||
@ -46,17 +46,17 @@ openclaw browser --browser-profile openclaw open https://example.com
|
||||
openclaw browser --browser-profile openclaw snapshot
|
||||
```
|
||||
|
||||
Якщо ви отримуєте “Browser disabled”, увімкніть його в конфігурації (див. нижче) і перезапустіть
|
||||
Якщо ви отримуєте повідомлення “Browser disabled”, увімкніть його в конфігурації (див. нижче) і перезапустіть
|
||||
Gateway.
|
||||
|
||||
Якщо `openclaw browser` повністю відсутня або агент каже, що інструмент браузера
|
||||
Якщо `openclaw browser` узагалі відсутня або агент каже, що інструмент браузера
|
||||
недоступний, перейдіть до [Відсутня команда браузера або інструмент](/uk/tools/browser#missing-browser-command-or-tool).
|
||||
|
||||
## Керування Plugin
|
||||
|
||||
Типовий інструмент `browser` тепер є вбудованим Plugin, який постачається увімкненим
|
||||
типово. Це означає, що ви можете вимкнути або замінити його, не видаляючи решту
|
||||
системи Plugin у OpenClaw:
|
||||
Типовий інструмент `browser` тепер є вбудованим Plugin, який постачається
|
||||
увімкненим за замовчуванням. Це означає, що ви можете вимкнути або замінити його, не видаляючи решту
|
||||
системи Plugin OpenClaw:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -71,31 +71,32 @@ Gateway.
|
||||
```
|
||||
|
||||
Вимкніть вбудований Plugin перед встановленням іншого Plugin, який надає
|
||||
те саме ім’я інструмента `browser`. Типовому режиму браузера потрібні обидва параметри:
|
||||
те саме ім’я інструмента `browser`. Типовий режим роботи браузера потребує обох умов:
|
||||
|
||||
- `plugins.entries.browser.enabled` не вимкнено
|
||||
- `browser.enabled=true`
|
||||
|
||||
Якщо ви вимкнете лише Plugin, вбудований CLI браузера (`openclaw browser`),
|
||||
метод gateway (`browser.request`), інструмент агента та типовий сервіс керування браузером
|
||||
усі зникнуть разом. Ваша конфігурація `browser.*` залишиться недоторканою, щоб її міг повторно використати
|
||||
зникнуть одночасно. Ваш конфіг `browser.*` залишиться недоторканим, щоб його міг повторно використати
|
||||
Plugin-замінник.
|
||||
|
||||
Вбудований Plugin браузера тепер також володіє реалізацією runtime браузера.
|
||||
У core залишаються лише спільні допоміжні компоненти Plugin SDK плюс сумісні повторні експорти для
|
||||
Вбудований Plugin браузера тепер також володіє реалізацією середовища виконання браузера.
|
||||
У core залишаються лише спільні допоміжні засоби Plugin SDK плюс сумісні повторні експорти для
|
||||
старих внутрішніх шляхів імпорту. На практиці видалення або заміна пакета Plugin браузера
|
||||
прибирає функціональність браузера, а не залишає позаду другу runtime-реалізацію, що належить core.
|
||||
прибирає набір можливостей браузера замість того, щоб залишати позаду друге середовище виконання,
|
||||
яким володіє core.
|
||||
|
||||
Зміни конфігурації браузера все ще потребують перезапуску Gateway, щоб вбудований Plugin
|
||||
міг повторно зареєструвати свій сервіс браузера з новими налаштуваннями.
|
||||
|
||||
## Відсутня команда браузера або інструмент
|
||||
|
||||
Якщо `openclaw browser` раптово стає невідомою командою після оновлення або
|
||||
Якщо після оновлення `openclaw browser` раптово стала невідомою командою або
|
||||
агент повідомляє, що інструмент браузера відсутній, найпоширенішою причиною є
|
||||
обмежувальний список `plugins.allow`, який не містить `browser`.
|
||||
|
||||
Приклад зламаної конфігурації:
|
||||
Приклад некоректної конфігурації:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -117,9 +118,9 @@ Plugin-замінник.
|
||||
|
||||
Важливі примітки:
|
||||
|
||||
- Самого `browser.enabled=true` недостатньо, якщо встановлено `plugins.allow`.
|
||||
- Самого `plugins.entries.browser.enabled=true` також недостатньо, якщо встановлено `plugins.allow`.
|
||||
- `tools.alsoAllow: ["browser"]` **не** завантажує вбудований Plugin браузера. Він лише коригує політику інструментів після того, як Plugin уже завантажено.
|
||||
- `browser.enabled=true` саме по собі недостатньо, коли встановлено `plugins.allow`.
|
||||
- `plugins.entries.browser.enabled=true` саме по собі також недостатньо, коли встановлено `plugins.allow`.
|
||||
- `tools.alsoAllow: ["browser"]` **не** завантажує вбудований Plugin браузера. Це лише коригує політику інструментів після того, як Plugin уже завантажено.
|
||||
- Якщо вам не потрібен обмежувальний список дозволених Plugin, видалення `plugins.allow` також відновлює типову поведінку вбудованого браузера.
|
||||
|
||||
Типові симптоми:
|
||||
@ -128,38 +129,38 @@ Plugin-замінник.
|
||||
- `browser.request` відсутній.
|
||||
- Агент повідомляє, що інструмент браузера недоступний або відсутній.
|
||||
|
||||
## Профілі: `openclaw` vs `user`
|
||||
## Профілі: `openclaw` і `user`
|
||||
|
||||
- `openclaw`: керований, ізольований браузер (розширення не потрібне).
|
||||
- `user`: вбудований профіль підключення Chrome MCP до вашої **справжньої сесії Chrome**
|
||||
- `user`: вбудований профіль підключення Chrome MCP до вашої **реальної сесії Chrome**
|
||||
із виконаним входом.
|
||||
|
||||
Для викликів інструмента браузера агентом:
|
||||
|
||||
- Типово: використовується ізольований браузер `openclaw`.
|
||||
- Типово: використовувати ізольований браузер `openclaw`.
|
||||
- Надавайте перевагу `profile="user"`, коли важливі наявні сесії з виконаним входом і користувач
|
||||
перебуває за комп’ютером, щоб натиснути/підтвердити будь-який запит на підключення.
|
||||
- `profile` — це явний спосіб перевизначення, коли вам потрібен конкретний режим браузера.
|
||||
- `profile` є явним перевизначенням, коли ви хочете конкретний режим браузера.
|
||||
|
||||
Установіть `browser.defaultProfile: "openclaw"`, якщо хочете, щоб типово використовувався керований режим.
|
||||
Установіть `browser.defaultProfile: "openclaw"`, якщо хочете, щоб керований режим був типовим.
|
||||
|
||||
## Конфігурація
|
||||
|
||||
Налаштування браузера зберігаються в `~/.openclaw/openclaw.json`.
|
||||
Налаштування браузера містяться в `~/.openclaw/openclaw.json`.
|
||||
|
||||
```json5
|
||||
{
|
||||
browser: {
|
||||
enabled: true, // типово: true
|
||||
enabled: true, // default: true
|
||||
ssrfPolicy: {
|
||||
// dangerouslyAllowPrivateNetwork: true, // вмикайте лише для довіреного доступу до приватної мережі
|
||||
// allowPrivateNetwork: true, // застарілий псевдонім
|
||||
// dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access
|
||||
// allowPrivateNetwork: true, // legacy alias
|
||||
// hostnameAllowlist: ["*.example.com", "example.com"],
|
||||
// allowedHostnames: ["localhost"],
|
||||
},
|
||||
// cdpUrl: "http://127.0.0.1:18792", // застаріле перевизначення одного профілю
|
||||
remoteCdpTimeoutMs: 1500, // тайм-аут HTTP віддаленого CDP (мс)
|
||||
remoteCdpHandshakeTimeoutMs: 3000, // тайм-аут рукостискання WebSocket віддаленого CDP (мс)
|
||||
// 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)
|
||||
defaultProfile: "openclaw",
|
||||
color: "#FF4500",
|
||||
headless: false,
|
||||
@ -188,32 +189,32 @@ Plugin-замінник.
|
||||
|
||||
Примітки:
|
||||
|
||||
- Сервіс керування браузером прив’язується до loopback на порту, похідному від `gateway.port`
|
||||
- Сервіс керування браузером прив’язується до loopback на порті, похідному від `gateway.port`
|
||||
(типово: `18791`, тобто gateway + 2).
|
||||
- Якщо ви перевизначаєте порт Gateway (`gateway.port` або `OPENCLAW_GATEWAY_PORT`),
|
||||
похідні порти браузера зміщуються, щоб залишатися в тій самій “сім’ї”.
|
||||
- `cdpUrl` типово вказує на керований локальний CDP-порт, якщо його не задано.
|
||||
похідні порти браузера зміщуються, щоб залишатися в тій самій «родині».
|
||||
- Якщо `cdpUrl` не задано, типово використовується керований локальний порт CDP.
|
||||
- `remoteCdpTimeoutMs` застосовується до перевірок доступності віддаленого (не-loopback) CDP.
|
||||
- `remoteCdpHandshakeTimeoutMs` застосовується до перевірок доступності рукостискання WebSocket віддаленого CDP.
|
||||
- Навігація браузера/відкриття вкладок захищені SSRF-перевіркою до навігації та за можливості повторно перевіряються для фінального URL `http(s)` після навігації.
|
||||
- У строгому режимі SSRF перевіряються також виявлення/проби віддалених кінцевих точок CDP (`cdpUrl`, включно з пошуками `/json/version`).
|
||||
- `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` типово вимкнений. Установлюйте його в `true` лише тоді, коли ви навмисно довіряєте доступу браузера до приватної мережі.
|
||||
- Навігація/відкриття вкладок у браузері захищені від SSRF перед навігацією та повторно перевіряються за принципом best-effort на фінальному `http(s)` URL після навігації.
|
||||
- У строгому режимі SSRF також перевіряються виявлення/проби віддалених кінцевих точок CDP (`cdpUrl`, включно з пошуками `/json/version`).
|
||||
- `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` типово вимкнено. Установлюйте `true` лише тоді, коли ви свідомо довіряєте доступу браузера до приватної мережі.
|
||||
- `browser.ssrfPolicy.allowPrivateNetwork` залишається підтримуваним як застарілий псевдонім для сумісності.
|
||||
- `attachOnly: true` означає “ніколи не запускати локальний браузер; лише підключатися, якщо він уже запущений”.
|
||||
- `color` та `color` для кожного профілю тонують інтерфейс браузера, щоб ви могли бачити, який профіль активний.
|
||||
- Типовий профіль — `openclaw` (окремий браузер, керований OpenClaw). Використовуйте `defaultProfile: "user"`, щоб перейти на браузер користувача з виконаним входом.
|
||||
- Порядок автовизначення: системний браузер за замовчуванням, якщо він на базі Chromium; інакше Chrome → Brave → Edge → Chromium → Chrome Canary.
|
||||
- Локальні профілі `openclaw` автоматично призначають `cdpPort`/`cdpUrl` — задавайте їх лише для віддаленого CDP.
|
||||
- `attachOnly: true` означає «ніколи не запускати локальний браузер; лише підключатися, якщо він уже працює».
|
||||
- `color` і `color` для окремого профілю тонують інтерфейс браузера, щоб ви могли бачити, який профіль активний.
|
||||
- Типовим профілем є `openclaw` (окремий браузер, яким керує OpenClaw). Використовуйте `defaultProfile: "user"`, щоб перейти на браузер користувача з виконаним входом.
|
||||
- Порядок автовиявлення: системний типовий браузер, якщо він на базі Chromium; інакше Chrome → Brave → Edge → Chromium → Chrome Canary.
|
||||
- Локальним профілям `openclaw` автоматично призначаються `cdpPort`/`cdpUrl` — задавайте їх лише для віддаленого CDP.
|
||||
- `driver: "existing-session"` використовує Chrome DevTools MCP замість сирого CDP. Не
|
||||
встановлюйте `cdpUrl` для цього драйвера.
|
||||
задавайте `cdpUrl` для цього драйвера.
|
||||
- Установіть `browser.profiles.<name>.userDataDir`, коли профіль existing-session
|
||||
має підключатися до нестандартного профілю користувача Chromium, наприклад Brave або Edge.
|
||||
має підключатися до нетипового профілю користувача Chromium, наприклад Brave або Edge.
|
||||
|
||||
## Використання Brave (або іншого браузера на базі Chromium)
|
||||
|
||||
Якщо ваш **системний браузер за замовчуванням** базується на Chromium (Chrome/Brave/Edge тощо),
|
||||
Якщо вашим **системним браузером за замовчуванням** є браузер на базі Chromium (Chrome/Brave/Edge тощо),
|
||||
OpenClaw використовує його автоматично. Установіть `browser.executablePath`, щоб перевизначити
|
||||
автовизначення:
|
||||
автовиявлення:
|
||||
|
||||
Приклад CLI:
|
||||
|
||||
@ -246,21 +247,21 @@ openclaw config set browser.executablePath "/usr/bin/google-chrome"
|
||||
|
||||
## Локальне та віддалене керування
|
||||
|
||||
- **Локальне керування (типово):** Gateway запускає loopback-сервіс керування та може запускати локальний браузер.
|
||||
- **Віддалене керування (вузол-хост):** запустіть вузол-хост на машині, де є браузер; Gateway проксуватиме до нього дії браузера.
|
||||
- **Локальне керування (типово):** Gateway запускає loopback-сервіс керування і може запускати локальний браузер.
|
||||
- **Віддалене керування (хост Node):** запустіть хост Node на машині, де є браузер; Gateway проксуватиме до нього дії браузера.
|
||||
- **Віддалений CDP:** установіть `browser.profiles.<name>.cdpUrl` (або `browser.cdpUrl`), щоб
|
||||
підключитися до віддаленого браузера на базі Chromium. У такому разі OpenClaw не запускатиме локальний браузер.
|
||||
підключитися до віддаленого браузера на базі Chromium. У цьому випадку OpenClaw не запускатиме локальний браузер.
|
||||
|
||||
Поведінка під час зупинки відрізняється залежно від режиму профілю:
|
||||
|
||||
- локальні керовані профілі: `openclaw browser stop` зупиняє процес браузера, який
|
||||
запустив OpenClaw
|
||||
- профілі лише з підключенням та профілі віддаленого CDP: `openclaw browser stop` закриває активну
|
||||
- профілі лише для підключення та профілі віддаленого CDP: `openclaw browser stop` закриває активну
|
||||
сесію керування та скидає перевизначення емуляції Playwright/CDP (viewport,
|
||||
колірну схему, локаль, часовий пояс, офлайн-режим та подібний стан), навіть
|
||||
якщо OpenClaw не запускав жодного процесу браузера
|
||||
|
||||
Віддалені URL CDP можуть містити автентифікацію:
|
||||
URL віддаленого CDP можуть містити автентифікацію:
|
||||
|
||||
- Токени в параметрах запиту (наприклад, `https://provider.example?token=<token>`)
|
||||
- HTTP Basic auth (наприклад, `https://user:pass@provider.example`)
|
||||
@ -269,27 +270,27 @@ OpenClaw зберігає автентифікацію під час викли
|
||||
до WebSocket CDP. Для токенів краще використовувати змінні середовища або менеджери секретів,
|
||||
а не зберігати їх у файлах конфігурації.
|
||||
|
||||
## Проксі браузера Node (нульова конфігурація типово)
|
||||
## Проксі браузера Node (типовий режим без конфігурації)
|
||||
|
||||
Якщо ви запускаєте **вузол-хост** на машині, де є ваш браузер, OpenClaw може
|
||||
автоматично маршрутизувати виклики інструмента браузера до цього вузла без жодної додаткової конфігурації браузера.
|
||||
Це типовий шлях для віддалених Gateway.
|
||||
Якщо ви запускаєте **хост Node** на машині, де знаходиться ваш браузер, OpenClaw може
|
||||
автоматично спрямовувати виклики інструмента браузера до цього node без будь-якої додаткової конфігурації браузера.
|
||||
Це типовий шлях для віддалених gateway.
|
||||
|
||||
Примітки:
|
||||
|
||||
- Вузол-хост надає свій локальний сервер керування браузером через **проксі-команду**.
|
||||
- Профілі беруться з власної конфігурації вузла `browser.profiles` (так само, як локально).
|
||||
- Хост Node надає свій локальний сервер керування браузером через **проксі-команду**.
|
||||
- Профілі беруться з власного конфігу `browser.profiles` node (так само, як локально).
|
||||
- `nodeHost.browserProxy.allowProfiles` є необов’язковим. Залиште його порожнім для застарілої/типової поведінки: усі налаштовані профілі залишаються доступними через проксі, включно з маршрутами створення/видалення профілів.
|
||||
- Якщо ви встановите `nodeHost.browserProxy.allowProfiles`, OpenClaw розглядатиме це як межу найменших привілеїв: можна буде звертатися лише до профілів зі списку дозволених, а маршрути створення/видалення постійних профілів будуть заблоковані на поверхні проксі.
|
||||
- Вимкніть це, якщо воно вам не потрібне:
|
||||
- На вузлі: `nodeHost.browserProxy.enabled=false`
|
||||
- Якщо ви встановлюєте `nodeHost.browserProxy.allowProfiles`, OpenClaw розглядає це як межу принципу найменших привілеїв: лише профілі зі списку дозволених можуть бути цільовими, а маршрути створення/видалення постійних профілів блокуються на поверхні проксі.
|
||||
- Вимкніть це, якщо не хочете використовувати:
|
||||
- На node: `nodeHost.browserProxy.enabled=false`
|
||||
- На gateway: `gateway.nodes.browser.mode="off"`
|
||||
|
||||
## Browserless (розміщений віддалений CDP)
|
||||
|
||||
[Browserless](https://browserless.io) — це розміщений сервіс Chromium, який надає
|
||||
URL підключення CDP через HTTPS і WebSocket. OpenClaw може використовувати будь-яку форму, але
|
||||
для віддаленого профілю браузера найпростішим варіантом є прямий URL WebSocket
|
||||
для профілю віддаленого браузера найпростішим варіантом є прямий URL WebSocket
|
||||
з документації підключення Browserless.
|
||||
|
||||
Приклад:
|
||||
@ -313,43 +314,43 @@ 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
|
||||
|
||||
Деякі розміщені сервіси браузерів надають **пряму** кінцеву точку WebSocket замість
|
||||
Деякі розміщені сервіси браузера надають **пряму кінцеву точку WebSocket** замість
|
||||
стандартного виявлення CDP на основі HTTP (`/json/version`). OpenClaw приймає три
|
||||
форми URL CDP і автоматично вибирає правильну стратегію підключення:
|
||||
|
||||
- **Виявлення через HTTP(S)** — `http://host[:port]` або `https://host[:port]`.
|
||||
OpenClaw викликає `/json/version`, щоб виявити URL WebSocket debugger, а потім
|
||||
- **Виявлення HTTP(S)** — `http://host[:port]` або `https://host[:port]`.
|
||||
OpenClaw викликає `/json/version`, щоб виявити URL налагоджувача WebSocket, а потім
|
||||
підключається. Резервного переходу на WebSocket немає.
|
||||
- **Прямі кінцеві точки WebSocket** — `ws://host[:port]/devtools/<kind>/<id>` або
|
||||
`wss://...` зі шляхом `/devtools/browser|page|worker|shared_worker|service_worker/<id>`.
|
||||
OpenClaw підключається напряму через рукостискання WebSocket і повністю пропускає
|
||||
`/json/version`.
|
||||
- **Базові корені WebSocket** — `ws://host[:port]` або `wss://host[:port]` без
|
||||
- **Кореневі адреси WebSocket без шляху** — `ws://host[:port]` або `wss://host[:port]` без
|
||||
шляху `/devtools/...` (наприклад, [Browserless](https://browserless.io),
|
||||
[Browserbase](https://www.browserbase.com)). OpenClaw спочатку пробує виявлення через HTTP
|
||||
`/json/version` (нормалізуючи схему до `http`/`https`);
|
||||
[Browserbase](https://www.browserbase.com)). OpenClaw спочатку пробує HTTP
|
||||
виявлення через `/json/version` (нормалізуючи схему до `http`/`https`);
|
||||
якщо виявлення повертає `webSocketDebuggerUrl`, він використовується, інакше OpenClaw
|
||||
переходить до прямого рукостискання WebSocket на базовому корені. Це охоплює
|
||||
як віддалені порти налагодження в стилі Chrome, так і постачальників лише з WebSocket.
|
||||
переходить до прямого рукостискання WebSocket на корені без шляху. Це покриває
|
||||
як віддалені порти налагодження у стилі Chrome, так і провайдерів лише з WebSocket.
|
||||
|
||||
Звичайний `ws://host:port` / `wss://host:port` без шляху `/devtools/...`,
|
||||
спрямований на локальний екземпляр Chrome, підтримується через резервний механізм
|
||||
із пріоритетом виявлення — Chrome приймає оновлення до WebSocket лише на конкретному шляху
|
||||
для браузера або цілі, який повертає `/json/version`, тому лише рукостискання на базовому корені
|
||||
завершиться невдачею.
|
||||
Звичайні `ws://host:port` / `wss://host:port` без шляху `/devtools/...`,
|
||||
спрямовані на локальний екземпляр Chrome, підтримуються через резервну схему
|
||||
«спочатку виявлення» — Chrome приймає WebSocket upgrades лише на конкретному шляху
|
||||
для браузера або цілі, який повертає `/json/version`, тому одного лише рукостискання
|
||||
на корені без шляху буде недостатньо.
|
||||
|
||||
### Browserbase
|
||||
|
||||
[Browserbase](https://www.browserbase.com) — це хмарна платформа для запуску
|
||||
браузерів у режимі headless із вбудованим розв’язанням CAPTCHA, stealth mode та резидентними
|
||||
headless-браузерів із вбудованим розв’язанням CAPTCHA, stealth mode та резидентними
|
||||
проксі.
|
||||
|
||||
```json5
|
||||
@ -373,51 +374,51 @@ URL підключення CDP через HTTPS і WebSocket. OpenClaw може
|
||||
|
||||
- [Зареєструйтеся](https://www.browserbase.com/sign-up) і скопіюйте свій **API Key**
|
||||
з [панелі Overview](https://www.browserbase.com/overview).
|
||||
- Замініть `<BROWSERBASE_API_KEY>` на ваш справжній API-ключ Browserbase.
|
||||
- Замініть `<BROWSERBASE_API_KEY>` на ваш справжній API key Browserbase.
|
||||
- Browserbase автоматично створює сесію браузера під час підключення WebSocket, тому
|
||||
окремий ручний етап створення сесії не потрібен.
|
||||
- Безкоштовний тариф дозволяє одну одночасну сесію та одну годину браузера на місяць.
|
||||
Ліміти платних планів дивіться в [pricing](https://www.browserbase.com/pricing).
|
||||
- Дивіться [документацію Browserbase](https://docs.browserbase.com) для повного
|
||||
довідника API, посібників з SDK та прикладів інтеграції.
|
||||
ручний етап створення сесії не потрібен.
|
||||
- Безкоштовний рівень дозволяє одну одночасну сесію та одну браузерну годину на місяць.
|
||||
Обмеження платних планів дивіться в [pricing](https://www.browserbase.com/pricing).
|
||||
- Повний довідник API,
|
||||
посібники з SDK та приклади інтеграції дивіться в [документації Browserbase](https://docs.browserbase.com).
|
||||
|
||||
## Безпека
|
||||
|
||||
Ключові ідеї:
|
||||
|
||||
- Керування браузером доступне лише через loopback; доступ проходить через автентифікацію Gateway або спарювання вузлів.
|
||||
- Автономний loopback HTTP API браузера використовує **лише автентифікацію через спільний секрет**:
|
||||
bearer-автентифікацію за токеном gateway, `x-openclaw-password` або HTTP Basic auth із
|
||||
- Керування браузером доступне лише через loopback; доступ проходить через автентифікацію Gateway або pairинг node.
|
||||
- Окремий loopback HTTP API браузера використовує **лише автентифікацію через shared secret**:
|
||||
bearer auth із токеном gateway, `x-openclaw-password` або HTTP Basic auth із
|
||||
налаштованим паролем gateway.
|
||||
- Заголовки ідентичності Tailscale Serve та `gateway.auth.mode: "trusted-proxy"`
|
||||
**не** автентифікують цей автономний loopback API браузера.
|
||||
- Якщо керування браузером увімкнено й не налаштовано жодної автентифікації через спільний секрет, OpenClaw
|
||||
- Заголовки ідентичності Tailscale Serve і `gateway.auth.mode: "trusted-proxy"`
|
||||
**не** автентифікують цей окремий loopback API браузера.
|
||||
- Якщо керування браузером увімкнено й не налаштовано жодної shared-secret автентифікації, OpenClaw
|
||||
автоматично генерує `gateway.auth.token` під час запуску та зберігає його в конфігурації.
|
||||
- OpenClaw **не** генерує цей токен автоматично, якщо `gateway.auth.mode` уже має значення
|
||||
`password`, `none` або `trusted-proxy`.
|
||||
- Тримайте Gateway та будь-які вузли-хости в приватній мережі (Tailscale); уникайте публічного доступу.
|
||||
- Ставтеся до віддалених URL/tокенів CDP як до секретів; надавайте перевагу змінним середовища або менеджеру секретів.
|
||||
- Тримайте Gateway і будь-які хости node у приватній мережі (Tailscale); уникайте публічної доступності.
|
||||
- Ставтеся до URL/токенів віддаленого CDP як до секретів; надавайте перевагу змінним середовища або менеджеру секретів.
|
||||
|
||||
Поради щодо віддаленого CDP:
|
||||
|
||||
- За можливості надавайте перевагу зашифрованим кінцевим точкам (HTTPS або WSS) і токенам із коротким строком життя.
|
||||
- За можливості використовуйте зашифровані кінцеві точки (HTTPS або WSS) і короткоживучі токени.
|
||||
- Уникайте вбудовування довгоживучих токенів безпосередньо у файли конфігурації.
|
||||
|
||||
## Профілі (кілька браузерів)
|
||||
|
||||
OpenClaw підтримує кілька іменованих профілів (конфігурацій маршрутизації). Профілі можуть бути:
|
||||
|
||||
- **керовані openclaw**: окремий екземпляр браузера на базі Chromium із власним каталогом користувацьких даних та портом CDP
|
||||
- **віддалені**: явно заданий URL CDP (браузер на базі Chromium, що працює деінде)
|
||||
- **наявна сесія**: ваш наявний профіль Chrome через автоматичне підключення Chrome DevTools MCP
|
||||
- **openclaw-managed**: окремий екземпляр браузера на базі Chromium із власним каталогом користувацьких даних і портом CDP
|
||||
- **remote**: явний URL CDP (браузер на базі Chromium, запущений деінде)
|
||||
- **existing session**: ваш наявний профіль Chrome через автопідключення Chrome DevTools MCP
|
||||
|
||||
Типові значення:
|
||||
|
||||
- Профіль `openclaw` автоматично створюється, якщо відсутній.
|
||||
- Профіль `user` вбудований для підключення наявної сесії Chrome MCP.
|
||||
- Профілі existing-session, окрім `user`, є необов’язковими; створюйте їх за допомогою `--driver existing-session`.
|
||||
- Профіль `openclaw` створюється автоматично, якщо його немає.
|
||||
- Профіль `user` вбудований для existing-session підключення Chrome MCP.
|
||||
- Профілі existing-session, окрім `user`, є добровільними; створюйте їх за допомогою `--driver existing-session`.
|
||||
- Локальні порти CDP типово виділяються з діапазону **18800–18899**.
|
||||
- Видалення профілю переміщує його локальний каталог даних до Кошика.
|
||||
- Видалення профілю переміщує його локальний каталог даних до Trash.
|
||||
|
||||
Усі кінцеві точки керування приймають `?profile=<name>`; CLI використовує `--browser-profile`.
|
||||
|
||||
@ -427,21 +428,21 @@ OpenClaw також може підключатися до запущеного
|
||||
офіційний сервер Chrome DevTools MCP. Це повторно використовує вкладки та стан входу,
|
||||
які вже відкриті в цьому профілі браузера.
|
||||
|
||||
Офіційні довідкові матеріали та посилання з налаштування:
|
||||
Офіційні довідкові матеріали та інструкції з налаштування:
|
||||
|
||||
- [Chrome for Developers: Використання Chrome DevTools MCP із вашою сесією браузера](https://developer.chrome.com/blog/chrome-devtools-mcp-debug-your-browser-session)
|
||||
- [Chrome for Developers: Use Chrome DevTools MCP with your browser session](https://developer.chrome.com/blog/chrome-devtools-mcp-debug-your-browser-session)
|
||||
- [README Chrome DevTools MCP](https://github.com/ChromeDevTools/chrome-devtools-mcp)
|
||||
|
||||
Вбудований профіль:
|
||||
|
||||
- `user`
|
||||
|
||||
Необов’язково: створіть власний профіль existing-session, якщо вам потрібні
|
||||
Необов’язково: створіть власний custom existing-session профіль, якщо вам потрібні
|
||||
інша назва, колір або каталог даних браузера.
|
||||
|
||||
Типова поведінка:
|
||||
|
||||
- Вбудований профіль `user` використовує автоматичне підключення Chrome MCP, яке націлюється на
|
||||
- Вбудований профіль `user` використовує автопідключення Chrome MCP, яке спрямоване на
|
||||
типовий локальний профіль Google Chrome.
|
||||
|
||||
Використовуйте `userDataDir` для Brave, Edge, Chromium або нетипового профілю Chrome:
|
||||
@ -465,7 +466,7 @@ OpenClaw також може підключатися до запущеного
|
||||
|
||||
1. Відкрийте сторінку inspect цього браузера для віддаленого налагодження.
|
||||
2. Увімкніть віддалене налагодження.
|
||||
3. Залиште браузер запущеним і підтвердьте запит на підключення, коли OpenClaw під’єднається.
|
||||
3. Залиште браузер запущеним і підтвердьте запит на підключення, коли OpenClaw приєднається.
|
||||
|
||||
Поширені сторінки inspect:
|
||||
|
||||
@ -482,70 +483,69 @@ 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` повертає refs із вибраної live-вкладки
|
||||
- `tabs` перелічує вже відкриті у вас вкладки браузера
|
||||
- `snapshot` повертає refs із вибраної активної вкладки
|
||||
|
||||
Що перевірити, якщо підключення не працює:
|
||||
|
||||
- цільовий браузер на базі Chromium має версію `144+`
|
||||
- у сторінці inspect цього браузера ввімкнено віддалене налагодження
|
||||
- браузер показав запит на підключення, і ви його прийняли
|
||||
- `openclaw doctor` мігрує стару конфігурацію браузера на основі розширення та перевіряє, що
|
||||
Chrome встановлено локально для типових профілів автоматичного підключення, але він не може
|
||||
увімкнути віддалене налагодження в самому браузері за вас
|
||||
- на сторінці inspect цього браузера увімкнено віддалене налагодження
|
||||
- браузер показав запит на згоду на підключення, і ви його підтвердили
|
||||
- `openclaw doctor` переносить старий конфіг браузера на основі розширення та перевіряє, що
|
||||
Chrome встановлено локально для типових профілів автопідключення, але не може
|
||||
увімкнути віддалене налагодження на стороні браузера за вас
|
||||
|
||||
Використання агентом:
|
||||
|
||||
- Використовуйте `profile="user"`, коли вам потрібен стан браузера користувача з виконаним входом.
|
||||
- Якщо ви використовуєте власний профіль existing-session, передайте явну назву цього профілю.
|
||||
- Обирайте цей режим лише тоді, коли користувач перебуває за комп’ютером, щоб підтвердити
|
||||
- Якщо ви використовуєте custom existing-session профіль, передайте явну назву цього профілю.
|
||||
- Вибирайте цей режим лише тоді, коли користувач перебуває за комп’ютером, щоб підтвердити
|
||||
запит на підключення.
|
||||
- Gateway або вузол-хост можуть запускати `npx chrome-devtools-mcp@latest --autoConnect`
|
||||
- Gateway або хост node може запускати `npx chrome-devtools-mcp@latest --autoConnect`
|
||||
|
||||
Примітки:
|
||||
|
||||
- Цей шлях має вищий ризик, ніж ізольований профіль `openclaw`, оскільки він може
|
||||
виконувати дії у вашій сесії браузера, де вже виконано вхід.
|
||||
- Цей шлях є ризикованішим, ніж ізольований профіль `openclaw`, оскільки він може
|
||||
діяти всередині вашої сесії браузера, у якій виконано вхід.
|
||||
- OpenClaw не запускає браузер для цього драйвера; він підключається лише до
|
||||
наявної сесії.
|
||||
- Тут OpenClaw використовує офіційний потік Chrome DevTools MCP `--autoConnect`. Якщо
|
||||
встановлено `userDataDir`, OpenClaw передає його далі, щоб націлитися на цей явний
|
||||
каталог користувацьких даних Chromium.
|
||||
- Скриншоти existing-session підтримують захоплення сторінки та захоплення елементів через `--ref`
|
||||
зі знімків, але не CSS-селектори `--element`.
|
||||
- Скриншоти сторінок existing-session працюють без Playwright через Chrome MCP.
|
||||
Скриншоти елементів за ref (`--ref`) також працюють там, але `--full-page`
|
||||
- Скріншоти existing-session підтримують знімки сторінки та знімки елементів через `--ref`
|
||||
зі snapshot, але не CSS-селектори `--element`.
|
||||
- Скріншоти сторінок existing-session працюють без Playwright через Chrome MCP.
|
||||
Скріншоти елементів за ref (`--ref`) там також працюють, але `--full-page`
|
||||
не можна поєднувати з `--ref` або `--element`.
|
||||
- Дії existing-session усе ще більш обмежені, ніж у режимі
|
||||
керованого браузера:
|
||||
- Дії existing-session усе ще більш обмежені, ніж у режимі керованого браузера:
|
||||
- `click`, `type`, `hover`, `scrollIntoView`, `drag` і `select` потребують
|
||||
snapshot refs замість CSS-селекторів
|
||||
- `click` підтримує лише ліву кнопку (без перевизначення кнопки чи модифікаторів)
|
||||
- `click` підтримує лише ліву кнопку миші (без перевизначення кнопки або модифікаторів)
|
||||
- `type` не підтримує `slowly=true`; використовуйте `fill` або `press`
|
||||
- `press` не підтримує `delayMs`
|
||||
- `hover`, `scrollIntoView`, `drag`, `select`, `fill` і `evaluate` не
|
||||
підтримують перевизначення тайм-ауту для окремого виклику
|
||||
підтримують перевизначення timeout для окремого виклику
|
||||
- `select` наразі підтримує лише одне значення
|
||||
- Existing-session `wait --url` підтримує точні, підрядкові та glob-шаблони
|
||||
так само, як і інші драйвери браузера. `wait --load networkidle` поки не підтримується.
|
||||
- Хуки вивантаження в existing-session потребують `ref` або `inputRef`, підтримують по одному файлу за раз і не підтримують націлювання на CSS `element`.
|
||||
- Хуки діалогів existing-session не підтримують перевизначення тайм-ауту.
|
||||
- Деякі можливості все ще потребують керованого шляху браузера, зокрема пакетні
|
||||
- Existing-session `wait --url` підтримує точні, часткові та glob-шаблони,
|
||||
як і інші драйвери браузера. `wait --load networkidle` поки не підтримується.
|
||||
- Хуки завантаження файлів existing-session вимагають `ref` або `inputRef`, підтримують по одному файлу за раз і не підтримують націлювання через CSS `element`.
|
||||
- Хуки діалогів existing-session не підтримують перевизначення timeout.
|
||||
- Деякі можливості все ще потребують режиму керованого браузера, зокрема пакетні
|
||||
дії, експорт PDF, перехоплення завантажень і `responsebody`.
|
||||
- Existing-session може підключатися на вибраному хості або через підключений
|
||||
вузол браузера. Якщо Chrome розташований деінде й вузол браузера не підключений, використовуйте
|
||||
віддалений CDP або вузол-хост.
|
||||
browser node. Якщо Chrome працює деінде й browser node не підключено, використовуйте
|
||||
віддалений CDP або хост node.
|
||||
|
||||
## Гарантії ізоляції
|
||||
|
||||
- **Окремий каталог користувацьких даних**: ніколи не торкається вашого особистого профілю браузера.
|
||||
- **Окремі порти**: уникає `9222`, щоб запобігти конфліктам із робочими процесами розробки.
|
||||
- **Детерміноване керування вкладками**: націлення на вкладки за `targetId`, а не за принципом “остання вкладка”.
|
||||
- **Окремий каталог користувацьких даних**: ніколи не торкається профілю вашого особистого браузера.
|
||||
- **Окремі порти**: уникає `9222`, щоб не створювати конфліктів із робочими процесами розробки.
|
||||
- **Детерміноване керування вкладками**: націлювання на вкладки за `targetId`, а не за принципом «остання вкладка».
|
||||
|
||||
## Вибір браузера
|
||||
|
||||
@ -561,19 +561,19 @@ 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: перевіряються типові місця встановлення.
|
||||
|
||||
## API керування (необов’язково)
|
||||
|
||||
Лише для локальних інтеграцій Gateway надає невеликий loopback HTTP API:
|
||||
|
||||
- Стан/запуск/зупинка: `GET /`, `POST /start`, `POST /stop`
|
||||
- Status/start/stop: `GET /`, `POST /start`, `POST /stop`
|
||||
- Вкладки: `GET /tabs`, `POST /tabs/open`, `POST /tabs/focus`, `DELETE /tabs/:targetId`
|
||||
- Знімок/скриншот: `GET /snapshot`, `POST /screenshot`
|
||||
- Snapshot/screenshot: `GET /snapshot`, `POST /screenshot`
|
||||
- Дії: `POST /navigate`, `POST /act`
|
||||
- Хуки: `POST /hooks/file-chooser`, `POST /hooks/dialog`
|
||||
- Hooks: `POST /hooks/file-chooser`, `POST /hooks/dialog`
|
||||
- Завантаження: `POST /download`, `POST /wait/download`
|
||||
- Налагодження: `GET /console`, `POST /pdf`
|
||||
- Налагодження: `GET /errors`, `GET /requests`, `POST /trace/start`, `POST /trace/stop`, `POST /highlight`
|
||||
@ -584,21 +584,21 @@ openclaw browser --browser-profile user snapshot --format ai
|
||||
|
||||
Усі кінцеві точки приймають `?profile=<name>`.
|
||||
|
||||
Якщо налаштовано автентифікацію gateway через спільний секрет, HTTP-маршрути браузера також потребують автентифікації:
|
||||
Якщо налаштовано shared-secret автентифікацію gateway, маршрути HTTP браузера також вимагають автентифікації:
|
||||
|
||||
- `Authorization: Bearer <gateway token>`
|
||||
- `x-openclaw-password: <gateway password>` або HTTP Basic auth із цим паролем
|
||||
|
||||
Примітки:
|
||||
|
||||
- Цей автономний loopback API браузера **не** використовує trusted-proxy або
|
||||
- Цей окремий loopback API браузера **не** використовує trusted-proxy або
|
||||
заголовки ідентичності Tailscale Serve.
|
||||
- Якщо `gateway.auth.mode` має значення `none` або `trusted-proxy`, ці loopback-маршрути браузера
|
||||
не успадковують ці режими з перенесенням ідентичності; тримайте їх доступними лише через loopback.
|
||||
не успадковують режими з передаванням ідентичності; залишайте їх доступними лише через loopback.
|
||||
|
||||
### Контракт помилок `/act`
|
||||
|
||||
`POST /act` використовує структуровану відповідь помилки для валідації на рівні маршруту та
|
||||
`POST /act` використовує структуровану відповідь про помилку для валідації на рівні маршруту та
|
||||
збоїв політики:
|
||||
|
||||
```json
|
||||
@ -608,13 +608,13 @@ openclaw browser --browser-profile user snapshot --format ai
|
||||
Поточні значення `code`:
|
||||
|
||||
- `ACT_KIND_REQUIRED` (HTTP 400): `kind` відсутній або не розпізнаний.
|
||||
- `ACT_INVALID_REQUEST` (HTTP 400): payload дії не пройшов нормалізацію або валідацію.
|
||||
- `ACT_SELECTOR_UNSUPPORTED` (HTTP 400): `selector` використано з непідтримуваним типом дії.
|
||||
- `ACT_EVALUATE_DISABLED` (HTTP 403): `evaluate` (або `wait --fn`) вимкнено в конфігурації.
|
||||
- `ACT_TARGET_ID_MISMATCH` (HTTP 403): top-level `targetId` або `targetId` у пакеті конфліктує з ціллю запиту.
|
||||
- `ACT_INVALID_REQUEST` (HTTP 400): нормалізація або валідація payload дії не пройшла.
|
||||
- `ACT_SELECTOR_UNSUPPORTED` (HTTP 400): `selector` використано з непідтримуваним видом дії.
|
||||
- `ACT_EVALUATE_DISABLED` (HTTP 403): `evaluate` (або `wait --fn`) вимкнено конфігурацією.
|
||||
- `ACT_TARGET_ID_MISMATCH` (HTTP 403): верхньорівневий або пакетний `targetId` конфліктує з ціллю запиту.
|
||||
- `ACT_EXISTING_SESSION_UNSUPPORTED` (HTTP 501): дія не підтримується для профілів existing-session.
|
||||
|
||||
Інші збої runtime усе ще можуть повертати `{ "error": "<message>" }` без
|
||||
Інші збої під час виконання все ще можуть повертати `{ "error": "<message>" }` без
|
||||
поля `code`.
|
||||
|
||||
### Вимога Playwright
|
||||
@ -625,31 +625,32 @@ PDF) потребують Playwright. Якщо Playwright не встановл
|
||||
|
||||
Що все ще працює без Playwright:
|
||||
|
||||
- ARIA snapshots
|
||||
- Скриншоти сторінок для керованого браузера `openclaw`, коли для вкладки доступний CDP
|
||||
WebSocket
|
||||
- Скриншоти сторінок для профілів `existing-session` / Chrome MCP
|
||||
- Скриншоти existing-session на основі ref (`--ref`) з виводу snapshot
|
||||
- ARIA snapshot
|
||||
- Скриншоти сторінки для керованого браузера `openclaw`, коли доступний WebSocket
|
||||
CDP для окремої вкладки
|
||||
- Скриншоти сторінки для профілів `existing-session` / Chrome MCP
|
||||
- Скриншоти existing-session за ref (`--ref`) з виводу snapshot
|
||||
|
||||
Що все ще потребує Playwright:
|
||||
|
||||
- `navigate`
|
||||
- `act`
|
||||
- AI snapshots / role snapshots
|
||||
- AI snapshot / role snapshot
|
||||
- Скриншоти елементів за CSS-селектором (`--element`)
|
||||
- Повний експорт PDF браузера
|
||||
- повний експорт PDF браузера
|
||||
|
||||
Скриншоти елементів також відхиляють `--full-page`; маршрут повертає `fullPage is
|
||||
Скриншоти елементів також не приймають `--full-page`; маршрут повертає `fullPage is
|
||||
not supported for element screenshots`.
|
||||
|
||||
Якщо ви бачите `Playwright is not available in this gateway build`, установіть повний
|
||||
пакет Playwright (не `playwright-core`) і перезапустіть gateway або перевстановіть
|
||||
OpenClaw із підтримкою браузера.
|
||||
Якщо ви бачите `Playwright is not available in this gateway build`, відновіть залежності середовища виконання
|
||||
вбудованого Plugin браузера, щоб було встановлено `playwright-core`,
|
||||
а потім перезапустіть gateway. Для пакетних установок виконайте `openclaw doctor --fix`.
|
||||
Для Docker також установіть двійкові файли браузера Chromium, як показано нижче.
|
||||
|
||||
#### Установлення Playwright у Docker
|
||||
|
||||
Якщо ваш Gateway працює в Docker, уникайте `npx playwright` (конфлікти npm override).
|
||||
Замість цього використовуйте вбудований CLI:
|
||||
Натомість використовуйте вбудований CLI:
|
||||
|
||||
```bash
|
||||
docker compose run --rm openclaw-cli \
|
||||
@ -662,23 +663,23 @@ docker compose run --rm openclaw-cli \
|
||||
|
||||
## Як це працює (внутрішньо)
|
||||
|
||||
Потік високого рівня:
|
||||
Потік на високому рівні:
|
||||
|
||||
- Невеликий **сервер керування** приймає HTTP-запити.
|
||||
- Він підключається до браузерів на базі Chromium (Chrome/Brave/Edge/Chromium) через **CDP**.
|
||||
- Для розширених дій (click/type/snapshot/PDF) він використовує **Playwright** поверх
|
||||
CDP.
|
||||
- Коли Playwright відсутній, доступні лише операції без Playwright.
|
||||
- Якщо Playwright відсутній, доступні лише операції без Playwright.
|
||||
|
||||
Ця архітектура забезпечує для агента стабільний, детермінований інтерфейс, водночас дозволяючи
|
||||
вам замінювати локальні/віддалені браузери та профілі.
|
||||
Такий дизайн зберігає для агента стабільний, детермінований інтерфейс і водночас дає
|
||||
змогу змінювати локальні/віддалені браузери та профілі.
|
||||
|
||||
## Короткий довідник CLI
|
||||
## Швидкий довідник CLI
|
||||
|
||||
Усі команди приймають `--browser-profile <name>` для націлення на конкретний профіль.
|
||||
Усі команди також приймають `--json` для машинозчитуваного виводу (стабільні payload).
|
||||
Усі команди приймають `--browser-profile <name>` для націлювання на конкретний профіль.
|
||||
Усі команди також приймають `--json` для машиночитного виводу (стабільні payload).
|
||||
|
||||
Основи:
|
||||
Основне:
|
||||
|
||||
- `openclaw browser status`
|
||||
- `openclaw browser start`
|
||||
@ -707,11 +708,11 @@ docker compose run --rm openclaw-cli \
|
||||
- `openclaw browser snapshot --frame "iframe#main" --interactive`
|
||||
- `openclaw browser console --level error`
|
||||
|
||||
Примітка щодо життєвого циклу:
|
||||
Примітка про життєвий цикл:
|
||||
|
||||
- Для профілів лише з підключенням і віддаленим CDP `openclaw browser stop` усе ще є
|
||||
- Для профілів лише для підключення та профілів віддаленого CDP `openclaw browser stop` усе ще є
|
||||
правильною командою очищення після тестів. Вона закриває активну сесію керування та
|
||||
очищає тимчасові перевизначення емуляції замість завершення базового
|
||||
прибирає тимчасові перевизначення емуляції замість завершення базового
|
||||
браузера.
|
||||
- `openclaw browser errors --clear`
|
||||
- `openclaw browser requests --filter api --clear`
|
||||
@ -763,57 +764,57 @@ docker compose run --rm openclaw-cli \
|
||||
|
||||
Примітки:
|
||||
|
||||
- `upload` і `dialog` — це виклики **підготовки**; запускайте їх перед натисканням/клавішею,
|
||||
що викликає chooser/dialog.
|
||||
- Шляхи виводу для download і trace обмежені тимчасовими коренями OpenClaw:
|
||||
- `upload` і `dialog` — це виклики **підготовки**; запускайте їх перед click/press,
|
||||
що відкриває file chooser/діалог.
|
||||
- Шляхи виводу download і trace обмежені тимчасовими коренями OpenClaw:
|
||||
- traces: `/tmp/openclaw` (резервний варіант: `${os.tmpdir()}/openclaw`)
|
||||
- downloads: `/tmp/openclaw/downloads` (резервний варіант: `${os.tmpdir()}/openclaw/downloads`)
|
||||
- Шляхи upload обмежені тимчасовим коренем завантажень OpenClaw:
|
||||
- Шляхи upload обмежені тимчасовим коренем upload OpenClaw:
|
||||
- uploads: `/tmp/openclaw/uploads` (резервний варіант: `${os.tmpdir()}/openclaw/uploads`)
|
||||
- `upload` також може напряму встановлювати file input через `--input-ref` або `--element`.
|
||||
- `upload` також може безпосередньо задавати file input через `--input-ref` або `--element`.
|
||||
- `snapshot`:
|
||||
- `--format ai` (типово, коли встановлено Playwright): повертає AI snapshot із числовими refs (`aria-ref="<n>"`).
|
||||
- `--format aria`: повертає дерево доступності (без refs; лише для перевірки).
|
||||
- `--efficient` (або `--mode efficient`): компактний preset role snapshot (interactive + compact + depth + lower maxChars).
|
||||
- Типове значення конфігурації (лише tool/CLI): установіть `browser.snapshotDefaults.mode: "efficient"`, щоб використовувати efficient snapshots, коли викликач не передає режим (див. [Конфігурація Gateway](/uk/gateway/configuration-reference#browser)).
|
||||
- Параметри role snapshot (`--interactive`, `--compact`, `--depth`, `--selector`) примусово вмикають snapshot на основі ролей із refs на кшталт `ref=e12`.
|
||||
- `--frame "<iframe selector>"` обмежує role snapshots цим iframe (поєднується з role refs на кшталт `e12`).
|
||||
- `--interactive` виводить плаский, зручний для вибору список інтерактивних елементів (найкраще для керування діями).
|
||||
- `--labels` додає скриншот лише viewport із накладеними мітками ref (виводить `MEDIA:<path>`).
|
||||
- `--efficient` (або `--mode efficient`): компактний preset role snapshot (interactive + compact + depth + нижчий maxChars).
|
||||
- Типове значення конфігурації (лише tool/CLI): установіть `browser.snapshotDefaults.mode: "efficient"`, щоб використовувати efficient snapshot, коли викликач не передає режим (див. [Конфігурація Gateway](/uk/gateway/configuration-reference#browser)).
|
||||
- Параметри role snapshot (`--interactive`, `--compact`, `--depth`, `--selector`) примусово вмикають snapshot на основі ролей із refs на зразок `ref=e12`.
|
||||
- `--frame "<iframe selector>"` обмежує role snapshot конкретним iframe (поєднується з role refs на зразок `e12`).
|
||||
- `--interactive` виводить плоский, зручний для вибору список інтерактивних елементів (найкраще для запуску дій).
|
||||
- `--labels` додає скриншот лише області перегляду з накладеними мітками ref (виводить `MEDIA:<path>`).
|
||||
- `click`/`type`/тощо потребують `ref` зі `snapshot` (або числовий `12`, або role ref `e12`).
|
||||
CSS-селектори навмисно не підтримуються для дій.
|
||||
|
||||
## Snapshots і refs
|
||||
## Snapshot і refs
|
||||
|
||||
OpenClaw підтримує два стилі “snapshot”:
|
||||
|
||||
- **AI snapshot (числові refs)**: `openclaw browser snapshot` (типово; `--format ai`)
|
||||
- Вивід: текстовий snapshot, що містить числові refs.
|
||||
- Вивід: текстовий snapshot, який містить числові refs.
|
||||
- Дії: `openclaw browser click 12`, `openclaw browser type 23 "hello"`.
|
||||
- Внутрішньо ref визначається через `aria-ref` Playwright.
|
||||
|
||||
- **Role snapshot (role refs на кшталт `e12`)**: `openclaw browser snapshot --interactive` (або `--compact`, `--depth`, `--selector`, `--frame`)
|
||||
- **Role snapshot (role refs на зразок `e12`)**: `openclaw browser snapshot --interactive` (або `--compact`, `--depth`, `--selector`, `--frame`)
|
||||
- Вивід: список/дерево на основі ролей із `[ref=e12]` (і необов’язково `[nth=1]`).
|
||||
- Дії: `openclaw browser click e12`, `openclaw browser highlight e12`.
|
||||
- Внутрішньо ref визначається через `getByRole(...)` (плюс `nth()` для дублікатів).
|
||||
- Додайте `--labels`, щоб включити скриншот viewport із накладеними мітками `e12`.
|
||||
- Додайте `--labels`, щоб включити скриншот області перегляду з накладеними мітками `e12`.
|
||||
|
||||
Поведінка ref:
|
||||
|
||||
- Refs **не є стабільними між навігаціями**; якщо щось не спрацювало, повторно виконайте `snapshot` і використайте свіжий ref.
|
||||
- Refs **не є стабільними між навігаціями**; якщо щось не спрацювало, повторно запустіть `snapshot` і використайте новий ref.
|
||||
- Якщо role snapshot було зроблено з `--frame`, role refs обмежуються цим iframe до наступного role snapshot.
|
||||
|
||||
## Розширені можливості wait
|
||||
## Додаткові можливості wait
|
||||
|
||||
Можна чекати не лише час/текст:
|
||||
Ви можете чекати не лише час/текст:
|
||||
|
||||
- Очікування URL (підтримуються glob Playwright):
|
||||
- Очікування URL (glob підтримуються Playwright):
|
||||
- `openclaw browser wait --url "**/dash"`
|
||||
- Очікування стану завантаження:
|
||||
- `openclaw browser wait --load networkidle`
|
||||
- Очікування JS-предиката:
|
||||
- `openclaw browser wait --fn "window.ready===true"`
|
||||
- Очікування, поки селектор стане видимим:
|
||||
- Очікування, доки селектор стане видимим:
|
||||
- `openclaw browser wait "#main"`
|
||||
|
||||
Їх можна поєднувати:
|
||||
@ -828,11 +829,11 @@ openclaw browser wait "#main" \
|
||||
|
||||
## Робочі процеси налагодження
|
||||
|
||||
Коли дія завершується невдачею (наприклад, “not visible”, “strict mode violation”, “covered”):
|
||||
Коли дія не вдається (наприклад, “not visible”, “strict mode violation”, “covered”):
|
||||
|
||||
1. `openclaw browser snapshot --interactive`
|
||||
2. Використовуйте `click <ref>` / `type <ref>` (у interactive mode надавайте перевагу role refs)
|
||||
3. Якщо все ще не працює: `openclaw browser highlight <ref>`, щоб побачити, на що саме націлюється Playwright
|
||||
2. Використовуйте `click <ref>` / `type <ref>` (у режимі interactive надавайте перевагу role refs)
|
||||
3. Якщо все одно не працює: `openclaw browser highlight <ref>`, щоб побачити, на що саме націлюється Playwright
|
||||
4. Якщо сторінка поводиться дивно:
|
||||
- `openclaw browser errors --clear`
|
||||
- `openclaw browser requests --filter api --clear`
|
||||
@ -843,7 +844,7 @@ openclaw browser wait "#main" \
|
||||
|
||||
## Вивід JSON
|
||||
|
||||
`--json` призначений для скриптів і структурованих інструментів.
|
||||
`--json` призначений для сценаріїв і структурованих інструментів.
|
||||
|
||||
Приклади:
|
||||
|
||||
@ -854,35 +855,35 @@ openclaw browser requests --filter api --json
|
||||
openclaw browser cookies --json
|
||||
```
|
||||
|
||||
Role snapshots у JSON містять `refs` плюс невеликий блок `stats` (lines/chars/refs/interactive), щоб інструменти могли оцінювати розмір і щільність payload.
|
||||
Role snapshot у JSON включають `refs` плюс невеликий блок `stats` (lines/chars/refs/interactive), щоб інструменти могли оцінювати розмір і щільність payload.
|
||||
|
||||
## Перемикачі стану та середовища
|
||||
## Параметри стану та середовища
|
||||
|
||||
Вони корисні для робочих процесів “змусити сайт поводитися як X”:
|
||||
Вони корисні для сценаріїв «змусити сайт поводитися як X»:
|
||||
|
||||
- Cookies: `cookies`, `cookies set`, `cookies clear`
|
||||
- Storage: `storage local|session get|set|clear`
|
||||
- Offline: `set offline on|off`
|
||||
- Headers: `set headers --headers-json '{"X-Debug":"1"}'` (застарілий `set headers --json '{"X-Debug":"1"}'` усе ще підтримується)
|
||||
- Headers: `set headers --headers-json '{"X-Debug":"1"}'` (застарілий варіант `set headers --json '{"X-Debug":"1"}'` усе ще підтримується)
|
||||
- HTTP basic auth: `set credentials user pass` (або `--clear`)
|
||||
- Geolocation: `set geo <lat> <lon> --origin "https://example.com"` (або `--clear`)
|
||||
- Геолокація: `set geo <lat> <lon> --origin "https://example.com"` (або `--clear`)
|
||||
- Media: `set media dark|light|no-preference|none`
|
||||
- Timezone / locale: `set timezone ...`, `set locale ...`
|
||||
- Device / viewport:
|
||||
- `set device "iPhone 14"` (Playwright device presets)
|
||||
- Часовий пояс / локаль: `set timezone ...`, `set locale ...`
|
||||
- Пристрій / область перегляду:
|
||||
- `set device "iPhone 14"` (preset пристроїв Playwright)
|
||||
- `set viewport 1280 720`
|
||||
|
||||
## Безпека й приватність
|
||||
|
||||
- Профіль браузера openclaw може містити сесії з виконаним входом; ставтеся до нього як до чутливого.
|
||||
- Профіль браузера openclaw може містити сесії з виконаним входом; вважайте його чутливим.
|
||||
- `browser act kind=evaluate` / `openclaw browser evaluate` і `wait --fn`
|
||||
виконують довільний JavaScript у контексті сторінки. Prompt injection може
|
||||
впливати на це. Вимкніть це через `browser.evaluateEnabled=false`, якщо воно вам не потрібне.
|
||||
- Для входу та приміток щодо anti-bot (X/Twitter тощо) див. [Вхід у браузер + публікація в X/Twitter](/uk/tools/browser-login).
|
||||
- Тримайте Gateway/вузол-хост приватними (лише loopback або tailnet).
|
||||
- Віддалені кінцеві точки CDP дуже потужні; тунелюйте й захищайте їх.
|
||||
спрямувати це. Вимкніть через `browser.evaluateEnabled=false`, якщо вам це не потрібно.
|
||||
- Для входів у систему та приміток щодо anti-bot (X/Twitter тощо) див. [Вхід у браузері + публікація в X/Twitter](/uk/tools/browser-login).
|
||||
- Тримайте Gateway/хост node приватним (лише loopback або tailnet).
|
||||
- Кінцеві точки віддаленого CDP мають широкі можливості; тунелюйте й захищайте їх.
|
||||
|
||||
Приклад strict-mode (типово блокує приватні/внутрішні адреси призначення):
|
||||
Приклад strict mode (типово блокує приватні/внутрішні призначення):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -890,36 +891,36 @@ Role snapshots у JSON містять `refs` плюс невеликий бло
|
||||
ssrfPolicy: {
|
||||
dangerouslyAllowPrivateNetwork: false,
|
||||
hostnameAllowlist: ["*.example.com", "example.com"],
|
||||
allowedHostnames: ["localhost"], // необов’язковий точний дозвіл
|
||||
allowedHostnames: ["localhost"], // optional exact allow
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
## Усунення несправностей
|
||||
## Усунення проблем
|
||||
|
||||
Для проблем, специфічних для Linux (особливо snap Chromium), див.
|
||||
[Усунення несправностей браузера](/uk/tools/browser-linux-troubleshooting).
|
||||
[Усунення проблем браузера](/uk/tools/browser-linux-troubleshooting).
|
||||
|
||||
Для конфігурацій із розділеними хостами WSL2 Gateway + Windows Chrome див.
|
||||
[WSL2 + Windows + усунення несправностей віддаленого Chrome CDP](/uk/tools/browser-wsl2-windows-remote-cdp-troubleshooting).
|
||||
[Усунення проблем 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` усе ще працюють
|
||||
- Блокування SSRF під час навігації:
|
||||
- потоки `open`, `navigate`, snapshot або відкриття вкладок завершуються помилкою політики браузера/мережі, тоді як `start` і `tabs` усе ще працюють
|
||||
|
||||
Використовуйте цю мінімальну послідовність, щоб відокремити одне від іншого:
|
||||
Використайте цю мінімальну послідовність, щоб розрізнити ці два випадки:
|
||||
|
||||
```bash
|
||||
openclaw browser --browser-profile openclaw start
|
||||
@ -929,37 +930,37 @@ openclaw browser --browser-profile openclaw open https://example.com
|
||||
|
||||
Як читати результати:
|
||||
|
||||
- Якщо `start` завершується з помилкою `not reachable after start`, спочатку усувайте проблему готовності CDP.
|
||||
- Якщо `start` успішний, але `tabs` завершується невдачею, площина керування все ще несправна. Розглядайте це як проблему доступності CDP, а не проблему навігації сторінкою.
|
||||
- Якщо `start` і `tabs` успішні, але `open` або `navigate` завершуються невдачею, площина керування браузером працює, а проблема — у політиці навігації або цільовій сторінці.
|
||||
- Якщо `start`, `tabs` і `open` усі успішні, базовий шлях керування керованим браузером є справним.
|
||||
- Якщо `start` завершується помилкою `not reachable after start`, спершу усувайте проблему готовності CDP.
|
||||
- Якщо `start` успішний, але `tabs` завершується помилкою, площина керування все ще несправна. Розглядайте це як проблему доступності CDP, а не проблему навігації сторінкою.
|
||||
- Якщо `start` і `tabs` успішні, але `open` або `navigate` завершується помилкою, площина керування браузером працює, а збій пов’язаний із політикою навігації або цільовою сторінкою.
|
||||
- Якщо `start`, `tabs` і `open` усі успішні, базовий шлях керування керованим браузером справний.
|
||||
|
||||
Важливі деталі поведінки:
|
||||
|
||||
- Конфігурація браузера типово використовує fail-closed об’єкт політики SSRF, навіть якщо ви не налаштовуєте `browser.ssrfPolicy`.
|
||||
- Для локального керованого профілю loopback `openclaw` перевірки справності CDP навмисно пропускають перевірку доступності SSRF браузера для власної локальної площини керування OpenClaw.
|
||||
- Конфіг браузера типово використовує fail-closed об’єкт політики SSRF, навіть якщо ви не налаштовуєте `browser.ssrfPolicy`.
|
||||
- Для локального керованого профілю loopback `openclaw` перевірки справності CDP навмисно пропускають застосування політики доступності SSRF браузера для власної локальної площини керування OpenClaw.
|
||||
- Захист навігації є окремим. Успішний результат `start` або `tabs` не означає, що пізніша ціль `open` або `navigate` буде дозволена.
|
||||
|
||||
Рекомендації з безпеки:
|
||||
|
||||
- **Не** послаблюйте політику SSRF браузера типово.
|
||||
- Надавайте перевагу вузьким виняткам для хостів, таким як `hostnameAllowlist` або `allowedHostnames`, замість широкого доступу до приватної мережі.
|
||||
- **Не** послаблюйте політику SSRF браузера за замовчуванням.
|
||||
- Віддавайте перевагу вузьким виняткам для хостів, таким як `hostnameAllowlist` або `allowedHostnames`, замість широкого доступу до приватної мережі.
|
||||
- Використовуйте `dangerouslyAllowPrivateNetwork: true` лише в навмисно довірених середовищах, де доступ браузера до приватної мережі потрібен і перевірений.
|
||||
|
||||
Приклад: навігацію заблоковано, площина керування справна
|
||||
|
||||
- `start` успішний
|
||||
- `tabs` успішний
|
||||
- `open http://internal.example` завершується невдачею
|
||||
- `open http://internal.example` завершується помилкою
|
||||
|
||||
Зазвичай це означає, що запуск браузера справний, а ціль навігації потребує перегляду політики.
|
||||
Зазвичай це означає, що запуск браузера працює нормально, а ціль навігації потребує перегляду політики.
|
||||
|
||||
Приклад: запуск заблоковано до того, як навігація стає важливою
|
||||
|
||||
- `start` завершується з `not reachable after start`
|
||||
- `tabs` також завершується невдачею або не може виконатися
|
||||
- `start` завершується помилкою `not reachable after start`
|
||||
- `tabs` також завершується помилкою або не може бути виконаний
|
||||
|
||||
Це вказує на запуск браузера або доступність CDP, а не на проблему зі списком дозволених URL сторінок.
|
||||
Це вказує на запуск браузера або доступність CDP, а не на проблему списку дозволених URL сторінок.
|
||||
|
||||
## Інструменти агента + як працює керування
|
||||
|
||||
@ -971,18 +972,18 @@ openclaw browser --browser-profile openclaw open https://example.com
|
||||
|
||||
- `browser snapshot` повертає стабільне дерево UI (AI або ARIA).
|
||||
- `browser act` використовує ID `ref` зі snapshot для click/type/drag/select.
|
||||
- `browser screenshot` захоплює пікселі (усю сторінку або елемент).
|
||||
- `browser screenshot` захоплює пікселі (всю сторінку або елемент).
|
||||
- `browser` приймає:
|
||||
- `profile`, щоб вибрати іменований профіль браузера (openclaw, chrome або remote CDP).
|
||||
- `target` (`sandbox` | `host` | `node`), щоб вибрати, де розміщено браузер.
|
||||
- У sandbox-сесіях `target: "host"` потребує `agents.defaults.sandbox.browser.allowHostControl=true`.
|
||||
- Якщо `target` не вказано: sandbox-сесії типово використовують `sandbox`, сесії без sandbox — `host`.
|
||||
- Якщо підключено вузол із підтримкою браузера, інструмент може автоматично маршрутизуватися до нього, якщо ви не зафіксуєте `target="host"` або `target="node"`.
|
||||
- `profile` для вибору іменованого профілю браузера (openclaw, chrome або remote CDP).
|
||||
- `target` (`sandbox` | `host` | `node`) для вибору місця, де знаходиться браузер.
|
||||
- У sandbox-сесіях `target: "host"` вимагає `agents.defaults.sandbox.browser.allowHostControl=true`.
|
||||
- Якщо `target` не вказано: sandbox-сесії типово використовують `sandbox`, не-sandbox сесії — `host`.
|
||||
- Якщо підключено node з підтримкою браузера, інструмент може автоматично маршрутизуватися до нього, якщо ви явно не зафіксуєте `target="host"` або `target="node"`.
|
||||
|
||||
Це зберігає детермінованість агента й допомагає уникати крихких селекторів.
|
||||
Це зберігає детермінованість агента й дає змогу уникати крихких селекторів.
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Огляд інструментів](/uk/tools) — усі доступні інструменти агента
|
||||
- [Пісочниця](/uk/gateway/sandboxing) — керування браузером у середовищах sandbox
|
||||
- [Ізоляція sandbox](/uk/gateway/sandboxing) — керування браузером у sandbox-середовищах
|
||||
- [Безпека](/uk/gateway/security) — ризики керування браузером і посилення захисту
|
||||
|
||||
Loading…
Reference in New Issue
Block a user