Narzędzie Exec
Uruchamia polecenia powłoki w obszarze roboczym. Obsługuje wykonanie na pierwszym planie i w tle przezprocess.
Jeśli process jest niedozwolone, exec działa synchronicznie i ignoruje yieldMs/background.
Sesje 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 do tła po opóźnieniubackground(bool): natychmiastowe uruchomienie w tletimeout(sekundy, domyślnie 1800): zabicie po wygaśnięciupty(bool): uruchomienie w pseudo-terminalu, gdy dostępny (CLI tylko z TTY, agenci kodujący, interfejsy terminalowe)host(auto | sandbox | gateway | node): miejsce wykonaniasecurity(deny | allowlist | full): tryb egzekwowania dlagateway/nodeask(off | on-miss | always): prompty zatwierdzeń dlagateway/nodenode(string): identyfikator/nazwa węzła dlahost=nodeelevated(bool): żądanie trybu podwyższonego (wyjście z sandboxa na skonfigurowaną ścieżkę hosta);security=fulljest wymuszane tylko wtedy, gdy elevated rozpozna się jakofull
hostdomyślnie ma wartośćauto: sandbox, gdy runtime sandboxa jest aktywny dla sesji, w przeciwnym razie gateway.autoto domyślna strategia routingu, a nie wildcard.host=nodedla pojedynczego wywołania jest dozwolone zauto;host=gatewaydla pojedynczego wywołania jest dozwolone tylko wtedy, gdy żaden runtime sandboxa nie jest aktywny.- Bez dodatkowej konfiguracji
host=autonadal „po prostu działa”: bez sandboxa rozpoznaje się dogateway; aktywny sandbox utrzymuje wykonanie w sandboxie. elevatedwychodzi z sandboxa na skonfigurowaną ścieżkę hosta: domyślniegatewaylubnode, gdytools.exec.host=node(albo domyślna sesji tohost=node). Jest dostępne tylko wtedy, gdy dostęp podwyższony jest włączony dla bieżącej sesji/dostawcy.- Zatwierdzenia
gateway/nodesą kontrolowane przez~/.openclaw/exec-approvals.json. nodewymaga sparowanego węzła (aplikacja towarzysząca lub bezgłowy host node).- Jeśli dostępnych jest wiele węzłów, ustaw
exec.nodelubtools.exec.node, aby wybrać jeden. exec host=nodeto jedyna ścieżka wykonywania powłoki dla węzłów; starsze opakowanienodes.runzostało usunięte.- 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 przechodzi awaryjnie 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 przechodzi awaryjnie do Windows PowerShell 5.1. - Wykonanie na hoście (
gateway/node) odrzucaenv.PATHi nadpisania loadera (LD_*/DYLD_*), aby zapobiec przechwytywaniu binarek lub wstrzyknięciu kodu. - OpenClaw ustawia
OPENCLAW_SHELL=execw środowisku uruchomionego polecenia (w tym dla wykonania PTY i w sandboxie), aby reguły powłoki/profilu mogły wykryć kontekst narzędzia exec. - Ważne: sandboxing jest domyślnie wyłączony. Jeśli sandboxing jest wyłączony, niejawne
host=autorozpoznaje się dogateway. Jawnehost=sandboxnadal kończy się bezpieczną odmową zamiast cicho 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 rozpoznaje się pozaworkdir, kontrola wstępna jest pomijana dla tego pliku. - W przypadku długotrwałej pracy, która zaczyna się teraz, uruchom ją raz i polegaj na automatycznym
wybudzeniu po zakończeniu, gdy jest włączone, a polecenie emituje dane wyjściowe lub kończy się błędem.
Używaj
processdo logów, stanu, wejścia lub interwencji; nie emuluj planowania za pomocą pętli sleep, pętli timeout ani wielokrotnego odpytywania. - Dla pracy, która ma wydarzyć się później albo według harmonogramu, używaj crona zamiast
wzorców sleep/delay w
exec.
Config
tools.exec.notifyOnExit(domyślnie: true): gdy true, sesje exec uruchomione w tle kolejkają zdarzenie systemowe i żądają heartbeat po zakończeniu.tools.exec.approvalRunningNoticeMs(domyślnie: 10000): emituje pojedyncze powiadomienie „running”, gdy exec objęty zatwierdzeniem działa dłużej niż ten czas (0 wyłącza).tools.exec.host(domyślnie:auto; rozpoznaje się dosandbox, gdy runtime sandboxa jest aktywny, w przeciwnym razie dogateway)tools.exec.security(domyślnie:denydla sandboxa,fulldla gateway + node, gdy nieustawione)tools.exec.ask(domyślnie:off)- Wykonanie hosta bez zatwierdzeń to ustawienie domyślne dla gateway + node. Jeśli chcesz zachowania z zatwierdzeniami/listą dozwolonych, zaostrz zarówno
tools.exec.*, jak i zasady hosta w~/.openclaw/exec-approvals.json; zobacz Zatwierdzenia exec. - YOLO wynika z domyślnych ustawień zasad hosta (
security=full,ask=off), a nie zhost=auto. Jeśli chcesz wymusić routing przez gateway lub node, ustawtools.exec.hostalbo użyj/exec host=.... - W trybie
security=fullplusask=offwykonanie hosta stosuje skonfigurowaną politykę bezpośrednio; nie ma dodatkowego heurystycznego prefiltru zaciemniania poleceń. tools.exec.node(domyślnie: nieustawione)tools.exec.strictInlineEval(domyślnie: false): gdy true, formy inline eval interpreterów, takie jakpython -c,node -e,ruby -e,perl -e,php -r,lua -eiosascript -e, zawsze wymagają jawnego zatwierdzenia.allow-alwaysmoże nadal utrwalać łagodne wywołania interpretera/skryptu, ale formy inline eval nadal pytają za każdym razem.tools.exec.pathPrepend: lista katalogów do dodania na początekPATHdla uruchomień exec (tylko gateway + sandbox).tools.exec.safeBins: bezpieczne binarki tylko do stdin, które mogą działać bez jawnych wpisów na liście dozwolonych. Szczegóły zachowania znajdziesz w Safe bins.tools.exec.safeBinTrustedDirs: dodatkowe jawne katalogi zaufane dla kontroli ścieżek wykonywalnychsafeBins. WpisyPATHnigdy nie stają się automatycznie zaufane. Wbudowane wartości domyślne 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: scalaPATHz powłoki logowania do środowiska exec. Nadpisaniaenv.PATHsą odrzucane dla wykonania na hoście. Sam demon 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 zresetowaćPATH. OpenClaw dodajeenv.PATHna początek po wczytaniu profilu przez wewnętrzną zmienną env (bez interpolacji powłoki);tools.exec.pathPrependtakże ma tu zastosowanie.host=node: tylko nieblokowane nadpisania env, które przekażesz, są wysyłane do węzła. Nadpisaniaenv.PATHsą odrzucane dla wykonania na hoście i ignorowane przez hosty node. Jeśli potrzebujesz dodatkowych wpisów PATH na węźle, 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 dla sesji 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 (listy dozwolonych kanału/parowanie plus commands.useAccessGroups).
Aktualizuje tylko stan sesji i nie zapisuje config. Aby całkowicie wyłączyć exec, zabroń go przez politykę narzędzi
(tools.deny: ["exec"] lub dla konkretnego agenta). Zatwierdzenia hosta nadal obowiązują, 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 dla każdego żądania, zanimexec uruchomi się na hoście gateway lub node.
Zobacz Zatwierdzenia exec, aby poznać politykę, listę dozwolonych i przepływ UI.
Gdy zatwierdzenia są wymagane, narzędzie exec zwraca natychmiast
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.
W kanałach z natywnymi kartami/przyciskami zatwierdzeń agent powinien w pierwszej kolejności 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ą ścieżką.
Allowlist + safe bins
Ręczne egzekwowanie listy dozwolonych dopasowuje tylko rozpoznane ścieżki binarek (bez dopasowań po samej nazwie). Gdysecurity=allowlist, polecenia powłoki są automatycznie dozwolone tylko wtedy, gdy każdy segment potoku jest
na liście dozwolonych lub jest safe bin. Łączenie (;, &&, ||) i przekierowania są odrzucane w
trybie allowlist, chyba że każdy segment najwyższego poziomu spełnia warunki listy dozwolonych (w tym safe bins).
Przekierowania pozostają nieobsługiwane.
Trwałe zaufanie allow-always nie omija tej reguły: polecenie łączone nadal wymaga, aby każdy
segment najwyższego poziomu pasował.
autoAllowSkills to osobna ścieżka wygody w zatwierdzeniach exec. To nie to samo co
ręczne wpisy ścieżek na liście dozwolonych. Dla ścisłego jawnego zaufania trzymaj autoAllowSkills wyłączone.
Używaj tych dwóch mechanizmów do różnych zadań:
tools.exec.safeBins: małe filtry strumieni działające tylko na stdin.tools.exec.safeBinTrustedDirs: jawne dodatkowe zaufane katalogi dla ścieżek wykonywalnych safe bin.tools.exec.safeBinProfiles: jawna polityka argv dla niestandardowych safe bins.- allowlist: jawne zaufanie dla ścieżek wykonywalnych.
safeBins jako ogólnej listy dozwolonych i nie dodawaj binarek interpreterów/runtime (na przykład python3, node, ruby, bash). Jeśli ich potrzebujesz, użyj jawnych wpisów na liście dozwolonych i pozostaw włączone prompty zatwierdzeń.
openclaw security audit ostrzega, gdy wpisom interpreterów/runtime w safeBins brakuje jawnych profili, a openclaw doctor --fix może utworzyć brakujące niestandardowe wpisy safeBinProfiles.
openclaw security audit i openclaw doctor ostrzegają także, gdy jawnie dodajesz z powrotem do safeBins binarki o szerokim zachowaniu, takie jak jq.
Jeśli jawnie umieszczasz interpretery na liście dozwolonych, włącz tools.exec.strictInlineEval, aby formy inline code-eval nadal wymagały nowego zatwierdzenia.
Pełne szczegóły polityki i przykłady znajdziesz w Zatwierdzenia exec i Safe bins a allowlist.
Przykłady
Pierwszy plan:apply_patch
apply_patch to podnarzędzie exec do ustrukturyzowanych wieloplikowych edycji.
Jest domyślnie włączone dla modeli OpenAI i OpenAI Codex. Używaj config tylko
wtedy, gdy chcesz je wyłączyć lub ograniczyć do konkretnych modeli:
- Dostępne tylko dla modeli OpenAI/OpenAI Codex.
- Polityka narzędzi nadal obowiązuje;
allow: ["write"]domyślnie zezwala także naapply_patch. - Config znajduje się pod
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(ograniczone do obszaru roboczego). Ustawfalsetylko wtedy, gdy celowo chcesz, abyapply_patchzapisywało/usuwalo poza katalogiem obszaru roboczego.
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 dostęp podwyższony