Skip to main content
Plugin पैकेजिंग (package.json मेटाडेटा), मैनिफ़ेस्ट (openclaw.plugin.json), सेटअप प्रविष्टियों और कॉन्फ़िग स्कीमा के लिए संदर्भ।
चरण-दर-चरण मार्गदर्शिका खोज रहे हैं? कार्य-विधि मार्गदर्शिकाएँ संदर्भ सहित पैकेजिंग को समझाती हैं: चैनल Plugin और प्रोवाइडर Plugin

पैकेज मेटाडेटा

आपके package.json में एक openclaw फ़ील्ड होना आवश्यक है, जो Plugin सिस्टम को बताता है कि आपका Plugin क्या प्रदान करता है:
ClawHub पर बाहरी रूप से प्रकाशित करने के लिए compat और build आवश्यक हैं। मानक प्रकाशन स्निपेट docs/snippets/plugin-publish/ में उपलब्ध हैं।

openclaw फ़ील्ड

string[]
प्रवेश-बिंदु फ़ाइलें (पैकेज रूट के सापेक्ष)। वर्कस्पेस और git चेकआउट विकास के लिए मान्य स्रोत प्रविष्टियाँ।
string[]
extensions के लिए निर्मित JavaScript समकक्ष, जिन्हें OpenClaw द्वारा इंस्टॉल किया गया npm पैकेज लोड करते समय प्राथमिकता दी जाती है। स्रोत/निर्मित समाधान क्रम के लिए SDK प्रवेश-बिंदु देखें।
string
हल्की, केवल-सेटअप प्रविष्टि (वैकल्पिक)।
string
setupEntry के लिए निर्मित JavaScript समकक्ष। setupEntry को भी सेट करना आवश्यक है।
object
{ id, label } फ़ॉलबैक Plugin पहचान, जिसका उपयोग तब किया जाता है जब किसी Plugin में ऐसी चैनल/प्रोवाइडर मेटाडेटा न हो जिससे आईडी या लेबल प्राप्त किया जा सके।
object
सेटअप, चयनकर्ता, त्वरित प्रारंभ और स्थिति सतहों के लिए चैनल कैटलॉग मेटाडेटा।
object
इंस्टॉल संकेत: npmSpec, localPath, defaultChoice, minHostVersion, expectedIntegrity, allowInvalidConfigRecovery, requiredPlatformPackages
object
स्टार्टअप व्यवहार फ़्लैग।
object
इस Plugin द्वारा समर्थित pluginApi संस्करण सीमा। बाहरी ClawHub प्रकाशनों के लिए आवश्यक।
प्रोवाइडर आईडी (providers: string[]) मैनिफ़ेस्ट मेटाडेटा हैं, पैकेज मेटाडेटा नहीं। उन्हें यहाँ नहीं, बल्कि openclaw.plugin.json में घोषित करें—Plugin मैनिफ़ेस्ट देखें।

openclaw.channel

openclaw.channel रनटाइम लोड होने से पहले चैनल खोज और सेटअप सतहों के लिए कम लागत वाला पैकेज मेटाडेटा है।

चैनल-स्वामित्व वाले सेटअप फ़ील्ड

चैनल Plugin को defineChannelSetupContract(...) के साथ रनटाइम कोड में सेटअप फ़ील्ड एक बार परिभाषित करने चाहिए और openclaw.channel.setup.fields के अंतर्गत उनका संगत क्रमांकन-योग्य प्रक्षेपण प्रकाशित करना चाहिए। रनटाइम परिभाषा Plugin-स्थानीय इनपुट प्रकार का अनुमान लगाती है, निर्देशित और गैर-इंटरैक्टिव दोनों मानों को पार्स करती है और चैनल-विशिष्ट कुंजियों को कोर प्रकारों से बाहर रखती है। पैकेज मेटाडेटा openclaw channels add <channel-id> --help और openclaw channels add --channel <channel-id> --help को Plugin लोड किए बिना केवल चयनित चैनल के विकल्प खोजने देता है।
समर्थित फ़ील्ड प्रकार string, boolean, integer, string-list और choice हैं। क्रेडेंशियल के लिए sensitive: true का उपयोग करें। प्रत्येक फ़ील्ड कुंजी अपने दीर्घ CLI फ़्लैग के camelCased एट्रिब्यूट नाम के बराबर होनी चाहिए, जिसमें कोई निषेधात्मक रूप भी शामिल है, जैसे --api-token के लिए apiToken। जब सकारात्मक और --no-* दोनों रूप आवश्यक हों, तब बूलियन फ़ील्ड cli.negatedFlags जोड़ सकते हैं। channel, account और अकाउंट प्रदर्शन name साझा नियंत्रण आवरण बने रहते हैं। जारी किया गया setup/ChannelSetupInput अडैप्टर मौजूदा बाहरी Plugin के लिए उपलब्ध रहता है। नए Plugin को setupContract उजागर करना चाहिए; दोनों मौजूद होने पर OpenClaw हमेशा इसे प्राथमिकता देता है। उदाहरण:
exposure निम्न का समर्थन करता है:
  • configured: कॉन्फ़िगर की गई/स्थिति-शैली सूची सतहों में चैनल शामिल करें
  • setup: इंटरैक्टिव सेटअप/कॉन्फ़िगर चयनकर्ताओं में चैनल शामिल करें
  • docs: दस्तावेज़/नेविगेशन सतहों में चैनल को सार्वजनिक-सामना वाला चिह्नित करें

openclaw.install

openclaw.install पैकेज मेटाडेटा है, मैनिफ़ेस्ट मेटाडेटा नहीं।
इंटरैक्टिव ऑनबोर्डिंग माँग पर इंस्टॉल सतहों के लिए openclaw.install का उपयोग करती है: यदि आपका Plugin रनटाइम लोड होने से पहले प्रदाता प्रमाणीकरण विकल्प या चैनल सेटअप/कैटलॉग मेटाडेटा उजागर करता है, तो ऑनबोर्डिंग ClawHub, npm या स्थानीय इंस्टॉल के लिए संकेत दे सकती है, Plugin को इंस्टॉल या सक्षम कर सकती है और फिर चयनित प्रवाह जारी रख सकती है। ClawHub विकल्प clawhubSpec का उपयोग करते हैं और मौजूद होने पर उन्हें प्राथमिकता दी जाती है; npm विकल्पों के लिए रजिस्ट्री npmSpec वाला विश्वसनीय कैटलॉग मेटाडेटा आवश्यक है (सटीक संस्करण और expectedIntegrity वैकल्पिक पिन हैं, जिन्हें सेट किए जाने पर इंस्टॉल/अपडेट के दौरान लागू किया जाता है)। “क्या दिखाना है” को openclaw.plugin.json में और “इसे कैसे इंस्टॉल करना है” को package.json में रखें।
यदि minHostVersion सेट है, तो इंस्टॉल और गैर-बंडल मैनिफ़ेस्ट-रजिस्ट्री लोडिंग दोनों इसे लागू करते हैं। पुराने होस्ट बाहरी Plugin छोड़ देते हैं; अमान्य संस्करण स्ट्रिंग अस्वीकार कर दी जाती हैं। बंडल किए गए स्रोत Plugin को होस्ट चेकआउट के समान संस्करण वाला माना जाता है।
पिन किए गए npm इंस्टॉल के लिए सटीक संस्करण npmSpec में रखें और अपेक्षित आर्टिफ़ैक्ट अखंडता जोड़ें:
allowInvalidConfigRecovery खराब कॉन्फ़िगरेशन के लिए सामान्य बायपास नहीं है। यह केवल सीमित बंडल किए गए Plugin की पुनर्प्राप्ति के लिए है, जो पुनः इंस्टॉल/सेटअप को उसी Plugin के अनुपलब्ध बंडल किए गए Plugin पथ या पुराने channels.<id> प्रविष्टि जैसे ज्ञात अपग्रेड अवशेषों की मरम्मत करने देता है। यदि कॉन्फ़िगरेशन असंबंधित कारणों से खराब है, तो इंस्टॉल अब भी बंद अवस्था में विफल होता है और ऑपरेटर को openclaw doctor --fix चलाने के लिए कहता है।

