# Octoweb का अपना घर हो गया — और वह अब भी आपके मॉडलों पर चलता है, हमारे नहीं

> Octoweb — macOS के लिए हमारा मुफ़्त कीबोर्ड-फर्स्ट ब्राउज़र — Octomind के प्रोडक्ट मेन्यू से निकलकर octoweb.xyz पर आ गया। यह मौक़ा अच्छा है उस सवाल का सीधा जवाब देने का जो हमसे बार-बार पूछा गया: नहीं, यह हमारे क्लाउड से बँधा नहीं है। ब्राउज़र किसी मॉडल प्रोवाइडर को कॉल करता ही नहीं — वह काम लोकल Octomind एजेंट करता है, एक key पर Octomind Cloud के साथ या अट्ठाईस प्रोवाइडरों में से किसी के भी साथ, आपकी मेज़ पर रखे Ollama बॉक्स समेत। साथ में वह सब जो तीन हफ़्तों की चार रिलीज़ों ने जोड़ा: वर्कस्पेस, वर्कस्पेस के हिसाब से रूट होता MCP, भरोसेमंद नेटिव इनपुट, और A2UI v1.0। ओपन सोर्स, Apache-2.0.

# Octoweb का अपना घर हो गया — और वह अब भी आपके मॉडलों पर चलता है, हमारे नहीं

तीन हफ़्ते पहले हमने [Octoweb से मिलवाया](/blog/introducing-octoweb-keyboard-first-ai-browser) — वही कीबोर्ड-फर्स्ट WebKit ब्राउज़र जिसमें हम मार्च से चुपचाप रह रहे थे। प्रतिक्रिया उम्मीद से बेहतर रही, और उसके साथ एक सवाल नत्थी था, जो आधा दर्जन अलग-अलग लहजों में पूछा गया:

_तो यह सिर्फ़ आपके क्लाउड के साथ चलता है, है न?_

