Tools
Alat eksekusi
Jalankan perintah shell di workspace. exec adalah permukaan shell yang memutasi: perintah dapat membuat, mengedit, atau menghapus file di mana pun host atau sistem file sandbox yang dipilih mengizinkan. Menonaktifkan alat sistem file OpenClaw seperti write, edit, atau apply_patch tidak membuat exec menjadi hanya-baca.
Mendukung eksekusi foreground + background melalui process. Jika process tidak diizinkan, exec berjalan secara sinkron dan mengabaikan yieldMs/background.
Sesi background dicakup per agen; process hanya melihat sesi dari agen yang sama.
Parameter
commandstringrequiredPerintah shell untuk dijalankan.
workdirstringdefault: cwdDirektori kerja untuk perintah.
envobjectOverride lingkungan kunci/nilai yang digabungkan di atas lingkungan yang diwarisi.
yieldMsnumberdefault: 10000Jadikan perintah background otomatis setelah penundaan ini (md).
backgroundbooleandefault: falseJadikan perintah background segera alih-alih menunggu yieldMs.
timeoutnumberdefault: tools.exec.timeoutSecTimpa timeout exec yang dikonfigurasi untuk panggilan ini. Tetapkan timeout: 0 hanya ketika perintah harus berjalan tanpa timeout proses exec.
ptybooleandefault: falseJalankan di terminal semu saat tersedia. Gunakan untuk CLI khusus TTY, agen pengkodean, dan UI terminal.
host'auto' | 'sandbox' | 'gateway' | 'node'default: autoTempat mengeksekusi. auto diselesaikan menjadi sandbox ketika runtime sandbox aktif dan menjadi gateway jika tidak.
security'deny' | 'allowlist' | 'full'Diabaikan untuk panggilan alat normal. Keamanan gateway / node dikendalikan oleh
tools.exec.security dan file persetujuan host; mode elevated dapat
memaksa security=full hanya ketika operator secara eksplisit memberikan akses elevated.
ask'off' | 'on-miss' | 'always'Mode tanya dasar berasal dari tools.exec.ask dan persetujuan host.
Untuk panggilan model yang berasal dari channel, ask per panggilan diabaikan ketika
ask host efektif adalah off; jika tidak, ini hanya dapat diperketat ke mode yang lebih ketat.
Pemanggil internal/API tepercaya yang membuat alat exec dengan nilai ask
eksplisit tidak berubah.
nodestringID/nama Node ketika host=node.
elevatedbooleandefault: falseMinta mode elevated — keluar dari sandbox ke jalur host yang dikonfigurasi. security=full dipaksa hanya ketika elevated diselesaikan menjadi full.
Catatan:
hostdefault keauto: sandbox ketika runtime sandbox aktif untuk sesi, jika tidak gateway.hosthanya menerimaauto,sandbox,gateway, ataunode. Ini bukan pemilih nama host; nilai mirip nama host ditolak sebelum perintah berjalan.autoadalah strategi routing default, bukan wildcard.host=nodeper panggilan diizinkan dariauto;host=gatewayper panggilan hanya diizinkan ketika tidak ada runtime sandbox yang aktif.tools.exec.modeadalah tombol kebijakan yang dinormalisasi. Nilainya adalahdeny,allowlist,ask,auto, danfull.automenjalankan kecocokan allowlist/safe-bin deterministik secara langsung dan merutekan setiap kasus persetujuan exec yang tersisa melalui peninjau otomatis native OpenClaw sebelum meminta manusia.ask/ask=alwaystetap meminta manusia setiap kali.- Tanpa konfigurasi tambahan,
host=autotetap "langsung berfungsi": tanpa sandbox berarti diselesaikan menjadigateway; sandbox aktif berarti tetap berada di sandbox. elevatedkeluar dari sandbox ke jalur host yang dikonfigurasi:gatewaysecara default, ataunodeketikatools.exec.host=node(atau default sesi adalahhost=node). Ini hanya tersedia ketika akses elevated diaktifkan untuk sesi/penyedia saat ini.- Persetujuan
gateway/nodedikendalikan oleh file persetujuan host. nodememerlukan node berpasangan (aplikasi pendamping atau host node headless).- Jika beberapa node tersedia, tetapkan
exec.nodeatautools.exec.nodeuntuk memilih salah satu. exec host=nodeadalah satu-satunya jalur eksekusi shell untuk node; wrapper lamanodes.runtelah dihapus.timeoutberlaku untuk eksekusi foreground, background,yieldMs, gateway, sandbox, dansystem.runnode. Jika dihilangkan, OpenClaw menggunakantools.exec.timeoutSec;timeout: 0eksplisit menonaktifkan timeout proses exec untuk panggilan tersebut.- Pada host non-Windows, exec menggunakan
SHELLsaat ditetapkan; 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. - Pada host gateway non-Windows, perintah exec bash dan zsh menggunakan snapshot startup. OpenClaw menangkap
alias/fungsi yang dapat di-source dan sekumpulan kecil lingkungan aman dari file startup shell ke
$OPENCLAW_STATE_DIR/cache/shell-snapshots/, lalu men-source snapshot tersebut sebelum setiap perintah exec. Variabel yang tampak seperti rahasia dikecualikan; exec sandbox dan node tidak menggunakan snapshot ini. TetapkanOPENCLAW_EXEC_SHELL_SNAPSHOT=0di lingkungan proses Gateway untuk menonaktifkan jalur snapshot ini. - Eksekusi host (
gateway/node) menolakenv.PATHdan override loader (LD_*/DYLD_*) untuk mencegah pembajakan biner atau kode yang disuntikkan. - OpenClaw menetapkan
OPENCLAW_SHELL=execdi lingkungan perintah yang dibuat (termasuk eksekusi PTY dan sandbox) sehingga aturan shell/profil dapat mendeteksi konteks alat exec. - Untuk run yang berasal dari channel, OpenClaw juga mengekspos payload JSON identitas pengirim/chat yang sempit di
OPENCLAW_CHANNEL_CONTEXTketika channel menyediakan id tersebut. openclaw channels logindiblokir dariexeckarena merupakan alur autentikasi channel interaktif; jalankan di terminal pada host gateway, atau gunakan alat login native channel dari chat saat tersedia.- Penting: sandboxing nonaktif secara default. Jika sandboxing nonaktif,
host=autoimplisit diselesaikan menjadigateway.host=sandboxeksplisit tetap gagal tertutup alih-alih diam-diam berjalan pada 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 jalur skrip diselesaikan di luarworkdir, preflight dilewati untuk file tersebut. - Untuk pekerjaan berjalan lama yang dimulai sekarang, mulai sekali dan andalkan wake penyelesaian
otomatis 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 sesuai jadwal, gunakan cron alih-alih
pola sleep/penundaan
exec.
Konfigurasi
tools.exec.notifyOnExit(default: true): ketika true, sesi exec yang di-background mengantrekan event sistem dan meminta Heartbeat saat keluar.tools.exec.approvalRunningNoticeMs(default: 10000): memancarkan satu pemberitahuan "berjalan" ketika exec yang dibatasi persetujuan berjalan lebih lama dari ini (0 menonaktifkan).tools.exec.timeoutSec(default: 1800): timeout exec default per perintah dalam detik.timeoutper panggilan menimpanya;timeout: 0per panggilan menonaktifkan timeout proses exec.tools.exec.host(default:auto; diselesaikan menjadisandboxketika runtime sandbox aktif,gatewayjika tidak)tools.exec.security(default:denyuntuk sandbox,fulluntuk gateway + node ketika tidak ditetapkan)tools.exec.ask(default:off)- Exec host tanpa persetujuan adalah default untuk gateway + node. Jika Anda menginginkan perilaku persetujuan/allowlist, perketat
tools.exec.*dan file persetujuan host; lihat Persetujuan exec. - YOLO berasal dari default kebijakan host (
security=full,ask=off), bukan darihost=auto. Jika Anda ingin memaksa routing gateway atau node, tetapkantools.exec.hostatau gunakan/exec host=.... - Dalam mode
security=fullplusask=off, exec host mengikuti kebijakan yang dikonfigurasi secara langsung; tidak ada lapisan prefilter heuristik obfuscation perintah atau penolakan preflight skrip tambahan. tools.exec.node(default: tidak ditetapkan)tools.exec.strictInlineEval(default: false): ketika true, bentuk eval interpreter inline sepertipython -c,node -e,ruby -e,perl -e,php -r,lua -e, danosascript -ememerlukan peninjau atau persetujuan eksplisit. Dalammode=auto, jalur persetujuan exec normal dapat membiarkan peninjau otomatis native mengizinkan perintah satu kali yang jelas berisiko rendah; panggilansystem.runhost node langsung tetap memerlukan persetujuan eksplisit karena tidak dapat menyerahkan perintah ke rute persetujuan manusia. Jika peninjau meminta, permintaan diteruskan ke manusia.allow-alwaystetap dapat mempertahankan invocation interpreter/skrip yang aman, tetapi bentuk inline-eval tidak menjadi aturan izin yang tahan lama.tools.exec.commandHighlighting(default: false): ketika true, prompt persetujuan dapat menyorot rentang perintah turunan parser dalam teks perintah. Tetapkan ketruesecara global atau per agen untuk mengaktifkan penyorotan teks perintah tanpa mengubah kebijakan persetujuan exec.tools.exec.pathPrepend: daftar direktori untuk ditambahkan di awalPATHuntuk run exec (hanya gateway + sandbox).tools.exec.safeBins: biner aman hanya-stdin yang dapat berjalan tanpa entri allowlist eksplisit. Untuk detail perilaku, lihat Bin aman.tools.exec.safeBinTrustedDirs: direktori eksplisit tambahan yang dipercaya untuk pemeriksaan jalursafeBins. EntriPATHtidak pernah dipercaya otomatis. Default bawaan adalah/bindan/usr/bin.tools.exec.safeBinProfiles: kebijakan argv kustom opsional per bin aman (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Contoh:
{ tools: { exec: { pathPrepend: ["~/bin", "/opt/oss/bin"], }, },}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- Untuk mencegah konfigurasi shell pengguna (seperti
~/.zshenvatau/etc/zshenv) menimpa jalur prioritas saat startup, entritools.exec.pathPrependditambahkan secara aman ke awalPATHakhir di dalam perintah shell tepat sebelum eksekusi.
- Untuk mencegah konfigurasi shell pengguna (seperti
- macOS:
host=sandbox: menjalankansh -lc(login shell) di dalam kontainer, sehingga/etc/profiledapat meresetPATH. OpenClaw menambahkanenv.PATHdi awal setelah sourcing profil 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 lingkungan layanan host node (systemd/launchd) atau instal alat di lokasi standar.
Binding node per agen (gunakan indeks daftar agen dalam konfigurasi):
openclaw config get agents.listopenclaw config set 'agents.list[0].tools.exec.node' "node-id-or-name"Control UI: tab Nodes menyertakan panel kecil "Binding node exec" untuk pengaturan yang sama.
Override sesi (/exec)
Gunakan /exec untuk menetapkan default per sesi untuk host, security, ask, dan node.
Kirim /exec tanpa argumen untuk menampilkan nilai saat ini.
Contoh:
/exec host=auto security=allowlist ask=on-miss node=mac-1Model otorisasi
/exec hanya dipatuhi untuk pengirim resmi (daftar izin/pemasangan kanal plus commands.useAccessGroups).
Ini hanya memperbarui status sesi dan tidak menulis konfigurasi. Pengirim kanal eksternal resmi dapat
mengatur default sesi ini. Klien gateway/webchat internal memerlukan operator.admin untuk menyimpannya secara persisten.
Untuk menonaktifkan exec secara keras, tolak melalui kebijakan alat (tools.deny: ["exec"] atau per agen). Persetujuan host
tetap berlaku kecuali Anda secara eksplisit mengatur security=full dan ask=off.
Persetujuan exec (aplikasi pendamping / host Node)
Agen tersandbox dapat memerlukan persetujuan per permintaan sebelum exec berjalan di Gateway atau host Node.
Lihat Persetujuan exec untuk kebijakan, daftar izin, dan alur UI.
Saat persetujuan diperlukan, alat exec langsung mengembalikan
status: "approval-pending" dan id persetujuan. Setelah disetujui (atau ditolak / waktunya habis),
Gateway mengeluarkan peristiwa sistem progres perintah dan penyelesaian hanya untuk eksekusi yang disetujui
(Exec running / Exec finished). Persetujuan yang ditolak atau kedaluwarsa bersifat terminal dan tidak
membangunkan sesi agen dengan peristiwa sistem penolakan.
Pada kanal dengan kartu/tombol persetujuan native, agen harus mengandalkan
UI native tersebut terlebih dahulu dan hanya menyertakan perintah /approve manual ketika hasil
alat secara eksplisit menyatakan bahwa persetujuan chat tidak tersedia atau persetujuan manual adalah
satu-satunya jalur.
Daftar izin + bin aman
Penerapan daftar izin manual mencocokkan glob jalur biner yang telah di-resolve dan glob nama perintah polos.
Nama polos hanya cocok dengan perintah yang dipanggil melalui PATH, sehingga rg dapat cocok dengan
/opt/homebrew/bin/rg saat perintahnya adalah rg, tetapi tidak dengan ./rg atau /tmp/rg.
Saat security=allowlist, perintah shell diizinkan otomatis hanya jika setiap segmen pipeline
ada dalam daftar izin atau merupakan bin aman. Chaining (;, &&, ||) dan pengalihan
ditolak dalam mode daftar izin kecuali setiap segmen tingkat atas memenuhi
daftar izin (termasuk bin aman). Pengalihan tetap tidak didukung.
Kepercayaan tahan lama allow-always 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 daftar izin jalur manual. Untuk kepercayaan eksplisit yang ketat, biarkan autoAllowSkills dinonaktifkan.
Gunakan dua kontrol untuk tugas yang berbeda:
tools.exec.safeBins: filter stream kecil yang hanya menerima stdin.tools.exec.safeBinTrustedDirs: direktori tepercaya tambahan yang eksplisit untuk jalur executable bin aman.tools.exec.safeBinProfiles: kebijakan argv eksplisit untuk bin aman kustom.- daftar izin: kepercayaan eksplisit untuk jalur executable.
Jangan perlakukan safeBins sebagai daftar izin generik, dan jangan tambahkan biner interpreter/runtime (misalnya python3, node, ruby, bash). Jika Anda memerlukannya, gunakan entri daftar izin eksplisit dan biarkan prompt persetujuan tetap aktif.
openclaw security audit memperingatkan saat entri safeBins interpreter/runtime tidak memiliki profil eksplisit, dan openclaw doctor --fix dapat membuat scaffold 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 dalam safeBins.
Jika Anda secara eksplisit memasukkan interpreter ke daftar izin, aktifkan tools.exec.strictInlineEval agar bentuk evaluasi kode inline tetap memerlukan peninjau atau persetujuan eksplisit.
Untuk detail dan contoh kebijakan lengkap, lihat Persetujuan exec dan Bin aman versus daftar izin.
Contoh
Latar depan:
{ "tool": "exec", "command": "ls -la" }Latar belakang + polling:
{"tool":"exec","command":"npm run build","yieldMs":1000}{"tool":"process","action":"poll","sessionId":"<id>"}Polling digunakan untuk status sesuai permintaan, bukan loop menunggu. Jika wake penyelesaian otomatis diaktifkan, perintah dapat membangunkan sesi saat mengeluarkan output atau gagal.
Kirim tombol (gaya 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"]}Submit (hanya kirim CR):
{ "tool": "process", "action": "submit", "sessionId": "<id>" }Tempel (dengan bracket secara default):
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }apply_patch
apply_patch adalah subalat dari exec untuk edit multi-file terstruktur.
Ini diaktifkan secara default untuk model OpenAI dan OpenAI Codex. Gunakan konfigurasi hanya
saat Anda ingin menonaktifkannya atau membatasinya ke model tertentu:
{ tools: { exec: { applyPatch: { workspaceOnly: true, allowModels: ["gpt-5.5"] }, }, },}Catatan:
- Hanya tersedia untuk model OpenAI/OpenAI Codex.
- Kebijakan alat tetap berlaku;
allow: ["write"]secara implisit mengizinkanapply_patch. deny: ["write"]tidak menolakapply_patch; tolakapply_patchsecara eksplisit atau gunakandeny: ["group:fs"]saat penulisan patch juga harus diblokir.- Konfigurasi berada di bawah
tools.exec.applyPatch. tools.exec.applyPatch.enableddefault-nya adalahtrue; atur kefalseuntuk menonaktifkan alat bagi model OpenAI.tools.exec.applyPatch.workspaceOnlydefault-nya adalahtrue(terbatas di workspace). Atur kefalsehanya jika Anda secara sengaja inginapply_patchmenulis/menghapus di luar direktori workspace.
Terkait
- Persetujuan Exec — gerbang persetujuan untuk perintah shell
- Sandboxing — menjalankan perintah di lingkungan tersandbox
- Proses Latar Belakang — exec yang berjalan lama dan alat proses
- Keamanan — kebijakan alat dan akses yang ditingkatkan