स्थगित पूर्ण लोड

चैनल Plugin निम्न के साथ स्थगित लोडिंग चुन सकते हैं:
सक्षम होने पर, OpenClaw सुनना शुरू करने से पहले के स्टार्टअप चरण में केवल setupEntry लोड करता है, यहाँ तक कि पहले से कॉन्फ़िगर किए गए चैनलों के लिए भी। Gateway के सुनना शुरू करने के बाद पूर्ण प्रविष्टि लोड होती है।
स्थगित लोडिंग केवल तभी सक्षम करें जब आपका setupEntry Gateway के सुनना शुरू करने से पहले उसकी आवश्यक हर चीज़ पंजीकृत करता हो (चैनल पंजीकरण, HTTP रूट, Gateway विधियाँ)। यदि आवश्यक स्टार्टअप क्षमताएँ पूर्ण प्रविष्टि के स्वामित्व में हैं, तो डिफ़ॉल्ट व्यवहार बनाए रखें।
यदि आपकी सेटअप/पूर्ण प्रविष्टि Gateway RPC विधियाँ पंजीकृत करती है, तो उन्हें Plugin-विशिष्ट उपसर्ग पर रखें। आरक्षित कोर व्यवस्थापक नेमस्पेस (config.*, exec.approvals.*, wizard.*, update.*) कोर के स्वामित्व में रहते हैं और हमेशा operator.admin में सामान्यीकृत होते हैं।

Plugin मैनिफ़ेस्ट

प्रत्येक नेटिव Plugin को पैकेज रूट में openclaw.plugin.json देना आवश्यक है। OpenClaw इसका उपयोग Plugin कोड निष्पादित किए बिना कॉन्फ़िगरेशन सत्यापित करने के लिए करता है।
चैनल Plugin के लिए channels जोड़ें (और प्रदाता Plugin providers जोड़ते हैं):
बिना कॉन्फ़िगरेशन वाले Plugin को भी स्कीमा देना आवश्यक है। खाली स्कीमा मान्य है:
पूर्ण स्कीमा संदर्भ के लिए Plugin मैनिफ़ेस्ट देखें।

ClawHub पर प्रकाशन

Skills और Plugin पैकेज अलग-अलग ClawHub प्रकाशन कमांड का उपयोग करते हैं। Plugin पैकेज के लिए पैकेज-विशिष्ट कमांड का उपयोग करें:
clawhub skill publish <path> किसी Skill फ़ोल्डर को प्रकाशित करने के लिए अलग कमांड है, Plugin पैकेज के लिए नहीं। ClawHub पर प्रकाशन देखें।

सेटअप प्रविष्टि

setup-entry.ts, index.ts का एक हल्का विकल्प है, जिसे OpenClaw तब लोड करता है जब उसे केवल सेटअप सतहों की आवश्यकता होती है (ऑनबोर्डिंग, कॉन्फ़िगरेशन मरम्मत, अक्षम चैनल निरीक्षण):
यह सेटअप प्रवाहों के दौरान भारी रनटाइम कोड (क्रिप्टो लाइब्रेरी, CLI पंजीकरण, पृष्ठभूमि सेवाएँ) लोड करने से बचाता है। साइडकार मॉड्यूल में सेटअप-सुरक्षित निर्यात रखने वाले बंडल किए गए कार्यस्थान चैनल defineSetupPluginEntry(...) के बजाय openclaw/plugin-sdk/channel-entry-contract से defineBundledChannelSetupEntry(...) का उपयोग कर सकते हैं। वह बंडल किया गया अनुबंध वैकल्पिक runtime निर्यात का भी समर्थन करता है, ताकि सेटअप-समय की रनटाइम वायरिंग हल्की और स्पष्ट बनी रह सके।
  • चैनल अक्षम है, लेकिन उसे सेटअप/ऑनबोर्डिंग सतहों की आवश्यकता है।
  • चैनल सक्षम है, लेकिन कॉन्फ़िगर नहीं है।
  • स्थगित लोडिंग सक्षम है (deferConfiguredChannelFullLoadUntilAfterListen)।
  • चैनल Plugin ऑब्जेक्ट (defineSetupPluginEntry के माध्यम से)।
  • Gateway के सुनने से पहले आवश्यक कोई भी HTTP रूट।
  • स्टार्टअप के दौरान आवश्यक कोई भी Gateway विधि।
