
أداة CLI خفيفة الوزن تشغل وكلاء ترميز بالذكاء الاصطناعي داخل بيئات رملية معزولة باستخدام Bubblewrap مع عزل صارم لنظام الملفات والشبكة وبيانات الاعتماد للحماية من حقن التعليمات وهجمات سلسلة التوريد.
FLAR هو اختصار لـ Fast Light Agent Restrictor. يعمل على صخور تُسمى gars.
إنها أداة CLI بسيطة وخفيفة الوزن مكتوبة بلغة Go لتشغيل أدوات CLI للعوامل البرمجية (مثل Claude Code و Antigravity و Codex و Copilot و Reasonix) بأمان داخل مربعات رملية Bubblewrap (bwrap) معزولة.

الهدف هو تطويق العامل الذكي (AI agent) بشكل فوري وبدون تكوين معقد بحيث لا يمكنه الوصول إلا إلى المشروع الذي تعمل عليه. هذا يحمي من حقن الأوامر (prompt injections) وكذلك من مشاكل سلسلة التوريد في المكتبات التي قد يسحبها العامل إلى مشروعك دون فحص كافٍ (أو ببساطة سوء حظ). المعلومات الحساسة الوحيدة التي يمكن الوصول إليها هي تفاصيل المصادقة الخاصة بالعامل وسجل المحادثة الخاص بالمشروع.
معظم العوامل لديها ميزة "صندوق رملي" (sandbox)، لكنها مسامية إلى حد ما ويمكن للعامل نفسه توسيع نطاق ما يمكن الوصول إليه. وبطبيعة الحال، فإن نقاط الضعف في سلسلة التوريد لا تخضع لصندوق العامل الرملي. flar محصنة تمامًا ضد العامل، ونطاق الانفجار لهجمات سلسلة التوريد مقيد بإحكام.
Bubblewrap تم اختباره جيدًا للغاية، ويتم صيانته بنشاط. يتم استخدامه بواسطة Flatpack والعديد من المشاريع الأخرى للحاويات خفيفة الوزن. flar لم يتم اختباره جيدًا، واستخدمته أنا لبضعة أيام فقط.
tmpfs). يتم تحميل مسارات النظام (/usr و /bin و /lib و /lib64 إلخ) للقراءة فقط من المضيف، مما يضمن توفر حزم المضيف فورًا دون إدارة صور الحاويات.localhost للمضيف.--dangerously-skip-permissions لـ Claude/agy أو --dangerously-bypass-approvals-and-sandbox لـ Codex) لتشغيل العوامل دون انقطاعات الموافقة في وقت التشغيل. يمكن تعطيله باستخدام -ask.~/.claude/ و ~/.codex/ و ~/.gemini/ أو إعدادات GitHub CLI) إلى دليل مؤقت يتم تحميله داخل دليل المنزل في الصندوق الرملي، تاركًا ملفات تكوين المضيف دون تغيير.--resume/--continue عبر عمليات التشغيل — ويكون محددًا بنطاق المشروع الحالي بحيث لا يدخل أي سجل مشروع آخر إلى الصندوق الرملي. بخلاف ذلك، يتم تفرع السجل في أول تشغيل لـ flar لعامل ومشروع معينين. انظر استمرار الجلسة واستئنافها.agy): تقوم أداة Antigravity CLI بتخزين رمز OAuth الخاص بها في حلقة مفاتيح نظام التشغيل بدلاً من ملف. يستخرج flar هذا السر الوحيد فقط ويخدمه داخل الصندوق الرملي من خلال خدمة سرية خاصة داخل العملية — بحيث يتم مصادقة العامل دون كشف باقي حلقة مفاتيحك. انظر بيانات الاعتماد.تأكد من تثبيت 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 هو الاستثناء: فهو لا يخزن رمزه في ملف. يحتفظ به في حلقة مفاتيح نظام التشغيل، ويقرأ عبر واجهة Freedesktop Secret Service عبر ناقل جلسة D-Bus. الصندوق الرملي ليس لديه ناقل جلسة، لذلك يفشل الإعداد البسيط مع authentication failed or timed out.
يتعامل flar مع هذا بشكل خاص:
agy (عنصر حلقة المفاتيح service=gemini, username=antigravity) باستخدام secret-tool، ويكتبه في ملف بصلاحيات 0600 داخل دليل التكوين المؤقت.flar --internal-secretsvc) على مأخذ Unix خاص، يتم توجيهه عبر 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 لكل مساحة عمل منزل Codex ظل تحت $XDG_STATE_HOME/flar/codex/<project-slug>/، ويعود إلى ~/.local/state/flar/codex/<project-slug>/ عندما يكون ذلك المتغير غير معين. في أول استخدام، يزرع ذلك المنزل فقط بملفات النص المطابقة وصفوف SQLite وإدخالات تاريخ الأوامر. ثم يتم تحميل المنزل الظل كـ ~/.codex، بحيث تستمر الجلسات الجديدة دون كشف مشروع آخر لـ codex resume --all.