Перейти до основного вмісту

Підтвердження exec

Підтвердження exec — це запобіжний механізм companion app / вузла-хоста для того, щоб дозволити sandbox-агенту запускати команди на реальному хості (gateway або node). Думайте про це як про запобіжне блокування: команди дозволяються лише тоді, коли політика + allowlist + (необов’язкове) підтвердження користувача збігаються. Підтвердження exec діють додатково до політики інструментів і elevated gating (якщо тільки elevated не встановлено в full, що пропускає підтвердження). Ефективна політика — це суворіше з tools.exec.* і типових значень підтверджень; якщо поле підтверджень пропущено, використовується значення tools.exec. Host exec також використовує локальний стан підтверджень на цій машині. Локальне для хоста ask: "always" у ~/.openclaw/exec-approvals.json продовжує показувати запити, навіть якщо типові значення сесії або конфігурації вимагають ask: "on-miss". Використовуйте openclaw approvals get, openclaw approvals get --gateway або openclaw approvals get --node <id|name|ip>, щоб переглянути запитану політику, джерела політики хоста та ефективний результат. Якщо UI companion app недоступний, будь-який запит, що потребує підтвердження, обробляється через ask fallback (типово: deny). Нативні клієнти підтвердження в чаті також можуть надавати прив’язаний до каналу інтерфейс у повідомленні з очікуванням підтвердження. Наприклад, Matrix може додати скорочення через реакції до запиту підтвердження ( дозволити один раз, відхилити та ♾️ дозволити завжди, якщо доступно), при цьому залишаючи команди /approve ... у повідомленні як резервний варіант.

Де це застосовується

Підтвердження exec застосовуються локально на хості виконання:
  • gateway host → процес openclaw на машині gateway
  • node host → runner вузла (companion app macOS або headless node host)
Примітка про модель довіри:
  • Виклики, автентифіковані gateway, вважаються довіреними операторами для цього Gateway.
  • Спарені вузли розширюють цю можливість довіреного оператора на host вузла.
  • Підтвердження exec знижують ризик випадкового виконання, але не є межею автентифікації на рівні користувача.
  • Схвалені запуски на host вузла прив’язують канонічний контекст виконання: канонічний cwd, точний argv, прив’язку env, якщо вона присутня, і зафіксований шлях до виконуваного файла, якщо застосовно.
  • Для shell-скриптів і прямих викликів файлів інтерпретатора/середовища виконання OpenClaw також намагається прив’язати один конкретний локальний файловий операнд. Якщо цей прив’язаний файл змінюється після підтвердження, але до виконання, запуск відхиляється замість виконання зміненого вмісту.
  • Ця прив’язка файла навмисно є best-effort, а не повною семантичною моделлю для кожного шляху завантажувача інтерпретатора/середовища виконання. Якщо режим підтвердження не може визначити рівно один конкретний локальний файл для прив’язки, він відмовляється створювати запуск на основі підтвердження замість того, щоб удавати повне покриття.
Поділ на macOS:
  • служба node host пересилає system.run до застосунку macOS через локальний IPC.
  • застосунок macOS застосовує підтвердження + виконує команду в контексті UI.

Налаштування та зберігання

Підтвердження зберігаються в локальному JSON-файлі на хості виконання: ~/.openclaw/exec-approvals.json Приклад схеми:
{
  "version": 1,
  "socket": {
    "path": "~/.openclaw/exec-approvals.sock",
    "token": "base64url-token"
  },
  "defaults": {
    "security": "deny",
    "ask": "on-miss",
    "askFallback": "deny",
    "autoAllowSkills": false
  },
  "agents": {
    "main": {
      "security": "allowlist",
      "ask": "on-miss",
      "askFallback": "deny",
      "autoAllowSkills": true,
      "allowlist": [
        {
          "id": "B0C8C0B3-2C2D-4F8A-9A3C-5A4B3C2D1E0F",
          "pattern": "~/Projects/**/bin/rg",
          "lastUsedAt": 1737150000000,
          "lastUsedCommand": "rg -n TODO",
          "lastResolvedPath": "/Users/user/Projects/.../bin/rg"
        }
      ]
    }
  }
}

Режим “YOLO” без підтверджень