उन स्टार्टअप Gateway विधियों को अब भी config.* या update.* जैसे आरक्षित कोर व्यवस्थापक नेमस्पेस से बचना चाहिए।
  • CLI पंजीकरण।
  • पृष्ठभूमि सेवाएँ।
  • भारी रनटाइम आयात (क्रिप्टो, SDK)।
  • केवल स्टार्टअप के बाद आवश्यक Gateway विधियाँ।

सीमित सेटअप सहायक आयात

तेज़ सेटअप-मात्र पथों के लिए, जब आपको सेटअप सतह के केवल एक भाग की आवश्यकता हो, तो व्यापक plugin-sdk/setup अम्ब्रेला के बजाय सीमित सेटअप सहायक सीम को प्राथमिकता दें: जब आपको moveSingleAccountChannelSectionToDefaultAccount(...) जैसे कॉन्फ़िगरेशन-पैच सहायकों सहित पूर्ण साझा सेटअप टूलबॉक्स चाहिए, तो व्यापक plugin-sdk/setup सीम का उपयोग करें। स्थिर सेटअप विज़ार्ड पाठ के लिए createSetupTranslator(...) का उपयोग करें। यह इसी क्रम में OPENCLAW_LOCALE, LC_ALL, LC_MESSAGES और LANG से पहला गैर-रिक्त मान उपयोग करता है, फिर अंग्रेज़ी पर वापस जाता है। स्पष्ट अंग्रेज़ी ओवरराइड के लिए OPENCLAW_LOCALE=en सेट करें। Plugin-विशिष्ट सेटअप पाठ को Plugin-स्वामित्व वाले कोड में रखें और साझा कैटलॉग कुंजियों का उपयोग केवल सामान्य सेटअप लेबल, स्थिति पाठ और आधिकारिक बंडल किए गए Plugin के सेटअप पाठ के लिए करें। सेटअप पैच अडैप्टर आयात के समय हॉट-पाथ सुरक्षित रहते हैं। उनकी बंडल की गई एकल-अकाउंट प्रोमोशन अनुबंध-सतह लुकअप आलसी है, इसलिए plugin-sdk/setup-runtime को आयात करने से अडैप्टर के वास्तव में उपयोग किए जाने से पहले बंडल की गई अनुबंध-सतह खोज तुरंत लोड नहीं होती।

चैनल-स्वामित्व वाले सेटअप इनपुट फ़ील्ड

