हर आधुनिक प्लेटफ़ॉर्म आपके एजेंट को तीन ही इंटीग्रेशन विकल्प देता है: एक MCP सर्वर जिसे रजिस्टर करना होता है, एक API की जिसे स्टोर और रिफ्रेश करना होता है, या एक स्किल फ़ाइल जिसे इंस्टॉल करना होता है जो एजेंट को पहले दो काम करना सिखाती है। कुछ ऐसा जिसे कॉन्फ़िगर करना पड़े। कुछ ऐसा जो लीक हो सके। कुछ ऐसा जो पुराना हो जाए।
Oberik आपके एजेंट को इसके बजाय ssh एक्सेस देता है।
आपको नहीं, आप यहाँ एक प्रॉक्सी के रूप में काम कर रहे हैं, यह वास्तव में आपके एजेंट को SSH एक्सेस देता है।
1 ssh ssh.oberik.com
SSH वह सतह है जिसका उपयोग कोई कोडिंग एजेंट तब करता है जब उसे Oberik के साथ इंटरैक्ट करने की आवश्यकता होती है (जैसे, वर्कस्पेस खड़ा करना, उसकी क्षमता सीमा निर्धारित करना, टोकन मिंट करना, हमारे द्वारा होस्ट किए गए एजेंट से चैट करना, आदि)। कोई कॉन्फ़िग फ़ाइल नहीं, एनवी वेरिएबल में कोई टोकन नहीं, कुछ भी इंस्टॉल नहीं। आपकी मशीन के पास पहले से ही क्लाइंट है, और वह पहले से ही जानती है कि इसमें शामिल एकमात्र क्रेडेंशियल को कैसे संभालना है।
MCP क्यों नहीं?
संक्षेप में, आउटपुट की समस्या।
MCP उद्योग का डिफ़ॉल्ट बन गया है क्योंकि इसने एक वास्तविक समस्या हल की। आप एक बार टूल लिखते हैं, और हर एजेंट इसे उसी तरह कॉल कर सकता है। हम इसके खिलाफ नहीं हैं। Oberik आपके अपने MCP सर्वर को सीधे हमारे द्वारा होस्ट किए गए एजेंट में लोड करता है, प्रति टेनेंट, और यह एक एजेंट के लिए टूल तक पहुंचने का एक अच्छा तरीका है। हम यहाँ एक और दिशा के बारे में बात कर रहे हैं: कैसे कोई चीज़ पहली बार में अकाउंट को कॉन्फ़िगर करती है।
जितना उपयोग करना आसान है, MCP में एक खामी है: जब कोई टूल चलता है, तो पूरा आउटपुट मॉडल के कॉन्टेक्स्ट में धकेल दिया जाता है। मॉडल को यह सब पढ़ना होता है। वह यह तय नहीं कर सकता कि "मुझे केवल तीसरा फ़ील्ड चाहिए" क्योंकि जब तक टेक्स्ट आता है, फ़िल्टरिंग पहले ही विफल हो चुकी होती है।
MCP सैद्धांतिक रूप से फ़िल्टरिंग और पेजिनेशन का समर्थन करता है। व्यवहार में, किसी को इसे हर टूल में बनाना होता है और जब यह गायब होता है, जो वाइब कोडिंग की बदौलत अक्सर हो सकता है, तो मॉडल बस कच्चे पेलोड को निगल जाता है और टोकन और अटेंशन में इसकी कीमत चुकाता है।
SSH के साथ, एजेंट किसी टूल द्वारा दिए गए दृश्य को स्वीकार करने के बजाय अपना स्वयं का दृश्य बनाता है।
1$ ssh ssh.oberik.com 'documents --json' | jq -r '.data[].name'2$ ssh ssh.oberik.com 'audit --limit 20 --json' | jq -r '.data[] | "\(.at) \(.command)"'
फ़िल्टर मशीन पर एक पाइप में चलता है। तुरंत, मुफ्त, बिल्कुल उतना ही संकीर्ण जितना एजेंट चाहता था। मॉडल दस पेजों के बजाय एक लाइन पढ़ता है।
ऐसी दो चीज़ें हैं जो इसे काम करती हैं। पहला, हर प्रतिक्रिया {"ok":…, "command":…, "message":…, "data":…} जैसे सिंगल-लाइन फ़ॉर्मेट का उपयोग करती है। यह jq को आउटपुट पढ़ने का इच्छित तरीका बनाता है, न कि कोई वर्कअराउंड।
JSON मोड इंटरैक्शन को आपके स्ट्रीम को बाधित करने से भी रोकता है। यदि किसी कमांड में कोई आवश्यक फ़ील्ड गायब है, तो वह फ़ॉर्म खोलने के बजाय बताता है कि क्या गायब है। यदि कोई कमांड विनाशकारी हो सकता है, तो वह पुष्टि के लिए रुकने के बजाय --yes के साथ फिर से चलाने के लिए कहता है।
कई कमांड वाली लाइन के लिए, शुरुआत में format json; लगाएं। यह एक बार फ़ॉर्मेट सेट करता है, इसलिए आपको फ़्लैग को दोहराने की आवश्यकता नहीं है।
एक विवरण जानने लायक है। फ़्लैग को कोट्स के अंदर जाना चाहिए। ssh ssh.oberik.com --json 'documents' काम नहीं करता क्योंकि ssh डेस्टिनेशन के बाद के विकल्पों को अपना मानता है। यह फ़्लैग को अनदेखा करता है, और क्लाइंट अपने स्वयं के उपयोग आउटपुट के साथ जवाब देता है। चूंकि वह आउटपुट न तो Oberik का और न ही फ़्लैग का उल्लेख करता है, यह होस्ट को टूटा हुआ दिखा सकता है।
हम यहाँ यह कहने की कोशिश कर रहे हैं, हमने इन मॉडलों को कंप्यूटर का उपयोग करने के लिए प्रशिक्षित किया है, उन्हें कंप्यूटर का उपयोग करने दें।

