Narzędzie exec
Uruchamiaj polecenia powłoki w obszarze roboczym. Obsługuje wykonanie na pierwszym planie oraz w tle za pomocąprocess.
Jeśli process jest niedozwolone, exec działa synchronicznie i ignoruje yieldMs/background.
Sesje w tle są ograniczone do agenta; process widzi tylko sesje z 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): natychmiast w tletimeout(sekundy, domyślnie 1800): zabicie po wygaśnięciupty(bool): uruchom w pseudo-terminalu, gdy dostępny (CLI wymagające TTY, agenci kodujący, interfejsy terminalowe)host(sandbox | gateway | node): miejsce wykonaniasecurity(deny | allowlist | full): tryb egzekwowania dlagateway/nodeask(off | on-miss | always): monity zatwierdzania dlagateway/nodenode(string): identyfikator/nazwa węzła dlahost=nodeelevated(bool): żądanie trybu podwyższonego (host gateway);security=fulljest wymuszane tylko wtedy, gdy podwyższenie rozwiązuje się dofull
hostdomyślnie ma wartośćsandbox.elevatedjest ignorowane, gdy sandboxing jest wyłączony (exec już działa na hoście).- Zatwierdzenia
gateway/nodesą kontrolowane przez~/.openclaw/exec-approvals.json. nodewymaga sparowanego węzła (aplikacja towarzysząca lub bezgłowy host węzła).- Jeśli dostępnych jest wiele węzłów, ustaw
exec.nodelubtools.exec.node, aby wybrać jeden. - Na hostach innych niż Windows exec używa
SHELL, jeśli ustawione; jeśliSHELLtofish, preferujebash(lubsh) zPATH, aby uniknąć skryptów niekompatybilnych z fish, a następnie wraca doSHELL, jeśli żaden nie istnieje. - Wykonanie na hoście (
gateway/node) odrzucaenv.PATHoraz nadpisania loadera (LD_*/DYLD_*), aby zapobiec przechwyceniu binariów lub wstrzyknięciu kodu. - Ważne: sandboxing jest domyślnie wyłączony. Jeśli sandboxing jest wyłączony,
host=sandboxdziała bezpośrednio na hoście gateway (bez kontenera) i nie wymaga zatwierdzeń. Aby wymagać zatwierdzeń, uruchom zhost=gatewayi skonfiguruj zatwierdzania exec (lub włącz sandboxing).
Konfiguracja
tools.exec.notifyOnExit(domyślnie: true): gdy true, sesje exec uruchomione w tle kolejkują zdarzenie systemowe i żądają heartbeat przy zakończeniu.tools.exec.approvalRunningNoticeMs(domyślnie: 10000): emituje pojedyncze powiadomienie „uruchomione”, gdy exec objęty zatwierdzaniem działa dłużej niż ta wartość (0 wyłącza).tools.exec.host(domyślnie:sandbox)tools.exec.security(domyślnie:denydla sandbox,allowlistdla gateway + węzeł, gdy nieustawione)tools.exec.ask(domyślnie:on-miss)tools.exec.node(domyślnie: unset)tools.exec.pathPrepend: lista katalogów do dodania na początekPATHdla uruchomień exec.tools.exec.safeBins: bezpieczne binaria tylko-stdin, które mogą działać bez jawnych wpisów na liście dozwolonych.
Obsługa PATH
host=gateway: scalaPATHTwojej powłoki logowania ze środowiskiem 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łokę logowania) wewnątrz kontenera, więc/etc/profilemoże zresetowaćPATH. OpenClaw dodajeenv.PATHpo wczytaniu profilu przez wewnętrzną zmienną środowiskową (bez interpolacji powłoki);tools.exec.pathPrependma tu również zastosowanie.host=node: do węzła wysyłane są tylko nieblokowane nadpisania zmiennych środowiskowych, które przekażesz. Nadpisaniaenv.PATHsą odrzucane dla wykonania na hoście. Bezgłowe hosty węzłów akceptująPATHtylko wtedy, gdy dodaje on prefiks do PATH hosta węzła (bez zastępowania). Jeśli potrzebujesz dodatkowych wpisów PATH na węźle, skonfiguruj środowisko usługi hosta węzła (systemd/launchd) lub zainstaluj narzędzia w standardowych lokalizacjach.
Zastąpienie sesji (/exec)
Użyj /exec, aby ustawić domyślne wartości per sesję 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 wyłącznie dla autoryzowanych nadawców (listy dozwolonych kanałów/parowanie plus commands.useAccessGroups).
Aktualizuje wyłącznie stan sesji i nie zapisuje konfiguracji. Aby trwale wyłączyć exec, zablokuj go w polityce
narzędzi (tools.deny: ["exec"] lub per agent). Zatwierdzenia hosta nadal obowiązują, chyba że jawnie ustawisz
security=full i ask=off.
Zatwierdzanie exec (aplikacja towarzysząca / host węzła)
Agenci w sandboxie mogą wymagać zatwierdzenia dla każdego żądania, zanimexec uruchomi się na hoście gateway lub węzła.
Zobacz Exec approvals, aby poznać politykę, listę dozwolonych i przebieg w interfejsie.
Gdy zatwierdzenia są wymagane, narzędzie exec zwraca natychmiast
status: "approval-pending" oraz identyfikator zatwierdzenia. Po zatwierdzeniu (lub odrzuceniu / 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.
Lista dozwolonych + bezpieczne binaria
Egzekwowanie listy dozwolonych dopasowuje wyłącznie rozwiązywane ścieżki binariów (bez dopasowań po nazwie). Gdysecurity=allowlist, polecenia powłoki są automatycznie dozwolone tylko wtedy, gdy każdy segment potoku jest
na liście dozwolonych lub jest bezpiecznym binarium. Łączenie (;, &&, ||) i przekierowania są odrzucane w
trybie allowlist, chyba że każdy segment najwyższego poziomu spełnia warunki allowlist (w tym bezpieczne binaria).
Przekierowania pozostają nieobsługiwane.
Przykłady
Pierwszy plan:apply_patch (eksperymentalne)
apply_patch jest podnarzędziem exec do ustrukturyzowanych edycji wielu plików.
Włącz je jawnie:
- Dostępne wyłącznie dla modeli OpenAI/OpenAI Codex.
- Polityka narzędzi nadal obowiązuje;
allow: ["exec"]domyślnie zezwala naapply_patch. - Konfiguracja znajduje się pod
tools.exec.applyPatch. tools.exec.applyPatch.workspaceOnlydomyślnie ma wartośćtrue(ograniczone do workspace). Ustaw nafalsetylko jeśli celowo chcesz, abyapply_patchzapisywał/usuwał poza katalogiem workspace.