Skills
Skills कॉन्फ़िगरेशन
अधिकांश Skills कॉन्फ़िगरेशन skills के अंतर्गत
~/.openclaw/openclaw.json में रहता है। Agent-विशिष्ट दृश्यता
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[]स्कैन करने के लिए अतिरिक्त Skill डायरेक्टरियां, सबसे कम प्राथमिकता पर (बंडल किए गए
और Plugin Skills के बाद)। पाथ ~ समर्थन के साथ विस्तारित किए जाते हैं।
skills.load.allowSymlinkTargetsstring[]भरोसेमंद वास्तविक लक्ष्य डायरेक्टरियां जिनमें symlink किए गए Skill फ़ोल्डर resolve हो सकते हैं,
भले ही symlink कॉन्फ़िगर किए गए root के बाहर हो। इसे
<workspace>/skills/manager -> ~/Projects/manager/skills जैसे जानबूझकर बनाए गए sibling-repo layouts
के लिए उपयोग करें। इस सूची को सीमित रखें — ~ या ~/Projects जैसे व्यापक roots की ओर संकेत न करें।
skills.load.watchbooleandefault: trueSkill फ़ोल्डरों को देखें और SKILL.md फ़ाइलों में बदलाव होने पर Skills snapshot को
refresh करें। grouped Skill roots के अंतर्गत nested फ़ाइलें भी शामिल हैं।
skills.load.watchDebounceMsnumberdefault: 250Skill watcher events के लिए debounce window, milliseconds में।
इंस्टॉल (skills.install)
skills.install.preferBrewbooleandefault: trueजब brew उपलब्ध हो, तो Homebrew installers को प्राथमिकता दें।
skills.install.nodeManager"npm" | "pnpm" | "yarn" | "bun"default: "npm"Skill installs के लिए Node package manager प्राथमिकता। यह केवल Skill
installs को प्रभावित करता है — Gateway runtime को फिर भी Node का उपयोग करना चाहिए (WhatsApp/Telegram के लिए Bun अनुशंसित नहीं है)।
npm, pnpm, या bun के लिए openclaw setup --node-manager का उपयोग करें;
Yarn-आधारित Skill installs के लिए "yarn" को manually set करें।
skills.install.allowUploadedArchivesbooleandefault: falseभरोसेमंद operator.admin Gateway clients को skills.upload.* के माध्यम से staged private zip
archives install करने दें। सामान्य ClawHub installs को
इस setting की आवश्यकता नहीं होती।
ऑपरेटर इंस्टॉल नीति (security.installPolicy)
security.installPolicy का उपयोग तब करें जब ऑपरेटरों को होस्ट-विशिष्ट नीति के साथ
Skills और Plugin इंस्टॉल को स्वीकृत या ब्लॉक करने के लिए किसी भरोसेमंद स्थानीय कमांड की आवश्यकता हो। नीति
OpenClaw द्वारा स्रोत सामग्री स्टेज करने के बाद और इंस्टॉल या अपडेट
जारी रहने से पहले चलती है। यह ClawHub Skills, अपलोड किए गए Skills, Git/local Skills,
Skill निर्भरता इंस्टॉलर, और 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
कमांड के बिना सक्षम होने पर, इंस्टॉल बंद-स्थिति में विफल हो जाते हैं।
security.installPolicy.targets("skill" | "plugin")[]वैकल्पिक लक्ष्य फ़िल्टर। छोड़े जाने पर, नीति हर समर्थित लक्ष्य पर लागू होती है ताकि नए इंस्टॉल अप्रत्याशित रूप से खुले न रह जाएँ।
security.installPolicy.exec.commandstringभरोसेमंद नीति executable का absolute path। OpenClaw इसे shell के बिना चलाता है और उपयोग से पहले path को validate करता है।
security.installPolicy.exec.argsstring[]command के बाद पास किए जाने वाले static arguments।
security.installPolicy.exec.timeoutMsnumberdefault: 10000एक नीति निर्णय के लिए अधिकतम wall-clock runtime।
security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMsनीति के बंद-स्थिति में विफल होने से पहले stdout या stderr output के बिना अधिकतम समय।
security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576नीति प्रक्रिया से स्वीकार किए जाने वाले संयुक्त stdout और stderr bytes की अधिकतम संख्या।
security.installPolicy.exec.env"Record<string,security.installPolicy.exec.passEnvstring[]OpenClaw प्रक्रिया से नीति प्रक्रिया में कॉपी किए गए environment variable names। केवल नामित variables पास किए जाते हैं।
security.installPolicy.exec.trustedDirsstring[]उन directories की वैकल्पिक allowlist जिनमें नीति executable हो सकता है।
security.installPolicy.exec.allowInsecurePathbooleandefault: falseकमांड पाथ के स्वामित्व और अनुमति जांचों को बायपास करता है। इसका उपयोग केवल तब करें जब पाथ किसी अन्य तंत्र से सुरक्षित हो।
security.installPolicy.exec.allowSymlinkCommandbooleandefault: falseकॉन्फ़िगर किए गए कमांड पाथ को symlink होने की अनुमति देता है। resolved target को फिर भी अन्य पाथ जांचों को पूरा करना होगा। Interpreter script arguments सीधे regular files होने चाहिए, symlinks नहीं।
पॉलिसी stdin पर protocolVersion: 1, openclawVersion, targetType,
targetName, sourcePath, sourcePathKind, वैकल्पिक संरचित source,
संरचित origin, और request के साथ एक JSON ऑब्जेक्ट प्राप्त करती है। इसे stdout
पर एक JSON ऑब्जेक्ट लिखना होगा: { "protocolVersion": 1, "decision": "allow" } या
{ "protocolVersion": 1, "decision": "block", "reason": "..." }। non-zero
exit, timeout, malformed JSON, missing fields, या unsupported protocol versions
fail closed होते हैं।
सामान्य Gateway startup के दौरान OpenClaw install policy निष्पादित नहीं करता। जब
policy सक्षम हो लेकिन उपलब्ध न हो, तो installs और updates fail closed होते हैं।
openclaw doctor static validation करता है, और openclaw doctor --deep
कॉन्फ़िगर किए गए command के विरुद्ध synthetic install probe निष्पादित करता है।
Bulk updates हर target पर अलग से policy लागू करते हैं: block किया गया skill या Plugin update उस target को विफल करता है, policy को अक्षम किए बिना या batch में बाद के targets को छोड़े बिना।
Example 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" }}न्यूनतम policy command:
#!/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" }));});बंडल किए गए skill की अनुमति-सूची
skills.allowBundledstring[]केवल बंडल किए गए skills के लिए वैकल्पिक अनुमति-सूची। सेट होने पर, केवल सूची में मौजूद बंडल किए गए skills पात्र होते हैं। Managed, agent-level, और workspace skills अप्रभावित रहते हैं।
प्रति-skill प्रविष्टियां (skills.entries)
entries के अंतर्गत keys डिफ़ॉल्ट रूप से skill name से मेल खाती हैं। यदि कोई skill
metadata.openclaw.skillKey परिभाषित करता है, तो उसके बजाय वह key उपयोग करें।
hyphenated names को quote करें (JSON5 quoted keys की अनुमति देता है)।
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.enabled" type="boolean">
false skill को अक्षम करता है, भले ही वह बंडल या install किया गया हो। coding-agent
बंडल किया गया skill opt-in है — इसे true पर सेट करें और सुनिश्चित करें कि claude,
codex, opencode, या कोई अन्य समर्थित CLI install और authenticated है।
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.apiKey" type='string | { source, provider, id }'>
उन skills के लिए सुविधा field जो metadata.openclaw.primaryEnv घोषित करते हैं।
plaintext string या SecretRef का समर्थन करता है: { source: "env", provider: "default", id: "VAR_NAME" }।
"skills.entries.<key�����r�"skills.entries.<key�w₫��ܩAgent अनुमति-सूचियां (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 अनुमति-सूची जो agents.list[].skills छोड़ देते हैं।
skills को डिफ़ॉल्ट रूप से unrestricted छोड़ने के लिए इसे पूरी तरह omit करें।
agents.list[].skillsstring[]उस agent के लिए स्पष्ट final skill set। स्पष्ट सूचियां inherited defaults को replace
करती हैं — वे merge नहीं करतीं। उस agent के लिए कोई skills expose न करने के लिए [] सेट करें।
Workshop (skills.workshop)
skills.workshop.autonomous.enabledbooleandefault: falseजब true हो, तो agents सफल turns के बाद टिकाऊ conversation signals से pending proposals
बना सकते हैं। User-prompted skill creation इस setting की परवाह किए बिना हमेशा
Skill Workshop से होकर जाता है।
skills.workshop.approvalPolicy"pending" | "auto"default: "pending"pending agent-initiated apply, reject, या quarantine से पहले operator approval मांगता है।
auto इन actions को approval के बिना अनुमति देता है।
skills.workshop.allowSymlinkTargetWritesbooleandefault: falseSkill Workshop apply को उन workspace skill symlinks के माध्यम से लिखने दें जिनका
real target पहले से skills.load.allowSymlinkTargets द्वारा trusted है। इसे
disabled रखें, जब तक generated proposal applies को उस shared skill root को mutate नहीं करना चाहिए।
skills.workshop.maxPendingnumberdefault: 50प्रति वर्कस्पेस रखे जाने वाले लंबित और क्वारंटाइन किए गए प्रस्तावों की अधिकतम संख्या।
skills.workshop.maxSkillBytesnumberdefault: 40000प्रस्ताव बॉडी का अधिकतम आकार, बाइट में। प्रस्ताव विवरणों पर 160 बाइट की सख्त सीमा है क्योंकि वे खोज और सूची आउटपुट में दिखाई देते हैं।
सिमलिंक किए गए skill roots
डिफ़ॉल्ट रूप से, वर्कस्पेस, प्रोजेक्ट-एजेंट, अतिरिक्त-निर्देशिका, और बंडल किए गए skill roots
कंटेनमेंट सीमाएं हैं। <workspace>/skills के अंतर्गत कोई सिमलिंक किया गया skill फ़ोल्डर
जो root के बाहर resolve होता है, लॉग संदेश के साथ छोड़ दिया जाता है।
जानबूझकर बनाए गए सिमलिंक लेआउट की अनुमति देने के लिए, विश्वसनीय लक्ष्य घोषित करें:
{ skills: { load: { extraDirs: ["~/Projects/manager/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, },}इस कॉन्फ़िग के साथ, <workspace>/skills/manager -> ~/Projects/manager/skills को
realpath resolution के बाद स्वीकार किया जाता है। extraDirs sibling repo को सीधे स्कैन करता है;
allowSymlinkTargets मौजूदा लेआउट के लिए सिमलिंक किए गए पथ को सुरक्षित रखता है।
Skill Workshop apply डिफ़ॉल्ट रूप से उन सिमलिंक के माध्यम से नहीं लिखता। Workshop apply को पहले से विश्वसनीय सिमलिंक लक्ष्यों के अंतर्गत skills बदलने देने के लिए, अलग से opt in करें:
{ skills: { load: { allowSymlinkTargets: ["~/Projects/manager/skills"], }, workshop: { allowSymlinkTargetWrites: true, }, },}प्रबंधित ~/.openclaw/skills और निजी ~/.agents/skills निर्देशिकाएं
पहले से skill-directory सिमलिंक स्वीकार करती हैं (प्रति-skill SKILL.md कंटेनमेंट फिर भी लागू होता है)।
सैंडबॉक्स किए गए skills और env vars
Docker sandbox में 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 द्वारा बदलाव का पता लगाने पर अगले agent turn में।