
हल्का CLI टूल जो AI कोडिंग एजेंटों को पृथक Bubblewrap सैंडबॉक्स में चलाता है, जिसमें प्रॉम्प्ट इंजेक्शन और सप्लाई चेन हमलों से बचाव के लिए सख्त फाइलसिस्टम, नेटवर्क और क्रेडेंशियल आइसोलेशन होता है।
FLAR का मतलब Fast Light Agent Restrictor है। यह gars नामक चट्टानों पर चलता है।
यह Go में लिखा गया एक सरल, हल्का CLI टूल है जो कोडिंग एजेंट CLIs (जैसे Claude Code, Antigravity, Codex, Copilot और Reasonix) को पृथक Bubblewrap (bwrap) सैंडबॉक्स के अंदर सुरक्षित रूप से चलाने के लिए है।

इसका उद्देश्य तुरंत और जटिल कॉन्फ़िगरेशन के बिना, एक AI एजेंट को bubblewrap करना है ताकि उसके पास केवल उस प्रोजेक्ट तक पहुंच हो जिस पर आप काम कर रहे हैं। यह प्रॉम्प्ट इंजेक्शन के साथ-साथ उन लाइब्रेरीज़ में आपूर्ति श्रृंखला की समस्याओं से भी बचाता है जिन्हें एजेंट पर्याप्त जांच (या केवल बदकिस्मती) के बिना आपके प्रोजेक्ट में खींच सकता है। एकमात्र सुलभ संवेदनशील जानकारी एजेंट के अपने प्रमाणीकरण विवरण और प्रोजेक्ट के लिए चैट इतिहास है।
अधिकांश एजेंटों में एक "सैंडबॉक्स" सुविधा होती है, लेकिन यह काफी छिद्रपूर्ण होती है और एजेंट स्वयं सुलभता के दायरे का विस्तार कर सकता है। और, निश्चित रूप से, आपूर्ति श्रृंखला की कमज़ोरियाँ एजेंट सैंडबॉक्स के अधीन नहीं होती हैं। flar एजेंट के प्रति पूरी तरह से अभेद्य है, और आपूर्ति श्रृंखला हमलों का विस्फोट त्रिज्या कड़ाई से सीमित है।
Bubblewrap बेहद अच्छी तरह से परीक्षण किया गया है, और सक्रिय रूप से बनाए रखा जाता है। इसका उपयोग Flatpack और कई अन्य प्रोजेक्ट्स द्वारा हल्के कंटेनरों के लिए किया जाता है। flar बहुत कम परीक्षण किया गया है, और मेरे द्वारा कुछ दिनों के लिए उपयोग किया गया है।
tmpfs) का उपयोग करके एक अनप्रिविलेज्ड यूज़र नेमस्पेस में चलाता है। सिस्टम पथ (/usr, /bin, /lib, /lib64, आदि) होस्ट से केवल-पढ़ने के लिए माउंट किए जाते हैं, यह सुनिश्चित करते हुए कि कंटेनर इमेज प्रबंधन के बिना होस्ट पैकेज तुरंत उपलब्ध हों।localhost पर मैप करके सैंडबॉक्स में स्थानीय सेवाओं को चुनिंदा रूप से उजागर करें।agy के लिए --dangerously-skip-permissions या Codex के लिए --dangerously-bypass-approvals-and-sandbox) इंजेक्ट करता है ताकि एजेंट रनटाइम अनुमोदन रुकावटों के बिना चलें। से अक्षम किया जा सकता है।सुनिश्चित करें कि आपके होस्ट सिस्टम पर bwrap (Bubblewrap) स्थापित है:
# Fedora/RHEL पर
sudo dnf install bubblewrap
# Debian/Ubuntu पर
sudo apt install bubblewrap
स्रोत से flar बनाने के लिए:
go build -o `flar` .
इंस्टॉल करने के लिए:
mv `flar` ~/.local/bin/
अपने प्रोजेक्ट फ़ोल्डर में flar चलाएँ या पथ निर्दिष्ट करें:
flar [flags] [path/to/project] [extra agent args/prompts...]
-m: चलाने के लिए एजेंट निर्दिष्ट करें (claude, codex, agy, copilot, reasonix). डिफ़ॉल्ट उपलब्ध होस्ट कॉन्फ़िगरेशन या पर्यावरण चरों की जाँच करता है।-ask: अनुमतियों/अनुमोदनों को न छोड़ें (एजेंट को अनुमति माँगने के लिए बाध्य करना)।-network: नेटवर्क मोड: isolated (डिफ़ॉल्ट) या host।-allow-port: पृथक नेटवर्क सैंडबॉक्स के माध्यम से एक विशिष्ट स्थानीय TCP पोर्ट (जैसे 8080, 11434) की अनुमति दें। कई बार निर्दिष्ट किया जा सकता है।-v: वर्बोज़ लॉगिंग सक्षम करें।.flar.json)आप प्रति-प्रोजेक्ट विकल्पों को <project>/.flar.json या वैश्विक रूप से ~/.config/flar/config.json में कॉन्फ़िगर कर सकते हैं:
{
"agent": "claude",
"ask": false,
"network": "isolated",
"allow_ports": [5432, 11434]
}
क्योंकि केवल आपके कॉन्फ़िग की एक अस्थायी प्रतिलिपि माउंट की जाती है, एजेंट आपके मौजूदा होस्ट सत्र का उपयोग करके मूल को छुए बिना प्रमाणित चलते हैं। अधिकांश एजेंट अपने सत्र को फ़ाइलों में रखते हैं जिन्हें flar सीधे कॉपी करता है:
~/.claude/ (.credentials.json सहित) और ~/.claude.json, शीर्ष-स्तरीय फ़ाइल जो ऑनबोर्डिंग स्थिति और खाता पहचान रखती है। दोनों आवश्यक हैं; केवल क्रेडेंशियल्स के साथ, Claude सैंडबॉक्स को एक नई स्थापना के रूप में मानता है और लॉगिन के लिए संकेत देता है।~/.codex/, ~/.copilot/, और GitHub CLI कॉन्फ़िग।agy) कीरिंगagy अपवाद है: यह अपने टोकन को फ़ाइल में नहीं संग्रहीत करता है। यह इसे OS कीरिंग में रखता है, D-Bus सत्र बस पर freedesktop Secret Service API के माध्यम से पढ़ा जाता है। सैंडबॉक्स में कोई सत्र बस नहीं है, इसलिए एक भोली सेटअप authentication failed or timed out के साथ विफल हो जाती है।
flar इसे विशेष रूप से संभालता है:
secret-tool का उपयोग करके केवल agy टोकन (कीरिंग आइटम service=gemini, username=antigravity) निकालता है, और इसे अस्थायी कॉन्फ़िग डायरेक्टरी में एक 0600 फ़ाइल में लिखता है।flar --internal-secretsvc) चलाता है, जो DBUS_SESSION_BUS_ADDRESS द्वारा इंगित किया जाता है। यह केवल उस एक टोकन को परोसता है और कुछ नहीं।एजेंट केवल अपने स्वयं के टोकन तक पहुँच सकता है — आपके बाकी कीरिंग (ब्राउज़र पासवर्ड, अन्य ऐप्स के रहस्य, आदि) तक नहीं। कार्यान्वयन सीधे D-Bus वायर प्रोटोकॉल बोलता है, इसलिए इसे सैंडबॉक्स के अंदर कोई gnome-keyring या dbus-daemon की आवश्यकता नहीं है।
आवश्यकताएँ और सावधानियाँ:
secret-tool (libsecret) स्थापित होना चाहिए। यदि यह अनुपस्थित है या टोकन नहीं मिलता है, तो flar ब्रिज को छोड़ देता है और agy अपने सामान्य लॉगिन प्रॉम्प्ट पर वापस आ जाता है।क्योंकि सैंडबॉक्स आपके कॉन्फ़िग की एक अस्थायी प्रतिलिपि माउंट करता है, एजेंट द्वारा वहाँ लिखी गई कोई भी चीज़ सामान्य रूप से बाहर निकलने पर गायब हो जाएगी — जिसमें उसने अभी-अभी की गई बातचीत भी शामिल है। flar प्रत्येक एजेंट के ट्रांसक्रिप्ट स्टोरेज को होस्ट पर वापस बाइंड करता है ताकि सत्र बने रहें और बाद में फिर से शुरू किए जा सकें, जबकि अन्य प्रोजेक्ट्स के इतिहास को सैंडबॉक्स से बाहर रखा जाता है।
Claude: ट्रांसक्रिप्ट एक प्रति-प्रोजेक्ट डायरेक्टरी (~/.claude/projects/<project-slug>/) में रहते हैं। flar केवल वर्तमान प्रोजेक्ट की डायरेक्टरी को कॉपी किए गए कॉन्फ़िग पर होस्ट से बाइंड करता है, ताकि claude --resume इस प्रोजेक्ट के सत्रों को देखे और कुछ नहीं। सावधान रहें कि इसका मतलब है कि इतिहास में संग्रहीत एक प्रॉम्प्ट इंजेक्शन अभी भी एक जोखिम हो सकता है, यदि आप एक ऐसे सत्र को फिर से शुरू करते हैं जिसमें एक कार्यशील प्रॉम्प्ट इंजेक्शन है, तो विस्फोट त्रिज्या असीम रूप से बड़ी हो जाती है यदि आप claude को flar के बाहर चलाते हैं। मुझे लगता है कि सुविधा जोखिम से अधिक है, किसी भी प्रोजेक्ट के लिए जिसमें इस प्रकार का जोखिम है, बस इसे हमेशा flar में चलाएँ।
Codex CLI: Codex ट्रांसक्रिप्ट को ~/.codex/sessions/ में तिथि-आधारित निर्देशिकाओं के अंतर्गत संग्रहीत करता है और उन्हें वैश्विक state_5.sqlite में अनुक्रमित करता है; दोनों प्रत्येक थ्रेड के cwd को रिकॉर्ड करते हैं, लेकिन डिस्क पर निर्देशिकाएँ प्रोजेक्ट्स को मिलाती हैं। flar प्रत्येक कार्यक्षेत्र को $XDG_STATE_HOME/flar/codex/<project-slug>/ के अंतर्गत एक छाया Codex होम देता है, उस चर के अनसेट होने पर पर वापस आ जाता है। पहले उपयोग पर यह उस होम को केवल मिलान करने वाली ट्रांसक्रिप्ट फ़ाइलों, SQLite पंक्तियों और प्रॉम्प्ट-इतिहास प्रविष्टियों के साथ सीड करता है। फिर छाया होम को के रूप में माउंट किया जाता है, ताकि नए सत्र किसी अन्य प्रोजेक्ट को में उजागर किए बिना बने रहें।
~/.copilot/.flar/<project-slug>/
पहले उपयोग पर, flar उस छाया होम को केवल उन सत्रों के साथ सीड करता है जिनका संग्रहीत cwd वर्तमान कार्यक्षेत्र से मेल खाता है, प्रासंगिक SQLite पंक्तियों और मिलान करने वाली session-state/ निर्देशिकाओं दोनों की प्रतिलिपि बनाता है। उसके बाद, पूरे छाया होम को सैंडबॉक्स के अंदर ~/.copilot के रूप में बाइंड-माउंट किया जाता है, ताकि copilot --continue केवल इस कार्यक्षेत्र के सत्रों को फिर से शुरू कर सके, और नए सत्र वहाँ सुरक्षित रूप से बने रहें।
agy): Copilot की तरह, सत्र flar द्वारा किसी प्रोजेक्ट में पहले रन पर "फोर्क" किए जाते हैं, और अब agy के साथ flar के बाहर चलने वाले साझा नहीं होते हैं।agy डिस्क पर प्रोजेक्ट के अनुसार बातचीत को अलग नहीं करता है। हर प्रोजेक्ट के लिए हर बातचीत एक फ्लैट स्टोर में ~/.gemini/antigravity-cli/ (conversations/, brain/, implicit/) के अंतर्गत रहती है, केवल एक UUID द्वारा कुंजीबद्ध, जिसमें स्वामी कार्यक्षेत्र अपारदर्शी बातचीत ब्लॉब के अंदर दर्ज होता है। एक पुनरावृत्ति सूचकांक (cache/last_conversations.json) प्रत्येक कार्यक्षेत्र को उसकी सबसे हाल की बातचीत से मैप करता है, जो कि agy --continue अनुसरण करता है।
उस स्टोर को सैंडबॉक्स में ज्यों का त्यों बाइंड करने से एक सैंडबॉक्स किया गया agy — --continue, इंटरैक्टिव पिकर, या एक स्पष्ट --conversation <ID> के माध्यम से — एक अलग प्रोजेक्ट से संबंधित बातचीत को फिर से शुरू कर सकता है, जो उसमें चिपकाई गई कोई भी चीज़ लीक कर सकता है। इसे रोकने के लिए, flar प्रत्येक कार्यक्षेत्र को एक स्कोप्ड स्टोर देता है:
~/.gemini/antigravity-cli/.flar/<project-slug>/
यह निर्देशिका सैंडबॉक्स के अंदर conversations/, brain/, implicit/, history.jsonl, और cache/last_conversations.json पर बाइंड-माउंट की जाती है। प्रोजेक्ट A पर खोला गया एक सैंडबॉक्स इसलिए केवल प्रोजेक्ट A की बातचीत देख सकता है। नए सत्र स्कोप्ड स्टोर में जमा होते हैं और अगले रन पर फिर से शुरू करने योग्य होते हैं।
पहली बार जब flar किसी प्रोजेक्ट में agy चलाता है, तो यह उस प्रोजेक्ट के स्कोप्ड स्टोर को आपके मौजूदा होस्ट इतिहास से सीड करता है — लेकिन केवल उन बातचीतों के साथ जिन्हें agy स्वयं इस कार्यक्षेत्र के लिए जिम्मेदार ठहराता है (सादे-पाठ last_conversations.json और history.jsonl से निर्धारित, कभी भी बातचीत ब्लॉब को पार्स करके नहीं)। उस एकमुश्त सीड के बाद स्कोप्ड स्टोर स्वतंत्र है: नए सत्र केवल स्कोप्ड स्टोर में रहते हैं, और बाद में होस्ट-साइड परिवर्तन खींचे नहीं जाते।
जागरूक रहने योग्य परिणाम:
agy की तरह, स्कोप्ड छाया होम प्रारंभिक सीड के बाद एक अलग प्रति-प्रोजेक्ट दुनिया बन जाता है। आप flar के बाहर Copilot के साथ शुरू किए गए सत्र बाद में flar में खींचे नहीं जाते, और आप flar के अंदर शुरू किए गए सत्र होस्ट के वैश्विक Copilot स्टोर के बजाय स्कोप्ड छाया होम में वापस सहेजे जाते हैं।flar के बाहर agy के साथ शुरू किए गए सत्र (प्रारंभिक सीड को छोड़कर) flar के अंदर दिखाई नहीं देते, और इसके विपरीत। यह जानबूझकर किया गया है — flar का agy इतिहास एक अलग, प्रति-प्रोजेक्ट दुनिया है।agy के स्वयं के सूचकांकों ने कभी वर्तमान कार्यक्षेत्र के लिए जिम्मेदार नहीं ठहराया, डिज़ाइन द्वारा सीड नहीं की जाती है। सुरक्षित डिफ़ॉल्ट इसे रोकना है बजाय किसी अन्य प्रोजेक्ट के डेटा को उजागर करने के जोखिम के।.flar/ निर्देशिकाओं को संगतता के लिए कॉन्फ़िग प्रतियों से बाहर रखा गया है, और flar-स्वामित्व वाली स्थिति $XDG_STATE_HOME/flar/ (या ~/.local/state/flar/) के अंतर्गत रहती है, एजेंट-प्रबंधित कॉन्फ़िगरेशन निर्देशिकाओं के बाहर।पृथक नेटवर्क मोड में, एजेंट के वातावरण की होस्ट नेटवर्क इंटरफेस तक कोई सीधी पहुंच नहीं होती है।
HTTP_PROXY और HTTPS_PROXY पर्यावरण चर का उपयोग करके HTTP/HTTPS अनुरोधों (जैसे Anthropic या Gemini जैसे क्लाउड LLM से कनेक्ट करना) के लिए स्वचालित रूप से काम करता है।localhost या लूपबैक IP पर अनुरोध अवरुद्ध हैं।127.0.0.1:11434 पर Ollama) तक पहुँचने देने के लिए, -allow-port 11434 या allow_ports कॉन्फ़िगरेशन का उपयोग करके पोर्ट निर्दिष्ट करें। एक सुरक्षित लूपबैक फ़ॉरवर्डर सैंडबॉक्स के अंदर 127.0.0.1:11434 को बाइंड करेगा और होस्ट पर ट्रैफ़िक को प्रॉक्सी करेगा।-ask~/.claude/, ~/.codex/, ~/.gemini/, या GitHub CLI कॉन्फ़िगरेशन) को सैंडबॉक्स होम डायरेक्टरी में माउंट की गई एक अस्थायी डायरेक्टरी में स्वचालित रूप से कॉपी करता है, जिससे होस्ट कॉन्फ़िग फ़ाइलें अछूती रहती हैं।--resume/--continue रनों में काम करे — वर्तमान प्रोजेक्ट तक सीमित हो ताकि किसी अन्य प्रोजेक्ट का इतिहास सैंडबॉक्स में प्रवेश न करे। अन्यथा, किसी दिए गए एजेंट और प्रोजेक्ट के लिए flar के पहले रन पर इतिहास फोर्क किया जाता है। सत्र स्थिरता और फिर से शुरू देखें।agy): Antigravity CLI अपना OAuth टोकन फ़ाइल के बजाय OS कीरिंग में संग्रहीत करता है। flar केवल उस एक रहस्य को निकालता है और इसे एक निजी, इन-प्रोसेस सीक्रेट सर्विस के माध्यम से सैंडबॉक्स के अंदर परोसता है — ताकि एजेंट आपके बाकी कीरिंग को उजागर किए बिना प्रमाणित हो। क्रेडेंशियल्स देखें।~/.local/state/flar/codex/<project-slug>/~/.codexcodex resume --allCopilot CLI: Copilot फिर से शुरू करने योग्य सत्रों को ~/.copilot/ के अंतर्गत दो वैश्विक स्थानों में संग्रहीत करता है: एक SQLite इंडेक्स (session-store.db) और प्रति सत्र एक निर्देशिका session-state/<session-id>/ के अंतर्गत। SQLite पंक्तियाँ स्वामी cwd रखती हैं, और प्रत्येक स्थिति निर्देशिका उसी सत्र ID से कुंजीबद्ध होती है। होस्ट स्टोर को ज्यों का त्यों बाइंड करने से सैंडबॉक्स किए गए Copilot को हर प्रोजेक्ट के सत्र उजागर हो जाएंगे, इसलिए flar प्रत्येक कार्यक्षेत्र को अपना स्वयं का छाया Copilot होम देता है: