
सुरक्षा पर ध्यान केंद्रित करने वाला एक AI व्यक्तिगत सहायक।

Stavrobot एक व्यक्तिगत AI सहायक है जो "एक AI सहायक को जितनी पहुँच चाहिए, उससे अधिक नहीं" के सिद्धांत पर बनाया गया है।
इसमें AI सहायक की सभी अच्छी सुविधाएँ हैं, लेकिन सैंडबॉक्सिंग, अलगाव और न्यूनतम अनुमतियों पर ध्यान केंद्रित करता है। यह हल्का है और केवल docker compose up के साथ तैनात किया जाता है।
uv के माध्यम से pip निर्भरताओं के साथ मनमाना Python, होस्ट वातावरण से अलग।AI-सहायता प्राप्त इंस्टॉलेशन: अपने कोडिंग AI (Claude Code, Cursor, Windsurf, आदि) को https://stavrobot.stavros.io/INSTALL.md लाने और उसका पालन करने के लिए कहें — यह पूरी सेटअप प्रक्रिया में संवादात्मक रूप से आपका मार्गदर्शन करेगा।
मैन्युअल इंस्टॉलेशन:
Telegram पर @BotFather को संदेश भेजकर एक बॉट बनाएं और टोकन कॉपी करें। अपना Telegram उपयोगकर्ता ID प्राप्त करने के लिए @userinfobot को संदेश भेजें (इसका उपयोग चैट ID के रूप में किया जाता है)।
env.example को .env में कॉपी करें और POSTGRES_PASSWORD को कुछ सुरक्षित और TZ को अपने समय क्षेत्र में बदलें।
config.example.toml को data/main/config.toml में कॉपी करें और आवश्यक फ़ील्ड भरें: apiKey, password, publicHostname, [owner].name, [owner].telegram (आपका चैट ID), और [telegram].botToken। फ़ाइल में बाकी सब कुछ वैकल्पिक है।
docker compose up --build
बस इतना ही। Telegram पर अपने बॉट को संदेश भेजें और वह जवाब देगा। Signal, WhatsApp, ईमेल और अन्य विकल्पों के लिए नीचे विस्तृत सेटअप अनुभाग देखें।
config.example.toml को data/main/config.toml में कॉपी करें।authFile (या apiKey) और publicHostname सेट करें। बाकी सब कुछ वैकल्पिक है।env.example को .env में कॉपी करें और अपना समय क्षेत्र (TZ) सेट करें। Postgres क्रेडेंशियल्स और अन्य पर्यावरण सेटिंग्स भी वहाँ ओवरराइड की जा सकती हैं। हमेशा POSTGRES_PASSWORD को कुछ सुरक्षित पर सेट करें — डिफ़ॉल्ट एक कमज़ोर प्लेसहोल्डर है और उत्पादन में उपयोग नहीं किया जाना चाहिए।Stavrobot को config.toml में baseUrl सेट करके किसी भी OpenAI-संगत एंडपॉइंट (Ollama, LiteLLM, vLLM, आदि) या कस्टम Anthropic-संगत प्रॉक्सी पर इंगित किया जा सकता है। आवश्यक फ़ील्ड और उदाहरण कॉन्फ़िगरेशन के लिए config.example.toml देखें।
ऐप दो प्रमाणीकरण मोड का समर्थन करता है: API कुंजी या OAuth।
config.toml में apiKey सेट करें। लॉगिन या लॉगआउट की आवश्यकता नहीं है।config.toml में authFile सेट करें (एक पथ जहाँ क्रेडेंशियल्स संग्रहीत होंगे)। लॉगिन पेज Pi द्वारा समर्थित किसी भी OAuth प्रदाता के साथ काम करता है।
<your-hostname>/login पर जाएँ। पृष्ठ पर दिए गए निर्देशों का पालन करें, और क्रेडेंशियल्स auth फ़ाइल में सहेजे जाते हैं। यदि बॉट चलने के दौरान प्रमाणीकरण समाप्त हो जाता है, तो यह आपके मैसेजिंग प्लेटफ़ॉर्म के माध्यम से आपको लॉगिन URL वाला एक संदेश भेजता है।authFile पथ पर फ़ाइल हटाएँ। बॉट अगले संदेश पर लापता क्रेडेंशियल्स का पता लगाएगा और आपको फिर से लॉग इन करने के लिए संकेत देगा।coder कंटेनर वैकल्पिक है (केवल स्व-प्रोग्रामिंग सुविधा के लिए आवश्यक)। यह मुख्य ऐप की API कुंजी से अलग, सब्सक्रिप्शन प्रमाणीकरण (OAuth) के साथ Claude Code का उपयोग करता है।
Docker Compose प्रोफ़ाइल अल्पविराम से अलग की जाती हैं, इसलिए आप उन्हें जोड़ सकते हैं (जैसे COMPOSE_PROFILES=signal,coder)।
.env फ़ाइल में COMPOSE_PROFILES को coder शामिल करने के लिए सेट करें (जैसे COMPOSE_PROFILES=coder, या COMPOSE_PROFILES=signal,coder यदि आप Signal का भी उपयोग कर रहे हैं)।docker compose --profile coder up --builddocker compose exec -u coder coder claude (यदि आपने पहले नहीं किया है तो यह आपको लॉग इन करने के लिए संकेत देगा)।[coder].model को Claude Code मॉडल उपनाम (sonnet, opus, या haiku) पर सेट करें।Signal के लिए एक अलग फ़ोन नंबर आवश्यक है — आपका व्यक्तिगत नंबर नहीं। एक प्रीपेड SIM या VoIP नंबर काम करता है।
.env फ़ाइल में COMPOSE_PROFILES=signal को अनकम्मेंट करें।docker compose --profile signal builddocker compose --profile signal run --rm --entrypoint bash signal-bridge -c 'signal-cli link -n "Stavrobot" | tee >(xargs -L 1 qrencode -t utf8)' — अपने फ़ोन (Signal > सेटिंग्स > लिंक किए गए डिवाइस) से QR कोड स्कैन करें।docker compose --profile signal run --rm --entrypoint bash signal-bridge -c 'signal-cli -u +YOUR_NUMBER register', फिर docker compose --profile signal run --rm --entrypoint bash signal-bridge -c 'signal-cli -u +YOUR_NUMBER verify CODE' के साथ सत्यापित करें।[signal].account सेट करें।docker compose up --build/settings वेब UI के माध्यम से अनुमत नंबर जोड़ें।docker compose exec app node -e "fetch('http://localhost:3001/chat',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({message:'Send the message \"Hello from Stavrobot\" to my Signal number.'})}).then(r=>r.text()).then(console.log)"
[telegram].botToken सेट करें।[owner].telegram में चैट ID (अपना मोबाइल फ़ोन नंबर नहीं) सेट करें।/settings वेब UI के माध्यम से अनुमत चैट ID जोड़ें।WhatsApp के लिए एक अलग फ़ोन नंबर की आवश्यकता होती है, अन्यथा आप स्वयं को संदेश भेज रहे होंगे, जो वास्तव में काम नहीं करता है।
WhatsApp Baileys का उपयोग करता है, एक अनाधिकारिक WhatsApp वेब लाइब्रेरी जो एक सहायक उपकरण (WhatsApp वेब की तरह) के रूप में लिंक होती है। किसी अलग फ़ोन नंबर की आवश्यकता नहीं है — यह आपके मौजूदा WhatsApp खाते से लिंक होता है।
जोखिम: Baileys एक अनाधिकारिक API का उपयोग करता है। WhatsApp इसका उपयोग करने वाले खातों पर प्रतिबंध लगा सकता है। अपने जोखिम पर उपयोग करें।
config.toml में एक [whatsapp] अनुभाग जोड़ें (प्रारूप के लिए config.example.toml देखें)।docker compose up --builddocker compose logs -f app)।./data/whatsapp में बना रहता है।/settings वेब UI के माध्यम से अनुमत फ़ोन नंबर जोड़ें।ईमेल इनबाउंड डिलीवरी के लिए Cloudflare Email Worker और आउटबाउंड के लिए SMTP का उपयोग करता है। पूर्ण वर्कर कोड और विस्तृत सेटअप निर्देशों के लिए config.example.toml देखें।
config.toml में SMTP क्रेडेंशियल्स और एक यादृच्छिक webhookSecret के साथ एक [email] अनुभाग जोड़ें।config.example.toml में है) और वर्कर पर WEBHOOK_URL और WEBHOOK_SECRET पर्यावरण चर सेट करें।/settings वेब UI के माध्यम से अनुमत प्रेषक पते जोड़ें।docker compose up --build
API http://localhost:10567/chat पर उपलब्ध है।
नोट: Docker Compose केवल ऐप को localhost:10567 पर उजागर करता है। इसे बाहरी रूप से सुलभ बनाने के लिए (Telegram/Signal वेबहुक और publicHostname सेटिंग के लिए आवश्यक), एक रिवर्स प्रॉक्सी (जैसे Nginx, Caddy) सेट करें जो localhost:10567 की ओर इंगित करे। आप पोर्ट को सीधे भी उजागर कर सकते हैं, लेकिन इसकी अनुशंसा नहीं की जाती क्योंकि ट्रैफ़िक अनएन्क्रिप्टेड होगा।
Node.js >= 20 और एक चल रहे PostgreSQL इंस्टेंस की आवश्यकता है।
npm install && npm run build && npm start
नोट: Python निष्पादन और Signal एकीकरण केवल Docker कंटेनरों के अंदर काम करता है।
Stavrobot के पास तीन-स्तरीय ज्ञान प्रणाली है: यादें (memories), एक स्क्रैचपैड (scratchpad), और डेटाबेस (database)। यह इन्हें अपने आप काफी अच्छी तरह से प्रबंधित करेगा, लेकिन आपके लिए इन्हें जानना महत्वपूर्ण है क्योंकि आप बॉट को इनका उचित उपयोग करने में मदद करना चाहेंगे।
यादें हमेशा सिस्टम प्रॉम्प्ट में पूरी तरह से इंजेक्ट की जाती हैं। आपको इनमें किफ़ायती रहना चाहिए, क्योंकि ये हर बार संदर्भ में शामिल होती हैं, और इनमें से बहुत सारी होने से संदर्भ बढ़ सकता है। एक अच्छी याद का उदाहरण होगा "उपयोगकर्ता अनौपचारिक शैली में चैट करना पसंद करता है।", कुछ ऐसा जो बॉट को हर बार जानना चाहिए, भले ही इसकी कीमत अतिरिक्त संदर्भ लंबाई में हो।
स्क्रैचपैड वह जगह है जहाँ बॉट कम बार एक्सेस किए जाने वाले ज्ञान को रखता है, लेकिन ज्ञान जो किसी विषय से संबंधित होता है। स्क्रैचपैड प्रविष्टियों का एक शीर्षक और एक मुख्य भाग होता है, और शीर्षक स्वचालित रूप से संदर्भ में इंजेक्ट किया जाता है। इसका उपयोग महत्वपूर्ण, लेकिन कम बार आवश्यक चीज़ों के लिए करें, चीज़ें जो आमतौर पर किसी विशिष्ट विषय से संबंधित होती हैं।
उदाहरण के लिए, एक अच्छी स्क्रैचपैड प्रविष्टि "आहार संबंधी प्राथमिकताएँ" होगी, जिसमें विवरण होगा कि आप क्या खाना पसंद करते हैं, कब, आदि। बॉट देखेगा कि एक विषय "आहार संबंधी प्राथमिकताएँ" है, लेकिन वास्तविक पाठ को स्वचालित रूप से संदर्भ में लोड नहीं करेगा, केवल आवश्यकता होने पर ही उस तक पहुँचेगा।
जब आप बॉट से भोजन के बारे में बात कर रहे होते हैं, तो वह जान जाएगा कि एक "आहार संबंधी प्राथमिकताएँ" स्क्रैचपैड प्रविष्टि है जिसे वह देख सकता है, और आमतौर पर वह अपने आप ऐसा करेगा।
डेटाबेस तीसरा स्तर है, संरचित या बल्क डेटा के लिए जो यादों या स्क्रैचपैड में फिट नहीं होता। बॉट के पास PostgreSQL तक अप्रतिबंधित SQL के माध्यम से पूर्ण रीड/राइट एक्सेस है, इसलिए वह तालिकाएँ बना सकता है, क्वेरी चला सकता है, और कुछ भी संग्रहीत कर सकता है। इसका उपयोग सूचियों, लॉग्स, संरचित रिकॉर्ड्स, या किसी भी डेटा के लिए करें जो गद्य के रूप में पढ़ने की तुलना में क्वेरी करने के लिए बेहतर है।
बॉट आमतौर पर पर्याप्त रूप से जान जाएगा कि कब क्या उपयोग करना है, लेकिन कभी-कभी आप उसे स्पष्ट रूप से बताना चाहेंगे कि कौन सी जानकारी कहाँ रखनी है।
Stavrobot Signal, Telegram, WhatsApp या ईमेल पर आपकी ओर से लोगों को संदेश भेज सकता है। किसी दोस्त के साथ रात के खाने का समय निर्धारित करने की आवश्यकता है? बॉट को बताएं कि आप दोनों के लिए काम करने वाला समय खोजें, और वह उन्हें संदेश भेजेगा, तारीख पर बातचीत करेगा, और इसे आपके कैलेंडर पर डाल देगा। कोई अपॉइंटमेंट व्यवस्थित करना चाहते हैं, किसी समूह यात्रा का समन्वय करना चाहते हैं, या व्यस्त रहते हुए किसी से कुछ पूछना चाहते हैं? बस बॉट को बताएं कि आपको क्या चाहिए और किससे बात करनी है।
बॉट प्रत्येक वार्तालाप के लिए एक समर्पित उप-एजेंट बनाता है, अपने स्वयं के निर्देशों और संदर्भ के साथ, ताकि वह आपकी मुख्य चैट को अव्यवस्थित किए बिना दूसरे व्यक्ति के साथ आगे-पीछे संभाल सके। जब कार्य पूरा हो जाता है, तो यह संपर्क को अक्षम कर देता है और आपको रिपोर्ट करता है।
चीजों को सुरक्षित रखने के लिए, बॉट के किसी से बात करने से पहले दो चीजों की आवश्यकता होती है:
/settings पर जाएँ और उनका फ़ोन नंबर (Signal या WhatsApp) या चैट ID (Telegram) जोड़ें। यह प्रति व्यक्ति एक बार का कदम है। बॉट इस सूची को संशोधित नहीं कर सकता या उस पर नहीं होने वाले किसी को भी संदेश नहीं भेज सकता, चाहे कुछ भी हो।एक सामान्य प्रवाह: आप /settings के माध्यम से एक बार अपने दोस्त का फ़ोन नंबर अनुमति सूची में जोड़ते हैं, फिर बॉट को बताते हैं "अगले सप्ताह एलेक्स के साथ रात के खाने का समय खोजें"। बॉट एलेक्स के लिए एक संपर्क रिकॉर्ड बनाता है, एक उप-एजेंट बनाता है, एलेक्स को Signal पर संदेश भेजता है, एक तारीख खोजने के लिए आगे-पीछे करता है, और परिणाम आपको रिपोर्ट करता है।
कौशल सादा-पाठ निर्देश फ़ाइलें हैं जो बॉट को नई क्षमताएँ सिखाती हैं — जैसे तालिकाएँ बनाना, ज्ञान संग्रहीत करना, पृष्ठ बनाना, या विशिष्ट वर्कफ़्लो का पालन करना। ये कोड नहीं हैं; ये प्राकृतिक-भाषा निर्देश हैं जिन्हें बॉट पढ़ता और उनका पालन करता है।
कौशल प्रणाली स्थापित करने के लिए, बॉट को https://stavrobot.stavros.io/skills/bootstrap.md लाने और उसके निर्देशों का पालन करने के लिए कहें।
उपलब्ध कौशलों की पूरी सूची https://stavrobot.stavros.io/skills/index.md पर है। एक कौशल स्थापित करने के लिए, बॉट को उस URL से लाने और स्थापित करने के लिए कहें। बॉट आपको दिखाएगा कि कौशल क्या करता है और आगे बढ़ने से पहले पुष्टि माँगेगा।
कौशल फ़ाइलें इस रिपॉजिटरी की pages शाखा पर रहती हैं (Cloudflare Pages के माध्यम से परोसी जाती हैं)। एक कौशल का योगदान करने के लिए, उस शाखा पर skills/ में एक मार्कडाउन फ़ाइल जोड़ें। प्रत्येक कौशल फ़ाइल में title, description, version, और एक वैकल्पिक author के साथ YAML फ्रंट मैटर होता है, उसके बाद मुख्य भाग में सादा-भाषा निर्देश होते हैं। पूर्ण लेखन गाइड के लिए SKILL-AUTHORING.md देखें। pages शाखा के विरुद्ध एक PR सबमिट करें।
Stavrobot प्लगइन बनाने के लिए आपको जो कुछ भी जानने की आवश्यकता है, वह PLUGIN.md में देखें। यही दस्तावेज़ मनुष्यों और LLM दोनों के लिए एक संदर्भ के रूप में काम करता है।
बॉट के लिए मुख्य कार्यक्षमता को सक्षम करने के लिए प्लगइन्स काफी आवश्यक हैं, जैसे वॉइस नोट्स को "सुनने", वॉइस नोट्स वापस भेजने, आपके आस-पास के स्थानों के बारे में जागरूक होने, वेब खोजने आदि की क्षमता।
ये क्षमताएँ बॉक्स से बाहर प्रदान नहीं की जाती हैं ताकि आपको अपने बॉट को अपनी इच्छानुसार अनुकूलित करने की क्षमता मिल सके। आपको प्लगइन्स स्थापित करने चाहिए, अन्यथा आप महत्वपूर्ण कार्यक्षमता खो देंगे।
आप यहाँ कुछ प्रथम-पक्ष प्लगइन्स पा सकते हैं:
तीन मुख्य Docker कंटेनर: app (TypeScript सर्वर, POST /chat उजागर करता है, POST /telegram/webhook पर Telegram वेबहुक संभालता है, POST /email/webhook पर इनबाउंड ईमेल वेबहुक संभालता है, और Baileys के माध्यम से WhatsApp को इन-प्रोसेस चलाता है), postgres (स्थायी स्थिति के लिए PostgreSQL 17), और plugin-runner (Node.js सर्वर — प्लगइन्स को सूचीबद्ध, निरीक्षण और निष्पादित करता है, दोनों स्थानीय रूप से निर्मित और git-स्थापित)। एक वैकल्पिक coder कंटेनर (Claude Code हेडलेस एजेंट संपादन योग्य प्लगइन्स बनाने और संशोधित करने के लिए) coder Docker Compose प्रोफ़ाइल के माध्यम से सक्षम किया गया है। मुख्य एजेंट उप-एजेंट बना सकता है, प्रत्येक का अपना वार्तालाप इतिहास, सिस्टम प्रॉम्प्ट और उपकरण श्वेतसूची होती है। वार्ताकार इनबाउंड संदेश रूटिंग के लिए एजेंटों को सौंपे गए संपर्क रिकॉर्ड हैं।