exec एक परिवर्तनकारी शेल सतह है: कमांड उन सभी जगहों पर फ़ाइलें बना, संपादित या हटा सकते हैं जहां चयनित होस्ट या सैंडबॉक्स फ़ाइल सिस्टम अनुमति देता है। write, edit, या apply_patch जैसे OpenClaw फ़ाइल सिस्टम टूल अक्षम करने से exec केवल-पढ़ने योग्य नहीं हो जाता।
process के ज़रिए अग्रभूमि + पृष्ठभूमि निष्पादन का समर्थन करता है। यदि process अस्वीकृत है, तो exec समकालिक रूप से चलता है और yieldMs/background को अनदेखा करता है।
पृष्ठभूमि सत्र प्रति एजेंट सीमित होते हैं; process केवल उसी एजेंट के सत्र देखता है।
पैरामीटर
चलाने के लिए शेल कमांड।
कमांड के लिए कार्यशील डायरेक्टरी।
इनहेरिट किए गए वातावरण के ऊपर मर्ज किए गए की/वैल्यू वातावरण ओवरराइड।
इस विलंब (ms) के बाद कमांड को अपने-आप पृष्ठभूमि में भेजें।
yieldMs की प्रतीक्षा करने के बजाय कमांड को तुरंत पृष्ठभूमि में भेजें।इस कॉल के लिए कॉन्फ़िगर किए गए exec टाइमआउट को ओवरराइड करें।
timeout: 0 केवल तब सेट करें जब कमांड को exec प्रक्रिया टाइमआउट के बिना चलना चाहिए।उपलब्ध होने पर छद्म-टर्मिनल में चलाएं। TTY-केवल CLIs, कोडिंग एजेंटों, और टर्मिनल UIs के लिए उपयोग करें।
कहां निष्पादित करना है।
auto तब sandbox में बदलता है जब सैंडबॉक्स रनटाइम सक्रिय हो, अन्यथा gateway में।सामान्य टूल कॉल के लिए अनदेखा किया जाता है।
gateway / node सुरक्षा
tools.exec.security और होस्ट अनुमोदन फ़ाइल द्वारा नियंत्रित होती है; उन्नत मोड
security=full केवल तब बाध्य कर सकता है जब ऑपरेटर स्पष्ट रूप से उन्नत एक्सेस देता है।बेसलाइन पूछने का मोड
tools.exec.ask और होस्ट अनुमोदनों से आता है।
चैनल-मूल मॉडल कॉल के लिए, प्रति-कॉल ask अनदेखा किया जाता है जब
प्रभावी होस्ट ask off हो; अन्यथा यह केवल अधिक सख्त
मोड तक कठोर हो सकता है। वे विश्वसनीय आंतरिक/API कॉलर जो exec टूल को
स्पष्ट ask मान के साथ बनाते हैं, अपरिवर्तित रहते हैं।host=node होने पर Node id/name।उन्नत मोड का अनुरोध करें — सैंडबॉक्स से बाहर निकलकर कॉन्फ़िगर किए गए होस्ट पथ पर जाएं।
security=full केवल तब बाध्य होता है जब elevated full में बदलता है।hostका डिफ़ॉल्टautoहै: सत्र के लिए सैंडबॉक्स रनटाइम सक्रिय होने पर सैंडबॉक्स, अन्यथा Gateway।hostकेवलauto,sandbox,gateway, याnodeस्वीकार करता है। यह होस्टनेम चयनकर्ता नहीं है; होस्टनेम-जैसे मान कमांड चलने से पहले अस्वीकार कर दिए जाते हैं।autoडिफ़ॉल्ट रूटिंग रणनीति है, वाइल्डकार्ड नहीं।autoसे प्रति-कॉलhost=nodeकी अनुमति है; प्रति-कॉलhost=gatewayकेवल तब अनुमति है जब कोई सैंडबॉक्स रनटाइम सक्रिय न हो।tools.exec.modeसामान्यीकृत नीति नॉब है। मानdeny,allowlist,ask,auto, औरfullहैं।autoनिर्धारक allowlist/safe-bin मिलानों को सीधे चलाता है और हर बाकी exec अनुमोदन मामले को मानव से पूछने से पहले OpenClaw के मूल ऑटो समीक्षक के ज़रिए रूट करता है।ask/ask=alwaysफिर भी हर बार मानव से पूछता है।- अतिरिक्त कॉन्फ़िग के बिना,
host=autoफिर भी “बस काम करता है”: सैंडबॉक्स न होने पर यहgatewayमें बदलता है; लाइव सैंडबॉक्स होने पर यह सैंडबॉक्स में रहता है। elevatedसैंडबॉक्स से बाहर निकलकर कॉन्फ़िगर किए गए होस्ट पथ पर जाता है: डिफ़ॉल्ट रूप सेgateway, याnodeजबtools.exec.host=nodeहो (या सत्र डिफ़ॉल्टhost=nodeहो)। यह केवल तब उपलब्ध है जब मौजूदा सत्र/प्रदाता के लिए उन्नत एक्सेस सक्षम हो।gateway/nodeअनुमोदन होस्ट अनुमोदन फ़ाइल द्वारा नियंत्रित होते हैं।nodeके लिए युग्मित Node (सहचर ऐप या हेडलेस Node होस्ट) आवश्यक है।- यदि कई Node उपलब्ध हैं, तो एक चुनने के लिए
exec.nodeयाtools.exec.nodeसेट करें। exec host=nodeNode के लिए एकमात्र शेल-निष्पादन पथ है; पुरानाnodes.runरैपर हटा दिया गया है।timeoutअग्रभूमि, पृष्ठभूमि,yieldMs, Gateway, सैंडबॉक्स, और Nodesystem.runनिष्पादन पर लागू होता है। यदि छोड़ा गया हो, तो OpenClawtools.exec.timeoutSecका उपयोग करता है; स्पष्टtimeout: 0उस कॉल के लिए exec प्रक्रिया टाइमआउट अक्षम करता है।- गैर-Windows होस्ट पर, exec सेट होने पर
SHELLका उपयोग करता है; यदिSHELLfishहै, तो fish-असंगत स्क्रिप्ट से बचने के लिए यहPATHसेbash(याsh) को प्राथमिकता देता है, फिर दोनों न मिलने परSHELLपर लौटता है। - Windows होस्ट पर, exec PowerShell 7 (
pwsh) खोज को प्राथमिकता देता है (Program Files, ProgramW6432, फिर PATH), फिर Windows PowerShell 5.1 पर लौटता है। - गैर-Windows Gateway होस्ट पर, bash और zsh exec कमांड स्टार्टअप स्नैपशॉट का उपयोग करते हैं। OpenClaw शेल स्टार्टअप फ़ाइलों से स्रोत-योग्य
aliases/functions और एक छोटा सुरक्षित वातावरण सेट
$OPENCLAW_STATE_DIR/cache/shell-snapshots/में कैप्चर करता है, फिर हर exec कमांड से पहले उस स्नैपशॉट को स्रोत करता है। सीक्रेट-जैसे दिखने वाले वेरिएबल बाहर रखे जाते हैं; सैंडबॉक्स और Node exec इस स्नैपशॉट का उपयोग नहीं करते। इस स्नैपशॉट पथ को अक्षम करने के लिए Gateway प्रक्रिया वातावरण मेंOPENCLAW_EXEC_SHELL_SNAPSHOT=0सेट करें। - होस्ट निष्पादन (
gateway/node) बाइनरी हाईजैकिंग या इंजेक्टेड कोड रोकने के लिएenv.PATHऔर लोडर ओवरराइड (LD_*/DYLD_*) अस्वीकार करता है। - OpenClaw उत्पन्न कमांड वातावरण (PTY और सैंडबॉक्स निष्पादन सहित) में
OPENCLAW_SHELL=execसेट करता है ताकि शेल/प्रोफ़ाइल नियम exec-टूल संदर्भ पहचान सकें। - चैनल-मूल रन के लिए, OpenClaw
OPENCLAW_CHANNEL_CONTEXTमें एक संकीर्ण प्रेषक/चैट पहचान JSON पेलोड भी उजागर करता है जब चैनल ने वे ids प्रदान किए हों। openclaw channels loginकोexecसे अवरुद्ध किया गया है क्योंकि यह एक इंटरैक्टिव चैनल-auth प्रवाह है; इसे Gateway होस्ट पर टर्मिनल में चलाएं, या मौजूद होने पर चैट से चैनल-नेटिव लॉगिन टूल का उपयोग करें।- महत्वपूर्ण: सैंडबॉक्सिंग डिफ़ॉल्ट रूप से बंद है। यदि सैंडबॉक्सिंग बंद है, तो निहित
host=autogatewayमें बदलता है। स्पष्टhost=sandboxफिर भी Gateway होस्ट पर चुपचाप चलने के बजाय बंद होकर विफल होता है। सैंडबॉक्सिंग सक्षम करें या अनुमोदनों के साथhost=gatewayका उपयोग करें। - स्क्रिप्ट प्रीफ़्लाइट जांचें (सामान्य Python/Node शेल-सिंटैक्स गलतियों के लिए) केवल प्रभावी
workdirसीमा के अंदर की फ़ाइलों का निरीक्षण करती हैं। यदि कोई स्क्रिप्ट पथworkdirके बाहर हल होता है, तो उस फ़ाइल के लिए प्रीफ़्लाइट छोड़ दिया जाता है। - लंबे समय तक चलने वाले काम के लिए जो अभी शुरू होता है, उसे एक बार शुरू करें और सक्षम होने पर स्वचालित
पूर्णता वेक पर भरोसा करें जब कमांड आउटपुट देता है या विफल होता है।
लॉग, स्थिति, इनपुट, या हस्तक्षेप के लिए
processका उपयोग करें; sleep लूप, timeout लूप, या बार-बार polling से शेड्यूलिंग की नकल न करें। - जो काम बाद में या शेड्यूल पर होना चाहिए, उसके लिए
execsleep/delay पैटर्न के बजाय Cron का उपयोग करें।
कॉन्फ़िग
tools.exec.notifyOnExit(डिफ़ॉल्ट: true): true होने पर, पृष्ठभूमि में भेजे गए exec सत्र बाहर निकलने पर सिस्टम इवेंट कतारबद्ध करते हैं और Heartbeat का अनुरोध करते हैं।tools.exec.approvalRunningNoticeMs(डिफ़ॉल्ट: 10000): अनुमोदन-गेटेड exec इससे अधिक देर चलने पर एकल “चल रहा है” सूचना जारी करें (0 अक्षम करता है)।tools.exec.timeoutSec(डिफ़ॉल्ट: 1800): सेकंड में डिफ़ॉल्ट प्रति-कमांड exec टाइमआउट। प्रति-कॉलtimeoutइसे ओवरराइड करता है; प्रति-कॉलtimeout: 0exec प्रक्रिया टाइमआउट अक्षम करता है।tools.exec.host(डिफ़ॉल्ट:auto; सैंडबॉक्स रनटाइम सक्रिय होने परsandboxमें बदलता है, अन्यथाgateway)tools.exec.security(डिफ़ॉल्ट: सैंडबॉक्स के लिएdeny, unset होने पर Gateway + Node के लिएfull)tools.exec.ask(डिफ़ॉल्ट:off)- Gateway + Node के लिए बिना-अनुमोदन होस्ट exec डिफ़ॉल्ट है। यदि आप अनुमोदन/allowlist व्यवहार चाहते हैं, तो
tools.exec.*और होस्ट अनुमोदन फ़ाइल दोनों को सख्त करें; देखें Exec अनुमोदन। - YOLO होस्ट-नीति डिफ़ॉल्ट (
security=full,ask=off) से आता है,host=autoसे नहीं। यदि आप Gateway या Node रूटिंग बाध्य करना चाहते हैं, तोtools.exec.hostसेट करें या/exec host=...का उपयोग करें। security=fullऔरask=offमोड में, होस्ट exec कॉन्फ़िगर की गई नीति का सीधे पालन करता है; कोई अतिरिक्त heuristic कमांड-obfuscation prefilter या script-preflight rejection layer नहीं है।tools.exec.node(डिफ़ॉल्ट: unset)tools.exec.strictInlineEval(डिफ़ॉल्ट: false): true होने पर,python -c,node -e,ruby -e,perl -e,php -r,lua -e, औरosascript -eजैसे inline interpreter eval रूपों के लिए समीक्षक या स्पष्ट अनुमोदन आवश्यक होता है।mode=autoमें, सामान्य exec अनुमोदन पथ मूल ऑटो समीक्षक को स्पष्ट रूप से कम-जोखिम वाले एकबारगी कमांड की अनुमति देने दे सकता है; प्रत्यक्ष Node-होस्टsystem.runकॉल को फिर भी स्पष्ट अनुमोदन चाहिए क्योंकि वे कमांड को मानव अनुमोदन मार्ग पर नहीं भेज सकते। यदि समीक्षक पूछता है, तो अनुरोध मानव के पास जाता है।allow-alwaysअब भी सौम्य interpreter/script invocations को स्थायी बना सकता है, लेकिन inline-eval रूप टिकाऊ allow rules नहीं बनते।tools.exec.commandHighlighting(डिफ़ॉल्ट: false): true होने पर, अनुमोदन प्रॉम्प्ट कमांड टेक्स्ट में parser-derived command spans को हाइलाइट कर सकते हैं। exec अनुमोदन नीति बदले बिना कमांड टेक्स्ट हाइलाइटिंग सक्षम करने के लिए वैश्विक रूप से या प्रति एजेंटtrueसेट करें।tools.exec.pathPrepend: exec रन के लिएPATHके आगे जोड़ने वाली डायरेक्टरियों की सूची (केवल Gateway + सैंडबॉक्स)।tools.exec.safeBins: stdin-only सुरक्षित binaries जो स्पष्ट allowlist प्रविष्टियों के बिना चल सकते हैं। व्यवहार विवरण के लिए, देखें सुरक्षित bins।tools.exec.safeBinTrustedDirs:safeBinsपथ जांचों के लिए विश्वसनीय अतिरिक्त स्पष्ट डायरेक्टरियां।PATHप्रविष्टियां कभी अपने-आप विश्वसनीय नहीं होतीं। अंतर्निहित डिफ़ॉल्ट/binऔर/usr/binहैं।tools.exec.safeBinProfiles: प्रति safe bin वैकल्पिक कस्टम argv नीति (minPositional,maxPositional,allowedValueFlags,deniedFlags)।
PATH हैंडलिंग
host=gateway: आपके login-shellPATHको exec वातावरण में मर्ज करता है। होस्ट निष्पादन के लिएenv.PATHओवरराइड अस्वीकार किए जाते हैं। daemon स्वयं फिर भी न्यूनतमPATHके साथ चलता है:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin- स्टार्टअप के दौरान उपयोगकर्ता शेल कॉन्फ़िगरेशन (जैसे
~/.zshenvया/etc/zshenv) को प्राथमिकता पथों को ओवरराइड करने से रोकने के लिए,tools.exec.pathPrependप्रविष्टियां निष्पादन से ठीक पहले शेल कमांड के अंदर अंतिमPATHके आगे सुरक्षित रूप से जोड़ी जाती हैं।
- स्टार्टअप के दौरान उपयोगकर्ता शेल कॉन्फ़िगरेशन (जैसे
- macOS:
host=sandbox: कंटेनर के अंदरsh -lc(login shell) चलाता है, इसलिए/etc/profilePATHरीसेट कर सकता है। OpenClaw प्रोफ़ाइल sourcing के बाद एक आंतरिक env var के ज़रिएenv.PATHआगे जोड़ता है (कोई shell interpolation नहीं);tools.exec.pathPrependयहां भी लागू होता है।host=node: आपके द्वारा पास किए गए केवल non-blocked env overrides Node को भेजे जाते हैं। होस्ट निष्पादन के लिएenv.PATHओवरराइड अस्वीकार किए जाते हैं और Node होस्ट द्वारा अनदेखे किए जाते हैं। यदि आपको किसी Node पर अतिरिक्त PATH प्रविष्टियों की आवश्यकता है, तो Node होस्ट सेवा वातावरण (systemd/launchd) कॉन्फ़िगर करें या टूल मानक स्थानों में इंस्टॉल करें।
सत्र ओवरराइड (/exec)
host, security, ask, और node के लिए प्रति-सत्र डिफ़ॉल्ट सेट करने हेतु /exec का उपयोग करें।
मौजूदा मान दिखाने के लिए बिना arguments के /exec भेजें।
उदाहरण:
प्राधिकरण मॉडल
/exec केवल अधिकृत प्रेषकों के लिए मान्य होता है (चैनल अनुमति-सूचियां/पेयरिंग और commands.useAccessGroups)।
यह केवल सत्र स्थिति अपडेट करता है और कॉन्फिग नहीं लिखता। अधिकृत बाहरी चैनल प्रेषक
इन सत्र डिफॉल्ट को सेट कर सकते हैं। आंतरिक gateway/webchat क्लाइंट को इन्हें स्थायी करने के लिए operator.admin चाहिए।
exec को पूरी तरह बंद करने के लिए, इसे टूल नीति के माध्यम से अस्वीकार करें (tools.deny: ["exec"] या प्रति-एजेंट)। होस्ट अनुमोदन
तब भी लागू होते हैं, जब तक आप स्पष्ट रूप से security=full और ask=off सेट नहीं करते।
Exec अनुमोदन (सहायक ऐप / node होस्ट)
Sandboxed एजेंटexec के Gateway या node होस्ट पर चलने से पहले प्रति-अनुरोध अनुमोदन मांग सकते हैं।
नीति, अनुमति-सूची, और UI प्रवाह के लिए Exec अनुमोदन देखें।
जब अनुमोदन आवश्यक होते हैं, तो exec टूल तुरंत
status: "approval-pending" और एक अनुमोदन id के साथ लौटता है। अनुमोदित होने के बाद (या अस्वीकृत / समय-सीमा समाप्त होने पर),
Gateway केवल अनुमोदित रन के लिए कमांड प्रगति और पूर्णता सिस्टम इवेंट उत्सर्जित करता है
(Exec running / Exec finished)। अस्वीकृत या समय-सीमा समाप्त अनुमोदन अंतिम होते हैं और
एजेंट सत्र को अस्वीकृति सिस्टम इवेंट के साथ सक्रिय नहीं करते।
नेटिव अनुमोदन कार्ड/बटन वाले चैनलों पर, एजेंट को पहले उस
नेटिव UI पर निर्भर रहना चाहिए और मैन्युअल /approve कमांड केवल तब शामिल करनी चाहिए जब टूल
परिणाम स्पष्ट रूप से कहे कि चैट अनुमोदन उपलब्ध नहीं हैं या मैन्युअल अनुमोदन ही
एकमात्र रास्ता है।
अनुमति-सूची + सुरक्षित बिन्स
मैन्युअल अनुमति-सूची प्रवर्तन हल किए गए बाइनरी पाथ ग्लॉब और bare कमांड-नाम ग्लॉब से मेल खाता है। Bare नाम केवल PATH के माध्यम से चलाए गए कमांड से मेल खाते हैं, इसलिएrg
/opt/homebrew/bin/rg से मेल खा सकता है जब कमांड rg हो, लेकिन ./rg या /tmp/rg से नहीं।
जब security=allowlist हो, shell कमांड केवल तभी अपने-आप अनुमत होते हैं जब हर pipeline
segment अनुमति-सूची में हो या सुरक्षित बिन हो। Chaining (;, &&, ||) और redirections
allowlist मोड में अस्वीकार किए जाते हैं, जब तक हर शीर्ष-स्तरीय segment
अनुमति-सूची (सुरक्षित बिन्स सहित) को संतुष्ट न करे। Redirections अब भी असमर्थित हैं।
स्थायी allow-always भरोसा इस नियम को बायपास नहीं करता: chained कमांड को फिर भी हर
शीर्ष-स्तरीय segment के मेल की आवश्यकता होती है।
autoAllowSkills exec अनुमोदनों में एक अलग सुविधा पथ है। यह
मैन्युअल पाथ अनुमति-सूची प्रविष्टियों जैसा नहीं है। सख्त स्पष्ट भरोसे के लिए, autoAllowSkills को बंद रखें।
दोनों नियंत्रणों को अलग-अलग कामों के लिए उपयोग करें:
tools.exec.safeBins: छोटे, केवल-stdin stream filters।tools.exec.safeBinTrustedDirs: safe-bin executable paths के लिए स्पष्ट अतिरिक्त भरोसेमंद directories।tools.exec.safeBinProfiles: custom safe bins के लिए स्पष्ट argv policy।- allowlist: executable paths के लिए स्पष्ट भरोसा।
safeBins को generic अनुमति-सूची न मानें, और interpreter/runtime binaries (उदाहरण के लिए python3, node, ruby, bash) न जोड़ें। यदि आपको इनकी आवश्यकता है, तो स्पष्ट अनुमति-सूची प्रविष्टियां उपयोग करें और अनुमोदन prompts सक्षम रखें।
openclaw security audit चेतावनी देता है जब interpreter/runtime safeBins प्रविष्टियों में explicit profiles नहीं होते, और openclaw doctor --fix गायब custom safeBinProfiles प्रविष्टियां scaffold कर सकता है।
openclaw security audit और openclaw doctor तब भी चेतावनी देते हैं जब आप jq जैसे broad-behavior bins को स्पष्ट रूप से वापस safeBins में जोड़ते हैं।
यदि आप interpreters को स्पष्ट रूप से अनुमति-सूची में रखते हैं, तो tools.exec.strictInlineEval सक्षम करें ताकि inline code-eval forms को फिर भी reviewer या स्पष्ट अनुमोदन की आवश्यकता रहे।
पूरी नीति के विवरण और उदाहरणों के लिए, Exec अनुमोदन और सुरक्षित बिन्स बनाम अनुमति-सूची देखें।
उदाहरण
Foreground:apply_patch
apply_patch संरचित multi-file edits के लिए exec का subtool है।
यह OpenAI और OpenAI Codex models के लिए डिफॉल्ट रूप से सक्षम है। Config केवल तब उपयोग करें
जब आप इसे बंद करना चाहते हों या specific models तक सीमित करना चाहते हों:
- केवल OpenAI/OpenAI Codex models के लिए उपलब्ध।
- Tool policy अब भी लागू होती है;
allow: ["write"]implicit रूप सेapply_patchको अनुमति देता है। deny: ["write"]apply_patchको deny नहीं करता;apply_patchको स्पष्ट रूप से deny करें या patch writes को भी block करना हो तोdeny: ["group:fs"]उपयोग करें।- Config
tools.exec.applyPatchके अंतर्गत रहता है। tools.exec.applyPatch.enabledका डिफॉल्टtrueहै; OpenAI models के लिए tool को बंद करने हेतु इसेfalseपर सेट करें।tools.exec.applyPatch.workspaceOnlyका डिफॉल्टtrueहै (workspace-contained)। इसेfalseपर केवल तब सेट करें जब आप जानबूझकरapply_patchको workspace directory के बाहर write/delete करने देना चाहते हों।
संबंधित
- Exec अनुमोदन — shell commands के लिए approval gates
- Sandboxing — sandboxed environments में commands चलाना
- Background Process — long-running exec और process tool
- Security — tool policy और elevated access