Якщо ви хочете, щоб host exec працював без запитів на підтвердження, потрібно відкрити обидва шари політики:
  • запитана політика exec у конфігурації OpenClaw (tools.exec.*)
  • локальна політика підтверджень хоста в ~/.openclaw/exec-approvals.json
Тепер це типова поведінка хоста, якщо ви явно не зробите її суворішою:
  • tools.exec.security: full на gateway/node
  • tools.exec.ask: off
  • host askFallback: full
Важлива різниця:
  • tools.exec.host=auto вибирає, де виконується exec: у sandbox, якщо доступно, інакше на gateway.
  • YOLO визначає, як підтверджується host exec: security=full плюс ask=off.
  • У режимі YOLO OpenClaw не додає окремий евристичний бар’єр підтвердження для обфускації команд поверх налаштованої політики host exec.
  • auto не перетворює маршрутизацію на gateway на вільне перевизначення із сесії в sandbox. Запит host=node для окремого виклику дозволений із auto, а host=gateway дозволений із auto лише тоді, коли немає активного середовища виконання sandbox. Якщо вам потрібне стабільне типове значення без auto, задайте tools.exec.host або використовуйте /exec host=... явно.
Якщо ви хочете більш консервативне налаштування, поверніть будь-який шар до allowlist / on-miss або deny. Постійне налаштування для gateway host “ніколи не показувати запит”:
openclaw config set tools.exec.host gateway
openclaw config set tools.exec.security full
openclaw config set tools.exec.ask off
openclaw gateway restart
Потім налаштуйте файл підтверджень хоста відповідно:
openclaw approvals set --stdin <<'EOF'
{
  version: 1,
  defaults: {
    security: "full",
    ask: "off",
    askFallback: "full"
  }
}
EOF
Для host вузла застосуйте той самий файл підтверджень на цьому вузлі:
openclaw approvals set --node <id|name|ip> --stdin <<'EOF'
{
  version: 1,
  defaults: {
    security: "full",
    ask: "off",
    askFallback: "full"
  }
}
EOF
Скорочення лише для сесії:
  • /exec security=full ask=off змінює лише поточну сесію.
  • /elevated full — це break-glass скорочення, яке також пропускає підтвердження exec для цієї сесії.
Якщо файл підтверджень хоста залишається суворішим за конфігурацію, суворіша політика хоста все одно має пріоритет.

Параметри політики

Security (exec.security)

  • deny: блокувати всі запити host exec.
  • allowlist: дозволяти лише команди з allowlist.
  • full: дозволяти все (еквівалент elevated).

Ask (exec.ask)

  • off: ніколи не показувати запит.
  • on-miss: показувати запит лише тоді, коли allowlist не збігається.
  • always: показувати запит для кожної команди.
  • тривала довіра allow-always не пригнічує запити, коли ефективний режим ask дорівнює always

Ask fallback (askFallback)

Якщо потрібне підтвердження, але жоден UI недоступний, fallback визначає результат:
  • deny: блокувати.
  • allowlist: дозволяти лише за збігом allowlist.
  • full: дозволяти.

Посилення для inline interpreter eval (tools.exec.strictInlineEval)

Коли tools.exec.strictInlineEval=true, OpenClaw розглядає inline форми виконання коду як такі, що потребують лише підтвердження, навіть якщо сам бінарний файл інтерпретатора є в allowlist. Приклади:
  • python -c
  • node -e, node --eval, node -p
  • ruby -e
  • perl -e, perl -E
  • php -r
  • lua -e
  • osascript -e
Це захист у глибину для завантажувачів інтерпретаторів, які не можна чисто зіставити з одним стабільним файловим операндом. У строгому режимі:
  • ці команди все одно потребують явного підтвердження;
  • allow-always не зберігає для них нові записи allowlist автоматично.

Allowlist (для кожного агента)

