Narzędzie Exec
Uruchamia polecenia powłoki w workspace. Obsługuje wykonanie na pierwszym planie i w tle przezprocess.
Jeśli process jest niedozwolone, exec działa synchronicznie i ignoruje yieldMs/background.
Sesje działające w tle są ograniczone do agenta; process widzi tylko sesje tego samego agenta.
Parametry
command(wymagane)workdir(domyślnie cwd)env(nadpisania klucz/wartość)yieldMs(domyślnie 10000): automatyczne przejście w tło po opóźnieniubackground(bool): natychmiastowe uruchomienie w tletimeout(sekundy, domyślnie 1800): zakończenie po upływie czasupty(bool): uruchamia w pseudoterminalu, gdy jest dostępny (CLI tylko dla TTY, agenci kodujący, terminalowe interfejsy UI)host(auto | sandbox | gateway | node): gdzie wykonaćsecurity(deny | allowlist | full): tryb wymuszania dlagateway/nodeask(off | on-miss | always): prompty zatwierdzeń dlagateway/nodenode(string): identyfikator/nazwa node dlahost=nodeelevated(bool): żądanie trybu podwyższonego (wyjście z sandboxa na skonfigurowaną ścieżkę hosta);security=fulljest wymuszane tylko wtedy, gdyelevatedzostanie rozwiązane dofull
hostdomyślnie ma wartośćauto: sandbox, gdy dla sesji aktywne jest środowisko sandbox, w przeciwnym razie gateway.autoto domyślna strategia routingu, a nie wildcard. Wywołanie per-callhost=nodejest dozwolone zauto; per-callhost=gatewayjest dozwolone tylko wtedy, gdy nie jest aktywne żadne środowisko sandbox.- Bez dodatkowej konfiguracji
host=autonadal „po prostu działa”: brak sandboxa oznacza rozstrzygnięcie dogateway; aktywny sandbox oznacza pozostanie w sandboxie. elevatedwychodzi z sandboxa na skonfigurowaną ścieżkę hosta: domyślniegatewayalbonode, gdytools.exec.host=node(lub domyślnie sesji ustawionohost=node). Jest dostępne tylko wtedy, gdy dla bieżącej sesji/dostawcy włączono dostęp podwyższony.- Zatwierdzenia
gateway/nodesą kontrolowane przez~/.openclaw/exec-approvals.json. nodewymaga sparowanego node (aplikacja towarzysząca lub bezgłowy host node).- Jeśli dostępnych jest wiele node, ustaw
exec.nodelubtools.exec.node, aby wybrać jeden. exec host=nodeto jedyna ścieżka wykonywania powłoki dla node; starszy wrappernodes.runzostał usunięty.- Na hostach innych niż Windows exec używa
SHELL, jeśli jest ustawione; jeśliSHELLtofish, preferujebash(lubsh) zPATH, aby uniknąć skryptów niezgodnych z fish, a dopiero potem wraca doSHELL, jeśli żaden z nich nie istnieje. - Na hostach Windows exec preferuje wykrywanie PowerShell 7 (
pwsh) (Program Files, ProgramW6432, a potem PATH), a następnie wraca do Windows PowerShell 5.1. - Wykonanie na hoście (
gateway/node) odrzucaenv.PATHoraz nadpisania loadera (LD_*/DYLD_*), aby zapobiec przejęciu binariów lub wstrzyknięciu kodu. - OpenClaw ustawia
OPENCLAW_SHELL=execw środowisku uruchamianego polecenia (w tym PTY i wykonania w sandboxie), aby reguły powłoki/profilu mogły wykrywać kontekst narzędzia exec. - Ważne: sandboxing jest domyślnie wyłączony. Jeśli sandboxing jest wyłączony, niejawne
host=autorozstrzyga się dogateway. Jawnehost=sandboxnadal bezpiecznie kończy się odmową zamiast po cichu uruchamiać się na hoście gateway. Włącz sandboxing albo użyjhost=gatewayz zatwierdzeniami. - Kontrole wstępne skryptów (dla typowych błędów składni powłoki Python/Node) sprawdzają tylko pliki wewnątrz
skutecznej granicy
workdir. Jeśli ścieżka skryptu rozstrzyga się pozaworkdir, kontrola wstępna jest pomijana dla tego pliku. - Dla długotrwałej pracy, która zaczyna się teraz, uruchom ją raz i polegaj na automatycznym
wybudzeniu po zakończeniu, gdy jest ono włączone i polecenie generuje dane wyjściowe lub kończy się błędem.
Używaj
processdo logów, statusu, wejścia lub interwencji; nie emuluj harmonogramowania za pomocą pętli sleep, timeout ani powtarzanego odpytywania. - Dla pracy, która ma zostać wykonana później lub według harmonogramu, używaj cron zamiast
wzorców sleep/delay z
exec.
Config
tools.exec.notifyOnExit(domyślnie: true): gdy ma wartość true, sesje exec uruchomione w tle dodają zdarzenie systemowe do kolejki i żądają heartbeat po zakończeniu.tools.exec.approvalRunningNoticeMs(domyślnie: 10000): emituje pojedyncze powiadomienie „running”, gdy exec wymagający zatwierdzenia działa dłużej niż ten czas (0 wyłącza).tools.exec.host(domyślnie:auto; rozstrzyga się dosandbox, gdy środowisko sandbox jest aktywne, w przeciwnym razie dogateway)tools.exec.security(domyślnie:denydla sandbox,fulldla gateway + node, gdy nie ustawiono)tools.exec.ask(domyślnie:off)- Wykonanie hosta bez zatwierdzeń jest domyślne dla gateway + node. Jeśli chcesz zachowania z zatwierdzeniami/allowlist, zaostrz zarówno
tools.exec.*, jak i hostowe~/.openclaw/exec-approvals.json; zobacz Zatwierdzenia Exec. - YOLO wynika z domyślnych zasad hosta (
security=full,ask=off), a nie zhost=auto. Jeśli chcesz wymusić routing do gateway lub node, ustawtools.exec.hostalbo użyj/exec host=.... tools.exec.node(domyślnie: nieustawione)tools.exec.strictInlineEval(domyślnie: false): gdy ma wartość true, formy eval inline interpretera, takie jakpython -c,node -e,ruby -e,perl -e,php -r,lua -eiosascript -e, zawsze wymagają jawnego zatwierdzenia.allow-alwaysnadal może utrwalać zaufanie dla nieszkodliwych wywołań interpretera/skryptu, ale formy inline-eval nadal pytają za każdym razem.tools.exec.pathPrepend: lista katalogów dodawanych na początekPATHdla uruchomień exec (tylko gateway + sandbox).tools.exec.safeBins: bezpieczne binaria tylko dla stdin, które mogą działać bez jawnych wpisów allowlist. Szczegóły zachowania: Safe bins.tools.exec.safeBinTrustedDirs: dodatkowe jawne katalogi zaufane dla sprawdzania ścieżeksafeBins. WpisyPATHnigdy nie są automatycznie uznawane za zaufane. Wbudowane domyślne wartości to/bini/usr/bin.tools.exec.safeBinProfiles: opcjonalna niestandardowa polityka argv dla każdego safe bin (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Obsługa PATH
host=gateway: scalaPATHtwojej powłoki logowania ze środowiskiem exec. Nadpisaniaenv.PATHsą odrzucane dla wykonania na hoście. Sam daemon nadal działa z minimalnymPATH:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin
- macOS:
host=sandbox: uruchamiash -lc(powłoka logowania) wewnątrz kontenera, więc/etc/profilemoże resetowaćPATH. OpenClaw dodajeenv.PATHna początek po wczytaniu profilu przez wewnętrzną zmienną środowiskową (bez interpolacji powłoki);tools.exec.pathPrependdziała tutaj również.host=node: do node wysyłane są tylko nieblokowane nadpisania env, które przekażesz. Nadpisaniaenv.PATHsą odrzucane dla wykonania na hoście i ignorowane przez hosty node. Jeśli potrzebujesz dodatkowych wpisów PATH na node, skonfiguruj środowisko usługi hosta node (systemd/launchd) albo zainstaluj narzędzia w standardowych lokalizacjach.
Nadpisania sesji (/exec)
Użyj /exec, aby ustawić domyślne wartości per sesja dla host, security, ask i node.
Wyślij /exec bez argumentów, aby wyświetlić bieżące wartości.
Przykład:
Model autoryzacji
/exec jest honorowane tylko dla autoryzowanych nadawców (allowlisty kanałów/parowanie plus commands.useAccessGroups).
Aktualizuje tylko stan sesji i nie zapisuje config. Aby całkowicie wyłączyć exec, zablokuj je przez politykę
narzędzi (tools.deny: ["exec"] lub per agent). Zatwierdzenia hosta nadal mają zastosowanie, chyba że jawnie ustawisz
security=full i ask=off.
Zatwierdzenia Exec (aplikacja towarzysząca / host node)
Agenci działający w sandboxie mogą wymagać zatwierdzenia każdego żądania przed uruchomieniemexec na hoście gateway lub node.
Zobacz Zatwierdzenia Exec, aby poznać zasady, allowlist i przepływ w UI.
Gdy zatwierdzenia są wymagane, narzędzie exec natychmiast zwraca
status: "approval-pending" i identyfikator zatwierdzenia. Po zatwierdzeniu (lub odmowie / przekroczeniu czasu),
Gateway emituje zdarzenia systemowe (Exec finished / Exec denied). Jeśli polecenie nadal
działa po tools.exec.approvalRunningNoticeMs, emitowane jest pojedyncze powiadomienie Exec running.
Na kanałach z natywnymi kartami/przyciskami zatwierdzeń agent powinien najpierw polegać na tym
natywnym UI i dołączać ręczne polecenie /approve tylko wtedy, gdy wynik
narzędzia wyraźnie mówi, że zatwierdzenia na czacie są niedostępne lub ręczne zatwierdzenie jest jedyną
drogą.
Allowlist + safe bins
Ręczne wymuszanie allowlist dopasowuje tylko rozpoznane ścieżki binariów (bez dopasowań po basename). Gdysecurity=allowlist, polecenia powłoki są automatycznie dozwolone tylko wtedy, gdy każdy segment pipeline jest
na allowlist albo jest safe bin. Łączenie (;, &&, ||) i przekierowania są odrzucane w
trybie allowlist, chyba że każdy segment najwyższego poziomu spełnia allowlistę (w tym safe bins).
Przekierowania pozostają nieobsługiwane.
Trwałe zaufanie allow-always nie omija tej reguły: polecenie łańcuchowe nadal wymaga, aby każdy
segment najwyższego poziomu pasował.
autoAllowSkills to osobna wygodna ścieżka w zatwierdzeniach exec. To nie to samo co
ręczne wpisy allowlist dla ścieżek. Jeśli potrzebujesz ścisłego jawnego zaufania, pozostaw
autoAllowSkills wyłączone.
Używaj tych dwóch mechanizmów do różnych zadań:
tools.exec.safeBins: małe filtry strumieni tylko dla stdin.tools.exec.safeBinTrustedDirs: jawne dodatkowe zaufane katalogi dla ścieżek wykonywalnych safe-bin.tools.exec.safeBinProfiles: jawna polityka argv dla niestandardowych safe-bin.- allowlist: jawne zaufanie dla ścieżek wykonywalnych.
safeBins jako ogólnej allowlisty i nie dodawaj binariów interpreterów/runtime (na przykład python3, node, ruby, bash). Jeśli ich potrzebujesz, użyj jawnych wpisów allowlist i pozostaw włączone prompty zatwierdzeń.
openclaw security audit ostrzega, gdy wpisy interpreterów/runtime w safeBins nie mają jawnych profili, a openclaw doctor --fix może utworzyć brakujące wpisy niestandardowe safeBinProfiles.
openclaw security audit i openclaw doctor ostrzegają także, gdy jawnie dodasz z powrotem do safeBins binaria o szerokim zachowaniu, takie jak jq.
Jeśli jawnie dodajesz interpretery do allowlisty, włącz tools.exec.strictInlineEval, aby formy eval kodu inline nadal wymagały nowego zatwierdzenia.
Pełne szczegóły zasad i przykłady znajdziesz w Zatwierdzenia Exec i Safe bins versus allowlist.
Przykłady
Pierwszy plan:apply_patch
apply_patch to podnarzędzie exec do uporządkowanej edycji wielu plików.
Jest domyślnie włączone dla modeli OpenAI i OpenAI Codex. Używaj konfiguracji tylko
wtedy, gdy chcesz je wyłączyć lub ograniczyć do określonych modeli:
- Dostępne tylko dla modeli OpenAI/OpenAI Codex.
- Polityka narzędzi nadal ma zastosowanie;
allow: ["write"]domyślnie zezwala także naapply_patch. - Konfiguracja znajduje się w
tools.exec.applyPatch. tools.exec.applyPatch.enableddomyślnie ma wartośćtrue; ustawfalse, aby wyłączyć narzędzie dla modeli OpenAI.tools.exec.applyPatch.workspaceOnlydomyślnie ma wartośćtrue(ograniczenie do workspace). Ustawfalsetylko wtedy, gdy celowo chcesz, abyapply_patchzapisywało/usunęło pliki poza katalogiem workspace.
Powiązane
- Zatwierdzenia Exec — bramki zatwierdzeń dla poleceń powłoki
- Sandboxing — uruchamianie poleceń w środowiskach sandbox
- Proces w tle — długotrwałe exec i narzędzie process
- Bezpieczeństwo — polityka narzędzi i podwyższony dostęp