Octoweb से मिलिए: एक कीबोर्ड-फर्स्ट ब्राउज़र जहाँ AI नागरिक है, एक्सटेंशन नहीं
हर ब्राउज़र में अचानक AI आ गया है। और हर एक ने यह एक ही तरीके से किया: Chrome लीजिए, बगल में एक चैट पैनल ठोक दीजिए, उसे AI ब्राउज़र कह दीजिए। ब्राउज़र को पता ही नहीं कि एजेंट मौजूद है। एजेंट ब्राउज़र को छू नहीं सकता। एक खिड़की साझा करते दो अजनबी।
हमने यह साल एजेंट बनाते हुए बिताया — एक रनटाइम, मेमोरी, कोड सर्च, एक फ़ाइलसिस्टम परत — और किसी मोड़ पर यह सवाल टालना नामुमकिन हो गया: अगर कोई ब्राउज़र पहले कमिट से ही AI के लिए डिज़ाइन किया जाए तो वह कैसा दिखेगा? AI जोड़ा हुआ नहीं। AI एक नागरिक के रूप में — दोनों दिशाओं में। एजेंट ब्राउज़र में रहता है और वह देख सकता है जो आप देखते हैं। और ब्राउज़र एक औज़ार है जिसे एजेंट उठाकर इस्तेमाल कर सकता है।
तो हमने इसे बना दिया — अपने लिए, उस तरह जैसे आप वह औज़ार बनाते हैं जिसमें आपको बसना है। Octoweb Rust में लिखा एक WebKit ब्राउज़र है — न Electron, न Chromium, कोई 25,000 लाइनें — दो आपस में घुलते-मिलते दर्शक वर्गों के लिए बना: वे लोग जो कीबोर्ड पर जीते हैं, और वे जो दिन भर एजेंट्स के साथ काम करते हैं। हम दोनों हैं, और पाँच महीने बाद यही वह ब्राउज़र है जिसमें हमारी हर सुबह शुरू होती है: docs पढ़ना, अपने ही वेब ऐप्स को डीबग करना, ब्राउज़र के उबाऊ काम Octomind को थमाकर ख़ुद पढ़ते रहना। आज यह 0.10.0 पर पहुँचा है, और वक़्त आ गया है कि हम आपको इसके बारे में बताएँ।
पहले, गीक वाला हिस्सा: माउस की ज़रूरत नहीं
AI कुछ भी करे, उससे पहले Octoweb को उन लोगों के ब्राउज़र के रूप में अपनी जगह कमानी होगी जो कीस्ट्रोक्स में सोचते हैं। डिज़ाइन का नियम सरल था: हर क्रिया का एक शॉर्टकट है, किसी चीज़ के लिए क्लिक ज़रूरी नहीं।
इसका केंद्र है कमांड पैलेट (⌘⇧P) — कोई URL, कोई सर्च क्वेरी, या आपके देखे किसी पेज का कोई भी टुकड़ा टाइप कीजिए, और यह खुले टैब और इतिहास में फ़ज़ी-मैच करता है, मैच की गुणवत्ता और विज़िट की आवृत्ति के हिसाब से रैंक किया हुआ। एक और कीस्ट्रोक खोलता है, स्विच करता है, या सर्च करता है। और चूँकि मसल मेमोरी पवित्र है, पैलेट readline बोलता है: कूदने के लिए ⌃A/⌃E, काटने के लिए ⌃K/⌃U, चलने के लिए ⌃N/⌃P। अगर आपकी उँगलियाँ Emacs या shell जानती हैं, तो वे Octoweb को पहले से जानती हैं।
बाकी शब्दावली:
- फास्ट-एक्सेस स्लॉट —
⌘⇧1–⌘⇧0मौजूदा पेज को एक क्रमांकित स्लॉट में पिन करता है;⌘1–⌘0कहीं से भी वापस कूद आता है। दस पेज, हरेक के लिए एक कीस्ट्रोक, रीस्टार्ट के आर-पार सहेजे हुए। यह Vim marks का ब्राउज़र-संस्करण है। 0.10.0 में नया:⌘⇧Nमौजूदा पेज को पहले ख़ाली स्लॉट में पिन करता है — और अगर वह पहले से वहाँ है तो अनपिन कर देता है। - MRU टैब साइक्लिंग —
⌃N/⌃Pटैब को most-recently-used क्रम में घुमाता है — जिस तरह आप असल में दो पेजों के बीच स्विच करते हैं, न कि उस क्रम में जिसमें वे संयोग से टैब बार में बैठे हों। - Vim-शैली स्क्रॉलिंग — आधे पेज के लिए
⌃D/⌃U, ऊपर और नीचे के लिए⌃T/⌃B। - क्लिपबोर्ड में स्क्रीनशॉट —
⌘Sव्यूपोर्ट,⌘⇧Sपूरा पेज। न कोई सेव डायलॉग, न बाद में साफ़ करने के लिए कोई फ़ाइल। - AI प्रॉम्प्ट बॉक्स में
⌃R— आपके प्रॉम्प्ट इतिहास में रिवर्स इंक्रीमेंटल सर्च। हाँ: हमने readline की history search ब्राउज़र के AI इनपुट में डाल दी, क्योंकि एक बार shell में यह मिल जाए तो आप इसे हर जगह चाहते हैं।
ग्लोबल शॉर्टकट CGEventTap से गुज़रते हैं — macOS-नेटिव और कॉन्फ़िगर करने योग्य। और यही वजह है कि Octoweb फ़िलहाल macOS-only है — यह zip फ़ाइल में एक दूसरा ऑपरेटिंग सिस्टम भेजने के बजाय प्लैटफ़ॉर्म (WKWebView, AppKit, CGEventTap) पर टिकता है। इसी वजह से पूरा ब्राउज़र 300 MB के Electron ऐप के बजाय एक अकेला दुबला बाइनरी है।
साइडबार में एजेंट — Octomind पर चलता हुआ
⌘⇧A दबाइए और एक एजेंट पेज के ऊपर सरक आता है। किसी चैट वेबसाइट वाला iframe नहीं — एक असली एजेंट प्रोसेस, लोकल चलती हुई, Agent Client Protocol पर जुड़ी हुई।
एजेंट है Octomind, हमारा प्लग-एंड-प्ले एजेंट रनटाइम — वही जो हमारे टर्मिनल सेशन और CI रिव्यू चलाता है। और यह रहा वह हिस्सा जो आप नहीं करते: इसे शुरू करना। Octoweb ख़ुद octomind acp octoweb:assistant लॉन्च करता है — हर सेशन के लिए एक सैंडबॉक्स किया हुआ सबप्रोसेस, जो मर जाए तो दोबारा शुरू होता है, और अगले लॉन्च पर आपकी बातचीत जस-की-तस लेकर बहाल हो जाता है। Octomind एक बार इंस्टॉल कीजिए, और आगे का सब साइडबार सँभाल लेता है।
वह octoweb:assistant टैग कम्युनिटी tap रजिस्ट्री से एक मैनिफ़ेस्ट है: मॉडल, सिस्टम प्रॉम्प्ट और टूल, अपने-आप लाए और जोड़े हुए। हाथ से लिखी कॉन्फ़िग फ़ाइलें — शून्य। उसके बाद आप जो पेज पढ़ रहे हैं उसके बारे में पूछ सकते हैं, उस पर मौजूद कोड समझवा सकते हैं, या जिस थ्रेड के लिए वक़्त नहीं है उसका सार निकलवा सकते हैं — स्ट्रीम होती प्रतिक्रियाओं के साथ, ऐसे सेशन जो बचते हैं और फिर से शुरू होते हैं, और समृद्ध आउटपुट कार्ड वाले slash कमांड।
और चूँकि यह एक असली एजेंट है, साइडबार राय देने वाला कोई चैट बॉक्स नहीं है — यह काम करता है। टैग बदलकर developer:rust कीजिए और आप ब्राउज़र से ही कोड कर सकते हैं: एजेंट अपने सैंडबॉक्स किए हुए वर्कस्पेस में फ़ाइलें संपादित करता है, टूल कॉल लाइव स्टेटस के साथ क्लिक-योग्य पंक्तियों के रूप में दिखती हैं, और जब वह आपको गद्य से समृद्ध कुछ दिखाना चाहे — कोई फ़ॉर्म, कोई टेबल, कोई छोटा इंटरैक्टिव UI — तो वह सीधे साइडबार में एक A2UI सतह रेंडर करता है। हमने Octoweb के बग Octoweb से ही ठीक किए हैं, जबकि फ़ेल होता पेज बग़ल के टैब में बैठा था।
तीन बारीकियाँ जिन पर हमने पसीना बहाया:
- एजेंट टैग संपादन-योग्य है। साइडबार का हेडर डिफ़ॉल्ट रूप से
octoweb:assistantदिखाता है, लेकिन आपका Octomind जिस भी टैग को जानता है वह टाइप कीजिए —developer:rust, आपका अपना कस्टम एजेंट — और साइडबार उसी क्षण उससे दोबारा जुड़ जाता है। ब्राउज़र को परवाह नहीं कि वह किस दिमाग़ से बात कर रहा है। - ब्राउज़र कभी किसी AI प्रोवाइडर को कॉल नहीं करता। हर मॉडल कॉल Octomind करता है, ब्राउज़र प्रोसेस के बाहर, और एजेंट की फ़ाइलसिस्टम पहुँच उसके वर्कस्पेस तक सैंडबॉक्स की हुई है। आपकी मशीन से कोई डेटा तब तक बाहर नहीं जाता जब तक आपका एजेंट उसे कहीं न भेजे — और वह एजेंट कौन-सा है, किस प्रोवाइडर के साथ, यह पूरी तरह आपका फ़ैसला है।
- सेशन दोतरफ़ा रास्ता है। 0.10.0 से, Octomind रनटाइम के इंजेक्ट किए हुए संदेश — tap से जवाब देता कोई विशेषज्ञ, पूरा होता कोई शेड्यूल्ड जॉब, फ़ायर होता कोई webhook — बातचीत के बीच में, साइडबार में अपने अलग लेबल वाले बबल्स के रूप में पहुँचते हैं। आपका ब्राउज़र वह जगह बन जाता है जहाँ आपके एजेंट रिपोर्ट करने लौटते हैं।
एक छोटा दरवाज़ा भी है: किसी भी पेज पर टेक्स्ट चुनिए, ⌘⇧E दबाइए, और एक इनलाइन एडिट मोडल चयन को बदल देता है — दोबारा लिखना, सार निकालना, अनुवाद। यह उसी tap से अपना अलग, समर्पित एजेंट चलाता है — octoweb:editor — अपने ख़ुद के प्रॉम्प्ट इतिहास के साथ, ⌃R समेत सब कुछ।
ब्राउज़र एक औज़ार के रूप में: भीतर से MCP
यही वह दिशा है जिसमें और कोई नहीं बनाता, और यही हमारा पसंदीदा हिस्सा है। Octoweb ब्राउज़र के भीतर एक MCP सर्वर चलाता है — localhost:3434/mcp। कोई भी MCP क्लाइंट — Claude Desktop, एक Octomind सेशन, आपकी अपनी स्क्रिप्ट — जुड़कर इसे चला सकता है: छब्बीस टूल जो नेविगेशन, टैब, क्लिक, टाइपिंग, स्क्रॉलिंग, स्क्रीनशॉट, कॉन्टेंट निकालने, कंसोल आउटपुट और नेटवर्क गतिविधि को कवर करते हैं।
ब्राउज़र ऑटोमेशन आपने पहले देखा है। यहाँ फ़र्क़ यह है कि एजेंट किसी डेटासेंटर में एक हेडलेस Chromium नहीं चला रहा, जिसके पास न कुकीज़ हैं और जिसकी पीठ पर bot-detection का निशाना है। वह आपका ब्राउज़र चला रहा है — आपके सेशन, आपके लॉगिन, आपके टैब — आपके देखते-देखते। और टूल डिज़ाइन "आपके देखते-देखते" को गंभीरता से लेता है:
- नेविगेशन कभी फ़ोकस नहीं छीनता।
browser_navigateहमेशा बैकग्राउंड में खोलता है। ठीक एक ही टूल —browser_switch_tab— को यह बदलने की इजाज़त है कि आप क्या देख रहे हैं। एक एजेंट आपकी पीठ पीछे दस टैब में रिसर्च कर सकता है, बिना कभी पेज को आपके कर्सर के नीचे से खींचे। वह आपके बग़ल में ब्राउज़ करता है, आपकी जगह नहीं। - ऐसे क्लिक जो झूठ नहीं बोलते।
browser_clickतब तक दोबारा कोशिश करता है जब तक एलिमेंट मौजूद, स्थिर और अनढका न हो — और अगर कोई चीज़ उसे ढक रही है, तो एरर बताता है क्या।browser_snapshotइंटरैक्टिव एलिमेंट्स का एक नक्शा लौटाता है, स्थिर@Nरेफ़रेंस के साथ, जो iframes, shadow DOM और सिर्फ़-listener वाले क्लिक-योग्य तत्वों के आर-पार देखता है।browser_waitSPA के तैयार होने को समझता है, सिर्फ़ पेज लोड को नहीं। - आँखें साथ में हैं।
browser_console_messagesऔरbrowser_network_requestsएजेंट को पेज की कंसोल एरर और fetch/XHR गतिविधि स्टेटस और टाइमिंग समेत देते हैं — वे दो चीज़ें जिनके लिए आप DevTools खोलते, टूल के रूप में। - सीमा पर सुरक्षा-रेलिंग। स्नैपशॉट और पेज कॉन्टेंट से बाहर बहने वाला टेक्स्ट एक सैनिटाइज़र से गुज़रता है — कार्ड नंबर किसी प्रॉम्प्ट तक पहुँचने से पहले ही ढक दिए जाते हैं।
- टोकन ही बजट हैं। हर टूल का जवाब मॉडल के लिए गढ़ा गया है, डीबगर के लिए नहीं:
browser_snapshotकच्चे HTML के बजाय एलिमेंट्स का एक सघन नक्शा लौटाता है (हमनेget_htmlटूल जान-बूझकर हटा दिया), कंसोल और नेटवर्क लॉग सीमित और फ़िल्टर-योग्य आते हैं, और@Nरेफ़रेंस का मतलब है कि एजेंट CSS सेलेक्टर का अंदाज़ा लगाने में कभी आधी कॉन्टेक्स्ट विंडो नहीं फूँकता। एजेंट की एक बारी की क़ीमत टोकन में चुकती है; ब्राउज़र इसका लिहाज़ रखता है।
और अगर आपका एजेंट रनटाइम Octomind है, तो इसे जोड़ना सेशन के भीतर एक लाइन है:
/mcp add octoweb http://localhost:3434/mcp
जिस एजेंट से आप पहले से बात कर रहे थे, वह अब docs खोल सकता है, उन्हें पढ़ सकता है, फ़ॉर्म भर सकता है, और देख सकता है कि किसी पेज का कंसोल किस बात पर चीख़ रहा है — बातचीत के बीच में, बिना रीस्टार्ट। ब्राउज़र के काम हमारी to-do सूचियों से इसी तरह निकलते हैं: एजेंट बग को एक बैकग्राउंड टैब में दोबारा पैदा करता है, कंसोल पढ़ता है, और फ़ेल होते अनुरोध के साथ लौट आता है; वह उस एडमिन पैनल में घूम आता है जिसमें क्लिक करते फिरने का हमारा मन नहीं था; वह जाँच लेता है कि डिप्लॉय सचमुच रेंडर हुआ — हमारे लॉग-इन ब्राउज़र में, हमारे सेशनों के साथ, जबकि हम फ़ोरग्राउंड टैब में पढ़ते रहते हैं।
वह ब्राउज़र जो आपके साथ सीखता है
एक और प्रयोग: प्रोऐक्टिव लर्निंग। एक अंतराल पर — डिफ़ॉल्ट रूप से 30 मिनट — Octoweb एक दूसरा, पूरी तरह स्वतंत्र एजेंट जगाता है, octoweb:learning टैग, जो आपके खुले टैब और हालिया इतिहास को देखता है और आप किस पर काम कर रहे हैं उसका निचोड़ Octomind की मेमोरी में उतार देता है। अगले सेशन में, साइडबार असिस्टेंट को पहले से पता होता है कि आप तीन दिन से किन docs के चक्कर काट रहे हैं।
यह डिफ़ॉल्ट रूप से चालू है — Settings में एक टॉगल इसे बंद कर देता है — यह लोकल है, अंतराल आपकी मर्ज़ी का है, और दोनों एजेंट पूरी तरह स्वतंत्र हैं — किसी एक को दूसरे के बिना चलाइए। हमें लगता है कि ambient memory ही वह जगह है जहाँ ब्राउज़र में AI सचमुच दिलचस्प होता है, और हम उसका डेमो नहीं, ईमानदार v1 भेजना पसंद करते हैं।
हाँ, यह बस एक अच्छा ब्राउज़र भी है
इनमें से किसी बात का कोई मतलब नहीं अगर ब्राउज़िंग उससे बदतर हो जिसे आप छोड़कर आए। बुनियादी चीज़ें मौजूद हैं, और कुछ मौजूद से बेहतर हैं:
- स्मार्ट टैब हाइबरनेशन — मेमोरी दबाव में बैकग्राउंड टैब जम जाते हैं, RAM-सजग थ्रेशोल्ड के साथ। पचास टैब एक जीवनशैली है, कोई लीक नहीं। और 0.10.0 से खुले टैब पर एक सीमा है (डिफ़ॉल्ट रूप से 500, कॉन्फ़िगर करने योग्य) जो उसके पार सबसे कम हाल में इस्तेमाल हुए टैब चुपचाप बंद कर देती है — टैब जमा करने वालों के लिए एक एयरबैग।
- कॉन्टेंट ब्लॉकिंग बिल्ट-इन — ट्रैकर और विज्ञापन WebKit की नेटिव content rule lists से, बिना किसी एक्सटेंशन की ज़रूरत के।
- कोल्ड स्टार्ट ठंडे ही रहते हैं — favicons data-URI के रूप में कैश होते हैं, इसलिए ब्राउज़र लॉन्च करने पर तब तक शून्य नेटवर्क अनुरोध जाते हैं जब तक आप ख़ुद न करें।
- सेशन रीस्टोर, WebAuthn passkeys, PDF और DOCX देखना, find-in-page CSS Custom Highlight API पर, नेटिव फ़ुलस्क्रीन, पॉपअप विंडो की सही सँभाल।
एक्सटेंशन का क्या? ईमानदार स्थिति: Safari Web Extensions इंटीग्रेशन (1Password, Bitwarden और साथियों के लिए) कोड में पूरी तरह लागू है — और Apple के com.apple.developer.web-browser entitlement पर अटका है — एक ऐसी मंज़ूरी जो सिर्फ़ Apple दे सकता है। जब तक वह नहीं मिल जाती, content scripts inject नहीं होतीं। हम आपको यह बताना पसंद करते हैं, बजाय यह दिखावा करने के कि एक्सटेंशन रोडमैप का कोई आइटम हैं।
पाँच महीने, 0.1.0 से 0.10.0 तक
Octoweb मार्च के आख़िर में एक प्रयोग के रूप में शुरू हुआ: क्या ACP साइडबार वाला एक कीबोर्ड ब्राउज़र एक हफ़्ते में इस्तेमाल के लायक़ हो सकता है? 0.6.0 तक इसमें टैब हाइबरनेशन और पहले MCP ऑटोमेशन टूल आ चुके थे। 0.7.0 लाया स्थायी चैट सेशन, passkeys और slash कमांड। 0.8.0 बड़ा वाला था — actionability हार्नेस, वह e2e सूट जो ब्राउज़र को उसके अपने MCP सर्वर के ज़रिए टेस्ट करता है, एजेंट सैंडबॉक्सिंग, कॉन्फ़िगर करने योग्य कीबाइंडिंग, A2UI सतहें। जुलाई के आख़िर में कटा 0.9.0 अकाउंट ऑथेंटिकेशन के साथ ACP v1.2.0 पर गया, और साथ में स्थिरता के काम की एक लंबी पूँछ। और आज का 0.10.0 वह है जो रोज़ का इस्तेमाल किसी रोडमैप का करता है: पिन किए हुए टैब, खुले टैब की सीमा, अपने-आप ताज़ा होता अकाउंट कोटा स्टेटस, साइडबार में उतरते विशेषज्ञ संदेश — और साथ में एक मेमोरी लीक और अनाथ छूटी एजेंट प्रोसेस के फ़िक्स, वैसी चीज़ें जो तभी मिलती हैं जब आप इसे हफ़्तों तक चालू छोड़ें।
जो एक प्रयोग के रूप में शुरू हुआ था, वह अब वह ब्राउज़र है जिसमें हम सचमुच बसते हैं। यह इस साल आपके मुख्य ब्राउज़र की जगह नहीं लेगा — पर शायद वह बन जाए जिसे आप तब उठाते हैं जब सोचना चाहते हैं।
इसे लीजिए
किसी भी Mac पर एक लाइन, Apple Silicon या Intel:
brew install --cask muvon/tap/octoweb
या GitHub Releases से एक प्रीबिल्ट आर्काइव उठाइए, या Rust टूलचेन से स्रोत से बनाइए:
git clone https://github.com/muvon/octoweb
cd octoweb
./build.sh --dev # ad-hoc signed, no cert needed
open dist/Octoweb.app
साइडबार के लिए, Octomind इंस्टॉल कीजिए और साइन इन कीजिए:
curl -fsSL https://raw.githubusercontent.com/muvon/octomind/master/install.sh | bash
octomind login
octomind login Octomind Cloud में device-code वाला साइन-इन है — सब्सक्रिप्शन में मॉडल एक्सेस शामिल है, इसलिए और कुछ कॉन्फ़िगर करने की ज़रूरत नहीं, और साइडबार आपका अकाउंट और कोटा स्टेटस दिखाता है। अपनी keys इस्तेमाल करना चाहते हैं? लॉगिन छोड़िए और उसके बजाय किसी भी provider की key export कीजिए (OPENROUTER_API_KEY, ANTHROPIC_API_KEY, …) — BYOK एक first-class रास्ता है। दोनों ही सूरतों में, बस इतना ही सेटअप है: Octoweb लॉन्च कीजिए, ⌘⇧A दबाइए, और नमस्ते कहिए — ब्राउज़र एजेंट प्रोसेस को ख़ुद ही शुरू करता और सँभालता है। कॉन्फ़िग ~/Library/Application Support/octoweb/config.toml पर एक TOML फ़ाइल है; Settings है ⌘,।
Octoweb GitHub पर Apache-2.0 के तहत है, हमारी बाक़ी हर चीज़ की तरह। अगर आप कीबोर्ड पर जीते हैं, या आपके एजेंट किसी हेडलेस ब्राउज़र के बजाय एक असली ब्राउज़र के हक़दार हैं — इसे आज़माइए, और हमें बताइए कि क्या कमी है। शुरुआती उपयोगकर्ताओं की माँगी हुई सुविधाएँ ही वजह हैं कि 0.10.0 और 0.1.0 में ज़मीन-आसमान का फ़र्क़ है।
— Don
Octoweb Apache-2.0 के तहत ओपन सोर्स है, Muvon Un Limited द्वारा विकसित। यह Octomind, हमारे प्लग-एंड-प्ले AI एजेंट रनटाइम, पर चलता है। इसे GitHub पर लीजिए — issues और pull requests का स्वागत है।



