17 KiB
| read_when | summary | title | x-i18n | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Exec aracı kullanımı, stdin modları ve TTY desteği | Yürütme aracı |
|
Çalışma alanında kabuk komutları çalıştırın. process üzerinden ön plan + arka plan yürütmeyi destekler.
process izin verilmiyorsa, exec eşzamanlı çalışır ve yieldMs/background değerlerini yok sayar.
Arka plan oturumları ajan başına kapsamlanır; process yalnızca aynı ajanın oturumlarını görür.
Parametreler
Çalıştırılacak kabuk komutu. Komut için çalışma dizini. Devralınan ortamın üzerine birleştirilen anahtar/değer ortam geçersiz kılmaları. Bu gecikmeden sonra komutu otomatik olarak arka plana alın (ms). `yieldMs` beklemek yerine komutu hemen arka plana alın. Bu çağrı için yapılandırılmış exec zaman aşımını geçersiz kılın. `timeout: 0` değerini yalnızca komut exec işlem zaman aşımı olmadan çalışmalıysa ayarlayın. Mümkün olduğunda sözde uçbirimde çalıştırın. Yalnızca TTY gerektiren CLI'lar, kodlama ajanları ve terminal arayüzleri için kullanın. Nerede yürütüleceği. `auto`, sandbox çalışma zamanı etkin olduğunda `sandbox`, aksi halde `gateway` olarak çözümlenir. `gateway` / `node` yürütmesi için zorlama modu. `gateway` / `node` yürütmesi için onay istemi davranışı. `host=node` olduğunda Node kimliği/adı. Yükseltilmiş mod isteyin — sandbox'tan yapılandırılmış host yoluna çıkın. `security=full` yalnızca elevated `full` olarak çözümlendiğinde zorlanır.Notlar:
hostvarsayılan olarakautoolur: oturum için sandbox çalışma zamanı etkin olduğunda sandbox, aksi halde gateway.hostyalnızcaauto,sandbox,gatewayveyanodekabul eder. Bir ana makine adı seçici değildir; ana makine adına benzeyen değerler komut çalışmadan önce reddedilir.autovarsayılan yönlendirme stratejisidir, joker karakter değildir.autoiçinden çağrı başınahost=nodeizinlidir; çağrı başınahost=gatewayyalnızca etkin sandbox çalışma zamanı yokken izinlidir.- Ek yapılandırma olmadan,
host=autoyine de "sadece çalışır": sandbox yoksagatewayolarak çözümlenir; canlı sandbox varsa sandbox içinde kalır. elevated, sandbox'tan yapılandırılmış host yoluna çıkar: varsayılan olarakgateway, ya datools.exec.host=nodeolduğunda (veya oturum varsayılanıhost=nodeise)node. Yalnızca geçerli oturum/sağlayıcı için yükseltilmiş erişim etkinleştirildiğinde kullanılabilir.gateway/nodeonayları~/.openclaw/exec-approvals.jsontarafından denetlenir.node, eşleştirilmiş bir Node (eşlikçi uygulama veya başsız Node host'u) gerektirir.- Birden fazla Node varsa, birini seçmek için
exec.nodeveyatools.exec.nodeayarlayın. exec host=node, Node'lar için tek kabuk yürütme yoludur; eskinodes.runsarmalayıcısı kaldırılmıştır.timeout, ön plan, arka plan,yieldMs, gateway, sandbox ve Nodesystem.runyürütmesi için geçerlidir. Atlanırsa OpenClawtools.exec.timeoutSeckullanır; açıktimeout: 0, bu çağrı için exec işlem zaman aşımını devre dışı bırakır.- Windows dışı host'larda exec, ayarlanmışsa
SHELLkullanır;SHELLfishise fish ile uyumsuz betiklerden kaçınmak içinPATHiçindenbash(veyash) tercih eder, ikisi de yoksaSHELLdeğerine geri döner. - Windows host'larında exec, PowerShell 7 (
pwsh) keşfini tercih eder (Program Files, ProgramW6432, sonra PATH), ardından Windows PowerShell 5.1'e geri döner. - Host yürütmesi (
gateway/node), ikili ele geçirmeyi veya enjekte edilmiş kodu önlemek içinenv.PATHve yükleyici geçersiz kılmalarını (LD_*/DYLD_*) reddeder. - OpenClaw, kabuk/profil kurallarının exec aracı bağlamını algılayabilmesi için başlatılan komut ortamında (PTY ve sandbox yürütmesi dahil)
OPENCLAW_SHELL=execayarlar. openclaw channels login, etkileşimli bir kanal kimlik doğrulama akışı olduğu içinexeciçinden engellenir; bunu Gateway host'unda bir terminalde çalıştırın veya mevcut olduğunda sohbetten kanala özgü oturum açma aracını kullanın.- Önemli: sandbox varsayılan olarak kapalıdır. Sandbox kapalıysa, örtük
host=autogatewayolarak çözümlenir. Açıkhost=sandbox, Gateway host'unda sessizce çalışmak yerine kapalı biçimde başarısız olmaya devam eder. Sandbox'ı etkinleştirin veya onaylarlahost=gatewaykullanın. - Betik ön uç kontrolleri (yaygın Python/Node kabuk sözdizimi hataları için) yalnızca etkili
workdirsınırı içindeki dosyaları inceler. Bir betik yoluworkdirdışına çözümlenirse, o dosya için ön kontrol atlanır. - Şimdi başlayan uzun süreli işler için işi bir kez başlatın ve etkinleştirildiğinde, komut çıktı verdiğinde veya başarısız olduğunda otomatik tamamlanma uyandırmasına güvenin. Günlükler, durum, giriş veya müdahale için
processkullanın; sleep döngüleri, timeout döngüleri veya tekrarlanan yoklamalarla zamanlamayı taklit etmeyin. - Daha sonra veya bir zamanlamaya göre gerçekleşmesi gereken işler için
execsleep/gecikme kalıpları yerine Cron kullanın.
Yapılandırma
tools.exec.notifyOnExit(varsayılan: true): true olduğunda, arka plana alınmış exec oturumları çıkışta bir sistem olayı kuyruğa alır ve Heartbeat ister.tools.exec.approvalRunningNoticeMs(varsayılan: 10000): onay kapılı bir exec bu süreden uzun çalıştığında tek bir “çalışıyor” bildirimi yayınlar (0 devre dışı bırakır).tools.exec.timeoutSec(varsayılan: 1800): saniye cinsinden varsayılan komut başına exec zaman aşımı. Çağrı başınatimeoutbunu geçersiz kılar; çağrı başınatimeout: 0exec işlem zaman aşımını devre dışı bırakır.tools.exec.host(varsayılan:auto; sandbox çalışma zamanı etkin olduğundasandbox, aksi haldegatewayolarak çözümlenir)tools.exec.security(varsayılan: sandbox içindeny, ayarlanmamışsa gateway + Node içinfull)tools.exec.ask(varsayılan:off)- Onaysız host exec, gateway + Node için varsayılandır. Onay/izin listesi davranışı istiyorsanız hem
tools.exec.*hem de host~/.openclaw/exec-approvals.jsonayarlarını sıkılaştırın; bkz. Exec onayları. - YOLO,
host=autodeğerinden değil host ilkesi varsayılanlarından (security=full,ask=off) gelir. Gateway veya Node yönlendirmesini zorlamak istiyorsanıztools.exec.hostayarlayın veya/exec host=...kullanın. security=fullartıask=offmodunda, host exec yapılandırılmış ilkeyi doğrudan izler; ek bir sezgisel komut gizleme ön filtresi veya betik ön kontrol reddetme katmanı yoktur.tools.exec.node(varsayılan: ayarlanmamış)tools.exec.strictInlineEval(varsayılan: false): true olduğunda,python -c,node -e,ruby -e,perl -e,php -r,lua -eveosascript -egibi satır içi yorumlayıcı eval biçimleri her zaman açık onay gerektirir.allow-alwayszararsız yorumlayıcı/betik çağrılarını yine kalıcılaştırabilir, ancak satır içi eval biçimleri her seferinde istem göstermeye devam eder.tools.exec.pathPrepend: exec çalıştırmaları içinPATHbaşına eklenecek dizinlerin listesi (yalnızca gateway + sandbox).tools.exec.safeBins: açık izin listesi girdileri olmadan çalışabilen, yalnızca stdin kullanan güvenli ikililer. Davranış ayrıntıları için bkz. Güvenli ikililer.tools.exec.safeBinTrustedDirs:safeBinsyol kontrolleri için güvenilen ek açık dizinler.PATHgirdileri hiçbir zaman otomatik olarak güvenilir sayılmaz. Yerleşik varsayılanlar/binve/usr/bindeğerleridir.tools.exec.safeBinProfiles: güvenli ikili başına isteğe bağlı özel argv ilkesi (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Örnek:
{
tools: {
exec: {
pathPrepend: ["~/bin", "/opt/oss/bin"],
},
},
}
PATH işleme
host=gateway: oturum açma kabuğunuzunPATHdeğerini exec ortamına birleştirir. Host yürütmesi içinenv.PATHgeçersiz kılmaları reddedilir. Daemon'ın kendisi yine de en düşük düzeyde birPATHile çalışır:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin
- macOS:
host=sandbox: kapsayıcı içindesh -lc(oturum açma kabuğu) çalıştırır, bu nedenle/etc/profilePATHdeğerini sıfırlayabilir. OpenClaw, profil kaynaklandıktan sonra dahili bir ortam değişkeni üzerindenenv.PATHdeğerini başa ekler (kabuk enterpolasyonu yoktur);tools.exec.pathPrependburada da uygulanır.host=node: yalnızca ilettiğiniz engellenmemiş ortam geçersiz kılmaları Node'a gönderilir.env.PATHgeçersiz kılmaları host yürütmesi için reddedilir ve Node host'ları tarafından yok sayılır. Bir Node'da ek PATH girdilerine ihtiyacınız varsa, Node host hizmet ortamını (systemd/launchd) yapılandırın veya araçları standart konumlara kurun.
Ajan başına Node bağlaması (yapılandırmada ajan listesi indeksini kullanın):
openclaw config get agents.list
openclaw config set agents.list[0].tools.exec.node "node-id-or-name"
Denetim arayüzü: Nodes sekmesi aynı ayarlar için küçük bir “Exec node binding” paneli içerir.
Oturum geçersiz kılmaları (/exec)
host, security, ask ve node için oturum başına varsayılanları ayarlamak üzere /exec kullanın.
Geçerli değerleri göstermek için /exec komutunu bağımsız değişken olmadan gönderin.
Örnek:
/exec host=auto security=allowlist ask=on-miss node=mac-1
Yetkilendirme modeli
/exec yalnızca yetkili gönderenler için dikkate alınır (kanal izin listeleri/eşleştirme artı commands.useAccessGroups).
Yalnızca oturum durumunu günceller ve yapılandırma yazmaz. exec'i katı biçimde devre dışı bırakmak için araç ilkesiyle (tools.deny: ["exec"] veya ajan başına) reddedin. Açıkça security=full ve ask=off ayarlamadığınız sürece host onayları yine uygulanır.
Exec onayları (eşlikçi uygulama / Node host'u)
Sandbox içindeki ajanlar, exec Gateway veya Node host'unda çalışmadan önce istek başına onay gerektirebilir.
İlke, izin listesi ve arayüz akışı için bkz. Exec onayları.
Onaylar gerektiğinde, exec aracı status: "approval-pending" ve bir onay kimliğiyle hemen döner. Onaylandıktan (veya reddedildikten / zaman aşımına uğradıktan) sonra Gateway sistem olayları yayınlar (Exec finished / Exec denied). Komut tools.exec.approvalRunningNoticeMs sonrasında hâlâ çalışıyorsa, tek bir Exec running bildirimi yayınlanır.
Yerel onay kartları/düğmeleri olan kanallarda, ajan önce bu yerel arayüze güvenmeli ve yalnızca araç sonucu sohbet onaylarının kullanılamadığını veya elle onayın tek yol olduğunu açıkça söylüyorsa elle /approve komutu eklemelidir.
İzin listesi + güvenli ikililer
Elle izin listesi denetimi, çözümlenmiş ikili yol glob'ları ve yalın komut adı glob'ları ile eşleşir. Yalın adlar yalnızca PATH üzerinden çağrılan komutlarla eşleşir; bu nedenle komut rg olduğunda rg, /opt/homebrew/bin/rg ile eşleşebilir, ancak ./rg veya /tmp/rg ile eşleşmez.
security=allowlist olduğunda, kabuk komutları yalnızca her pipeline segmenti izin listesinde veya güvenli ikiliyse otomatik olarak izin verilir. Zincirleme (;, &&, ||) ve yönlendirmeler, her üst düzey segment izin listesini (güvenli ikililer dahil) karşılamadıkça izin listesi modunda reddedilir. Yönlendirmeler desteklenmemeye devam eder.
Kalıcı allow-always güveni bu kuralı atlamaz: zincirlenmiş bir komut yine de her üst düzey segmentin eşleşmesini gerektirir.
autoAllowSkills, exec onaylarında ayrı bir kolaylık yoludur. Elle yol izin listesi girdileriyle aynı şey değildir. Katı açık güven için autoAllowSkills devre dışı kalsın.
İki denetimi farklı işler için kullanın:
tools.exec.safeBins: küçük, yalnızca stdin kullanan akış filtreleri.tools.exec.safeBinTrustedDirs: güvenli ikili çalıştırılabilir yolları için açık ek güvenilir dizinler.tools.exec.safeBinProfiles: özel güvenli ikililer için açık argv ilkesi.- izin listesi: çalıştırılabilir yollar için açık güven.
safeBins öğesini genel bir izin listesi gibi ele almayın ve yorumlayıcı/runtime ikili dosyaları eklemeyin (örneğin python3, node, ruby, bash). Bunlara ihtiyacınız varsa açık izin listesi girdileri kullanın ve onay istemlerini etkin tutun.
openclaw security audit, yorumlayıcı/runtime safeBins girdilerinde açık profiller eksik olduğunda uyarır ve openclaw doctor --fix eksik özel safeBinProfiles girdilerini iskelet olarak oluşturabilir.
openclaw security audit ve openclaw doctor, jq gibi geniş davranışlı ikili dosyaları açıkça yeniden safeBins içine eklediğinizde de uyarır.
Yorumlayıcıları açıkça izin listesine alırsanız, satır içi kod değerlendirme biçimlerinin yine de yeni bir onay gerektirmesi için tools.exec.strictInlineEval öğesini etkinleştirin.
Tam ilke ayrıntıları ve örnekler için bkz. Exec onayları ve Güvenli ikili dosyalar ile izin listesi karşılaştırması.
Örnekler
Ön plan:
{ "tool": "exec", "command": "ls -la" }
Arka plan + yoklama:
{"tool":"exec","command":"npm run build","yieldMs":1000}
{"tool":"process","action":"poll","sessionId":"<id>"}
Yoklama, bekleme döngüleri için değil, isteğe bağlı durum içindir. Otomatik tamamlama uyandırması etkinse komut çıktı ürettiğinde veya başarısız olduğunda oturumu uyandırabilir.
Tuş gönderme (tmux tarzı):
{"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"]}
Gönder (yalnızca CR gönder):
{ "tool": "process", "action": "submit", "sessionId": "<id>" }
Yapıştır (varsayılan olarak parantezli):
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }
apply_patch
apply_patch, yapılandırılmış çok dosyalı düzenlemeler için exec alt aracıdır.
OpenAI ve OpenAI Codex modelleri için varsayılan olarak etkindir. Yapılandırmayı yalnızca
devre dışı bırakmak veya belirli modellerle sınırlamak istediğinizde kullanın:
{
tools: {
exec: {
applyPatch: { workspaceOnly: true, allowModels: ["gpt-5.5"] },
},
},
}
Notlar:
- Yalnızca OpenAI/OpenAI Codex modellerinde kullanılabilir.
- Araç ilkesi yine geçerlidir;
allow: ["write"]örtük olarakapply_patchkullanımına izin verir. - Yapılandırma
tools.exec.applyPatchaltında yer alır. tools.exec.applyPatch.enabledvarsayılan olaraktruedeğerindedir; aracı OpenAI modelleri için devre dışı bırakmak üzerefalseolarak ayarlayın.tools.exec.applyPatch.workspaceOnlyvarsayılan olaraktruedeğerindedir (çalışma alanıyla sınırlı). Bunu yalnızcaapply_patcharacının çalışma alanı dizini dışında yazmasını/silmesini bilinçli olarak istiyorsanızfalseolarak ayarlayın.
İlgili
- Exec Onayları — kabuk komutları için onay kapıları
- Sandboxing — komutları sandbox ortamlarında çalıştırma
- Arka Plan Süreci — uzun süre çalışan exec ve process aracı
- Güvenlik — araç ilkesi ve yükseltilmiş erişim