Exec vositasi¶
Ish maydonida shell buyruqlarini ishga tushiring. process orqali foreground + background bajarilishini qo‘llab-quvvatlaydi.
Agar process ruxsat etilmagan bo‘lsa, exec sinxron ishlaydi va yieldMs/background ni e’tiborsiz qoldiradi.
Background sessiyalar har bir agent doirasida cheklangan; process faqat shu agentga tegishli sessiyalarni ko‘ra oladi.
Parametrlar¶
command(majburiy)workdir(standart: cwd)env(kalit/qiymat o‘zgartirishlari)yieldMs(standart 10000): kechikishdan so‘ng avtomatik backgroundbackground(bool): darhol backgroundtimeout(sekund, standart 1800): muddati tugaganda to‘xtatadipty(bool): mavjud bo‘lsa, pseudo-terminalda ishga tushiradi (faqat TTY CLI’lar, kodlash agentlari, terminal UI’lar)host(sandbox | gateway | node): qayerda bajariladisecurity(deny | allowlist | full):gateway/nodeuchun majburiy nazorat rejimiask(off | on-miss | always):gateway/nodeuchun tasdiqlash so‘rovlarinode(string):host=nodeuchun node identifikatori/nomielevated(bool): yuqori rejimni so‘rash (gatewayhost);security=fullfaqat elevatedfullga o‘tganda majburan qo‘llanadi
Izohlar:
hoststandart bo‘yichasandbox.- Agar sandboxing o‘chiq bo‘lsa,
elevatede’tiborga olinmaydi (execallaqachon hostda ishlaydi). gateway/nodetasdiqlashlari~/.openclaw/exec-approvals.jsonorqali boshqariladi.nodejuftlangan node’ni talab qiladi (companion ilova yoki headless node host).- Agar bir nechta node mavjud bo‘lsa, bittasini tanlash uchun
exec.nodeyokitools.exec.nodeni sozlang. - Windows bo‘lmagan hostlarda, agar
SHELLo‘rnatilgan bo‘lsa, exec undan foydalanadi; agarSHELLfishbo‘lsa, fish bilan mos kelmaydigan skriptlardan qochish uchunPATHdanbash(yokish) ni afzal ko‘radi, agar ikkalasi ham bo‘lmasaSHELLga qaytadi. - Hostda bajarish (
gateway/node)env.PATHva loader override’larni (LD_*/DYLD_*) rad etadi — bu binary hijacking yoki kod kiritilishini oldini olish uchun. - Muhim: sandboxing standart bo‘yicha o‘chiq. Agar sandboxing o‘chiq bo‘lsa,
host=sandboxbuyruqni to‘g‘ridan-to‘g‘ri gateway hostda (konteynersiz) bajaradi va tasdiqlash talab qilinmaydi. Tasdiqlashni majburiy qilish uchunhost=gatewaybilan ishga tushiring va exec tasdiqlarini sozlang (yoki sandboxing’ni yoqing).
Sozlama¶
tools.exec.notifyOnExit(standart: true): true bo‘lsa, background qilingan exec sessiyalari yakunlanganda tizim hodisasini navbatga qo‘yadi va heartbeat so‘raydi.tools.exec.approvalRunningNoticeMs(standart: 10000): tasdiqlash talab qiladigan exec shu vaqtdan ko‘proq ishlasa, bitta “running” bildirishnoma yuboradi (0 — o‘chiradi).tools.exec.host(standart:sandbox)tools.exec.security(standart: sandbox uchundeny, gateway + node uchun (agar belgilanmagan bo‘lsa)allowlist)tools.exec.ask(standart:on-miss)tools.exec.node(standart: o‘rnatilmagan)tools.exec.pathPrepend: exec ishga tushirilgandaPATHboshiga qo‘shiladigan kataloglar ro‘yxati (faqat gateway + sandbox).tools.exec.safeBins: explicit allowlist yozuvlarisiz ishlashi mumkin bo‘lgan, faqat stdin xavfsiz binary’lar.
Misol:
{
tools: {
exec: {
pathPrepend: ["~/bin", "/opt/oss/bin"],
},
},
}
PATH ishlov berilishi¶
host=gateway: login-shell’dagiPATHni exec muhiti bilan birlashtiradi. Hostda bajarishdaenv.PATHo‘zgartirishlari rad etiladi. Deymonning o‘zi esa minimalPATHbilan ishlaydi:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin host=sandbox: konteyner ichidash -lc(login shell) ni ishga tushiradi, shuning uchun/etc/profilePATHni qayta o‘rnatishi mumkin. OpenClawenv.PATHni profil yuklangandan so‘ng ichki env o‘zgaruvchi orqali (shell interpolatsiyasiz) boshiga qo‘shadi;tools.exec.pathPrependham shu yerda qo‘llanadi.host=node: siz uzatgan, bloklanmagan env o‘zgartirishlargina node’ga yuboriladi.env.PATHo‘zgartirishlari hostda bajarish uchun rad etiladi va node hostlar tomonidan e’tiborsiz qoldiriladi. Agar node’da qo‘shimcha PATH yozuvlari kerak bo‘lsa, node host xizmati muhitini (systemd/launchd) sozlang yoki vositalarni standart joylarga o‘rnating.
Har bir agent uchun node bog‘lash (config’da agent ro‘yxati indeksidan foydalaning):
openclaw config get agents.list
openclaw config set agents.list[0].tools.exec.node "node-id-or-name"
Boshqaruv UI: Nodes yorlig‘ida shu sozlamalar uchun kichik “Exec node binding” paneli mavjud.
Sessiya bo‘yicha o‘zgartirishlar (/exec)¶
/exec yordamida sessiya darajasida host, security, ask va node uchun standart qiymatlarni belgilang.
Joriy qiymatlarni ko‘rish uchun argumentlarsiz /exec yuboring.
Misol:
/exec host=gateway security=allowlist ask=on-miss node=mac-1
Avtorizatsiya modeli¶
/exec faqat ruxsat etilgan yuboruvchilar uchun amal qiladi (kanal allowlist/pairing va commands.useAccessGroups).
U faqat sessiya holatini yangilaydi va konfiguratsiyani yozmaydi. Exec’ni to‘liq o‘chirish uchun uni tool siyosati orqali rad eting (tools.deny: ["exec"] yoki agent bo‘yicha). Agar aniq security=full va ask=off o‘rnatilmagan bo‘lsa, host tasdiqlashlari baribir qo‘llanadi.
Exec tasdiqlashlari (companion ilova / node host)¶
Sandbox qilingan agentlar gateway yoki node hostda exec bajarilishidan oldin har bir so‘rov uchun tasdiqlash talab qilishi mumkin.
Siyosat, allowlist va UI jarayoni haqida Exec approvals sahifasiga qarang.
Tasdiqlash talab qilinganda, exec vositasi darhol status: "approval-pending" va tasdiqlash identifikatori bilan qaytadi. Tasdiqlangach (yoki rad etilgach / vaqti tugagach), Gateway tizim hodisalarini yuboradi (Exec finished / Exec denied). Agar buyruq tools.exec.approvalRunningNoticeMs dan ko‘proq ishlasa, bitta Exec running bildirishnomasi yuboriladi.
Allowlist + safe bins¶
Allowlist nazorati faqat resolved binary path bo‘yicha moslikni tekshiradi (basename bo‘yicha emas).
security=allowlist bo‘lganda, shell buyruqlari faqat pipeline’dagi har bir segment allowlist’da yoki safe bin bo‘lsa avtomatik ruxsat etiladi.
Zanjirlash (;, &&, ||) va yo‘naltirishlar allowlist rejimida rad etiladi, agar har bir yuqori darajadagi segment allowlist (shu jumladan safe bins) talablariga javob bermasa.
Yo‘naltirishlar hali ham qo‘llab-quvvatlanmaydi.
Misollar¶
Foreground:
{ "tool": "exec", "command": "ls -la" }
Background + poll:
{"tool":"exec","command":"npm run build","yieldMs":1000}
{"tool":"process","action":"poll","sessionId":"<id>"}
Tugmalar yuborish (tmux uslubida):
{"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"]}
Yuborish (faqat CR yuborish):
{ "tool": "process", "action": "submit", "sessionId": "<id>" }
Qo‘yish (standart bo‘yicha bracketed):
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }
apply_patch (eksperimental)¶
apply_patch — bu strukturalangan ko‘p faylli tahrirlar uchun exec ning subtool’i.
Uni alohida yoqing:
{
tools: {
exec: {
applyPatch: { enabled: true, workspaceOnly: true, allowModels: ["gpt-5.2"] },
},
},
}
Izohlar:
- Faqat OpenAI/OpenAI Codex modellari uchun mavjud.
- Tool siyosati baribir qo‘llanadi;
allow: ["exec"]avtomatik ravishdaapply_patchga ham ruxsat beradi. - Konfiguratsiya
tools.exec.applyPatchostida joylashgan. tools.exec.applyPatch.workspaceOnlystandart bo‘yichatrue(faqat workspace ichida). Agarapply_patchworkspace katalogidan tashqariga yozishi/o‘chirishi kerak bo‘lsa, uni ataylabfalsega o‘rnating.