ChannelSetupInput सेटअप कॉलर और चैनल Plugin द्वारा साझा किया जाने वाला एक सामान्य आवरण है। इसके स्थायी रूप से टाइप किए गए फ़ील्ड name, token, tokenFile, useEnv, allowFrom और defaultTo हैं। अतिरिक्त Plugin-स्वामित्व वाली कुंजियाँ अब भी रनटाइम इनपुट ऑब्जेक्ट पर मौजूद हो सकती हैं, लेकिन साझा प्रकार किसी इंडेक्स सिग्नेचर को घोषित नहीं करता। प्रत्येक Plugin को अपने सेटअप फ़ील्ड घोषित करके सीमित करना या अडैप्टर सीमा पर Plugin-स्वामित्व वाले स्कीमा से उन्हें सत्यापित करना आवश्यक है:
चैनल-विशिष्ट फ़ील्ड, जिन्हें पहले सीधे ChannelSetupInput पर घोषित किया गया था, बाहरी स्रोत संगतता के लिए अस्थायी रूप से टाइप किए हुए हैं। वे बहिष्कृत हैं। 2026-07-22 को 426 प्रकाशित आउट-ऑफ़-ट्री चैनल plugins की रजिस्ट्री जाँच में ऐसे 21 फ़ील्ड हटा दिए गए जिनके कोई रीडर नहीं थे और ज्ञात रीडर वाले 22 फ़ील्ड बनाए रखे गए। जैसे ही कोई प्रकाशित plugin किसी बनाए रखे गए फ़ील्ड को पढ़ना बंद करता है, उसे हटा दिया जाता है; किसी संस्करण सीमा की आवश्यकता नहीं है। नए और बंडल किए गए plugins को इस स्तर पर निर्भर नहीं होना चाहिए; उनके स्वामित्व वाले फ़ील्ड स्थानीय रूप से घोषित करें।

चैनल-स्वामित्व वाले एकल खाते का प्रोमोशन

जब कोई चैनल एकल-खाता शीर्ष-स्तरीय कॉन्फ़िगरेशन से channels.<id>.accounts.* में अपग्रेड होता है, तो डिफ़ॉल्ट साझा व्यवहार प्रोमोट किए गए खाता-स्कोप वाले मानों को accounts.default में ले जाता है। प्रत्येक चैनल plugin अपने सेटअप अडैप्टर के माध्यम से उस प्रोमोशन को विस्तृत या सीमित कर सकता है:
  • singleAccountKeysToMove: अतिरिक्त शीर्ष-स्तरीय कुंजियाँ जिन्हें प्रोमोट किए गए खाते में ले जाना चाहिए
  • namedAccountPromotionKeys: जब नामित खाते पहले से मौजूद हों, तो केवल ये कुंजियाँ प्रोमोट किए गए खाते में जाती हैं; साझा नीति/डिलीवरी कुंजियाँ चैनल रूट पर रहती हैं
  • resolveSingleAccountPromotionTarget(...): चुनें कि कौन-सा मौजूदा खाता प्रोमोट किए गए मान प्राप्त करेगा
singleAccountKeysToMove की उपस्थिति दर्शाती है कि प्रोमोशन अनुबंध पूरा हो गया है। लेगेसी कुंजी प्रोमोशन से बाहर रहने के लिए फ़ील्ड को खाली ऐरे होने पर भी घोषित करें। फ़ील्ड छोड़ने वाले अडैप्टर पहले से प्रकाशित plugins के लिए रीडर-समर्थित पूर्व-घोषणा प्रोमोशन स्तर बनाए रखते हैं। 2026-07-22 की रजिस्ट्री जाँच में ऐसे 23 कुंजियाँ हटा दी गईं जिनके कोई प्रकाशित आश्रित नहीं थे और छह सामान्य कुंजियों के साथ केवल सेटअप वाली rooms कुंजी बनाए रखी गई। जैसे ही किसी बनाए रखी गई कुंजी के प्रकाशित रीडर घोषणाओं पर माइग्रेट होते हैं, उसे हटा दिया जाता है; किसी संस्करण सीमा की आवश्यकता नहीं है। जब doctor को हल्के बंडल किए गए सेटअप आर्टिफ़ैक्ट से ये घोषणाएँ लोड करनी हों, तो plugin पैकेज मेनिफ़ेस्ट में openclaw.setupFeatures.configPromotion: true घोषित करें। केवल सेटअप वाली plugin सतह और पूर्ण चैनल plugin को समान घोषणाएँ उजागर करनी चाहिए। पहले से रिज़ॉल्व किए गए plugin के साथ moveSingleAccountChannelSectionToDefaultAccount(...) को कॉल करते समय, उसके सेटअप अडैप्टर को setupSurface के रूप में पास करें। कॉलर द्वारा दी गई सेटअप सतहों को लोड किए गए और बंडल किए गए लुकअप पर प्राथमिकता मिलती है, जिससे स्कोप किए गए या केवल सेटअप वाले plugins वैश्विक पंजीकरण से स्वतंत्र रहते हैं।
Matrix वर्तमान बंडल किया गया उदाहरण है। यदि ठीक एक नामित Matrix खाता पहले से मौजूद है, या यदि defaultAccount किसी मौजूदा गैर-कैनोनिकल कुंजी, जैसे Ops, की ओर संकेत करता है, तो प्रोमोशन नई accounts.default प्रविष्टि बनाने के बजाय उस खाते को सुरक्षित रखता है।

