Tools
Narzędzie Exec
Uruchamiaj polecenia powłoki w obszarze roboczym. Obsługuje wykonywanie pierwszoplanowe i w tle przez process.
Jeśli process jest niedozwolone, exec działa synchronicznie i ignoruje yieldMs/background.
Sesje w tle są ograniczone do danego agenta; process widzi tylko sesje tego samego agenta.
Parametry
commandstringrequiredPolecenie powłoki do uruchomienia.
workdirstringKatalog roboczy dla polecenia.
envobjectNadpisania środowiska w postaci klucz/wartość scalane z odziedziczonym środowiskiem.
yieldMsnumberAutomatycznie przenieś polecenie do tła po tym opóźnieniu (ms).
backgroundbooleanNatychmiast przenieś polecenie do tła zamiast czekać na yieldMs.
timeoutnumberNadpisz skonfigurowany limit czasu exec dla tego wywołania. Ustaw timeout: 0 tylko wtedy, gdy polecenie powinno działać bez limitu czasu procesu exec.
ptybooleanUruchom w pseudoterminalu, gdy jest dostępny. Używaj dla CLI wymagających TTY, agentów kodujących i terminalowych interfejsów UI.
host'auto' | 'sandbox' | 'gateway' | 'node'Miejsce wykonania. auto rozwiązuje się do sandbox, gdy środowisko uruchomieniowe piaskownicy jest aktywne, a w przeciwnym razie do gateway.
security'deny' | 'allowlist' | 'full'Tryb egzekwowania dla wykonywania gateway / node.
ask'off' | 'on-miss' | 'always'Zachowanie monitu o zatwierdzenie dla wykonywania gateway / node.
nodestringIdentyfikator/nazwa Node, gdy host=node.
elevatedbooleanZażądaj trybu podwyższonego — opuść piaskownicę na skonfigurowaną ścieżkę hosta. security=full jest wymuszane tylko wtedy, gdy elevated rozwiązuje się do full.
Uwagi:
hostdomyślnie ma wartośćauto: piaskownica, gdy środowisko uruchomieniowe piaskownicy jest aktywne dla sesji, w przeciwnym razie gateway.hostakceptuje tylkoauto,sandbox,gatewaylubnode. Nie jest selektorem nazwy hosta; wartości przypominające nazwy hostów są odrzucane przed uruchomieniem polecenia.autoto domyślna strategia routingu, a nie wieloznacznik.host=nodena poziomie wywołania jest dozwolone zauto;host=gatewayna poziomie wywołania jest dozwolone tylko wtedy, gdy żadne środowisko uruchomieniowe piaskownicy nie jest aktywne.- Bez dodatkowej konfiguracji
host=autonadal „po prostu działa”: brak piaskownicy oznacza rozwiązanie dogateway; aktywna piaskownica oznacza pozostanie w piaskownicy. elevatedopuszcza piaskownicę na skonfigurowaną ścieżkę hosta: domyślniegatewayalbonode, gdytools.exec.host=node(lub domyślna wartość 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 Node (aplikacji towarzyszącej lub bezgłowego hosta 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.timeoutma zastosowanie do wykonywania pierwszoplanowego, w tle,yieldMs, gateway, piaskownicy i wykonywaniasystem.runna Node. Jeśli zostanie pominięte, OpenClaw używatools.exec.timeoutSec; jawnetimeout: 0wyłącza limit czasu procesu exec dla tego wywołania.- Na hostach innych niż Windows exec używa
SHELL, gdy jest ustawione; jeśliSHELLtofish, preferujebash(lubsh) zPATH, aby uniknąć skryptów niezgodnych z fish, a następnie wraca doSHELL, jeśli żadne z nich nie istnieje. - Na hostach Windows exec preferuje wykrywanie PowerShell 7 (
pwsh) (Program Files, ProgramW6432, a następnie PATH), po czym wraca do Windows PowerShell 5.1. - Wykonywanie na hoście (
gateway/node) odrzucaenv.PATHi nadpisania loadera (LD_*/DYLD_*), aby zapobiec podmianie binariów lub wstrzyknięciu kodu. - OpenClaw ustawia
OPENCLAW_SHELL=execw środowisku uruchamianego polecenia (w tym wykonywania PTY i piaskownicy), aby reguły powłoki/profilu mogły wykryć kontekst narzędzia exec. openclaw channels loginjest blokowane zexec, ponieważ jest interaktywnym przepływem uwierzytelniania kanału; uruchom je w terminalu na hoście Gateway albo użyj natywnego dla kanału narzędzia logowania z czatu, gdy istnieje.- Ważne: piaskownica jest domyślnie wyłączona. Jeśli piaskownica jest wyłączona, niejawne
host=autorozwiązuje się dogateway. Jawnehost=sandboxnadal kończy się zamknięciem z błędem zamiast po cichu uruchamiać się na hoście Gateway. Włącz piaskownicę albo użyjhost=gatewayz zatwierdzeniami. - Wstępne kontrole skryptów (dla typowych błędów składni powłoki Python/Node) sprawdzają tylko pliki wewnątrz
efektywnej granicy
workdir. Jeśli ścieżka skryptu rozwiązuje się pozaworkdir, kontrola wstępna jest pomijana dla tego pliku. - W przypadku długo działającej pracy, która zaczyna się teraz, uruchom ją raz i polegaj na automatycznym
wybudzeniu po ukończeniu, gdy jest włączone, a polecenie emituje dane wyjściowe lub kończy się błędem.
Użyj
processdo logów, stanu, wejścia lub interwencji; nie emuluj harmonogramowania pętlami sleep, pętlami timeout ani powtarzanym odpytywaniem. - W przypadku pracy, która powinna wydarzyć się później lub według harmonogramu, użyj Cron zamiast
wzorców sleep/opóźnienia z
exec.
Konfiguracja
tools.exec.notifyOnExit(domyślnie: true): gdy true, przeniesione do tła sesje exec kolejkowują zdarzenie systemowe i żądają Heartbeat przy zakończeniu.tools.exec.approvalRunningNoticeMs(domyślnie: 10000): wyemituj pojedyncze powiadomienie „running”, gdy exec objęte zatwierdzeniem działa dłużej niż ta wartość (0 wyłącza).tools.exec.timeoutSec(domyślnie: 1800): domyślny limit czasu exec na polecenie w sekundach.timeoutna poziomie wywołania go nadpisuje;timeout: 0na poziomie wywołania wyłącza limit czasu procesu exec.tools.exec.host(domyślnie:auto; rozwiązuje się dosandbox, gdy środowisko uruchomieniowe piaskownicy jest aktywne, w przeciwnym razie dogateway)tools.exec.security(domyślnie:denydla piaskownicy,fulldla gateway + node, gdy nieustawione)tools.exec.ask(domyślnie:off)- Exec hosta bez zatwierdzeń jest domyślne dla gateway + node. Jeśli chcesz zachowania zatwierdzeń/listy dozwolonych, 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 gateway lub node, ustawtools.exec.hostalbo użyj/exec host=.... - W trybie
security=fullplusask=offexec hosta bezpośrednio przestrzega skonfigurowanych zasad; nie ma dodatkowego heurystycznego prefiltra zaciemniania poleceń ani warstwy odrzucania kontroli wstępnej skryptów. tools.exec.node(domyślnie: nieustawione)tools.exec.strictInlineEval(domyślnie: false): gdy true, formularze inline eval interpreterów, takie jakpython -c,node -e,ruby -e,perl -e,php -r,lua -eiosascript -e, zawsze wymagają jawnego zatwierdzenia.allow-alwaysnadal może utrwalać łagodne wywołania interpretera/skryptu, ale formularze inline-eval nadal wyświetlają monit za każdym razem.tools.exec.pathPrepend: lista katalogów do dodania na początkuPATHdla uruchomień exec (tylko gateway + piaskownica).tools.exec.safeBins: bezpieczne binaria tylko stdin, które mogą działać bez jawnych wpisów listy dozwolonych. Szczegóły zachowania znajdziesz w Bezpieczne binaria.tools.exec.safeBinTrustedDirs: dodatkowe jawne katalogi zaufane dla kontroli ścieżeksafeBins. WpisyPATHnigdy nie są automatycznie zaufane. Wbudowane wartości domyślne to/bini/usr/bin.tools.exec.safeBinProfiles: opcjonalne niestandardowe zasady argv dla każdego bezpiecznego binarium (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Przykład:
{
tools: {
exec: {
pathPrepend: ["~/bin", "/opt/oss/bin"],
},
},
}
Obsługa PATH
host=gateway: scalaPATHz Twojej powłoki logowania ze środowiskiem exec. Nadpisaniaenv.PATHsą odrzucane dla wykonywania 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.PATHna początku po wczytaniu profilu przez wewnętrzną zmienną środowiskową (bez interpolacji powłoki);tools.exec.pathPrependma tu również zastosowanie.host=node: tylko nieblokowane nadpisania środowiska, które przekażesz, są wysyłane do Node. Nadpisaniaenv.PATHsą odrzucane dla wykonywania 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.
Powiązanie Node na agenta (użyj indeksu listy agentów w konfiguracji):
openclaw config get agents.list
openclaw config set agents.list[0].tools.exec.node "node-id-or-name"
Interfejs Control UI: karta Nodes zawiera mały panel „Exec node binding” dla tych samych ustawień.
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:
/exec host=auto security=allowlist ask=on-miss node=mac-1
Model autoryzacji
/exec jest honorowane tylko dla autoryzowanych nadawców (listy dozwolonych/parowanie kanałów plus commands.useAccessGroups).
Aktualizuje tylko stan sesji i nie zapisuje konfiguracji. Aby trwale wyłączyć exec, odmów go przez zasady narzędzi
(tools.deny: ["exec"] lub na poziomie agenta). Zatwierdzenia hosta nadal obowiązują, chyba że jawnie ustawisz
security=full i ask=off.
Zatwierdzenia exec (aplikacja towarzysząca / host Node)
Agenci w piaskownicy mogą wymagać zatwierdzenia na każde żądanie, zanim exec uruchomi się na hoście Gateway lub Node.
Zobacz Zatwierdzenia exec, aby poznać zasady, listę dozwolonych i przepływ UI.
Gdy wymagane są zatwierdzenia, narzędzie exec natychmiast zwraca
status: "approval-pending" oraz identyfikator zatwierdzenia. Po zatwierdzeniu (lub odmowie / upłynięciu limitu 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 zatwierdzania agent powinien najpierw polegać na tym
natywnym UI i dołączać ręczne polecenie /approve tylko wtedy, gdy wynik narzędzia
jawnie mówi, że zatwierdzenia czatu są niedostępne lub ręczne zatwierdzenie jest
jedyną ścieżką.
Lista dozwolonych + bezpieczne binaria
Ręczne egzekwowanie listy dozwolonych dopasowuje globs rozwiązanych ścieżek binarnych i same nazwy poleceń
globs. Same nazwy dopasowują tylko polecenia wywoływane przez PATH, więc rg może dopasować
/opt/homebrew/bin/rg, gdy polecenie to rg, ale nie ./rg ani /tmp/rg.
Gdy security=allowlist, polecenia powłoki są automatycznie dozwolone tylko wtedy, gdy każdy segment
potoku znajduje się na liście dozwolonych lub jest bezpiecznym binarium. Łączenie (;, &&, ||) i przekierowania
są odrzucane w trybie listy dozwolonych, chyba że każdy segment najwyższego poziomu spełnia
listę dozwolonych (w tym bezpieczne binaria). Przekierowania pozostają nieobsługiwane.
Trwałe zaufanie allow-always nie omija tej reguły: połączone polecenie nadal wymaga, aby każdy
segment najwyższego poziomu pasował.
autoAllowSkills to oddzielna wygodna ścieżka w zatwierdzeniach exec. Nie jest tym samym co
ręczne wpisy listy dozwolonych ścieżek. Dla ś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 strumieniowe tylko stdin.tools.exec.safeBinTrustedDirs: jawne dodatkowe zaufane katalogi dla ścieżek wykonywalnych bezpiecznych binariów.tools.exec.safeBinProfiles: jawne zasady argv dla niestandardowych bezpiecznych binariów.- lista dozwolonych: jawne zaufanie dla ścieżek wykonywalnych.
Nie traktuj safeBins jako ogólnej listy dozwolonych elementów i nie dodawaj binariów interpreterów/środowisk uruchomieniowych (na przykład python3, node, ruby, bash). Jeśli ich potrzebujesz, użyj jawnych wpisów listy dozwolonych elementów i pozostaw włączone monity o zatwierdzenie.
openclaw security audit ostrzega, gdy wpisom safeBins interpreterów/środowisk uruchomieniowych brakuje jawnych profili, a openclaw doctor --fix może utworzyć szkielet brakujących niestandardowych wpisów safeBinProfiles.
openclaw security audit i openclaw doctor ostrzegają również, gdy jawnie dodasz z powrotem do safeBins binaria o szerokim zachowaniu, takie jak jq.
Jeśli jawnie dodajesz interpretery do listy dozwolonych elementów, włącz tools.exec.strictInlineEval, aby formy ewaluacji kodu w wierszu nadal wymagały nowego zatwierdzenia.
Pełne szczegóły zasad i przykłady znajdziesz w Zatwierdzeniach exec oraz Bezpieczne binaria kontra lista dozwolonych elementów.
Przykłady
Na pierwszym planie:
{ "tool": "exec", "command": "ls -la" }
W tle + odpytywanie:
{"tool":"exec","command":"npm run build","yieldMs":1000}
{"tool":"process","action":"poll","sessionId":"<id>"}
Odpytywanie służy do sprawdzania stanu na żądanie, a nie do pętli oczekiwania. Jeśli automatyczne wybudzanie po ukończeniu jest włączone, polecenie może wybudzić sesję, gdy wygeneruje wyjście lub zakończy się niepowodzeniem.
Wyślij klawisze (w stylu tmux):
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Enter"]}
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["C-c"]}
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Up","Up","Enter"]}
Prześlij (wyślij tylko CR):
{ "tool": "process", "action": "submit", "sessionId": "<id>" }
Wklej (domyślnie w trybie bracketed):
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }
apply_patch
apply_patch jest podnarzędziem exec do strukturalnych edycji wielu plików.
Jest domyślnie włączone dla modeli OpenAI i OpenAI Codex. Użyj konfiguracji tylko
wtedy, gdy chcesz je wyłączyć lub ograniczyć do określonych modeli:
{
tools: {
exec: {
applyPatch: { workspaceOnly: true, allowModels: ["gpt-5.5"] },
},
},
}
Uwagi:
- Dostępne tylko dla modeli OpenAI/OpenAI Codex.
- Zasady narzędzi nadal obowiązują;
allow: ["write"]niejawnie zezwala naapply_patch. deny: ["write"]nie odmawiaapply_patch; odmówapply_patchjawnie albo użyjdeny: ["group:fs"], gdy zapisy przez łatki również powinny być blokowane.- Konfiguracja znajduje się pod
tools.exec.applyPatch. tools.exec.applyPatch.enableddomyślnie ma wartośćtrue; ustaw ją nafalse, aby wyłączyć narzędzie dla modeli OpenAI.tools.exec.applyPatch.workspaceOnlydomyślnie ma wartośćtrue(ograniczone do obszaru roboczego). Ustaw ją nafalsetylko wtedy, gdy celowo chcesz, abyapply_patchzapisywało/usuwało poza katalogiem obszaru roboczego.
Powiązane
- Zatwierdzenia exec — bramki zatwierdzania dla poleceń powłoki
- Sandboxing — uruchamianie poleceń w środowiskach sandboxowych
- Proces w tle — długo działające exec i narzędzie procesu
- Bezpieczeństwo — zasady narzędzi i podwyższony dostęp