Tool exec
Jalankan perintah shell di workspace. Mendukung eksekusi foreground + background melaluiprocess.
Jika process tidak diizinkan, exec berjalan sinkron dan mengabaikan yieldMs/background.
Sesi background dibatasi per agent; process hanya melihat sesi dari agent yang sama.
Parameter
command(wajib)workdir(default ke cwd)env(override key/value)yieldMs(default 10000): otomatis jadi background setelah jedabackground(bool): langsung ke backgroundtimeout(detik, default 1800): hentikan saat kedaluwarsapty(bool): jalankan dalam pseudo-terminal saat tersedia (CLI khusus TTY, coding agent, 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 diselesaikan kefull
hostdefault keauto: sandbox saat runtime sandbox aktif untuk sesi tersebut, jika tidak maka gateway.autoadalah strategi perutean default, bukan wildcard.host=nodeper panggilan diizinkan dariauto;host=gatewayper panggilan hanya diizinkan saat tidak ada runtime sandbox yang aktif.- Tanpa config tambahan,
host=autotetap “langsung berfungsi”: tanpa sandbox berarti diselesaikan kegateway; sandbox yang aktif berarti tetap di sandbox. elevatedkeluar dari sandbox ke path host yang dikonfigurasi: defaultnyagateway, ataunodesaattools.exec.host=node(atau default sesi adalahhost=node). Ini hanya tersedia saat akses elevated diaktifkan untuk sesi/provider saat ini.- Persetujuan
gateway/nodedikendalikan oleh~/.openclaw/exec-approvals.json. nodememerlukan node yang dipasangkan (companion app atau host node headless).- Jika tersedia beberapa node, setel
exec.nodeatautools.exec.nodeuntuk memilih satu. exec host=nodeadalah satu-satunya jalur eksekusi shell untuk node; wrapper lamanodes.runtelah dihapus.- Pada host non-Windows, exec menggunakan
SHELLsaat disetel; jikaSHELLadalahfish, exec lebih memilihbash(ataush) dariPATHuntuk menghindari skrip yang tidak kompatibel dengan fish, lalu fallback keSHELLjika keduanya tidak ada. - Pada host Windows, exec lebih memilih penemuan PowerShell 7 (
pwsh) (Program Files, ProgramW6432, lalu PATH), lalu fallback ke Windows PowerShell 5.1. - Eksekusi host (
gateway/node) menolakenv.PATHdan override loader (LD_*/DYLD_*) untuk mencegah pembajakan biner atau injeksi kode. - OpenClaw menyetel
OPENCLAW_SHELL=execdi environment 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 diselesaikan kegateway.host=sandboxeksplisit tetap gagal secara 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
workdirefektif. Jika path skrip diselesaikan di luarworkdir, preflight dilewati untuk file itu. - Untuk pekerjaan berjalan lama yang mulai sekarang, mulai sekali dan andalkan
automatic completion wake saat diaktifkan 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 terjadwal, gunakan cron alih-alih
pola sleep/delay
exec.
Config
tools.exec.notifyOnExit(default: true): saat true, sesi exec yang dibackground akan memasukkan event sistem ke antrean dan meminta heartbeat saat selesai.tools.exec.approvalRunningNoticeMs(default: 10000): keluarkan satu pemberitahuan “running” saat exec yang dibatasi persetujuan berjalan lebih lama dari ini (0 menonaktifkan).tools.exec.host(default:auto; diselesaikan kesandboxsaat runtime sandbox aktif,gatewayjika tidak)tools.exec.security(default:denyuntuk sandbox,fulluntuk gateway + node saat tidak disetel)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 Exec approvals. - YOLO berasal dari default kebijakan host (
security=full,ask=off), bukan darihost=auto. Jika Anda ingin memaksa perutean gateway atau node, seteltools.exec.hostatau gunakan/exec host=.... - Dalam mode
security=fullplusask=off, exec host mengikuti kebijakan yang dikonfigurasi secara langsung; tidak ada prefilter heuristik tambahan untuk obfuscation perintah. tools.exec.node(default: tidak disetel)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 invokasi interpreter/skrip yang aman, tetapi bentuk inline-eval tetap meminta prompt setiap kali.tools.exec.pathPrepend: daftar direktori yang akan 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 tepercaya tambahan yang eksplisit 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: menggabungkanPATHlogin-shell Anda ke environment 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 variabel env internal (tanpa interpolasi shell);tools.exec.pathPrependjuga berlaku di sini.host=node: hanya override env yang tidak diblokir yang 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 environment 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 diotorisasi (allowlist/pairing channel plus commands.useAccessGroups).
Perintah ini hanya memperbarui state sesi dan tidak menulis config. Untuk menonaktifkan exec secara keras, tolak melalui kebijakan tool
(tools.deny: ["exec"] atau per-agent). Persetujuan host tetap berlaku kecuali Anda secara eksplisit menyetel
security=full dan ask=off.
Persetujuan exec (companion app / host node)
Agent yang disandbox dapat memerlukan persetujuan per permintaan sebelumexec berjalan pada host gateway atau node.
Lihat Exec approvals untuk kebijakan, allowlist, dan alur UI.
Saat persetujuan diperlukan, tool exec langsung mengembalikan
status: "approval-pending" dan id persetujuan. Setelah disetujui (atau ditolak / timeout),
Gateway mengeluarkan event sistem (Exec finished / Exec denied). Jika perintah masih
berjalan setelah tools.exec.approvalRunningNoticeMs, satu pemberitahuan Exec running akan dikeluarkan.
Pada channel dengan kartu/tombol persetujuan bawaan, agent sebaiknya mengandalkan
UI bawaan tersebut terlebih dahulu dan hanya menyertakan perintah manual /approve 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 diselesaikan (tanpa kecocokan nama dasar). Saatsecurity=allowlist, perintah shell hanya diizinkan otomatis jika setiap segmen pipeline
ada di allowlist atau merupakan safe bin. Chaining (;, &&, ||) dan redirection ditolak dalam
mode allowlist kecuali setiap segmen tingkat atas memenuhi allowlist (termasuk safe bin).
Redirection tetap tidak didukung.
Kepercayaan allow-always yang tahan lama tidak melewati aturan itu: perintah berantai tetap memerlukan setiap
segmen tingkat atas untuk cocok.
autoAllowSkills adalah jalur kemudahan terpisah dalam persetujuan exec. Ini tidak sama dengan
entri allowlist path manual. Untuk trust eksplisit yang ketat, biarkan autoAllowSkills nonaktif.
Gunakan dua kontrol tersebut untuk pekerjaan yang berbeda:
tools.exec.safeBins: filter stream kecil khusus stdin.tools.exec.safeBinTrustedDirs: direktori tepercaya tambahan yang eksplisit untuk path executable safe-bin.tools.exec.safeBinProfiles: kebijakan argv eksplisit untuk safe bin kustom.- allowlist: trust eksplisit untuk path executable.
safeBins sebagai allowlist generik, dan jangan tambahkan biner interpreter/runtime (misalnya python3, node, ruby, bash). Jika Anda memerlukannya, 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 membuatkan entri safeBinProfiles kustom yang belum ada.
openclaw security audit dan openclaw doctor juga memperingatkan saat Anda secara eksplisit menambahkan kembali bin dengan perilaku luas seperti jq ke safeBins.
Jika Anda secara eksplisit meng-allowlist interpreter, aktifkan tools.exec.strictInlineEval agar bentuk eval kode inline tetap memerlukan persetujuan baru.
Untuk detail kebijakan lengkap dan contoh, lihat Exec approvals dan Safe bins versus allowlist.
Contoh
Foreground:apply_patch
apply_patch adalah subtool dari exec untuk edit multi-file terstruktur.
Tool ini aktif secara default untuk model OpenAI dan OpenAI Codex. Gunakan config hanya
jika 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. - Config berada di bawah
tools.exec.applyPatch. tools.exec.applyPatch.enableddefault-nyatrue; setel kefalseuntuk menonaktifkan tool bagi model OpenAI.tools.exec.applyPatch.workspaceOnlydefault-nyatrue(terbatas di dalam workspace). Setel kefalsehanya jika Anda memang inginapply_patchmenulis/menghapus di luar direktori workspace.
Terkait
- Exec Approvals — gerbang persetujuan untuk perintah shell
- Sandboxing — menjalankan perintah dalam lingkungan sandbox
- Background Process — exec berjalan lama dan tool process
- Security — kebijakan tool dan akses elevated