Tools
Zatwierdzanie wykonywania poleceń — zaawansowane
Zaawansowane zagadnienia dotyczące zatwierdzania wykonania: szybka ścieżka safeBins, wiązanie interpretera/środowiska uruchomieniowego
oraz przekazywanie zatwierdzeń do kanałów czatu (w tym dostarczanie natywne).
Podstawowe zasady i przepływ zatwierdzania opisano w sekcji Zatwierdzanie wykonania.
Bezpieczne pliki binarne (tylko stdin)
tools.exec.safeBins określa pliki binarne działające wyłącznie ze stdin (na przykład cut), które
działają w trybie listy dozwolonych bez jawnych wpisów na tej liście. Bezpieczne pliki binarne odrzucają
pozycyjne argumenty plików i tokeny przypominające ścieżki, dlatego mogą operować wyłącznie na
strumieniu wejściowym. Należy traktować to jako wąską szybką ścieżkę dla filtrów strumieniowych, a nie
ogólną listę zaufanych programów.
Domyślne bezpieczne pliki binarne:
cut, uniq, head, tail, tr, wc
grep i sort nie znajdują się na liście domyślnej. Po ich włączeniu należy zachować jawne
wpisy na liście dozwolonych dla przepływów pracy, które nie używają stdin. W przypadku grep działającego jako bezpieczny plik binarny
wzorzec należy podać za pomocą -e/--regexp; pozycyjna postać wzorca jest odrzucana,
aby nie można było przemycić operandów plikowych jako niejednoznacznych argumentów pozycyjnych.
Walidacja argv i niedozwolone flagi
Walidacja jest deterministyczna i opiera się wyłącznie na strukturze argv (bez sprawdzania istnienia
plików w systemie hosta), co zapobiega działaniu różnic między zezwoleniem a odmową jako wyroczni
ujawniającej istnienie pliku. Opcje dotyczące plików są niedozwolone dla domyślnych bezpiecznych plików binarnych; długie
opcje są walidowane w trybie bezpiecznej odmowy (nieznane flagi i niejednoznaczne skróty są
odrzucane). Rozpoznawane logiczne flagi tylko do odczytu domyślnych plików binarnych (na przykład
wc -l, tr -d, uniq -c) są akceptowane, natomiast nierozpoznane krótkie flagi pozostają
w trybie bezpiecznej odmowy i wymagają ręcznego zatwierdzenia.
Flagi niedozwolone według profilu bezpiecznego pliku binarnego:
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,-otail:--follow,--retry,-F,-fwc:--files0-from
Bezpieczne pliki binarne wymuszają również traktowanie tokenów argv jako tekstu literalnego podczas wykonywania
(bez rozwijania symboli wieloznacznych ani $VARS) w segmentach używających tylko stdin, dlatego
wzorców takich jak * lub $HOME/... nie można używać do przemycania odczytu plików. awk,
sed i jq są zawsze odrzucane jako bezpieczne pliki binarne, ponieważ nie można zweryfikować,
że ich semantyka ogranicza się do stdin: jq może odczytywać dane środowiskowe i ładować kod jq z
modułów lub plików startowych. Zamiast safeBins należy dla tych narzędzi użyć jawnego wpisu
na liście dozwolonych lub monitu o zatwierdzenie.
Zaufane katalogi plików binarnych
Bezpieczne pliki binarne muszą być rozpoznawane w zaufanych katalogach plików binarnych (domyślne katalogi
systemowe oraz opcjonalny tools.exec.safeBinTrustedDirs). Wpisy PATH nigdy nie są automatycznie uznawane za zaufane.
Domyślne zaufane katalogi są celowo ograniczone do minimum: /bin, /usr/bin. Jeśli
bezpieczny plik wykonywalny znajduje się w ścieżkach menedżera pakietów lub użytkownika (na przykład
/opt/homebrew/bin, /usr/local/bin, /opt/local/bin, /snap/bin), należy jawnie
dodać je do tools.exec.safeBinTrustedDirs.
Łączenie poleceń powłoki, programy opakowujące i multipleksery
Łączenie poleceń powłoki (&&, ||, ;) jest dozwolone, gdy każdy segment najwyższego poziomu
spełnia wymagania listy dozwolonych (w tym jako bezpieczny plik binarny lub dzięki automatycznemu zezwoleniu Skills). Przekierowania
pozostają nieobsługiwane w trybie listy dozwolonych. Podstawianie poleceń ($() / odwrotne apostrofy) jest
odrzucane podczas analizy listy dozwolonych, również wewnątrz podwójnych cudzysłowów; aby użyć
literalnego tekstu $(), należy zastosować pojedyncze cudzysłowy.
W przypadku zatwierdzeń w aplikacji towarzyszącej dla systemu macOS nieprzetworzony tekst powłoki zawierający składnię sterowania
powłoką lub rozwijania (&&, ||, ;, |, `, $, <, >, (, )) jest
traktowany jako brak dopasowania do listy dozwolonych, chyba że sam plik binarny powłoki znajduje się na tej liście.
W przypadku programów opakowujących powłokę (bash|sh|zsh ... -c/-lc) przesłonięcia zmiennych środowiskowych ograniczone do żądania
są redukowane do niewielkiej jawnej listy dozwolonych wartości (TERM, LANG, LC_*, COLORTERM,
NO_COLOR, FORCE_COLOR).
W przypadku decyzji allow-always w trybie listy dozwolonych przezroczyste programy opakowujące przekazywanie
(na przykład env, flock, nice, nohup, stdbuf, timeout) utrwalają
ścieżkę wewnętrznego pliku wykonywalnego zamiast ścieżki programu opakowującego. Multipleksery powłoki
(busybox, toybox) są rozpakowywane w ten sam sposób w przypadku apletów powłoki (sh, ash itd.).
Jeśli programu opakowującego lub multipleksera nie można bezpiecznie rozpakować, żaden wpis na liście dozwolonych
nie jest automatycznie utrwalany.
Jeśli na liście dozwolonych umieszczane są interpretery takie jak python3 lub node, zaleca się
tools.exec.strictInlineEval=true, aby interpretacja kodu wbudowanego nadal wymagała jawnego
zatwierdzenia. W trybie ścisłym allow-always może nadal utrwalać nieszkodliwe
wywołania interpretera/skryptu, ale nośniki interpretacji kodu wbudowanego nie są utrwalane
automatycznie.
Bezpieczne pliki binarne a lista dozwolonych
| Temat | tools.exec.safeBins |
Lista dozwolonych (exec-approvals.json) |
|---|---|---|
| Cel | Automatyczne zezwalanie na wąski zakres filtrów stdin | Jawne zaufanie określonym plikom wykonywalnym |
| Typ dopasowania | Nazwa pliku wykonywalnego + zasady argv bezpiecznego pliku binarnego | Glob rozpoznanej ścieżki pliku wykonywalnego lub glob samej nazwy polecenia dla poleceń wywoływanych przez PATH |
| Zakres argumentów | Ograniczony przez profil bezpiecznego pliku binarnego i reguły tokenów literalnych | Domyślnie dopasowanie ścieżki; opcjonalny argPattern może ograniczyć przeanalizowane argv |
| Typowe przykłady | head, tail, tr, wc |
jq, python3, node, ffmpeg, niestandardowe narzędzia CLI |
| Najlepsze zastosowanie | Przekształcenia tekstu niskiego ryzyka w potokach | Dowolne narzędzie o szerszym działaniu lub skutkach ubocznych |
Lokalizacja konfiguracji:
safeBinspochodzi z konfiguracji (tools.exec.safeBinslubagents.list[].tools.exec.safeBinsdla danego agenta).safeBinTrustedDirspochodzi z konfiguracji (tools.exec.safeBinTrustedDirslubagents.list[].tools.exec.safeBinTrustedDirsdla danego agenta).safeBinProfilespochodzi z konfiguracji (tools.exec.safeBinProfileslubagents.list[].tools.exec.safeBinProfilesdla danego agenta). Klucze profilu danego agenta zastępują klucze globalne.- wpisy listy dozwolonych znajdują się w lokalnym dla hosta pliku zatwierdzeń w
agents.<id>.allowlist(lub są dostępne za pośrednictwem interfejsu Control UI /openclaw approvals allowlist ...). openclaw security auditwyświetla ostrzeżenietools.exec.safe_bins_interpreter_unprofiled, gdy pliki binarne interpreterów/środowisk uruchomieniowych występują wsafeBinsbez jawnych profili.openclaw doctor --fixmoże utworzyć szkielet brakujących niestandardowych wpisówsafeBinProfiles.<bin>jako{}(następnie należy je przejrzeć i zaostrzyć). Pliki binarne interpreterów/środowisk uruchomieniowych nie są automatycznie dodawane do szkieletu.
Przykład profilu niestandardowego:
{ tools: { exec: { safeBins: ["myfilter"], safeBinProfiles: { myfilter: { minPositional: 0, maxPositional: 0, allowedValueFlags: ["-n", "--limit"], deniedFlags: ["-f", "--file", "-c", "--command"], }, }, }, },}Polecenia interpreterów/środowisk uruchomieniowych
Uruchomienia interpreterów/środowisk uruchomieniowych oparte na zatwierdzeniu są celowo obsługiwane zachowawczo:
- Dokładny kontekst argv/cwd/env jest zawsze wiązany.
- Bezpośrednie postacie skryptu powłoki i pliku środowiska uruchomieniowego są w miarę możliwości wiązane z jedną konkretną lokalną migawką pliku.
- Typowe postacie programów opakowujących menedżera pakietów, które nadal wskazują jeden bezpośredni plik lokalny (na przykład
pnpm exec,pnpm node,npm exec,npx), są rozpakowywane przed wiązaniem. - Jeśli OpenClaw nie może zidentyfikować dokładnie jednego konkretnego pliku lokalnego dla polecenia interpretera/środowiska uruchomieniowego (na przykład w przypadku skryptów pakietów, postaci interpretujących kod, łańcuchów modułów ładujących specyficznych dla środowiska uruchomieniowego lub niejednoznacznych postaci obejmujących wiele plików), wykonanie oparte na zatwierdzeniu jest odrzucane zamiast deklarowania pokrycia semantycznego, którego nie zapewnia.
- W takich przepływach pracy zaleca się izolację w piaskownicy, oddzielną granicę hosta lub jawnie zaufaną listę dozwolonych/pełny przepływ pracy, w którym operator akceptuje szerszą semantykę środowiska uruchomieniowego.
Gdy zatwierdzenia są wymagane, narzędzie wykonawcze natychmiast zwraca identyfikator zatwierdzenia. Tego identyfikatora należy użyć do
korelowania późniejszych zdarzeń systemowych zatwierdzonego uruchomienia (Exec finished oraz Exec running, jeśli jest skonfigurowane).
Jeśli przed upływem limitu czasu nie nadejdzie decyzja, żądanie jest traktowane jako przekroczenie limitu czasu zatwierdzenia i
zgłaszane jako końcowa odmowa wykonania polecenia hosta. W przypadku asynchronicznych zatwierdzeń głównego agenta z sesją
źródłową OpenClaw wznawia również tę sesję za pomocą wewnętrznej kontynuacji, dzięki czemu agent otrzymuje informację,
że polecenie nie zostało uruchomione, zamiast później próbować naprawić brakujący wynik. Oczekujące zatwierdzenia wykonania wygasają
domyślnie po 30 minutach.
Sposób dostarczania kontynuacji
Po zakończeniu zatwierdzonego wykonania asynchronicznego OpenClaw wysyła do tej samej sesji turę kontynuacji agent.
Odrzucone zatwierdzenia asynchroniczne używają tej samej ścieżki kontynuacji sesji głównej do przekazania stanu odmowy, ale
nie rejestrują przekazań do środowiska uruchomieniowego o podwyższonych uprawnieniach ani nie uruchamiają polecenia. Odmowy bez możliwej do wznowienia
sesji głównej są pomijane albo zgłaszane bezpieczną ścieżką bezpośrednią, jeśli taka istnieje.
- Jeśli istnieje prawidłowy zewnętrzny cel dostarczania (kanał obsługujący dostarczanie oraz cel
to), kontynuacja jest dostarczana przez ten kanał. - W przepływach obejmujących wyłącznie czat internetowy lub sesję wewnętrzną, bez zewnętrznego celu, kontynuacja jest dostarczana wyłącznie do sesji (
deliver: false). - Jeśli wywołujący jawnie zażąda ścisłego dostarczania zewnętrznego bez możliwego do ustalenia kanału zewnętrznego, żądanie kończy się błędem
INVALID_REQUEST. - Jeśli
bestEffortDeliverjest włączone i nie można ustalić kanału zewnętrznego, dostarczanie zostaje ograniczone do sesji zamiast zakończyć się błędem.
Przekazywanie zatwierdzeń do kanałów czatu
Monity o zatwierdzenie wykonania można przekazywać do dowolnego kanału czatu (w tym kanałów Pluginów) i zatwierdzać
je za pomocą /approve. Odbywa się to przez standardowy potok dostarczania wychodzącego.
Konfiguracja:
{ approvals: { exec: { enabled: true, mode: "session", // "session" | "targets" | "both" agentFilter: ["main"], sessionFilter: ["discord"], // substring or regex targets: [ { channel: "slack", to: "U12345678" }, { channel: "telegram", to: "123456789" }, ], }, },}Odpowiedź na czacie:
/approve <id> allow-once/approve <id> allow-always/approve <id> denyPolecenie /approve obsługuje zarówno zatwierdzenia wykonania, jak i zatwierdzenia pluginów. Jeśli identyfikator nie pasuje do oczekującego zatwierdzenia wykonania, automatycznie sprawdzane są zamiast tego zatwierdzenia pluginów. Ten mechanizm rezerwowy jest ograniczony do błędów „nie znaleziono zatwierdzenia”; rzeczywista odmowa lub błąd zatwierdzenia wykonania nie powoduje cichej ponownej próby jako zatwierdzenie pluginu.
Przekazywanie zatwierdzeń pluginów
Przekazywanie zatwierdzeń pluginów korzysta z tego samego potoku dostarczania co zatwierdzenia wykonania, ale ma własną
niezależną konfigurację w approvals.plugin. Włączenie lub wyłączenie jednego mechanizmu nie wpływa na drugi.
Informacje o zachowaniu podczas tworzenia pluginów, polach żądań i semantyce decyzji zawiera sekcja
Żądania uprawnień pluginów.
{ approvals: { plugin: { enabled: true, mode: "targets", agentFilter: ["main"], targets: [ { channel: "slack", to: "U12345678" }, { channel: "telegram", to: "123456789" }, ], }, },}Struktura konfiguracji jest identyczna jak w approvals.exec: enabled, mode, agentFilter,
sessionFilter i targets działają w ten sam sposób.
Kanały obsługujące współdzielone interaktywne odpowiedzi wyświetlają te same przyciski zatwierdzania zarówno dla zatwierdzeń wykonania, jak i
pluginów. Kanały bez współdzielonego interaktywnego interfejsu użytkownika używają zwykłego tekstu z instrukcjami
/approve. Żądania zatwierdzenia pluginów mogą ograniczać dostępne decyzje: interfejsy zatwierdzania używają
zestawu decyzji zadeklarowanego w żądaniu, a Gateway odrzuca próby przesłania decyzji, której
nie zaoferowano.
Zatwierdzanie na tym samym czacie w dowolnym kanale
Gdy żądanie zatwierdzenia wykonania lub pluginu pochodzi z powierzchni czatu obsługującej dostarczanie, ten sam czat
może je domyślnie zatwierdzić za pomocą /approve. Dotyczy to Slack, Matrix, Microsoft Teams i
podobnych czatów obsługujących dostarczanie, oprócz istniejących przepływów w internetowym i terminalowym interfejsie użytkownika, z użyciem
standardowego modelu uwierzytelniania kanału dla tej konwersacji. Jeśli czat źródłowy może już wysyłać polecenia
i odbierać odpowiedzi, oczekujące żądania zatwierdzenia nie wymagają już osobnego natywnego adaptera dostarczania.
Discord, Telegram i bot QQ również obsługują /approve na tym samym czacie, ale te kanały nadal używają
ustalonej listy zatwierdzających do autoryzacji, nawet gdy natywne dostarczanie zatwierdzeń jest wyłączone.
Natywne dostarczanie zatwierdzeń
Niektóre kanały mogą również działać jako natywne klienty zatwierdzania: Discord, Slack, Telegram, Matrix i bot QQ.
Natywne klienty dodają wiadomości prywatne do zatwierdzających, rozsyłanie do czatu źródłowego i interaktywny interfejs zatwierdzania właściwy dla kanału
do współdzielonego przepływu /approve na tym samym czacie.
Gdy dostępne są natywne karty lub przyciski zatwierdzania, ten natywny interfejs użytkownika jest główną ścieżką dla agenta.
Agent nie powinien dodatkowo powtarzać zduplikowanego polecenia /approve na zwykłym czacie, chyba że wynik narzędzia wskazuje,
że zatwierdzanie przez czat jest niedostępne lub zatwierdzenie ręczne jest jedyną pozostałą ścieżką.
Jeśli skonfigurowano natywnego klienta zatwierdzania, ale dla kanału źródłowego nie działa żadne natywne środowisko
uruchomieniowe, OpenClaw pozostawia widoczny lokalny, deterministyczny monit /approve. Jeśli natywne środowisko uruchomieniowe
jest aktywne i podejmuje próbę dostarczenia, ale żaden cel nie otrzyma karty, OpenClaw wysyła na tym samym czacie powiadomienie
rezerwowe z dokładnym poleceniem /approve <id> <decision>, aby nadal można było rozstrzygnąć żądanie.
Model ogólny:
- zasady wykonywania hosta nadal określają, czy zatwierdzenie wykonania jest wymagane
approvals.execsteruje przekazywaniem monitów zatwierdzania do innych miejsc docelowych czatuchannels.<channel>.execApprovalsokreśla, czy natywne klienty właściwe dla kanałów, takich jak Discord, Slack, Telegram, bot QQ i podobne, są włączone- zatwierdzenia pluginów Slack mogą używać natywnego klienta zatwierdzania Slack, gdy żądanie pochodzi ze Slack
i uda się ustalić zatwierdzających pluginy Slack;
approvals.pluginmoże również kierować zatwierdzenia pluginów do sesji lub celów Slack, nawet gdy zatwierdzenia wykonania Slack są wyłączone - natywne karty zatwierdzania Google Chat obsługują zatwierdzenia wykonania i pluginów pochodzące z pokoi lub wątków Google
Chat, gdy stabilni zatwierdzający
users/<id>zostaną ustaleni zdm.allowFromlubdefaultTo; nie używają zdarzeń reakcji do podejmowania decyzji - dostarczanie zatwierdzeń przez reakcje w WhatsApp i Signal jest kontrolowane przez
approvals.execiapprovals.plugin; nie mają one blokówchannels.<channel>.execApprovals
Natywne klienty zatwierdzania automatycznie włączają dostarczanie najpierw przez wiadomości prywatne, gdy spełnione są wszystkie poniższe warunki:
- kanał obsługuje natywne dostarczanie zatwierdzeń
- zatwierdzających można ustalić na podstawie jawnej wartości
execApprovals.approverslub tożsamości właściciela, takiej jakcommands.ownerAllowFrom channels.<channel>.execApprovals.enablednie jest ustawione lub ma wartość"auto"
Ustaw enabled: false, aby jawnie wyłączyć natywnego klienta zatwierdzania. Ustaw enabled: true, aby wymusić
jego włączenie po ustaleniu zatwierdzających. Publiczne dostarczanie do czatu źródłowego pozostaje jawnie konfigurowane przez
channels.<channel>.execApprovals.target. Gdy natywne target włącza dostarczanie do czatu źródłowego,
monity zatwierdzania zawierają tekst polecenia.
FAQ: Dlaczego istnieją dwie konfiguracje zatwierdzania wykonania dla zatwierdzeń na czacie?
- Discord:
channels.discord.execApprovals.* - Slack:
channels.slack.execApprovals.* - Telegram:
channels.telegram.execApprovals.* - bot QQ:
channels.qqbot.execApprovals.* - Google Chat: skonfiguruj stabilnych zatwierdzających za pomocą
channels.googlechat.dm.allowFromlubchannels.googlechat.defaultTo; blokexecApprovalsnie jest wymagany - WhatsApp: użyj
approvals.execiapprovals.plugin, aby kierować monity zatwierdzania do WhatsApp - Signal: użyj
approvals.execiapprovals.plugin, aby kierować monity zatwierdzania do Signal
Trasowanie właściwe dla natywnych klientów:
- Telegram domyślnie wysyła wiadomości prywatne do zatwierdzających (
target: "dm"). Przełącz nachannellubboth, aby również wyświetlać monity zatwierdzania na źródłowym czacie lub w temacie Telegram. W przypadku tematów forum Telegram OpenClaw zachowuje temat dla monitu zatwierdzania i dalszej wiadomości po zatwierdzeniu. - zatwierdzający w Discord i Telegram mogą być określeni jawnie (
execApprovals.approvers) lub wywnioskowani zcommands.ownerAllowFrom; zatwierdzać lub odrzucać mogą wyłącznie ustaleni zatwierdzający. - zatwierdzający w Slack mogą być określeni jawnie (
execApprovals.approvers) lub wywnioskowani zcommands.ownerAllowFrom. Wiadomości prywatne z zatwierdzeniami pluginów Slack używają zatwierdzających pluginy Slack zallowFromoraz domyślnego trasowania konta, a nie zatwierdzających wykonanie w Slack. Natywne przyciski Slack zachowują rodzaj identyfikatora zatwierdzenia, dzięki czemu identyfikatoryplugin:mogą rozstrzygać zatwierdzenia pluginów bez drugiej, lokalnej warstwy rezerwowej Slack. - natywne karty Google Chat zachowują ręczny mechanizm rezerwowy
/approvew tekście wiadomości, ale wywołania zwrotne przycisków kart przenoszą wyłącznie nieprzezroczyste tokeny akcji; identyfikator zatwierdzenia i decyzja są odtwarzane z oczekującego stanu po stronie serwera. - zatwierdzenia za pomocą emoji w WhatsApp obsługują zarówno monity wykonania, jak i pluginów, gdy odpowiadająca im nadrzędna rodzina przekazywania kieruje je do WhatsApp. Monity natywnego pochodzenia są wiązane bezpośrednio; współdzielone dostarczanie w trybie celu wiąże te same typowane metadane zatwierdzenia z potwierdzeniem odebrania zaakceptowanej wiadomości WhatsApp.
- zatwierdzenia przez reakcje Signal obsługują zarówno monity wykonania, jak i pluginów wyłącznie wtedy, gdy odpowiadająca im nadrzędna
rodzina przekazywania jest włączona i kieruje je do Signal. Bezpośrednie zatwierdzenia wykonania Signal na tym samym czacie mogą
wyłączyć lokalny mechanizm rezerwowy
/approvebez jawnie określonych zatwierdzających; rozstrzyganie reakcji Signal nadal wymaga jawnych zatwierdzających Signal zchannels.signal.allowFromlubdefaultTo. - natywne trasowanie Matrix do wiadomości prywatnych lub kanałów oraz skróty reakcji obsługują zarówno zatwierdzenia wykonania, jak i pluginów;
autoryzacja pluginów nadal pochodzi z
channels.matrix.dm.allowFrom. Natywne monity Matrix zawierają niestandardową treść zdarzeniacom.openclaw.approvalw pierwszym zdarzeniu monitu, dzięki czemu klienty Matrix obsługujące OpenClaw mogą odczytać ustrukturyzowany stan zatwierdzenia, podczas gdy standardowe klienty zachowują zwykły tekstowy mechanizm rezerwowy/approve. - natywne przyciski zatwierdzania Discord i Telegram przenoszą jawny rodzaj właściciela — wykonanie lub plugin —
w prywatnych danych wywołania zwrotnego transportu i rozstrzygają wyłącznie tego właściciela. Starsze elementy sterujące
/approve, które nie mają rodzaju, pozostają ograniczoną ścieżką zgodności: próbują wyłącznie rodzajów właścicieli, które aktor może zatwierdzić, kontynuują tylko po wyniku „nie znaleziono zatwierdzenia” i nigdy nie wnioskują własności na podstawie identyfikatora zatwierdzenia. - osoba wysyłająca żądanie nie musi być zatwierdzającym.
- jeśli żaden interfejs operatora ani skonfigurowany klient zatwierdzania nie może przyjąć żądania, monit używa mechanizmu rezerwowego
askFallback.
Poufne polecenia grupowe dostępne wyłącznie dla właściciela, takie jak /diagnostics i /export-trajectory, używają prywatnego
trasowania do właściciela dla monitów zatwierdzania i wyników końcowych. OpenClaw najpierw próbuje użyć prywatnej trasy na tej samej
powierzchni, na której właściciel uruchomił polecenie. Jeśli ta powierzchnia nie ma prywatnej trasy do właściciela, używana jest
pierwsza dostępna trasa właściciela z commands.ownerAllowFrom, dzięki czemu polecenie grupowe Discord
może nadal wysłać zatwierdzenie i wynik do prywatnej wiadomości właściciela w Telegram, gdy Telegram jest skonfigurowanym
podstawowym interfejsem prywatnym. Czat grupowy otrzymuje tylko krótkie potwierdzenie.
Zobacz:
Oficjalne aplikacje operatora na urządzenia mobilne
Oficjalne aplikacje na iOS i Android mogą również przeglądać należące do Gateway oczekujące zatwierdzenia
wykonania, gdy używane jest połączenie operator.admin lub gdy sparowane z nimi
urządzenie operator.approvals zostało jawnie wskazane jako cel żądania. Odczytują
ten sam oczyszczony, trwały rekord, którego używa
Control UI, przesyłają decyzję uwzględniającą rodzaj i wyświetlają kanoniczny wynik
pierwszej odpowiedzi z Gateway. Apple Watch odzwierciedla te monity zatwierdzania za pośrednictwem
sparowanego iPhone'a, udostępniając akcje jednorazowego zezwolenia i odmowy. Bezpośredni tryb Gateway na zegarku
nie umożliwia przeglądania zatwierdzeń.
Utrata potwierdzenia rozstrzygnięcia nie powoduje, że przesłany wybór staje się wiążący: aplikacja wyłącza elementy sterujące i ponownie odczytuje rekord. Jeśli inna powierzchnia odpowiedziała jako pierwsza, aplikacja wyświetla zapisaną decyzję. Oczekujące monity pozostają powiązane z Gateway, który je wystawił, więc przełączenie aktywnego Gateway nie może przekierować starego identyfikatora zatwierdzenia.
Przepływ IPC w macOS
Gateway -> Usługa Node (WS) | IPC (UDS + token + HMAC + TTL) v Aplikacja Mac (interfejs użytkownika + zatwierdzenia + system.run)Uwagi dotyczące bezpieczeństwa:
- tryb gniazda Unix
0600, token przechowywany wexec-approvals.json. - kontrola równorzędnego procesu o tym samym UID.
- wyzwanie/odpowiedź (nonce + token HMAC + skrót żądania) + krótki TTL.
FAQ
Kiedy wartości accountId i threadId byłyby używane w celu zatwierdzania?
Użyj accountId, gdy kanał ma wiele skonfigurowanych tożsamości, a monit zatwierdzania musi
zostać wysłany przez jedno konkretne konto. Użyj threadId, gdy miejsce docelowe obsługuje tematy lub
wątki, a monit powinien pozostać w tym wątku zamiast na najwyższym poziomie czatu.
Konkretnym przypadkiem w Telegram jest supergrupa operacyjna z tematami forum i dwoma kontami
botów Telegram. Wartość to wskazuje supergrupę, accountId wybiera konto bota, a threadId
wybiera temat forum:
{ approvals: { exec: { enabled: true, mode: "targets", targets: [ { channel: "telegram", to: "-1001234567890", accountId: "ops-bot", threadId: "77", }, ], }, }, channels: { telegram: { accounts: { default: { name: "Primary bot", botToken: "env:TELEGRAM_PRIMARY_BOT_TOKEN", }, "ops-bot": { name: "Operations bot", botToken: "env:TELEGRAM_OPS_BOT_TOKEN", }, }, }, },}Przy takiej konfiguracji przekazywane zatwierdzenia wykonania są publikowane przez konto Telegram ops-bot w temacie
77 czatu -1001234567890. Cel bez accountId używa domyślnego konta kanału, a
cel bez threadId publikuje w miejscu docelowym najwyższego poziomu.
Gdy zatwierdzenia są wysyłane do sesji, czy każda osoba w tej sesji może ich dokonać?
Nie. Dostarczanie do sesji określa jedynie, gdzie pojawia się monit. Samo w sobie nie upoważnia każdego uczestnika tego czatu do zatwierdzania.
W przypadku ogólnych operacji /approve na tym samym czacie nadawca musi już mieć uprawnienia do wykonywania poleceń w tej
sesji kanału. Jeśli kanał udostępnia jawną listę osób zatwierdzających, mogą one autoryzować
działanie /approve, nawet jeśli nie mają innych uprawnień do wykonywania poleceń w tej sesji.
Niektóre kanały stosują bardziej rygorystyczne zasady. Natywne wiadomości prywatne dotyczące zatwierdzeń w Discord, Telegram, Matrix i Slack oraz podobne
natywne klienty zatwierdzania używają ustalonych list osób zatwierdzających do autoryzacji zatwierdzeń. Na przykład
monit o zatwierdzenie w temacie forum Telegram może być widoczny dla wszystkich osób w tym temacie, ale tylko numeryczne
identyfikatory użytkowników Telegram ustalone na podstawie channels.telegram.execApprovals.approvers lub
commands.ownerAllowFrom mogą go zatwierdzić lub odrzucić.
Powiązane
- Zatwierdzenia wykonywania — podstawowe zasady i przepływ zatwierdzania
- Narzędzie wykonywania
- Tryb podwyższonych uprawnień
- Skills — automatyczne zezwalanie oparte na umiejętnościach