Tool Exec
Jalankan perintah shell di workspace. Mendukung eksekusi latar depan + latar belakang melaluiprocess.
Jika process tidak diizinkan, exec berjalan sinkron dan mengabaikan yieldMs/background.
Sesi latar belakang dicakup per agen; process hanya melihat sesi dari agen yang sama.
Parameter
command(wajib)workdir(default ke cwd)env(override key/value)yieldMs(default 10000): latar belakang otomatis setelah jedabackground(bool): langsung ke latar belakangtimeout(detik, default 1800): hentikan saat kedaluwarsapty(bool): jalankan dalam pseudo-terminal jika tersedia (CLI khusus TTY, agen coding, UI terminal)host(auto | sandbox | gateway | node): tempat eksekusisecurity(deny | allowlist | full): mode penegakan untukgateway/nodeask(off | on-miss | always): prompt persetujuan untukgateway/nodenode(string): id/nama node untukhost=nodeelevated(bool): minta mode elevated (keluar dari sandbox ke path host yang dikonfigurasi);security=fullhanya dipaksakan saat elevated diresolusikan kefull
hostdefault keauto: sandbox saat runtime sandbox aktif untuk sesi, jika tidak maka gateway.autoadalah strategi perutean default, bukan wildcard. Per panggilanhost=nodediizinkan dariauto; per panggilanhost=gatewayhanya diizinkan saat tidak ada runtime sandbox yang aktif.- Tanpa konfigurasi tambahan,
host=autotetap “langsung berfungsi”: tanpa sandbox berarti diresolusikan kegateway; sandbox aktif berarti tetap berada di sandbox. elevatedkeluar dari sandbox ke path host yang dikonfigurasi:gatewaysecara default, ataunodesaattools.exec.host=node(atau default sesi adalahhost=node). Ini hanya tersedia saat akses elevated diaktifkan untuk sesi/penyedia saat ini.- Persetujuan
gateway/nodedikontrol oleh~/.openclaw/exec-approvals.json. nodememerlukan node yang dipasangkan (aplikasi pendamping atau host node headless).- Jika beberapa node tersedia, tetapkan
exec.nodeatautools.exec.nodeuntuk memilih salah satunya. exec host=nodeadalah satu-satunya jalur eksekusi shell untuk node; wrapper lamanodes.runtelah dihapus.- Pada host non-Windows, exec menggunakan
SHELLjika ditetapkan; jikaSHELLadalahfish, ia lebih memilihbash(ataush) dariPATHuntuk menghindari skrip yang tidak kompatibel dengan fish, lalu kembali keSHELLjika keduanya tidak ada. - Pada host Windows, exec lebih memilih penemuan PowerShell 7 (
pwsh) (Program Files, ProgramW6432, lalu PATH), lalu kembali ke Windows PowerShell 5.1. - Eksekusi host (
gateway/node) menolakenv.PATHdan override loader (LD_*/DYLD_*) untuk mencegah pembajakan biner atau kode yang disisipkan. - OpenClaw menetapkan
OPENCLAW_SHELL=execdi lingkungan perintah yang di-spawn (termasuk eksekusi PTY dan sandbox) agar aturan shell/profile dapat mendeteksi konteks tool exec. - Penting: sandboxing nonaktif secara default. Jika sandboxing nonaktif,
host=autoimplisit akan diresolusikan kegateway.host=sandboxeksplisit tetap gagal tertutup alih-alih diam-diam berjalan di host gateway. Aktifkan sandboxing atau gunakanhost=gatewaydengan persetujuan. - Pemeriksaan preflight skrip (untuk kesalahan sintaks shell Python/Node umum) hanya memeriksa file di dalam
batas
workdiryang efektif. Jika path skrip diresolusikan di luarworkdir, preflight dilewati untuk file tersebut. - Untuk pekerjaan berjalan lama yang dimulai sekarang, mulai sekali lalu andalkan
wake penyelesaian otomatis saat fitur itu aktif dan perintah menghasilkan output atau gagal.
Gunakan
processuntuk log, status, input, atau intervensi; jangan meniru penjadwalan dengan loop sleep, loop timeout, atau polling berulang. - Untuk pekerjaan yang harus terjadi nanti atau menurut jadwal, gunakan cron alih-alih
pola sleep/delay
exec.
Konfigurasi
tools.exec.notifyOnExit(default: true): saat true, sesi exec yang dilatarbelakangkan akan mengantrikan system event dan meminta heartbeat saat keluar.tools.exec.approvalRunningNoticeMs(default: 10000): kirim satu pemberitahuan “running” saat exec yang dijaga persetujuan berjalan lebih lama dari ini (0 menonaktifkan).tools.exec.host(default:auto; diresolusikan kesandboxsaat runtime sandbox aktif, jika tidak kegateway)tools.exec.security(default:denyuntuk sandbox,fulluntuk gateway + node saat tidak ditetapkan)tools.exec.ask(default:off)- Exec host tanpa persetujuan adalah default untuk gateway + node. Jika Anda ingin perilaku persetujuan/allowlist, perketat
tools.exec.*dan host~/.openclaw/exec-approvals.json; lihat Persetujuan exec. - Mode YOLO berasal dari default kebijakan host (
security=full,ask=off), bukan darihost=auto. Jika Anda ingin memaksa perutean gateway atau node, tetapkantools.exec.hostatau gunakan/exec host=.... tools.exec.node(default: tidak ditetapkan)tools.exec.strictInlineEval(default: false): saat true, bentuk eval interpreter inline sepertipython -c,node -e,ruby -e,perl -e,php -r,lua -e, danosascript -eselalu memerlukan persetujuan eksplisit.allow-alwaystetap dapat menyimpan kepercayaan untuk pemanggilan interpreter/skrip yang aman, tetapi bentuk inline-eval tetap meminta prompt setiap kali.tools.exec.pathPrepend: daftar direktori untuk ditambahkan di depanPATHuntuk run exec (hanya gateway + sandbox).tools.exec.safeBins: biner aman khusus stdin yang dapat berjalan tanpa entri allowlist eksplisit. Untuk detail perilaku, lihat Safe bins.tools.exec.safeBinTrustedDirs: direktori eksplisit tambahan yang dipercaya untuk pemeriksaan pathsafeBins. EntriPATHtidak pernah otomatis dipercaya. Default bawaan adalah/bindan/usr/bin.tools.exec.safeBinProfiles: kebijakan argv kustom opsional per safe bin (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Penanganan PATH
host=gateway: menggabungkanPATHshell login Anda ke lingkungan exec. Overrideenv.PATHditolak untuk eksekusi host. Daemon itu sendiri tetap berjalan denganPATHminimal:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin
- macOS:
host=sandbox: menjalankansh -lc(login shell) di dalam container, sehingga/etc/profiledapat meresetPATH. OpenClaw menambahkanenv.PATHdi depan setelah profile sourcing melalui env var internal (tanpa interpolasi shell);tools.exec.pathPrependjuga berlaku di sini.host=node: hanya override env yang tidak diblokir dan Anda berikan yang dikirim ke node. Overrideenv.PATHditolak untuk eksekusi host dan diabaikan oleh host node. Jika Anda memerlukan entri PATH tambahan pada node, konfigurasikan lingkungan layanan host node (systemd/launchd) atau instal tool di lokasi standar.
Override sesi (/exec)
Gunakan /exec untuk menetapkan default per sesi bagi host, security, ask, dan node.
Kirim /exec tanpa argumen untuk menampilkan nilai saat ini.
Contoh:
Model otorisasi
/exec hanya dihormati untuk pengirim yang berwenang (allowlist/pairing channel plus commands.useAccessGroups).
Ini hanya memperbarui status sesi dan tidak menulis konfigurasi. Untuk menonaktifkan exec sepenuhnya, tolak melalui kebijakan tool
(tools.deny: ["exec"] atau per agen). Persetujuan host tetap berlaku kecuali Anda secara eksplisit menetapkan
security=full dan ask=off.
Persetujuan exec (aplikasi pendamping / host node)
Agen yang disandbox dapat memerlukan persetujuan per permintaan sebelumexec berjalan di host gateway atau node.
Lihat Persetujuan exec untuk kebijakan, allowlist, dan alur UI.
Saat persetujuan diperlukan, tool exec segera mengembalikan
status: "approval-pending" dan id persetujuan. Setelah disetujui (atau ditolak / timeout),
Gateway mengirim system event (Exec finished / Exec denied). Jika perintah masih
berjalan setelah tools.exec.approvalRunningNoticeMs, satu pemberitahuan Exec running akan dikirim.
Pada channel dengan kartu/tombol persetujuan native, agen harus mengandalkan
UI native tersebut terlebih dahulu dan hanya menyertakan perintah /approve manual saat hasil
tool secara eksplisit menyatakan bahwa persetujuan chat tidak tersedia atau persetujuan manual adalah
satu-satunya jalur.
Allowlist + safe bins
Penegakan allowlist manual hanya mencocokkan path biner yang diresolusikan (tanpa pencocokan nama dasar). Saatsecurity=allowlist, perintah shell hanya diizinkan otomatis jika setiap segmen pipeline
berada dalam allowlist atau merupakan safe bin. Chaining (;, &&, ||) dan redirection ditolak dalam
mode allowlist kecuali setiap segmen tingkat atas memenuhi allowlist (termasuk safe bins).
Redirection tetap tidak didukung.
Kepercayaan allow-always yang tahan lama tidak melewati aturan itu: perintah berantai tetap memerlukan setiap
segmen tingkat atas cocok.
autoAllowSkills adalah jalur kenyamanan terpisah dalam persetujuan exec. Ini tidak sama dengan
entri allowlist path manual. Untuk kepercayaan eksplisit yang ketat, biarkan autoAllowSkills nonaktif.
Gunakan dua kontrol tersebut untuk tugas yang berbeda:
tools.exec.safeBins: filter aliran kecil khusus stdin.tools.exec.safeBinTrustedDirs: direktori tepercaya eksplisit tambahan untuk path executable safe-bin.tools.exec.safeBinProfiles: kebijakan argv eksplisit untuk safe bin kustom.- allowlist: kepercayaan eksplisit untuk path executable.
safeBins sebagai allowlist umum, dan jangan tambahkan biner interpreter/runtime (misalnya python3, node, ruby, bash). Jika Anda memerlukan itu, gunakan entri allowlist eksplisit dan tetap aktifkan prompt persetujuan.
openclaw security audit memperingatkan saat entri interpreter/runtime safeBins tidak memiliki profil eksplisit, dan openclaw doctor --fix dapat membuat kerangka entri safeBinProfiles kustom yang hilang.
openclaw security audit dan openclaw doctor juga memperingatkan saat Anda secara eksplisit menambahkan kembali bin berperilaku luas seperti jq ke safeBins.
Jika Anda secara eksplisit mengizinkan interpreter, aktifkan tools.exec.strictInlineEval agar bentuk eval kode inline tetap memerlukan persetujuan baru.
Untuk detail kebijakan lengkap dan contohnya, lihat Persetujuan exec dan Safe bins versus allowlist.
Contoh
Latar depan:apply_patch
apply_patch adalah subtool dari exec untuk edit multi-file terstruktur.
Ini aktif secara default untuk model OpenAI dan OpenAI Codex. Gunakan konfigurasi hanya
saat Anda ingin menonaktifkannya atau membatasinya ke model tertentu:
- Hanya tersedia untuk model OpenAI/OpenAI Codex.
- Kebijakan tool tetap berlaku;
allow: ["write"]secara implisit mengizinkanapply_patch. - Konfigurasi berada di bawah
tools.exec.applyPatch. tools.exec.applyPatch.enableddefault ketrue; tetapkan kefalseuntuk menonaktifkan tool ini bagi model OpenAI.tools.exec.applyPatch.workspaceOnlydefault ketrue(terbatas pada workspace). Tetapkan kefalsehanya jika Anda memang sengaja inginapply_patchmenulis/menghapus di luar direktori workspace.
Terkait
- Persetujuan Exec — gerbang persetujuan untuk perintah shell
- Sandboxing — menjalankan perintah di lingkungan yang disandbox
- Proses Latar Belakang — exec berjalan lama dan tool process
- Keamanan — kebijakan tool dan akses elevated