कॉन्फ़िगरेशन स्कीमा

Plugin कॉन्फ़िगरेशन को आपके मेनिफ़ेस्ट के JSON Schema के विरुद्ध सत्यापित किया जाता है। उपयोगकर्ता plugins को इस प्रकार कॉन्फ़िगर करते हैं:
पंजीकरण के दौरान आपके plugin को यह कॉन्फ़िगरेशन api.pluginConfig के रूप में मिलता है। चैनल-विशिष्ट कॉन्फ़िगरेशन के लिए इसके बजाय चैनल कॉन्फ़िगरेशन अनुभाग का उपयोग करें:

चैनल कॉन्फ़िगरेशन स्कीमा बनाना

Zod स्कीमा को plugin-स्वामित्व वाले कॉन्फ़िगरेशन आर्टिफ़ैक्ट द्वारा उपयोग किए जाने वाले ChannelConfigSchema रैपर में बदलने के लिए buildChannelConfigSchema का उपयोग करें:
यदि आप अनुबंध पहले से JSON Schema या TypeBox के रूप में लिखते हैं, तो प्रत्यक्ष सहायक का उपयोग करें ताकि OpenClaw मेटाडेटा पथों पर Zod-से-JSON-Schema रूपांतरण छोड़ सके:
तृतीय-पक्ष plugins के लिए, कोल्ड-पाथ अनुबंध अब भी plugin मेनिफ़ेस्ट है: जनरेट किए गए JSON Schema को openclaw.plugin.json#channelConfigs में प्रतिबिंबित करें ताकि कॉन्फ़िगरेशन स्कीमा, सेटअप और UI सतहें रनटाइम कोड लोड किए बिना channels.<id> का निरीक्षण कर सकें।

सेटअप विज़ार्ड