Allowlist-и є для кожного агента окремо. Якщо агентів кілька, перемкніть агента, якого редагуєте, у застосунку macOS. Патерни — це glob-збіги без урахування регістру. Патерни мають вказувати на шляхи до бінарних файлів (записи лише з basename ігноруються). Застарілі записи agents.default мігрують у agents.main під час завантаження. Shell-ланцюжки на зразок echo ok && pwd усе одно вимагають, щоб кожен сегмент верхнього рівня задовольняв правила allowlist. Приклади:
  • ~/Projects/**/bin/peekaboo
  • ~/.local/bin/*
  • /opt/homebrew/bin/rg
Кожен запис allowlist відстежує:
  • id — стабільний UUID для ідентичності в UI (необов’язково)
  • last used timestamp
  • last used command
  • last resolved path

Автодозвіл CLI навичок

Коли увімкнено Auto-allow skill CLIs, виконувані файли, на які посилаються відомі Skills, вважаються такими, що входять в allowlist на вузлах (macOS node або headless node host). Для цього використовується skills.bins через Gateway RPC, щоб отримати список бінарних файлів навичок. Вимкніть це, якщо вам потрібні суворі ручні allowlist-и. Важливі примітки щодо довіри:
  • Це неявний зручний allowlist, окремий від ручних записів allowlist за шляхами.
  • Він призначений для середовищ довірених операторів, де Gateway і вузол перебувають у межах однієї моделі довіри.
  • Якщо вам потрібна сувора явна довіра, залиште autoAllowSkills: false і використовуйте лише ручні записи allowlist за шляхами.

Safe bins (лише stdin)

tools.exec.safeBins визначає невеликий список бінарних файлів лише для stdin (наприклад, cut), які можуть виконуватися в режимі allowlist без явних записів allowlist. Safe bins відхиляють позиційні файлові аргументи й токени, схожі на шляхи, тому можуть працювати лише з вхідним потоком. Розглядайте це як вузький швидкий шлях для потокових фільтрів, а не як загальний список довіри. Не додавайте бінарні файли інтерпретаторів або середовищ виконання (наприклад, python3, node, ruby, bash, sh, zsh) до safeBins. Якщо команда може виконувати код, запускати підкоманди або читати файли за своїм задумом, краще використовувати явні записи allowlist і залишити запити підтвердження увімкненими. Користувацькі safe bins мають визначати явний профіль у tools.exec.safeBinProfiles.<bin>. Перевірка детерміновано ґрунтується лише на формі argv (без перевірок існування файлів у файловій системі хоста), що запобігає поведінці oracle за існуванням файлів через різницю allow/deny. Орієнтовані на файли опції відхиляються для типових safe bins (наприклад, sort -o, sort --output, sort --files0-from, sort --compress-program, sort --random-source, sort --temporary-directory/-T, wc --files0-from, jq -f/--from-file, grep -f/--file). Safe bins також застосовують явну політику для прапорців кожного бінарного файла окремо для опцій, які порушують поведінку лише зі stdin (наприклад, sort -o/--output/--compress-program і рекурсивні прапорці grep). Довгі опції перевіряються fail-closed у режимі safe-bin: невідомі прапорці й неоднозначні скорочення відхиляються. Відхилені прапорці за профілем safe-bin:
  • grep: --dereference-recursive, --directories, --exclude-from, --file, --recursive, -R, -d, -f, -r
  • jq: --argfile, --from-file, --library-path, --rawfile, --slurpfile, -L, -f
  • sort: --compress-program, --files0-from, --output, --random-source, --temporary-directory, -T, -o
  • wc: --files0-from
Safe bins також примусово обробляють токени argv як буквальний текст під час виконання (без globbing і без розгортання $VARS) для сегментів лише зі stdin, тож шаблони на кшталт * або $HOME/... не можуть бути використані для прихованого читання файлів. Safe bins також мають розв’язуватися лише з довірених каталогів бінарних файлів (типові системні каталоги плюс необов’язкові tools.exec.safeBinTrustedDirs). Записи PATH ніколи не вважаються довіреними автоматично. Типові довірені каталоги safe-bin навмисно мінімальні: /bin, /usr/bin. Якщо ваш виконуваний файл safe-bin знаходиться у шляхах пакетного менеджера/користувача (наприклад /opt/homebrew/bin, /usr/local/bin, /opt/local/bin, /snap/bin), додайте їх явно до tools.exec.safeBinTrustedDirs. Shell chaining і redirection не дозволяються автоматично в режимі allowlist. Shell chaining (&&, ||, ;) дозволено, коли кожен сегмент верхнього рівня задовольняє allowlist (включно з safe bins або автодозволом навичок). Redirection залишається непідтримуваним у режимі allowlist. Підстановка команд ($() / backticks) відхиляється під час розбору allowlist, зокрема й усередині подвійних лапок; використовуйте одинарні лапки, якщо вам потрібен буквальний текст $(). У підтвердженнях companion app macOS сирий shell-текст, що містить синтаксис керування shell або розгортання (&&, ||, ;, |, `, $, <, >, (, )), вважається промахом allowlist, якщо сам бінарний файл shell не входить до allowlist. Для shell-обгорток (bash|sh|zsh ... -c/-lc) перевизначення env на рівні запиту зводяться до невеликого явного allowlist (TERM, LANG, LC_*, COLORTERM, NO_COLOR, FORCE_COLOR). Для рішень allow-always у режимі allowlist відомі dispatch-обгортки (env, nice, nohup, stdbuf, timeout) зберігають внутрішні шляхи виконуваних файлів, а не шляхи обгорток. Shell-мультиплексори (busybox, toybox) також розгортаються для shell-аплетів (sh, ash, тощо), тож зберігаються внутрішні виконувані файли, а не бінарні файли мультиплексора. Якщо обгортку або мультиплексор не можна безпечно розгорнути, жоден запис allowlist автоматично не зберігається. Якщо ви додаєте інтерпретатори на кшталт python3 або node в allowlist, краще встановити tools.exec.strictInlineEval=true, щоб inline eval усе одно потребував явного підтвердження. У строгому режимі allow-always усе ще може зберігати нешкідливі виклики інтерпретатора/скрипта, але носії inline-eval автоматично не зберігаються. Типові safe bins: cut, uniq, head, tail, tr, wc grep і sort не входять до типового списку. Якщо ви явно додаєте їх, залишайте явні записи allowlist для їхніх сценаріїв, не пов’язаних лише зі stdin. Для grep у режимі safe-bin задавайте патерн через -e/--regexp; позиційна форма патерна відхиляється, щоб файлові операнди не можна було приховати як неоднозначні позиційні аргументи.

Safe bins проти allowlist

Темаtools.exec.safeBinsAllowlist (exec-approvals.json)
МетаАвтодозвіл вузьких stdin-фільтрівЯвна довіра до конкретних виконуваних файлів
Тип збігуІм’я виконуваного файла + політика argv safe-binGlob-патерн шляху до розв’язаного виконуваного файла
Область аргументівОбмежена профілем safe-bin і правилами буквальних токенівЛише збіг шляху; за аргументи далі відповідаєте ви
Типові прикладиhead, tail, tr, wcjq, python3, node, ffmpeg, користувацькі CLI
Найкраще використанняНизькоризикові текстові перетворення в конвеєрахБудь-який інструмент із ширшою поведінкою або побічними ефектами
Розташування конфігурації:
  • safeBins надходить із конфігурації (tools.exec.safeBins або для агента agents.list[].tools.exec.safeBins).
  • safeBinTrustedDirs надходить із конфігурації (tools.exec.safeBinTrustedDirs або для агента agents.list[].tools.exec.safeBinTrustedDirs).
  • safeBinProfiles надходить із конфігурації (tools.exec.safeBinProfiles або для агента agents.list[].tools.exec.safeBinProfiles). Ключі профілів для агента перевизначають глобальні ключі.
  • записи allowlist зберігаються в локальному для хоста ~/.openclaw/exec-approvals.json у agents.<id>.allowlist (або через Control UI / openclaw approvals allowlist ...).
  • openclaw security audit попереджає через tools.exec.safe_bins_interpreter_unprofiled, коли бінарні файли інтерпретатора/середовища виконання з’являються в safeBins без явних профілів.
  • openclaw doctor --fix може згенерувати відсутні записи safeBinProfiles.<bin> як {} (після цього перегляньте їх і зробіть суворішими). Для бінарних файлів інтерпретатора/середовища виконання автоматичне створення не виконується.
Приклад користувацького профілю: OC_I18N_900004 Якщо ви явно додаєте jq до safeBins, OpenClaw усе одно відхиляє builtin env у режимі safe-bin, щоб jq -n env не міг вивантажити env хост-процесу без явного шляху allowlist або запиту на підтвердження.

Редагування в Control UI

Використовуйте картку Control UI → Nodes → Exec approvals, щоб редагувати типові значення, перевизначення для кожного агента й allowlist-и. Виберіть область (Defaults або агент), змініть політику, додайте/видаліть патерни allowlist, потім натисніть Save. UI показує метадані last used для кожного патерна, щоб ви могли підтримувати список у порядку. Перемикач цілі вибирає Gateway (локальні підтвердження) або Node. Вузли мають повідомляти про system.execApprovals.get/set (застосунок macOS або headless node host). Якщо вузол ще не повідомляє про підтвердження exec, відредагуйте його локальний ~/.openclaw/exec-approvals.json напряму. CLI: openclaw approvals підтримує редагування gateway або node (див. CLI підтверджень).

Потік підтвердження

Коли потрібен запит на підтвердження, gateway транслює exec.approval.requested клієнтам-операторам. Control UI та застосунок macOS обробляють це через exec.approval.resolve, після чого gateway пересилає схвалений запит до node host. Для host=node запити на підтвердження містять канонічне корисне навантаження systemRunPlan. Gateway використовує цей план як авторитетний контекст команди/cwd/сесії під час пересилання схвалених запитів system.run. Це важливо для затримки асинхронного підтвердження:
  • шлях exec вузла готує один канонічний план наперед
  • запис підтвердження зберігає цей план і його метадані прив’язки
  • після схвалення фінальний пересланий виклик system.run повторно використовує збережений план замість того, щоб довіряти пізнішим змінам виклику
  • якщо виклик змінює command, rawCommand, cwd, agentId або sessionKey після створення запиту на підтвердження, gateway відхиляє пересланий запуск через невідповідність підтвердженню

Команди інтерпретатора/середовища виконання

Запуски інтерпретатора/середовища виконання, що спираються на підтвердження, навмисно консервативні:
  • Точний контекст argv/cwd/env завжди прив’язується.
  • Форми прямого shell-скрипта та прямого runtime-файла прив’язуються до одного конкретного локального знімка файла на основі best-effort.
  • Поширені форми обгорток пакетних менеджерів, які все ще розв’язуються в один прямий локальний файл (наприклад pnpm exec, pnpm node, npm exec, npx), розгортаються перед прив’язкою.
  • Якщо OpenClaw не може визначити рівно один конкретний локальний файл для команди інтерпретатора/середовища виконання (наприклад, package scripts, eval-форми, ланцюжки завантажувачів, специфічні для runtime, або неоднозначні форми з кількома файлами), виконання на основі підтвердження відхиляється замість того, щоб заявляти семантичне покриття, якого воно не має.
  • Для таких сценаріїв краще використовувати sandbox, окрему межу host або явний довірений робочий процес allowlist/full, де оператор приймає ширшу семантику runtime.
Коли потрібні підтвердження, інструмент exec одразу повертає id підтвердження. Використовуйте цей id для співставлення з пізнішими системними подіями (Exec finished / Exec denied). Якщо рішення не надходить до закінчення тайм-ауту, запит вважається тайм-аутом підтвердження і відображається як причина відхилення.

Поведінка доставки followup

Після завершення схваленого асинхронного exec OpenClaw надсилає followup-хід agent у ту саму сесію.
  • Якщо існує дійсна зовнішня ціль доставки (канал доставки плюс ціль to), followup доставляється через цей канал.
  • У потоках лише webchat або внутрішніх сесіях без зовнішньої цілі followup залишається лише в сесії (deliver: false).
  • Якщо виклик явно вимагає суворої зовнішньої доставки, але жоден зовнішній канал не можна розв’язати, запит завершується помилкою INVALID_REQUEST.
  • Якщо ввімкнено bestEffortDeliver і жоден зовнішній канал не можна розв’язати, доставка знижується до режиму лише сесії замість помилки.
Діалог підтвердження містить:
  • команду + аргументи
  • cwd
  • id агента
  • розв’язаний шлях до виконуваного файла
  • метадані host + policy
Дії:
  • Allow once → виконати зараз
  • Always allow → додати до allowlist + виконати
  • Deny → заблокувати

Пересилання підтверджень у канали чату

Ви можете пересилати запити підтвердження exec у будь-який канал чату (включно з каналами plugin) і підтверджувати їх через /approve. Це використовує звичайний конвеєр вихідної доставки. Конфігурація: OC_I18N_900005 Відповідь у чаті: OC_I18N_900006 Команда /approve обробляє як підтвердження exec, так і підтвердження plugin. Якщо ID не збігається з очікуваним підтвердженням exec, вона автоматично перевіряє підтвердження plugin.

Пересилання підтверджень plugin

Пересилання підтверджень plugin використовує той самий конвеєр доставки, що й підтвердження exec, але має власну незалежну конфігурацію в approvals.plugin. Увімкнення або вимкнення одного не впливає на інше. OC_I18N_900007 Форма конфігурації ідентична approvals.exec: enabled, mode, agentFilter, sessionFilter і targets працюють так само. Канали, які підтримують спільні інтерактивні відповіді, показують ті самі кнопки підтвердження як для exec, так і для підтверджень plugin. Канали без спільного інтерактивного UI повертаються до звичайного тексту з інструкціями /approve.

Підтвердження в тому самому чаті на будь-якому каналі

Коли запит підтвердження exec або plugin походить із чату, який підтримує доставку, той самий чат тепер може підтвердити його через /approve типово. Це стосується таких каналів, як Slack, Matrix і Microsoft Teams, на додачу до наявних потоків через Web UI і terminal UI. Цей спільний шлях через текстову команду використовує звичайну модель автентифікації каналу для цієї розмови. Якщо початковий чат уже може надсилати команди й отримувати відповіді, запитам підтвердження більше не потрібен окремий нативний адаптер доставки лише для того, щоб залишатися в очікуванні. Discord і Telegram також підтримують /approve у тому самому чаті, але ці канали все одно використовують свій розв’язаний список схвалювачів для авторизації, навіть коли нативну доставку підтверджень вимкнено. Для Telegram та інших нативних клієнтів підтвердження, які викликають Gateway напряму, цей fallback навмисно обмежений помилками типу “approval not found”. Реальне відхилення/помилка підтвердження exec не повторюється мовчки як підтвердження plugin.

Нативна доставка підтверджень

Деякі канали також можуть працювати як нативні клієнти підтвердження. Нативні клієнти додають DM схвалювачам, fanout до початкового чату та прив’язаний до каналу інтерактивний UX підтвердження поверх спільного потоку /approve в тому самому чаті. Коли доступні нативні картки/кнопки підтвердження, цей нативний UI є основним шляхом для агента. Агент не повинен також дублювати звичайну команду чату /approve, якщо тільки результат інструмента не вказує, що підтвердження через чат недоступні або ручне підтвердження — єдиний шлях, що залишився. Загальна модель:
  • політика host exec усе ще визначає, чи потрібне підтвердження exec
  • approvals.exec керує пересиланням запитів на підтвердження до інших цілей чату
  • channels.<channel>.execApprovals визначає, чи діє цей канал як нативний клієнт підтвердження
Нативні клієнти підтвердження автоматично вмикають доставку спочатку в DM, коли всі ці умови істинні:
  • канал підтримує нативну доставку підтверджень
  • схвалювачів можна розв’язати з явних execApprovals.approvers або з документованих для цього каналу fallback-джерел
  • channels.<channel>.execApprovals.enabled не задано або дорівнює "auto"
Встановіть enabled: false, щоб явно вимкнути нативний клієнт підтвердження. Встановіть enabled: true, щоб примусово увімкнути його, коли схвалювачі розв’язуються. Доставка в публічний початковий чат залишається явною через channels.<channel>.execApprovals.target. FAQ: Чому існують дві конфігурації підтвердження exec для підтверджень у чаті?
  • Discord: channels.discord.execApprovals.*
  • Slack: channels.slack.execApprovals.*
  • Telegram: channels.telegram.execApprovals.*
Ці нативні клієнти підтвердження додають маршрутизацію до DM і необов’язковий fanout по каналу поверх спільного потоку /approve в тому самому чаті та спільних кнопок підтвердження. Спільна поведінка:
  • Slack, Matrix, Microsoft Teams та подібні чати з доставкою використовують звичайну модель автентифікації каналу для /approve у тому самому чаті
  • коли нативний клієнт підтвердження вмикається автоматично, типовою нативною ціллю доставки є DM схвалювачів
  • для Discord і Telegram лише розв’язані схвалювачі можуть підтвердити або відхилити
  • схвалювачі Discord можуть бути явними (execApprovals.approvers) або виведеними з commands.ownerAllowFrom
  • схвалювачі Telegram можуть бути явними (execApprovals.approvers) або виведеними з наявної конфігурації owner (allowFrom, плюс defaultTo для direct message, де це підтримується)
  • схвалювачі Slack можуть бути явними (execApprovals.approvers) або виведеними з commands.ownerAllowFrom
  • нативні кнопки Slack зберігають вид ID підтвердження, тож ID plugin: можуть розв’язувати підтвердження plugin без другого локального fallback-рівня Slack
  • нативна маршрутизація Matrix до DM/каналу стосується лише exec; підтвердження plugin у Matrix залишаються на спільному шляху /approve у тому самому чаті та необов’язковому пересиланні через approvals.plugin
  • відправник запиту не обов’язково має бути схвалювачем
  • початковий чат може підтвердити напряму через /approve, коли цей чат уже підтримує команди й відповіді
  • нативні кнопки підтвердження Discord маршрутизуються за видом ID підтвердження: ID plugin: переходять безпосередньо до підтверджень plugin, усе інше — до підтверджень exec
  • нативні кнопки підтвердження Telegram дотримуються того самого обмеженого fallback exec-to-plugin, що й /approve
  • коли нативний target вмикає доставку до початкового чату, запити на підтвердження містять текст команди
  • очікувані підтвердження exec типово спливають через 30 хвилин
  • якщо жоден UI оператора або налаштований клієнт підтвердження не може прийняти запит, запит переходить до askFallback
Типово Telegram використовує DM схвалювачів (target: "dm"). Ви можете переключити на channel або both, коли хочете, щоб запити на підтвердження також з’являлися в початковому чаті/темі Telegram. Для тем форуму Telegram OpenClaw зберігає тему для запиту підтвердження та followup після підтвердження. Див.:

Потік IPC на macOS

OC_I18N_900008 Примітки щодо безпеки:
  • Режим Unix socket 0600, токен зберігається в exec-approvals.json.
  • Перевірка peer з тим самим UID.
  • Challenge/response (nonce + HMAC token + hash запиту) + короткий TTL.

Системні події

Життєвий цикл exec відображається як системні повідомлення:
  • Exec running (лише якщо команда перевищує поріг сповіщення про виконання)
  • Exec finished
  • Exec denied
Вони публікуються в сесію агента після того, як вузол повідомляє про подію. Підтвердження exec на gateway host генерують ті самі події життєвого циклу, коли команда завершується (і, за потреби, коли виконується довше за поріг). Exec із підтвердженням повторно використовують id підтвердження як runId у цих повідомленнях для зручної кореляції.

Поведінка при відхиленому підтвердженні

Коли асинхронне підтвердження exec відхиляється, OpenClaw не дозволяє агенту повторно використовувати вивід будь-якого попереднього запуску тієї самої команди в сесії. Причина відхилення передається з явною вказівкою, що вивід команди недоступний, що не дає агенту стверджувати, ніби є новий вивід, або повторювати відхилену команду зі старими результатами від попереднього успішного запуску.

Наслідки

  • full має великі повноваження; за можливості віддавайте перевагу allowlist-ам.
  • ask тримає вас у циклі, водночас даючи змогу швидко підтверджувати.
  • Allowlist-и для кожного агента окремо не дають підтвердженням одного агента просочуватися в інших.
  • Підтвердження застосовуються лише до запитів host exec від авторизованих відправників. Неавторизовані відправники не можуть виконувати /exec.
  • /exec security=full — це зручність на рівні сесії для авторизованих операторів, яка за задумом пропускає підтвердження. Щоб жорстко заборонити host exec, встановіть security підтверджень у deny або забороніть інструмент exec через політику інструментів.
Пов’язане:

Пов’язане

  • Exec — інструмент виконання shell-команд
  • Sandboxing — режими sandbox і доступ до робочого простору
  • Security — модель безпеки та посилення
  • Sandbox vs Tool Policy vs Elevated — коли що використовувати