Skills
Skills कॉन्फ़िगरेशन
अधिकांश कौशल कॉन्फ़िगरेशन ~/.openclaw/openclaw.json में
skills के अंतर्गत रहता है। एजेंट-विशिष्ट दृश्यता
agents.defaults.skills और agents.list[].skills के अंतर्गत रहती है।
{ skills: { allowBundled: ["gemini", "peekaboo"], load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], watch: true, watchDebounceMs: 250, }, install: { preferBrew: true, nodeManager: "npm", allowUploadedArchives: false, }, workshop: { autonomous: { enabled: false }, allowSymlinkTargetWrites: false, approvalPolicy: "pending", maxPending: 50, maxSkillBytes: 40000, }, entries: { "image-lab": { enabled: true, apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, sag: { enabled: false }, }, },}लोड करना (skills.load)
skills.load.extraDirsstring[]स्कैन करने के लिए अतिरिक्त कौशल डायरेक्टरियां, सबसे कम प्राथमिकता पर (बंडल किए गए
और Plugin कौशल के बाद)। पाथ ~ समर्थन के साथ विस्तारित किए जाते हैं।
skills.load.allowSymlinkTargetsstring[]विश्वसनीय वास्तविक लक्ष्य डायरेक्टरियां जिनमें सिमलिंक किए गए कौशल फ़ोल्डर रिज़ॉल्व हो सकते हैं,
भले ही सिमलिंक कॉन्फ़िगर किए गए रूट के बाहर हो। इसका उपयोग
जानबूझकर बनाए गए सिबलिंग-रेपो लेआउट के लिए करें, जैसे
<workspace>/skills/manager -> ~/Projects/manager/skills। इस सूची को
सीमित रखें — ~ या ~/Projects जैसे व्यापक रूट की ओर संकेत न करें।
skills.load.watchbooleandefault: trueकौशल फ़ोल्डर देखें और SKILL.md फ़ाइलों में बदलाव होने पर कौशल स्नैपशॉट
रीफ़्रेश करें। समूहित कौशल रूट के अंतर्गत नेस्टेड फ़ाइलों को कवर करता है।
skills.load.watchDebounceMsnumberdefault: 250कौशल वॉचर इवेंट के लिए मिलीसेकंड में डिबाउंस विंडो।
इंस्टॉल (skills.install)
skills.install.preferBrewbooleandefault: truebrew उपलब्ध होने पर Homebrew इंस्टॉलर को प्राथमिकता दें।
skills.install.nodeManager"npm" | "pnpm" | "yarn" | "bun"default: "npm"कौशल इंस्टॉल के लिए Node पैकेज मैनेजर प्राथमिकता। यह केवल कौशल
इंस्टॉल को प्रभावित करता है — Gateway रनटाइम को फिर भी Node का उपयोग करना चाहिए (WhatsApp/Telegram के लिए Bun की अनुशंसा नहीं है)।
npm, pnpm, या bun के लिए openclaw setup --node-manager का उपयोग करें;
Yarn-समर्थित कौशल इंस्टॉल के लिए "yarn" मैन्युअल रूप से सेट करें।
skills.install.allowUploadedArchivesbooleandefault: falseविश्वसनीय operator.admin Gateway क्लाइंट को skills.upload.* के माध्यम से स्टेज किए गए निजी zip
आर्काइव इंस्टॉल करने दें। सामान्य ClawHub इंस्टॉल के लिए
इस सेटिंग की आवश्यकता नहीं है।
ऑपरेटर इंस्टॉल नीति (security.installPolicy)
जब ऑपरेटर को होस्ट-विशिष्ट नीति के साथ कौशल और Plugin इंस्टॉल को
स्वीकृत या ब्लॉक करने के लिए किसी विश्वसनीय स्थानीय कमांड की आवश्यकता हो, तो security.installPolicy का उपयोग करें। नीति
OpenClaw द्वारा स्रोत सामग्री स्टेज करने के बाद और इंस्टॉल या अपडेट
जारी रहने से पहले चलती है। यह ClawHub कौशल, अपलोड किए गए कौशल, Git/स्थानीय कौशल,
कौशल डिपेंडेंसी इंस्टॉलर, और Plugin इंस्टॉल/अपडेट स्रोतों पर लागू होती है।
{ security: { installPolicy: { enabled: true, // Omit targets to cover every supported target. targets: ["skill", "plugin"], exec: { source: "exec", command: "/usr/local/bin/openclaw-install-policy", args: ["--json"], timeoutMs: 10000, noOutputTimeoutMs: 10000, maxOutputBytes: 1048576, passEnv: ["OPENCLAW_STATE_DIR", "PATH"], env: { POLICY_MODE: "strict" }, trustedDirs: ["/usr/local/bin"], }, }, },}security.installPolicy.enabledbooleandefault: falseऑपरेटर-स्वामित्व वाली इंस्टॉल नीति सक्षम करता है। वैध exec
कमांड के बिना सक्षम होने पर, इंस्टॉल fail closed होते हैं।
security.installPolicy.targets("skill" | "plugin")[]वैकल्पिक लक्ष्य फ़िल्टर। छोड़े जाने पर, नीति हर समर्थित लक्ष्य पर लागू होती है ताकि नए इंस्टॉल अप्रत्याशित रूप से fail open न हों।
security.installPolicy.exec.commandstringविश्वसनीय नीति executable का absolute path। OpenClaw इसे shell के बिना चलाता है और उपयोग से पहले पाथ को वैलिडेट करता है।
security.installPolicy.exec.argsstring[]command के बाद पास किए गए स्थिर आर्ग्युमेंट।
security.installPolicy.exec.timeoutMsnumberdefault: 10000एक नीति निर्णय के लिए अधिकतम wall-clock रनटाइम।
security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMsनीति के fail closed होने से पहले stdout या stderr आउटपुट के बिना अधिकतम समय।
security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576नीति प्रक्रिया से स्वीकार किए जाने वाले अधिकतम संयुक्त stdout और stderr बाइट।
security.installPolicy.exec.env"Record<string,security.installPolicy.exec.passEnvstring[]OpenClaw प्रक्रिया से नीति प्रक्रिया में कॉपी किए गए environment variable नाम। केवल नामित variables पास किए जाते हैं।
security.installPolicy.exec.trustedDirsstring[]उन डायरेक्टरियों की वैकल्पिक allowlist जिनमें नीति executable हो सकता है।
security.installPolicy.exec.allowInsecurePathbooleandefault: falseकमांड पाथ ownership और permission जांचों को बायपास करता है। केवल तब उपयोग करें जब पाथ किसी अन्य mechanism द्वारा सुरक्षित हो।
security.installPolicy.exec.allowSymlinkCommandbooleandefault: falseकॉन्फ़िगर किए गए कमांड पाथ को सिमलिंक होने देता है। resolved target को फिर भी अन्य पाथ जांचें पूरी करनी होंगी। Interpreter script arguments सीधे regular files होने चाहिए, सिमलिंक नहीं।
नीति stdin पर protocolVersion: 1, openclawVersion, targetType, targetName, sourcePath, sourcePathKind,
वैकल्पिक structured source, structured origin, और request के साथ एक JSON object प्राप्त करती है। इसे stdout पर
एक JSON object लिखना होगा: { "protocolVersion": 1, "decision": "allow" } या
{ "protocolVersion": 1, "decision": "block", "reason": "..." }। Non-zero
exit, timeout, malformed JSON, missing fields, या unsupported protocol versions
fail closed होते हैं।
OpenClaw सामान्य Gateway startup के दौरान install policy execute नहीं करता। policy सक्षम लेकिन unavailable होने पर installs
और updates fail closed होते हैं। openclaw doctor
static validation करता है, और openclaw doctor --deep configured command के विरुद्ध एक synthetic
install probe execute करता है।
Bulk updates target के अनुसार policy apply करते हैं: blocked skill या Plugin update उस target को fail करता है, policy को disable किए बिना या batch में बाद के targets को skip किए बिना।
उदाहरण stdin:
{ "protocolVersion": 1, "openclawVersion": "2026.6.1", "targetType": "skill", "targetName": "weather", "sourcePath": "/var/folders/.../openclaw-skill-clawhub/root", "sourcePathKind": "directory", "source": { "kind": "clawhub", "authority": "openclaw", "mutable": false, "network": true }, "origin": { "type": "clawhub", "registry": "https://clawhub.openclaw.ai", "slug": "weather", "version": "1.0.0" }, "request": { "kind": "skill-install", "mode": "install", "requestedSpecifier": "clawhub:weather@1.0.0" }, "skill": { "installId": "clawhub" }}न्यूनतम नीति कमांड:
#!/usr/bin/env node let input = "";process.stdin.setEncoding("utf8");process.stdin.on("data", (chunk) => { input += chunk;});process.stdin.on("end", () => { const request = JSON.parse(input); if (request.targetType === "plugin" && request.source?.kind === "local-path") { process.stdout.write( JSON.stringify({ protocolVersion: 1, decision: "block", reason: "local plugin paths are not approved on this host", }), ); return; } process.stdout.write(JSON.stringify({ protocolVersion: 1, decision: "allow" }));});बंडल किए गए कौशल की allowlist
skills.allowBundledstring[]केवल बंडल किए गए कौशल के लिए वैकल्पिक allowlist। सेट होने पर, सूची में मौजूद केवल बंडल किए गए कौशल पात्र होते हैं। Managed, agent-level, और workspace कौशल अप्रभावित रहते हैं।
प्रति-कौशल प्रविष्टियां (skills.entries)
entries के अंतर्गत keys default रूप से skill name से match करती हैं। यदि कोई skill
metadata.openclaw.skillKey define करता है, तो उसके बजाय उस key का उपयोग करें। hyphenated names को quote करें
(JSON5 quoted keys की अनुमति देता है)।
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.enabled" type="boolean">
false skill को disable करता है, भले ही वह bundled या installed हो। coding-agent
bundled skill opt-in है — इसे true पर सेट करें और सुनिश्चित करें कि claude,
codex, opencode, या कोई अन्य supported CLI installed और authenticated है।
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.apiKey" type='string | { source, provider, id }'>
उन skills के लिए convenience field जो metadata.openclaw.primaryEnv declare करते हैं।
plaintext string या SecretRef support करता है: { source: "env", provider: "default", id: "VAR_NAME" }।
"skills.entries.<key�����r�"skills.entries.<key�w₫��ܩएजेंट allowlists (agents)
जब आप समान machine/workspace skill roots लेकिन प्रति agent अलग visible skill set चाहते हैं, तो agent config का उपयोग करें।
{ agents: { defaults: { skills: ["github", "weather"], // shared baseline }, list: [ { id: "writer" }, // inherits github, weather { id: "docs", skills: ["docs-search"] }, // replaces defaults entirely { id: "locked-down", skills: [] }, // no skills ], },}agents.defaults.skillsstring[]उन agents द्वारा inherited shared baseline allowlist जो agents.list[].skills omit करते हैं।
skills को default रूप से unrestricted छोड़ने के लिए पूरी तरह omit करें।
agents.list[].skillsstring[]उस agent के लिए explicit final skill set। Explicit lists inherited
defaults को replace करती हैं — वे merge नहीं करतीं। उस agent के लिए कोई skills expose न करने के लिए [] पर set करें।
Workshop (skills.workshop)
skills.workshop.autonomous.enabledbooleandefault: falseजब true हो, तो agents सफल turns के बाद durable conversation
signals से pending proposals create कर सकते हैं। User-prompted skill creation हमेशा
इस setting की परवाह किए बिना Skill Workshop से होकर जाती है।
skills.workshop.approvalPolicy"pending" | "auto"default: "pending"pending के लिए एजेंट द्वारा शुरू किए गए लागू करने, अस्वीकार करने, या
क्वारंटीन से पहले ऑपरेटर की स्वीकृति आवश्यक होती है। auto उन कार्रवाइयों को बिना स्वीकृति की अनुमति देता है।
skills.workshop.allowSymlinkTargetWritesbooleandefault: falseSkill Workshop apply को उन workspace skill सिमलिंक के माध्यम से लिखने की अनुमति दें जिनका
वास्तविक लक्ष्य पहले से ही skills.load.allowSymlinkTargets द्वारा विश्वसनीय है। इसे
अक्षम रखें जब तक कि जनरेट किए गए प्रस्ताव लागू होने पर उस साझा skill
रूट को बदलना आवश्यक न हो।
skills.workshop.maxPendingnumberdefault: 50प्रति workspace रखे जाने वाले अधिकतम लंबित और क्वारंटीन किए गए प्रस्ताव।
skills.workshop.maxSkillBytesnumberdefault: 40000बाइट में अधिकतम प्रस्ताव बॉडी आकार। प्रस्ताव विवरणों पर 160 बाइट की कठोर सीमा है क्योंकि वे डिस्कवरी और लिस्टिंग आउटपुट में दिखाई देते हैं।
सिमलिंक किए गए skill रूट
डिफ़ॉल्ट रूप से, workspace, project-agent, extra-dir, और bundled skill रूट
containment सीमाएं हैं। <workspace>/skills के अंतर्गत ऐसा सिमलिंक किया गया skill फ़ोल्डर
जो रूट के बाहर resolve होता है, लॉग संदेश के साथ छोड़ दिया जाता है।
जानबूझकर बनाए गए सिमलिंक लेआउट की अनुमति देने के लिए, विश्वसनीय लक्ष्य घोषित करें:
{ skills: { load: { extraDirs: ["~/Projects/manager/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, },}इस config के साथ, <workspace>/skills/manager -> ~/Projects/manager/skills को
realpath resolution के बाद स्वीकार किया जाता है। extraDirs sibling repo को सीधे स्कैन करता है;
allowSymlinkTargets मौजूदा लेआउट के लिए सिमलिंक किए गए path को सुरक्षित रखता है।
Skill Workshop apply डिफ़ॉल्ट रूप से उन सिमलिंक के माध्यम से नहीं लिखता। Workshop apply को पहले से विश्वसनीय सिमलिंक लक्ष्यों के अंतर्गत skills बदलने देने के लिए, अलग से opt in करें:
{ skills: { load: { allowSymlinkTargets: ["~/Projects/manager/skills"], }, workshop: { allowSymlinkTargetWrites: true, }, },}प्रबंधित ~/.openclaw/skills और व्यक्तिगत ~/.agents/skills directories
पहले से ही skill-directory सिमलिंक स्वीकार करती हैं (प्रति-skill SKILL.md containment अभी भी
लागू होता है)।
सैंडबॉक्स किए गए skills और env vars
Docker सैंडबॉक्स में secrets इस तरह पास करें:
{ agents: { defaults: { sandbox: { docker: { env: { GEMINI_API_KEY: "your-key-here" }, }, }, }, },}लोडिंग क्रम रिमाइंडर
workspace/skills (highest)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsbundled skillsskills.load.extraDirs (lowest)watcher सक्षम होने पर skills और config में बदलाव अगले नए session पर प्रभावी होते हैं, या जब watcher कोई बदलाव detect करता है तो अगले agent turn पर।