API क्यों नहीं?
संक्षेप में, क्रेडेंशियल समस्या।
हमें गलत मत समझिए, Oberik में हमारा एक API है और वह अच्छा है। यह वही है जिसे आपका उत्पाद प्रोडक्शन में कॉल करता है, और यह वही है जिसे SSH गेटवे स्वयं अंडर द हुड कॉल करता है।
लेकिन अगर आप देखें कि यह कॉल करने वाले से क्या मांगता है:
- एक टोकन प्राप्त करें
- इसे स्टोर करें
- इसे रिफ्रेश करें
- इसे लॉग और मॉडल के कॉन्टेक्स्ट से दूर रखें।
इनमें से हर कदम एजेंट की जिम्मेदारी बन जाता है और एजेंट का कॉन्टेक्स्ट किसी रहस्य के लिए सुरक्षित जगह नहीं है। जिस किसी ने भी किसी मॉडल को अपने स्वयं के एनवायरनमेंट वेरिएबल्स को प्रतिध्वनित करते देखा है, वह यह जानता है। मेरा मतलब है, अगर आप ध्यान दें, तो आपको पता चलेगा कि आपका पसंदीदा कोडिंग एजेंट डिफ़ॉल्ट रूप से आंखें मूंद लेता है जब वह आपके प्रॉम्प्ट में कोई संवेदनशील कुंजी महसूस करता है। हालाँकि, एजेंट में पेस्ट की गई कुंजी सिर्फ शेल हिस्ट्री में नहीं बैठती; यह एक मॉडल प्रदाता, लॉग, हार्नेस जो भी ट्रांसक्रिप्ट रखता है, में भी जाती है।
API मौजूद है, लेकिन यह मुख्य रास्ता नहीं है जिसे हमने एजेंटों के लिए खुद को सेट अप करने के लिए डिज़ाइन किया है। SSH के माध्यम से, एजेंट एकमात्र क्रेडेंशियल प्रकार रखता है जिसे आपका ऑपरेटिंग सिस्टम पहले से ही सुरक्षित रखने के लिए बनाया गया था, एक SSH की, और निजी आधा कभी प्रसारित नहीं होता। Oberik को प्रमाणित करने से मॉडल के कॉन्टेक्स्ट में कुछ भी गुप्त नहीं रखा जाता, क्योंकि वहाँ रखने के लिए कुछ है ही नहीं।
CLI क्यों नहीं?
संक्षेप में, पुरानेपन की समस्या।
CLI इंस्टॉल करना हर इंटीग्रेटर के हार्नेस से पूछने की एक प्रतिबद्धता है और हम इतने बोल्ड नहीं बनना चाहते थे क्योंकि हम अभी अपना पहला कदम उठा रहे हैं। सच कहूँ तो, हमें CLI बिल्कुल नहीं चाहिए था क्योंकि यह मूल रूप से उत्पाद की एक जमी हुई प्रतिलिपि है। Oberik का कंट्रोल प्लेन एक फीचर विकसित करेगा क्योंकि हमें अधिक फीडबैक मिलता है, जिसका मतलब है कि अगर हम CLI के साथ गए होते, तो हम लगातार एक नया रिलीज़ धकेल रहे होते, और उपयोगकर्ता से अपडेट करने के लिए कह रहे होते।
हमने मूल रूप से इसे हल कर लिया क्योंकि हमारी SSH सतह उत्पन्न होती है, लिखी नहीं जाती। हमारे कंट्रोल प्लेन में हर रूट अपने विवरण के साथ रजिस्टर होता है और वह विवरण SSH कमांड है। डैशबोर्ड में जोड़ा गया एक रूट SSH पर तुरंत दिखाई देता है, इसलिए हमें गेटवे बदलाव के बारे में चिंता करने की आवश्यकता नहीं है।
अपडेट करने के लिए कुछ नहीं, क्योंकि कुछ भी इंस्टॉल नहीं है।
स्किल क्यों नहीं?
संक्षेप में, निर्देशों की समस्या।
किसी भी एजेंट-फेसिंग उत्पाद के साथ शिप करने का ट्रेंडिंग तरीका स्किल है। एक लिखित प्रक्रिया जिसे आपका एजेंट इंस्टॉल करता है, जो उसे बताती है कि उत्पाद को कैसे कॉल करना है। स्किल वास्तव में उपयोगी हैं, लेकिन यह मूल रूप से एक फैंसी README फ़ाइल है। एक स्किल दस्तावेज़ीकरण है, कोई क्षमता नहीं। यह आपके एजेंट को कार्य करने का कोई तरीका नहीं देता; इसे अभी भी कुछ भी करने के लिए अंडरनीथ MCP या API की आवश्यकता होती है, और आपको वह समस्या भी विरासत में मिलती है।
इसके अलावा, एक स्किल एक चलते हुए उत्पाद का उपयोग करने के तरीके की एक जमी हुई प्रतिलिपि है। CLI के समान ही पुरानापन। यह एजेंट द्वारा कुछ भी करने से पहले उसके कॉन्टेक्स्ट में बैठता है, निर्देशों पर ध्यान और टोकन खर्च करता है जिसे सतह पूछे जाने पर प्रिंट कर सकती है।
"एजेंट को कैसे पता चलेगा कि Oberik क्या कर सकता है" के हमारे उत्तर के लिए कोई फ़ाइल नहीं है जिसे वह इंस्टॉल करे। यह एजेंट के लिए खोज करने का एक कॉल है:
1$ ssh ssh.oberik.com 'discover' # हर कमांड, उसके पैरामीटर और उनके प्रकार2$ ssh ssh.oberik.com 'docs' # हर पेज, जिसमें बताया गया है कि वह क्या कवर करता है3$ ssh ssh.oberik.com 'docs search capability' # वे पंक्तियाँ जो किसी चीज़ का उल्लेख करती हैं
सतह स्वयं का वर्णन करती है, कनेक्ट होने पर, लाइव उत्पाद से। और docs वही टेक्स्ट है जो docs साइट का है, इसलिए कोई भी चीज़ किसी और चीज़ का सारांश नहीं है। निर्देश कभी पुराने नहीं हो सकते, क्योंकि वे उत्पाद हैं।
SSH ही क्यों?
संक्षेप में, यह एक साथ सभी पाँच समस्याओं को हल करता है।
- कुंजियाँ वे क्रेडेंशियल हैं जिन्हें एजेंट वास्तव में रख सकते हैं। SSH की प्रमाणीकरण दशकों पुराना है, अरबों बार युद्ध-परीक्षित है और प्रोटोकॉल फिंगरप्रिंट देखने से पहले हस्ताक्षर को सत्यापित करता है। हमें यहाँ पहिया को फिर से आविष्कार करने की आवश्यकता महसूस नहीं हुई। हमने बस मॉडल से एक रहस्य की देखभाल करने के लिए कहना बंद कर दिया और मशीन को वह एक काम करने दिया जिसके लिए वह हमेशा बनाई गई थी।
- आप पासवर्ड साझा किए बिना लूप में बने रहते हैं। जब एजेंट के पास अभी तक कोई कुंजी नहीं है, जैसे कि Oberik से अपने पहले कनेक्शन के दौरान, यह एक डिवाइस लॉगिन फ्लो शुरू करता है। एजेंट login link चलाता है, जो तुरंत एक URL और एक कोड के साथ लौटता है और दोनों को आपको दिखाता है। आप अपने स्वयं के ब्राउज़र में URL खोलते हैं। पेज उस सटीक कुंजी फिंगरप्रिंट की पहचान करता है जो संलग्न की जाएगी, आपको अनुमोदन या अस्वीकार करने के विकल्प देता है, और एक कोड दिखाता है जिसकी तुलना आप एजेंट द्वारा मुद्रित कोड से कर सकते हैं। इस बीच, एजेंट login wait चलाता है और आपके निर्णय की प्रतीक्षा करता है। ये डिज़ाइन द्वारा अलग-अलग कमांड हैं। यदि एक कमांड ने लिंक उत्पन्न किया और प्रतीक्षा की, तो एजेंट आपको अनुरोध समाप्त होने के बाद ही लिंक दिखाएगा। एक बार जब आप अनुमोदन करते हैं, तो कुंजी पंजीकृत हो जाती है और सभी भविष्य के कनेक्शन स्वचालित रूप से साइन इन हो जाते हैं। आपको किसी और लिंक की आवश्यकता नहीं होगी। एजेंट के चैट इतिहास में कोई रहस्य कभी नहीं लिखा जाता क्योंकि प्रक्रिया किसी का उपयोग नहीं करती है।
- आउटपुट पाइप के लिए डिज़ाइन किया गया है। किसी कमांड पर --json के साथ JSON का अनुरोध करें, या एक लाइन की शुरुआत में एक बार format json; का उपयोग करें, और हर प्रतिक्रिया एक सिंगल-लाइन लिफाफे के रूप में वापस आती है। यह jq '.data[0].name' को आउटपुट पढ़ने का इच्छित तरीका बनाता है, न कि कोई वर्कअराउंड। फ़िल्टर मशीन पर चलता है, इसलिए मॉडल केवल वही देखता है जो फ़िल्टर करने के बाद बचता है। त्रुटियाँ उसी लिफाफे का उपयोग करती हैं और अंतर्निहित HTTP स्थिति शामिल करती हैं। यह एक रीट्री को 429 को 400 से अलग करने देता है। पाइप दोनों दिशाओं में भी काम करते हैं। गेटवे आपकी डिस्क नहीं पढ़ सकता, इसलिए फ़ाइलें स्वीकार करने वाले कमांड फ़ाइल नाम को एक तर्क के रूप में लेते हैं और कनेक्शन से फ़ाइल की सामग्री पढ़ते हैं। उदाहरण के लिए, ssh ssh.oberik.com 'document upload handbook.pdf' < handbook.pdf फ़ाइल अपलोड करता है।
- शून्य इंस्टॉलेशन। रजिस्टर करने के लिए कुछ नहीं, स्टोर करने के लिए कुछ नहीं, कॉन्टेक्स्ट में रखने के लिए कुछ नहीं। आपके एजेंट के कॉन्फ़िग में कोई MCP सर्वर नहीं, एनवी वेरिएबल में कोई टोकन नहीं, PATH पर कोई CLI नहीं, कोई स्किल फ़ाइल नहीं। हम एक डेव उत्पाद बनाते हैं, इसलिए हमने उस टूल का उपयोग किया जो पहले से मौजूद था और हर एजेंट जानता है कि इसका उपयोग कैसे करना है: SSH।
- स्व-वर्णनात्मक और डिज़ाइन द्वारा सावधान। discover पूर्ण कमांड कैटलॉग प्रिंट करता है। इसमें हर कमांड, उसके पैरामीटर और प्रकार, और कोई भी पुष्टिकरण आवश्यकताएँ शामिल हैं। कैटलॉग उत्पाद से लाइव उत्पन्न होता है। यह क्लाइंट को यह भी बताता है कि कौन से फ़ील्ड स्ट्रिंग के बजाय फ़ाइल बाइट्स की अपेक्षा करते हैं, ताकि अपलोड का गलत अनुमान न लगाया जा सके। यह जो अनुमति नहीं देता है वह किसी पंक्ति को उसकी संख्या से लक्षित करना है। विनाशकारी कमांड के लिए एक नाम की आवश्यकता होती है, और सर्वर उस नाम को कनेक्शन द्वारा चयनित प्रोजेक्ट के विरुद्ध जाँचता है। यदि Support Bot चयनित होने पर Staging का अनुरोध किया जाता है, तो सर्वर 400 लौटाता है और वर्कस्पेस को अछूता छोड़ देता है।
सिखाने के लिए कुछ नहीं, क्योंकि सतह स्वयं सिखाती है।
यहाँ देखिए Oberik लॉगिन फ्लो कैसा दिखता है:

Oberik लॉगिन फ्लो
क्या आपके उत्पाद में SSH का दरवाज़ा एक जोखिम नहीं है?
यह एक उचित प्रश्न है, लेकिन वास्तविकता लगभग इसके विपरीत है।
गेटवे की अपनी कोई स्थिति या विशेषाधिकार नहीं है। हर कमांड एक HTTP कंट्रोल-प्लेन सत्र के माध्यम से चलता है, ठीक वैसे ही जैसे React ऐप में होता है। इसलिए एक SSH क्लाइंट उससे अधिक नहीं कर सकता जो वही खाता ब्राउज़र में कर सकता है। यदि आप साइन आउट करते हैं, कुंजी रद्द करते हैं, या खाता हटाते हैं, तो परिवर्तन तुरंत प्रभावी होता है क्योंकि रद्द करने के लिए और कुछ नहीं है।
यह टर्मिनल सार्वजनिक इंटरनेट पर उजागर है, इसलिए कोई भी अज्ञात रूप से कनेक्ट कर सकता है। हर कमांड लॉग किया जाता है, जिसमें कनेक्शन पहचान, IP पता, कुंजी और परिणाम शामिल हैं। क्रेडेंशियल कभी संग्रहीत नहीं किए जाते हैं। login के साथ दर्ज किया गया पासवर्ड, या --values के माध्यम से पारित प्रदाता कुंजी, रिकॉर्ड लिखे जाने से पहले <redacted> से बदल दी जाती है। सिस्टम मूल कमांड का एक हैश भी संग्रहीत करता है ताकि बार-बार किए गए कमांड को सहसंबद्ध किया जा सके बिना क्रेडेंशियल को पुनर्प्राप्त करने योग्य बनाए। रिकॉर्ड 30 दिनों या 100,000 कमांड तक बनाए रखे जाते हैं, जो भी पहले हो।
बार-बार विफल लॉगिन लॉकआउट को ट्रिगर करने के बजाय धीमे हो जाते हैं। कोई व्यक्ति जो भूल गया है कि उन्होंने कौन सा पासवर्ड इस्तेमाल किया था, बिना अधिक घर्षण के प्रयास करता रह सकता है, जबकि गलत पासवर्ड का उपयोग करने वाला एक स्वचालित रीट्री लूप धीरे-धीरे कम उपयोगी होता जाता है। यह इच्छित समझौता है।
TLDR
बाकी सब आपके एजेंट को एक API, एक MCP सर्वर, या एक स्किल फ़ाइल देते हैं। हमने इसे एक टर्मिनल दिया। पता चला कि यही वह चाहता था।





