Zatwierdzenia exec
Zatwierdzenia exec to zabezpieczenie aplikacji towarzyszącej / hosta węzła pozwalające sandboxowanemu agentowi uruchamiać polecenia na rzeczywistym hoście (gateway lub node). Potraktuj to jak blokadę bezpieczeństwa:
polecenia są dozwolone tylko wtedy, gdy polityka + allowlista + (opcjonalnie) zatwierdzenie użytkownika są zgodne.
Zatwierdzenia exec działają dodatkowo względem polityki narzędzi i elevated gatingu (chyba że elevated ma wartość full, co pomija zatwierdzenia).
Skuteczna polityka jest bardziej restrykcyjna z tools.exec.* i domyślnych ustawień zatwierdzeń; jeśli pole zatwierdzeń jest pominięte, używana jest wartość tools.exec.
Host exec używa także lokalnego stanu zatwierdzeń na danej maszynie. Lokalne dla hosta
ask: "always" w ~/.openclaw/exec-approvals.json będzie nadal wyświetlać prompty, nawet jeśli
ustawienia sesji lub konfiguracji żądają ask: "on-miss".
Użyj openclaw approvals get, openclaw approvals get --gateway lub
openclaw approvals get --node <id|name|ip>, aby sprawdzić żądaną politykę,
źródła polityki hosta i wynik końcowy.
Jeśli interfejs aplikacji towarzyszącej jest niedostępny, każde żądanie wymagające promptu
jest rozstrzygane przez ask fallback (domyślnie: deny).
Gdzie to ma zastosowanie
Zatwierdzenia exec są egzekwowane lokalnie na hoście wykonania:- host gateway → proces
openclawna maszynie gateway - host węzła → runner węzła (aplikacja towarzysząca macOS lub bezgłowy host węzła)
- Wywołujący uwierzytelnieni przez Gateway są zaufanymi operatorami tego Gateway.
- Sparowane węzły rozszerzają tę możliwość zaufanego operatora na host węzła.
- Zatwierdzenia exec zmniejszają ryzyko przypadkowego wykonania, ale nie są granicą uwierzytelniania per użytkownik.
- Zatwierdzone uruchomienia na hoście węzła wiążą kanoniczny kontekst wykonania: kanoniczne cwd, dokładne argv, powiązanie env jeśli występuje, oraz przypiętą ścieżkę do pliku wykonywalnego, gdy ma to zastosowanie.
- Dla skryptów powłoki i bezpośrednich wywołań plików interpretera/runtime OpenClaw próbuje również powiązać jeden konkretny lokalny operand plikowy. Jeśli ten powiązany plik zmieni się po zatwierdzeniu, ale przed wykonaniem, uruchomienie zostanie odrzucone zamiast wykonać zmienioną treść.
- To powiązanie pliku jest celowo rozwiązaniem best-effort, a nie pełnym modelem semantycznym każdej ścieżki ładowania interpretera/runtime. Jeśli tryb zatwierdzania nie może zidentyfikować dokładnie jednego konkretnego lokalnego pliku do powiązania, odmawia utworzenia uruchomienia opartego na zatwierdzeniu zamiast udawać pełne pokrycie.
- usługa hosta węzła przekazuje
system.rundo aplikacji macOS przez lokalne IPC. - aplikacja macOS egzekwuje zatwierdzenia + wykonuje polecenie w kontekście UI.
Ustawienia i przechowywanie
Zatwierdzenia znajdują się w lokalnym pliku JSON na hoście wykonania:~/.openclaw/exec-approvals.json
Przykładowy schemat:
Tryb „YOLO” bez zatwierdzeń
Jeśli chcesz, aby host exec działał bez promptów zatwierdzeń, musisz otworzyć obie warstwy polityki:- żądaną politykę exec w konfiguracji OpenClaw (
tools.exec.*) - lokalną dla hosta politykę zatwierdzeń w
~/.openclaw/exec-approvals.json
tools.exec.security:fullnagateway/nodetools.exec.ask:off- host
askFallback:full
tools.exec.host=autowybiera miejsce wykonania exec: sandbox, gdy jest dostępny, w przeciwnym razie gateway.- YOLO wybiera sposób zatwierdzania host exec:
security=fullplusask=off. autonie sprawia, że routing do gateway staje się darmowym obejściem z sesji sandboxowanej. Żądanie per wywołaniehost=nodejest dozwolone zauto, ahost=gatewayjest dozwolone zautotylko wtedy, gdy nie ma aktywnego runtime sandboxa. Jeśli chcesz stabilną wartość domyślną inną niż auto, ustawtools.exec.hostlub użyj jawnie/exec host=....
allowlist / on-miss
lub deny.
Trwała konfiguracja hosta gateway „nigdy nie pytaj”:
/exec security=full ask=offzmienia tylko bieżącą sesję./elevated fullto skrót awaryjny break-glass, który również pomija zatwierdzenia exec dla tej sesji.
Ustawienia polityki
Security (exec.security)
- deny: blokuj wszystkie żądania host exec.
- allowlist: zezwalaj tylko na polecenia z allowlisty.
- full: zezwalaj na wszystko (odpowiednik elevated).
Ask (exec.ask)
- off: nigdy nie pokazuj promptu.
- on-miss: pokazuj prompt tylko wtedy, gdy allowlista nie pasuje.
- always: pokazuj prompt dla każdego polecenia.
- trwałe zaufanie
allow-alwaysnie wyłącza promptów, gdy skuteczny tryb ask toalways
Ask fallback (askFallback)
Jeśli prompt jest wymagany, ale żaden interfejs UI nie jest osiągalny, fallback decyduje:
- deny: blokuj.
- allowlist: zezwalaj tylko wtedy, gdy allowlista pasuje.
- full: zezwalaj.
Utwardzenie inline eval interpretera (tools.exec.strictInlineEval)
Gdy tools.exec.strictInlineEval=true, OpenClaw traktuje formy inline code-eval jako wymagające zatwierdzenia, nawet jeśli samo binarium interpretera znajduje się na allowliście.
Przykłady:
python -cnode -e,node --eval,node -pruby -eperl -e,perl -Ephp -rlua -eosascript -e
- te polecenia nadal wymagają jawnego zatwierdzenia;
allow-alwaysnie zapisuje automatycznie nowych wpisów allowlisty dla nich.
Allowlista (per agent)
Allowlisty są per agent. Jeśli istnieje wielu agentów, przełącz agenta, którego edytujesz, w aplikacji macOS. Wzorce to dopasowania glob bez rozróżniania wielkości liter. Wzorce powinny rozwiązywać się do ścieżek binariów (wpisy zawierające tylko basename są ignorowane). Starsze wpisyagents.default są migrowane do agents.main podczas wczytywania.
Łańcuchy powłoki, takie jak echo ok && pwd, nadal wymagają, aby każdy segment najwyższego poziomu spełniał reguły allowlisty.
Przykłady:
~/Projects/**/bin/peekaboo~/.local/bin/*/opt/homebrew/bin/rg
- id stabilny UUID używany do identyfikacji w UI (opcjonalnie)
- last used znacznik czasu
- last used command
- last resolved path
Auto-allow dla CLI należących do Skills
Gdy włączone jest Auto-allow skill CLIs, pliki wykonywalne, do których odwołują się znane Skills, są traktowane jak wpisy allowlisty na węzłach (węzeł macOS lub bezgłowy host węzła). Używa toskills.bins przez Gateway RPC do pobrania listy binariów Skill. Wyłącz to, jeśli chcesz ścisłych ręcznych allowlist.
Ważne uwagi dotyczące zaufania:
- To niejawna wygodna allowlista, oddzielna od ręcznych wpisów allowlisty ścieżek.
- Jest przeznaczona dla środowisk zaufanych operatorów, w których Gateway i węzeł znajdują się w tej samej granicy zaufania.
- Jeśli potrzebujesz ścisłego jawnego zaufania, pozostaw
autoAllowSkills: falsei używaj wyłącznie ręcznych wpisów allowlisty ścieżek.
Safe bins (tylko stdin)
tools.exec.safeBins definiuje niewielką listę binariów tylko stdin (na przykład cut),
które mogą działać w trybie allowlist bez jawnych wpisów allowlisty. Safe bins odrzucają
pozycyjne argumenty plików i tokeny podobne do ścieżek, więc mogą działać tylko na strumieniu wejściowym.
Traktuj to jako wąską szybką ścieżkę dla filtrów strumieniowych, a nie ogólną listę zaufania.
Nie dodawaj binariów interpreterów ani runtime (na przykład python3, node, ruby, bash, sh, zsh) do safeBins.
Jeśli polecenie z definicji może wykonywać eval kodu, uruchamiać podpolecenia lub odczytywać pliki, preferuj jawne wpisy allowlisty i pozostaw włączone prompty zatwierdzeń.
Niestandardowe safe bins muszą definiować jawny profil w tools.exec.safeBinProfiles.<bin>.
Walidacja jest deterministyczna wyłącznie na podstawie kształtu argv (bez sprawdzania istnienia plików w systemie hosta),
co zapobiega zachowaniu typu file-existence oracle wynikającemu z różnic allow/deny.
Opcje zorientowane na pliki są odrzucane dla domyślnych safe bins (na przykład 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 wymuszają też jawną politykę flag per binarium dla opcji, które łamią zachowanie tylko-stdin
(na przykład sort -o/--output/--compress-program i rekurencyjne flagi grep).
Długie opcje są walidowane fail-closed w trybie safe-bin: nieznane flagi i niejednoznaczne
skróty są odrzucane.
Odrzucone flagi według profilu safe-bin:
grep:--dereference-recursive,--directories,--exclude-from,--file,--recursive,-R,-d,-f,-rjq:--argfile,--from-file,--library-path,--rawfile,--slurpfile,-L,-fsort:--compress-program,--files0-from,--output,--random-source,--temporary-directory,-T,-owc:--files0-from
$VARS) dla segmentów tylko-stdin, dzięki czemu wzorce takie jak * lub $HOME/... nie mogą
zostać użyte do przemycenia odczytów plików.
Safe bins muszą też rozwiązywać się z zaufanych katalogów binariów (domyślne katalogi systemowe plus opcjonalne
tools.exec.safeBinTrustedDirs). Wpisy PATH nigdy nie są automatycznie uznawane za zaufane.
Domyślne zaufane katalogi safe-bin są celowo minimalne: /bin, /usr/bin.
Jeśli Twoje binarium safe-bin znajduje się w ścieżkach menedżera pakietów/użytkownika (na przykład
/opt/homebrew/bin, /usr/local/bin, /opt/local/bin, /snap/bin), dodaj je jawnie
do tools.exec.safeBinTrustedDirs.
Łańcuchy powłoki i przekierowania nie są automatycznie dozwolone w trybie allowlist.
Łańcuchy powłoki (&&, ||, ;) są dozwolone, gdy każdy segment najwyższego poziomu spełnia warunki allowlisty
(w tym safe bins lub auto-allow dla Skills). Przekierowania pozostają nieobsługiwane w trybie allowlist.
Podstawienie poleceń ($() / backticks) jest odrzucane podczas parsowania allowlisty, także wewnątrz
cudzysłowów; użyj apostrofów, jeśli potrzebujesz dosłownego tekstu $().
W zatwierdzeniach aplikacji towarzyszącej macOS surowy tekst powłoki zawierający składnię sterowania lub rozwijania powłoki
(&&, ||, ;, |, `, $, <, >, (, )) jest traktowany jako brak dopasowania allowlisty, chyba że
samo binarium powłoki znajduje się na allowliście.
Dla wrapperów powłoki (bash|sh|zsh ... -c/-lc) nadpisania env o zakresie żądania są redukowane do
małej jawnej allowlisty (TERM, LANG, LC_*, COLORTERM, NO_COLOR, FORCE_COLOR).
Dla decyzji allow-always w trybie allowlist znane wrappery dyspozytorskie
(env, nice, nohup, stdbuf, timeout) zapisują wewnętrzne ścieżki plików wykonywalnych zamiast ścieżek wrapperów. Multipleksery powłoki (busybox, toybox) są również rozwijane dla apletów powłoki (sh, ash,
itd.), tak aby zapisywać wewnętrzne pliki wykonywalne zamiast binariów multipleksera. Jeśli wrapper lub
multiplekser nie może zostać bezpiecznie rozwinięty, żaden wpis allowlisty nie jest zapisywany automatycznie.
Jeśli umieszczasz na allowliście interpretery takie jak python3 lub node, preferuj tools.exec.strictInlineEval=true, aby inline eval nadal wymagał jawnego zatwierdzenia. W trybie strict
allow-always nadal może zapisywać nieszkodliwe wywołania interpretera/skryptu, ale nośniki inline-eval nie są zapisywane automatycznie.
Domyślne safe bins:
cut, uniq, head, tail, tr, wc
grep i sort nie znajdują się na liście domyślnej. Jeśli jawnie je włączysz, zachowaj jawne wpisy allowlisty dla
ich przepływów pracy innych niż stdin.
Dla grep w trybie safe-bin podaj wzorzec przez -e/--regexp; forma wzorca pozycyjnego jest
odrzucana, aby operandów plikowych nie dało się przemycić jako niejednoznacznych argumentów pozycyjnych.
Safe bins a allowlista
| Temat | tools.exec.safeBins | Allowlista (exec-approvals.json) |
|---|---|---|
| Cel | Automatycznie zezwalać na wąskie filtry stdin | Jawnie ufać konkretnym plikom wykonywalnym |
| Typ dopasowania | Nazwa pliku wykonywalnego + polityka argv safe-bin | Wzorzec glob rozwiązanej ścieżki pliku wykonywalnego |
| Zakres argumentów | Ograniczony profilem safe-bin i regułami tokenów literalnych | Tylko dopasowanie ścieżki; za argumenty odpowiadasz samodzielnie |
| Typowe przykłady | head, tail, tr, wc | jq, python3, node, ffmpeg, niestandardowe CLI |
| Najlepsze zastosowanie | Niskiego ryzyka przekształcenia tekstu w pipeline’ach | Dowolne narzędzie o szerszym zachowaniu lub skutkach ubocznych |
safeBinspochodzi z konfiguracji (tools.exec.safeBinslub per agentagents.list[].tools.exec.safeBins).safeBinTrustedDirspochodzi z konfiguracji (tools.exec.safeBinTrustedDirslub per agentagents.list[].tools.exec.safeBinTrustedDirs).safeBinProfilespochodzi z konfiguracji (tools.exec.safeBinProfileslub per agentagents.list[].tools.exec.safeBinProfiles). Klucze profili per agent nadpisują klucze globalne.- wpisy allowlisty znajdują się w lokalnym dla hosta
~/.openclaw/exec-approvals.jsonpodagents.<id>.allowlist(lub przez Control UI /openclaw approvals allowlist ...). openclaw security auditostrzega przeztools.exec.safe_bins_interpreter_unprofiled, gdy binaria interpretera/runtime pojawiają się wsafeBinsbez jawnych profili.openclaw doctor --fixmoże utworzyć brakujące wpisysafeBinProfiles.<bin>jako{}(po tym przejrzyj je i zaostrz). Binaria interpretera/runtime nie są tworzone automatycznie.
jq do safeBins, OpenClaw nadal odrzuca w trybie safe-bin builtin env,
tak aby jq -n env nie mogło zrzucić środowiska procesu hosta bez jawnej ścieżki na allowliście
lub promptu zatwierdzenia.
Edycja w Control UI
Użyj karty Control UI → Nodes → Exec approvals, aby edytować ustawienia domyślne, nadpisania per agent i allowlisty. Wybierz zakres (Defaults lub agent), zmień politykę, dodaj/usuń wzorce allowlisty, a następnie kliknij Save. UI pokazuje metadane last used dla każdego wzorca, aby ułatwić utrzymanie porządku na liście. Selektor celu wybiera Gateway (lokalne zatwierdzenia) albo Node. Węzły muszą reklamowaćsystem.execApprovals.get/set (aplikacja macOS lub bezgłowy host węzła).
Jeśli węzeł nie reklamuje jeszcze zatwierdzeń exec, edytuj jego lokalny plik
~/.openclaw/exec-approvals.json bezpośrednio.
CLI: openclaw approvals obsługuje edycję gateway lub węzła (zobacz CLI zatwierdzeń).
Przepływ zatwierdzania
Gdy prompt jest wymagany, gateway rozgłaszaexec.approval.requested do klientów operatora.
Control UI i aplikacja macOS rozwiązują to przez exec.approval.resolve, a następnie gateway przekazuje
zatwierdzone żądanie do hosta węzła.
Dla host=node żądania zatwierdzenia zawierają kanoniczny payload systemRunPlan. Gateway używa
tego planu jako autorytatywnego kontekstu polecenia/cwd/sesji przy przekazywaniu zatwierdzonych żądań system.run.
To ma znaczenie przy opóźnieniach asynchronicznego zatwierdzania:
- ścieżka node exec przygotowuje jeden kanoniczny plan z góry
- rekord zatwierdzenia przechowuje ten plan i jego metadane powiązania
- po zatwierdzeniu końcowe przekazane wywołanie
system.runponownie używa zapisanego planu zamiast ufać późniejszym zmianom po stronie wywołującego - jeśli wywołujący zmieni
command,rawCommand,cwd,agentIdlubsessionKeypo utworzeniu żądania zatwierdzenia, gateway odrzuci przekazane uruchomienie jako niedopasowanie zatwierdzenia
Polecenia interpretera/runtime
Uruchomienia interpretera/runtime oparte na zatwierdzeniach są celowo konserwatywne:- Dokładny kontekst argv/cwd/env jest zawsze wiązany.
- Bezpośrednie formy skryptów powłoki i bezpośrednich plików runtime są wiązane best-effort do jednej konkretnej migawki lokalnego pliku.
- Typowe formy wrapperów menedżerów pakietów, które nadal rozwiązują się do jednego bezpośredniego lokalnego pliku (na przykład
pnpm exec,pnpm node,npm exec,npx), są rozwijane przed powiązaniem. - Jeśli OpenClaw nie może zidentyfikować dokładnie jednego konkretnego lokalnego pliku dla polecenia interpretera/runtime (na przykład skrypty pakietów, formy eval, łańcuchy loaderów specyficzne dla runtime lub niejednoznaczne formy wieloplikowe), wykonanie oparte na zatwierdzeniu jest odrzucane zamiast twierdzić, że obejmuje semantykę, której faktycznie nie obejmuje.
- Dla takich przepływów pracy preferuj sandboxing, osobną granicę hosta albo jawny zaufany przepływ allowlist/full, w którym operator akceptuje szerszą semantykę runtime.
Exec finished / Exec denied). Jeśli żadna decyzja nie nadejdzie przed
upływem limitu czasu, żądanie jest traktowane jako timeout zatwierdzenia i pokazywane jako powód odmowy.
Zachowanie dostarczania follow-up
Po zakończeniu zatwierdzonego asynchronicznego exec OpenClaw wysyła follow-upagent do tej samej sesji.
- Jeśli istnieje prawidłowy zewnętrzny cel dostarczenia (kanał możliwy do dostarczenia plus cel
to), follow-up jest dostarczany tym kanałem. - W przepływach tylko-webchat lub sesji wewnętrznych bez zewnętrznego celu dostarczenie follow-up pozostaje tylko sesyjne (
deliver: false). - Jeśli wywołujący jawnie żąda ścisłego zewnętrznego dostarczenia bez możliwego do rozwiązania kanału zewnętrznego, żądanie kończy się błędem
INVALID_REQUEST. - Jeśli włączone jest
bestEffortDeliveri nie można rozwiązać żadnego zewnętrznego kanału, dostarczenie jest obniżane do trybu tylko sesyjnego zamiast kończyć się błędem.
- polecenie + argumenty
- cwd
- id agenta
- rozwiązaną ścieżkę pliku wykonywalnego
- host + metadane polityki
- Allow once → uruchom teraz
- Always allow → dodaj do allowlisty + uruchom
- Deny → blokuj
Przekazywanie zatwierdzeń do kanałów czatu
Możesz przekazywać prompty zatwierdzeń exec do dowolnego kanału czatu (w tym kanałów pluginów) i zatwierdzać je przez/approve. Używa to zwykłego pipeline’u dostarczania wychodzącego.
Konfiguracja:
OC_I18N_900005
Odpowiedz na czacie:
OC_I18N_900006
Polecenie /approve obsługuje zarówno zatwierdzenia exec, jak i zatwierdzenia pluginów. Jeśli identyfikator nie pasuje do oczekującego zatwierdzenia exec, automatycznie sprawdza zamiast tego zatwierdzenia pluginów.
Przekazywanie zatwierdzeń pluginów
Przekazywanie zatwierdzeń pluginów używa tego samego pipeline’u dostarczania co zatwierdzenia exec, ale ma własną niezależną konfigurację podapprovals.plugin. Włączenie lub wyłączenie jednej opcji nie wpływa na drugą.
OC_I18N_900007
Kształt konfiguracji jest identyczny jak approvals.exec: enabled, mode, agentFilter,
sessionFilter i targets działają tak samo.
Kanały obsługujące współdzielone interaktywne odpowiedzi renderują te same przyciski zatwierdzania zarówno dla exec, jak i
zatwierdzeń pluginów. Kanały bez współdzielonego interaktywnego UI wracają do zwykłego tekstu z instrukcjami /approve.
Zatwierdzenia w tym samym czacie na dowolnym kanale
Gdy żądanie zatwierdzenia exec lub pluginu pochodzi z powierzchni czatu, do której można dostarczać wiadomości, ten sam czat może teraz domyślnie zatwierdzić je przez/approve. Dotyczy to kanałów takich jak Slack, Matrix i
Microsoft Teams oprócz istniejących przepływów Web UI i terminal UI.
Ta współdzielona ścieżka poleceń tekstowych używa zwykłego modelu uwierzytelniania kanału dla danej rozmowy. Jeśli
źródłowy czat może już wysyłać polecenia i odbierać odpowiedzi, żądania zatwierdzeń nie potrzebują już
osobnego natywnego adaptera dostarczania tylko po to, by pozostać oczekujące.
Discord i Telegram również obsługują /approve w tym samym czacie, ale te kanały nadal używają
rozwiązanej listy zatwierdzających do autoryzacji, nawet gdy natywne dostarczanie zatwierdzeń jest wyłączone.
Dla Telegram i innych natywnych klientów zatwierdzeń, którzy wywołują Gateway bezpośrednio,
ten fallback jest celowo ograniczony do błędów typu „nie znaleziono zatwierdzenia”. Rzeczywista
odmowa/błąd zatwierdzenia exec nie jest po cichu ponawiana jako zatwierdzenie pluginu.
Natywne dostarczanie zatwierdzeń
Niektóre kanały mogą działać także jako natywni klienci zatwierdzeń. Natywni klienci dodają DM do zatwierdzających, fanout do czatu źródłowego i interaktywne UX zatwierdzeń specyficzne dla kanału ponad współdzielony przepływ/approve
w tym samym czacie.
Gdy dostępne są natywne karty/przyciski zatwierdzeń, to natywne UI jest główną
ścieżką widoczną dla agenta. Agent nie powinien dodatkowo wypisywać zduplikowanego zwykłego polecenia czatu
/approve, chyba że wynik narzędzia mówi, że zatwierdzenia czatowe są niedostępne lub
ręczne zatwierdzenie jest jedyną pozostałą ścieżką.
Model ogólny:
- polityka host exec nadal decyduje, czy zatwierdzenie exec jest wymagane
approvals.execkontroluje przekazywanie promptów zatwierdzeń do innych miejsc docelowych czatuchannels.<channel>.execApprovalskontroluje, czy dany kanał działa jako natywny klient zatwierdzeń
- kanał obsługuje natywne dostarczanie zatwierdzeń
- zatwierdzających można rozwiązać z jawnego
execApprovals.approversalbo z udokumentowanych źródeł fallback danego kanału channels.<channel>.execApprovals.enabledjest nieustawione lub ma wartość"auto"
enabled: false, aby jawnie wyłączyć natywnego klienta zatwierdzeń. Ustaw enabled: true, aby wymusić
jego włączenie, gdy zatwierdzający mogą zostać rozwiązani. Publiczne dostarczanie do czatu źródłowego pozostaje
ustawiane jawnie przez channels.<channel>.execApprovals.target.
FAQ: Dlaczego istnieją dwie konfiguracje zatwierdzeń exec dla zatwierdzeń czatowych?
- Discord:
channels.discord.execApprovals.* - Slack:
channels.slack.execApprovals.* - Telegram:
channels.telegram.execApprovals.*
/approve w tym samym czacie i współdzielone przyciski zatwierdzeń.
Współdzielone zachowanie:
- Slack, Matrix, Microsoft Teams i podobne czaty, do których można dostarczać wiadomości, używają zwykłego modelu uwierzytelniania kanału
dla
/approvew tym samym czacie - gdy natywny klient zatwierdzeń włącza się automatycznie, domyślnym natywnym celem dostarczania są DM do zatwierdzających
- dla Discord i Telegram tylko rozwiązani zatwierdzający mogą zatwierdzać lub odrzucać
- zatwierdzający Discord mogą być jawni (
execApprovals.approvers) albo wywnioskowani zcommands.ownerAllowFrom - zatwierdzający Telegram mogą być jawni (
execApprovals.approvers) albo wywnioskowani z istniejącej konfiguracji właściciela (allowFrom, plus direct-messagedefaultTo, gdy jest obsługiwane) - zatwierdzający Slack mogą być jawni (
execApprovals.approvers) albo wywnioskowani zcommands.ownerAllowFrom - natywne przyciski Slack zachowują rodzaj identyfikatora zatwierdzenia, więc identyfikatory
plugin:mogą rozwiązywać zatwierdzenia pluginów bez drugiej warstwy fallback lokalnej dla Slack - natywny routing DM/kanał w Matrix jest tylko dla exec; zatwierdzenia pluginów Matrix pozostają przy współdzielonym
/approvew tym samym czacie i opcjonalnych ścieżkach przekazywaniaapprovals.plugin - zgłaszający nie musi być zatwierdzającym
- źródłowy czat może zatwierdzić bezpośrednio przez
/approve, gdy ten czat już obsługuje polecenia i odpowiedzi - natywne przyciski zatwierdzeń Discord kierują według rodzaju identyfikatora zatwierdzenia: identyfikatory
plugin:trafiają bezpośrednio do zatwierdzeń pluginów, wszystko inne trafia do zatwierdzeń exec - natywne przyciski zatwierdzeń Telegram stosują ten sam ograniczony fallback z exec do pluginu co
/approve - gdy natywne
targetwłącza dostarczanie do czatu źródłowego, prompty zatwierdzeń zawierają tekst polecenia - oczekujące zatwierdzenia exec wygasają domyślnie po 30 minutach
- jeśli żaden interfejs operatora ani skonfigurowany klient zatwierdzeń nie może przyjąć żądania, prompt wraca do
askFallback
target: "dm"). Możesz przełączyć na channel lub both, jeśli
chcesz, aby prompty zatwierdzeń pojawiały się także w źródłowym czacie/wątku Telegram. Dla tematów forum Telegram
OpenClaw zachowuje temat dla promptu zatwierdzenia i follow-up po zatwierdzeniu.
Zobacz:
Przepływ IPC w macOS
OC_I18N_900008 Uwagi dotyczące bezpieczeństwa:- Tryb gniazda Unix
0600, token przechowywany wexec-approvals.json. - Sprawdzenie peera z tym samym UID.
- Challenge/response (nonce + token HMAC + hash żądania) + krótki TTL.
Zdarzenia systemowe
Cykl życia exec jest pokazywany jako komunikaty systemowe:Exec running(tylko jeśli polecenie przekroczy próg powiadomienia o uruchomieniu)Exec finishedExec denied
runId w tych komunikatach, co ułatwia powiązanie.
Zachowanie przy odrzuconym zatwierdzeniu
Gdy asynchroniczne zatwierdzenie exec zostanie odrzucone, OpenClaw uniemożliwia agentowi ponowne użycie wyniku z dowolnego wcześniejszego uruchomienia tego samego polecenia w sesji. Powód odmowy jest przekazywany razem z jawną informacją, że nie ma dostępnego wyniku polecenia, co powstrzymuje agenta przed twierdzeniem, że istnieje nowy wynik, lub przed powtarzaniem odrzuconego polecenia ze starymi rezultatami z wcześniejszego udanego uruchomienia.Skutki
- full jest potężne; tam, gdzie to możliwe, preferuj allowlisty.
- ask pozwala Ci zachować kontrolę przy jednoczesnym szybkim zatwierdzaniu.
- Allowlisty per agent zapobiegają przenikaniu zatwierdzeń jednego agenta do innych.
- Zatwierdzenia dotyczą tylko żądań host exec od autoryzowanych nadawców. Nieautoryzowani nadawcy nie mogą wywoływać
/exec. /exec security=fulljest wygodnym ustawieniem na poziomie sesji dla autoryzowanych operatorów i z założenia pomija zatwierdzenia. Aby twardo zablokować host exec, ustaw security zatwierdzeń nadenyalbo zablokuj narzędzieexecprzez politykę narzędzi.
Powiązane
- Exec — narzędzie do wykonywania poleceń powłoki
- Sandboxing — tryby sandboxa i dostęp do workspace
- Security — model bezpieczeństwa i hardening
- Sandbox vs Tool Policy vs Elevated — kiedy używać którego