यह मान लेना जायज़ है। साइडबार [Octomind](https://octomind.run) पर चलता है, और वही नाम हमारे पेड क्लाउड का भी है। पोस्ट में लिखा था "Octomind इंस्टॉल कीजिए और साइन इन कीजिए," और कोई भी समझदार पाठक इससे यही निकालेगा कि ब्राउज़र एक फ़नल है — कि ब्राउज़र बदलने का मतलब है हमसे मॉडल किराए पर लेना।

ऐसा नहीं है, और कभी नहीं था। जवाब साफ़ न होना डॉक्यूमेंटेशन में हमारी अपनी चूक है, और शुरुआत URL से ही होती है: प्रोडक्ट पेज `octomind.run/product/octoweb` पर रहता था, जो एक भी शब्द पढ़ने से पहले कह देता है कि _यह उसी चीज़ का एक फ़ीचर है जिसके आप पैसे देते हैं_।

तो हमने URL ठीक किया, और फिर समझाना भी ठीक किया।

**Octoweb अब [octoweb.xyz](https://octoweb.xyz) पर रहता है।** मुफ़्त, Apache-2.0, macOS 13+, कोई अकाउंट नहीं। और ब्राउज़र ने अपनी पूरी ज़िंदगी में कभी किसी मॉडल प्रोवाइडर को कॉल नहीं किया — उसके पास वैसा कोड ही नहीं है।

---

## नया घर

<figure class="ow"><div class="ow-bar"><span class="ow-dot ow-red"></span><span class="ow-dot ow-yellow"></span><span class="ow-dot ow-green"></span><span class="ow-omni">octoweb.xyz</span></div><div class="ow-body"><div class="ow-palette"><div class="ow-query">octoweb short<span class="ow-caret"></span></div><ul class="ow-results"><li class="ow-active"><span class="ow-badge">TAB</span><span class="ow-title">कीबोर्ड शॉर्टकट — हर बाइंडिंग</span><span class="ow-host">octoweb.xyz/shortcuts</span><span class="ow-key">⌘1</span></li><li><span class="ow-badge">TAB</span><span class="ow-title">MCP सर्वर — 29 टूल जो आपका एजेंट कॉल कर सकता है</span><span class="ow-host">octoweb.xyz/mcp</span><span class="ow-key">⌘2</span></li><li><span class="ow-badge ow-hist">इतिहास</span><span class="ow-title">ब्राउज़र क्या सहेजता है, और क्या भेजता है</span><span class="ow-host">octoweb.xyz/privacy</span><span class="ow-key">⌘3</span></li></ul><div class="ow-actions"><span>↵ खोलें</span><span>⌘↵ नेविगेट करें</span><span class="ow-ai">⌘⇧↵ AI से पूछें</span></div></div></div></figure>

यह कमांड पैलेट है — `⌘⇧P` — खुले टैब और इतिहास में फ़ज़ी-मैच करता हुआ, और Octoweb में कहीं भी पहुँचने का रास्ता यही है। यह साइट का ठीक-ठाक प्रीव्यू भी है, क्योंकि साइट पर मार्केटिंग कम और रेफ़रेंस सामग्री ज़्यादा है:

- **[/shortcuts](https://octoweb.xyz/shortcuts)** — छह समूहों में सारी 48 बाइंडिंग, उन्हें मिलाकर जो सिर्फ़ पैलेट और AI प्रॉम्प्ट बॉक्स के भीतर मौजूद हैं।
- **[/mcp](https://octoweb.xyz/mcp)** — 29 MCP टूल में से हर एक, काम के हिसाब से समूहबद्ध, Claude Code, Claude Desktop और Cursor के लिए कॉपी-पेस्ट कॉन्फ़िग के साथ।
- **[/privacy](https://octoweb.xyz/privacy)** — कौन-सी फ़ाइल आपकी डिस्क पर कहाँ बनती है, क्या loopback पर बाइंड होता है, और यह ईमानदार नोट कि _वेबसाइट_ पर Google Analytics चलता है जबकि _ब्राउज़र_ में टेलीमेट्री बिलकुल नहीं है।
- **[/blog](https://octoweb.xyz/blog)** — छोटी, प्रोडक्ट-केंद्रित पोस्टें। यह वाली muvon.io पर ही रहेगी; रिलीज़ नोट्स वहाँ रहेंगे।

यह Cloudflare पर एक स्टैटिक SvelteKit साइट है, प्रीरेंडर्ड, कोई क्लाइंट-साइड फ़ेचिंग नहीं — ठीक वही स्टैक जिस पर आप यह पेज पढ़ रहे हैं। इसमें एक शाम लगी। यह काम मार्च में ही हो जाना चाहिए था।

---

## असल जवाब: मॉडल किसका है?

यह रहा वह हिस्सा जिसे तीन हफ़्ते पहले एक सीधा पैराग्राफ़ मिलना चाहिए था।

Octoweb का साइडबार कोई चैट क्लाइंट नहीं है। `⌘⇧A` दबाते ही ब्राउज़र एक चाइल्ड प्रोसेस शुरू करता है — `octomind acp octoweb:assistant`, सैंडबॉक्स किया हुआ — और उससे [Agent Client Protocol](https://github.com/muvon/agent-client-protocol) पर बात करता है। सिस्टम में हर मॉडल कॉल वही प्रोसेस करता है। ब्राउज़र के 36,000 लाइन Rust कोड में किसी मॉडल प्रोवाइडर तक जाती HTTP कॉल ढूँढिए और ख़ाली हाथ लौटिएगा, क्योंकि है ही नहीं। ब्राउज़र को बातचीत रेंडर करनी आती है। उसे यह नहीं पता कि OpenAI क्या चीज़ है।

यह इसलिए मायने रखता है कि पूरा "कौन-सा मॉडल" वाला सवाल एक प्रोसेस बाईं ओर खिसक जाता है, Octomind की कॉन्फ़िग में — जहाँ वह बस एक स्ट्रिंग है:

```toml
[model]
name = "octohub:auto"          # Octomind Cloud, one key, we route it
# name = "anthropic:claude-opus-5"
# name = "openrouter:qwen/qwen3-coder"
# name = "local:qwen3-coder-30b"   # your box, your GPU, your electricity
```

मॉडल हमेशा `provider:model` होते हैं — अकेला नाम अंदाज़ा लगाने के बजाय ठुकरा दिया जाता है। इन प्रीफ़िक्स के पीछे [octolib](/blog/octolib-the-engine-behind-our-ai-stack) है — वही प्रोवाइडर परत जो Muvon का हर टूल साझा करता है — और वह फ़िलहाल **28 प्रोवाइडर** रिज़ॉल्व करती है: `openrouter`, `openai`, `anthropic`, `google-vertex`, `google-studio`, `groq`, `cerebras`, `deepseek`, `fireworks`, `together`, `xai`, `moonshot`, `minimax`, `nvidia`, `amazon`, `cloudflare`, `zai`, `alibaba` और बाक़ी।

इनमें से दो प्रीफ़िक्स ही असल में इस पोस्ट का विषय हैं:

- **`local:`** किसी भी OpenAI-compatible सर्वर की ओर इशारा करता है, डिफ़ॉल्ट `http://localhost:11434/v1/chat/completions`। यानी बिना कुछ किए Ollama; `LOCAL_API_URL` सेट कीजिए और यह 1234 पर LM Studio हो जाता है, 8080 पर LocalAI, या आपकी मेज़ के नीचे रखा vLLM बॉक्स। मशीन से कुछ भी बाहर नहीं जाता।
- **`cli:`** आपके पहले से इंस्टॉल किसी एजेंट CLI को चलाता है — `codex`, `claude`, `cursor`, `gemini` — मानो वह कोई मॉडल एंडपॉइंट हो। इनमें से किसी के लिए आप पहले से पैसे दे रहे हैं, तो साइडबार उसी को इस्तेमाल कर लेगा और दूसरा बिल नहीं जुड़ेगा।

और keys कभी कॉन्फ़िग फ़ाइल में नहीं जातीं। `octomind config --api-key` उन्हें सहेजने से साफ़ इनकार कर देता है — क्रेडेंशियल पहले एनवायरनमेंट से पढ़े जाते हैं, फिर user-scope `.env` से, फिर project-local `.env` से। आपकी Anthropic key वहीं रहती है जहाँ आपकी बाक़ी keys रहती हैं।

**Octomind Cloud इसमें कहाँ बैठता है:** यह _आसान_ रास्ता है, ज़रूरी रास्ता नहीं। `octomind login` एक device-code फ़्लो है, `gh auth login` जैसा। यह एक ही क्रेडेंशियल लिखता है — `OCTOHUB_API_KEY` — और उसके बाद डिफ़ॉल्ट `octohub:auto` मॉडल हर कॉल को उसके मक़सद (main, supervisor, compression) के हिसाब से हमारी तरफ़ के उपयुक्त मॉडल पर भेजता है। छह के बजाय एक key, एक खर्च-सीमा जिस पर नज़र रखी जा सके, और शुरू करने के लिए एक फ़्री टियर। हमें सौदा अच्छा लगता है, इसीलिए यह डिफ़ॉल्ट है। और यह भी उतना ही सच है कि TOML फ़ाइल में नौ अक्षर बदलते ही यह आपका सेटअप रह ही नहीं जाता — और साइडबार की अकाउंट पट्टी एक हटाई जा सकने वाली सूचना है, कोई ताला लगा दरवाज़ा नहीं।

<figure class="ow"><div class="ow-bar"><span class="ow-dot ow-red"></span><span class="ow-dot ow-yellow"></span><span class="ow-dot ow-green"></span><span class="ow-omni">github.com/muvon/octoweb/pull/214</span></div><div class="ow-body"><div class="ow-split"><div class="ow-page"><span class="ow-line" style="width:80%"></span><span class="ow-line" style="width:62%"></span><span class="ow-line" style="width:71%"></span><span class="ow-line" style="width:48%"></span><span class="ow-line" style="width:66%"></span></div><aside class="ow-sidebar"><div class="ow-sidebar-head"><span class="ow-agent">octoweb:assistant</span><span class="ow-live">स्ट्रीमिंग</span></div><div class="ow-model"><span class="ow-model-label">मॉडल</span><span class="ow-model-name">local:qwen3-coder-30b</span></div><div class="ow-msg ow-user">इस diff में हमारे क्लाइंट के लिए असल में क्या बदल रहा है?</div><div class="ow-msg"><p>तीन चीज़ें, उनमें से एक breaking:</p><span class="ow-line" style="width:88%"></span><span class="ow-line" style="width:63%"></span><div class="ow-a2ui"><span class="ow-a2ui-label">A2UI · मंज़ूरी कार्ड</span><span class="ow-btn ow-btn-primary">diff खोलें</span><span class="ow-btn">अभी नहीं</span></div></div><div class="ow-sidebar-input">इस पेज के बारे में पूछें… <span class="ow-key">↵</span></div></aside></div></div></figure>

साइडबार हेडर में दिखने वाला टैग एडिट किया जा सकता है, इसलिए एक ही विंडो एक मिनट `octoweb:assistant` से बात कर सकती है और अगले मिनट आपके अपने `developer:rust` एजेंट से — और 0.14.0 से वह फ़ील्ड उन्हीं टैग्स से ऑटोकम्प्लीट करता है जिन्हें आपका लोकल Octomind सचमुच जानता है, यानी अब अंधेरे में टाइप नहीं करना पड़ता।

---

## तीन हफ़्ते, चार रिलीज़

परिचय वाली पोस्ट के बाद से Octoweb 0.11.0 से 0.14.0 तक निकला — 62 कमिट। उनमें से दो ने बदल दिया कि यह चीज़ इस्तेमाल में कैसी लगती है।

**वर्कस्पेस (`⌘⇧O`)।** अलग-थलग प्रोफ़ाइलें, और अलग-थलग का मतलब सचमुच अलग-थलग: हर वर्कस्पेस के अपने टैब, अपना इतिहास, अपने AI सेशन, अपना MRU क्रम, अपने फास्ट-एक्सेस स्लॉट, और अपना `WKWebsiteDataStore` — यानी कुकीज़, `localStorage` और कैश कभी एक-दूसरे में नहीं घुलते। एक ही साइट पर दो अकाउंट, एक ही वक़्त साइन इन, बिना incognito वाले नाटक के। यह वह फ़ीचर है जिसकी ज़रूरत का पता हमें उस दिन चला जिस दिन क्लाइंट प्रोजेक्ट के लिए दूसरा ब्राउज़र खोलना बंद हो गया।

<figure class="ow"><div class="ow-bar"><span class="ow-dot ow-red"></span><span class="ow-dot ow-yellow"></span><span class="ow-dot ow-green"></span><span class="ow-omni">⌘⇧O — वर्कस्पेस</span></div><div class="ow-body"><ul class="ow-ws"><li class="ow-active"><span class="ow-key">⌘1</span><span class="ow-title">personal</span><span class="ow-host">14 टैब</span></li><li><span class="ow-key">⌘2</span><span class="ow-title">client-acme</span><span class="ow-host">6 टैब</span><span class="ow-media">▶ meet.google.com</span></li><li><span class="ow-key">⌘3</span><span class="ow-title">agent-scratch</span><span class="ow-host">2 टैब</span><span class="ow-badge">MCP</span></li></ul><div class="ow-actions"><span>अलग कुकीज़, इतिहास, सेशन और स्लॉट</span><span class="ow-ai">स्विच करने के लिए ⌘⇧O</span></div></div></figure>

**MCP अब हर वर्कस्पेस के हिसाब से रूट होता है।** `localhost:3434/mcp` पर बैठा इकलौता सर्वर `X-Octoweb-Workspace` टोकन पढ़ता है और सिर्फ़ उसी प्रोफ़ाइल के भीतर काम करता है। यानी कोई एजेंट किसी बैकग्राउंड वर्कस्पेस को चला सकता है — किसी अलग scratch अकाउंट में लॉग इन, अपनी ही कुकीज़ पर — जबकि आप अपने वाले में काम करते रहते हैं, और वह ग़लती से आपके सेशन में भटक नहीं सकता। capability मैनिफ़ेस्ट एक क़दम और आगे जाता है: टोकन न हो तो वह स्क्रीन पर खुले वर्कस्पेस को डिफ़ॉल्ट मान लेने के बजाय सर्वर को दिखाने से ही इनकार कर देता है।

बाक़ी संक्षेप में — और यह सब हमारे नहीं, आपके हाथ में है:

- **भरोसेमंद नेटिव इनपुट।** MCP के क्लिक और कीस्ट्रोक अब असली AppKit `NSEvent` हैं, जो टैब के `WKWebView` तक पहुँचते हैं — इसलिए पेज को `isTrusted=true` दिखता है, एक असली यूज़र जेस्चर, चलता हुआ `:hover`, और नेटिव डिफ़ॉल्ट ऐक्शन। यह छिपे हुए बैकग्राउंड टैब पर भी काम करता है, बिना आपका फ़ोकस छीने। सिंथेटिक DOM इवेंट ये चारों काम कभी नहीं कर सकते थे।
- **हर क्रिया बताती है कि क्या बदला।** हर टूल कॉल एक लाइन का असर-सारांश लौटाता है — नेविगेशन, SPA का URL बदलना, स्क्रीन पर नया टेक्स्ट, डायलॉग, नेटवर्क गतिविधि, फ़ोकस का हिलना — या साफ़-साफ़ कह देता है "कोई दिखने वाला बदलाव नहीं"। एजेंट अब यह पता करने के लिए कि उसका क्लिक लगा या नहीं, पूरा एक टर्न पेज दोबारा पढ़ने में नहीं फूँकता। संवेदनशील क्वेरी पैरामीटर रास्ते में ही रिपोर्ट की गई नेटवर्क गतिविधि से पोंछ दिए जाते हैं।
- **डाउनलोड अब हैं।** एक रनटाइम पैच WebKit से मुख्य फ़्रेम _और_ सबफ़्रेम, दोनों में `Content-Disposition: attachment` मनवा लेता है — Google Drive यही इस्तेमाल करता है — और बनी हुई फ़ाइल का नाम असर-सारांश में दिख जाता है, भले पेज ने कुछ न कहा हो।
- **`browser_dismiss_overlay`।** कुकी और सहमति वाले बैनर हटा देता है, और उसकी तरजीह _Reject_ को है — वह आपकी ओर से अपने-आप स्वीकार नहीं करेगा।
- **A2UI v1.0।** एजेंट साइडबार में एक असली इंटरैक्टिव सतह रेंडर कर सकता है — कार्ड, फ़ॉर्म, विकल्प पिकर, स्लाइडर, मोडल — डेटा बाइंडिंग और वैलिडेशन के साथ, और आपके कुछ क्लिक करने का आधे घंटे तक इंतज़ार कर सकता है। जिन कार्रवाइयों का असर बड़ा हो, उन्हें इसी रास्ते से गुज़रना चाहिए: पहले पूछो, फिर करो।
- **लाइव मीडिया टैब।** वर्कस्पेस स्विचर दिखाता है कि कौन-से टैब ऑडियो या वीडियो चला रहे हैं या माइक पकड़े बैठे हैं — यानी दूसरी प्रोफ़ाइल में जो मीटिंग चलती छूट गई थी, वह ढूँढी जा सकती है, भूत बनकर भटकती नहीं रहती।

---

## अगस्त में हमसे दो चीज़ें ग़लत हुईं

हमारा उसूल: पिछली पोस्ट ग़लत थी, तो अगली पोस्ट यह कह देती है।

**ग्लोबल शॉर्टकट CGEventTap से नहीं गुज़रते।** हमने लिखा था कि गुज़रते हैं; कोड मई में ही उससे हट चुका था। CGEventTap के लिए macOS की Accessibility अनुमति चाहिए, और किसी ब्राउज़र जैसी चीज़ के लिए keylogger-स्तर की पहुँच माँगना उस फ़ीचर के बदले घाटे का सौदा है जो किसी ने माँगा ही नहीं था। Octoweb इसकी जगह AppKit का लोकल `NSEvent` मॉनिटर इस्तेमाल करता है — शून्य अनुमतियाँ, और ईमानदार दायरा: यह कीज़ तभी देखता है जब Octoweb सामने हो। डिज़ाइन सही था; "सिस्टम-वाइड" शब्द ग़लत था।

**Passkeys उसमें नहीं हैं।** अगस्त की पोस्ट ने WebAuthn को उन बुनियादी चीज़ों में गिना था जो शिप हो चुकी हैं। उसे जोड़ने वाला कमिट मई में revert हो गया था और छापने से पहले हमारी नज़र इस पर नहीं गई। 0.14.0 में यह नहीं है।

बात निकली है तो दो छोटे सुधार और: MCP सर्वर में 29 टूल हैं, 26 नहीं — `browser_fill_form`, `browser_dismiss_overlay`, `browser_get_playing_tabs` और `render_ui` उसके बाद आए। और "क़रीब 25,000 लाइनें" अब 35,972 हैं।

---

## इसे लीजिए

```bash
brew install --cask muvon/tap/octoweb
```

macOS 13 या उससे नया, Apple Silicon या Intel, कोई अकाउंट नहीं। या ख़ुद बना लीजिए — इसमें एक Rust टूलचेन और क़रीब एक मिनट लगता है:

```bash
git clone https://github.com/muvon/octoweb
cd octoweb
./build.sh --dev
open dist/Octoweb.app
```

बिना कोई AI कॉन्फ़िगर किए भी Octoweb एक ब्राउज़र है: पैलेट, स्लॉट, वर्कस्पेस, find-in-page, कॉन्टेंट ब्लॉकिंग, टैब हाइबरनेशन। साइडबार चाहता है कि साथ में [Octomind](https://octomind.run) इंस्टॉल हो, और उसके आगे मॉडल का फ़ैसला एक लाइन का है — हमारे क्लाउड के लिए `octomind login`, या बाक़ी किसी भी चीज़ के लिए एक export की हुई key और एक `provider:model` स्ट्रिंग। हम दोनों इस्तेमाल करते हैं, अलग-अलग मशीनों पर, इस हिसाब से कि काम क्या है और नेटवर्क कैसा है।

सब कुछ Apache-2.0 है: [ब्राउज़र](https://github.com/muvon/octoweb), [रनटाइम](https://github.com/muvon/octomind), [प्रोवाइडर परत](https://github.com/muvon/octolib)। इसे किसी लोकल मॉडल पर चलाइए और कुछ ज़रूरत से ज़्यादा धीमा या बुद्धू लगे, तो [issue खोलिए](https://github.com/muvon/octoweb/issues) — उस रास्ते की टेस्टिंग क्लाउड वाले से कम होती है, और इसका इकलौता इलाज यही है कि आप हमें बताएँ।

— Don

_Octoweb Apache-2.0 के तहत ओपन सोर्स है, [Muvon Un Limited](https://muvon.io) द्वारा विकसित। अब यह [octoweb.xyz](https://octoweb.xyz) पर रहता है, [Octomind](https://octomind.run) पर चलता है, और जिस भी मॉडल पर आप इसे लगा दें, उसी के साथ काम करता है। [GitHub](https://github.com/muvon/octoweb) — issues और pull requests का स्वागत है।_
