DeepSeek Harness के लिए सबसे जरूरी 5 प्लगइन्स
DeepSeek Harness का उपयोग करते समय इन 5 प्लगइन्स को इंस्टॉल करें। ये बजट कैप्स, टूल परमिशन, इंजेक्शन स्कैनिंग, ड्यूरेबल मेमोरी और LAN एक्सेस को मैनेज करने में आपकी मदद करेंगे।
कौन से DeepSeek Harness plugins इंस्टॉल करने योग्य हैं
DeepSeek Harness plugins थर्ड-पार्टी कोड होते हैं जो आपके agent के अंदर, आपके agent के विशेषाधिकारों के साथ, और आपके द्वारा भुगतान की गई मशीन पर चलते हैं। कम्युनिटी लिस्ट में बीस से अधिक श्रेणियां और एक हजार से अधिक एंट्रीज हैं। किराए के virtual private server (VPS) पर आपको पांच की आवश्यकता होती है: spend caps के लिए dsh-budget, tool gating के लिए dsh-permission-rules, injection और secret scanning के लिए dsh-defend, session से अधिक समय तक रहने वाले facts के लिए dsh-memory, और केवल यह तय करने के बाद कि आप कैसे authenticate करेंगे, dsh-web-lan-access।
यह harness dsh है, जो DeepSeek का open-source agent harness है, जिसे इस तरह बनाया गया है कि सब कुछ एक plugin हो। इसका अपना README इसे developer preview कहता है और THERE WILL BE COMPATIBILITY-BREAKING CHANGES के प्रति चेतावनी देता है। यही एक तथ्य नीचे दिए गए हर विकल्प को निर्धारित करता है। जो आप इंस्टॉल करते हैं उसे pin करें, किसी upgrade के कारण उसके खराब होने की उम्मीद रखें, और सेट को इतना छोटा रखें कि आप वास्तव में इसे पूरा पढ़ सकें। यदि harness अभी तक चल नहीं रहा है, तो VPS पर DeepSeek Harness इंस्टॉल से शुरुआत करें और फिर यहाँ वापस आएं। यदि वे हिस्से जिनसे ये plugins जुड़ते हैं—agent loop, इसके tools, इसकी memory—अभी भी अस्पष्ट हैं, तो पहले fundamentals को समझें, क्योंकि नीचे दिया गया हर विकल्प तब आंकना आसान हो जाता है जब आप जानते हैं कि प्रत्येक लेयर क्या कर रही है।
dsh किसी प्लगइन को कैसे इंस्टॉल करता है और कॉन्फ़िगरेशन कहाँ सेव होता है
dsh खुद को Cordis प्लगइन्स से जोड़ता है, इसलिए एक रनिंग इंस्टेंस एक प्रोग्राम के बजाय प्लगइन्स का एक ट्री (tree) होता है। एक प्रोफाइल उन प्लगइन्स का एक नामित संयोजन (named composition) है। दो टेम्प्लेट web और headless हैं। $DSH_HOME डिफ़ॉल्ट रूप से ~/.dsh पर सेट होता है, और एक प्रोफाइल $DSH_HOME/profiles/<name>/ पर स्थित होता है, जिसमें उसका अपना package.json, एक dsh.profile मैनिफेस्ट और एक cordis.patch.yml होता है।
dsh plugin --profile web list
dsh plugin --profile web add dsh-budget
dsh plugin --profile web remove dsh-budgetचार सोर्स फॉर्म काम करते हैं: एक साधारण npm पैकेज नाम, @towzai/dsh-memory जैसा एक स्कोप्ड नाम, github:PerryLink/dsh-budget#main जैसा एक GitHub रेफरेंस, और link: या ./ के साथ एक लोकल पाथ। GitHub फॉर्म का उपयोग करें, क्योंकि आप #main को एक कमिट (commit) से बदल सकते हैं और अगले महीने वही कोड वापस प्राप्त कर सकते हैं।
dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"लेयर्स एक निश्चित क्रम में लागू होती हैं: प्रोफाइल की लिस्ट में दिए गए क्रम में प्रत्येक बंडल, फिर प्रोफाइल का cordis.patch.yml, फिर होम-लेवल cordis.patch.yml, और अंत में कोई भी --patch ओवरले। क्रम महत्वपूर्ण है क्योंकि बाद वाली लेयर पहले वाली लेयर द्वारा सेट की गई चीज़ों को रीकॉन्फ़िगर या हटा सकती है। इसलिए जब कोई प्लगइन इंस्टॉल तो दिखे लेकिन काम न करे, तो प्रोफाइल का cordis.patch.yml खोलें और दो चीज़ें जाँचें: कि उसका इंसर्ट ब्लॉक वहाँ मौजूद है, और कोई बाद वाली लेयर उसे डिसेबल तो नहीं कर रही है।
17 अगस्त 2026 तक, npm पैकेज @deepseek-ai/dsh 0.1.0-rc.7 पर है, जबकि नीचे दिया गया प्रत्येक प्लगइन 0.1.0-rc.5 से 0.1.0-rc.6 के साथ संगतता (compatibility) घोषित करता है। इस इकोसिस्टम में यह अंतर सामान्य है, और यही वह मुख्य कारण है जिससे प्लगइन लोड होना बंद हो जाता है: हार्नेस (harness) अपने आसपास के प्लगइन्स की तुलना में तेज़ी से अपडेट होता है। हार्नेस को जानबूझकर अपग्रेड करें, फिर एक-एक करके प्लगइन्स का परीक्षण करें।
किसी प्लगइन पर भरोसा करने से पहले उसे पढ़ें
एक dsh प्लगइन को harness से अलग सैंडबॉक्स में नहीं रखा जाता है। यह उसी Cordis ट्री में, उसी प्रोसेस में, उसी ऑपरेटिंग सिस्टम यूजर के रूप में लोड होता है, और इसे समान मॉडल क्रेडेंशियल्स और वर्किंग ट्री तक पहुंच प्राप्त होती है। इसे इंस्टॉल करना ब्राउज़र एक्सटेंशन जोड़ने की तुलना में किसी और की स्क्रिप्ट को sudo के साथ चलाने के अधिक करीब है। यह वही विश्वास का प्रश्न है जो Claude Code plugins उठाते हैं, और इसका उत्तर भी वही है: कोड पढ़ें, या इसे इंस्टॉल न करें।
इस क्रम में चार चीजों की जांच करें:
- यह किन एक्सटेंशन पॉइंट्स का उपयोग करता है।
tools/pre-executeका अर्थ है कि यह हर टूल कॉल को देखता है और उसे ब्लॉक कर सकता है।agent/pre-stepका अर्थ है कि यह आपके संदेशों को देखता है।webServer.tapIndexका अर्थ है कि यह आपके ब्राउज़र को भेजे गए पेज को फिर से लिखता है। जो प्लगइन इनमें से किसी का भी उपयोग नहीं करता, वह बहुत कम काम कर सकता है; जो प्लगइन इन सभी का उपयोग करता है, वह आपकी सुरक्षा सीमा है। - क्या यह नेटवर्क से बात करता है। सोर्स कोड में
fetch,http, और किसी भी हार्ड-कोडेड होस्टनेम को खोजें। एक कॉस्ट मीटर जो डेटा बाहर भेजता है, वह आपके उपयोग के पैटर्न को कहीं और भेज रहा है। - क्या यह क्रेडेंशियल्स पढ़ता है। कोई भी चीज़ जो
credentials.*या प्रोवाइडर की (key) को छूती है, उसके लिए README में एक स्पष्ट कारण होना चाहिए। - लाइसेंस और अंतिम कमिट की तारीख। एक बिना लाइसेंस वाला प्लगइन, जिसे महीनों से नहीं छुआ गया है, ऐसे इकोसिस्टम में जो साप्ताहिक रूप से बदलता है, एक जोखिम है।
फिर ब्रांच के बजाय कमिट द्वारा इंस्टॉल करें, और उस इंसर्ट ब्लॉक को पढ़ें जिसे इंस्टॉलर ने cordis.patch.yml में लिखा है। वह ब्लॉक प्लगइन आईडी और उसके द्वारा रजिस्टर किए गए कॉन्फ़िगरेशन का नाम बताता है, जो आपने अभी जो जोड़ा है उसका सबसे संक्षिप्त और ईमानदार विवरण है। प्रोवाइडर की (keys) को प्लगइन की पहुंच से दूर रखें, जहाँ harness आपको इसकी अनुमति देता है, जैसा कि AI एजेंट्स से सीक्रेट्स को दूर रखने के बारे में बताया गया है।
dsh-budget: मैं किसी एजेंट को पूरी रात खर्च करने से कैसे रोकूँ?
एक VPS पर एजेंट बिना किसी निगरानी के चलता है। उसे वहाँ रखने का उद्देश्य ही यही है, और यही इसका जोखिम भी है। dsh-budget प्रति मॉडल, प्रति सत्र और प्रति दिन टोकन और अनुमानित लागत को मापता है, और इन योगों पर सीमाएं लागू करता है।
dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"इसके डिफ़ॉल्ट मान काफी उदार हैं: 10 USD प्रति सत्र, 50 प्रति दिन, और 500 प्रति माह। ये एक फंडेड टीम के लिए उपयुक्त हैं। एक व्यक्तिगत सर्वर पर ये इतने अधिक हैं कि कोई भी runaway loop सीमा तक पहुँचने से पहले ही समाप्त हो जाएगी, इसलिए पहले दिन ही इन्हें कम कर दें।
The data behind this chart
[
{
"label": "Per session",
"plugin_default_usd": 10,
"suggested_start_usd": 2
},
{
"label": "Per day",
"plugin_default_usd": 50,
"suggested_start_usd": 5
},
{
"label": "Per month",
"plugin_default_usd": 500,
"suggested_start_usd": 40
}
]सुझाया गया कॉलम एक बॉक्स पर एक ऑपरेटर के लिए शुरुआती बिंदु है, न कि कोई निर्धारित आंकड़ा। जब उपयोग का एक वास्तविक महीना आपको बताए, तब इसे बढ़ाएं। 40 USD की मासिक सीमा और 2 की सत्र सीमा के साथ यह जल्दी और स्पष्ट रूप से विफल हो जाता है, जो कि आप तब चाहते हैं जब आप अभी भी टूल की खपत को समझ रहे हों।
- id: budget
config:
budgets:
session: 2
daily: 5
monthly: 40
warnRatio: 0.8
overLimit: blockवह सेटिंग जो मशीन के व्यवहार को बदलती है, वह overLimit है। इसका डिफ़ॉल्ट मान alert है, जो केवल एक चेतावनी प्रिंट करता है और खर्च जारी रखता है, इसलिए डिफ़ॉल्ट रूप से यह प्लगइन केवल एक डैशबोर्ड है। इसे block पर सेट करें और सीमा तक पहुँचने पर हार्नेस आगे के मॉडल कॉल को अस्वीकार कर देगा, जिसका अर्थ है कि कोई भी ओवरनाइट जॉब सुबह तक बिलिंग करने के बजाय रुक जाएगी। degrade तीसरा मोड है: यह मॉडल को degradation मैप से किसी सस्ते मॉडल से बदल देता है, जो तब सही होता है जब जॉब का पूरा होना आवश्यक हो लेकिन आपको सबसे अच्छे मॉडल की आवश्यकता न हो। warnRatio डिफ़ॉल्ट रूप से 0.8 पर सेट है, इसलिए आपको सीमा के 80 प्रतिशत पर इसकी सूचना मिल जाती है।
दो ईमानदार सीमाएं। लागत की गणना आपके द्वारा प्रदान की गई कीमतों से की जाती है: prices डिफ़ॉल्ट रूप से खाली है और defaultPrice प्रति मिलियन इनपुट टोकन के लिए 1.0 USD और आउटपुट के लिए 3.0 USD पर वापस आ जाता है। अपने मॉडलों के लिए वास्तविक संख्याएं भरें, अन्यथा डैशबोर्ड केवल एक अनुमान होगा जिसे माप का नाम दिया गया है। दूसरा, प्लगइन सत्र इवेंट स्ट्रीम से चल रही प्रक्रिया में डेटा को एकत्रित करता है, इसलिए हार्नेस के रीस्टार्ट होने पर कुल योग रीसेट हो जाते हैं। एक क्रैश लूप, या कोई सुपरवाइजर जो dsh को रीस्टार्ट करता है, दैनिक सीमा को रीसेट कर देता है। dsh-budget को अपनी स्वयं की जॉब्स के खिलाफ एक सुरक्षा उपाय के रूप में मानें और प्रदाता खाते पर खर्च की सीमा को वास्तविक अधिकतम सीमा के रूप में रखें, जो VPS पर AI एजेंट की लागत को नियंत्रित करने पर व्यापक चर्चा का विषय है।
दैनिक उपयोग के लिए आप अवलोकन हेतु /budget, प्रति-मॉडल विवरण के लिए /budget models, और आगे बढ़ने का निर्णय लेने के बाद ब्लॉक हटाने के लिए /budget unblock <scope> का उपयोग करें।
dsh-permission-rules: कौन से टूल कॉल कभी नहीं चलने चाहिए?
dsh-permission-rules, tools/pre-execute वॉटरफॉल पर घोषणात्मक (declarative) नियम लागू करता है, इसलिए टूल चलने से पहले नियम का मूल्यांकन किया जाता है। इसमें तीन क्रियाएं होती हैं। allow कॉल को आगे जाने देता है, deny इसे ब्लॉक करता है और एक कारण लौटाता है जिसे मॉडल पढ़ सकता है, और ask इसे आधिकारिक अनुमोदन (approval) सीम पर भेज देता है।
dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#b30b4fb"नियम सेशन की वर्किंग डायरेक्टरी के सापेक्ष .dsh/rules.yaml में रहते हैं, जिसमें एक ग्लोबल fallbackPath और फाइलसिस्टम रूट की ओर जाने के लिए वैकल्पिक searchUp होता है। मिलान (matching) में टूल-नाम ग्लोब्स, पैरामीटर की और वैल्यू ग्लोब्स, वर्कस्पेस-सापेक्ष पाथ ग्लोब्स, main या subagent जैसे एजेंट चयनकर्ता, और नेटवर्क लक्ष्य शामिल हैं।
rules:
- match: { tools: [bash], params: { command: "rm -rf*" } }
action: deny
reason: "No recursive deletes"
- match: { tools: [edit, write], paths: ["**/.env*", "**/secrets/**"] }
action: ask
reason: "Secret files need confirmation"
- match: { tools: ["mcp__*"] }
action: ask
reason: "MCP tools need confirmation"मूल्यांकन में 'पहला मिलान मान्य' (first match wins) का सिद्धांत लागू होता है, इसलिए सबसे ऊपर रखा गया एक व्यापक allow उसके नीचे के सभी संकीर्ण नियमों को चुपचाप रद्द कर देता है। अस्वीकृति (denial) वाले नियम पहले लिखें और अनुमति (permissive) वाले नियम अंत में। टूल-नाम ग्लोब में mcp__* शामिल है, जो उन टूल्स को नियंत्रित करने का तरीका है जो हार्नेस के बजाय मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) सर्वर से आते हैं, और यह तब महत्वपूर्ण हो जाता है जब आप VPS पर MCP सर्वर चला रहे हों।
एक व्यवहार जिसके लिए योजना बनानी चाहिए: ask को एक उत्तरदाता (answerer) की आवश्यकता होती है। headless प्रोफाइल पर हो सकता है कि कोई न देख रहा हो, इसलिए ask नियम किसी रन को तब तक रोक सकता है जब तक कोई उपस्थित न हो। deny का उपयोग उन चीजों के लिए करें जिन्हें आप कभी भी अनुमोदित नहीं करेंगे, ask को उस प्रोफाइल के लिए रखें जिसके सामने आप बैठते हैं, और यदि आप चाहते हैं कि अनुमोदन बिना किसी की निगरानी के काम करें, तो आपको एक वास्तविक उत्तर देने वाले पाथ की आवश्यकता होगी, जो अनुमोदन के साथ AI एजेंट क्रियाओं को नियंत्रित करने का विषय है।
dsh-defend: प्रॉम्प्ट इंजेक्शन और लीक हुए सीक्रेट्स के बारे में क्या?
dsh-defend तीन बिंदुओं पर स्कैन करता है: agent/pre-step पर आने वाले इनबाउंड मैसेज, tools/pre-execute पर टूल के तर्क (arguments) जिसमें एक डिस्ट्रक्टिव-डिलीट गार्ड शामिल है, और tools/post-execute पर टूल के परिणाम। अंतिम वाला बिंदु सबसे महत्वपूर्ण है, क्योंकि यहीं पर वेब पेज से प्राप्त सामग्री को मॉडल द्वारा प्रोसेस करने से पहले जांचा जाता है।
dsh plugin --profile web add "github:PerryLink/dsh-defend#7ba3427"डिफ़ॉल्ट सेटिंग्स सख्त होने के बजाय सतर्क हैं: detection.injectionAction, detection.jailbreakAction और detection.secretAction सभी ask पर हैं, जबकि detection.secretBlockCritical को true पर रखा गया है, इसलिए अन्य सेटिंग्स चाहे जो भी हों, एक महत्वपूर्ण सीक्रेट को ब्लॉक कर दिया जाता है। किसी अनअटेंडेड (बिना निगरानी वाले) बॉक्स पर, उन एक्शन्स को block में बदलें जिनकी आपको परवाह है, क्योंकि ask की स्थिति में जब पूछने के लिए कोई न हो, तो यह कोई निर्णय नहीं है।
ऑडिट डिज़ाइन प्रशंसा के योग्य है। defend/detection इवेंट्स में रूल आईडी, फैमिली, कैटेगरी, गंभीरता, निर्णय और स्कैन के तथ्य रिकॉर्ड किए जाते हैं, लेकिन कभी भी मैच हुआ टेक्स्ट रिकॉर्ड नहीं किया जाता; सीक्रेट्स को केवल उनके प्रकार (type) के आधार पर रिकॉर्ड किया जाता है। इसलिए, ऑडिट लॉग को इनेबल करने से उस क्रेडेंशियल की दूसरी कॉपी नहीं बनती जिसे आप सुरक्षित करने का प्रयास कर रहे थे।
यह स्पष्ट रखें कि इससे आपको क्या लाभ मिलता है। डिटेक्शन नियमों पर आधारित है, और README में स्पष्ट रूप से कहा गया है कि नई शब्दावली और मल्टी-स्टेप हमले इसे पार कर सकते हैं। यह स्पष्ट हमलों की दर को कम करता है। यह किसी एजेंट को अविश्वसनीय सामग्री पर उपयोग करने के लिए पूरी तरह सुरक्षित नहीं बनाता है, इसलिए इसके नीचे अनुमतियों (permission rules) को बनाए रखें।
dsh-memory: एजेंट कल क्या याद रखता है?
दो अलग-अलग प्लगइन्स को dsh-memory कहा जाता है, जिसे इंस्टॉल कमांड टाइप करने से पहले जानना जरूरी है। इसे स्पष्ट स्रोत (explicit source) से इंस्टॉल करें ताकि आपको वही मिले जिसे आपने पढ़ा है।
मैं छोटे सर्वर पर SQLite बिल्ड का उपयोग करने की सलाह दूँगा। यह memory के रूप में रजिस्टर होता है, $DSH_HOME/memory/memory.db पर एक फाइल को सभी प्रोफाइल्स के बीच साझा रखता है, और memory_write, memory_search तथा memory_forget को एक्सपोज करता है। सर्च की प्रक्रिया स्टोर किए गए टेक्स्ट और टैग्स पर आधारित कीवर्ड-आधारित होती है। इसमें कोई एम्बेडिंग सर्विस, API की (API key), या कोई अतिरिक्त प्रोसेस नहीं होती है।
dsh plugin --profile web add "github:ben7am1n/dsh-memory#def7c6a"आप जिस कॉन्फ़िगरेशन में बदलाव करेंगे वह छोटा है: डेटाबेस फाइल के लिए path, कितने अनपिन (unpinned) मेमोरीज को इंजेक्ट करना है इसके लिए promptRecentCount (डिफ़ॉल्ट 10), और रेंडरिंग बजट के लिए promptMaxChars (डिफ़ॉल्ट 2000)। यह node:sqlite पर निर्भर करता है, जिसे Node 22 और 24 अभी भी एक्सपेरिमेंटल मानते हैं, इसलिए Node अपग्रेड को मान लेने के बजाय टेस्ट करना बेहतर है।
यहाँ बताया गया है कि मेमोरी वास्तव में मशीन के बारे में क्या बदलती है: इंजेक्ट की गई मेमोरीज हर टर्न पर सिस्टम प्रॉम्प्ट में रहती हैं। 2000-कैरेक्टर का बजट हर सिंगल रिक्वेस्ट पर हमेशा के लिए कुछ सौ अतिरिक्त इनपुट टोकन जोड़ देता है। यह आपके बिल पर एक वास्तविक खर्च है, और यही कारण है कि dsh-memory से पहले dsh-budget का बॉक्स पर होना जरूरी है। promptMaxChars को सीमित रखें और फाइल को बढ़ने देने के बजाय memory_forget से उसे प्रून (prune) करें।
वैकल्पिक बिल्ड मेमोरीज को एक YAML फाइल में स्टोर करता है और ऑटोमैटिक प्रॉम्प्ट इंजेक्शन के साथ एम्बेडिंग सर्च करता है, जिसे dsh plugin --profile web add github:towzai/dsh-memory के साथ इंस्टॉल किया जाता है। इसे एक लोकल ollama इंस्टेंस और एक एम्बेडिंग मॉडल की आवश्यकता होती है, जो डिफ़ॉल्ट रूप से qwen3-embedding:0.6b होता है, जिसे DSH_MEMORY_EMBED_MODEL के साथ बदला जा सकता है। सिमेंटिक रिकॉल (semantic recall), कीवर्ड रिकॉल से बेहतर है। इसका मतलब एक दूसरी सर्विस और उसी सर्वर पर मॉडल वेट्स (model weights) का सेट भी है, जो छोटे प्लान पर उस काम के लिए उपलब्ध मेमोरी को कम कर देता है जिसके लिए आपने बॉक्स रेंट पर लिया है। इसे तब चुनें जब आपके पास अतिरिक्त RAM उपलब्ध हो। रिकॉल क्वालिटी और रेजिडेंट कॉस्ट के बीच का सामान्य ट्रेड-ऑफ एजेंट्स के लिए लोकल मेमोरी में कवर किया गया है।
dsh-web-lan-access: क्या web UI को loopback के अलावा अन्य स्थानों पर listen करना चाहिए?
npx @deepseek-ai/dsh web इंटरफ़ेस को 127.0.0.1:3080 पर सर्व करता है। ब्राउज़र केवल सुरक्षित संदर्भ (secure context) में ही crypto.randomUUID() को expose करते हैं, इसलिए किसी अन्य मशीन से plain HTTP के माध्यम से उसी पेज को लोड करने पर वह विफल हो जाता है। dsh-web-lan-access एक छोटा polyfill इंजेक्ट करने के लिए webServer.tapIndex का उपयोग करके इसे ठीक करता है, और यह सर्वर बाइंडिंग को 0.0.0.0 पर स्विच कर देता है।
इसे इंस्टॉल करने से पहले इसकी चेतावनी अवश्य पढ़ें। 0.0.0.0 पर बाइंड करने से एजेंट स्थानीय नेटवर्क (LAN) पर किसी के भी द्वारा बिना प्रमाणीकरण के एक्सेस किया जा सकता है, और पब्लिक IP एड्रेस वाले सर्वर पर इसका मतलब पूरा इंटरनेट है। संवेदनशील तरीकों (settings.*, credentials.*, llm.discoverModels) की एक छोटी सूची loopback तक ही सीमित रहती है और रिमोट ओरिजिन से 403 एरर लौटाती है, जो नुकसान को सीमित करता है। यह इसे पूरी तरह रोकता नहीं है, क्योंकि टूल-कॉलिंग इंटरफ़ेस उस व्यक्ति के लिए खुला रहता है जिसे पोर्ट मिल जाता है।
ज्यादातर समय आपको इस प्लगइन की बिल्कुल भी आवश्यकता नहीं होती है। इसके बजाय SSH के माध्यम से पोर्ट को फॉरवर्ड करें।
ssh -N -L 3080:127.0.0.1:3080 you@your-serverफिर अपने स्थानीय ब्राउज़र में http://127.0.0.1:3080 खोलें। हार्नेस केवल loopback पर ही listen करता रहता है, इसलिए कुछ भी expose नहीं होता है, और चूंकि ब्राउज़र 127.0.0.1 को एक सुरक्षित ओरिजिन मानते हैं, इसलिए crypto.randomUUID() उपलब्ध रहता है और किसी polyfill की आवश्यकता नहीं होती है। एक कमांड, कोई प्लगइन नहीं, कोई नया attack surface नहीं।
प्लगइन तभी इंस्टॉल करें जब फॉरवर्डिंग काम न करे, उदाहरण के लिए जब उसी नेटवर्क पर किसी फोन को UI तक पहुंचना हो। यदि आप ऐसा करते हैं, तो इसे एक प्राइवेट नेटवर्क इंटरफ़ेस के पीछे बाइंड करें, एक फायरवॉल नियम रखें जो केवल उस इंटरफ़ेस को अनुमति दे, और उन नामों को सूचीबद्ध करें जिनका आप web-runtime एंट्री पर trustedHosts के तहत उपयोग करेंगे। वास्तविक मल्टी-यूज़र एक्सेस के लिए dsh-passwords उपलब्ध है, जो सब-यूज़र अनुमतियां, प्रति सब-यूज़र प्रति घंटा टोकन और दैनिक समय कोटा, Let's Encrypt के माध्यम से स्वचालित TLS (transport layer security) सर्टिफिकेट, और एक एन्क्रिप्टेड ऑडिट लॉग जोड़ता है। इसे एक प्लगइन के बजाय एक प्लेटफ़ॉर्म के रूप में देखें: इसे पोर्ट 80 और 443 की आवश्यकता होती है, यह अपना खुद का इंस्टॉलर साथ लाता है, और इसका प्रलेखित त्वरित तरीका नेटवर्क से एक शेल स्क्रिप्ट को सीधे bash में पाइप करता है। npm install -g dsh-passwords और उसके बाद dsh-passwords install को प्राथमिकता दें, ताकि कोड डिस्क पर रहे और आप इसे चलाने से पहले पढ़ सकें।
प्लगइन को पूरी तरह से हटाने का तरीका
अनइंस्टॉल करने की प्रक्रिया दो चरणों में पूरी होती है, और अक्सर लोग दूसरे चरण को छोड़ देते हैं।
dsh plugin --profile web remove dsh-budget
dsh plugin --profile web listlist में अब वह प्लगइन नहीं दिखना चाहिए। इसके बाद $DSH_HOME/profiles/web/cordis.patch.yml को खोलें और उस प्लगइन के नाम वाले किसी भी बचे हुए इंसर्ट ब्लॉक को हटा दें, क्योंकि वही प्रविष्टि उसे ट्री (tree) में लोड करती है। हार्नेस (harness) को रीस्टार्ट करें ताकि ट्री फिर से बन सके; यदि कोई प्लगइन पहले से लोड है, तो वह तब तक लोड रहेगा जब तक आप उसे रीस्टार्ट नहीं करते। अंत में, याद रखें कि डेटा कोड से अधिक समय तक बना रहता है। $DSH_HOME/memory/memory.db और .dsh/rules.yaml अनइंस्टॉल करने के बाद भी बने रहते हैं। यदि आपका उद्देश्य डेटा को हटाना था, तो उन्हें स्वयं डिलीट करें।
मैंने क्या पढ़ा और कब
यहाँ दिया गया प्रत्येक संदर्भ एक commit है, न कि branch, क्योंकि जब तक आप इसे पढ़ेंगे तब तक main में कोड बदल चुका होगा। मैंने इसे 17 August 2026 को पढ़ा था और उस दिन npm पर harness स्वयं 0.1.0-rc.7 पर था।
इस शॉर्टलिस्ट के पीछे के सटीक commits
- कम्युनिटी प्लगइन सूची
f2918fbपर, 17 August 2026। इसे जानबूझकर एक बार लिंक किया गया है। यह एक डायरेक्टरी है, और डायरेक्टरी कोई अनुशंसा (recommendation) नहीं होती। - dsh-budget
461d478पर, 17 August 2026। Apache 2.0। dsh0.1.0-rc.6, Node 22.19 या 24 और उससे ऊपर के वर्ज़न की घोषणा करता है। - dsh-permission-rules
b30b4fbपर, 17 August 2026। Apache 2.0। dsh0.1.0-rc.5से0.1.0-rc.6तक की घोषणा करता है। - dsh-defend
7ba3427पर, 17 August 2026। Apache 2.0। dsh0.1.0-rc.6की घोषणा करता है। - dsh-memory
def7c6aपर, 13 August 2026। MIT। SQLite बिल्ड। - dsh-web-lan-access
e27e909पर, 16 August 2026। MIT।
कोई भी command कॉपी करने से पहले उन pins को दोबारा जाँच लें। एक developer-preview इकोसिस्टम में, तारीख वाला वर्ज़न नंबर ही एकमात्र ऐसा वर्ज़न है जिसका कोई अर्थ होता है।
FAQ
VPS पर सबसे पहले कौन से DeepSeek Harness plugins install करने चाहिए?
सबसे पहले dsh-budget और dsh-permission-rules install करें। overLimit: block के साथ budget सेट करने से unattended run पूरी रात नहीं चलता, और .dsh/rules.yaml फाइल उन tool calls को रोकती है जिन्हें आप approve नहीं करते। जब agent public web से कुछ भी पढ़ना शुरू करे, तब dsh-defend जोड़ें, और जब आपको लगे कि आप हर session में एक ही context बार-बार paste कर रहे हैं, तब dsh-memory का उपयोग करें। Themes और status chips को छोड़ दें: ये आपके agent के privileges के साथ code चलाते हैं, लेकिन मशीन के काम करने के तरीके में कोई बदलाव नहीं करते।
क्या dsh plugins harness से sandboxed होते हैं?
नहीं। एक plugin उसी Cordis tree में, उसी process में, उसी operating system user के रूप में, उन्हीं model credentials के साथ और उसी working tree में load होता है। tools/pre-execute का उपयोग करने वाला plugin हर tool call को देख और रोक सकता है; agent/pre-step का उपयोग करने वाला plugin आपके messages देख सकता है। इसलिए source code पढ़ें, license और last commit date की जाँच करें, और branch के बजाय commit hash के जरिए install करें ताकि code आपकी जानकारी के बिना न बदले।
क्या dsh-budget वास्तव में agent को रोक देगा, या केवल चेतावनी देगा?
यह overLimit पर निर्भर करता है। default सेटिंग alert है, जो warnRatio पर चेतावनी देती है और खर्च जारी रखती है। block cap तक पहुँचने के बाद model calls को पूरी तरह रोक देता है, और /budget unblock <scope> आपके द्वारा continue चुनने पर ही उसे हटाता है। degrade, degradation map से किसी सस्ते model पर switch कर देता है। एक सीमा महत्वपूर्ण है: totals session event stream से running process में aggregate होते हैं, इसलिए harness को restart करने पर वे reset हो जाते हैं, और एक restart loop daily cap को निष्प्रभावी कर सकता है। वास्तविक सीमा के रूप में provider account पर spend limit बनाए रखें।
मैं dsh plugin को पूरी तरह कैसे हटाऊँ?
dsh plugin --profile web remove <package-name> चलाएँ, dsh plugin --profile web list के साथ पुष्टि करें, फिर $DSH_HOME/profiles/web/cordis.patch.yml खोलें और उस plugin के लिए बचा हुआ कोई भी insert block हटा दें, क्योंकि वही entry उसे load करती है। Harness को restart करें ताकि plugin tree फिर से बन सके। Plugin द्वारा लिखा गया data disk पर ही रहता है: $DSH_HOME/memory/memory.db और .dsh/rules.yaml दोनों uninstall के बाद भी बने रहते हैं जब तक आप उन्हें स्वयं न हटा दें।
क्या dsh web UI को network पर expose करना सुरक्षित है?
अकेले ऐसा करना सुरक्षित नहीं है। dsh web, 127.0.0.1:3080 पर listen करता है, और dsh-web-lan-access उस binding को 0.0.0.0 में बदल देता है। इसके README में स्पष्ट है कि इससे agent उसी network पर किसी के भी द्वारा बिना authentication के access किया जा सकता है, और public IP address पर इसका मतलब है कि यह internet पर उपलब्ध हो जाता है। कुछ methods (settings.*, credentials.*, llm.discoverModels) loopback तक सीमित रहते हैं और remote origins से 403 error देते हैं, जो नुकसान को कम तो करते हैं पर पूरी तरह नहीं रोकते। SSH port forward, ssh -N -L 3080:127.0.0.1:3080 you@your-server का उपयोग करें, या port को private network interface और firewall rule के पीछे रखें, और बाहर से access देने से पहले वास्तविक authentication जोड़ें।