चैनल plugins openclaw onboard के लिए इंटरैक्टिव सेटअप विज़ार्ड प्रदान कर सकते हैं। विज़ार्ड, ChannelPlugin पर एक ChannelSetupWizard ऑब्जेक्ट होता है:
ChannelSetupWizard में textInputs, dmPolicy, allowFrom, groupAccess, prepare, finalize और अन्य भी समर्थित हैं। पूर्ण बंडल किए गए उदाहरण के लिए Discord plugin का src/setup-core.ts देखें।
उन DM अनुमतिसूची प्रॉम्प्ट के लिए जिन्हें केवल मानक note -> prompt -> parse -> merge -> patch प्रवाह की आवश्यकता है, openclaw/plugin-sdk/setup से साझा सेटअप सहायकों को प्राथमिकता दें: createPromptParsedAllowFromForAccount(...) और createTopLevelChannelParsedAllowFromPrompt(...)
उन चैनल सेटअप स्थिति ब्लॉक के लिए जिनमें केवल लेबल, स्कोर और वैकल्पिक अतिरिक्त पंक्तियाँ अलग होती हैं, प्रत्येक plugin में समान status ऑब्जेक्ट स्वयं बनाने के बजाय openclaw/plugin-sdk/setup से createStandardChannelSetupStatus(...) को प्राथमिकता दें।
उन वैकल्पिक सेटअप सतहों के लिए जिन्हें केवल कुछ संदर्भों में दिखाई देना चाहिए, openclaw/plugin-sdk/channel-setup से createOptionalChannelSetupSurface का उपयोग करें:
जब आपको उस वैकल्पिक-इंस्टॉल सतह के केवल एक भाग की आवश्यकता हो, तो plugin-sdk/channel-setup निम्न-स्तरीय createOptionalChannelSetupAdapter(...) और createOptionalChannelSetupWizard(...) बिल्डर भी उजागर करता है।जनरेट किए गए वैकल्पिक अडैप्टर/विज़ार्ड वास्तविक कॉन्फ़िगरेशन लेखन पर फ़ेल-क्लोज़ होते हैं। वे validateInput, applyAccountConfig और finalize में एक ही इंस्टॉल-आवश्यक संदेश का पुनः उपयोग करते हैं और docsPath सेट होने पर दस्तावेज़ लिंक जोड़ते हैं।
बाइनरी-समर्थित सेटअप UI के लिए, प्रत्येक चैनल में समान बाइनरी/स्थिति संयोजन की प्रतिलिपि बनाने के बजाय साझा प्रत्यायोजित सहायकों को प्राथमिकता दें:
  • createDetectedBinaryStatus(...) उन स्थिति ब्लॉक के लिए जिनमें केवल लेबल, संकेत, स्कोर और बाइनरी पहचान अलग होती है
  • createCliPathTextInput(...) पथ-समर्थित टेक्स्ट इनपुट के लिए
  • createDelegatedSetupWizardProxy(...) जब setupEntry को स्थिति, तैयारी या अंतिम रूप देने का व्यवहार अधिक भारी पूर्ण विज़ार्ड को आलस्यपूर्वक अग्रेषित करना हो
  • createDelegatedTextInputShouldPrompt(...) जब setupEntry को केवल textInputs[*].shouldPrompt निर्णय प्रत्यायोजित करना हो

प्रकाशन और इंस्टॉल करना

बाहरी plugins: ClawHub पर प्रकाशित करें, फिर इंस्टॉल करें:
लॉन्च बदलाव के दौरान साधारण पैकेज विनिर्देश npm से इंस्टॉल होते हैं, जब तक नाम किसी बंडल किए गए या आधिकारिक plugin आईडी से मेल न खाता हो; उस स्थिति में OpenClaw इसके बजाय उस स्थानीय/आधिकारिक प्रति का उपयोग करता है। निर्धारक स्रोत चयन के लिए clawhub:, npm:, git: या npm-pack: का उपयोग करें — plugins प्रबंधित करें देखें।
रिपॉज़िटरी के भीतर के plugins: इन्हें बंडल किए गए plugin वर्कस्पेस ट्री के अंतर्गत रखें; बिल्ड के दौरान इनकी स्वचालित रूप से खोज की जाती है।
npm-स्रोत वाले इंस्टॉल के लिए, openclaw plugins install पैकेज को ~/.openclaw/npm/projects के अंतर्गत प्रति-plugin प्रोजेक्ट में लाइफ़साइकल स्क्रिप्ट अक्षम करके (--ignore-scripts) इंस्टॉल करता है। Plugin निर्भरता ट्री को शुद्ध JS/TS रखें और ऐसे पैकेजों से बचें जिन्हें postinstall बिल्ड की आवश्यकता होती है।
Gateway स्टार्टअप plugin निर्भरताएँ इंस्टॉल नहीं करता। npm/git/ClawHub इंस्टॉल प्रवाह निर्भरता अभिसरण के स्वामी हैं; स्थानीय plugins की निर्भरताएँ पहले से इंस्टॉल होनी चाहिए।
बंडल किया गया पैकेज मेटाडेटा स्पष्ट होता है, Gateway स्टार्टअप पर बिल्ड किए गए JavaScript से अनुमानित नहीं। रनटाइम निर्भरताएँ उनका स्वामित्व रखने वाले plugin पैकेज में होती हैं; पैकेज किया गया OpenClaw स्टार्टअप कभी भी plugin निर्भरताओं की मरम्मत या प्रतिलिपि नहीं करता।

संबंधित