# Lagune > Security-Driven Hardening لأي قاعدة كود Lagune سير عمل Security-Driven Hardening (SDH) مفتوح المصدر، للدفاع فقط. يساعد وكيل الذكاء الاصطناعي على تحصين أي قاعدة كود، بأي لغة برمجة، وفي كل مرحلة: يضع charter قواعد الأمان قبل أن تبدأ البناء، ويحصّن الأمر الشامل /lagune العمل أثناء كتابته، ويرصد مسار الفريق الأزرق ذو المراحل الخمس ما يفعله نظامك فعلًا ويقود الإصلاحات المهمة في هذا السياق. تُثبَّت أوامره في وكيلك عبر skills CLI، ولا يحتاج إلى مفتاح API. --- # التثبيت: التحصين الأمني لأي وكيل ذكاء اصطناعي > ثبّت Lagune في أي مشروع، كإضافة حين يدعمها وكيلك أو عبر skills CLI في غيره، ثم اختر تخصصات الأمان المناسبة له. Canonical: https://lagune.ai/ar-AE/docs اللغة: ar-AE الأصل: https://lagune.ai/docs آخر تحديث: 2026-11-09 يساعد **Lagune** وكيل الذكاء الاصطناعي على جعل المشروع أكثر أمانًا. توجّهه إلى الكود، فيكتشف الوكيل ما يفعله نظامك فعلًا، ثم يرشدك خلال العمل الأمني المهم له. و **Lagune** أول مشروع في منهجية [Security-Driven Hardening (SDH)](https://lagune.ai/ar-AE/docs/references/paper). **ادعم المشروع المفتوح المصدر** هل أعجبك **Lagune**؟ [امنحنا ⭐ على **GitHub**](https://github.com/wellwelwel/lagune) ## اختر وكيلك - [Claude Code](https://lagune.ai/ar-AE/docs/install/claude-code): أداة البرمجة بالوكلاء من Anthropic - [Codex](https://lagune.ai/ar-AE/docs/install/codex): وكيل البرمجة من OpenAI - [Cursor](https://lagune.ai/ar-AE/docs/install/cursor): محرر الكود بالذكاء الاصطناعي - [GitHub Copilot](https://lagune.ai/ar-AE/docs/install/github-copilot-cli): شريك البرمجة بالذكاء الاصطناعي من GitHub - [Gemini CLI](https://lagune.ai/ar-AE/docs/install/gemini-cli): وكيل الطرفية المفتوح المصدر من Google - [Antigravity](https://lagune.ai/ar-AE/docs/install/antigravity-cli): منصة Google للتطوير بالوكلاء - [OpenCode](https://lagune.ai/ar-AE/docs/install/opencode): وكيل البرمجة المفتوح المصدر - [Devin for Terminal](https://lagune.ai/ar-AE/docs/install/devin-cli): وكيل الطرفية من Cognition - [Factory Droid](https://lagune.ai/ar-AE/docs/install/factory-droid): وكيل تطوير البرمجيات من Factory - [Grok Build](https://lagune.ai/ar-AE/docs/install/grok-build): وكيل البرمجة من xAI - [Qwen Code](https://lagune.ai/ar-AE/docs/install/qwen-code): وكيل الطرفية للبرمجة من Qwen - [Kimi Code](https://lagune.ai/ar-AE/docs/install/kimi-code): وكيل البرمجة من Moonshot AI - [Muse Code](https://lagune.ai/ar-AE/docs/install/muse-code): وكيل البرمجة من Meta - [Pi](https://lagune.ai/ar-AE/docs/install/pi): وكيل برمجة بسيط للطرفية - [Hermes Agent](https://lagune.ai/ar-AE/docs/install/hermes-agent): الوكيل المفتوح المصدر من Nous Research - [Universal](https://lagune.ai/ar-AE/docs/install/universal): Cline, Kiro CLI, Windsurf, Zed و 66 وكيلًا آخر **معلومة** - يعمل **Lagune** على **Node.js** في الخلفية، لكنك تستخدم أي لغة برمجة تريدها. - للعمل دون اتصال بالإنترنت تمامًا، ثبّت **Lagune** في مشروعك عبر `npm i -D lagune@0.18.1`. ## الفئات تأتي المعرفة الأمنية في **Lagune** على شكل [**تخصصات**](https://lagune.ai/ar-AE/docs/catalog)، مجمّعة في [**فئات**](https://lagune.ai/ar-AE/docs/categories). - **OWASP** (`owasp`): حصّن ضد مخاطر أمان التطبيقات التي يتتبعها OWASP: الحقن، وخلل التحكم في الوصول، والمصادقة، وإخفاقات التشفير - **البنية التحتية** (`infra`): حصّن إعدادات الحاويات وأحمال العمل والحوسبة بلا خادم: Dockerfile و Compose وأمان Pod وصلاحيات IAM ومشغّلات FaaS - **AI / LLM** (`ai`): حصّن تكاملات الذكاء الاصطناعي و LLM ضد prompt injection وضد الربط غير الآمن للأدوات والوكلاء والاسترجاع و MCP - **Lovable** (`lovable`): حصّن تطبيقات Supabase المولّدة بالذكاء الاصطناعي (Lovable وما يشبهها): ثغرات RLS، ومفاتيح service_role المسرّبة، والإعدادات الافتراضية غير الآمنة - **JavaScript** (`javascript`): حصّن JavaScript وبيئات تشغيلها ضد تنفيذ الكود عن بُعد عبر eval و child_process، و path traversal، و prototype pollution - **Python** (`python`): حصّن Python ضد تنفيذ الكود عن بُعد عبر إلغاء تسلسل pickle و YAML، والتنقل عبر سلاسل str.format، و class pollution - **Rust** (`rust`): حصّن Rust ضد واجهات unsafe غير السليمة، وسوء استخدام transmute، وتجاوز سعة الأعداد الصحيحة، والسلوك غير المعرّف عند حدود FFI - **Java** (`java`): حصّن Java ضد سلاسل gadget في إلغاء تسلسل ObjectInputStream التي تنتهي بتنفيذ الكود عن بُعد - **Ruby** (`ruby`): حصّن Ruby ضد سلاسل gadget في إلغاء تسلسل Marshal.load و YAML التي تصل إلى تنفيذ الكود عن بُعد - **PHP** (`php`): حصّن PHP ضد تجاوز المصادقة عبر type juggling، وسلاسل gadget في حقن الكائنات، والإعدادات الافتراضية غير الآمنة - **Go** (`go`): حصّن Go ضد أخطاء الواجهات ذات قيمة nil المحددة النوع، و data races بين goroutines، والتزامن غير الآمن في المسارات الأمنية - **C / C++** (`c-cpp`): حصّن C و C++ ضد أخطاء سلاسل التنسيق وتجاوز سعة المخزن المؤقت والكتابة خارج الحدود التي تتيح تنفيذ الكود - **.NET** (`dotnet`): حصّن .NET و C# ضد تنفيذ الكود عن بُعد عبر إلغاء تسلسل BinaryFormatter وضد تجاوزات الترميز التي تصل إلى XSS شغّل `npx lagune write add --categories` مع مفاتيح الفئات التي تختارها. **نصيحة** يبدأ المشروع بالفئة `owasp`، ثم يضيف الأمر [`/lagune-charter`](https://lagune.ai/ar-AE/docs/commands/charter) الفئات التي تدعمها قراءته للمشروع. ## المتطلبات ستحتاج إلى تثبيت [**Node.js (LTS)**](https://nodejs.org/en/download/package-manager) على نظامك. ## استخدم شارة ✨ هل تستخدم **Lagune**؟ أضف شارة إلى ملف **README**: **لونان** ![Secured By Lagune](https://img.shields.io/badge/Lagune-2f7bff?logo=springsecurity&logoColor=white&label=Secured%20By&labelColor=303952) ```md [![Secured By Lagune](https://img.shields.io/badge/Lagune-2f7bff?logo=springsecurity&logoColor=white&label=Secured%20By&labelColor=303952)](https://lagune.ai) ``` ![Security Powered By Lagune](https://img.shields.io/badge/Lagune-2f7bff?logo=springsecurity&logoColor=white&label=Security%20Powered%20By&labelColor=303952) ```md [![Security Powered By Lagune](https://img.shields.io/badge/Lagune-2f7bff?logo=springsecurity&logoColor=white&label=Security%20Powered%20By&labelColor=303952)](https://lagune.ai) ``` ![Security-Driven Hardening with Lagune](https://img.shields.io/badge/Lagune-2f7bff?logo=springsecurity&logoColor=white&label=Security-Driven%20Hardening&labelColor=303952) ```md [![Security-Driven Hardening with Lagune](https://img.shields.io/badge/Lagune-2f7bff?logo=springsecurity&logoColor=white&label=Security-Driven%20Hardening&labelColor=303952)](https://lagune.ai) ``` **لون واحد** ![Secured By Lagune](https://img.shields.io/badge/Secured%20By%20Lagune-2f7bff?logo=springsecurity&logoColor=white) ```md [![Secured By Lagune](https://img.shields.io/badge/Secured%20By%20Lagune-2f7bff?logo=springsecurity&logoColor=white)](https://lagune.ai) ``` ![Security Powered By Lagune](https://img.shields.io/badge/Security%20Powered%20By%20Lagune-2f7bff?logo=springsecurity&logoColor=white) ```md [![Security Powered By Lagune](https://img.shields.io/badge/Security%20Powered%20By%20Lagune-2f7bff?logo=springsecurity&logoColor=white)](https://lagune.ai) ``` ![Security-Driven Hardening](https://img.shields.io/badge/Security--Driven%20Hardening-2f7bff?logo=springsecurity&logoColor=white) ```md [![Security-Driven Hardening](https://img.shields.io/badge/Security--Driven%20Hardening-2f7bff?logo=springsecurity&logoColor=white)](https://lagune.ai) ``` ## التالي اطّلع على ما تفعله كل [**مهارة**](https://lagune.ai/ar-AE/docs/get-started/commands) من مهارات **Lagune**. ## الأسئلة الشائعة ### ما هو Lagune؟ Lagune سير عمل أمني مفتوح المصدر، للدفاع فقط، يساعد وكيل الذكاء الاصطناعي على تحصين أي قاعدة كود. توجّهه إلى الكود، فيرصد ما يفعله نظامك فعلًا، ثم يوجّه إصلاحات الأمان المهمة في هذا السياق. ### كيف أثبّت Lagune؟ اختر وكيلك: يثبّت Claude Code و GitHub Copilot CLI و Muse Code و Antigravity CLI و Cursor و Kimi Code و OpenCode و Codex CLI و Factory Droid و Grok Build و Devin CLI و Hermes Agent أداة Lagune كإضافة، ويثبّته Gemini CLI و Qwen Code كامتداد، و Pi كحزمة، وأي وكيل آخر عبر npx skills add wellwelwel/lagune. يعمل مع المشاريع الجديدة والقائمة. ### هل يحتاج Lagune إلى مفتاح API؟ لا. يعمل عبر وكيل الذكاء الاصطناعي الخاص بك، لذلك لا يحتاج إلى أي مفتاح API. ### ما هي المتطلبات؟ تحتاج إلى تثبيت Node.js (LTS) على نظامك. ### ما لغات البرمجة التي يدعمها Lagune؟ أي لغة. يعمل Lagune على Node.js في الخلفية، لكنه يدقّق المشاريع المكتوبة بأي لغة برمجة ويحصّنها. ### ماذا يضيف Lagune إلى مشروعي؟ مجلد ‎.lagune/‎ يحفظ الحالة الأمنية لمشروعك، ينشئه أول أمر يكتب فيه. ويثبّت skills CLI أيضًا أوامر slash داخل المشروع، حيث يقرؤها وكيلك، بينما تُبقيها الإضافة داخل الوكيل. ### كيف أحدّث Lagune؟ بالطريقة نفسها التي ثبّته بها. تعرض صفحة التثبيت الخاصة بكل وكيل طريقة تحديث Lagune فيه، ويحدّثه skills CLI عبر npx skills update. ويبقى ميثاق الأمان ومُخرَجات المراحل وتخصصاتك الخاصة كما هي. ### ما التخصصات التي يستخدمها المشروع؟ التخصصات المدمجة في فئاته، إضافة إلى تخصصاته الخاصة. يسجّل ميثاق الأمان الفئات التي تدعمها قراءته للمشروع، ويغيّرها الأمر npx lagune write add --categories. ### هل يجب أن أنتهي من البناء قبل تأمين مشروعي؟ لا. يحصّن الأمر ‎/lagune العمل أثناء كتابته: يأخذ أي موجّه، ويبني ما طلبته، ويحصّنه بإعدادات افتراضية آمنة، مسترشدًا بميثاق الأمان. أما مسار الفريق الأزرق ذو المراحل الخمس فيدقّق ما هو موجود بالفعل. ### هل يمكن لـ Lagune تدقيق مشروع قائم؟ نعم. يدقّق مسار الفريق الأزرق ذو المراحل الخمس ما هو موجود بالفعل: تضع مرحلة charter قواعد الأمان الخاصة بك، وترصد مرحلة detect ما يفعله النظام وأين تكمن المخاطر، وتقيّم مرحلة plan كل ملاحظة وتقرنها بإصلاح، وتطبّق مرحلة harden الإصلاحات، وتُثبت مرحلة verify أنها تصمد ثم تغلقها. ### ما الفرق بين استخدام Lagune ومجرد مطالبة الوكيل برصد الثغرات والعيوب الأمنية؟ الوكيل الذي يقرأ الكود وحده يجد ما يبدو ثغرة ويتجاوز ما يبدو ضابطًا أمنيًا. قائمة العناوين المحظورة توحي بأن أحدًا تعامل مع الخطر بالفعل، فلا يتحقق أحد من أنها تُفلت معظمها، ويُشحن الكود. يقلب Lagune هذا الافتراض: الحماية الموجودة في الكود تُعدّ غير مُثبتة حتى تُفحص، وكل تخصص في الكتالوج يحصل على حكم صريح، وتسأل مرحلة verify هل زال الخطر، لا هل يوجد ضابط. وتبقى كل ملاحظة عنصرًا متتبَّعًا واحدًا عبر مرات التشغيل، فيمكن إثبات إغلاقها وإخراجها من السلسلة، بينما يمنحك الطلب العادي تقريرًا مختلفًا في كل مرة دون شيء تقارنه به. ### ما الفرق بين التطوير باستخدام Lagune ومجرد مطالبة الوكيل بكتابة كود آمن؟ طلب كود آمن يترك تعريف الأمان للوكيل، ويفترض أنك تعرف ما يجب أن تطلبه. وغالبًا ما يكون المتطلب موجودًا في طلبك دون أن يلاحظه أي منكما: طلب صفحة تعرض الدورات التي يملك المستخدم صلاحية الوصول إليها ينص على قاعدة تفويض، والفحص الذي لا يُكتب أبدًا لا يترك في الكود شيئًا يُلفت الانتباه. يحمّل الأمر ‎/lagune ميثاق الأمان والتخصصات المطابقة لما سيُبنى قبل كتابة السطر الأول، ثم يعيد قراءة النتيجة مقابل الدفاع الذي استخدمه. نادرًا ما يكلّف الشكل الآمن أكثر من غير الآمن، فما يحسم النتيجة هو معرفة أيهما تختار، وهذا ما يصل مسبقًا. ### هل يشغّل Lagune اختبار DAST (Dynamic Application Security Testing) أو يختبر تطبيقي أثناء تشغيله؟ لا. يقرأ Lagune الكود ولا يشغّل نظامك أبدًا ولا يرسل إليه طلبات مُصاغة عمدًا. تؤكد مرحلة verify أن الضابط موجود وصحيح في الكود المصدري، وهذا سؤال مختلف عن صموده أمام هجوم على نظام يعمل، لذلك فإن "cannot tell from the code" حكم مشروع وليس نجاحًا صامتًا. يجيب DAST عن سؤال وقت التشغيل ويجيب Lagune عن سؤال الكود المصدري، فلا يغني أحدهما عن الآخر. وحتى الأمر الاختياري prove يلتزم بهذا الحد: اختباراته تتحقق من السلوك الآمن، ولا تستخدم payload هجوميًا أبدًا. ### هل يغني Lagune عن Pentest (اختبار الاختراق)؟ لا، بالتأكيد لا! اختبار الاختراق مهمة مصرّح بها يمارس فيها محترف تقديره على نظامك الحي، فيربط الملاحظات ببعضها ويختبر منطق الأعمال الذي لا تصفه أي قاعدة خاصة بسطح بعينه. ويمكن أن تدخل ملاحظات اختبار الاختراق مسار الفريق الأزرق في Lagune كمصادر قلق تسلّمها لمرحلة detect، فيُخطَّط لما يبلّغ عنه المحترف ويُحصَّن ويُتحقق منه. ## سياسة الأمان اطّلع على [SECURITY.md](https://github.com/wellwelwel/lagune/blob/main/SECURITY.md). ## الترخيص يُتاح **Lagune** بموجب [Apache License 2.0](https://github.com/wellwelwel/lagune/blob/main/LICENSE). حقوق النشر © 2026 حتى الآن، [Weslley Araújo](https://github.com/wellwelwel) و [المساهمون](https://github.com/wellwelwel/lagune/graphs/contributors). --- # ثبّت Lagune على Antigravity CLI كإضافة > ثبّت Lagune على Antigravity CLI كإضافة، وحافظ على تحديثه، واسمح لمحركه مسبقًا. Canonical: https://lagune.ai/ar-AE/docs/install/antigravity-cli اللغة: ar-AE الأصل: https://lagune.ai/docs/install/antigravity-cli آخر تحديث: 2026-11-09 ثبّت الإضافة من الطرفية: ```bash agy plugin install https://github.com/wellwelwel/lagune/tree/plugin-antigravity ``` ## التحديث لتحديث **Lagune**، ثبّته مجددًا: ```bash agy plugin install https://github.com/wellwelwel/lagune/tree/plugin-antigravity ``` ## الأوامر اكتب الأوامر تحت اسم الإضافة، مثل `/lagune:lagune-charter` بدلًا من `/lagune-charter`. --- **الأذونات** يعمل المحرك عبر أداتين: `lagune_read` تقرأ مشروعك فقط، و `lagune_write` تكتب في `.lagune/` فقط. والأمر المُرسل كأول رسالة في الجلسة يعمل قبل تحميلهما، لذلك يستخدم **npx** بدلًا منهما. وللسماح بالأداتين و **npx** مسبقًا، أضف هذه القواعد إلى `~/.gemini/antigravity-cli/settings.json`: ```json { "permissions": { "allow": [ "mcp(lagune_lagune/lagune_read)", "mcp(lagune_lagune/lagune_write)", "command(regex:npx --yes lagune@[0-9.]+)" ] } } ``` ## الأسئلة الشائعة ### كيف أثبّت Lagune على Antigravity CLI؟ شغّل agy plugin install https://github.com/wellwelwel/lagune/tree/plugin-antigravity . ### كيف أحدّث Lagune على Antigravity CLI؟ شغّل agy plugin install https://github.com/wellwelwel/lagune/tree/plugin-antigravity مجددًا. ### كيف أشغّل أوامر Lagune على Antigravity CLI؟ اكتبها تحت اسم الإضافة، مثل ‎/lagune:lagune-charter. ### هل يمكن لـ Antigravity CLI تشغيل Lagune دون طلب إذن؟ نعم. اسمح بـ mcp(lagune_lagune/lagune_read) و mcp(lagune_lagune/lagune_write) و command(regex:npx --yes lagune@[0-9.]+) في إعدادات Antigravity CLI. وتغطي قاعدة npx الأمر المُرسل كأول رسالة في الجلسة. --- # ثبّت Lagune على Claude Code كإضافة > ثبّت Lagune على Claude Code كإضافة، في الطرفية أو الامتداد أو تطبيق سطح المكتب، وحافظ على تحديثه، واسمح لمحركه مسبقًا. Canonical: https://lagune.ai/ar-AE/docs/install/claude-code اللغة: ar-AE الأصل: https://lagune.ai/docs/install/claude-code آخر تحديث: 2026-11-09 **الطرفية** ثبّت الإضافة من الطرفية: ```bash claude plugin install lagune --marketplace wellwelwel/lagune ``` أو من جلسة **Claude Code**: ```text /plugin marketplace add wellwelwel/lagune /plugin install lagune@lagune ``` **الامتداد** - اكتب `/plugin` واختر **Manage plugins**. - أضف `wellwelwel/lagune` في تبويب **Marketplaces**. - ثبّت `lagune` في تبويب **Plugins**. **سطح المكتب** - ثبّت **Lagune** من الطرفية أو الامتداد، مع اختيار **Install for you** في الامتداد. - ابدأ جلسة جديدة في تطبيق سطح المكتب، الذي يحمّل الإضافات التي تثبّتها لنفسك. ## التحديث **الطرفية** لتحديث **Lagune**، شغّل: ```bash claude plugin marketplace update lagune claude plugin update lagune@lagune ``` لإبقائه محدّثًا، اختر **Enable auto-update** للسوق `lagune` تحت `/plugin`. **الامتداد** - اكتب `/plugin` واختر **Manage plugins**. - افتح تبويب **Marketplaces**. - اختر أيقونة التحديث على `lagune`. **سطح المكتب** - حدّث **Lagune** من الطرفية أو الامتداد. - ابدأ جلسة جديدة في تطبيق سطح المكتب. ## الأوامر اكتب الأوامر بأسمائها، مثل `/lagune-charter`، أو تحت اسم الإضافة، مثل `/lagune:lagune-charter`. --- **الأذونات** يعمل المحرك عبر أداتين: `lagune_read` تقرأ مشروعك فقط، و `lagune_write` تكتب في `.lagune/` فقط. وللسماح بهما مسبقًا، أضف هذه القواعد إلى `.claude/settings.json` لمشروع واحد، أو إلى `~/.claude/settings.json` لكل المشاريع: ```json { "permissions": { "allow": [ "mcp__plugin_lagune_lagune__lagune_read", "mcp__plugin_lagune_lagune__lagune_write" ] } } ``` حين يعمل المحرك عبر **npx**، كما مع **skills.sh**، اسمح بـ `Bash(npx --yes lagune@*)`. ومع تفعيل بيئة العزل، أضف أيضًا `registry.npmjs.org` إلى `sandbox.network.allowedDomains`. ## الأسئلة الشائعة ### كيف أثبّت Lagune على Claude Code؟ شغّل claude plugin install lagune --marketplace wellwelwel/lagune. وفي الجلسة أو الامتداد، أضف السوق wellwelwel/lagune من مدير الإضافات وثبّت lagune. ويحمّله تطبيق سطح المكتب بعد أن تثبّته لنفسك في الطرفية أو الامتداد. ### كيف أحدّث Lagune على Claude Code؟ شغّل claude plugin marketplace update lagune، ثم claude plugin update lagune@lagune، أو اختر Enable auto-update للسوق lagune تحت ‎/plugin. وفي الامتداد، افتح Manage plugins من ‎/plugin واختر أيقونة التحديث على السوق lagune. ويحمّل تطبيق سطح المكتب التحديث في جلسته التالية. ### كيف أشغّل أوامر Lagune على Claude Code؟ اكتبها بأسمائها، مثل ‎/lagune-charter، أو تحت اسم الإضافة، مثل ‎/lagune:lagune-charter. ### هل يمكن لـ Claude Code تشغيل Lagune دون طلب إذن؟ نعم. اسمح بـ mcp__plugin_lagune_lagune__lagune_read و mcp__plugin_lagune_lagune__lagune_write في إعدادات Claude Code، إضافة إلى Bash(npx --yes lagune@*) حين يعمل المحرك عبر npx. --- # ثبّت Lagune على Codex CLI كإضافة > ثبّت Lagune على Codex CLI كإضافة، وحافظ على تحديثه، وشغّل محركه داخل بيئة العزل. Canonical: https://lagune.ai/ar-AE/docs/install/codex اللغة: ar-AE الأصل: https://lagune.ai/docs/install/codex آخر تحديث: 2026-11-09 ثبّت الإضافة من الطرفية: ```bash codex plugin marketplace add wellwelwel/lagune codex plugin add lagune@lagune ``` ## التحديث لتحديث **Lagune**، شغّل: ```bash codex plugin marketplace upgrade lagune ``` ## الأوامر اكتب `$` ثم الأمر تحت اسم الإضافة، متبوعًا بمدخلك، مثل `$lagune:lagune-charter` بدلًا من `/lagune-charter`. وكتابة `$` تسرد الأوامر، واختيار أحدها يُدرج اسمه الكامل. --- **بيئة العزل** لا تملك بيئة العزل في **Codex** وصولًا إلى الشبكة. ثبّت المحرك في مشروعك من طرفيتك، مرة واحدة وبعد كل تحديث: ```bash npm i -D lagune@0.18.1 ``` ## الأسئلة الشائعة ### كيف أثبّت Lagune على Codex CLI؟ شغّل codex plugin marketplace add wellwelwel/lagune، ثم codex plugin add lagune@lagune. ### كيف أحدّث Lagune على Codex CLI؟ شغّل codex plugin marketplace upgrade lagune. ### كيف أشغّل أوامر Lagune على Codex CLI؟ اكتب ‎$ ثم الأمر تحت اسم الإضافة، متبوعًا بمدخلك، مثل ‎$lagune:lagune-charter. ### هل يعمل Lagune داخل بيئة العزل في Codex؟ نعم، بعد أن تثبّت المحرك في مشروعك عبر npm i -D lagune@0.18.1 من طرفيتك، مرة واحدة وبعد كل تحديث. --- # ثبّت Lagune على Cursor كإضافة > ثبّت Lagune على Cursor و Cursor CLI كإضافة، وحافظ على تحديثه، واسمح لمحركه مسبقًا. Canonical: https://lagune.ai/ar-AE/docs/install/cursor اللغة: ar-AE الأصل: https://lagune.ai/docs/install/cursor آخر تحديث: 2026-11-09 **Cursor** - افتح **Customize**. - اختر **From GitHub Repository** وأدخل `https://github.com/wellwelwel/lagune`. - اختر **Install** على **Lagune** وحدد نطاق المشروع أو المستخدم. **Cursor CLI** - أضف السوق من الطرفية: ```bash agent plugin marketplace add https://github.com/wellwelwel/lagune --git-ref plugin-cursor ``` - اكتب `/plugins` في جلسة `agent`. - ثبّت **Lagune**. إن كان **Lagune** مثبّتًا بالفعل في **Claude Code**، يحمّله **Cursor CLI** من هناك. ## التحديث **Cursor** - افتح **Customize**. - اختر **Refresh** على السوق `lagune`. **Cursor CLI** - استبدل السوق من الطرفية: ```bash agent plugin marketplace remove lagune agent plugin marketplace add https://github.com/wellwelwel/lagune --git-ref plugin-cursor ``` - اكتب `/plugins` في جلسة `agent`. - ثبّت **Lagune** مجددًا. ## الأوامر اكتب الأوامر بأسمائها، مثل `/lagune-charter`. --- **الأذونات** في **Cursor**، تشغّل الأوامر المحرك عبر **npx**، ويسمح به وضع Auto-review الافتراضي دون أن يسأل. في **Cursor CLI**، يعمل المحرك عبر أداتين: `lagune_read` تقرأ مشروعك فقط، و `lagune_write` تكتب في `.lagune/` فقط. وللسماح بهما مسبقًا، أضف هذه القواعد إلى `.cursor/cli.json` لمشروع واحد، أو إلى `~/.cursor/cli-config.json` لكل المشاريع: ```json { "permissions": { "allow": [ "Mcp(plugin-lagune-lagune:lagune_read)", "Mcp(plugin-lagune-lagune:lagune_write)" ] } } ``` حين يعمل المحرك عبر **npx**، كما مع **skills.sh**، اسمح بـ `Shell(npx:--yes lagune@*)`. ## الأسئلة الشائعة ### كيف أثبّت Lagune على Cursor؟ في Cursor، افتح Customize، واختر From GitHub Repository، وأدخل https://github.com/wellwelwel/lagune ثم ثبّت Lagune. وفي Cursor CLI، شغّل agent plugin marketplace add https://github.com/wellwelwel/lagune --git-ref plugin-cursor، ثم ثبّت Lagune من ‎/plugins. ### كيف أحدّث Lagune على Cursor؟ في Cursor، اختر Refresh على السوق lagune في Customize. وفي Cursor CLI، أزل السوق lagune، وأضفه مجددًا، ثم ثبّت Lagune مجددًا من ‎/plugins. ### كيف أشغّل أوامر Lagune على Cursor؟ اكتبها بأسمائها، مثل /lagune-charter. ### هل يمكن لـ Cursor تشغيل Lagune دون طلب إذن؟ نعم. يسمح به وضع Auto-review الافتراضي في Cursor بالفعل. وفي Cursor CLI، اسمح بـ Mcp(plugin-lagune-lagune:lagune_read) و Mcp(plugin-lagune-lagune:lagune_write)، إضافة إلى Shell(npx:--yes lagune@*) حين يعمل المحرك عبر npx. --- # ثبّت Lagune على Devin CLI كإضافة > ثبّت Lagune على Devin CLI كإضافة، وحافظ على تحديثه. Canonical: https://lagune.ai/ar-AE/docs/install/devin-cli اللغة: ar-AE الأصل: https://lagune.ai/docs/install/devin-cli آخر تحديث: 2026-11-09 سجّل الدخول إلى **Devin**، ثم ثبّت الإضافة من الطرفية: ```bash devin auth login devin plugins install wellwelwel/lagune ``` ## التحديث لتحديث **Lagune**، شغّل: ```bash devin plugins update lagune ``` ## الأوامر اكتب الأوامر تحت اسم الإضافة، مثل `/lagune:lagune-charter` بدلًا من `/lagune-charter`. وتسردها قائمة `/` أيضًا. ## الأسئلة الشائعة ### كيف أثبّت Lagune على Devin CLI؟ سجّل الدخول عبر devin auth login، ثم شغّل devin plugins install wellwelwel/lagune. ### كيف أحدّث Lagune على Devin CLI؟ شغّل devin plugins update lagune. ### كيف أشغّل أوامر Lagune على Devin CLI؟ اكتبها تحت اسم الإضافة، مثل ‎/lagune:lagune-charter. وتسردها قائمة ‎/‎ أيضًا. --- # ثبّت Lagune على Factory Droid كإضافة > ثبّت Lagune على Factory Droid كإضافة، وحافظ على تحديثه، واسمح بأدوات محركه. Canonical: https://lagune.ai/ar-AE/docs/install/factory-droid اللغة: ar-AE الأصل: https://lagune.ai/docs/install/factory-droid آخر تحديث: 2026-11-09 ثبّت الإضافة من الطرفية: ```bash droid plugin marketplace add wellwelwel/lagune droid plugin install lagune@lagune ``` ## التحديث لتحديث **Lagune**، شغّل: ```bash droid plugin marketplace update lagune droid plugin update lagune@lagune ``` ## الأوامر اكتب الأوامر بأسمائها، مثل `/lagune-charter`. ## الأسئلة الشائعة ### كيف أثبّت Lagune على Factory Droid؟ شغّل droid plugin marketplace add wellwelwel/lagune، ثم droid plugin install lagune@lagune. ### كيف أحدّث Lagune على Factory Droid؟ شغّل droid plugin marketplace update lagune، ثم droid plugin update lagune@lagune. ### كيف أشغّل أوامر Lagune على Factory Droid؟ اكتبها بأسمائها، مثل /lagune-charter. ### هل يمكن لـ Factory Droid تشغيل Lagune دون طلب إذن؟ نعم. اختر السماح الدائم بـ lagune_read و lagune_write حين يسألك Factory Droid. ويسأل مجددًا بعد مزامنة commit جديد من السوق lagune. --- # ثبّت Lagune على Gemini CLI كامتداد > ثبّت Lagune على Gemini CLI كامتداد، وحافظ على تحديثه، واسمح لمحركه مسبقًا. Canonical: https://lagune.ai/ar-AE/docs/install/gemini-cli اللغة: ar-AE الأصل: https://lagune.ai/docs/install/gemini-cli آخر تحديث: 2026-11-09 ثبّت الامتداد من الطرفية: ```bash gemini extensions install https://github.com/wellwelwel/lagune ``` ## التحديث لتحديث **Lagune**، شغّل: ```bash gemini extensions update lagune ``` لإبقائه محدّثًا، ثبّته مع `--auto-update`. ## الأوامر اكتب الأوامر تحت اسم الامتداد، مثل `/lagune:lagune-charter` بدلًا من `/lagune-charter`. --- **الأذونات** يعمل المحرك عبر أداتين: `lagune_read` تقرأ مشروعك فقط، و `lagune_write` تكتب في `.lagune/` فقط. ولا يشغّلهما **Gemini CLI** إلا في مجلد موثوق. وللسماح بهما مسبقًا، احفظ هذه القاعدة باسم `~/.gemini/policies/lagune.toml`: ```toml [[rule]] mcpName = "lagune" toolName = ["lagune_read", "lagune_write"] decision = "allow" priority = 100 ``` حين يعمل المحرك عبر **npx**، كما مع **skills.sh**، أضف هذه القاعدة إلى الملف نفسه: ```toml [[rule]] toolName = "run_shell_command" commandRegex = 'npx --yes lagune@\d+\.\d+\.\d+\s' decision = "allow" priority = 100 ``` ## الأسئلة الشائعة ### كيف أثبّت Lagune على Gemini CLI؟ شغّل gemini extensions install https://github.com/wellwelwel/lagune . ### كيف أحدّث Lagune على Gemini CLI؟ شغّل gemini extensions update lagune، أو ثبّت الامتداد مع ‎--auto-update. ### كيف أشغّل أوامر Lagune على Gemini CLI؟ اكتبها تحت اسم الامتداد، مثل ‎/lagune:lagune-charter. ### هل يمكن لـ Gemini CLI تشغيل Lagune دون طلب إذن؟ نعم. أضف قاعدة سياسة تسمح بالأداتين lagune_read و lagune_write في الخادم lagune، إضافة إلى قاعدة لـ run_shell_command مع npx --yes lagune@ ورقم إصدار حين يعمل المحرك عبر npx. --- # ثبّت Lagune على GitHub Copilot CLI كإضافة > ثبّت Lagune على GitHub Copilot CLI كإضافة، وحافظ على تحديثه. Canonical: https://lagune.ai/ar-AE/docs/install/github-copilot-cli اللغة: ar-AE الأصل: https://lagune.ai/docs/install/github-copilot-cli آخر تحديث: 2026-11-09 ثبّت الإضافة من الطرفية: ```bash copilot plugin marketplace add wellwelwel/lagune copilot plugin install lagune@lagune ``` في المحرر، ثبّت **Lagune** لـ **GitHub Copilot** عبر [**skills.sh**](https://lagune.ai/ar-AE/docs/install/universal). ## التحديث لتحديث **Lagune**، شغّل: ```bash copilot plugin marketplace update lagune copilot plugin update lagune@lagune ``` ## الأوامر اكتب الأوامر بأسمائها، مثل `/lagune-charter`. ## الأسئلة الشائعة ### كيف أثبّت Lagune على GitHub Copilot CLI؟ شغّل copilot plugin marketplace add wellwelwel/lagune، ثم copilot plugin install lagune@lagune. ### كيف أحدّث Lagune على GitHub Copilot CLI؟ شغّل copilot plugin marketplace update lagune، ثم copilot plugin update lagune@lagune. ### كيف أشغّل أوامر Lagune على GitHub Copilot CLI؟ اكتبها بأسمائها، مثل /lagune-charter. ### هل يمكنني استخدام Lagune مع GitHub Copilot في VS Code؟ نعم. في VS Code أو أي محرر آخر، ثبّت Lagune عبر skills.sh بدلًا من الإضافة. --- # ثبّت Lagune على Grok Build كإضافة > ثبّت Lagune على Grok Build كإضافة، وحافظ على تحديثه، واسمح لمحركه مسبقًا. Canonical: https://lagune.ai/ar-AE/docs/install/grok-build اللغة: ar-AE الأصل: https://lagune.ai/docs/install/grok-build آخر تحديث: 2026-11-09 ثبّت الإضافة من الطرفية: ```bash grok plugin install wellwelwel/lagune@plugin-grok --trust ``` ## التحديث لتحديث **Lagune**، شغّل: ```bash grok plugin update lagune ``` ## الأوامر اكتب الأوامر بأسمائها، مثل `/lagune-charter`، أو تحت اسم الإضافة، مثل `/lagune:lagune-charter`. --- **الأذونات** يعمل المحرك عبر أداتين: `lagune_read` تقرأ مشروعك فقط، و `lagune_write` تكتب في `.lagune/` فقط. وللسماح بهما مسبقًا، أضف هذه القواعد إلى `~/.grok/config.toml`: ```toml [permission] allow = ["MCPTool(lagune__lagune_read)", "MCPTool(lagune__lagune_write)"] ``` حين يعمل المحرك عبر **npx**، كما مع **skills.sh**، اسمح بـ `Bash(npx --yes lagune@*)`. ## الأسئلة الشائعة ### كيف أثبّت Lagune على Grok Build؟ شغّل grok plugin install wellwelwel/lagune@plugin-grok --trust. ### كيف أحدّث Lagune على Grok Build؟ شغّل grok plugin update lagune. ### كيف أشغّل أوامر Lagune على Grok Build؟ اكتبها بأسمائها، مثل ‎/lagune-charter، أو تحت اسم الإضافة، مثل ‎/lagune:lagune-charter. ### هل يمكن لـ Grok Build تشغيل Lagune دون طلب إذن؟ نعم. اسمح بـ MCPTool(lagune__lagune_read) و MCPTool(lagune__lagune_write) في إعدادات Grok Build، إضافة إلى Bash(npx --yes lagune@*) حين يعمل المحرك عبر npx. --- # ثبّت Lagune على Hermes Agent كإضافة > ثبّت Lagune على Hermes Agent كإضافة، وحافظ على تحديثه. Canonical: https://lagune.ai/ar-AE/docs/install/hermes-agent اللغة: ar-AE الأصل: https://lagune.ai/docs/install/hermes-agent آخر تحديث: 2026-11-09 ثبّت الإضافة من الطرفية: ```bash hermes plugins install wellwelwel/lagune --enable ``` - حين يطلب منك **Hermes Agent** تأكيد إضافة من خارج كتالوجه، **أكّدها**. - حين يعرض تثبيت اعتماديات **Node.js** الخاصة بالمستودع، **ارفض**. ## التحديث لتحديث **Lagune**، شغّل: ```bash hermes plugins update lagune ``` ## الأوامر اكتب الأوامر تحت اسم الإضافة، مثل `/lagune:lagune-charter` بدلًا من `/lagune-charter` و `/lagune:lagune` بدلًا من `/lagune`. ## الأسئلة الشائعة ### كيف أثبّت Lagune على Hermes Agent؟ شغّل hermes plugins install wellwelwel/lagune --enable. أكّد الإضافة حين يُطلب منك ذلك، وارفض تثبيت اعتماديات Node.js الخاصة بالمستودع. ### كيف أحدّث Lagune على Hermes Agent؟ شغّل hermes plugins update lagune. ### كيف أشغّل أوامر Lagune على Hermes Agent؟ اكتبها تحت اسم الإضافة، مثل ‎/lagune:lagune-charter و ‎/lagune:lagune. --- # ثبّت Lagune على Kimi Code كإضافة > ثبّت Lagune على Kimi Code كإضافة، وحافظ على تحديثه. Canonical: https://lagune.ai/ar-AE/docs/install/kimi-code اللغة: ar-AE الأصل: https://lagune.ai/docs/install/kimi-code آخر تحديث: 2026-11-09 ثبّت الإضافة من جلسة **Kimi Code**، واختر **Trust and install**، ثم ابدأ جلسة جديدة لتحميلها: ```text /plugins install https://github.com/wellwelwel/lagune /new ``` ## التحديث لتحديث **Lagune**، ثبّته مجددًا: ```text /plugins install https://github.com/wellwelwel/lagune /new ``` ## الأوامر اكتب الأوامر تحت اسم الإضافة، مثل `/lagune:lagune-charter` بدلًا من `/lagune-charter`. وتسردها قائمة `/` بالصيغة `/skill:lagune:lagune-charter`، وهي تعمل أيضًا. ## الأسئلة الشائعة ### كيف أثبّت Lagune على Kimi Code؟ في جلسة Kimi Code، شغّل ‎/plugins install https://github.com/wellwelwel/lagune ثم اختر Trust and install، ثم شغّل ‎/new. ### كيف أحدّث Lagune على Kimi Code؟ شغّل ‎/plugins install https://github.com/wellwelwel/lagune مجددًا، ثم ‎/new. ### كيف أشغّل أوامر Lagune على Kimi Code؟ اكتبها تحت اسم الإضافة، مثل ‎/lagune:lagune-charter، أو كما تسردها قائمة ‎/‎، مثل ‎/skill:lagune:lagune-charter. --- # ثبّت Lagune على Muse Code كإضافة > ثبّت Lagune على Muse Code كإضافة، وحافظ على تحديثه، وشغّل محركه داخل بيئة العزل. Canonical: https://lagune.ai/ar-AE/docs/install/muse-code اللغة: ar-AE الأصل: https://lagune.ai/docs/install/muse-code آخر تحديث: 2026-11-09 ثبّت الإضافة من الطرفية: ```bash muse plugins marketplace add lagune wellwelwel/lagune muse plugins install lagune@lagune ``` ## التحديث لتحديث **Lagune**، حدّث السوق وأعد تثبيت الإضافة: ```bash muse plugins marketplace update lagune muse plugins remove lagune muse plugins install lagune@lagune ``` ## الأوامر اكتب الأوامر بأسمائها، مثل `/lagune-charter`، أو تحت اسم الإضافة، مثل `/lagune:lagune-charter`. --- **بيئة العزل** لا تستطيع بيئة العزل في **Muse Code** تنزيل المحرك. ثبّته في مشروعك من طرفيتك، مرة واحدة وبعد كل تحديث: ```bash npm i -D lagune@0.18.1 ``` ## الأسئلة الشائعة ### كيف أثبّت Lagune على Muse Code؟ شغّل muse plugins marketplace add lagune wellwelwel/lagune، ثم muse plugins install lagune@lagune. ### كيف أحدّث Lagune على Muse Code؟ شغّل muse plugins marketplace update lagune، ثم أعد التثبيت عبر muse plugins remove lagune و muse plugins install lagune@lagune. ### كيف أشغّل أوامر Lagune على Muse Code؟ اكتبها بأسمائها، مثل ‎/lagune-charter، أو تحت اسم الإضافة، مثل ‎/lagune:lagune-charter. ### هل يعمل Lagune داخل بيئة العزل في Muse Code؟ نعم، بعد أن تثبّت المحرك في مشروعك عبر npm i -D lagune@0.18.1 من طرفيتك، مرة واحدة وبعد كل تحديث. --- # ثبّت Lagune على OpenCode كإضافة > ثبّت Lagune على OpenCode 1.x و 2.x كإضافة، وحافظ على تحديثه. Canonical: https://lagune.ai/ar-AE/docs/install/opencode اللغة: ar-AE الأصل: https://lagune.ai/docs/install/opencode آخر تحديث: 2026-11-09 **OpenCode 2.x** ثبّت الإضافة من الطرفية: ```bash opencode plugin add lagune ``` أو أضفها إلى القائمة `plugins` في `opencode.json`: ```json { "plugins": ["lagune"] } ``` **OpenCode 1.x** ثبّت الإضافة في مشروعك من الطرفية، أو أضف `-g` لتثبيتها لكل مشاريعك: ```bash opencode plugin lagune ``` أو أضفها إلى القائمة `plugin` في `opencode.json`: ```json { "plugin": ["lagune"] } ``` ## التحديث **OpenCode 2.x** لتحديث **Lagune**، شغّل: ```bash opencode plugin update lagune opencode reload ``` **OpenCode 1.x** لتحديث **Lagune**، ثبّت الإصدار الجديد فوق القديم، مع إضافة `-g` إن كنت ثبّته لكل مشاريعك: ```bash opencode plugin lagune@0.18.1 --force ``` ## الأوامر **OpenCode 2.x** اكتب `@` واختر الأمر، مثل `@lagune-charter`، ثم اكتب مدخلك في الرسالة نفسها. **OpenCode 1.x** اكتب الأوامر بأسمائها، مثل `/lagune-charter`. وهي مسرودة تحت `/skills`، لا في قائمة `/`. ## الأسئلة الشائعة ### كيف أثبّت Lagune على OpenCode؟ في OpenCode 2.x، شغّل opencode plugin add lagune. وفي OpenCode 1.x، شغّل opencode plugin lagune، مع إضافة ‎-g لتثبيته لكل مشاريعك. ### كيف أحدّث Lagune على OpenCode؟ في OpenCode 2.x، شغّل opencode plugin update lagune، ثم opencode reload. وفي OpenCode 1.x، شغّل opencode plugin lagune@0.18.1 --force. ### كيف أشغّل أوامر Lagune على OpenCode؟ في OpenCode 2.x، اكتب ‎@ واختر الأمر، مثل ‎@lagune-charter، ثم اكتب مدخلك في الرسالة نفسها. وفي OpenCode 1.x، اكتبها بأسمائها، مثل ‎/lagune-charter، أو ابحث عنها تحت ‎/skills. ### هل يطلب OpenCode إذنًا قبل تشغيل Lagune؟ لا. يشغّل OpenCode أداتي المحرك، lagune_read و lagune_write، دون أن يسأل. --- # ثبّت Lagune على Pi كحزمة > ثبّت Lagune على Pi كحزمة، من npm أو من GitHub، وحافظ على تحديثه. Canonical: https://lagune.ai/ar-AE/docs/install/pi اللغة: ar-AE الأصل: https://lagune.ai/docs/install/pi آخر تحديث: 2026-11-09 **npm** ثبّت الحزمة من الطرفية: ```bash pi install npm:lagune ``` **GitHub** ثبّت أحدث commit من **GitHub**، وهو يشغّل المحرك عبر **npx**: ```bash pi install git:github.com/wellwelwel/lagune ``` ## التحديث **npm** لتحديث **Lagune**، شغّل: ```bash pi update npm:lagune ``` **GitHub** لتحديث **Lagune**، شغّل: ```bash pi update git:github.com/wellwelwel/lagune ``` يحدّث `pi update --extensions` كل حزمة ثبّتها، بينما لا يحدّث `pi update` وحده إلا **Pi**. ## الأوامر اكتب الأوامر مع البادئة `skill:`، مثل `/skill:lagune-charter` بدلًا من `/lagune-charter`. ## الأسئلة الشائعة ### كيف أثبّت Lagune على Pi؟ شغّل pi install npm:lagune، أو pi install git:github.com/wellwelwel/lagune للحصول على أحدث commit من GitHub. ### كيف أحدّث Lagune على Pi؟ شغّل pi update npm:lagune، أو pi update git:github.com/wellwelwel/lagune لتثبيت من GitHub. ويحدّث pi update --extensions كل حزمة ثبّتها. ### كيف أشغّل أوامر Lagune على Pi؟ اكتبها مع البادئة skill:، مثل ‎/skill:lagune-charter. --- # ثبّت Lagune على Qwen Code كامتداد > ثبّت Lagune على Qwen Code كامتداد، وحافظ على تحديثه، واسمح لمحركه مسبقًا. Canonical: https://lagune.ai/ar-AE/docs/install/qwen-code اللغة: ar-AE الأصل: https://lagune.ai/docs/install/qwen-code آخر تحديث: 2026-11-09 ثبّت الامتداد من الطرفية: ```bash qwen extensions install lagune ``` ## التحديث لتحديث **Lagune**، شغّل: ```bash qwen extensions update lagune ``` لإبقائه محدّثًا، ثبّته مع `--auto-update`. ## الأوامر اكتب الأوامر تحت اسم الامتداد، مثل `/lagune:lagune-charter` بدلًا من `/lagune-charter`. --- **الأذونات** يعمل المحرك عبر أداتين: `lagune_read` تقرأ مشروعك فقط، و `lagune_write` تكتب في `.lagune/` فقط. وللسماح بهما مسبقًا، أضف هذه القواعد إلى `.qwen/settings.json` لمشروع واحد، أو إلى `~/.qwen/settings.json` لكل المشاريع: ```json { "permissions": { "allow": ["mcp__lagune__lagune_read", "mcp__lagune__lagune_write"] } } ``` حين يعمل المحرك عبر **npx**، كما مع **skills.sh**، اسمح بـ `Shell(npx --yes lagune@*)`. ## الأسئلة الشائعة ### كيف أثبّت Lagune على Qwen Code؟ شغّل qwen extensions install lagune. ### كيف أحدّث Lagune على Qwen Code؟ شغّل qwen extensions update lagune، أو ثبّت الامتداد مع ‎--auto-update. ### كيف أشغّل أوامر Lagune على Qwen Code؟ اكتبها تحت اسم الامتداد، مثل ‎/lagune:lagune-charter. ### هل يمكن لـ Qwen Code تشغيل Lagune دون طلب إذن؟ نعم. اسمح بـ mcp__lagune__lagune_read و mcp__lagune__lagune_write في إعدادات Qwen Code، إضافة إلى Shell(npx --yes lagune@*) حين يعمل المحرك عبر npx. --- # ثبّت Lagune في أي وكيل عبر skills.sh أو GitHub CLI > ثبّت Lagune في أي وكيل ذكاء اصطناعي عبر skills CLI أو GitHub CLI، وحافظ على تحديثه. Canonical: https://lagune.ai/ar-AE/docs/install/universal اللغة: ar-AE الأصل: https://lagune.ai/docs/install/universal آخر تحديث: 2026-11-09 **skills.sh** ثبّت أوامر **Lagune** في مشروعك من الطرفية عبر [**skills.sh**](https://www.skills.sh/wellwelwel/lagune)، مع إبقاء **Project** نطاقًا للتثبيت: ```bash npx skills add wellwelwel/lagune --skill '*' ``` أو الصق هذا الموجّه في وكيلك: ```md شغّل `npx --yes skills add wellwelwel/lagune` واتبع تعليمات المهارة التي يولّدها الآن. اقرأ مخرجاته كاملة، مع إعادة توجيهها إلى ملف مؤقت أولًا إن لزم الأمر. وحلّ المسارات النسبية انطلاقًا من دليل الملفات المساندة الذي يوفّره. ``` **GitHub CLI** ثبّت أوامر **Lagune** في مشروعك من الطرفية عبر [**GitHub CLI**](https://cli.github.com/) بالإصدار 2.90.0 أو أحدث: ```bash gh skill install wellwelwel/lagune --all --scope project ``` أو الصق هذا الموجّه في وكيلك: ```md شغّل `gh skill install wellwelwel/lagune --all --scope project` واقرأ مخرجاته كاملة، مع إعادة توجيهها إلى ملف مؤقت أولًا إن لزم الأمر. ``` ## التحديث **skills.sh** لتحديث **Lagune**، شغّل: ```bash npx skills update ``` أو الصق هذا الموجّه في وكيلك: ```md شغّل `npx --yes skills update -y` واقرأ مخرجاته كاملة، مع إعادة توجيهها إلى ملف مؤقت أولًا إن لزم الأمر. ``` **GitHub CLI** لتحديث **Lagune**، شغّل: ```bash gh skill update --all ``` أو الصق هذا الموجّه في وكيلك: ```md شغّل `gh skill update --all` واقرأ مخرجاته كاملة، مع إعادة توجيهها إلى ملف مؤقت أولًا إن لزم الأمر. ``` --- **بيئة العزل** في بيئة عزل دون وصول إلى الشبكة، لا تستطيع الأوامر تنزيل المحرك. ثبّته في مشروعك من طرفيتك، مرة واحدة وبعد كل تحديث: ```bash npm i -D lagune@0.18.1 ``` ## الأسئلة الشائعة ### كيف أثبّت Lagune في أي وكيل ذكاء اصطناعي؟ شغّل npx skills add wellwelwel/lagune --skill '*' أو gh skill install wellwelwel/lagune --all --scope project في مشروعك، أو الصق موجّه التثبيت في وكيلك. ### كيف أحدّث Lagune في أي وكيل ذكاء اصطناعي؟ شغّل npx skills update إن كنت ثبّته عبر skills.sh، أو gh skill update --all إن كنت ثبّته عبر GitHub CLI. ويمكنك أيضًا لصق موجّه التحديث في وكيلك. ### هل يمكنني تثبيت Lagune بأكثر من طريقة؟ لا. مع طريقتين، يسرد الوكيل كل أمر مرتين، أو يستخدم نسخة ويخفي الأخرى. --- # مهارات الأمان لوكلاء الذكاء الاصطناعي > المهارات التي يحصل عليها وكيل الذكاء الاصطناعي مع Lagune: دقّق مشروعًا قائمًا أو أمّن العمل الجديد أثناء البناء، وكل ذلك يحكمه ميثاق الأمان. Canonical: https://lagune.ai/ar-AE/docs/get-started/commands اللغة: ar-AE الأصل: https://lagune.ai/docs/get-started/commands آخر تحديث: 2026-11-09 بعد [تثبيت](https://lagune.ai/ar-AE/docs) **Lagune**، يحصل وكيل **الذكاء الاصطناعي** على مجموعة من المهارات. ويمكن استخدامها بطريقتين، يحكم كلتيهما **ميثاق الأمان**: تأمين العمل الجديد أثناء بنائه، أو تشغيل التدقيق الكامل على المشروع. **⌨️ البناء والتطوير** لا تحتاج إلى إنهاء عملك قبل تأمينه. استخدم [**`/lagune`**](https://lagune.ai/ar-AE/docs/commands/lagune) للعمل الذي تكتبه **الآن**: | المهارة | ما تفعله لك | | ---------------------------------------------- | ------------------------------------------------------------- | | ‎[**/lagune-charter**](https://lagune.ai/ar-AE/docs/commands/charter) | تضع قواعد الأمان لمشروعك، وهي الأساس الذي يبني عليه `/lagune` | | ‎[**/lagune**](https://lagune.ai/ar-AE/docs/commands/lagune) | تبني ما تطلبه وتحصّنه أثناء كتابته، مسترشدة بميثاق الأمان | **استخدمه في أي وقت** يلتزم [**`/lagune`**](https://lagune.ai/ar-AE/docs/commands/lagune) بقواعد ميثاق الأمان كلما عمل. يأخذ أي موجّه، ويبني ما طلبته، ويحصّنه بإعدادات افتراضية آمنة أثناء العمل، لا لاحقًا. --- #### مهارات خاصة | المهارة | ما تفعله | | ---------------------------------------------------- | -------------------------------------------------------------------------- | | ‎[**/lagune-specialize**](https://lagune.ai/ar-AE/docs/commands/specialize) | تعلّم **Lagune** تخصصًا أمنيًا جديدًا من مقالات أو أدوات استغلال أو مواضيع | **🔬 التدقيق: مسار الفريق الأزرق** **مسار الفريق الأزرق** الكامل: اقرأ ما يفعله المشروع، وارصد مخاطره، وأغلقها. كل مهارة تبني على سابقتها، لذلك يكفي اتباع القائمة من الأعلى إلى الأسفل: | # | المهارة | ما تفعله لك | | --- | ---------------------------------------------- | ------------------------------------------------------------- | | 1 | ‎[**/lagune-charter**](https://lagune.ai/ar-AE/docs/commands/charter) | تضع قواعد الأمان لمشروعك، مقترحة لك أو مصاغة مما تقوله | | 2 | ‎[**/lagune-detect**](https://lagune.ai/ar-AE/docs/commands/detect) | تقرأ الكود وترصد ما يفعله نظامك وأين تكمن المخاطر | | 3 | ‎[**/lagune-plan**](https://lagune.ai/ar-AE/docs/commands/plan) | تحوّل ما وجدته مرحلة detect إلى خطة دفاع، مع إصلاح لكل ملاحظة | | 4 | ‎[**/lagune-harden**](https://lagune.ai/ar-AE/docs/commands/harden) | تطبّق إصلاحات الخطة على الكود، بأمان وواحدًا تلو الآخر | | 5 | ‎[**/lagune-verify**](https://lagune.ai/ar-AE/docs/commands/verify) | تُثبت أن كل إصلاح مطبّق يصمد، وتغلق نهائيًا ما يصمد منها | --- #### مهارات خاصة | المهارة | ما تفعله | | ---------------------------------------------------- | --------------------------------------------------------------------------------- | | ‎[**/lagune-specialize**](https://lagune.ai/ar-AE/docs/commands/specialize) | تعلّم **Lagune** تخصصًا أمنيًا جديدًا من مقالات أو أدوات استغلال أو مواضيع | | ‎[**/lagune-prove**](https://lagune.ai/ar-AE/docs/commands/prove) | تحوّل كل ملاحظة مكتشفة إلى إثبات قابل للتشغيل، للدفاع فقط، من أجل الإفصاح المسؤول | --- #### مهارات داخلية | المهارة | ما تفعله | | -------------------------------------------- | ---------------------------------- | | ‎[**/lagune-repair**](https://lagune.ai/ar-AE/docs/commands/repair) | تُصلح التتبع الداخلي في **Lagune** | **نصيحة** الأمان ليس تكلفة، بل استثمار: ما تضعه فيه مسبقًا توفّره أضعافًا في الحوادث التي لا تقع أبدًا 🙋🏻‍♂️ ## الأسئلة الشائعة ### ما المهارات التي يضيفها Lagune؟ الأمر ‎/lagune لتحصين العمل أثناء بنائه، ومسار تدقيق الفريق الأزرق ذو المراحل الخمس: ‎/lagune-charter و ‎/lagune-detect و ‎/lagune-plan و ‎/lagune-harden و ‎/lagune-verify. إضافة إلى ‎/lagune-specialize و ‎/lagune-prove. ### ما هو مسار الفريق الأزرق في Lagune؟ تدقيق من خمس مراحل: charter (وضع القواعد)، و detect (رصد المخاطر)، و plan (تقييم الإصلاحات والتخطيط لها)، و harden (تطبيق الإصلاحات)، و verify (إثبات أنها تصمد وإغلاقها). ### ما الفرق بين ‎/lagune ومسار التدقيق؟ يؤمّن ‎/lagune العمل الجديد أثناء كتابته، دون مسار يجب اتباعه. أما مسار التدقيق فيشغّل المراحل الخمس بالترتيب على مشروع قائم. --- # لوحة التحكم > اطّلع على ميثاق الأمان والملاحظات والكتالوج الخاصة بمشروعك في عرض مباشر ومحلي يُفتح بأمر واحد. Canonical: https://lagune.ai/ar-AE/docs/get-started/dashboard اللغة: ar-AE الأصل: https://lagune.ai/docs/get-started/dashboard آخر تحديث: 2026-11-09 شغّل **Lagune** مباشرة دون أمر فرعي للحصول على عرض تفاعلي مباشر للمجلد `.lagune/`. يقدّم لوحة تحكم ويفتحها على منفذ عشوائي: ```bash npx lagune ``` - [x] **إعادة تحميل مباشرة** - [x] **خاصة** و **محلية** - [x] تعرض كل ما يحتويه `.lagune/`، بدءًا من أول ميثاق أمان - [x] **أدِر** فئات المشروع وما تفحصه hooks الخاصة به، مباشرة من متصفحك - [x] لا حاجة إلى `node_modules` أو `package.json` 📦 ![ميثاق الأمان في لوحة تحكم Lagune](https://lagune.ai/img/dashboard/02.webp) ![الملاحظات في لوحة تحكم Lagune](https://lagune.ai/img/dashboard/03.webp) ![المهام الجانبية في لوحة تحكم Lagune](https://lagune.ai/img/dashboard/04.webp) ![تفاصيل ملاحظة في لوحة تحكم Lagune](https://lagune.ai/img/dashboard/05.webp) ![الكتالوج في لوحة تحكم Lagune](https://lagune.ai/img/dashboard/06.webp) **نصيحة** - 🚪 استخدم `--port` لتحديد منفذ مخصص. - ⏏️ اضغط `Ctrl+C` للإيقاف. ## الأسئلة الشائعة ### كيف أفتح لوحة تحكم Lagune؟ شغّل npx lagune دون أمر فرعي في جذر مشروعك. يقدّم عرضًا مباشرًا للمجلد ‎.lagune/‎ على منفذ عشوائي ويفتحه في متصفحك. ### هل لوحة التحكم خاصة؟ نعم. تعمل على جهازك فقط، على عنوان محلي لا يستطيع أي جهاز آخر الوصول إليه. ### هل يمكنني تغيير مشروعي من لوحة التحكم؟ فقط فئاته وما تستثنيه hooks الخاصة به، من متصفحك. وكل ما تعرضه لوحة التحكم غير ذلك للقراءة فقط. --- # ‎/lagune: كود آمن أثناء كتابة الذكاء الاصطناعي له > ابنِ ما تطلبه وحصّنه أثناء كتابته، مسترشدًا بميثاق الأمان، دون مسار يجب اتباعه. Canonical: https://lagune.ai/ar-AE/docs/commands/lagune اللغة: ar-AE الأصل: https://lagune.ai/docs/commands/lagune آخر تحديث: 2026-11-09 ⌨️ أنجز العمل الذي طلبته، مؤمّنًا أثناء كتابته. يأخذ **`/lagune`** أي موجّه في أي مرحلة، ويبني ما أردته، ويحصّنه بإعدادات افتراضية آمنة قبل أن يعيده إليك. ## طريقة الاستخدام أضف **`/lagune`** إلى أي موجّه، وصِف العمل كما تفعل دائمًا. **📘 تعليمات الوكيل** ```md # تعليمات مشروعي للوكلاء ## الأمان - استخدم المهارة `/lagune` كلما بنيت كودًا أو غيّرته، لتحسين الأمان افتراضيًا. ``` - على سبيل المثال: **AGENTS.md** و **CLAUDE.md** و **‎.github/copilot-instructions.md** و **‎.cursorrules** وغيرها. **💬 ميزة** ```prompt /lagune اسمح للمستخدمين برفع صورة مخصصة في ملفهم الشخصي. ``` **💬 إصلاح** ```prompt /lagune لا يحدث شيء عندما يرسل المستخدم النموذج. ابحث عن السبب المحتمل وأصلحه. ``` **💬 إعادة هيكلة** ```prompt /lagune افصل منطق الـ payload وحسّنه ``` **ميثاق الأمان اختياري، لكن الأفضل وجوده** يعمل **`/lagune`** مع ميثاق الأمان أو بدونه. ومع وجوده، تشكّل قواعد مشروعك كل عملية بناء. ضعها مرة واحدة عبر [`/lagune-charter`](https://lagune.ai/ar-AE/docs/commands/charter). ## آلية العمل يغلّف العمل في ثلاث خطوات، دون أن يكتب أي شيء في Lagune: 1. يحمّل ميثاق الأمان إن وُجد، فتحكم مبادئه عملية البناء كلها، ويعود إلى أساس آمن افتراضيًا إن لم يكن لديك ميثاق بعد. 2. يسرد [كتالوج](https://lagune.ai/ar-AE/docs/catalog) مشروعك ولا يحمّل إلا التخصصات التي يمسّها عملك، وهي المعرفة نفسها التي يستخدمها مسار التدقيق عند الحاجة. 3. يطبّق الدفاع أثناء كتابة الكود، ثم يعيد قراءة نتيجته ليتأكد من أن الضوابط تصمد فعلًا قبل أن يعيد العمل إليك. والنتيجة كود يعمل في مشروعك، آمن من السطر الأول. **استخدمه في أي وقت** لا detect ولا plan ولا تنظيف بعد ذلك. يناسب **`/lagune`** هيكلًا جديدًا أو تغييرًا في قاعدة كود ناضجة على حد سواء، ويحصّن العمل أثناء إنجازه، لا لاحقًا. ## ما لا يفعله - لا يكتب شيئًا في المجلد `.lagune`، فلا مُخرَجات ولا تتبع، والشيء الوحيد الذي ينتجه هو الكود المحصّن الذي طلبته. - لا يُضعف قاعدة لإرضاء موجّه، فإن كان ما طلبته سيخرق مبدأً من مبادئ ميثاق الأمان، يتوقف ويخبرك أولًا، بدلًا من بنائه مباشرة بطريقة غير آمنة. ## الأسئلة الشائعة ### ماذا يفعل ‎/lagune؟ يأخذ أي موجّه في أي مرحلة، ويبني ما طلبته، ويحصّنه بإعدادات افتراضية آمنة قبل أن يعيده إليك. ويُطبَّق الدفاع أثناء كتابة الكود، لا لاحقًا. ### هل أحتاج إلى ميثاق أمان لاستخدام ‎/lagune؟ لا. يعمل مع الميثاق أو بدونه. مع الميثاق، تشكّل قواعد مشروعك كل عملية بناء. وبدونه، يعود إلى أساس آمن افتراضيًا. ### ما الفرق بين ‎/lagune ومسار الفريق الأزرق؟ يؤمّن ‎/lagune العمل الجديد أثناء كتابته، دون مسار يجب اتباعه. أما مسار الفريق الأزرق فيشغّل مراحل التدقيق الخمس بالترتيب على مشروع قائم. ### هل يتتبع ‎/lagune الملاحظات أو يكتب مُخرَجات؟ لا. لا يكتب شيئًا في المجلد ‎.lagune، فلا مُخرَجات ولا تتبع. والشيء الوحيد الذي ينتجه هو الكود المحصّن الذي طلبته. ### كيف أجعل وكيلي يستخدم ‎/lagune تلقائيًا؟ أضف تعليمة إلى ملف تعليمات وكيلك (AGENTS.md و CLAUDE.md و ‎.cursorrules وما شابهها) تطلب منه استخدام المهارة ‎/lagune كلما بنى كودًا أو غيّره. --- # ‎/lagune-charter: ضع مبادئ الأمان الخاصة بك > ضع مبادئ الأمان لمشروعك، وهي القواعد التي تحترمها كل مرحلة لاحقة، وسجّل فئات التخصصات التي تدعمها قراءة المشروع. Canonical: https://lagune.ai/ar-AE/docs/commands/charter اللغة: ar-AE الأصل: https://lagune.ai/docs/commands/charter آخر تحديث: 2026-11-09 🧬 أخبر **Lagune** بطبيعة مشروعك، فيحوّل ذلك إلى قواعد الأمان الخاصة بك (أو يستنتجها من المشروع وحده إن لم تقدّم وصفًا). ميثاق الأمان هو الطبقة الحاكمة: مجموعة من المبادئ التي تضع الأمان أولًا وتلتزم بها كل مرحلة لاحقة. اعتبره فحص وقت الترجمة للوضع الأمني لمشروعك. ## طريقة الاستخدام **صِف مشروعك** ```prompt /lagune-charter مشروعي متجر إلكتروني يبيع ألعاب الفيديو. يضيف العملاء المنتجات إلى سلة التسوق ويدفعون ببطاقة الائتمان أو بقسيمة دفع بنكية. ويمكنهم الاطلاع على طلباتهم وحالة كل طلب. ``` **دع Lagune يقترح** ```prompt /lagune-charter ``` > _أرى مكتبة دفع، وإعدادًا لتسجيل الدخول، ونموذج طلبات مرتبطًا بالعميل. يبدو هذا متجرًا إلكترونيًا يبيع شيئًا ما. يدفع العملاء ويتابعون طلباتهم..._ ☁️ ## ما يستنتجه يأخذ **Lagune** وصفك أو مستند **PRD** كاتجاه، ويستنتج ما يعنيه للأمان، ثم يقرأ المشروع ليتجاوز ما ذكرته. على سبيل المثال: - سلة تحفظ الطلبات تعني وجود **قاعدة بيانات**: - مثل `"أين تُخزَّن البيانات؟"` و `"من يستطيع الوصول إليها؟"` و `"هل تتسرّب؟"`. - عملاء يرون طلباتهم الخاصة يعني وجود نوع من **تسجيل الدخول أو التحكم في الوصول**: - مثل `"هل يستطيع عميل الوصول إلى طلبات عميل آخر؟"` و `"هل الجلسات محمية؟"`. - قبول الدفع بالبطاقات والقسائم البنكية يعني **وجود أموال وبيانات حساسة**: - مثل `"هل تُخزَّن بيانات البطاقات؟"` و `"هل يُتحقق من المدفوعات؟"`. وصفك والمشروع يكمّل أحدهما الآخر: وصفك يحدد الغاية، وقراءة الاعتماديات وملف README والإعدادات تكشف ما لم تذكره. وإن بقي أمر مهم غير واضح، يطرح **Lagune** سؤالًا قصيرًا وبسيطًا بدلًا من التخمين. ومن هنا يبني **Lagune** مجموعة قواعد أمان مصممة للمشروع، يمكنك مراجعتها وتعديلها متى احتجت. **استفد منه إلى أقصى حد** - يمكنك أيضًا تحديد قواعد الأمان الخاصة بك للمشروع. - كلما قدّمت تفاصيل أكثر صلة، كان التقرير النهائي أفضل: - اشرح المشروع، وكيف يعمل، وما يحدث في الخلفية. - من المستخدم النهائي؟ ما الذي يستطيع المستخدمون فعله، وما الذي لا يستطيعون؟ - تفاصيل السلوك لا تقل قيمة عن التفاصيل التقنية. - تُحفظ ذاكرة ميثاق الأمان في `.lagune/memory/charter.md`. ## الفئات التي يسجّلها تنضم التخصصات، وهي المعرفة الأمنية التي تحمّلها المراحل اللاحقة عند الحاجة، إلى [كتالوج](https://lagune.ai/ar-AE/docs/catalog) مشروعك حسب [الفئة](https://lagune.ai/ar-AE/docs/categories). وما دام مشروعك بلا فئة مسجّلة، يسجّل ميثاق الأمان كل فئة تدعمها قراءته، مثل لغة مشروعك أو استدعاءات LLM أو الحاويات، ويذكرها في ملخصه. وبعد تسجيل الفئات، يتركها ميثاق الأمان كما هي ولا يذكر إلا فئة لا يستخدمها مشروعك بعد. غيّرها بنفسك في أي وقت: ```bash npx lagune write add --categories python npx lagune write remove --categories python ``` ## المجلدات التي يقترح استثناءها حين تجد قراءة ميثاق الأمان مجلدات مُضافة إلى المستودع ليست من كود مشروعك الذي يجب الدفاع عنه، مثل بيانات الاختبار المكتوبة لتبدو ضعيفة، يسردها بأرقام في نهاية ملخصه. ولا يستثني أيًا منها من تلقاء نفسه أبدًا، لأن المستودع العدائي قد يجعل كوده يبدو كبيانات اختبار، لذلك لا يُسجَّل إلا الأرقام التي ترد بها. وتشرح صفحة [إعداد hooks](https://lagune.ai/ar-AE/docs/hooks/configure) كيف تغيّرها بنفسك. ## التالي بعد وضع القواعد، ارصد ما يفعله نظامك فعلًا: [`/lagune-detect`](https://lagune.ai/ar-AE/docs/commands/detect). ## الأسئلة الشائعة ### ما هو ميثاق الأمان في Lagune؟ ميثاق الأمان هو الطبقة الحاكمة في Lagune، وهو مجموعة من المبادئ التي تضع الأمان أولًا وتلتزم بها كل مرحلة لاحقة. اعتبره فحص وقت الترجمة للوضع الأمني لمشروعك. ### أين يُحفظ ميثاق الأمان؟ في ‎.lagune/memory/charter.md. ### هل يمكنني كتابة قواعد ميثاق الأمان بنفسي؟ نعم. يقترح Lagune القواعد من وصفك ومن الكود، ويمكنك إعادة صياغتها أو حذفها أو إضافة غيرها أو تضييق نطاقها. ### هل يختار ميثاق الأمان فئات التخصصات لمشروعي؟ فقط ما دامت لا توجد فئة مسجّلة. حينها يسجّل كل فئة تدعمها قراءته، مثل لغتك أو استدعاءات LLM. وبعد تسجيل الفئات، لا يغيّرها أبدًا. --- # ‎/lagune-detect: ارصد نظامك ومخاطره > اقرأ الكود وارصد ما يفعله نظامك وأين تكمن المخاطر. Canonical: https://lagune.ai/ar-AE/docs/commands/detect اللغة: ar-AE الأصل: https://lagune.ai/docs/commands/detect آخر تحديث: 2026-11-09 🔬 اكتشف ما يفعله نظامك حقًا وأين تكمن المخاطر. تقرأ مرحلة detect الكود ولا تسجّل إلا ما تجده فعلًا، مع الأدلة التي تحتاجها المراحل اللاحقة. وقاعدتها الحاكمة هي الاكتشاف، لا الاختلاق. ## طريقة الاستخدام **فحص كامل** ```prompt /lagune-detect ``` **حدّد المسارات** ```prompt /lagune-detect src/routes/ src/auth.ts ``` **صِف مصدر قلق** ```prompt /lagune-detect تأكد من أن بيانات العملاء لا تُكشف أبدًا ``` ## ما يرصده يقرأ **Lagune** الكود ويرصد ما يجده. تحمل كل ملاحظة ماهيتها، وسبب أهميتها، والدليل عليها. على سبيل المثال: - **رفع الملفات**، يقبل النظام ملفات من المستخدمين: - _سبب الأهمية:_ قد يخفي ملف متنكر في صورة كودًا خبيثًا. - _الدليل:_ يثق الـ handler الخاص بـ `POST /upload` بنوع MIME الذي يرسله العميل، دون التحقق من النوع الحقيقي للملف. - **تسجيل الدخول والجلسات**، يسجّل المستخدمون الدخول للوصول إلى حساباتهم: - _سبب الأهمية:_ ضعف إدارة الجلسات يسمح بالاستيلاء على حساب من حساب آخر. - _الدليل:_ منطق إصدار الجلسات، حيث تُصدر الجلسات دون تحديد مدة انتهاء. وفي الطريق، تمنح مرحلة detect كل تخصص في [كتالوج](https://lagune.ai/ar-AE/docs/catalog) مشروعك حكمًا مقابل الكود، وتطبّق التخصصات التي يتوفر سياقها، وتسجّلها تحت **Applied specializations**، وهي القائمة التي تعيد مرحلتا harden و verify استخدامها. ومن هنا تحصل على خريطة واضحة لما يفعله نظامك وأين تكمن المخاطر، جاهزة لتعمل عليها الخطوات التالية. **نصيحة** - تشغيلها مجددًا يحدّث الخريطة: تختفي الملاحظات التي حُلّت، وتظهر الجديدة. - تُحفظ خريطة detect في `.lagune/memory/detect.md`. ## التالي حوّل الخريطة إلى خطة: [`/lagune-plan`](https://lagune.ai/ar-AE/docs/commands/plan). ## الأسئلة الشائعة ### ماذا يفعل ‎/lagune-detect؟ يقرأ الكود ويرصد ما يفعله نظامك وأين تكمن المخاطر، ولا يسجّل إلا ما يجده فعلًا. وقاعدته هي الاكتشاف، لا الاختلاق. ### ما هي الملاحظة في Lagune؟ الملاحظة خطر واحد مكتشف، تحمل ماهيته، وسبب أهميته، والدليل عليه في الكود. وهي الوحدة المتتبَّعة التي تحملها مراحل plan و harden و verify إلى الأمام. ### أين تُحفظ خريطة detect؟ في ‎.lagune/memory/detect.md. ### ما التخصصات التي تستخدمها مرحلة detect؟ يحصل كل تخصص في كتالوج مشروعك على حكم مقابل الكود. وتطبّق مرحلة detect التخصصات التي يتوفر سياقها وتسجّلها تحت Applied specializations. --- # ‎/lagune-plan: قيّم الملاحظات وخطط للإصلاحات > حوّل ما وجدته مرحلة detect إلى خطة دفاع، بتقييم كل ملاحظة بفئة ودرجة CVSS v4.0، وقرنها بإصلاح. Canonical: https://lagune.ai/ar-AE/docs/commands/plan اللغة: ar-AE الأصل: https://lagune.ai/docs/commands/plan آخر تحديث: 2026-11-09 🛡️ حوّل ما وجدته مرحلة detect إلى خطة دفاع: قيّم كل ملاحظة بفئة ودرجة CVSS v4.0، ثم اقرنها بالإصلاح الذي يجب تطبيقه. ## طريقة الاستخدام **خطط لكل شيء** ```prompt /lagune-plan ``` **حدّد المسارات** ```prompt /lagune-plan src/routes/upload.ts ``` **ركّز على مصدر قلق** ```prompt /lagune-plan أين يمكن أن تتسرّب البيانات الحساسة ``` ## آلية العمل تكمل هذه المرحلة ما بدأته مرحلة detect. فقد وجدت detect ما يفعله نظامك والخطر الذي يحمله كل جزء منه، لذلك لا تكرر الخطة الخطر، بل تقيّم مدى خطورته وتقرر ما يجب فعله حياله. ولا تقرأ مرحلة plan الكود أبدًا، وهذا يُلزم كل إصلاح بأن يشير إلى شيء اكتشفته detect فعلًا. وتقيّم كل ملاحظة بطريقة CVSS v4.0: فئة، ومتجه CVSS v4.0 مستنتج مما سجّلته مرحلة detect وميثاق الأمان وتحسب درجته [hook `cvss`](https://lagune.ai/ar-AE/docs/hooks/cvss)، ونطاق الأولوية الذي تقع فيه تلك الدرجة. ويحمل كل إصلاح أيضًا مبدأ ميثاق الأمان الذي يصونه. على سبيل المثال: - **رفع الملفات** (الأولوية: **حرجة**) - _الفئة:_ رفع ملفات دون قيود (CWE-434). - _CVSS:_ CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N (9.3, Critical)‎. - _سبب هذه الأولوية:_ يستطيع أي شخص الوصول إلى الرفع عبر الإنترنت، وهو موجود على الخادم الذي يخزّن ملفات العملاء. - _يصون:_ III. كل مدخل غير موثوق حتى يُتحقق منه. - _الإصلاح:_ تحقق من النوع الحقيقي للملف وحجمه، وأعد تسميته عند الحفظ، وخزّن الملفات المرفوعة حيث لا يمكن تشغيلها ككود. ومن هنا تحصل على قائمة إصلاحات مقيّمة ومرتبة حسب الأولوية، كل منها مرتبط بملاحظة وجاهز لتطبّقه المرحلة التالية. والدرجة محسوبة، لا تقديرية: يحمل المتجه مدى انكشاف المشروع وما هو على المحك كـ Environmental metrics، ويستطيع أي شخص لصقه في حاسبة FIRST أو NVD والحصول على الدرجة نفسها. **نصيحة** - تبني بالكامل على مرحلة detect. فإن لم يُرصد ملف أو مصدر قلق من قبل، تخبرك بأن تشغّل `/lagune-detect` عليه أولًا. - تشغيلها مجددًا يحدّث الخطة: تختفي الإصلاحات المنجزة، وتظهر الجديدة. - تُحفظ خطة الدفاع في `.lagune/memory/plan.md`. **تعتمد على detect** لا تعمل مرحلة plan إلا على ما رصده [`/lagune-detect`](https://lagune.ai/ar-AE/docs/commands/detect) بالفعل، لذلك شغّل detect أولًا. ## التالي طبّق الخطة: [`/lagune-harden`](https://lagune.ai/ar-AE/docs/commands/harden). ## الأسئلة الشائعة ### كيف يرتّب Lagune أولويات الثغرات؟ يقيّم ‎/lagune-plan كل ملاحظة بفئة ودرجة CVSS v4.0 يحسبها hook cvss، ثم يقرنها بالإصلاح الذي يجب تطبيقه. ### هل يستخدم Lagune معيار CVSS v4.0؟ نعم. تحصل كل ملاحظة على متجه CVSS v4.0 ودرجة، يحسبهما hook cvss بالحساب نفسه الذي تستخدمه حاسبة FIRST، لذلك يستطيع أي شخص لصق المتجه هناك والحصول على الدرجة نفسها. ### هل تقرأ الخطة الكود الخاص بي؟ لا. لا تقرأ مرحلة plan الكود أبدًا، وهذا يُلزم كل إصلاح بأن يشير إلى شيء اكتشفته detect فعلًا. --- # ‎/lagune-harden: طبّق إصلاحات الأمان على الكود > طبّق إصلاحات الخطة على الكود، بأمان وواحدًا تلو الآخر. Canonical: https://lagune.ai/ar-AE/docs/commands/harden اللغة: ar-AE الأصل: https://lagune.ai/docs/commands/harden آخر تحديث: 2026-11-09 🔧 طبّق إصلاحات الخطة على الكود، بأمان وواحدًا تلو الآخر. ## طريقة الاستخدام **طبّق كل شيء** ```prompt /lagune-harden ``` **حدّد المسارات** ```prompt /lagune-harden src/routes/upload.ts ``` **حسب الأولوية** ```prompt /lagune-harden Critical و High ``` ## آلية العمل حددت الخطة كل إصلاح مسبقًا، لذلك تكتفي مرحلة harden بتطبيقه. ولأنها المرحلة الوحيدة التي تمسّ الكود، فهي تعمل بحذر: تطبّق إصلاحًا واحدًا في كل مرة ليبقى كل تغيير سهل المراجعة، ولا تُضعف ضابطًا أبدًا لتجعل الإصلاح ملائمًا. على سبيل المثال، إصلاح الرفع: - **رفع الملفات** (الحالة: **Applied**) - _ما الذي تغيّر:_ يتحقق من النوع الحقيقي للملف وحجمه، ويرفض أي شيء غير متوقع، ويعيد تسميته عند الحفظ، ويخزّنه حيث لا يمكن تشغيله ككود. - _أين:_ الدالة `handleUpload`، إضافة إلى دالة التخزين المساعدة التي تستدعيها. وإن تعذّر تطبيق إصلاح بالكامل، تفعل مرحلة harden ما تستطيع فعله بأمان وتضع على الباقي **Partial** أو **Blocked**، وتتركه مفتوحًا. **Applied لا يعني أنه مُتحقق منه** Applied لا يعني أنه أُثبت بعد. فهذه مهمة مرحلة [verify](https://lagune.ai/ar-AE/docs/commands/verify). **نصيحة** - تبني بالكامل على الخطة. فإن لم يُخطَّط لإصلاح أو ملف من قبل، تخبرك بأن تشغّل `/lagune-plan` عليه أولًا. - تشغيلها مجددًا يوائم السجل مع الواقع الحالي: تختفي التغييرات التي أُلغيت، وتظهر الإصلاحات المطبّقة حديثًا. - يُحفظ سجل التحصين في `.lagune/memory/harden.md`. **تعتمد على plan، وتغيّر الكود** تبني مرحلة harden على [`/lagune-plan`](https://lagune.ai/ar-AE/docs/commands/plan). وهي المرحلة الوحيدة التي تغيّر الكود. ## التالي أثبت أن كل إصلاح يصمد: [`/lagune-verify`](https://lagune.ai/ar-AE/docs/commands/verify). ## الأسئلة الشائعة ### هل يغيّر ‎/lagune-harden الكود الخاص بي؟ نعم. إنها المرحلة الوحيدة التي تمسّ الكود، فتطبّق إصلاحات الخطة واحدًا تلو الآخر. ### ماذا تعني Applied و Partial و Blocked؟ هي الحالة التي يسجّلها Lagune لكل إصلاح. تعني Applied أن الإصلاح طُبّق، و Partial أن جزءًا منه فقط طُبّق، و Blocked أنه تعذّر تطبيقه. و Applied لا يعني أنه أُثبت بعد. ### هل يطبّق Lagune الإصلاحات دون أن يسألني؟ يحدد وكيلك ووضع الأذونات الذي تشغّله به ما إذا كان التعديل يحتاج إلى موافقتك، لا Lagune، الذي لا يضيف بوابة تأكيد خاصة به. ومع ذلك لا يُضعف ضابطًا أبدًا لإرضاء إصلاح، وإن تعارض إصلاح مع قاعدة في ميثاق الأمان، يتوقف ويخبرك أولًا. --- # ‎/lagune-verify: أثبت أن الضوابط الأمنية تصمد > أثبت أن كل إصلاح مطبّق يصمد، ثم أغلق نهائيًا ما يصمد منها. Canonical: https://lagune.ai/ar-AE/docs/commands/verify اللغة: ar-AE الأصل: https://lagune.ai/docs/commands/verify آخر تحديث: 2026-11-09 ⚖️ أثبت أن كل إصلاح مطبّق يصمد، بقراءة الكود ومقابلته بما سجّلته مرحلة harden، ثم أغلق نهائيًا ما يصمد منها. ## طريقة الاستخدام **تحقق من كل شيء** ```prompt /lagune-verify ``` **حدّد المسارات** ```prompt /lagune-verify src/routes/upload.ts ``` **حسب الأولوية** ```prompt /lagune-verify Critical و High ``` ## آلية العمل تقرأ الكود في كل موضع سجّلته مرحلة harden وتتأكد من أنه يطابق الادعاء فعلًا. والإثبات هو تلك المقابلة، الكود مقابل السجل. ويحصل كل ضابط على واحد من ثلاثة أحكام: | الحكم | المعنى | | ---------------------------- | ------------------------------------------------ | | ✅ Risk closed | يفعل الكود بالضبط ما يدّعيه السجل. | | ❌ Risk not closed | ما زال الضابط مفتوحًا. وتعيدك verify إلى harden. | | ❓ Cannot tell from the code | الدليل غير ظاهر في الكود وحده. | ثم يُخرَج الخطر الذي ثبت إغلاقه من السلسلة، بعد تأكيدك. على سبيل المثال: - **رفع الملفات** (الحكم: **✅ Risk closed**) - _كيف أُثبت:_ قُرئ الـ handler الخاص بالرفع، وتبيّن أنه يكتشف النوع الحقيقي للملف من محتواه، ويفرض حدًا للحجم، ويرفض أي شيء آخر، تمامًا كما يدّعي السجل. - _الدليل:_ الدالة `handleUpload`، التي تكتشف النوع الحقيقي للملف من محتواه. وإن لم يُغلق الخطر، تقول verify ذلك بوضوح وتعيدك إلى [`/lagune-harden`](https://lagune.ai/ar-AE/docs/commands/harden)، لأن الإصلاح ما زال مفتوحًا. **نصيحة** - تبني بالكامل على سجل التحصين. - لا تقرأ الكود إلا للحكم عليه، ولا تُضعف ضابطًا أبدًا ولا تعيد كتابة الكود ليجتاز الحكم. - تشغيلها مجددًا يوائم الأحكام مع الواقع الحالي: تختفي الأحكام القديمة، ويُنبَّه مجددًا إلى الخطر الذي لم يعد مغلقًا. - حين يثبت إغلاق خطر، تسأل مرة واحدة، ثم تزيل تلك الملاحظة من السلسلة كلها (detect و plan و harden والتتبع). - لا تكتب تقريرًا خاصًا بها: يبقى كل حكم في كتلة ضابطه داخل `.lagune/memory/harden.md`، حيث تقرؤه مرحلة harden في التشغيل التالي. **تعتمد على harden** تبني مرحلة verify على [`/lagune-harden`](https://lagune.ai/ar-AE/docs/commands/harden). ## الدورة تُغلق حين يُخرَج كل ما هو ضمن النطاق من السلسلة، تستقر الدورة. ولا تُفتح مجددًا إلا عند تغيّر الكود. الأمان قابل للإغلاق، لذلك للمسار حالة نهائية، لا حلقة لا تنتهي. ## الأسئلة الشائعة ### كيف يتحقق Lagune من الإصلاح؟ يقرأ ‎/lagune-verify الكود ويقابله بما سجّلته مرحلة harden، ويعيد واحدًا من ثلاثة أحكام: Risk closed أو Risk not closed أو Cannot tell from the code. ### ما معنى إخراج الملاحظة من السلسلة؟ حين تُثبت verify إغلاق خطر، تُخرَج الملاحظة: تُزال من السلسلة كلها، بعد تأكيدك، فلا يُعاد معالجتها. ### هل يمكن أن ينتهي العمل الأمني يومًا؟ نعم. منهجية SDH قابلة للإغلاق: الملاحظة التي ثبت إغلاقها تُخرَج من السلسلة، لذلك للمسار حالة نهائية، لا حلقة لا تنتهي. --- # الفئات > فئات التخصصات التي يمكن لمشروع Lagune استخدامها، من OWASP إلى التحصين الخاص بكل لغة مثل JavaScript و Python و Go و Rust، وطريقة تغييرها. Canonical: https://lagune.ai/ar-AE/docs/categories اللغة: ar-AE الأصل: https://lagune.ai/docs/categories آخر تحديث: 2026-11-09 يجمع **Lagune** [**تخصصاته**](https://lagune.ai/ar-AE/docs/catalog) المدمجة في **13 فئة**. وتحدد الفئات التي يستخدمها المشروع أي التخصصات المدمجة تنضم إلى [**كتالوجه**](https://lagune.ai/ar-AE/docs/catalog)، وهي تنقسم قسمين: ما يفعله النظام، واللغة المكتوب بها. ما دامت لا توجد فئة مسجّلة، يستخدم المشروع `owasp` وحدها. ويسجّل [`/lagune-charter`](https://lagune.ai/ar-AE/docs/commands/charter) كل فئة تدعمها قراءته للمشروع، ويمكنك تغييرها بنفسك في أي وقت. ## ما يفعله النظام | الفئة | المفتاح | ما تحصّنه | | -------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | OWASP | `owasp` | مخاطر أمان التطبيقات التي يتتبعها OWASP: الحقن، وخلل التحكم في الوصول، والمصادقة، وإخفاقات التشفير | | البنية التحتية | `infra` | إعدادات الحاويات وأحمال العمل والحوسبة بلا خادم: Dockerfile و Compose وأمان Pod وصلاحيات IAM ومشغّلات FaaS | | AI / LLM | `ai` | تكاملات الذكاء الاصطناعي و LLM، ضد prompt injection والربط غير الآمن للأدوات والوكلاء والاسترجاع و MCP | | Lovable | `lovable` | تطبيقات Supabase المولّدة بالذكاء الاصطناعي (Lovable وما يشبهها): ثغرات RLS، ومفاتيح `service_role` المسرّبة، والإعدادات الافتراضية غير الآمنة | ## اللغة المكتوب بها | الفئة | المفتاح | ما تحصّنه | | ---------- | ------------ | ------------------------------------------------------------------------------------------------------------------- | | JavaScript | `javascript` | تنفيذ الكود عن بُعد عبر `eval` و `child_process`، و path traversal، و prototype pollution، في كل بيئات تشغيلها | | Python | `python` | تنفيذ الكود عن بُعد عبر إلغاء تسلسل `pickle` و YAML، والتنقل عبر سلاسل `str.format`، و class pollution | | Rust | `rust` | واجهات `unsafe` غير السليمة، وسوء استخدام `transmute`، وتجاوز سعة الأعداد الصحيحة، والسلوك غير المعرّف عند حدود FFI | | C / C++ | `c-cpp` | أخطاء سلاسل التنسيق، وتجاوز سعة المخزن المؤقت، والكتابة خارج الحدود التي تتيح تنفيذ الكود | | PHP | `php` | تجاوز المصادقة عبر type juggling، وسلاسل gadget في حقن الكائنات، والإعدادات الافتراضية غير الآمنة | | Go | `go` | أخطاء الواجهات ذات قيمة nil المحددة النوع، و data races بين goroutines، والتزامن غير الآمن في المسارات الأمنية | | Java | `java` | سلاسل gadget في إلغاء تسلسل `ObjectInputStream` التي تنتهي بتنفيذ الكود عن بُعد | | Ruby | `ruby` | سلاسل gadget في إلغاء تسلسل `Marshal.load` و YAML التي تصل إلى تنفيذ الكود عن بُعد | | .NET / C# | `dotnet` | تنفيذ الكود عن بُعد عبر إلغاء تسلسل `BinaryFormatter`، وتجاوزات الترميز التي تصل إلى XSS | **نصيحة** **Lagune** مستقل عن لغة البرمجة: يقرأ المسار كله مشروعك أيًا كانت لغته، وهذه الفئات تضيف فقط عمقًا في المزالق الخاصة بلغة واحدة. ## أضف وأزل في أي وقت الفئة نقطة بداية، لا التزام. استخدم ما يناسب المشروع الآن وغيّره في أي وقت بالمفتاح، عبر `write add` و `write remove`. ويفتح `--categories` دون قيمة أداة اختيار تفاعلية في الطرفية (المسافة للتبديل، و Enter للتأكيد، والترك فارغًا للتخطي). وخارج الطرفية، مرّر الفئات بعده. **إضافة** ```bash npx lagune write add --categories # interactive npx lagune write add --categories owasp npx lagune write add --categories owasp rust ``` **إزالة** ```bash npx lagune write remove --categories # interactive npx lagune write remove --categories owasp npx lagune write remove --categories owasp rust ``` يبدأ أول `write add` أو `write remove` من `owasp`، لذلك تترك إزالة كل الفئات قائمة فارغة، لا القائمة الافتراضية أبدًا. ويُحفظ كل تغيير في `.lagune/configs.json`، فيعمل الفريق كله بالمجموعة نفسها. ## اطّلع على ما يستخدمه المشروع يعرض `read list --categories` كل فئة وما إذا كان المشروع يستخدمها: ```bash npx lagune read list --categories # Categories # • owasp [used] Harden against the application security risks OWASP tracks # • javascript [available] Harden JavaScript and its runtimes # • php [available] Harden PHP against type-juggling auth bypass # • go [available] Harden Go against typed-nil interface bugs # ... # # No category is recorded yet, so this project uses the default: owasp. ``` اطّلع على [**الكتالوج**](https://lagune.ai/ar-AE/docs/catalog) لمعرفة التخصصات التي تحملها كل فئة. وتخصصاتك الخاصة، المكتوبة عبر [`/lagune-specialize`](https://lagune.ai/ar-AE/docs/commands/specialize)، تنضم إلى الكتالوج أيًا كانت الفئات. ## الأسئلة الشائعة ### كيف أضيف فئة؟ مرّر مفتاح الفئة إلى ‎--categories، مثل npx lagune write add --categories javascript. ويسجّل ميثاق الأمان أيضًا الفئات التي تدعمها قراءته للمشروع ما دامت لا توجد فئة مسجّلة. ### هل يمكنني استخدام أكثر من فئة؟ نعم. اسردها في السطر نفسه، واحدة تلو الأخرى. ### ما الفئة التي يجب أن يستخدمها المشروع؟ ابدأ بـ owasp، الفئة الافتراضية، ثم أضف فئة لغتك أو تقنياتك. لا تُحمَّل التخصصات إلا عند الحاجة، لذلك لا تكلّف الفئة شيئًا حتى تحتاج مرحلة ما إلى أحد تخصصاتها. --- # الكتالوج: تخصصات أمنية عند الحاجة > كيف تُحمَّل التخصصات في كتالوج مشروعك، من مرحلة عند الحاجة، ومنك مباشرة. Canonical: https://lagune.ai/ar-AE/docs/catalog اللغة: ar-AE الأصل: https://lagune.ai/docs/catalog آخر تحديث: 2026-11-09 🧠 تخصصات **Lagune** وحدات معرفة أمنية مركّزة ومستقلة عن لغة البرمجة، لا تُحمَّل إلا عند الحاجة، ولا تُحمَّل افتراضيًا أبدًا. وهي ليست أوامر. وكتالوج مشروعك هو المجموعة التي يستخدمها: التخصصات المدمجة في [فئاته](https://lagune.ai/ar-AE/docs/categories) إضافة إلى تخصصاته الخاصة. تلجأ إليها مرحلتا detect و verify أثناء عملهما، ويمكنك تحميل أي منها مباشرة في أي وقت. **نظرة عامة** *النظرة العامة التفاعلية على الكتالوج موجودة في صفحة الويب. وكل تخصص مدمج مذكور في الجدول أدناه.* **آلية العمل** ## الاستخدام بنفسك لاستخدام تخصص مباشرة، اطلب من وكيلك تحميله عبر `read catalog ` واكتب المهمة في الموجّه نفسه. فتعمل المعرفة على ما طلبته. ويعمل هذا في أي موجّه، حتى لو لم يكن له علاقة بمسار **Lagune**. على سبيل المثال، موجّه حر ومباشر لإنشاء مجموعة **RegExp** آمنة باستخدام **Python**: ```prompt حمّل التخصص regex عبر `npx lagune read catalog regex`، ثم أنشئ مجموعة من التعابير النمطية في @src/utils/regex.py للتحقق من عناوين البريد الإلكتروني وأسماء المستخدمين. ``` يستخدم هذا hook حتميًا لاختبار كل **RegExp** ضد **ReDoS**، ويُبقي الآمنة منها، وينتج شيئًا مثل: ```python import re EMAIL = re.compile(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$") USERNAME = re.compile(r"^[a-zA-Z0-9_]{3,20}$") def is_email(value: str) -> bool: return EMAIL.match(value) is not None def is_username(value: str) -> bool: return USERNAME.match(value) is not None ``` **جرّب فاحص ReDoS** اختبر نمطًا بنفسك في [**devina.io/redos-checker**](https://devina.io/redos-checker). ## التخصصات المدمجة التخصصات المدمجة مجمّعة في [**فئات**](https://lagune.ai/ar-AE/docs/categories). وهذه هي المجموعة التي تأتي مع **Lagune**: | التخصص | الفئة | التركيز | | --------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------ | | `regex` | `owasp` | **ReDoS:** أنماط تنفجر مع المدخلات المُصاغة عمدًا. | | `network` | `owasp` | **SSRF وإعادة التوجيه:** وجهات جلب أو إعادة توجيه يحددها المستخدم. | | `interpreter` | `owasp`, `lovable` | **حقن الكود:** `eval`، والتضمين الديناميكي، والاستدعاء بالاسم. | | `sql` | `owasp` | **قواعد البيانات العلائقية:** الحقن، واستدعاءات ORM الخام، والصلاحيات، ومدى وصول المحرك. | | `path` | `owasp` | **مسارات نظام الملفات:** traversal، والبايت الصفري، وتدفقات NTFS، وزرع الملفات. | | `upload` | `owasp` | **رفع الملفات:** النوع والتوقيع، والمحتوى الخبيث، والتخزين، والحدود. | | `access-control` | `owasp`, `lovable` | **المصادقة والتفويض والجلسات:** IDOR، والإسناد الجماعي، والمستأجرون، والجلسات. | | `credential-endpoint` | `owasp`, `lovable` | **التخمين والروبوتات:** القوة الغاشمة، ورش كلمات المرور، وحشو بيانات الاعتماد، وتحديد المعدل. | | `federation` | `owasp` | **الثقة في الرموز:** OAuth و OIDC، و SAML، والتحقق من JWT، وتسجيل الدخول برمز QR. | | `http-request` | `owasp` | **مصدر الطلب:** CSRF، وأخطاء إعداد CORS، وانتحال IP العميل. | | `transport` | `owasp` | **أمان القناة:** إعداد TLS، و HTTPS مقابل النص الصريح، و HSTS، والتثبيت. | | `crypto` | `owasp`, `lovable` | **التشفير أثناء التخزين:** الخوارزميات الضعيفة أو المخصصة، و CSPRNG، وإدارة المفاتيح. | | `secrets` | `owasp`, `lovable` | **بيانات الاعتماد المكتوبة في الكود:** مفاتيح ورموز وكلمات مرور حرفية في المصدر. | | `api-endpoint` | `owasp` | **الواجهات غير REST:** GraphQL و gRPC وتفويض WebSocket، و DoS، والمخطط. | | `payment` | `owasp`, `lovable` | **مسار الدفع:** التحقق من البوابة على الخادم، والاستدعاءات الموقّعة، و idempotency. | | `xml` | `owasp` | **تحليل XML:** XXE، والكيانات الخارجية، وتوسّع billion-laughs. | | `csv` | `owasp` | **حقن الصيغ:** خلايا جداول بيانات تبدأ بـ `=`/`+`/`-`/`@`. | | `container` | `owasp`, `infra` | **إعداد الحاويات:** root، و capabilities، وربط socket، وتحصين الصورة. | | `infra` | `infra` | **البنية التحتية ككود:** Terraform و Dockerfile و GitHub Actions. | | `serverless` | `owasp`, `infra`, `lovable` | **دوال FaaS:** أقل صلاحيات IAM، ومدخلات الأحداث، والسياق، والأسرار. | | `llm` | `ai`, `lovable` | **مخاطر الذكاء الاصطناعي و LLM:** prompt injection، والصلاحيات الذاتية، و RAG، و MCP، والمخرجات. | | `supabase` | `lovable` | **الخادم الخلفي على Supabase:** RLS معطّل افتراضيًا، وسياسات يولّدها الذكاء الاصطناعي خطأً، ونموذج المفاتيح. | | `browser` | `javascript`, `lovable` | **مخاطر جهة العميل:** XSS، و CSP، والتأطير، والتخزين، وغيرها. | | `javascript` | `javascript` | **مخاطر على مستوى اللغة:** RCE، و prototype pollution، وغيرها. | | `python` | `python` | **مخاطر على مستوى اللغة:** RCE عبر `pickle`، و class pollution، و `-O`، وغيرها. | | `rust` | `rust` | **سلامة `unsafe`:** سلوك غير معرّف من مستدعين آمنين، و `transmute`، والتجاوز. | | `java` | `java` | **إلغاء التسلسل والكود المتنقل:** سلاسل `readObject`، واختطاف الكائنات. | | `ruby` | `ruby` | **إلغاء التسلسل و `open`:** إحياء `Marshal`/YAML، وخاصية الأنابيب. | | `php` | `php` | **type juggling و `unserialize`:** التجزئات السحرية، وسلاسل POP. | | `go` | `go` | **typed-nil و data races:** `nil != nil`، و goroutines بذاكرة مشتركة. | | `c-cpp` | `c-cpp` | **سلاسل التنسيق:** `printf(user_input)`، والكتابة في أي موقع عبر `%n`. | | `dotnet` | `dotnet` | **مخاطر على مستوى المنصة:** RCE عبر `BinaryFormatter`، و `@Html.Raw`، وثغرات enum. | معظم المعرفة المدمجة مستخلصة من OWASP. اطّلع على [**مصادر OWASP**](https://lagune.ai/ar-AE/docs/references/owasp-sources) للربط الكامل بين كل تخصص وصفحات هجوم OWASP و Cheat Sheet المرجعية الخاصة به. وتستمد بعض الوحدات الخاصة بتقنيات معينة معرفتها من إرشادات الجهة المطوّرة نفسها بدلًا من ذلك: فالتخصص `supabase`، مثلًا، مأخوذ من توثيق Supabase ومن CVE-2025-48757. ## تخصصاتك الخاصة تنمو التخصصات المدمجة بإضافة ملف معرفة واحد وصف فهرس واحد، لا بأمر جديد أبدًا. وتضيف تخصصاتك الخاصة بالطريقة نفسها، عبر [`/lagune-specialize`](https://lagune.ai/ar-AE/docs/commands/specialize): وجّهه إلى مقال أو موضوع، فيستخلص تخصصًا جديدًا في مشروعك، يتمثل في الملف تحت `.lagune/catalog/` ومدخله في `.lagune/configs.json`. وتخصصاتك موجودة دائمًا في الكتالوج، أيًا كانت فئاته، وأي تخصص منها يحل محل التخصص المدمج الذي يحمل الاسم نفسه. **داخليًا، يحمّل Lagune التخصصات تلقائيًا عند الحاجة** حين تصادف مرحلة detect أو verify سياقًا يغطيه تخصص ما، تحمّل ذلك التخصص بنفسها عبر `read catalog `. ويحدث هذا تلقائيًا، كجزء من المرحلة. ولا تحتاج إلى فعله يدويًا ليعمل. ## اكتشف ما هو متاح لسرد كتالوج مشروعك من الطرفية، تخصص واحد في كل سطر مع وسومه: ```bash npx lagune read catalog # regex: Regular Expression [required] # network: Requests, Webhook, URL Fetch, Socket, IMDS, Redirect # interpreter: Evaluator, Sink, Shell, Dynamic Execution # ... ``` التخصص المعلَّم بـ `[required]` يُطبَّق دائمًا، أيًا كان العمل. وتعتمد التخصصات المدمجة التي تتضمنها القائمة على [**فئات**](https://lagune.ai/ar-AE/docs/categories) مشروعك. **لا تُحمَّل التخصصات افتراضيًا** تُجلب المعرفة ذات الصلة لما يكونه المشروع فعلًا، بدلًا من تشغيل كل فحص افتراضيًا. ## الأسئلة الشائعة ### ما هو التخصص في Lagune؟ وحدة معرفة أمنية مركّزة ومستقلة عن لغة البرمجة، لا تُحمَّل إلا عند الحاجة، ولا تُحمَّل افتراضيًا أبدًا. وليست أمرًا مثل مهارات الوكيل. ### ما هو كتالوج المشروع؟ التخصصات التي يستخدمها المشروع: التخصصات المدمجة في فئاته إضافة إلى تخصصاته الخاصة. وما دامت لا توجد فئة مسجّلة، يستخدم OWASP وحده. ### هل تُحمَّل التخصصات افتراضيًا؟ لا. لا تُحمَّل إلا عند الحاجة، لما يكونه المشروع فعلًا. ### كيف أحمّل تخصصًا مباشرة؟ في الموجّه نفسه الذي يحمل المهمة، اطلب من وكيلك تشغيل npx lagune read catalog . --- # ‎/lagune-specialize: درّب تخصصًا أمنيًا بنص عادي > استخلص من مصدر أو موضوع أمني تقدّمه تخصصًا جديدًا يُحمَّل عند الحاجة. Canonical: https://lagune.ai/ar-AE/docs/commands/specialize اللغة: ar-AE الأصل: https://lagune.ai/docs/commands/specialize آخر تحديث: 2026-11-09 🎓 علّم **Lagune** تخصصًا جديدًا، من مصدر أو موضوع تقدّمه له. يقرأ المادة ويستخلص منها تخصصًا مركّزًا، للدفاع فقط، بالشكل نفسه تمامًا الذي عليه [التخصصات المدمجة](https://lagune.ai/ar-AE/docs/catalog)، فتحمّله مرحلتا detect و verify بعد ذلك مثل أي تخصص آخر. وهو يدقّق ويشرح فقط: لا يكتب أبدًا مدخلات هجومية أو أدوات استغلال، ولا يمسّ الكود أبدًا. **من مقال** ```prompt # رابط أو مرجع: يستخلص منه Lagune الدفاع /lagune-specialize https://owasp.org/www-community/attacks/SQL_Injection ``` **من أداة استغلال** ```prompt # هجوم كمصدر: يبقى التخصص هو الدفاع /lagune-specialize "' OR 1=1 -- يدسّ SQL في نص الاستعلام" ``` **من موضوع** ```prompt # أو اذكر فقط ما يجب تغطيته /lagune-specialize SQL injection ``` **قد يكون الهجوم هو المصدر، لكنه لا يكون الناتج أبدًا** لا بأس بتوجيهه إلى هجوم حين يكون الهدف الدفاع ضده: فشرح أداة الاستغلال مادة دراسية يستخلص منها الدفاع. والتخصص الذي ينتجه يدقّق ويشرح دائمًا، ولا ينتج أبدًا أداة استغلال عاملة أو payload أو وسيلة تهرّب. ## ما يكتبه النتيجة ملفان في مشروعك، يُضافان إلى المستودع ويمكن مراجعتهما مع الكود: - التخصص في `.lagune/catalog/.md`، بشكل [التخصصات المدمجة](https://lagune.ai/ar-AE/docs/catalog) نفسه. - مدخله في `.lagune/configs.json`، حيث يفهرس مشروعك تخصصاته الخاصة ليدمجها الكتالوج مع التخصصات المدمجة. ثم يسرد الكتالوج ليتأكد من وجود المدخل الجديد. وتخصصاتك الخاصة موجودة دائمًا في الكتالوج، أيًا كانت فئاته. ولا تضيف أمرًا أبدًا ولا تمسّ الحزمة: التخصص الجديد ملف معرفة واحد ومدخل فهرس واحد، يُكتبان في مشروعك. ## التحسين، لا الاستبدال أبدًا إنشاء تخصص باسم موجود بالفعل، سواء كان مدمجًا مثل `regex` أو تخصصًا أنشأته من قبل، **يوائم** الملف الحالي مع الواقع الحالي بدلًا من استبداله. فيقرأ ما هو موجود، ويدمج المعرفة الجديدة، ويُبقي ما لا يزال صحيحًا، ويعيد كتابة ما تغيّر. ولا يُحذف شيء دون أن يُراجع. وتخصصك يحل محل التخصص المدمج الذي يحمل الاسم نفسه، فيمكنك صقل تخصص مدمج لمشروعك دون أن تفقده. **نصيحة** - يُحمَّل التخصص الجديد تمامًا مثل التخصص المدمج: تلتقطه مرحلتا detect و verify عند الحاجة، أو حمّله بنفسك عبر `npx lagune read catalog ` وكلّفه بمهمة. - حين يكون للمادة أصل يمكن تحديده (مقال، أو مؤلف، أو رابط، أو معيار)، ينسب التخصص الفضل إليه. أما الموضوع المجرد فلا مصدر له. **ملاحظة** **لا يعمل إلا عندما تستدعيه:** لا يبدؤه الوكيل من تلقاء نفسه أبدًا. ## الأسئلة الشائعة ### كيف أضيف تخصصًا أمنيًا مخصصًا؟ شغّل ‎/lagune-specialize مع مصدر أو موضوع. يستخلص منه تخصصًا للدفاع فقط، يُكتب في ‎.lagune/catalog/.md مع مدخله في ‎.lagune/configs.json. ### هل يمكن أن يتعلم Lagune من شرح لأداة استغلال؟ نعم، كمصدر، لا كناتج أبدًا. قد يكون الهجوم هو المصدر، لكنه لا يكون المنتج أبدًا. ولا يكتب specialize أبدًا مدخلات هجومية أو أدوات استغلال. ### هل يستبدل specialize التخصصات المدمجة؟ لا. إنه يحسّنها، ولا يستبدلها أبدًا. --- # ‎/lagune-prove: إثبات مفهوم للدفاع فقط > حوّل كل ملاحظة مكتشفة إلى إثبات مفهوم (PoC) قابل للتشغيل، للدفاع فقط، مع نشرة أمنية من أجل الإفصاح المسؤول. Canonical: https://lagune.ai/ar-AE/docs/commands/prove اللغة: ar-AE الأصل: https://lagune.ai/docs/commands/prove آخر تحديث: 2026-11-09 🧪 حوّل كل ملاحظة مكتشفة إلى دليل قابل للتشغيل، للدفاع فقط، من أجل الإفصاح المسؤول. لكل ملاحظة في خريطة detect، يكتب نشرة أمنية مكتفية بذاتها واختبارًا يتحقق من **المسار الآمن**، فيفشل الاختبار ما دامت المشكلة قائمة وينجح بعد إصلاح الكود. **نصيحة** تبقى اختبارات **Lagune** معزولة تحت `.lagune/`، بعيدًا عن مجموعة اختباراتك. ## طريقة الاستخدام **كل الملاحظات** ```prompt /lagune-prove ``` **ملاحظة محددة بالاسم** اطّلع على أسماء الملاحظات المتتبَّعة بالفعل: ```prompt npx lagune read list --findings # Findings # ... # • SQL injection في البحث عن المستخدم # ... ``` ```prompt # ثم أثبت إحداها /lagune-prove SQL injection في البحث عن المستخدم ``` ## آلية العمل يقرأ الكود المصدري الذي تشير إليه كل ملاحظة، ويكتب مجلدًا لكل ملاحظة مُثبتة تحت `.lagune/proofs/`، يحتوي على ملفين بالضبط: | الملف | ما هو | | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | | `report.test.mjs` (أو `.cjs`) | الاختبار. يعمل على Poku إن كان مشروعك يستخدمه بالفعل، وإلا فعلى مشغّل الاختبارات الأصلي في Node.js، فلا يحتاج إلى تثبيت أي شيء. | | `report.md` | نشرة أمنية مكتفية بذاتها: الخطورة، والأثر، وطريقة إعادة إنتاج المشكلة، وأمر التشغيل، ويمكن قراءتها وحدها. | الإثباتات مكتوبة دائمًا بلغة JavaScript، فتبقى قابلة للنقل أيًا كانت لغة مشروعك. ويربط فهرس `README.md` كل الإثباتات ويوفّر أمرًا واحدًا لتشغيلها كلها. **نصيحة** - إنه **اختياري ومستقل**: ليس من المراحل الخمس، ولا جزءًا من سلسلة التتبع. - لا يكتب إلا داخل `.lagune/proofs/` ولا يمسّ أبدًا مُخرَجات المراحل أو الكود، الذي يقرؤه فقط. - الملاحظة التي لا يعيد اختبارها إنتاج المشكلة لا تحصل على إثبات، ويخبرك بأن تشغّل [`/lagune-detect`](https://lagune.ai/ar-AE/docs/commands/detect) على ذلك الموضع لمواءمته مع الواقع الحالي. - تشغيله مجددًا يوائم الإثباتات مع الواقع الحالي: يُحذف مجلد الملاحظة التي زالت أو لم تعد تُعاد إنتاجها. **ملاحظة** **لا يعمل إلا عندما تستدعيه:** لا يبدؤه الوكيل من تلقاء نفسه أبدًا. **يبني على detect** يقرأ prove خريطة detect الناتجة عن [`/lagune-detect`](https://lagune.ai/ar-AE/docs/commands/detect)، لذلك شغّل detect أولًا. ## للدفاع فقط، وبتصريح قبل توليد أي شيء، يتأكد من أنك مصرّح لك باختبار الهدف، ويرفض أي طلب لأداة استغلال عاملة أو payload هجومي أو تهرّب من الاكتشاف. يُظهر الإثبات السلوك الآمن، ولا يُخرج أبدًا مدخلًا هجوميًا. ## من الإثبات إلى الإفصاح ملفا كل ملاحظة مُثبتة مكانهما معًا في **GitHub Gist خاص** للإبلاغ عن الثغرة. فهما دليل على مشكلة قائمة لم يُفصح عنها، لذلك يُبقيهما ملف `.gitignore` داخل `.lagune/proofs/` خارج كل commit: شاركهما عبر ذلك الـ Gist فقط حتى يحلّ المشرفون المشكلة. ويبقى إغلاق الملاحظة في سلسلة **Lagune** مهمة [`/lagune-harden`](https://lagune.ai/ar-AE/docs/commands/harden) و [`/lagune-verify`](https://lagune.ai/ar-AE/docs/commands/verify): ينتج prove الأدلة، ولا يُغلق شيئًا. ## الأسئلة الشائعة ### هل يولّد Lagune أدوات استغلال؟ لا. يكتب ‎/lagune-prove أدلة للدفاع فقط: اختبارًا يتحقق من المسار الآمن، فيفشل ما دامت المشكلة قائمة وينجح بعد إصلاح الكود، إضافة إلى نشرة أمنية من أجل الإفصاح المسؤول. ### ماذا ينتج prove؟ ملفين لكل ملاحظة: اختبارًا (report.test.mjs أو ‎.cjs) ونشرة أمنية (report.md). ### كيف أفصح بمسؤولية عن خلل وجده Lagune؟ يكتب prove نشرة أمنية مكتفية بذاتها يمكنك مشاركتها عبر قناة خاصة مثل GitHub Gist خاص، وفق مبادئ الإفصاح المسؤول. --- # إعداد hooks: اختر ما تفحصه > اختر ما تستثنيه hooks التي تفحص الملفات، لها جميعًا أو لواحد منها. Canonical: https://lagune.ai/ar-AE/docs/hooks/configure اللغة: ar-AE الأصل: https://lagune.ai/docs/hooks/configure آخر تحديث: 2026-11-09 تحدد الكتلة `checkers` في `.lagune/configs.json` ما تستثنيه hooks التي تفحص الملفات، لها جميعًا أو لواحد منها. ## طريقة الإعداد أضف المسارات والأنماط أو أزلها من سطر الأوامر، مع وضع النمط بين علامتي اقتباس لتتركه الصدفة كما كُتب: ```bash npx lagune write add --ignore test/fixtures npx lagune write add --ignore 'packages/*/dist' --checker secrets npx lagune write remove --ignore test/fixtures ``` أو اخترها من إعدادات [لوحة التحكم](https://lagune.ai/ar-AE/docs/get-started/dashboard)، أو حددها في الملف: ```json { "checkers": { "ignore": ["test/fixtures"], "secrets": { "gitignore": false, "ignore": ["test/fixtures", "temp"] } } } ``` ### الإعدادات | المفتاح | القيمة | الافتراضي | الوصف | | ----------- | ------------------------------ | --------- | ------------------------------------------------------------------------------ | | `gitignore` | `true` أو `false` | `true` | يستثني ما يتجاهله **Git**. أما الملف الذي يتتبعه **Git** فيُفحص في كل الأحوال. | | `ignore` | مسارات أو أنماط من جذر المشروع | `[]` | يستثني ما يطابقه كل منها وكل ما تحته، حتى الملف الذي يتتبعه **Git**. | في المستوى الأعلى من `checkers`، ينطبق المفتاح على كل الفاحصات. وتحت اسم فاحص، ينطبق على ذلك الفاحص وحده ويحل محل المفتاح المشترك، ففي المثال يفحص `secrets` ما يتجاهله **Git** ويستثني `test/fixtures` و `temp`. وحين يمنح `write add --ignore` فاحصًا أول قائمة خاصة به، تبدأ تلك القائمة نسخةً من القائمة المشتركة. ### الأنماط يبدأ النمط من جذر المشروع، لذلك يصل `*.generated.ts` إلى الملفات الموجودة هناك فقط، ويصل `**/*.generated.ts` إليها على أي عمق. وتُطابق الأسماء تمامًا، بما في ذلك حالة الأحرف. | النمط | ما يستثنيه | | ------------------- | ------------------------------------- | | `dist` | `dist` في جذر المشروع | | `packages/*/dist` | `dist` في كل مجلد تحت `packages` | | `**/dist` | كل `dist`، على أي عمق | | `**/*.generated.ts` | كل ملف ينتهي اسمه بـ `.generated.ts` | | `fixture-?` | `fixture-a` و `fixture-1` وما شابههما | | `[ab]-cache` | `a-cache` و `b-cache` | | `[*]x` | `*x`، مع `*` حرفية | ## كيف تقرأ النتيجة ينتهي التقرير بعدد المسارات التي استثناها الفحص، حسب ما يتجاهلها: ```text Skipped 25 paths that Git ignores and 3 paths that .lagune/configs.json ignores. Name one with --dir or --file to scan it. ``` المسار المحدد عبر `--dir` أو `--file` يُفحص أيًا كانت الإعدادات. والإعداد الذي لا يستطيع المحرك قراءته يوقف الفاحص بخطأ يذكره، مثل نمط يبدأ بـ `!` أو بمسافة، أو يخرج من المشروع، أو يترك قوسًا مفتوحًا، أو تستغرق مطابقته وقتًا طويلًا. ## الأسئلة الشائعة ### هل يحدد Lagune هذه الإعدادات نيابة عني؟ لا. يسرد ميثاق الأمان المجلدات المُضافة إلى المستودع التي تُظهر قراءته أنها ليست من الكود الذي يجب الدفاع عنه، مثل بيانات الاختبار المكتوبة لتبدو ضعيفة، ولا يسجّل إلا ما تختاره منها بالرقم. ### متى يجب أن يفحص الفاحص ما يتجاهله Git؟ حين لا يكون المستودع موثوقًا لديك، لأن ملفات ‎.gitignore الخاصة به قد تخفي كودًا، أو حين قد يحمل مجلد build مفتاحًا مُدرجًا وقت البناء. اضبط gitignore على false لكل الفاحصات أو لواحد منها. --- # hook agent: اكتشف حلقات الوكلاء غير المقيّدة > افحص قاعدة الكود بحثًا عن استدعاءات الوكلاء و LLM التي لا حد لخطواتها أو وقتها، أو قيّم استدعاءً واحدًا، من سطر الأوامر. Canonical: https://lagune.ai/ar-AE/docs/hooks/agent اللغة: ar-AE الأصل: https://lagune.ai/docs/hooks/agent آخر تحديث: 2026-11-09 ينبّه hook `agent` إلى **بيئات تشغيل الوكلاء التي تدور في حلقات دون حد للأدوار أو الميزانية أو الوقت**، وهي ثغرة الاستقلالية المنفلتة التي تحوّل مدخلًا مُصاغًا عمدًا إلى تكلفة بلا حدود أو إلى تصعيد عبر prompt injection. وهو **مدرك للغة البرمجة**، ويغطي منظومتي أطر عمل الوكلاء: **JavaScript** (بيئة التشغيل `query` في agent SDK الخاصة بـ **Claude**) و **Python** (**LangChain** و **LangGraph** و **CrewAI** و **OpenAI Agents**). وهو المحرك الحتمي خلف [التخصص `llm`](https://lagune.ai/ar-AE/docs/catalog)، ويمكنك تشغيله بنفسك في وضع **scan** أو **check**. ## التشغيل **افحص قاعدة الكود** ```bash npx lagune read agent # scans the whole project npx lagune read agent --dir src/ai # scans a directory npx lagune read agent --file chat.ts # scans a single file ``` **تحقق من استدعاء** ```bash npx lagune read agent --lang javascript --pattern 'query({ prompt })' # => uncapped npx lagune read agent --lang javascript --pattern 'query({ prompt, options: { maxTurns: 5 } })' # => safe npx lagune read agent --lang python --pattern 'AgentExecutor(agent=a, max_iterations=None)' # => uncapped ``` كل سطر تحت **Uncapped agent loops found**، في ملف يستورد agent SDK، هو إما بيئة التشغيل `query` في agent SDK الخاصة بـ Claude مستدعاة دون حد للأدوار أو الميزانية أو الوقت (JavaScript، بلا حد افتراضيًا)، وإما إزالة صريحة للحد الافتراضي لإطار العمل مثل `max_iterations=None` / `max_turns=None` (Python، بحد افتراضيًا). وأي منهما ينتهي برمز خروج غير صفري. أما `generateText`/`streamText` في Vercel AI SDK فتعملان افتراضيًا بخطوة واحدة (`stopWhen: stepCountIs(1)`)، لذلك لا يمكن للاستدعاء المجرد هناك أن يدور في حلقة ولا يُنبَّه إليه، ولا يُخلط أبدًا بين `db.query(...)` العادي واستدعاء وكيل. والتشغيل النظيف يطبع `no uncapped agent loops found`. ## كيف تقرأ الحكم | الحكم | المعنى | | ---------- | ------------------------------------------------------------------------------------- | | `uncapped` | استدعاء لبيئة التشغيل `query` دون حد (JS)، أو إزالة صريحة للحد (`=None`، Py). | | `safe` | استدعاء `query` يضع حدًا، أو توليد بخطوة واحدة، أو استدعاء لإطار عمل محدود افتراضيًا. | | `invalid` | لا يحتوي المقتطف على استدعاء وكيل يمكن التعرف عليه للحكم عليه. | ### خيارات CLI | الخيار | القيمة | الوصف | | ----------- | --------- | -------------------------------------------------------------------- | | `--pattern` | مقتطف كود | تحقق من استدعاء واحد. كرّره للتحقق من عدة استدعاءات، بحكم في كل سطر. | | `--lang` | لغة برمجة | مطلوب مع `--pattern`: `javascript` أو `python`. | | `--dir` | دليل | يحصر الفحص في دليل. يتكرر ويُجمع مع `--file`. | | `--file` | ملف | يحصر الفحص في ملف واحد. يتكرر ويُجمع مع `--dir`. | دون أي خيار، يفحص المشروع كله. ويحتاج `--pattern` إلى `--lang` ولا يمكن جمعه مع `--dir` أو `--file`. ### اختر ما يفحصه يستثني ما يتجاهله **Git**. ولاستثناء المزيد، أو لفحص ما يتجاهله **Git**، امنح `agent` إعدادات خاصة به: ```bash npx lagune write add --ignore test/fixtures --checker agent ``` ```json { "checkers": { "agent": { "gitignore": false, "ignore": ["test/fixtures"] } } } ``` تشرح صفحة [إعداد hooks](https://lagune.ai/ar-AE/docs/hooks/configure) كل إعداد. **أفضل جهد، لا تغطية شاملة** حلقة الوكيل المكتوبة يدويًا، بأي لغة، تتجاوز قدرة الفحص الثابت. تعامل مع هذا كحد أدنى قوي، لا كجرد كامل. **نصيحة** لا يحسم hook إلا مسألة الحد: أما تحديد نطاق القدرات، وخلط مستويات الثقة، والتفويض، فهي أحكام يظل [التخصص `llm`](https://lagune.ai/ar-AE/docs/catalog) يغطيها. ## الأسئلة الشائعة ### لماذا يجب تقييد حلقة الوكيل؟ يمكن دفع الوكيل غير المقيّد إلى تكرار بلا حدود، أو تكلفة بلا حدود، أو تصعيد عبر prompt injection. وضبط maxTurns/maxBudgetUsd/stopWhen/signal يقيّده، وينبّه hook agent إلى استدعاء بيئة التشغيل query الذي لا يضبط أيًا منها. --- # hook cors: دقّق مصادر CORS > افحص الكود المصدري بحثًا عن قائمة سماح لمصادر CORS يمكن تجاوزها، أو قيّم قيمة مصدر واحدة بحثًا عن وصول متساهل أكثر من اللازم، من سطر الأوامر. Canonical: https://lagune.ai/ar-AE/docs/hooks/cors اللغة: ar-AE الأصل: https://lagune.ai/docs/hooks/cors آخر تحديث: 2026-11-09 hook `cors` هو المحرك الحتمي خلف [التخصص `http-request`](https://lagune.ai/ar-AE/docs/catalog)، ويمكنك تشغيله بنفسك. ويعمل بوضعين من أمر واحد: **scan** يفحص الكود المصدري بحثًا عن **قائمة سماح للمصادر يمكن تجاوزها** (تعبير نمطي للتحقق من المضيف يتسلل منه مضيف المهاجم)، و **score** يقيّم قيمة **مصدر CORS** واحدة على أنها `wildcard` أو `null` أو `safe`. ## افحص قاعدة كود دون أي خيار، يفحص المشروع كله. **المشروع كله** ```bash npx lagune read cors ``` **دليل** ```bash npx lagune read cors --dir src/server ``` **ملف واحد** ```bash npx lagune read cors --file internal/auth/origin.go ``` يسرد كل قائمة سماح يمكن تجاوزها تحت عنوان واحد، مجمّعة حسب الملف. فأداة التحقق من المضيف التي يقع فيها `.+`/`.*` في جزء authority قبل لاحقة المضيف الموثوق (`^https?://.+\.trusted\.com`) تسمح لمضيف مهاجم مثل `your-site.com.attacker.com` بالتسلل. ```text Origin-allowlist patterns with a greedy wildcard (bypassable, review): internal/auth/origin.go ^https?://.+\.trusted\.com ``` هذا مؤشر للمراجعة، لا ملاحظة محسومة: فلا يمكن الحسم من النص وحده ما إذا كان التعبير النمطي يتحكم في قرار ثقة حقيقي، لذلك لا يغيّر الفحص رمز الخروج أبدًا. اقرأ كل واحد منها وتأكد من أن قائمة السماح تقارن بالتطابق الكامل. وحين لا يُعثر على شيء، يطبع سطرًا واحدًا. ```bash npx lagune read cors --dir src/clean # => no bypassable origin allowlist found ``` ## قيّم مصدرًا مرّر كل مصدر عبر `--origin`. يطبع hook كلمة واحدة لكل مصدر، وينتهي برمز خروج غير صفري عند أي `wildcard` أو `null`. **مصدر واحد** ```bash npx lagune read cors --origin '*' # => wildcard npx lagune read cors --origin 'null' # => null npx lagune read cors --origin 'https://app.example.com' # => safe ``` **عدة مصادر** كرّر `--origin` لتقييم قائمة سماح كاملة في استدعاء واحد، بحكم في كل سطر، بالترتيب. ```bash npx lagune read cors \ --origin 'https://app.example.com' \ --origin '*' \ --origin 'null' # => safe # => wildcard # => null ``` | الحكم | المعنى | | ---------- | ----------------------------------------------------------------------------------------------------- | | `safe` | ليس `*` ولا `null` ولا نمط glob يحتوي على `*`. ولا يضمن أن المصدر سليم الصياغة. | | `wildcard` | `*`، أو نمط glob للنطاق الفرعي أو المضيف أو المنفذ: يمكن لأي موقع (أو لمجموعة واسعة) قراءة الاستجابة. | | `null` | المصدر `null`، الذي يمكن لإطارات iframe المعزولة وعمليات إعادة التوجيه تزويره. | لا يعني السماح إلا `safe`، و `--origin` حَكَم على القيمة: يحكم على القيمة لا على الـ handler، لذلك تحقق من الـ handler عبر التخصص `http-request`. ### خيارات CLI | الخيار | القيمة | الوصف | | ---------- | ------ | --------------------------------------------------------------- | | `--origin` | مصدر | قيّم قيمة مصدر واحدة. كرّره لتقييم عدة مصادر، واحدًا في كل سطر. | | `--dir` | دليل | يحصر الفحص في دليل. يتكرر ويُجمع مع `--file`. | | `--file` | ملف | يحصر الفحص في ملف واحد. يتكرر ويُجمع مع `--dir`. | دون أي خيار، يفحص المشروع كله. و `--origin` هو وضع score ولا يمكن جمعه مع `--dir` أو `--file`. ### اختر ما يفحصه يستثني ما يتجاهله **Git**. ولاستثناء المزيد، أو لفحص ما يتجاهله **Git**، امنح `cors` إعدادات خاصة به: ```bash npx lagune write add --ignore test/fixtures --checker cors ``` ```json { "checkers": { "cors": { "gitignore": false, "ignore": ["test/fixtures"] } } } ``` تشرح صفحة [إعداد hooks](https://lagune.ai/ar-AE/docs/hooks/configure) كل إعداد. **ما لا يغطيه** يقرأ الفحص شكل **التعبير النمطي القابل للتجاوز**، ويقيّم `--origin` **قيم** المصادر. ويبقى نمطان على مستوى الكود المصدري خارج نطاقه: عكس `Origin` الخاص بالطلب (يعيد الخادم `Origin` الوارد كما هو، أو يقرنه ببيانات الاعتماد)، وقائمة سماح متساهلة تعتمد على `endsWith`/substring. تعرّف عليهما في الكود وتعامل معهما كما يصف [التخصص `http-request`](https://lagune.ai/ar-AE/docs/catalog). ## الأسئلة الشائعة ### لماذا يُعد مصدر CORS بقيمة null خطيرًا؟ ترسل إطارات iframe المعزولة وبعض عمليات إعادة التوجيه Origin: null، لذلك تمنح قائمة السماح التي تثق في null تلك السياقات صلاحية القراءة. وينبّه hook cors إليه إلى جانب wildcard. ### كيف أكتشف قائمة سماح لمصادر CORS يمكن تجاوزها؟ شغّل npx lagune read cors على قاعدة الكود. ينبّه إلى التعبير النمطي للتحقق من المضيف الذي يقع فيه wildcard الجشع قبل اللاحقة الموثوقة، فيتسلل مضيف مهاجم مثل your-site.com.attacker.com. --- # hook crypto: اكتشف التشفير الضعيف > افحص قاعدة الكود بحثًا عن عناصر التشفير الضعيفة، أو قيّم مقتطفًا واحدًا، من سطر الأوامر. Canonical: https://lagune.ai/ar-AE/docs/hooks/crypto اللغة: ar-AE الأصل: https://lagune.ai/docs/hooks/crypto آخر تحديث: 2026-11-09 ينبّه hook `crypto` إلى **عناصر التشفير الضعيفة** في موضع الاستدعاء: خوارزمية تشفير مُهملة، أو وضع غير آمن، أو دالة تجزئة مكسورة. وهو **مدرك للغة البرمجة**، يقرأ كل ملف بقواعده الخاصة فلا يُنبَّه أبدًا إلى بنية Python في ملف Rust، وهو المحرك الحتمي خلف [التخصص `crypto`](https://lagune.ai/ar-AE/docs/catalog)، ويمكنك تشغيله بنفسك في وضع **scan** أو **check**. ## التشغيل **افحص قاعدة الكود** ```bash npx lagune read crypto # scans the whole project npx lagune read crypto --dir src # scans a directory npx lagune read crypto --file hash.ts # scans a single file ``` **تحقق من مقتطف** ```bash npx lagune read crypto --lang javascript --pattern 'createCipher("aes-256-cbc", k)' # => weak npx lagune read crypto --lang python --pattern 'hashlib.md5(data)' # => review npx lagune read crypto --lang go --pattern 'sha256.Sum256(data)' # => safe ``` يطبع الفحص قسمين على الأكثر. **Weak cryptography found** هو مجموعة الملاحظات (DES/3DES/RC4/Blowfish/RC2، ووضع ECB): كل منها عنصر تشفير مكسور، لذلك ينتهي hook برمز خروج غير صفري. و **Cryptography to review manually** مجموعة مؤشرات لا يستطيع الحكم عليها وحده: دالة تجزئة MD5/SHA-1 (مكسورة للاستخدام الأمني، لكنها مشروعة كمجموع اختباري عادي، فالنية هي التي تحسم)، أو مولّد أرقام عشوائية غير تشفيري في سياق أمني، أو مقارنة غير آمنة من حيث التوقيت. والتشغيل النظيف يطبع `no weak cryptography found`. ## كيف تقرأ الحكم | الحكم | المعنى | | --------- | ------------------------------------------------------------------------------------------- | | `weak` | يستخدم المقتطف عنصر تشفير مكسورًا (DES/3DES، أو RC4، أو Blowfish، أو RC2، أو وضع ECB). | | `review` | عنصر يعتمد على النية: دالة تجزئة MD5/SHA-1، أو مولّد أرقام عشوائية غير تشفيري في سياق أمني. | | `safe` | يستخدم المقتطف التشفير، ولم يُعثر على عنصر ضعيف. | | `invalid` | لا يحتوي المقتطف على بنية تشفير يمكن التعرف عليها للحكم عليها. | ### خيارات CLI | الخيار | القيمة | الوصف | | ----------- | --------- | --------------------------------------------------------------------------------------------------------------- | | `--pattern` | مقتطف كود | تحقق من مقتطف واحد. كرّره للتحقق من عدة مقتطفات، بحكم في كل سطر. | | `--lang` | لغة برمجة | مطلوب مع `--pattern`: واحدة من javascript و python و go و java و kotlin و php و ruby و rust و csharp و c و cpp. | | `--dir` | دليل | يحصر الفحص في دليل. يتكرر ويُجمع مع `--file`. | | `--file` | ملف | يحصر الفحص في ملف واحد. يتكرر ويُجمع مع `--dir`. | دون أي خيار، يفحص المشروع كله. ويحتاج `--pattern` إلى `--lang` ولا يمكن جمعه مع `--dir` أو `--file`. ### اختر ما يفحصه يستثني ما يتجاهله **Git**. ولاستثناء المزيد، أو لفحص ما يتجاهله **Git**، امنح `crypto` إعدادات خاصة به: ```bash npx lagune write add --ignore test/fixtures --checker crypto ``` ```json { "checkers": { "crypto": { "gitignore": false, "ignore": ["test/fixtures"] } } } ``` تشرح صفحة [إعداد hooks](https://lagune.ai/ar-AE/docs/hooks/configure) كل إعداد. ### اللغات المدعومة يقرأ الفحص هذه اللغات، بحسب امتداد الملف، ويُفحص كل منها مقابل واجهات التشفير البرمجية الخاصة به. | اللغة | خوارزميات التشفير الضعيفة (ملاحظة) ودوال التجزئة و RNG (مراجعة) | | --------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | **JavaScript / TypeScript** | `createCipher`, `CryptoJS.DES/RC4`، و `*-ecb` بين علامتي اقتباس؛ MD5/SHA-1 `createHash`/`subtle.digest`; `Math.random()` | | **Python** | pycryptodome `DES/ARC4/Blowfish.new`, `algorithms.TripleDES`, `MODE_ECB`; `hashlib.md5/sha1`; `random.*` | | **Go** | `des.NewCipher`, `rc4.NewCipher`, `blowfish.NewCipher`, `NewECBEncrypter`; `md5/sha1.Sum`; `math/rand` | | **Java / Kotlin** | `Cipher.getInstance("DES"/…/ECB")`; `MessageDigest.getInstance("MD5")`, `HmacMD5`; `java.util.Random` | | **PHP** | `openssl_encrypt("des-…"/"…-ecb")`, `mcrypt_*`; `md5()`/`sha1()`, `hash("md5", …)`; `rand()`/`mt_rand()` | | **Ruby** | `OpenSSL::Cipher.new("des-…")`, `:ECB`; `Digest::MD5/SHA1`; `rand()`/`Random` | | **Rust** | `Rc4::`, `Blowfish::`, `des::`, `ecb::`; `Md5::`, `Sha1::`, `Hmac`; `SmallRng`/`XorShiftRng` | | **C#** | `DES/TripleDES/RC2.Create`, `CipherMode.ECB`; `MD5/SHA1.Create`, `HMACMD5`; `new Random()` | | **C / C++** | OpenSSL `DES_*`/`RC4`/`EVP_des_*`, `EVP_*_ecb`; `MD5()`/`SHA1()`, `EVP_md5`; `rand()`/`random()` | **أفضل جهد، لا تغطية شاملة** يقرأ الكود المصدري كنص، لذلك قد يفلت منه عنصر يُجمَّع وقت التشغيل، أو يختبئ خلف اسم بديل، أو يُكتب بصيغة لا يتعرف عليها. تعامل مع الجدول كنقطة بداية قوية، لا كجرد كامل. **نصيحة** يضمن hook الحد الأدنى (وجود هذه البنى): أما إدارة المفاتيح، وإعادة استخدام IV، وحشو RSA، فهي أحكام يظل [التخصص `crypto`](https://lagune.ai/ar-AE/docs/catalog) يغطيها. ## الأسئلة الشائعة ### كيف أفحص قاعدة الكود بحثًا عن التشفير الضعيف؟ شغّل hook crypto دون أي خيار. خوارزميات التشفير المكسورة ووضع ECB ملاحظات تنتهي برمز خروج غير صفري. أما دالة التجزئة MD5/SHA-1 فمؤشر للمراجعة، لأنها مكسورة للاستخدام الأمني لكنها مشروعة كمجموع اختباري عادي. ### هل ينبّه hook crypto إلى Math.random()؟ فقط كمؤشر للمراجعة في سياق أمني، لا كملاحظة تلقائية أبدًا، لأن العشوائية مشروعة لإضافة تفاوت زمني أو لترتيب عناصر الواجهة. --- # hook cvss: قيّم متجه CVSS v4.0 > قيّم متجه CVSS v4.0 واحدًا أو أكثر من سطر الأوامر، بالحساب نفسه الذي تستخدمه حاسبة FIRST، واقرأ كلًا منها بكلمات بسيطة. Canonical: https://lagune.ai/ar-AE/docs/hooks/cvss اللغة: ar-AE الأصل: https://lagune.ai/docs/hooks/cvss آخر تحديث: 2026-11-09 يقيّم hook `cvss` **متجه CVSS v4.0** ويطبع درجته ونطاق خطورته، وهو التقييم الذي يكتبه [`/lagune-plan`](https://lagune.ai/ar-AE/docs/commands/plan) على كل إصلاح و [`/lagune-prove`](https://lagune.ai/ar-AE/docs/commands/prove) على كل نشرة أمنية. وهو المحرك الحتمي خلف هذه التقييمات، بالحساب نفسه الذي تستخدمه [حاسبة FIRST](https://www.first.org/cvss/calculator/4.0)، ويمكنك تشغيله بنفسك. ## التشغيل مرّر كل متجه عبر `--vector`. يطبع hook سطرًا واحدًا لكل متجه: درجته ونطاقه. **متجه واحد** ```bash npx lagune read cvss --vector 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N' # => 9.3, Critical ``` **عدة متجهات** كرّر `--vector` لتقييم عدة متجهات دفعة واحدة، بسطر لكل منها، بالترتيب. ```bash npx lagune read cvss \ --vector 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N' \ --vector 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/MAV:A' # => 9.3, Critical # => 8.7, High ``` **بكلمات بسيطة** أضف `--explain` لقراءة كل مقياس بكلمات بسيطة. وحين تغيّر مقاييس Threat أو Environmental الدرجة، تأتي درجة Base وحدها أولًا. ```bash npx lagune read cvss --explain --vector 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/MAV:A' # => 8.7, High # => Base metrics alone: 9.3, Critical # => Attack Vector: Network, modified to Adjacent # => Attack Complexity: Low # => ... ``` ## كيف تقرأ النتيجة | النطاق | الدرجة | | ---------- | --------------- | | `None` | 0.0 | | `Low` | من 0.1 إلى 3.9 | | `Medium` | من 4.0 إلى 6.9 | | `High` | من 7.0 إلى 8.9 | | `Critical` | من 9.0 إلى 10.0 | المتجه الذي لا يحتوي إلا على مقاييس Base يقيّم الخلل نفسه، مفترضًا الأسوأ: كل متطلب أمني High والخلل مُستغَل فعليًا. وتضبطه مقاييس Environmental (`MAV` وباقي المقاييس المعدّلة، إضافة إلى `CR` و `IR` و `AR`) لبيئة نشر واحدة، ويضبطه مقياس Threat (`E`) وفق ما هو معروف عن الاستغلال. المتجه غير الصالح يطبع `invalid vector:` وما الخطأ فيه، وينتهي hook برمز خروج غير صفري. ### خيارات CLI | الخيار | القيمة | الوصف | | ----------- | --------------- | --------------------------------------------------------------------- | | `--vector` | متجه `CVSS:4.0` | قيّم متجهًا واحدًا. كرّره لتقييم عدة متجهات، بسطر لكل متجه، بالترتيب. | | `--explain` | | يضيف كل مقياس بكلمات بسيطة تحت كل سطر تقييم. | يلزم `--vector` واحد على الأقل. ولا يكون المتجه أبدًا وسيطًا موضعيًا مجردًا، لذلك لا يمكن الخلط بينه وبين خيار. **لماذا قيمة خيار** يُمرَّر كل متجه كقيمة خيار، ولا يُدمج في الأمر أبدًا. فالقيمة التي تحتوي على علامات اقتباس أو backticks تبقى خاملة ولا يمكنها الحقن في الصدفة. ضعه دائمًا بين علامتي اقتباس مفردتين حتى لا توسّعه الصدفة أولًا. **ما لا يغطيه** CVSS v4.0 فقط: يُرفض متجه v2.0 أو v3.0 أو v3.1 بدلًا من تقييمه، لأن **Lagune** يقيّم كل ملاحظة وفق v4.0. **نصيحة** يعيد التحقق في مرحلة plan تشغيل الحساب نفسه على كل سطر CVSS، فتُكتشف الدرجة التي انحرفت عن متجهها قبل قبول الخطة. ## الأسئلة الشائعة ### كيف يحسب Lagune درجة CVSS؟ يتبع hook cvss الحاسبة المرجعية من FIRST لمعيار CVSS v4.0، لذلك يحصل المتجه على الدرجة نفسها تمامًا التي يحصل عليها في موقع FIRST. ### هل يمكنني تقييم متجه CVSS v3.1 به؟ لا. يقيّم Lagune كل ملاحظة وفق CVSS v4.0، ويرفض hook أي إصدار آخر بدلًا من تقييمه. ### ماذا يفعل الخيار ‎--explain؟ يقرأ كل مقياس بكلمات بسيطة ويعرض درجة Base بجانب الدرجة الإجمالية، فيستطيع أي شخص رؤية ما يقوله المتجه وكيف غيّره سياق المشروع. --- # hook infra: اكتشف أخطاء إعداد IaC > افحص ملفات Terraform و Dockerfiles و GitHub Actions بحثًا عن أخطاء الإعداد، أو قيّم مقتطفًا واحدًا، من سطر الأوامر. Canonical: https://lagune.ai/ar-AE/docs/hooks/infra اللغة: ar-AE الأصل: https://lagune.ai/docs/hooks/infra آخر تحديث: 2026-11-09 ينبّه hook `infra` إلى **أخطاء إعداد البنية التحتية ككود** التي يمكن الحسم فيها من الملف نفسه: شبكة مفتوحة للعالم، أو صلاحية wildcard، أو سر في ملف manifest، أو حاوية تعمل بصلاحيات root، أو قيمة غير موثوقة في صدفة CI. ولا يقرأ إلا ملفات IaC (`.tf`/`.tf.json`/`.hcl`، و `Dockerfile*`، و `.github/workflows/**`). وهو المحرك الحتمي خلف [التخصص `infra`](https://lagune.ai/ar-AE/docs/catalog)، في وضع **scan** أو **check**. ## التشغيل **افحص قاعدة الكود** ```bash npx lagune read infra # scans every IaC file npx lagune read infra --dir infra # scans a directory npx lagune read infra --file Dockerfile # scans a single file ``` **تحقق من مقتطف** مرّر المقتطف عبر `--pattern` ونوعه عبر `--kind` (`terraform` أو `dockerfile` أو `github-actions`). ```bash npx lagune read infra --kind terraform --pattern 'actions = ["*"]' # => iam-wildcard npx lagune read infra --kind dockerfile --pattern 'FROM node:20' # => mutable-tag ``` يطبع الفحص قسمين على الأكثر. **Infrastructure risks found** ينتهي برمز خروج غير صفري ويضم العيوب التي يمكن الحسم فيها (دخول `0.0.0.0/0` على منفذ حساس، أو عبارة IAM بصلاحية wildcard، أو سر في manifest، أو `encrypted = false`، أو وحدة git غير مثبّتة الإصدار، أو صورة تعمل صراحة بصلاحيات root، أو `curl | sh`، أو حقن في سكربت CI، أو `permissions: write-all`). أما **Infrastructure hardening advisories** فلا يغيّر رمز الخروج (وسم أساس قابل للتغيير، أو action مثبّت بوسم). والتشغيل النظيف يطبع `no infrastructure risks found`. ## كيف تقرأ الحكم يطبع وضع check الوسم الأعلى خطورة الذي طابقه (مثل `public-ingress` و `iam-wildcard` و `root-user` و `curl-pipe` و `script-injection` و `write-all`)، أو وسمًا استشاريًا (`mutable-tag` و `unpinned-action`)، أو `safe`. ولا ينتهي برمز خروج غير صفري إلا الوسم الذي بمستوى ملاحظة. ### خيارات CLI | الخيار | القيمة | الوصف | | ----------- | ----------------------------------------------- | ------------------------------------------------------- | | `--pattern` | مقتطف | تحقق من مقتطف واحد. يتطلب `--kind`. كرّره لعدة مقتطفات. | | `--kind` | `terraform` \| `dockerfile` \| `github-actions` | النوع الذي يُحكم على المقتطف بناءً عليه. | | `--dir` | دليل | يحصر الفحص في دليل. يتكرر ويُجمع مع `--file`. | | `--file` | ملف | يحصر الفحص في ملف واحد. يتكرر ويُجمع مع `--dir`. | دون أي خيار، يفحص كل ملفات IaC في المشروع. ولا يمكن جمع `--pattern` مع `--dir` أو `--file`. ### اختر ما يفحصه يستثني ما يتجاهله **Git**. ولاستثناء المزيد، أو لفحص ما يتجاهله **Git**، امنح `infra` إعدادات خاصة به: ```bash npx lagune write add --ignore examples --checker infra ``` ```json { "checkers": { "infra": { "gitignore": false, "ignore": ["examples"] } } } ``` تشرح صفحة [إعداد hooks](https://lagune.ai/ar-AE/docs/hooks/configure) كل إعداد. **نصيحة** يلتقط hook الحالات الصريحة التي يمكن الحسم فيها: أما غياب التشفير، والانكشاف عبر `pull_request_target`، والنطاق الصحيح لصلاحيات IAM، فهي أحكام يظل [التخصص `infra`](https://lagune.ai/ar-AE/docs/catalog) يغطيها. ## الأسئلة الشائعة ### ما ملفات البنية التحتية التي يقرؤها hook infra؟ ملفات Terraform/HCL (‎.tf و ‎.tf.json و ‎.hcl)، و Dockerfiles، وملفات YAML الخاصة بسير عمل GitHub Actions والـ actions تحت ‎.github/‎. ويصل إلى هذه الملفات رغم أن فاحصات الكود المصدري تتخطاها. --- # hook interpreter: نبّه إلى نقاط sink لتنفيذ الكود الديناميكي > افحص قاعدة الكود بحثًا عن نقاط sink لتنفيذ الكود الديناميكي في لغات مختلفة، أو قيّم مقتطفًا واحدًا، من سطر الأوامر. Canonical: https://lagune.ai/ar-AE/docs/hooks/interpreter اللغة: ar-AE الأصل: https://lagune.ai/docs/hooks/interpreter آخر تحديث: 2026-11-09 ينبّه hook `interpreter` إلى **نقاط sink لتنفيذ الكود الديناميكي**: بنى تحوّل البيانات إلى كود يعمل أو تسلّمها إلى صدفة، من `eval` إلى إلغاء التسلسل الأصلي. وهو مدرك للغة البرمجة، يقرأ كل ملف بقواعده الخاصة، وهو المحرك الحتمي خلف [التخصص `interpreter`](https://lagune.ai/ar-AE/docs/catalog)، ويمكنك تشغيله بنفسك في وضع **scan** أو **check**. ## التشغيل **افحص قاعدة الكود** ```bash npx lagune read interpreter # scans the whole project npx lagune read interpreter --dir src # scans a directory npx lagune read interpreter --file app.py # scans a single file ``` **تحقق من مقتطف** ```bash npx lagune read interpreter --lang javascript --pattern 'eval(x)' # => careful npx lagune read interpreter --lang python --pattern 'json.loads(x)' # => safe ``` هذه النقاط مزدوجة الاستخدام: لا يستطيع الفحص الثابت الحسم في ما إذا كان مدخل يتأثر به المهاجم يصل إلى إحداها، لذلك كل تطابق **تنبيه للمراجعة**، لا ملاحظة مؤكدة أبدًا. ويطبع الفحص قسمًا واحدًا هو **Dynamic-execution sinks to review**، مجمّعًا حسب الملف. والتشغيل النظيف يطبع `no dynamic-execution sinks found`. **اقرأ الكود المُنبَّه إليه، ولا تشغّله أبدًا!** حلّل كل نقطة sink **بشكل ثابت**، بتتبّع ما إذا كان مدخل غير موثوق يصل إليها. ولا تنفّذ أبدًا الكود المُنبَّه إليه أو تمرّره إلى `eval`، ولا أي كود بعيد أو يُجلب وقت التشغيل يستدعيه، بهدف "اختبار" ما يفعله. ## كيف تقرأ الحكم | الحكم | المعنى | | --------- | ------------------------------------------------------------------------------------------ | | `careful` | يحتوي المقتطف على نقطة sink للتنفيذ الديناميكي في لغته. راجعه بالقراءة، لا بالتشغيل أبدًا. | | `safe` | لم يُعثر على نقطة sink للتنفيذ الديناميكي في اللغة المحددة. | ### خيارات CLI | الخيار | القيمة | الوصف | | ----------- | --------- | --------------------------------------------------------------------------------------------------------------- | | `--pattern` | مقتطف كود | تحقق من مقتطف واحد. كرّره للتحقق من عدة مقتطفات، بحكم في كل سطر. | | `--lang` | لغة برمجة | مطلوب مع `--pattern`: واحدة من javascript و python و php و ruby و java و kotlin و go و rust و c و cpp و csharp. | | `--dir` | دليل | يحصر الفحص في دليل. يتكرر ويُجمع مع `--file`. | | `--file` | ملف | يحصر الفحص في ملف واحد. يتكرر ويُجمع مع `--dir`. | دون أي خيار، يفحص المشروع كله. ويحتاج `--pattern` إلى `--lang` ولا يمكن جمعه مع `--dir` أو `--file`. ### اختر ما يفحصه يستثني ما يتجاهله **Git**. ولاستثناء المزيد، أو لفحص ما يتجاهله **Git**، امنح `interpreter` إعدادات خاصة به: ```bash npx lagune write add --ignore test/fixtures --checker interpreter ``` ```json { "checkers": { "interpreter": { "gitignore": false, "ignore": ["test/fixtures"] } } } ``` تشرح صفحة [إعداد hooks](https://lagune.ai/ar-AE/docs/hooks/configure) كل إعداد. ### اللغات المدعومة يقرأ الفحص هذه اللغات، بحسب امتداد الملف، ويُفحص كل منها مقابل مجموعة نقاط sink للتنفيذ الديناميكي الخاصة به. | # | اللغة | الامتدادات | نقاط sink التي ينبّه إليها | | --- | --------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1 | **JavaScript / TypeScript** | `.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, `.tsx`, `.mts`, `.cts`, `.astro`, `.vue`, `.svelte`, `.marko`, `.riot` | `eval()`، والمُنشئ Function، و `setTimeout`/`setInterval` بجسم نصي، والوحدة `vm`، والتنفيذ عبر `child_process`، و `require()` الديناميكي، و `import()` الديناميكي | | 2 | **Python** | `.py`, `.pyi` | `eval`/`exec`، و `__import__()`، و `os.system`/`os.popen`، و `subprocess` مع `shell=True`، و `pickle.load`/`loads`، و `yaml.load` (غير الآمن) | | 3 | **Ruby** | `.rb` | عائلة eval (`instance_eval`/`class_eval`/`module_eval`/`eval`)، و `system`/`exec`، و backticks أو `%x`، و `Kernel#open` / `IO.popen`/`read`/`binread` / `Open3`، و `Process.spawn`، و `Marshal.load` | | 4 | **Go** | `.go` | `exec.Command`/`exec.CommandContext`، و `plugin.Open` | | 5 | **PHP** | `.php` | `eval()`، و `assert()` على نص، و `create_function()`، والتنفيذ في الصدفة (`system`/`exec`/`shell_exec`/`passthru`/`popen`/`proc_open`)، و `call_user_func`/`call_user_func_array`، و `include`/`require` بمسار يُحدَّد وقت التشغيل | | 6 | **Rust** | `.rs` | `Command::new`، و `process::Command` | | 7 | **Java** | `.java` | `Runtime.exec`، و `ProcessBuilder`، و `ScriptEngine`، و `ObjectInputStream.readObject` | | 8 | **Kotlin** | `.kt`, `.kts` | نقاط sink في JVM: `Runtime.exec`، و `ProcessBuilder`، و `ScriptEngine`، و `ObjectInputStream.readObject` | | 9 | **C#** | `.cs` | `Process.Start` / `new Process`، و `BinaryFormatter`، و `Assembly.Load` | | 10 | **C** | `.c`, `.h` | `system()`، و `popen()`، وعائلة `exec*` (`execl`، و `execve`، و `execvp`، …) | | 11 | **C++** | `.cc`, `.cpp`, `.cxx`, `.hpp`, `.hh`, `.hxx` | `system()`، و `popen()`، وعائلة `exec*` (`execl`، و `execve`، و `execvp`، …) | **أفضل جهد، لا تغطية شاملة** يقرأ الكود المصدري كنص، لذلك قد تفلت منه نقطة sink تُجمَّع وقت التشغيل، أو تختبئ خلف اسم بديل، أو تُكتب بصيغة لا يتعرف عليها. تعامل مع الجدول كنقطة بداية قوية، لا كجرد كامل. **نصيحة** يضمن hook الحد الأدنى (وجود هذه النقاط ومواضعها): أما ما إذا كانت قيمة غير موثوقة تصل إلى إحداها فعلًا، فهو الحكم الذي يغطيه [التخصص `interpreter`](https://lagune.ai/ar-AE/docs/catalog). ## الأسئلة الشائعة ### هل يؤكد hook interpreter وجود ثغرة؟ لا. ينبّه إلى نقاط sink للتنفيذ الديناميكي كتنبيه للمراجعة، لا كملاحظة مؤكدة أبدًا، لأن الفحص الثابت لا يستطيع الحسم في ما إذا كان مدخل يتأثر به المهاجم يصل إلى نقطة sink. ### ما اللغات التي يغطيها hook interpreter؟ يقرأ اللغات الواردة في جدول اللغات المدعومة، بحسب امتداد الملف، ويُفحص كل منها مقابل مجموعة نقاط sink الخاصة به. ولا تنتج اللغات الأخرى أي نقاط sink. --- # hook jwt: اكتشف التحقق من JWT دون تثبيت الخوارزمية > افحص قاعدة الكود بحثًا عن التحقق من JWT دون تثبيت الخوارزمية، أو قيّم استدعاءً واحدًا، من سطر الأوامر. Canonical: https://lagune.ai/ar-AE/docs/hooks/jwt اللغة: ar-AE الأصل: https://lagune.ai/docs/hooks/jwt آخر تحديث: 2026-11-09 ينبّه hook `jwt` إلى **التحقق من JWT دون تثبيت الخوارزمية**، وهي ثغرة الخلط بين الخوارزميات حيث يثق المتحقق في ترويسة `alg` الخاصة بالرمز نفسه، وإلى **التحقق المعطّل كليًا**. وهو **مدرك للغة البرمجة**، يقرأ كل ملف وفق مكتبة JWT الخاصة به، وهو المحرك الحتمي خلف [التخصص `federation`](https://lagune.ai/ar-AE/docs/catalog)، ويمكنك تشغيله بنفسك في وضع **scan** أو **check**. ## التشغيل **افحص قاعدة الكود** ```bash npx lagune read jwt # scans the whole project npx lagune read jwt --dir src # scans a directory npx lagune read jwt --file auth.ts # scans a single file ``` **تحقق من استدعاء** ```bash npx lagune read jwt --lang javascript --pattern 'jwt.verify(token, secret)' # => unpinned npx lagune read jwt --lang python --pattern 'jwt.decode(t, k, options={"verify_signature": False})' # => unpinned npx lagune read jwt --lang python --pattern 'jwt.decode(t, k, algorithms=["HS256"])' # => safe ``` كل سطر تحت **Unpinned JWT verification found** هو استدعاء تحقق لا يضع قائمة سماح `algorithms` (حيث تحتاج المكتبة إليها)، أو يقبل قائمة غير آمنة (`none`، أو خوارزمية غير متماثلة ممزوجة مع HMAC)، أو يعطّل فحص التوقيع تمامًا، فيثق في `alg` الخاص بالرمز نفسه. وهذا انكشاف مؤكد، لذلك ينتهي hook برمز خروج غير صفري. والتشغيل النظيف يطبع `no unpinned JWT verification found`. ## كيف تقرأ الحكم | الحكم | المعنى | | ---------- | ------------------------------------------------------------------------------------------- | | `unpinned` | استدعاء تحقق دون قائمة سماح للخوارزميات (حيث تلزم)، أو بقائمة غير آمنة، أو مع تعطيل التحقق. | | `safe` | استدعاء تحقق يثبّت قائمة سماح سليمة للخوارزميات، أو تثبّتها مكتبته ضمنيًا. | | `invalid` | لا يحتوي المقتطف على استدعاء تحقق يمكن التعرف عليه للحكم عليه. | ### خيارات CLI | الخيار | القيمة | الوصف | | ----------- | --------- | ----------------------------------------------------------------------------------------------------- | | `--pattern` | مقتطف كود | تحقق من استدعاء واحد. كرّره للتحقق من عدة استدعاءات، بحكم في كل سطر. | | `--lang` | لغة برمجة | مطلوب مع `--pattern`: واحدة من javascript و python و go و java و kotlin و php و ruby و rust و csharp. | | `--dir` | دليل | يحصر الفحص في دليل. يتكرر ويُجمع مع `--file`. | | `--file` | ملف | يحصر الفحص في ملف واحد. يتكرر ويُجمع مع `--dir`. | دون أي خيار، يفحص المشروع كله. ويحتاج `--pattern` إلى `--lang` ولا يمكن جمعه مع `--dir` أو `--file`. ### اختر ما يفحصه يستثني ما يتجاهله **Git**. ولاستثناء المزيد، أو لفحص ما يتجاهله **Git**، امنح `jwt` إعدادات خاصة به: ```bash npx lagune write add --ignore test/fixtures --checker jwt ``` ```json { "checkers": { "jwt": { "gitignore": false, "ignore": ["test/fixtures"] } } } ``` تشرح صفحة [إعداد hooks](https://lagune.ai/ar-AE/docs/hooks/configure) كل إعداد. ### اللغات المدعومة يقرأ الفحص هذه المكتبات، بحسب امتداد الملف. ولأن بعضها يثبّت الخوارزمية ضمنيًا (فغياب القائمة الصريحة سليم)، لا تنطبق قاعدة "لا قائمة سماح ⇒ unpinned" إلا حيث تتوقع المكتبة قائمة صريحة، لذلك لا يُنبَّه أبدًا إلى استدعاء مُعدّ بشكل صحيح. | اللغة | المكتبة | هل ينبّه إلى غياب قائمة السماح على أنه unpinned؟ | ينبّه دائمًا إلى | | --------------------------- | ----------------------- | ------------------------------------------------------------------- | ------------------------------------------------- | | **JavaScript / TypeScript** | jsonwebtoken, jose | نعم | `none`، ومزج خوارزمية غير متماثلة مع HMAC | | **Python** | PyJWT, python-jose | نعم (تتطلبها PyJWT، وقيمة python-jose الافتراضية `algorithms=None`) | `none`، و `verify_signature: False` | | **Go** | golang-jwt | نعم (دون `WithValidMethods`) | `none`، و `ParseUnverified` | | **Ruby** | ruby-jwt | نعم | `none`، و `verify = false` | | **Java / Kotlin** | jjwt, nimbus | لا (مشتقة من المفتاح) | `none`، ومحلل unsigned/`unsecured` | | **PHP** | firebase/php-jwt | لا (يحمل `Key` الخوارزمية) | `none` | | **Rust** | jsonwebtoken | لا (يتطلب `Validation` واحدة) | `none`، و `insecure_disable_signature_validation` | | **C#** | Microsoft.IdentityModel | لا (معاملات متعددة الأسطر) | `none`، و `RequireSignedTokens = false` | **نصيحة** لا يحسم hook إلا تثبيت الخوارزمية: أما فحوص الادعاءات والمفاتيح والمسار، فهي أحكام يظل [التخصص `federation`](https://lagune.ai/ar-AE/docs/catalog) يغطيها. ## الأسئلة الشائعة ### ما هو الخلط بين خوارزميات JWT؟ المتحقق الذي يقرأ الخوارزمية من ترويسة الرمز يسمح للمهاجم باستبدال RS256 بـ HS256 والتوقيع بالمفتاح العام. ويمنع ذلك تثبيتُ قائمة سماح سليمة للخوارزميات في الكود، وينبّه hook jwt إلى استدعاء التحقق الذي لا يضع قائمة أو يضع قائمة غير آمنة. --- # hook network: قيّم عناوين URL ضد SSRF > قيّم وجهة جلب واحدة أو أكثر ضد SSRF، مباشرة من سطر الأوامر. Canonical: https://lagune.ai/ar-AE/docs/hooks/network اللغة: ar-AE الأصل: https://lagune.ai/docs/hooks/network آخر تحديث: 2026-11-09 يحسم hook `network` ما إذا كانت وجهة الجلب من جهة الخادم آمنة من **SSRF** (طلب يمكن توجيهه إلى خدمات داخلية، أو بيانات تعريف السحابة، أو مضيفين خاصين). وهو المحرك الحتمي خلف [التخصص `network`](https://lagune.ai/ar-AE/docs/catalog)، ويمكنك تشغيله بنفسك. ## التشغيل مرّر كل وجهة عبر `--url`. يطبع hook كلمة واحدة لكل وجهة، يشرحها الجدول أدناه. **وجهة واحدة** ```bash npx lagune read network --url 'http://example.com/' # => safe npx lagune read network --url 'http://0x7f000001/' # => private-target ``` **عدة وجهات** كرّر `--url` لتقييم قائمة سماح أو قائمة حظر كاملة في استدعاء واحد، بحكم في كل سطر، بالترتيب. ```bash npx lagune read network \ --url 'http://example.com/' \ --url 'http://[::1]/' \ --url 'http://allowed.com@evil.example/' # => safe # => private-target # => parser-divergent ``` يحلّ المضيف كما تحلّه الشبكة، فلا تفلت الصيغ المرمّزة للعنوان الداخلي: الصيغ الست عشرية، والثمانية، والعشرية دون نقاط، والمختصرة، و IPv6، و IPv4-mapped، كلها تُقرأ `private-target`. وحيث تقرأ أداة تحقق متساهلة والجالب الحقيقي مضيفين مختلفين، يكون الحكم `parser-divergent`. ## كيف تقرأ الحكم | الحكم | المعنى | | ------------------ | --------------------------------------------------------------------------------------------------- | | `safe` | تتصل الوجهة بمضيف عام، وستقرأ أداة التحقق المتساهلة المضيف نفسه. | | `private-target` | يُحلّ المضيف إلى عنوان خاص، أو loopback، أو link-local، أو غير محدد، أو عنوان بيانات تعريف السحابة. | | `parser-divergent` | ستقرأ أداة التحقق النصية المتساهلة مضيفًا حقيقيًا مختلفًا عن الذي يتصل به الجالب. | | `invalid url` | لا يُحلَّل النص كعنوان URL، فلا يوجد ما يُجلب. | لا يعني السماح إلا `safe`. وتعامل مع `private-target` و `parser-divergent` و `invalid url` جميعًا على أنها حظر. ### خيارات CLI | الخيار | القيمة | الوصف | | ------- | ----------------- | -------------------------------------------------------------- | | `--url` | عنوان URL أو مضيف | تحقق من وجهة واحدة. كرّره للتحقق من عدة وجهات، بحكم في كل سطر. | يلزم `--url` واحد على الأقل. ولا تكون الوجهة أبدًا وسيطًا موضعيًا مجردًا، لذلك لا يمكن الخلط بينها وبين خيار. **لماذا قيمة خيار** تُمرَّر كل وجهة كقيمة خيار، ولا تُدمج في الأمر أبدًا. فالقيمة التي تحتوي على علامات اقتباس أو backticks تبقى خاملة ولا يمكنها الحقن في الصدفة. ضعها دائمًا بين علامتي اقتباس مفردتين حتى لا توسّعها الصدفة أولًا. **ما لا يغطيه** hook دالة نقية ولا يحلّ أسماء DNS أبدًا، لذلك تخرج ثغرتان وقت التشغيل عن نطاقه: **DNS rebinding** (اسم يُحلّ إلى عنوان عام عند الفحص وإلى عنوان داخلي عند الجلب) و **سلاسل إعادة التوجيه** (قفزة أولى تجتاز الفحص، ثم تعيد التوجيه إلى الداخل). أغلقهما بالحلّ مرة واحدة والاتصال بالعنوان الذي تم التحقق منه، وبرفض إعادة التوجيه. ويثبّت أسماء loopback المحجوزة (`localhost` وعائلة `.localhost`) على أنها داخلية دون أي استعلام، لكن أي اسم DNS آخر يُقرأ `safe`، لأن الجزم بأنه يُحلّ إلى الداخل يتطلب الحلّ: وقائمة السماح هي التي تحرس هذه الأسماء، وهي ما يتحقق منه هذا الفاحص. **نصيحة** هذا هو الفحص نفسه الذي يشغّله [التخصص `network`](https://lagune.ai/ar-AE/docs/catalog) لإثبات أن مرشّح الوجهات يصمد. ## الأسئلة الشائعة ### كيف أختبر عنوان URL ضد SSRF؟ شغّل hook network. يقيّم وجهة الجلب ويعيد safe أو private-target أو parser-divergent أو invalid url. ولا يعني السماح إلا safe. ### ما هو عنوان URL من نوع parser-divergent؟ عنوان URL تقرؤه المحللات المختلفة بشكل مختلف، وهو أسلوب كلاسيكي لتجاوز الحماية من SSRF. وينبّه hook network إليه بدلًا من السماح به. --- # hook regex: اكتشف أنماط ReDoS > افحص قاعدة الكود بحثًا عن التعابير النمطية المعرّضة لـ ReDoS، أو قيّم نمطًا واحدًا، من سطر الأوامر. Canonical: https://lagune.ai/ar-AE/docs/hooks/regex اللغة: ar-AE الأصل: https://lagune.ai/docs/hooks/regex آخر تحديث: 2026-11-09 hook `regex` هو المحرك الحتمي لأمان التعابير النمطية الذي يشغّله [التخصص `regex`](https://lagune.ai/ar-AE/docs/catalog)، ويمكنك تشغيله بنفسك. ويعمل بوضعين من أمر واحد: **scan** يفحص قاعدة الكود بحثًا عن الأنماط المعرّضة لـ **ReDoS** والأنماط المبنية وقت التشغيل، و **check** يقيّم نمطًا واحدًا تسلّمه له. ## افحص قاعدة كود دون أي خيار، يفحص المشروع كله. ويحصر `--dir` الفحص في دليل، و `--file` في ملف واحد. ويتكرر كلاهما ويُجمعان في تقرير واحد، ويُذكر كل ملف مرة واحدة حتى لو غطّاه أكثر من هدف. **المشروع كله** ```bash npx lagune read regex ``` **دليل** ```bash npx lagune read regex --dir src/services ``` **ملف واحد** ```bash npx lagune read regex --file bin/import.pl ``` **عدة أهداف** ```bash npx lagune read regex --dir core --dir workers --file Sources/App/Router.swift ``` **مع حد** يحدد `--limit` عتبة ReDoS للفحص (القيمة الافتراضية 25)، وهو الحد نفسه الذي يأخذه وضع check. وكلما انخفض الحد زادت الصرامة. ```bash npx lagune read regex --dir src/services --limit 15 ``` المُخرج نص خام تبيّن عناوينه طريقة قراءة كل قسم. ولا يظهر القسم إلا إن كانت فيه ملاحظات. ```text Vulnerable regular expressions found: cmd/server/main.go ([a-z]+)+$ (exponential, search) Dynamically built regular expressions (review manually by simulating a constructed regex): app/payments.php crates/parser/lexer.rs lib/validate.py Static regex wrapped in a constructor (use a literal instead): config/token.rb ``` وحين لا يُعثر على شيء، يطبع سطرًا واحدًا. ```bash npx lagune read regex --dir src/clean # => no unsafe patterns found ``` ### كيف تقرأ الأقسام | القسم | المعنى | | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Vulnerable regular expressions found` | أنماط معرّضة لـ ReDoS، مجمّعة حسب الملف مع إزاحة كل نمط تحته، يليه بين قوسين سبب عدم أمانه، ونطاقه وخياراته إن وُجدت. وكل سطر غير آمن، لذلك لا يتكرر الحكم. | | `Regular expressions the analysis could not settle (review manually)` | أنماط لم يستطع التحليل الحسم فيها ضمن حد العمل الخاص به، مسرودة بالطريقة نفسها. | | `Dynamically built regular expressions (review manually by simulating a constructed regex)` | ملفات تبني تعبيرًا نمطيًا من متغير، أو من دمج نصوص، أو من استيفاء. | | `Static regex wrapped in a constructor (use a literal instead)` | ملفات تمرّر نصًا حرفيًا عاديًا إلى مُنشئ تعبير نمطي حيث تكون صيغة التعبير النمطي الحرفية أبسط وتتجنب الترجمة وقت التشغيل. | القسم الأول ملاحظة أمنية. أما الثاني والثالث فليسا ملاحظتين بحد ذاتهما: يشيران إلى كود لا يستطيع الفحص الثابت الحسم فيه، لذلك يطلبان قراءة بشرية. والرابع تلميح للوضوح، لا ملاحظة أمنية. ### خيارات CLI | الخيار | القيمة | الوصف | | ----------- | --------------------- | -------------------------------------------------------------------------------------------------- | | `--pattern` | مصدر تعبير نمطي | تحقق من نمط واحد. كرّره للتحقق من عدة أنماط، بحكم لكل نمط، بالترتيب. | | `--flags` | خيارات التعبير النمطي | تحقق من كل `--pattern` بهذه الخيارات، مثل `im`. ينطبق على وضع check فقط. | | `--dir` | دليل | يحصر الفحص في دليل. يتكرر ويُجمع مع `--file`. | | `--file` | ملف | يحصر الفحص في ملف واحد. يتكرر ويُجمع مع `--dir`. | | `--limit` | عدد صحيح غير سالب | يحدد حد التكرار لـ ReDoS (القيمة الافتراضية 25). ينطبق على الوضعين. وكلما انخفض الحد زادت الصرامة. | دون أي خيار، يفحص المشروع كله. و `--pattern` هو وضع check ولا يمكن جمعه مع `--dir` أو `--file`. ### اختر ما يفحصه يستثني ما يتجاهله **Git**. ولاستثناء المزيد، أو لفحص ما يتجاهله **Git**، امنح `regex` إعدادات خاصة به: ```bash npx lagune write add --ignore test/fixtures --checker regex ``` ```json { "checkers": { "regex": { "gitignore": false, "ignore": ["test/fixtures"] } } } ``` تشرح صفحة [إعداد hooks](https://lagune.ai/ar-AE/docs/hooks/configure) كل إعداد. ### اللغات المدعومة يقرأ الفحص هذه اللغات، بحسب امتداد الملف، كل منها بقواعده الخاصة فلا يُختبر نمط من لغة أبدًا وفق قواعد لغة أخرى. وكل ما عداها يُتخطى بدلًا من فحصه بقواعد خاطئة. | # | اللغة | الامتدادات | | --- | --------------------------- | ------------------------------------------------------------------------------------------------------------ | | 1 | **JavaScript / TypeScript** | `.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, `.tsx`, `.mts`, `.cts`, `.astro`, `.vue`, `.svelte`, `.marko`, `.riot` | | 2 | **Python** | `.py`, `.pyi` | | 3 | **Ruby** | `.rb` | | 4 | **Go** | `.go` | | 5 | **PHP** | `.php` | | 6 | **Rust** | `.rs` | | 7 | **Java** | `.java` | | 8 | **C#** | `.cs` | | 9 | **C** | `.c`, `.h` | | 10 | **C++** | `.cc`, `.cpp`, `.cxx`, `.hpp`, `.hh`, `.hxx` | | 11 | **Kotlin** | `.kt`, `.kts` | | 12 | **Swift** | `.swift` | | 13 | **Scala** | `.scala`, `.sc` | | 14 | **Dart** | `.dart` | | 15 | **PowerShell** | `.ps1`, `.psm1`, `.psd1` | | 16 | **Elixir** | `.ex`, `.exs` | | 17 | **Objective-C** | `.m`, `.mm` | | 18 | **R** | `.r` | | 19 | **Julia** | `.jl` | | 20 | **Clojure** | `.clj`, `.cljs`, `.cljc`, `.edn` | | 21 | **Crystal** | `.cr` | | 22 | **Nim** | `.nim`, `.nims` | | 23 | **V** | `.v` | | 24 | **D** | `.d` | | 25 | **Perl** | `.pl`, `.pm` | **أفضل جهد، لا تغطية شاملة** يقرأ الكود المصدري كنص، لذلك لا يستطيع الحكم على نمط يُجمَّع وقت التشغيل، وقد يفلت منه نمط موزّع على عدة أسطر، أو مختبئ خلف اسم بديل، أو مكتوب بصيغة لا يتعرف عليها. تعامل مع الأقسام كنقطة بداية قوية، لا كجرد كامل، وواصل قراءة الكود بحثًا عما لا تصل إليه. ## تحقق من نمط واحد مرّر `--pattern` مع مصدر النمط لتقييمه. يطبع hook كلمة واحدة: `safe` أو `unsafe` أو `undetermined` حين يبلغ التحليل حد العمل الخاص به قبل الحسم في النمط، أو `invalid regex`. كرّر `--pattern` لتقييم عدة أنماط دفعة واحدة، بحكم لكل نمط، بالترتيب. **نمط واحد** ```bash npx lagune read regex --pattern '(a+)+$' # => unsafe npx lagune read regex --pattern '^[a-z0-9_]{3,20}$' # => safe ``` **عدة أنماط** ```bash npx lagune read regex --pattern '(a+)+$' --pattern '^[a-z]+$' # => unsafe # => safe ``` **مع خيارات** يتحقق `--flags` من كل `--pattern` في الاستدعاء بالخيارات التي يعمل بها، لأن الخيار يغيّر الأحرف التي يطابقها النمط. ```bash npx lagune read regex --pattern '^(?:a|A)+$' # => safe npx lagune read regex --pattern '^(?:a|A)+$' --flags 'i' # => unsafe ``` **مع حد** يحدد `--limit` حد التكرار (القيمة الافتراضية 25) وينطبق على كل `--pattern` في الاستدعاء. وكلما انخفض الحد زادت الصرامة. ```bash npx lagune read regex --pattern 'a?a?a?' --limit 2 # => unsafe ``` **لماذا وسيط بين علامتي اقتباس** يُمرَّر كل نمط كقيمة خيار، ولا يُدمج في الأمر أبدًا. فالقيمة التي تحتوي على علامات اقتباس أو backticks تبقى خاملة ولا يمكنها الحقن في الصدفة. ضع النمط دائمًا بين علامتي اقتباس مفردتين حتى لا توسّعه الصدفة أولًا. **نصيحة** هذا هو المحرك نفسه الذي يشغّله [التخصص `regex`](https://lagune.ai/ar-AE/docs/catalog): يفتح الفحص جولة ReDoS، ويؤكد التحقق نمطًا يكشفه الفحص. ## الأسئلة الشائعة ### كيف أتحقق من تعبير نمطي ضد ReDoS من CLI؟ شغّل npx lagune read regex --pattern ''. يعيد safe أو unsafe أو undetermined أو invalid regex. ### كيف أفحص مشروعًا كاملًا بحثًا عن تعابير نمطية غير آمنة؟ شغّل hook regex في وضع scan على قاعدة الكود. يبلّغ عن الأنماط المعرّضة لـ ReDoS في 25 لغة مدعومة. --- # hook secrets: اكتشف الأسرار المكتوبة مباشرة في الكود > افحص قاعدة الكود بحثًا عن بيانات الاعتماد المكتوبة مباشرة فيه، من سطر الأوامر. Canonical: https://lagune.ai/ar-AE/docs/hooks/secrets اللغة: ar-AE الأصل: https://lagune.ai/docs/hooks/secrets آخر تحديث: 2026-11-09 ينبّه hook `secrets` إلى **بيانات الاعتماد المضمّنة في الكود المصدري** بدلًا من قراءتها من البيئة. ويعتمد على **المصدر** (قيمة حرفية مقابل قراءة من البيئة)، لا على محتوى القيمة، لذلك لا يحتاج إلى كتالوج شامل لبادئات المزودين ولا ينتج تقريبًا أي إيجابيات كاذبة. وهو المحرك الحتمي خلف [التخصص `secrets`](https://lagune.ai/ar-AE/docs/catalog). توقيعات صيغ المزودين، وبيانات الاعتماد في سلاسل الاتصال، والقيمة الحرفية المرتبطة بمعرّف يحمل اسم سر، كلها **مستقلة عن لغة البرمجة**: النص نفسه يُقرأ بالطريقة نفسها في أي ملف. أما القاعدتان التقديريتان اللتان تعتمدان على الصياغة، وهما القراءة من البيئة بقيمة افتراضية مكتوبة في الكود وتدفّق سر إلى نقطة sink للسجلات، فهما **مدركتان للغة البرمجة**، فلا يُقرأ `console.log` الخاص بـ JavaScript أبدًا في ملف Rust، ويُكتشف `os.getenv("X", "default")` الخاص بـ Python وحده. ## التشغيل ```bash npx lagune read secrets # scans the whole project npx lagune read secrets --dir src # scans a directory npx lagune read secrets --file config.ts # scans a single file ``` يطبع الفحص قسمين على الأكثر. **Hardcoded secrets found** هو مجموعة الملاحظات (قيمة افتراضية مكتوبة في الكود لمتغير بيئة يحمل اسم سر، أو بيانات اعتماد مضمّنة في سلسلة اتصال، أو قيمة تطابق صيغة مزود منتقاة)، لذلك ينتهي hook برمز خروج غير صفري. و **Secret handling to review manually** مجموعة مؤشرات: قيمة حرفية عادية مرتبطة بمعرّف يحمل اسم سر (مصدرها يمكن الحسم فيه، أما كون القيمة سرًا حقيقيًا فلا)، وقيمة تحمل اسم سر تتدفق إلى نقطة sink للسجلات أو الاستجابات. والتشغيل النظيف يطبع `no hardcoded secrets found`. ### خيارات CLI | الخيار | القيمة | الوصف | | -------- | ------ | ------------------------------------------------ | | `--dir` | دليل | يحصر الفحص في دليل. يتكرر ويُجمع مع `--file`. | | `--file` | ملف | يحصر الفحص في ملف واحد. يتكرر ويُجمع مع `--dir`. | دون أي خيار، يفحص المشروع كله. ### اختر ما يفحصه يستثني ما يتجاهله **Git**. ولاستثناء المزيد، أو لفحص ما يتجاهله **Git**، امنح `secrets` إعدادات خاصة به: ```bash npx lagune write add --ignore test/fixtures --checker secrets ``` ```json { "checkers": { "secrets": { "gitignore": false, "ignore": ["test/fixtures"] } } } ``` تشرح صفحة [إعداد hooks](https://lagune.ai/ar-AE/docs/hooks/configure) كل إعداد. ### تغطية اللغات تقرأ ملاحظة القيمة الافتراضية للبيئة ومؤشر نقطة sink للسجلات مجموعة صيغ خاصة بكل لغة، لذلك تغطيان اللغات أدناه وتصمتان في غيرها. أما الإشارات الثلاث الأخرى فتعمل على **كل** ملف. | الإشارة | اللغات | | ------------------------------- | ------------------------------------------------------------------------------- | | القيمة الافتراضية للبيئة | JavaScript/TypeScript, Python, Ruby, PHP, Kotlin, Java, Go (`cmp.Or`), Rust, C# | | نقطة sink للسجلات أو الاستجابات | JavaScript/TypeScript, Python, Ruby, PHP, Java, Kotlin, Go, Rust, C, C++, C# | **هل هذه مشكلة تتعلق بالسياسات؟** لا. اكتشاف صيغة السر للتحذير من أنه أُضيف إلى commit أداة دفاعية معتادة، وهي العملية نفسها التي تجريها gitleaks و trufflehog و GitHub push-protection. ويأتي hook بتوقيعات اكتشاف (**صيغ** رموز عامة)، ولا يأتي أبدًا بسر حقيقي، وهو يدقّق ويشرح بدلًا من تسريب البيانات. ## الأسئلة الشائعة ### كيف يتجنب hook secrets الإيجابيات الكاذبة؟ يعتمد على المصدر، لا على محتوى القيمة. الصيغ عالية الثقة (رموز المزودين، والقيم الافتراضية للبيئة، وسلاسل الاتصال) ملاحظات تنتهي برمز خروج غير صفري. أما القيمة الحرفية العادية المرتبطة بمعرّف يحمل اسم سر فمؤشر للمراجعة يحتاج إلى تأكيد، والمعرّف نفسه حين يُقرأ من process.env لا يُنبَّه إليه أبدًا. --- # أمثلة موجّهات Lagune: أتمت مسار الفريق الأزرق > موجّهات Lagune جاهزة للنسخ: فحص للقراءة فقط، ومسار الفريق الأزرق الكامل، وتدقيق Zero Trust، إضافة إلى اكتشاف محصور في commit، أو في diff لفرع أو pull request، أو في حادثة حقيقية. Canonical: https://lagune.ai/ar-AE/docs/examples/prompts اللغة: ar-AE الأصل: https://lagune.ai/docs/examples/prompts آخر تحديث: 2026-11-09 موجّهات Lagune جاهزة للنسخ يمكنك لصقها مباشرة في وكيل الذكاء الاصطناعي. ## 💧 فحص سطحي فحص للقراءة فقط يقرأ الكود بنفسه ويبلّغ عن كل عيب مع إصلاحه، دون تشغيل مسار الفريق الأزرق أو الكتابة في تتبع Lagune. **نصيحة** يعمل بشكل أفضل في وضع التخطيط ومع تحديد ميثاق أمان (`/lagune-charter`). **🪼 الافتراضي** | الجانب | المقايضة | المستوى | | ------------------ | ----------------------------------------------- | ------------------- | | **الجهد** | وكيل واحد يفحص ويبلّغ، دون وكلاء فرعيين. | 1/5 | | **الوقت** | سريع. جولة واحدة للقراءة فقط، دون تطبيق أي شيء. | 2/5 | | **استهلاك الرموز** | متوسط، ومشترك. يعمل الفحص كله في سياق واحد. | 2/5 | ```md /lagune أنت باحث في الأمن السيبراني ذو خبرة عميقة في الأمن الدفاعي، تستخدم Lagune لتحسين معرفتك ودقتك. افحص مساحة العمل بنفسك واقرن كل عيب تجده بإصلاح ملموس. هذا فحص مستقل، وليس مسار الفريق الأزرق: لا تشغّل detect أو plan أو harden أو verify، ولا تكتب شيئًا في تتبع Lagune. في النهاية، اسرد كل عيب وجدته، مع خطورته وإصلاح ملموس له. ``` **🐬 وكلاء متعددون** | الجانب | المقايضة | المستوى | | ------------------ | --------------------------------------------------------- | ------------------- | | **الجهد** | وكيل فرعي لكل ملف، بحسب حجم قاعدة الكود. | 2/5 | | **الوقت** | متوازٍ لكل ملف، ثم يُدمج في تقرير واحد. يبقى للقراءة فقط. | 3/5 | | **استهلاك الرموز** | أعلى، لكنه معزول. يفحص كل وكيل فرعي في سياقه الخاص. | 3/5 | ````md /lagune أنت منسّق في الأمن السيبراني تستخدم Lagune لحصر المسارات، وإرسال وكيل فرعي لكل مسار، ودمج تقاريرهم (يقرأ الوكلاء الفرعيون كل المحتوى). يجب أن توزّع المهمة على وكلاء فرعيين بحسب حجم المشروع الحالي: كلما كبرت قاعدة الكود، زاد عدد الوكلاء الفرعيين الذين يجب إرسالهم، جميعًا بالتوازي، مع إعطاء كل منهم الموجّه أدناه: ```prompt /lagune أنت باحث في الأمن السيبراني ذو خبرة عميقة في الأمن الدفاعي، تستخدم Lagune لتحسين معرفتك ودقتك. افحص بنفسك واقرن كل عيب تجده بإصلاح ملموس. هذا فحص مستقل، وليس مسار الفريق الأزرق: لا تشغّل detect أو plan أو harden أو verify، ولا تكتب شيئًا في تتبع Lagune. في النهاية، اسرد كل عيب في ، مع خطورته وإصلاح ملموس له. ``` في النهاية، ادمج تقارير كل الوكلاء الفرعيين في قائمة واحدة مرتبة حسب الأولوية للعيوب والإصلاحات. ```` **تحذير** الفحص السريع موجّه واحد واسع وغير محصور، لذلك قد يرفضه بعض الوكلاء أو يختصرونه. فإن تراجع وكيلك، شغّل **مسار الفريق الأزرق** الكامل أدناه بدلًا منه: مراحله المحصورة خطوة بخطوة أقل عرضة للحظر بكثير. --- ## 🌊 مسار تدقيق الفريق الأزرق التلقائي يشغّل [مسار الأوامر الكامل](https://lagune.ai/ar-AE/docs/get-started/commands) من البداية إلى النهاية. **🪼 الافتراضي** | الجانب | المقايضة | المستوى | | ------------------ | --------------------------------------------------------------------------------------- | ------------------- | | **الجهد** | وكيل واحد، دون وكلاء فرعيين، أيًا كان حجم قاعدة الكود. | 3/5 | | **الوقت** | متوسط، لكنه أقل شمولًا في قواعد الكود الكبيرة. يعمل كل أمر مرة واحدة، واحدًا تلو الآخر. | 4/5 | | **استهلاك الرموز** | أقل، لكنه أقل عزلًا. تتشارك كل الأوامر السياق نفسه. | 4/5 | ```md نفّذ الأوامر التالية، واحدًا تلو الآخر: `/lagune-charter` و `/lagune-detect` و `/lagune-plan` و `/lagune-harden` و `/lagune-verify`. ## الحلقة حين يرفض `/lagune-verify` إصلاحًا أو أكثر، كرّر `/lagune-harden` ثم `/lagune-verify` حتى تُحلّ كل الملاحظات بشكل صحيح. ``` **🐋 وكلاء متعددون (فحص عميق)** | الجانب | المقايضة | المستوى | | ------------------ | ----------------------------------------------------------------------------------------------- | ------------------- | | **الجهد** | يتحدد عدد الوكلاء الفرعيين بحسب حجم قاعدة الكود. | 5/5 | | **الوقت** | أطول، لكنه أكثر شمولًا. يرسل عدة وكلاء فرعيين لاكتشاف الملاحظات والتخطيط لها وتحصينها بالتوازي. | 5/5 | | **استهلاك الرموز** | أعلى، لكنه أكثر أمانًا. لكل وكيل فرعي سياقه المعزول دون تحيّز. | 5/5 | ````md نفّذ الأوامر التالية، كل أمر في وكيل فرعي، واحدًا في كل مرة (دون backticks، الأمر فقط): موجّه الوكيل الفرعي 1: `/lagune-charter` موجّه الوكيل الفرعي 2: `/lagune-detect` موجّه الوكيل الفرعي 3: `/lagune-plan` موجّه الوكيل الفرعي 4: `/lagune-harden` موجّه الوكيل الفرعي 5: `/lagune-verify` في الأوامر `/lagune-detect` و `/lagune-plan` و `/lagune-harden` و `/lagune-verify`، يجب أن توزّع المهمة على وكلاء فرعيين بحسب حجم المشروع الحالي: كلما كبرت قاعدة الكود، زاد عدد الوكلاء الفرعيين الذين يجب إرسالهم. على سبيل المثال: ```prompt /lagune-detect ``` ```prompt /lagune-plan ``` ```prompt /lagune-harden ``` ```prompt /lagune-verify ``` - يجب إرسال الوكلاء المتعددين على الأمر نفسه بالتوازي. - بعد انتهاء كل الوكلاء الفرعيين لـ `/lagune-detect`، نفّذ: ```prompt /lagune-detect ادمج الملاحظات المتكافئة. لا تكتشف ملاحظات جديدة ولا تفحص قاعدة الكود مجددًا. ``` ## الحلقة حين يرفض `/lagune-verify` إصلاحًا أو أكثر، كرّر `/lagune-harden` ثم `/lagune-verify` حتى تُحلّ كل الملاحظات بشكل صحيح. ```` --- ## 🪄 اكتشاف محصور وجّه [`/lagune-detect`](https://lagune.ai/ar-AE/docs/commands/detect) إلى جزء من مشروعك بدلًا من المشروع كله. صِف النطاق بلغة بسيطة (commit، أو pull request، أو موقف حقيقي) فيرصد الملاحظات المتعلقة بالأمان هناك فقط. **نصيحة** كل ما يكتشفه هنا ملاحظة عادية، لذلك يمكنك نقلها مباشرة إلى `/lagune-plan` و `/lagune-harden` و `/lagune-verify`، محصورة في تلك العناصر فقط. **📌 منذ commit** امنح دفعة جديدة من commits جولة أمنية خاصة بها، محصورة فيما غيّرته فقط، على سبيل المثال: ```prompt /lagune-detect احصر الاكتشاف في كل ما تغيّر منذ الـ commit `a1b2c3d`. ``` **🔀 diff لفرع أو PR** راجع pull request أمنيًا قبل دمجه، محصورًا في الـ diff الخاص به فقط، على سبيل المثال: ```prompt /lagune-detect احصر الاكتشاف في التغييرات التي يُدخلها هذا الفرع مقارنة بـ `main`. ``` **⛑️ بعد حادثة** صِف ما حدث بكلماتك. يقرأ Lagune الموقف، لا خيارًا، ويحوّله إلى بحث مركّز، على سبيل المثال: ```prompt /lagune-detect تعرّض موقعنا لتسريب بيانات قبل بضعة أسابيع. لا أعرف بالضبط كيف حدث ذلك، وأخشى أن يكون شيء ما لا يزال مفتوحًا وقد يسرّب البيانات مجددًا. راجع الكود بعناية، وركّز على كل موضع تُقرأ فيه البيانات الحساسة أو تُخزَّن أو تُكشف، وارصد أي شيء قد يظل منفذًا لتسريبها. تعامل مع هذا كحادثة حقيقية، لا كتمرين. ``` --- ## 🚨 تدقيق Zero Trust يتعامل مع مساحة العمل كلها ومع كل اعتمادية على أنها عدائية: يبحث عن المفسّرات، واستدعاءات الشبكة، و payloads المرمّزة، والكود المخفي في أماكن غير متوقعة للإفلات من الفاحصات، ثم ينتهي بحكم go/no-go على ما إذا كان المشروع آمنًا للاستخدام. تحمّل الموجّهات التخصصات التي يعتمد عليها هذا التدقيق مباشرة، أيًا كانت فئات مشروعك. ولباقي الكتالوج الذي يطابقه `/lagune`، تأكد من أن المشروع يستخدم **OWASP** و **AI/LLM** وفئة تقنياته (مثل **JavaScript** و **Python** وغيرهما): ```bash npx lagune write add --categories owasp ai javascript ``` قد تخفي ملفات `.gitignore` والإعدادات الخاصة بالمستودع ملفات عن الفاحصات، لذلك اضبط الكتلة `checkers` في `.lagune/configs.json` على [فحص كل شيء](https://lagune.ai/ar-AE/docs/hooks/configure)، مستبدلًا أي كتلة يأتي بها المستودع: ```json { "checkers": { "gitignore": false } } ``` **خطر** احذر عند تشغيل مشاريع من مصادر غير موثوقة في بيئتك المحلية. استخدم بيئة معزولة، مثل **بيئة عزل** (مُوصى بها)، أو **جهاز افتراضي**، أو ما يشبههما، لمنع الكود الخبيث من التأثير في نظامك. **🪼 الافتراضي** | الجانب | المقايضة | المستوى | | ------------------ | -------------------------------------------------------------------------- | ------------------- | | **الجهد** | وكيل واحد يفحص مساحة العمل كلها، دون وكلاء فرعيين. | 2/5 | | **الوقت** | متوسط. يعمل وكيل واحد على الكود واعتمادياته بالتتابع. | 3/5 | | **استهلاك الرموز** | متوسط، لكنه مشترك. تُحمَّل التخصصات والكود والاعتماديات كلها في سياق واحد. | 3/5 | ```md /lagune أنت باحث في الأمن السيبراني ذو خبرة عميقة في الأمن الدفاعي القائم على Zero Trust، تستخدم Lagune لتحسين معرفتك ودقتك. ارصد مساحة العمل كلها كمصدر غير موثوق ونطاق خبيث محتمل. ويجب التعامل مع كل مفسّر، وكل عملية جلب، وكل base64، وما شابهها، كتهديد محتمل. وسّع تحليلك ليشمل الاعتماديات والاعتماديات الفرعية: قد يحاول المشروع إخفاء كود خبيث في مكان غير متوقع للإفلات من الفاحصات. التخصصات الإلزامية (حمّلها واحدًا تلو الآخر عبر `npx lagune read catalog `): - interpreter - secrets - llm - path وللتوضيح: يجب التعامل مع كل ثغرة مرصودة كتهديد محتمل، دون استثناء. في النهاية، أعطِ حكمًا على ما إذا كان المشروع آمنًا وموثوقًا لأستخدمه أم لا. ``` **🐋 وكلاء متعددون (فحص عميق)** | الجانب | المقايضة | المستوى | | ------------------ | ------------------------------------------------------------------------ | ------------------- | | **الجهد** | وكيل فرعي لكل ملف، بحسب حجم قاعدة الكود. | 5/5 | | **الوقت** | أطول، لكنه أكثر شمولًا. تُفحص الملفات بالتوازي، ثم تُدمج في حكم واحد. | 4/5 | | **استهلاك الرموز** | الأعلى، لكنه الأكثر أمانًا. يقرأ كل وكيل فرعي التخصصات في سياقه المعزول. | 5/5 | ````md /lagune أنت منسّق في الأمن السيبراني تستخدم Lagune لحصر الملفات، وإرسال وكيل فرعي لكل ملف، وإنشاء التقارير (يقرأ الوكلاء الفرعيون كل المحتوى). أرسل وكيلًا فرعيًا لكل ملف، جميعًا بالتوازي، مع إعطاء كل منهم الموجّه أدناه، محصورًا في ملفه: ```prompt /lagune أنت باحث في الأمن السيبراني ذو خبرة عميقة في الأمن الدفاعي القائم على Zero Trust، تستخدم Lagune لتحسين معرفتك ودقتك. تعامل مع كمصدر غير موثوق ونطاق خبيث محتمل. ويجب التعامل مع كل مفسّر، وكل عملية جلب، وكل base64، وما شابهها، كتهديد محتمل. وسّع التحليل ليشمل كل ما يستورده ، بما في ذلك الاعتماديات والاعتماديات الفرعية، حيث قد يختبئ كود خبيث للإفلات من الفاحصات. التخصصات الإلزامية لكل وكيل فرعي (حمّلها واحدًا تلو الآخر عبر `npx lagune read catalog `): - interpreter - secrets - llm - path وللتوضيح: يجب التعامل مع كل ثغرة مرصودة كتهديد محتمل، دون استثناء. في النهاية، أعطِ حكمًا على ما إذا كان المشروع آمنًا وموثوقًا لأستخدمه أم لا. ``` في النهاية، ادمج تقارير كل الوكلاء الفرعيين في حكم نهائي واحد. ```` --- # Security-Driven Hardening: منهجية لعصر التطوير بمساعدة الذكاء الاصطناعي > منهجية Security-Driven Hardening (SDH): منهجية دفاعية على طريقة الفريق الأزرق ومدركة للسياق لتدقيق البرمجيات المكتوبة بمساعدة الذكاء الاصطناعي أو عبر vibe coding وتحصينها. Canonical: https://lagune.ai/ar-AE/docs/references/paper اللغة: ar-AE الأصل: https://lagune.ai/docs/references/paper آخر تحديث: 2026-11-09 - **Weslley Araújo** - **ورقة منهجية، 2026.** --- ## الملخص Security-Driven Hardening (SDH) منهجية أمنية منظمة، يقودها الذكاء الاصطناعي، وللدفاع فقط، صُممت لعصر تُكتب فيه البرمجيات بشكل متزايد على يد وكلاء الذكاء الاصطناعي وعلى يد أشخاص ليسوا متخصصين في الأمان. وبدلًا من تشغيل قائمة تحقق عامة، ترصد SDH أولًا ما يفعله النظام فعلًا (تسجيل الدخول، ورفع الملفات، والمدفوعات، وكشف البيانات، وغير ذلك)، ثم تقود العمل الأمني الخاص بذلك السياق. وتحكمها مبادئ آمنة افتراضيًا، وتتمحور كليًا حول الدفاع، وتُصاغ بلغة بسيطة يستطيع أي مستخدم أن يتصرف بناءً عليها. تحاجّ هذه الورقة بأن SDH منهجية مفقودة، لا أداة واحدة. فالمعرفة الأمنية تعيش في المنهجية وتخصصاتها التي تُحمَّل عند الحاجة، وهي أساس يستطيع كل مستخدم البناء عليه، ما يتيح لها خدمة المبتدئ والخبير عبر المسار نفسه. وتميّزها خاصيتان عن المناهج السابقة التي تبدأ بالمواصفة `[1]`. فمنهجية SDH **مستقلة عن الحالة**: تتكيف مع دليل فارغ، أو مشروع قيد التنفيذ، أو pull request واحد، أو قاعدة كود قديمة كبيرة، بأي تقنية. ومنهجية SDH **قابلة للإغلاق**: الخطر الذي يثبت إغلاقه يُخرَج من المسار كله، فتبلغ تلك الملاحظة حالة مستقرة ولا يُعاد فتحها إلا عند تغيّر الكود. ولا تحل SDH محل المتخصصين في الأمان ولا محل أدوات الفريق الأزرق المتخصصة. بل توسّع معرفة المطوّر نفسه، وكلما فهم المطوّر الأمان أكثر، استطاع قيادتها أكثر. و **Lagune** هو التنفيذ المرجعي، وهو يُثبت أن المنهجية قابلة للبناء والنقل. وتُقدَّم SDH كمنهجية يستطيع الآخرون تبنّيها. > **مصطلحات الفهرسة** > > التطوير بمساعدة الذكاء الاصطناعي، أمن البرمجيات، الأمن الدفاعي، التطوير القائم على المواصفة، التحصين الأمني، سير العمل الذي يقوده الوكلاء، قابلية الإغلاق، الأمان المدرك للسياق، المعرفة عند الحاجة، الأدوات المستقلة عن الوكيل. --- ## I. المقدمة: الفجوة الأمنية التي فتحها التطوير بمساعدة الذكاء الاصطناعي تُشحن البرمجيات بشكل متزايد على يد أشخاص، وعلى يد وكلاء ذكاء اصطناعي، لا يستطيعون التعرف بموثوقية على نمط غير آمن: سر مسرّب، أو فحص تفويض مفقود، أو استعلام قابل للحقن. وهذه ليست مخاطر غريبة. بل هي من فئات المخاطر التي تهيمن على الحوادث الحقيقية، والموثّقة منذ سنوات في مراجع عامة `[6]`، `[7]`، وتشير دراسات حديثة إلى أن نسبة معتبرة من الكود الذي يولّده الذكاء الاصطناعي تُشحن بعيوب من هذا النوع تحديدًا `[8]`. وقد جعلت مساعدات البرمجة بالذكاء الاصطناعي هذا الأمر حادًا بتمكينها غير المطورين من شحن برمجيات حقيقية، لكن الفجوة أوسع من أي جمهور بعينه. فمعظم المشاريع لا تحصل أبدًا على مراجعة أمنية خاصة بما تفعله فعلًا. ويزداد النظام البيئي هشاشة مع كل قرار متسرّع من نوع "إنه يعمل، اشحنه". النصائح الأمنية العامة لا تسد هذه الفجوة. فقائمة التحقق الثابتة ليست خاصة بما يفعله النظام، لذلك تُغرق مشروعًا صغيرًا ببنود لا صلة لها به، ومع ذلك تفوّت الخطر المهم لذلك المشروع تحديدًا. والمشكلة ليست نقصًا في المعرفة الأمنية في العالم. المشكلة هي مطابقة المعرفة الصحيحة للنظام الموجود فعلًا أمام المستخدم، وفعل ذلك لشخص قد لا يعرف ما يجب أن يطلبه. وتجيب SDH عن هذا بقلب واحد للمعادلة: **تعيش المعرفة الأمنية في المواصفة وتخصصاتها التي تُحمَّل عند الحاجة، وهي أساس يستطيع كل مستخدم البناء عليه**. ترصد المنهجية السياق، وتفرز المخاطر التي يحملها ذلك السياق، وتوجّه الإصلاحات، فيُخدم المطوّر وغير المطوّر عبر المسار نفسه. وتبقى الملاحظات والتوصيات بلغة بسيطة، فتكون قابلة للتنفيذ أيًا كان العمق التقني للقارئ. ولا يُقيَّد الخبير بهذا، بل يُضخَّم به، وهي ثنائية نطوّرها في `§VI`. > **فكرة محورية** > > **القلب الأساسي للمعادلة:** تعيش المعرفة الأمنية في المواصفة وتخصصاتها التي تُحمَّل عند الحاجة، وهي أساس يستطيع كل مستخدم البناء عليه. تتعلم المنهجية ما يفعله النظام وتطابق العمل الأمني معه، وتوسّع كل ما يعرفه المستخدم بالفعل. تخيّل مطورًا يقول لمساعد ذكاء اصطناعي: "تطبيقي يسمح للمستخدمين برفع صورة للملف الشخصي". دون مراجعة أمنية، ينتج المساعد كودًا يعمل لكنه يثق بصمت في كل ما يرسله العميل: نوع الملف المُعلن، واسم الملف، والحجم. ويُشحن الرفع، فيستطيع ملف متنكر في صورة أن يحمل كودًا، ويستطيع اسم مُصاغ عمدًا أن يخرج من مسار التخزين، ويستطيع ملف ضخم أن يستنزف الخادم. ولا يظهر شيء من هذا في العرض التجريبي، فيُشحن. أما الكود نفسه حين يمر عبر SDH فيسلك سلوكًا مختلفًا. ترصد المنهجية أن النظام يقبل ملفات من الخارج (detect)، وتفرز ذلك إلى المخاطر التي يحملها الرفع (الفرز)، وتقترح التحقق من النوع الحقيقي للملف وحجمه، وإعادة تسميته عند الحفظ، وتخزينه حيث لا يمكن تشغيل الكود (المعالجة)، ثم تقرأ النتيجة وتتأكد من أن كل ضابط يصمد فعلًا (verify). ولم يحتج المطوّر أبدًا إلى معرفة عبارة "unrestricted file upload". فقد قدّمتها المنهجية نيابة عنه. تقدّم هذه الورقة الإسهامات التالية: - تعريفًا دقيقًا لمنهجية SDH، مستقلًا عن أي تنفيذ بعينه، مع مبادئ تصميمها (`§III`). - دورة حياة دفاعية من خمس مراحل يكون فيها الفصل بين المهام هو الإسهام نفسه: الاكتشاف لا يختلق أبدًا، والتخطيط لا يقرأ الكود أبدًا، ومرحلة واحدة فقط تغيّر الكود، والتحقق لا يليّن حكمه أبدًا (`§IV`). - **قابلية الإغلاق** كموقف منهجي: للملاحظة الفردية حالة نهائية، لا حلقة لا تنتهي (`§V`). - ثنائية **موسّع معرفة المطوّر**: مسار واحد يحمي المبتدئ ويضخّم الخبير (`§VI`). - **التخصصات غير القابلة للاستدعاء و prompt-on-demand**: معرفة أمنية مركّزة يحمّلها الوكيل حين يستدعيها سياق المشروع، ولا يحمّلها افتراضيًا أبدًا (`§VII`). - **الاستقلال عن الحالة** و **التكيّف غير السلطوي**: تلائم SDH أي حالة تطوير وتتكيف مع السيناريو بدلًا من فرض نطاق ثابت (`§VIII`). - **وضعًا وقائيًا**: الدفاع نفسه يعمل أثناء بناء العمل العادي، فيصل الكود آمنًا افتراضيًا ويقل ما يتعين على المراحل تصحيحه (`§IX`). - مقارنة مخصصة مع Spec-Driven Development، السلالة التي نشأت منها SDH ثم افترقت عنها (`§X`). - الضوابط الهندسية التي تتيح للمنهجية النجاة من إعادة الهيكلة والبقاء مستقلة عن أي وكيل: التتبع بالهوية الاسمية (`§XI`) والحامل المستقل عن الوكيل (`§XII`). --- ## II. الخلفية والأعمال ذات الصلة تبني SDH على أعمال سابقة. فهي ترث بنية مثبتة من التطوير الذي يبدأ بالمواصفة ويقوده الوكلاء `[1]`، `[2]`، `[3]`: القوالب، وأوامر slash التي يستهلكها الوكيل، ومستند حاكم، ووكيل يشغّل المراحل. وتعيد تنفيذ تلك البنية لغرض دفاعي. والسلالة مقصودة، وأحد مبادئ عمل SDH يسمّيها صراحة: ابنِ سير العمل من بنية مثبتة، ثم أطّره للأمان. وليست SDH قائمة تحقق ثابتة من توصيات عامة. فقائمة التحقق تعرف الكثير عن الأمان عمومًا ولا تعرف شيئًا عن المشروع الذي أمامها. وتعكس SDH هذا التركيز. فهي تبذل جهدها الأول في الاكتشاف، في معرفة ما يفعله النظام، ولا تلجأ إلا بعد ذلك إلى المعرفة التي يجعلها الاكتشاف ذات صلة. وليست SDH كذلك بديلًا عن المتخصصين في الأمان أو عن أدوات الفريق الأزرق المتخصصة. بل هي موسّع لمعرفة المطوّر (`§VI`). والفريق الذي لديه وظيفة أمنية مخصصة يجب أن يحتفظ بها. وتمنح SDH ذلك الفريق حاملًا منظمًا، وتمنح الفريق الذي لا يملك مثلها أساسًا يمكن الدفاع عنه. وتقف SDH أيضًا بجوار الفاحصات الأمنية الحتمية (التحليل الثابت، و linters) `[4]`، `[5]`. وتكمن قيمة هذه الأدوات تحديدًا في أنها حتمية وقابلة للتكرار. أما SDH فتعتمد في معظمها على استدلال الوكيل، فتقايض الحتمية الصارمة بإدراك السياق. ولا تدّعي المنهجية غير ذلك. وحيث تهم الحتمية، تضمّن محركًا حتميًا داخل الاستدلال (`§VII`): يقرر الوكيل ما إذا كان المدخل يستحق الفحص، ويقرر برنامج حتمي ما إذا كان ذلك المدخل خطيرًا. والعمل السابق الأقرب مباشرة هو Spec-Driven Development (SDD)، وهي عائلة المنهجيات التي تبدأ بالمواصفة وتدفع البناء إلى الأمام من مواصفة قابلة للتنفيذ. ونتعامل مع SDD كفئة. وأوضح صياغة لها كمنهجية للممارسين هي تقرير Piskala `[1]`، وأبرز أدواتها التي يقودها الوكلاء هي Spec Kit من GitHub `[2]`، مع OpenSpec `[3]` كأداة ثانية من العائلة نفسها. وهذه هي المراجع القياسية للمقارنة في `§X`. --- ## III. منهجية SDH: التعريف ومبادئ التصميم **Security-Driven Hardening** منهجية أمنية منظمة يقودها الذكاء الاصطناعي، تحوّل قاعدة الكود إلى قاعدة أكثر أمانًا بقيادة العمل من مواصفة يشغّلها الوكيل، بدلًا من إصلاحات عشوائية. والاسم مستوحى من **الفرق الزرقاء**، أي المدافعين في مجال الأمان. فمنهجية SDH تُعنى بالدفاع والتحصين والتحقق، لا بالهجوم أبدًا. > **تعريف** > > **Security-Driven Hardening (SDH):** منهجية أمنية منظمة، يقودها الذكاء الاصطناعي، وللدفاع فقط، ترصد أولًا ما يفعله النظام فعلًا، ثم تقود العمل الأمني الخاص بالسياق، تحكمها مبادئ آمنة افتراضيًا وتُصاغ بلغة بسيطة. تُعرَّف SDH بمجموعة من المبادئ الملزمة. كل مبدأ قاعدة، وكل مبدأ يمنح المستخدم ضمانًا محددًا. | المبدأ | القاعدة | ما يضمنه للمستخدم | | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | آمن افتراضيًا، بلغة بسيطة، للجميع بالتساوي | كل قيمة افتراضية ورسالة وإصلاح آمن من البداية ومفهوم لأي قارئ، مطورًا كان أم لا. ولا تُفضَّل فئة من المستخدمين على أخرى. | يحصل المبتدئ على أساس آمن دون أن يطلبه، ويقرأ النتيجة بلغته هو. | | إدراك السياق بدلًا من العمومية | تبدأ كل مرحلة من السياق المرصود في detect، وتعمل على ما يفعله النظام فعلًا. | تلائم التوصيات المشروع، لا قائمة تحقق. وتعيش المعرفة الأمنية في المواصفة وتخصصاتها التي تُحمَّل عند الحاجة، فتوسّع كل ما يجلبه المستخدم. | | المرونة بدلًا من الجمود | المبادئ والمتطلبات والتوصيات نقاط بداية. ويستطيع المستخدم إعادة صياغة أي شيء أو حذفه أو إضافته أو تضييق نطاقه. | تنحني المنهجية للمشروع وللمستخدم، ولا تشتد أكثر مما يريد المستخدم أبدًا. والمرونة لا تُضعف أبدًا الأساس الآمن افتراضيًا. | | المواءمة، لا الإضافة فقط | المُخرَجات مستندات حية، لا سجلات. وكل تشغيل يعيد فحص كل مدخل: يُبقي ما يصمد، ويعيد كتابة ما تغيّر، ويزيل ما لم يعد ينطبق. | يعكس السجل الحاضر دائمًا، فلا يتحول أبدًا إلى قائمة متراكمة بالية. | | للدفاع فقط | تدقّق SDH وتحصّن وتتحقق. ولا تنتج أبدًا أدوات هجومية، أو أدوات استغلال لأغراض خبيثة، أو وسائل تهرّب من الاكتشاف لإلحاق الضرر. | لا يمكن تحويل المنهجية إلى سلاح. ولا يظهر المحتوى مزدوج الاستخدام إلا في إطار دفاعي واضح. | | المواصفة أولًا، بقيادة الوكيل، ومؤطّرة للأمان | يُبنى سير العمل من القوالب، والأوامر، وميثاق أمان حاكم، ووكيل يشغّل المراحل. | بنية تطوير مثبتة، مُعاد توظيفها ليؤدي الوكيل العمل الأمني الجوهري. | **الجدول 1.** مبادئ تصميم SDH والضمان الذي يمنحه كل منها للمستخدم. هذه المبادئ ليست زخرفية. إنها القيود التي يجب أن تحترمها كل مرحلة أدناه، ويعود النقاش في `§XV` إليها لتحديد حدود المنهجية. تطوّر بقية الورقة تسع ركائز مسمّاة. وهي الأجزاء التي ينبغي أن يستطيع القارئ استحضارها، والأجزاء التي يعيد فريق آخر تنفيذها ليقول إنه يطبّق SDH. | الركيزة | ما تقدّمه | القسم | | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ----------- | | القلب المدرك للسياق | تعيش المعرفة الأمنية في المواصفة وتخصصاتها التي تُحمَّل عند الحاجة، فيتشارك المبتدئ والخبير مسارًا واحدًا. | `§I`, `§VI` | | دورة الحياة الدفاعية ذات المراحل الخمس | الفصل بين المهام: السياسة، والاكتشاف، والفرز، والمعالجة، والتحقق، لكل منها مهمة واحدة. | `§IV` | | قابلية الإغلاق | للملاحظة حالة نهائية، لا حلقة لا تنتهي. والعمل المغلق يُخرَج من السلسلة. | `§V` | | ثنائية موسّع معرفة المطوّر | مسار واحد يحمي المبتدئ ويضخّم الخبير، دون أن يحل محل أي منهما. | `§VI` | | prompt-on-demand والمعرفة غير القابلة للاستدعاء | تُحمَّل المعرفة الأمنية ذات الصلة لما يكونه المشروع، ولا تُحمَّل افتراضيًا أبدًا. | `§VII` | | الاستقلال عن الحالة والتكيّف غير السلطوي | تلائم أي حالة تطوير بأي تقنية، وتتكيف مع السيناريو بدلًا من فرض نطاق. | `§VIII` | | الوضع الوقائي | يعمل الدفاع نفسه أثناء بناء العمل الجديد، فيصل الكود آمنًا افتراضيًا. | `§IX` | | التتبع بالهوية الاسمية | تبقى الملاحظة عنصرًا واحدًا عبر المراحل، وإعادة التسمية تكسر الرابط في مكان واحد. | `§XI` | | الحامل المستقل عن الوكيل | تُكتب القيمة الأمنية مرة واحدة ولا تعتمد على أي وكيل أو تقنية. | `§XII` | **الجدول 2.** الركائز التسع المسمّاة لمنهجية SDH وموضع تطوير كل منها. --- ## IV. مسار الفريق الأزرق ذو المراحل الخمس تنظّم SDH العمل في دورة حياة دفاعية من خمس مراحل (الشكل 1). كل مرحلة مؤطّرة حول الدفاع، وكل مرحلة تبني على سابقتها، وتتبع المراحل نشاط الفريق الأزرق الحقيقي: وضع السياسة، والاكتشاف، والفرز، والمعالجة، والتحقق. ```mermaid flowchart TB charter["1 · charter (السياسة)
يقرأ: المشروع، ووصف المستخدم إن وُجد
يكتب: ميثاق الأمان
تحمل المبادئ الخطر الذي تمنعه، بلغة بسيطة"] detect["2 · detect (الاكتشاف)
يقرأ: كود المستخدم
يكتب: خريطة detect
الاكتشاف لا الاختلاق: لا يسجّل إلا ما يدعمه الكود"] plan["3 · plan (الفرز)
يقرأ: خريطة detect، ولا يقرأ الكود أبدًا
يكتب: خطة الدفاع
كل إصلاح يشير إلى شيء رصدته detect فعلًا"] harden["4 · harden (المعالجة)
يقرأ: خطة الدفاع، والكود الذي تمسّه
يكتب: الكود، وسجل التحصين
المرحلة الوحيدة التي تغيّر الكود، إصلاح واحد في كل مرة، أصغر تغيير يصمد"] verify["5 · verify (التحقق)
يقرأ: الكود، وسجل التحصين
يكتب: كل حكم مفتوح في سجل التحصين
مقابلة الكود بالسجل، بشكل ثابت، دون تليين أبدًا"] charter --> detect --> plan --> harden --> verify verify -.->|"مرفوض: عمل يُعاد فتحه لمرحلة harden،
يُعاد تطبيقه وفق السبب المسجّل"| harden verify -.->|"الإغلاق: يُخرج ما أثبت إغلاقه
من السلسلة كلها،
سطر واحد في السجل التاريخي"| detect ``` **الشكل 1.** المسار ذو المراحل الخمس: ما تقرؤه كل مرحلة، وما تكتبه، وثابتها الجوهري. وتقود verify كلا الرجوعين: الضابط المرفوض يعيد فتح harden، والملاحظة التي ثبت إغلاقها تُخرَج من السلسلة، بسطر واحد في السجل التاريخي. الفصل بين المهام هو الإسهام. فلأن لكل مرحلة مهمة واحدة، يبقى نمط الفشل محصورًا في مكان واحد، ويستطيع القارئ الوثوق بما يدّعيه كل مُخرَج. > **فكرة محورية** > > **المطبَّق ليس متحققًا منه:** تسجّل harden أن إصلاحًا قد طُبّق. وتتحقق منه verify بمقابلة الكود بذلك السجل، ولا يُليَّن الحكم أبدًا ليطابق السجل. فقد يكون الضابط موجودًا في الكود ومع ذلك يبقى الخطر قابلًا للوصول، وحينها يكون الحكم الصادق "الخطر لم يُغلق". ### charter (السياسة) يضع ميثاق الأمان مبادئ الأمان للمشروع، وهي القواعد التي يجب أن تحترمها كل مرحلة لاحقة. إنه الطبقة الحاكمة، وهو نوع من فحص وقت الترجمة للوضع الأمني للمشروع. لكل مبدأ اسم واضح، وقاعدة غير قابلة للتفاوض يمكن فحصها مقابل الكود، وسطر `Why:` يذكر الخطر الذي يمنعه، لا الإصلاح فقط. ويقرأ ميثاق الأمان دائمًا المشروع نفسه (ملفات manifest وبنيته واعتمادياته)، أما وصف المستخدم، حين يُقدَّم، فهو اتجاه توسّعه القراءة بعد ذلك إلى ما يتجاوز ما ذكره المستخدم. ودون وصف، يكون المشروع المصدر الوحيد. ويكمّل الاثنان أحدهما الآخر بدلًا من أن يتنافسا، ويسجّل ميثاق الأمان السياسة التي ينبغي للمشروع الالتزام بها، لا حالة كوده. وينبغي أن يستطيع غير المطوّر قراءته وفهم القاعدة والخطر معًا. ### detect (الاكتشاف) تقرأ مرحلة detect الكود وترصد ما يفعله النظام فعلًا مما له وزن أمني. وتعليمتها الحاكمة هي "الاكتشاف، لا الاختلاق": لا تسجّل إلا ما يدعمه الكود، مع الأدلة التي تحتاجها المراحل اللاحقة. ومرحلة detect محايدة. فهي لا تُجبر ملاحظاتها على ملاءمة ميثاق الأمان، لأن مطابقة المخاطر مع قواعد الميثاق مهمة مرحلة plan. وتحمل كل ملاحظة ثلاثة أجزاء: ماهيتها (وصف بلغة بسيطة)، وسبب أهميتها (الخطر، لا الحقيقة فقط)، والدليل (الدالة أو المسار الذي توجد فيه). ولا يحمل الدليل أي مسار ملف. فالمسار لا يعيش إلا في خريطة التتبع (`§XI`)، فلا تحمل النصوص أبدًا مسارًا قد يتقادم. ### plan (الفرز) تحوّل مرحلة plan كل ملاحظة إلى إصلاح، مسمّى بفئة خطره (مع الاستشهاد بالمراجع المعتمدة، CWE و OWASP، حيث تؤسس له) ومرتبط بمبدأ ميثاق الأمان الذي يصونه الإصلاح. والأولوية (Critical أو High أو Medium أو Low) ليست اختيارًا حرًا: تقيّم plan كل ملاحظة بطريقة CVSS v4.0 الأساسية والبيئية، فيكون النطاق هو الدرجة بكلمات بسيطة، مبرّرًا بسطر واحد بلغة بسيطة عن الانكشاف وما هو على المحك، ويصل تشغيلان إلى الترتيب نفسه. والمتجه هو المرتكز الدقيق للخبير، والنطاق وتبريره هما التقييم نفسه الذي يستطيع أي شخص متابعته. ولا تعمل plan إلا من خريطة detect ولا تقرأ الكود أبدًا. وهذا قيد مقصود، لا قصور: فهو يُلزم كل إصلاح بأن يشير إلى شيء اكتشفته detect فعلًا. وإن لم يُرصد نطاق ما من قبل، تتوقف plan وتعيد المستخدم إلى detect بدلًا من التخمين. ### harden (المعالجة) مرحلة harden هي الوحيدة التي تغيّر الكود، لذلك تعمل بحذر. وتحديد ما إذا كان التعديل يحتاج إلى موافقة المستخدم يعود إلى الوكيل ووضع الأذونات الذي يعمل به، لذلك لا تضيف harden بوابة تأكيد خاصة بها. تطبّق إصلاحًا واحدًا في كل مرة، الاعتماديات أولًا، ثم الأعلى أولوية، فيبقى كل تغيير صغيرًا وقابلًا للمراجعة وسهل التراجع عنه. ولا تُضعف أبدًا ضابطًا قائمًا لتجعل إصلاحًا جديدًا ملائمًا، ولا تخرق أبدًا مبدأً من مبادئ ميثاق الأمان. وإن كان إصلاح ما سيتعارض مع مبدأ، تتوقف harden وتُظهر التعارض بدلًا من تطبيقه. وتُسجَّل كل كتلة على أنها Applied أو Partial أو Blocked. و"المطبَّق لا يعني أنه تُحقق منه بعد"، وهي المسألة التي تعالجها المرحلة التالية. ### verify (التحقق) تتحقق مرحلة verify من كل ضابط مطبّق بقراءة الكود ومقابلته بما سجّلته harden. والتحقق هو تلك المقابلة، الكود مقابل السجل، وهو ثابت: يؤكد أن الضابط موجود وصحيح في الكود، لا أن الضابط يصمد أمام هجوم على نظام يعمل. وذلك الفحص وقت التشغيل، من النوع الذي ينفّذ هجمات حقيقية أو محاكاة على النظام الحي، خارج النطاق بالتصميم. وتعيد verify واحدًا من ثلاثة أحكام: الخطر أُغلق، أو الخطر لم يُغلق، أو لا يمكن الحسم من الكود. ولا تنتج مُخرَجًا خاصًا بها: تتشارك harden و verify سجل التحصين، فتملك harden ما أُنجز وتملك verify الحكم وسببه، ولا تكتب أي منهما أبدًا في حقول الأخرى. والضابط المرفوض عمل يُعاد فتحه لمرحلة harden، التي يعامل تشغيلها التالي الحكم على أنه يتقدم على قراءتها الخاصة للكود، وتعيد التطبيق وفق الفجوة المحددة التي يذكرها السبب. وتثق verify بالكود أكثر من السجل، لأن السجل قد يدّعي أكثر مما يقدّمه الكود. وهي للقراءة فقط على كود المستخدم، ولا تليّن أبدًا حكمًا ليطابق السجل. فقد يكون الضابط موجودًا ومع ذلك يبقى الخطر قابلًا للوصول بطريقة أخرى، وفي هذه الحالة يكون الحكم الصادق "الخطر لم يُغلق". وإن لاحظت verify أثناء القراءة مشكلة أمنية لم تغطّها خريطة detect قط، فإنها لا تختلق حكمًا لها، لأن الاكتشاف مهمة detect: بل تُظهر المشكلة وتعيد المستخدم إلى detect، فتدخل الملاحظة عبر المسار نفسه بدلًا من تجاوزه. > **مثال متصل: رفع الملفات.** ملاحظة واحدة تُظهر العمود الفقري من البداية إلى النهاية. > > - **detect** تجدها: يقبل النظام ملفات من المستخدمين، ويثق الـ handler الخاص بالرفع في نوع MIME الذي يرسله العميل دون التحقق من النوع الحقيقي للملف. _سبب الأهمية:_ قد يخفي ملف متنكر في صورة كودًا خبيثًا. > - **plan** تقرر الإصلاح، بأولوية **Critical**، صونًا للمبدأ "كل مدخل غير موثوق حتى يُتحقق منه": تحقق من النوع الحقيقي للملف وحجمه، وأعد تسميته عند الحفظ، وخزّن الملفات المرفوعة حيث لا يمكن تشغيلها ككود. > - **harden** تطبّقه، بالحالة **Applied**: صار الـ handler يكتشف النوع الحقيقي من المحتوى، ويفرض حدًا للحجم، ويرفض أي شيء غير متوقع، ويعيد التسمية عند الحفظ، ويخزّن حيث لا يمكن تشغيل الكود. > - **verify** تقرأ الـ handler، وتقابله بالسجل، وتعيد **risk closed**: يفعل الكود بالضبط ما يدّعيه السجل. > > يمتد اسم الملاحظة نفسه عبر خريطة detect، والخطة، وسجل التحصين، وتعمل verify على ذلك السجل بالاسم نفسه: يُكتب الحكم المفتوح في كتلة الملاحظة، والملاحظة التي ثبت إغلاقها تُخرَج من السلسلة (`§V`). وذلك الاسم المشترك هو هويتها (`§XI`). --- ## V. قابلية الإغلاق: للملاحظة حالة نهائية تترك معظم الأدوات الأمنية المستخدم مع قائمة متراكمة لا تكف عن النمو. وتتبنى SDH موقفًا مختلفًا: **الملاحظة قابلة للإغلاق، لذلك لها حالة نهائية بدلًا من أن تعيش في قائمة متراكمة لا تنتهي** (الشكل 2). وهذا يتبع مباشرة من مبدأ المواءمة. > **تعريف** > > **قابلية الإغلاق:** الخطر الذي يثبت إغلاقه يُخرَج من المسار كله، فتبلغ تلك الملاحظة حالة مستقرة ولا يُعاد فتحها إلا عند تغيّر الكود. للملاحظة حالة نهائية، حتى وإن ظل البرنامج الأمني نفسه مستمرًا. مُخرَجات SDH مستندات حية، لا سجلات. وفي كل مرة تُعاد فيها مرحلة، تعيد فحص كل مدخل قائم مقابل الواقع الحالي وتفعل واحدًا من ثلاثة أشياء: تُبقي ما لا يزال صحيحًا، أو تعيد كتابة ما تغيّر، أو تزيل ما لم يعد ينطبق. والملاحظة التي يُظهر الكود أنها حُلّت تُزال ببساطة. ويعكس سجل العمل الحاضر، لا الماضي. والإغلاق هو تلك المواءمة نفسها وقد بلغت نهايتها. فحين تتحقق verify من إغلاق خطر، تُخرج الملاحظة من المسار كله: خريطة detect، والخطة، وسجل التحصين، وخريطة التتبع. ولهذا فإن verify هي المرحلة الوحيدة التي تكتب في مُخرَجات المراحل الأخرى: إنها المرحلة التي تُغلق الحلقة. ومع خروج الملاحظة من السلسلة، يختصرها الإخراج في مدخل قصير في سجل تاريخي يعيش خارج سلسلة العمل ولا يُعاد معالجته أبدًا. وهذا هو الحد الفاصل بين الاختفاء والإغلاق: الملاحظة التي أزالتها المواءمة لأنها لم تعد صحيحة لا تترك شيئًا خلفها، أما الملاحظة التي ثبت إغلاقها فتستحق سطرها في السجل التاريخي. والملاحظة المُخرَجة تغيب بعد ذلك عن كل مُخرَج عمل، وهذا الغياب متوقع، لا سلسلة مكسورة. ```mermaid stateDiagram-v2 direction TB [*] --> OPEN: detect ترصدها OPEN --> Plan: plan Plan --> Harden: harden Harden --> Verify: verify Verify --> StoodDown: الخطر أُغلق StoodDown --> SETTLED SETTLED --> OPEN: تغيّر الكود يعيد فتح ملاحظة Plan: plan Harden: harden Verify: verify StoodDown: STOOD DOWN · سطر واحد في السجل التاريخي ``` **الشكل 2.** آلة حالات قابلية الإغلاق. تنتقل الملاحظة من OPEN إلى STOOD DOWN ثم إلى SETTLED، ولا يُعاد فتحها إلا عند تغيّر الكود. حين يُخرَج كل ما هو ضمن النطاق من السلسلة، تستقر الدورة، وللحالة المستقرة شكل ملموس: المُخرَج الذي أُغلقت آخر ملاحظاته يُزال بالكامل، فلا تترك السلسلة المغلقة بالكامل إلا ميثاق الأمان والسجل التاريخي، أي السياسة والإثبات. ولا يُعاد فتح الدورة إلا عند تغيّر الكود. وتمنح المنهجية كل ملاحظة نهاية محددة، وهذا بالضبط ما لا تستطيعه القائمة المتراكمة التي لا تنتهي. --- ## VI. ثنائية موسّع معرفة المطوّر لا تحل SDH محل الأشخاص، ولا محل أدوات الفريق الأزرق المتخصصة. بل **توسّع معرفة المطوّر نفسه**. فكلما فهم المطوّر الأمان أكثر، استطاع قيادة المسار بدقة أكبر، وحصل على استقلالية أكبر. أما المطوّر الذي يفهم القليل فيحصل مع ذلك على نتيجة آمنة، لأن الوضع التلقائي يحميه. والقلب الوارد في `§I`، أي أن المعرفة الأمنية تعيش في المواصفة، يعمل في الاتجاهين. فبالنسبة للمبتدئ، هو حماية: لا يحتاج إلى معرفة ما يطلبه، لأن المواصفة تقترح. وبالنسبة للخبير، هو تضخيم: المواصفة نفسها تتيح له توجيه المسار بدقة بدلًا من العمل في مواجهة قائمة تحقق ثابتة. تحمل كل مرحلة هذه الثنائية في طريقة عملها (الشكل 3). فحين تُشغَّل دون مدخل، تعمل على النطاق كله نيابة عن المستخدم. وحين تُعطى توجيهًا، تضيق المرحلة نفسها إلى ما وجّهها إليه المستخدم بالضبط. ```mermaid flowchart TB inversion["قلب واحد، واتجاهان:
المعرفة الأمنية تعيش في المواصفة"] inversion --> auto["الوضع التلقائي (دون مدخل)
تقترح المرحلة وتعمل
على النطاق كله"] inversion --> directed["الوضع الموجَّه (مع مدخل)
تضيق المرحلة إلى ما
وجّهها إليه المستخدم بالضبط"] auto --> novice["المبتدئ، محميًا:
نتيجة آمنة دون
معرفة ما يطلبه"] directed --> expert["الخبير، مضخَّمًا:
مسار موجَّه بدقة،
لا قائمة تحقق ثابتة"] novice -.-> phases["المراحل الخمس نفسها تخدم الاثنين:
charter · detect · plan · harden · verify"] expert -.-> phases ``` **الشكل 3.** ثنائية موسّع معرفة المطوّر. قلب واحد يخدم جمهورين: الوضع التلقائي يحمي المبتدئ، والوضع الموجَّه يضخّم الخبير، عبر المراحل الخمس نفسها. وتجعل التخصصات التي تُحمَّل عند الحاجة (`§VII`) هذه الثنائية صريحة في نصها. فكل منها يخبر الوكيل بأن معرفته "توسّع حكمك"، وبأن يواصل الاستدلال إلى ما يتجاوز ما يقدّمه التخصص. فالمعرفة أرضية، لا سقف. وهذا ما يخدم الجمهورين بالتوازن الذي تقصده الورقة: يكسب مجتمع المطورين أداة جوهرية، ويكسب ممارس الفريق الأزرق حاملًا منظمًا لا يدّعي أداء عمله نيابة عنه. --- ## VII. التخصصات غير القابلة للاستدعاء و prompt-on-demand هذا أكثر أنماط المنهجية جِدّة. تحمل SDH معرفة أمنية مركّزة على شكل تخصصات لا تُحمَّل **إلا عند الحاجة**، ويقرر الوكيل نفسه أيها يحمّل بمطابقتها مع سياق المشروع. ونسمّي هذا **prompt-on-demand**: طريقة يختار بها الوكيل المعرفة التي يفعّلها بناءً على نطاق المشروع الذي يعمل فيه، بدلًا من تشغيل كل فحص افتراضيًا. والتخصصات تطورية، ويمكن تغيير أي منها أو استبداله في أي وقت. والإسهام هو النمط، لا التخصصات نفسها. > **تعريف** > > **Prompt-on-demand:** يختار الوكيل المعرفة الأمنية التي يفعّلها بمطابقتها مع نطاق المشروع الذي أمامه، فتُجلب المعرفة ذات الصلة لما يكونه المشروع فعلًا، بدلًا من تشغيل كل فحص افتراضيًا. > **تعريف** > > **التخصص غير القابل للاستدعاء:** وحدة معرفة أمنية مركّزة ومستقلة عن لغة البرمجة لسياق واحد، مثل رفع الملفات أو الكود الذي يعمل في المتصفح. يدقّق ويشرح، ولا يعيد كتابة الكود أبدًا، ولا ينتج أبدًا مدخلًا هجوميًا. وهو ليس أمرًا: يُحمَّل حين يكون السياق الذي يغطيه ضمن النطاق، أو حين يطلبه موجّه باسمه. يسمّي كل تخصص الأشكال الأكثر أمانًا للمخاطر التي يغطيها، ويخبر الوكيل بكيفية التصرف إزاء الملاحظة في كل مرحلة تستهلكه: كيف يحكم عليها عند الاكتشاف، وكيف يطبّق إصلاحها بأمان عند المعالجة، وكيف يُثبتها عند التحقق. والسمة المميزة أن التخصص **غير قابل للاستدعاء وحده**: فهو ليس أمرًا، وداخل المسار تكون المطابقة هي ما يحمّله. تسرد مرحلة الاكتشاف الكتالوج مرة واحدة، وتطابق سياق المشروع مع ما يغطيه كل مدخل، ولا تحمّل إلا التخصصات التي يتوفر سياقها ضمن النطاق. وتعيد المراحل اللاحقة استخدام تلك القائمة المطابقة بدلًا من إعادة السرد، فتخدم مطابقة واحدة السلسلة كلها، ويشغّل الوضع الوقائي (`§IX`) المطابقة نفسها على العمل الذي يوشك أن يُبنى. والتخصص الذي يغيب سياقه يُتخطى، والتخطي خاضع للمساءلة بقدر التحميل: كل مدخل في الكتالوج يحصل على حكم صريح، مطبَّق أو متخطى مع السبب المقروء من الكود، فلا يحل أبدًا إحساس مبهم بعدم الصلة محل الغياب. وعدم العثور على أي تخصص منطبق نتيجة صالحة. الكتالوج بيانات، والنمو ملف معرفة واحد وصف واحد في الكتالوج، لا أمر جديد أبدًا. والتخصصات المدمجة مجمّعة في فئات، مثل OWASP، أو لغة برمجة، أو تكاملات الذكاء الاصطناعي، والكتالوج الذي يستخدمه المشروع يضم التخصصات المدمجة في الفئات التي اختارها إضافة إلى تخصصاته الخاصة. ويسجّل المشروع ذلك الاختيار مع بقية حالته، فيطابق الفريق كله مع الكتالوج نفسه. وهذا هو مبدأ إدراك السياق نفسه الذي تتبعه المراحل، مطبّقًا على المعرفة: تُجلب المعرفة ذات الصلة لما يكونه المشروع فعلًا، بدلًا من تشغيل كل فحص افتراضيًا. والخاصية نفسها تتيح للمستخدم، لا للمشرف وحده، توسيع الكتالوج: مصدر أمني أو موضوع يقدّمه المستخدم يُستخلص منه تخصص جديد ينتمي إلى المشروع، وينضم إلى كتالوجه أيًا كانت الفئات، ويُحمَّل تمامًا مثل التخصص المدمج، ويحل محل التخصص المدمج الذي يحمل الاسم نفسه. وكتابة التخصص نفسها للدفاع فقط وتلتزم بالحد نفسه الذي تفرضه التخصصات: قد يكون شرح الهجوم هو المصدر، لكن التخصص الناتج عنه يدقّق ويشرح، ولا يُخرج أبدًا أداة استغلال عاملة. وهكذا يمتد قلب `§I`، أي أن الذكاء يعيش في المواصفة، إلى الكتالوج نفسه، الذي يستطيع المستخدم تعميقه لسياقه دون كتابة كود. ومثال قصير يوضح prompt-on-demand. تقرأ مرحلة detect مجلدًا من كود يعمل في المتصفح. فتطابق ذلك السياق في الكتالوج، وتحمّل التخصص الذي يغطيه، وتُظهر ملاحظة من جهة العميل عبر خطوات detect المعتادة. والتخصصات التي يغيب سياقها عن هذا النطاق لا تتطابق، فلا تُحمَّل أبدًا، ويُسجَّل كل منها على أنه متخطى. والمشروع هو الذي قرر المعرفة ذات الصلة، لا إعداد ثابت. وتظهر الحتمية حيث تهم تحديدًا. فيمكن للتخصص أن يحمل فاحصًا حتميًا، لا نصًا فقط: حيث يكون لفئة خطر إجراء قرار حاسم، يعيد برنامج صغير حكمًا ثابتًا لمدخل معيّن، مثل مجموعة قصيرة من الكلمات كـ `safe` أو `unsafe` أو `invalid input`. وبعض فئات المخاطر قابلة للحسم الحتمي بهذه الطريقة بالضبط، مع رصيد من الأعمال السابقة خلف إجراء القرار `[9]`، `[10]`، `[11]`. ويقيّم الفاحص إما مرشحين يقدّمهم الوكيل أو يفحص النطاق ليجدهم بنفسه، وفي الحالتين يعيد الفاحص الحكم، لا الوكيل. والتخصص العام بما يكفي يمكن وسمه بأنه مطلوب في الكتالوج، فيُطبَّق حينها دائمًا، ويُشغَّل فاحصه على النطاق كله. وهذه الحالة الوحيدة التي تُحمَّل فيها المعرفة دون مطابقة سياق، وهي معلنة في بيانات الكتالوج، ولا يقررها الوكيل في اللحظة أبدًا. وهنا ترسّخ SDH استدلال الوكيل في شيء قابل للتكرار، دون ادّعاء أن المسار كله حتمي. وأخيرًا، التخصصات **قابلة للفصل**. فلأن المعرفة قائمة بذاتها، يستطيع المستخدم تشغيل أحدها مباشرة في موجّه لا علاقة له بمسار SDH الكامل، فيُبقي الأمان مصاحبًا للتطوير العادي. فالتخصص الذي يحمل فاحصًا حتميًا يستطيع، مثلًا، تصفية كل مرشح يُنتَج أثناء البرمجة العادية والإبقاء على الآمن منها فقط. وقابلية الفصل هذه جزء من سبب تكيّف SDH مع مواقف كثيرة، وهو موضوع `§VIII`، وتعبيرها الكامل هو الوضع الوقائي (`§IX`)، حيث تحرس المعرفة نفسها التطوير العادي من البداية إلى النهاية. --- ## VIII. الاستقلال عن الحالة والتكيّف غير السلطوي خاصيتان تفصلان SDH عن منهجيات المواصفة الجامدة. ### الاستقلال عن الحالة > **تعريف** > > **الاستقلال عن الحالة:** لا تعتمد المنهجية على حالة التطوير. فهي تلائم دليلًا فارغًا، أو مشروعًا قيد التنفيذ، أو pull request واحدًا، أو قاعدة كود قديمة كبيرة، بأي تقنية، لأنها تتعلم نقطة البداية بقراءتها. تعمل كل مرحلة بالطريقة نفسها سواء كان المشروع جديدًا تمامًا أو قائمًا بالفعل. فيستنتج ميثاق الأمان المبادئ من أي كود موجود. وترصد detect أي كود موجود، حتى لو كان قليلًا جدًا. ولا توجد نقطة بداية مفترضة. ### التكيّف غير السلطوي > **تعريف** > > **التكيّف غير السلطوي:** تتكيف المنهجية مع السيناريو بدلًا من فرض نطاق ثابت يجب على المستخدم اتباعه. وحين لا يعرف المستخدم ما يقوله، تقرأ البيئة التي استُدعيت فيها، وتولّد السياق، وتطرح الأسئلة التي تشكّل ما تفعله بعد ذلك. ووضع الاقتراح في ميثاق الأمان هو أوضح حالة: تستخلص SDH ميثاق أمان آمنًا افتراضيًا بتحليل المشروع، ولا تسأل المستخدم إلا حين تغيّر فجوة ما النتيجة فعلًا، ثم تكتبه وتعرض كل مبدأ بلغة بسيطة مع الخطر الذي يمنعه. وميثاق الأمان مستند حي يعيد المستخدم صياغته بإعادة التشغيل، لا عقد مشروط بنافذة موافقة، لذلك لا يتطلب أبدًا أن يعرف المستخدم ما يطلبه. ويظهر هذا التكيّف كحساسية لشكل المدخل: المرحلة نفسها تقرأ ما أُعطيت وتختار وضعًا (الشكل 4). ملف في الموجّه، أو ملاحظة من القائمة، أو مصدر قلق، أو مهمة مركّزة على نقطة ضعف معروفة، أو طلب فحص شامل بالقوة الغاشمة: كل منها يلائم حاجة المستخدم، لأن المسار غير سلطوي بالتصميم. ولا شيء من هذا يُضعف الأساس الآمن افتراضيًا. فالمرونة تشكّل طريقة تطبيق الأساس، ولا تخفضه أبدًا. ```mermaid flowchart TB shape["تقرأ المرحلة شكل
ما أُعطيت"] shape --> none["دون مدخل"] shape --> paths["مسار أو أكثر"] shape --> concern["مصدر قلق موصوف"] shape --> finding["ملاحظة مسمّاة"] shape --> band["نطاق أولوية"] none --> auto["الوضع التلقائي:
اقترح، أو افحص
النطاق كله"] paths --> focus["ركّز فقط على تلك
الملفات أو الأدلة"] concern --> scoped["احصر النطاق في
مصدر القلق ذاك"] finding --> item["اعمل على ذلك العنصر
المتتبَّع الواحد"] band --> priority["اعمل فقط على Critical
أو High أو Medium أو Low"] ``` **الشكل 4.** التكيّف غير السلطوي. تقرأ المرحلة نفسها شكل مدخلها وتختار وضعًا، فيبقى النطاق دائمًا للمستخدم، ولا يُفرض عليه أبدًا. --- ## IX. الوضع الوقائي الشامل: الدفاع نفسه أثناء بناء العمل تحمل SDH وضعًا مكمّلًا واحدًا: التطوير العادي الذي يجري والدفاع نفسه نشط أثناء كتابة الكود. يطلب المستخدم العمل نفسه، صفحة تسجيل دخول، أو رفع ملفات، أو نقطة API، وتحرس المنهجية البناء أثناء حدوثه، فتكون النتيجة آمنة افتراضيًا لحظة وصولها بدلًا من أن تصبح كذلك بعد جولة تحصين لاحقة. > **تعريف** > > **الوضع الوقائي:** تطوير عادي يجري تحت الطبقة الحاكمة لمنهجية SDH ومعرفتها. يُلزم ميثاق الأمان البناء، وتُحمَّل التخصصات ذات الصلة بما يوشك أن يُنشأ عند الحاجة، وتُقابَل النتيجة بالدفاع الذي استُخدم بالضبط قبل اعتبار العمل منجزًا. يعيد الوضع استخدام كل جزء تحمله المراحل بالفعل، موجّهًا إلى كود لم يوجد بعد. فينتقل رصد السياق من الكود إلى النية: يستدل الوكيل على ما يوشك أن يبنيه وعلى الحدود التي يعبرها ذلك العمل (تسجيل الدخول يعني بيانات اعتماد، وجلسة، ومدخلات من الخارج)، وذلك الاستدلال هو ما يُطابَق معه كتالوج المعرفة. ويتعمم prompt-on-demand (`§VII`) هنا: يمكن رصد السياق في خطة الكود، لا في الكود الموجود فقط. ويحكم ميثاق الأمان كما يفعل دائمًا، والطلب الذي سيخرق مبدأً يُعرض كتعارض، ولا يُبنى أبدًا. ويُطبَّق الدفاع أثناء الكتابة، في لحظة كتابة كل جزء، بالتحقق عند الحدود واللجوء إلى البنية الآمنة من المرة الأولى، فلا توجد أبدًا نسخة تعمل لكنها غير آمنة تحتاج إلى تصحيح. وينتهي الوضع حيث تبدأ verify. فقبل اعتبار العمل منجزًا، يقابل الباني نتيجته بالدفاع الذي استخدمه: يجب أن يقع الضابط على مسار الخطر، لا بجانبه، ويجب أن يكون كاملًا، وحيث يحمل التخصص فاحصًا حتميًا، يتقدم حكم الفاحص على قراءة الوكيل نفسه. والفجوة التي تُكتشف هنا تُغلق كجزء من العمل نفسه، لأن إنهاء العمل يعني إنهاءه بأمان. وما يرفضه الوضع مقصود بقدر ما يفعله. فهو لا يبني إلا ما طُلب ولا يدقّق شيئًا حوله: تدقيق الموجود من مهمة المراحل. ولا يكتب أي مُخرَج ولا يتتبع أي ملاحظة، لأن الملاحظة خطر يُرصد في ما هو موجود، وغاية هذا الوضع ألا تصل النسخة غير الآمنة أبدًا. والاتجاهان يكمّل أحدهما الآخر: تُغلق المراحل ما هو موجود بالفعل (`§V`)، ويمنع الوضع الوقائي العمل الجديد من إعادة فتحه. والسلسلة المستقرة تبقى مستقرة لا لأن التطوير توقف، بل لأن ما يُبنى أثناء استقرارها يُبنى محصّنًا. --- ## X. منهجية Security-Driven Hardening مقابل Spec-Driven Development نشأت Security-Driven Hardening (SDH) من قاعدة Spec-Driven Development (SDD) ثم افترقت عنها افتراقًا حادًا. والإرث البنيوي حقيقي ومعترف به: المواصفة أولًا، وقيادة الوكيل، ومستند حاكم، ومجموعة أوامر مرحلية يشغّلها الوكيل. وتعيد SDH استخدام تلك البنية عن قصد. أما ما يختلف فهو الغاية، ونموذج السلطة، والحالة المفترضة، وشرط النهاية. ونتعامل مع SDD كفئة، مستخدمين تقرير Piskala `[1]` كالصياغة القياسية للمنهجية، و Spec Kit من GitHub `[2]` كأداة الوكلاء القياسية، و OpenSpec `[3]` كأداة ثانية من العائلة نفسها. تقلب SDD التطوير التقليدي بجعل المواصفات قابلة للتنفيذ: تولّد المواصفة مباشرة تنفيذًا يعمل بدلًا من مجرد توجيهه `[1]`. ومجموعة مراحلها تدفع البناء إلى الأمام `[2]` (وضع المبادئ الحاكمة، وتحديد ما يُبنى، والتخطيط للتقنيات، وتقسيم الخطة إلى مهام، ثم التنفيذ). ومستندها الحاكم، وهو دستور من المبادئ، هو القطعة الأساسية التي يجب على الوكيل الالتزام بها طوال الوقت. وهنا جوهر الاختلاف. فسلطة SDD تتدفق من المواصفة إلى البناء، ويُتوقع من التنفيذ أن يتبعها. وتقلب SDH تقريبًا كل محور في ذلك العقد (الجدول 3). > **فكرة محورية** > > **الاختلاف الجوهري:** تتدفق سلطة SDD من المواصفة إلى البناء، ويُتوقع من التنفيذ أن يتبعها. أما SDH فغير سلطوية وتتدفق في الاتجاه المعاكس، إلى الداخل انطلاقًا من السياق المرصود للنظام، فتحصّن ما هو موجود بالفعل. | المحور | SDD | SDH | | ---------------- | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | الهدف | تسليم الميزات. تصبح المواصفة تنفيذًا يعمل. | تحصين ما هو موجود أو قيد البناء. كل مرحلة مؤطّرة للدفاع. | | نموذج السلطة | سلطوي. تحصر المواصفة والدستور البناء في نطاق يجب أن يتبعه. | غير سلطوي. تتكيف SDH مع السيناريو، ويستطيع المستخدم إعادة الصياغة أو الحذف أو تضييق النطاق. | | افتراض الحالة | بناء إلى الأمام من مواصفة. | مستقلة عن الحالة: دليل فارغ، أو مشروع قيد التنفيذ، أو PR واحد، أو كود قديم. | | شرط النهاية | تنتهي حين تُبنى الميزة. | قابلة للإغلاق. تبلغ الملاحظة حالة مستقرة، ولا يُعاد فتحها إلا عند تغيّر الكود. | | المستند الحاكم | دستور من المبادئ يجب على الوكيل الالتزام به. | ميثاق أمان من مبادئ مؤطّرة بالمخاطر (يحمل كل منها سطر `Why:`)، وليس عقدًا ثابتًا صراحة. | | كيف تنمو المعرفة | أضف أمرًا (أو وسّع مجموعة المراحل). | أضف تخصصًا غير قابل للاستدعاء يحمّله الوكيل عند الحاجة: ملف واحد وصف واحد في الكتالوج، دون أمر جديد. | | من تخدم | بانٍ يدفع ميزة إلى الأمام. | أي مستخدم، مطورًا كان أم لا، عبر المسار نفسه. | | ما يغيّر الكود | مرحلة التنفيذ تولّد البناء. | مرحلة harden وحدها تغيّر الكود، إصلاحًا واحدًا في كل مرة. | **الجدول 3.** SDD مقابل SDH عبر ثمانية محاور. بنية مستعارة، وعقد مقلوب. وإنصافًا للسلالة: SDD عمل سابق مثبت، وتدين له SDH بالبنية التي تعمل عليها. والافتراق ليس نقدًا لـ SDD، التي تحل مشكلة مختلفة (البناء إلى الأمام) حلًا جيدًا. فـ SDH تأخذ الآلية المثبتة نفسها وتوجّهها نحو الدفاع، والتكيّف، والإغلاق. ويؤكد OpenSpec `[3]`، المنظم حول مقترحات التغيير، وقوائم المهام، ومواصفات لكل تغيير، هذا النمط: العائلة تدفع البناء إلى الأمام من مواصفة، بينما تحصّن SDH النظام إلى الداخل انطلاقًا من سياقه المرصود. وحتى الوضع الوقائي في SDH (`§IX`)، وهو الموضع الوحيد الذي ترافق فيه بناءً إلى الأمام، يحافظ على العقد المقلوب: يحكم طريقة بناء العمل ولا يقرر أبدًا ما يُبنى. --- ## XI. الصرامة الهندسية: انضباط التتبع يحتاج انضباط المواءمة لا الإضافة (`§V`) إلى ركيزة تنجو من إعادة الهيكلة. فيجب أن تبقى الملاحظة عنصرًا واحدًا عبر كل مرحلة تمسّها، ويجب ألا تكسر إعادة تسمية ملف أو نقله السلسلة. وتحل SDH هذا عبر **الهوية بالاسم** و **المسارات المحفوظة في التتبع فقط**. > **تعريف** > > **الهوية بالاسم:** هوية الملاحظة اسمها، المكتوب بالصيغة نفسها في كل مُخرَج. وتحمل النصوص الاسم، ولا تحمل مسارًا أبدًا. وتعيش مسارات الملفات في خريطة التتبع فقط، فلا تكسر إعادة تسمية ملف أو نقله الرابط إلا في مكان واحد بالضبط. كل ملاحظة من detect عنصر متتبَّع واحد. وهويتها **اسمها**، أي عنوان القسم، المكتوب بالصيغة نفسها في خريطة detect، والخطة، وسجل التحصين. وتعيد المراحل اللاحقة استخدام ذلك الاسم حرفيًا أثناء عملها على العنصر نفسه، وتكتب verify حكمها في سجل التحصين تحت الاسم نفسه. ولا تحمل خريطة التتبع إلا التتبع، مدخل واحد لكل عنصر: ```json { "name": "File uploads", "paths": ["src/routes/upload.ts"] } ``` لا تسجّل الخريطة أي نصوص، ولا تعليقات، ولا معرّفًا منفصلًا، ولا مرحلة. فالمُخرَجات النصية تحمل الصياغة، والخريطة لا تحمل إلا الهوية والمسارات. ومسارات الملفات هي الشيء المتغيّر الوحيد، ولا تعيش إلا هنا. ولا يمكن لإعادة تسمية ملف أو نقله أن تكسر الرابط إلا في مكان واحد بالضبط، لا في نسختين متباعدتين أبدًا. ```mermaid flowchart TB detect["خريطة detect"] --> name plan["خطة الدفاع"] --> name harden["سجل التحصين
تكتب verify حكمها هنا"] --> name name["name = "File uploads"
تحمل النصوص الاسم، ولا تحمل مسارًا أبدًا"] name -.-> tracking tracking["خريطة التتبع
{ name: "File uploads",
paths: ["src/routes/upload.ts"] }
لا يعيش المسار إلا هنا، فإعادة التسمية لا تصحّح إلا هذا المدخل"] ``` **الشكل 5.** ناقل الهوية. يتدفق اسم ملاحظة واحد عبر كل مُخرَج، بينما يعيش مسارها في خريطة التتبع فقط، فتُصحَّح إعادة التسمية في مكان واحد. يحافظ فعلان على الخريطة في المسار العادي، ويقف فعل ثالث بمعزل كصيانة. **Track** تسجيل إضافي: تبلّغ المرحلة عن الملاحظات التي كتبتها، فيسجّل المحرك الجديدة منها ويتبع المسار المعاد تسميته للبقية، مصنفًا كلًا منها على أنها جديدة، أو منقولة، أو دون تغيير. ولا يزيل أبدًا أي شيء لم تبلّغ عنه المرحلة. و **Untrack** يُخرج من السلسلة الملاحظات التي أغلقتها verify: في جولة حتمية واحدة يختصر كلًا منها في مدخلها في السجل التاريخي، ويزيل قسمها كاملًا من المُخرَجات، ويحذف المُخرَج الذي ذهبت آخر ملاحظاته، ويحذف مدخل تتبعها، فلا يؤدي الوكيل شيئًا من ذلك يدويًا. وحيث لا تستطيع الجولة الحتمية التقدم بأمان، كاسم مُخرَج لا يزال مقتبسًا في نص ملاحظة أخرى، تنبّه الوكيل إلى الموضع بدلًا من تخمين تعديل. وهذان ما تستدعيه المراحل أثناء عملها. أما **Repair** فهو فعل الصيانة: تفوّض إليه المرحلة تلقائيًا حين تجد مواءمتها الخاصة أن التتبع غير متسق (مسار مسجّل لم يعد موجودًا)، وإلا فيُشغَّل عند الطلب. يعيد مواءمة الخريطة كلها دفعة واحدة، بقراءة كل مُخرَج والكود الحالي، وتصحيح مسارات كل عنصر، وإظهار ما لا يستطيع الحسم فيه وحده: عنصر يتيم (عنصر متتبَّع لم يعد أي مُخرَج يسمّيه) أو مرشح لإعادة التسمية (عنصر تطابق مساراته اسمًا مختلفًا مُبلغًا عنه). و Repair صيانة، لا مرحلة سادسة. فهو لا يمسّ كود المستخدم ولا المُخرَجات النصية، بل التتبع فقط. ولا يقرأ الكود المصدري للمستخدم إلا لسبب واحد، وهو معرفة المسار الجديد لملف أُعيدت تسميته، ولا يكتب محتوى أمنيًا أبدًا. والإنسان هو الحكم الأخير في المسألة الوحيدة التي يرفض المحرك تخمينها: هل حُلّ العنصر الذي اختفى أم أُعيدت تسميته فقط. ومن الأفضل السؤال على التخمين، لأن العنصر المحذوف خطأً يكسر السلسلة. وتطبّق المنهجية انضباطها الدفاعي على نفسها. فالمحركات الحتمية تُستدعى كبرامج سطر أوامر، ويُمرَّر كل مدخل كوسيط مستقل للعملية، ما يُبقيه خاملًا، فلا يمكن أبدًا لقيمة تحتوي على علامات اقتباس أو backticks أن تُحقن في الأمر. والفحص غير المعروف يفشل بدلًا من أن يجيب، فلا يُقرأ الفحص المكتوب خطأً أبدًا كنتيجة نظيفة. ولا تستثني SDH بنيتها الداخلية من مبدأ الأمان الافتراضي. --- ## XII. الحامل: بنية مستقلة عن الوكيل كإثبات لقابلية النقل لكي تكون SDH منهجية يتبنّاها الآخرون، يجب ألا ترتبط بوكيل واحد أو بتقنية واحدة، لذلك يفصل حاملها بين ثلاثة اهتمامات (الشكل 6). ويُثبت Lagune أن هذا ممكن. **القيمة الأمنية** تُكتب مرة واحدة ولا تعرف شيئًا عن الوكيل الذي يشغّلها: تعليمات المراحل والقوالب التي تملؤها، وكتالوج المعرفة، والمحركات الحتمية. و **التوصيل** رقيق: مهمته الوحيدة إيصال تلك القيمة إلى وكيل معيّن بالشكل والمكان اللذين يتوقعهما الوكيل، ولا يحمل أي منطق أمني خاص به. و **حالة المشروع** تخص المشروع: ميثاق الأمان، ومُخرَجات المراحل، وخريطة التتبع، والفئات التي اختارها، وتخصصاته الخاصة، تُضاف إلى المستودع وتُراجَع مثل أي جزء آخر من كوده. ```mermaid flowchart TB value["القيمة الأمنية، مكتوبة مرة واحدة
تعليمات المراحل · القوالب · كتالوج المعرفة · المحركات الحتمية
لا تعرف شيئًا عن الوكيل الذي يشغّلها"] delivery["التوصيل
يوصل تلك القيمة إلى كل وكيل بالشكل الذي يتوقعه
لا يحمل أي منطق أمني"] agent["الوكيل
يشغّل المراحل"] project["حالة المشروع
تُضاف إلى المستودع مع كوده
ميثاق الأمان · مُخرَجات المراحل · التتبع · الفئات · التخصصات الخاصة"] value --> delivery --> agent agent -->|"يقرأ ويكتب"| project ``` **الشكل 6.** الحامل المستقل عن الوكيل. تُكتب القيمة الأمنية مرة واحدة، ويوصلها توصيل رقيق إلى كل وكيل، وتبقى الحالة للمشروع. ولأن التوصيل لا يحمل أي منطق أمني، فإن طريقة بنائه لا تغيّر شيئًا في SDH. فيمكن للحامل أن يبني التوصيل بنفسه أو أن يسلّمه لمنظومة توزّع مهارات الوكلاء بالفعل، كما يفعل التنفيذ المرجعي، وتبقى المراحل ومُخرَجاتها وضماناتها كما هي. ولا شيء من هذا خاص بلغة برمجة أو بيئة تشغيل كذلك. فالتنفيذ المرجعي مكتوب بتقنية معيّنة، لكن المنهجية هي الحد الفاصل بين هذه الاهتمامات، لا سلسلة الأدوات التي تبنيها. ويمكن إعادة تنفيذ التصميم نفسه بلغة أخرى تمامًا دون تغيير ماهية SDH. --- ## XIII. حالة تطبيقية: SDH من البداية إلى النهاية > **حالة تطبيقية** > > **التحصين الدفاعي لسطح رفع ملفات ولوحة إدارة.** > **السياق:** تطبيق صغير يقبل ملفات يرفعها المستخدمون ويسردها في صفحة إدارة. > **النمط:** charter ← detect (مع معرفة تُفعَّل عند الحاجة بحسب السياق) ← plan ← harden ← verify، مع إغلاق واحد وإخفاق حقيقي واحد. > **النتيجة (القدرة):** خطر واحد ثبت إغلاقه وأُخرج من السلسلة، وضابط واحد ثبت أنه _لم_ يُغلق وأُعيد إلى harden. الحكم يعكس الكود، لا السجل. _هذا مثال توضيحي لآليات المنهجية، لا دراسة مقيسة ميدانيًا، ولا يقدّم مقاييس فعالية._ جولة واحدة متصلة تُظهر المنهجية وهي تعمل، لا أجزاءها فقط. نوسّع خيط رفع الملفات من `§IV` بتفعيل معرفة عند الحاجة وبإغلاق، ونضمّن إخفاقًا حقيقيًا واحدًا. 1. **charter** يقترح المبدأ "كل مدخل غير موثوق حتى يُتحقق منه"، مع خطره بلغة بسيطة: المدخل الذي لا يُفحص هو الطريقة الأكثر شيوعًا لاختراق النظام. 2. **detect** يفحص مسار الرفع وصفحة الإدارة الصغيرة التي تسرد الملفات المرفوعة. فيكتشف ملاحظة الرفع (يثق الـ handler في نوع MIME الخاص بالعميل). وتعمل صفحة الإدارة في المتصفح، وهو سياق يتعرف عليه prompt-on-demand (`§VII`)، فيحمّل detect التخصص الخاص بذلك السياق ويُظهر ملاحظة ثانية، وهي موضع يُكتب فيه اسم الملف في الصفحة كـ markup لا كنص، فيستطيع اسم مُصاغ عمدًا أن يعمل كسكربت في متصفح الزائر. والتخصصات التي يغيب سياقها عن هذا النطاق لا تُحمَّل أبدًا، ويُسجَّل كل تخطٍ مع الغياب المقروء من الكود. 3. **plan** يمنح إصلاح الرفع أولوية Critical، مرتبطًا بالمبدأ: تحقق من النوع الحقيقي للملف وحجمه، وأعد التسمية عند الحفظ، وخزّن حيث لا يمكن تشغيل الكود. ويمنح الإصلاح الثاني أولوية High: اعرض اسم الملف كنص، لا كـ markup. 4. **harden** يطبّق إصلاح الرفع أولًا (الأعلى أولوية) ويسجّله Applied، ثم الإصلاح الثاني، Applied. 5. **verify** يقرأ كل موضع ويقابل الكود بالسجل. ضابط الرفع يصمد: يكتشف الـ handler النوع الحقيقي من المحتوى، ويفرض حدًا للحجم، ويرفض الباقي. الحكم: الخطر أُغلق. فتُخرج verify ملاحظة الرفع من السلسلة كلها، ويصل ملخصها المختصر إلى السجل التاريخي. ثم يأتي الإخفاق الحقيقي. لنفترض أن الإصلاح الثاني في harden أضاف دالة مساعدة آمنة لعرض النص لكنه ترك الاستدعاء القديم الذي يكتب markup قابلًا للوصول عبر مسار كود آخر. تقرأ verify الصفحة، فترى الدالة المساعدة الآمنة، وترى أيضًا أن المسار غير الآمن لا يزال حيًا. الضابط موجود، لكن الخطر لم يُغلق. وترفض verify تليين الحكم ليطابق السجل. فتعيد "الخطر لم يُغلق"، وتسجّل الفجوة، وتشير إلى harden. فالضابط الذي لا يعالج الخطر كاملًا ليس نجاحًا. هذه هي طبيعة المنهجية في مثال واحد: اكتشاف مدرك للسياق، وإصلاحات مرتبة حسب الأولوية ومرتبطة بالمبادئ، وتطبيق حذر، وتحقق يبلّغ عن الحالة الفعلية للكود بغض النظر عن السجل. --- ## XIV. متى تُستخدم SDH، وحدودها نادرًا ما تكون SDH غير متناسبة كما يمكن أن تكون العمليات الثقيلة، لأنها مستقلة عن الحالة وقابلة للإغلاق: تتقلص إلى ملف واحد ومصدر قلق واحد، وتبلغ حالة مستقرة بدلًا من ترك عبء دائم. وحدها ليس حجم المشروع، بل **عمق الضمان**. ```mermaid flowchart TB q1{"هل يفعل الكود أي شيء ذي صلة بالأمان؟
(مدخلات، مصادقة، بيانات، أسرار، استدعاءات خارجية)"} q1 -->|لا| little["تضيف SDH القليل هنا."] q1 -->|نعم| q2{"شغّل SDH. هل هناك متطلبات امتثال،
أو وظيفة أمنية مخصصة؟"} q2 -->|لا| baseline["SDH أساس يمكن الدفاع عنه."] q2 -->|نعم| carrier["SDH هي الحامل المنظم:
تدعم مراجعة الخبراء والتدقيق،
ولا تحل محلهما."] ``` **الشكل 7.** متى تُستخدم SDH. التفرع يبدأ بالصلة بالأمان، ثم بعمق الضمان، ولا يتعلق أبدًا بحجم المشروع. حيث تبلغ SDH حدودها: السلوك الذي لا يظهر إلا حين يعمل النظام (تقرأ verify الكود، ولا تشغّل النظام)، والخطر الذي يعتمد على إعدادات أو بيئة لا يستطيع الوكيل قراءتها، والسياقات عالية المخاطر حيث تلزم مراجعة الخبراء في كل الأحوال. وفي كل منها، تظل SDH تضيف قيمة كجولة أولى منظمة، لكنها أرضية، لا سقف. > **فكرة محورية** > > **الحد:** حد SDH هو عمق الضمان، لا حجم المشروع. يمكنها أن تكون أساسًا يمكن الدفاع عنه في كل مكان تقريبًا، وتدعم مراجعة الخبراء حيث تتطلب المخاطر ذلك، لكنها لا تحل محل اختبار النظام أثناء تشغيله أو محل حكم المتخصص في الأمان. --- ## XV. النقاش: الموقع، والحدود، وما لا تدّعيه SDH تتحرى SDH الدقة في حدودها. ### توسّع، ولا تستبدل لا تحل SDH محل المتخصصين في الأمان ولا محل أدوات الفريق الأزرق المتخصصة. بل توسّع معرفة المطوّر (`§VI`). والادعاء المتزن هو الصحيح: حين تُطبَّق جيدًا، **يمكن** لـ SDH أن تُغلق مخاطر حقيقية بفعالية، وخاصة في المشاريع التي لن تحصل لولاها على أي مراجعة أمنية. وهي ليست ضمانًا، وليست بديلًا عن مراجعة الخبراء حيث تتطلب المخاطر ذلك. ### للدفاع فقط، بحكم البناء تدقّق SDH وتحصّن وتتحقق. ولا تنتج أبدًا أدوات هجومية، أو أدوات استغلال، أو وسائل تهرّب من الاكتشاف لإلحاق الضرر. والمحتوى الأمني مزدوج الاستخدام مقبول فقط في إطار دفاعي واضح ومصرّح به. وهذا حد صارم، لا تفضيل. ### التحقق جوهري، لا شكلي تتحقق verify بقراءة الكود ومقابلته بالسجل، لا بتشغيل النظام. وهذا تحقق ثابت: يؤكد أن الضابط موجود وصحيح في الكود، ولا يُثبت أن الضابط يصمد أمام هجوم وقت التشغيل. لذلك فإن "لا يمكن الحسم من الكود" حكم مشروع، لا إخفاق مستتر خلف نتيجة ناجحة. وحين لا يكون الدليل في الكود (لأنه يعتمد على الإعدادات، أو على مسار لا يستطيع الوكيل قراءته)، تقول SDH ذلك بدلًا من التخمين. ### الحتمية محصورة، ومسمّاة تعتمد معظم SDH على استدلال الوكيل، وهو ما يمكّنها من إدراك السياق. والحتمية محفوظة للمحركات الحتمية: الفاحصات التي قد يحملها التخصص (`§VII`) ومحرك التتبع (`§XI`). ولا تطمس الورقة هذا الخط. فحيث تكون النتيجة حتمية، فهي نتيجة برنامج. وحيث تكون مستنتجة، فهي قراءة الوكيل للكود، والمستخدم هو الحكم الأخير. ### التكلفة والنطاق الفحص الكامل يستهلك رموزًا كثيرة. والأوضاع اليدوية (`§VI`، `§VIII`) موجودة جزئيًا لإبقاء التكلفة متناسبة مع مصدر القلق. ### المستخدم هو الحكم الأخير تطلب SDH من الإنسان أن يقرر بين إعادة التسمية والحل، وتبقى الموافقة على تعديلاتها للكود حيث يحكم المستخدم وكيله بالفعل، في وضع الأذونات الذي يشغّله به. فالمنهجية تقترح وتتحقق. ولا تنقض قرار الشخص. ### اعتراضات وردود سيطرح المتشكك المنصف عدة اعتراضات. والجوهري منها يستحق أن يُطرح بكلماته. **"أليس هذا مجرد محلل ثابت أُلصق به LLM؟"** لا. فالمحلل الثابت يشغّل كل قاعدة لديه افتراضيًا. أما SDH فترصد ما هو النظام أولًا، ثم تلجأ إلى المعرفة ذات الصلة (`§II`، `§VII`)، و _تضمّن_ فاحصًا حتميًا فقط حيث يكون لفئة الخطر إجراء قرار حاسم. فالاستدلال يبدأ بالسياق، والحتمية موجّهة. **"أليست هذه مجرد قائمة تحقق أمنية؟"** لا. فـ SDH تقلب قائمة التحقق: يأتي الاكتشاف أولًا، وتُجلب المعرفة لما يفعله المشروع فعلًا (`§II`، `§VII`). **"أليست هذه مجرد SDD بعلامة جديدة للأمان؟"** لا. فـ SDH تستعير بنية SDD وتقلب عقدها: السلطة، وافتراض الحالة، وشرط النهاية، ومن تخدمه، كلها تختلف (`§X`). الآلية نفسها، والاتجاه معاكس. **"ألا تختلق الطريقة التي يستدل بها الذكاء الاصطناعي ملاحظات وهمية؟"** يقيّد التصميم الاختلاق بدلًا من الثقة بأن النموذج سيحسن التصرف. فـ detect لا تسجّل إلا ما يدعمه الكود ("الاكتشاف، لا الاختلاق"، `§IV`)، و verify تقابل الكود بالسجل وقد تجيب "لا يمكن الحسم من الكود" (`§XV`)، والفاحصات الحتمية ترسّخ الحالات القابلة للحسم (`§VII`)، والمستخدم هو الحكم الأخير. وهذا لا يجعل الوكيل معصومًا، بل يجعل ادعاءاته قابلة للفحص. ملاحظة حول الموقع. تُعرَّف SDH هنا بشكل مستقل عن تنفيذها المرجعي. فالمراحل الخمس، وميثاق الأمان المؤطّر بالمخاطر، والمواءمة لا الإضافة وقابلية الإغلاق الناتجة عنها، ومعرفة prompt-on-demand، والوضع الوقائي، والتتبع بالهوية الاسمية، وحد الدفاع فقط، هي المنهجية. ويستطيع فريق آخر تنفيذها بتقنية أخرى ومنظومة وكلاء أخرى، وتبقى النتيجة SDH. و Lagune إثباتها، لا تعريفها. --- ## XVI. المزالق، وكيف تتجنبها SDH بنيويًا تتشارك المنهجيات في هذه العائلة مجموعة معروفة من أنماط الفشل. وجواب SDH عن معظمها بنيوي، مُدمج في المسار بدلًا من تركه للانضباط. | المزلق | الإخفاق | الجواب البنيوي لمنهجية SDH | | -------------------------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------- | | تقادم المواصفة، والقائمة البالية | تتراكم في المُخرَجات مدخلات ميتة لا يثق بها أحد | المواءمة لا الإضافة (`§V`): كل تشغيل يعيد فحص كل مدخل ويزيل ما حُلّ | | الثقة الزائفة، والنتيجة الناجحة | يُفترض أن الضابط الموجود يُغلق الخطر | تقابل verify الكود بالسجل، فيكون "الخطر لم يُغلق" و"لا يمكن الحسم" حكمين من الدرجة الأولى (`§IV`، `§XV`) | | إغراق قائمة التحقق | تحجب البنود العامة الخطر الوحيد المهم | إدراك السياق بدلًا من العمومية، مع prompt-on-demand الذي لا يحمّل إلا ما يستدعيه النطاق (`§VII`) | | الارتهان للأدوات | تلتحم الطريقة بمورّد أو وكيل واحد | حامل مستقل عن الوكيل: تُكتب القيمة الأمنية مرة واحدة، ولا يحمل توصيلها إلى كل وكيل أي منطق أمني (`§XII`) | | الحلقة التي لا تنتهي | لا تُغلق القائمة أبدًا، ولا يستقر العمل أبدًا | قابلية الإغلاق والحالة المستقرة (`§V`) | **الجدول 4.** المزالق المعروفة في هذه العائلة من المنهجيات والجواب البنيوي لـ SDH عن كل منها. وتسمية المزلق والإشارة إلى الآلية هي المقصود: هذه ليست تحذيرات بتوخي الحذر، بل خصائص للمسار. --- ## XVII. الأعمال المستقبلية للمنهجية ولتنفيذها المرجعي خطوات تالية واضحة. - **توسيع كتالوج المعرفة:** كل إضافة تحافظ على شكل `§VII`: ملف معرفة وصف في الكتالوج، دون أمر جديد. والمسار من جهة المستخدم موجود بالفعل هناك: يستخلص المستخدم تخصصاته الخاصة عند الحاجة. والمزيد من اللغات وبيئات التشغيل وفئات المخاطر المدمجة، كل منها ينضم إلى فئة، هو الاتجاه من جهة المشرف، ويُتوقع أن تتطور التخصصات. - **المزيد من الفاحصات الحتمية:** حيث يكون لفئة خطر إجراء قرار حاسم، يمكن للتخصص أن يحمل فاحصًا حتميًا يرسّخ استدلال الوكيل في حكم قابل للتكرار. وتوسيع ذلك ليشمل فئات مخاطر أكثر اتجاه طبيعي. - **التقييم التجريبي:** أقوى سؤال مفتوح هو الفعالية المقيسة: جودة الإغلاق ومعدلات الأحكام الخاطئة عبر قواعد كود حقيقية. ودراسة النتائج الأمنية لـ SDH عمل مستقبلي، والادعاءات هنا محصورة بما يتوافق مع ذلك. --- ## XVIII. الخاتمة فتح التطوير بمساعدة الذكاء الاصطناعي فجوة أمنية لا تستطيع قوائم التحقق العامة سدّها، لأن الخطر المهم خاص بما يفعله النظام فعلًا، وقد لا يعرف من يشحنه ما يجب أن يطلبه. وتسد SDH تلك الفجوة بمسار مدرك للسياق، وللدفاع فقط، وقابل للإغلاق، تعيش فيه المعرفة الأمنية في المنهجية وتخصصاتها التي تُحمَّل عند الحاجة، وهي أساس يستطيع كل مستخدم البناء عليه. ترصد السياق الحقيقي للنظام، وتفرز المخاطر التي يحملها ذلك السياق، وتطبّق الإصلاحات بحذر، وتتحقق من كل منها، ثم تُخرج من السلسلة ما أغلقته فتبلغ كل ملاحظة حالة نهائية. ويعمل الدفاع نفسه وقائيًا أثناء بناء العمل الجديد، فيبقى ما يغلقه المسار مغلقًا. وتتكيف مع أي حالة تطوير بأي تقنية، وتوسّع معرفة المطوّر بدلًا من أن تحل محل الأشخاص والأدوات التي تؤدي هذا العمل بالفعل. و Lagune هو الإثبات، لكن الإسهام هو المنهجية. وتُقدَّم SDH بوصفها المسار الأمني الأساسي لعصر التطوير بالذكاء الاصطناعي، ليتبنّاها الآخرون ويحسّنوها وينفّذوها بتقنياتهم. --- ## المراجع **[1]** D. B. Piskala, "Spec-Driven Development: From Code to Contract in the Age of AI Coding Assistants," arXiv preprint arXiv:2602.00180v1 [cs.SE], Jan. 2026. (Submitted to AIWare 2026.) [Online]. Available: https://arxiv.org/abs/2602.00180 **[2]** GitHub, "Spec Kit: Toolkit for Spec-Driven Development." [Online]. Available: https://github.com/github/spec-kit. Accessed: 2026. **[3]** Fission AI, "OpenSpec: Spec-Driven Development for AI Coding Assistants." [Online]. Available: https://github.com/Fission-AI/OpenSpec. Accessed: 2026. **[4]** B. Chess and G. McGraw, "Static Analysis for Security," IEEE Security & Privacy, vol. 2, no. 6, pp. 76-79, 2004, doi: 10.1109/MSP.2004.111. **[5]** OWASP Foundation, "Source Code Analysis Tools." [Online]. Available: https://owasp.org/www-community/Source_Code_Analysis_Tools. Accessed: 2026. **[6]** OWASP Foundation, "OWASP Top 10:2021." [Online]. Available: https://owasp.org/Top10/. Accessed: 2026. **[7]** MITRE, "Common Weakness Enumeration (CWE)." [Online]. Available: https://cwe.mitre.org/. Accessed: 2026. **[8]** N. Perry, M. Srivastava, D. Kumar, and D. Boneh, "Do Users Write More Insecure Code with AI Assistants?," in Proc. ACM SIGSAC Conf. on Computer and Communications Security (CCS '23), 2023, pp. 2785-2799, doi: 10.1145/3576915.3623157. [Online]. Available: https://arxiv.org/abs/2211.03622 **[9]** J. Davis and contributors, "safe-regex: Detect Possibly Catastrophic, Exponential-Time Regular Expressions." [Online]. Available: https://github.com/davisjam/safe-regex. Accessed: 2026. **[10]** D. Soshnikov, "regexp-tree: Regular Expressions Processor in JavaScript." [Online]. Available: https://github.com/DmitrySoshnikov/regexp-tree. Accessed: 2026. **[11]** T. Jenkinson, "redos-detector: A CLI and Library to Score How Vulnerable a Regex Pattern Is to ReDoS Attacks." [Online]. Available: https://github.com/tjenkinson/redos-detector. Accessed: 2026. --- ## الملحق A: المبادئ، بنصها 1. **آمن افتراضيًا، بلغة بسيطة، للجميع بالتساوي:** يجب أن تكون كل قيمة افتراضية ورسالة وإصلاح آمنة من البداية ومفهومة لأي مستخدم، مطورًا كان أم لا. ولا تُفضَّل فئة من المستخدمين على أخرى. 2. **إدراك السياق بدلًا من العمومية:** يجب أن تبدأ كل مرحلة من السياق المرصود في detect وأن تعمل على ما يفعله النظام فعلًا. فضّل التوصيات الخاصة بذلك السياق على قوائم التحقق العامة. تعيش المعرفة الأمنية في المواصفة وتخصصاتها التي تُحمَّل عند الحاجة، فتوسّع كل ما يجلبه المستخدم. 3. **المرونة بدلًا من الجمود:** تنحني SDH للمشروع وللمستخدم. فالمبادئ والمتطلبات والتوصيات نقاط بداية، لا عقد ثابت. دع المستخدم يعيد صياغة أي شيء أو يحذفه أو يضيفه أو يضيّق نطاقه. والمرونة لا تُضعف أبدًا الأساس الآمن افتراضيًا، بل تتيح للمستخدم فقط تشكيل طريقة تطبيقه. 4. **المواءمة، لا الإضافة فقط:** المُخرَجات مستندات حية، لا سجلات. وحين تُعاد مرحلة، وائم كل مدخل قائم مع الواقع الحالي: أبقِ ما لا يزال صحيحًا، وأعد كتابة ما تغيّر، وأزل ما لم يعد ينطبق. والإغلاق هو هذه المواءمة نفسها وقد بلغت نهايتها. 5. **للدفاع فقط:** تدقّق SDH وتحصّن وتتحقق. ولا تنتج أبدًا أدوات هجومية، أو أدوات استغلال لأغراض خبيثة، أو وسائل تهرّب من الاكتشاف لإلحاق الضرر. والمحتوى الأمني مزدوج الاستخدام مقبول فقط في إطار دفاعي واضح ومصرّح به. 6. **المواصفة أولًا، بقيادة الوكيل، ومؤطّرة للأمان:** ابنِ سير العمل من بنية مثبتة: القوالب، والأوامر، وميثاق أمان حاكم، ووكيل يشغّل المراحل. وأعد تنفيذ تلك البنية لغرض دفاعي. --- # مسرد Lagune: SDH، وميثاق الأمان، والملاحظات، والضوابط > تعريفات بلغة بسيطة لكل مصطلح في Lagune و Security-Driven Hardening: SDH، وميثاق الأمان، و detect، والملاحظة، والضابط، و harden، و verify، والإخراج من السلسلة، وقابلية الإغلاق، والتخصصات، والفئات، والكتالوج. Canonical: https://lagune.ai/ar-AE/docs/references/glossary اللغة: ar-AE الأصل: https://lagune.ai/docs/references/glossary آخر تحديث: 2026-11-09 كل مصطلح أساسي في Lagune وفي منهجية Security-Driven Hardening، معرّف مرة واحدة، بلغة بسيطة. ### Security-Driven Hardening (SDH) المنهجية التي ينفّذها Lagune: منهجية دفاعية على طريقة الفريق الأزرق ومدركة للسياق، ترصد سياق النظام، وتفرز المخاطر التي يحملها هذا السياق، وتوجّه الإصلاحات. وتعيش المعرفة الأمنية في المواصفة وتخصصاتها التي تُحمَّل عند الحاجة، لذلك يُخدم المطوّر وغير المطوّر عبر المسار نفسه. ### Lagune التنفيذ المرجعي لمنهجية SDH: تسعة أوامر للوكيل، لكل منها القالب الذي يملؤه، يشغّلها وكيل الذكاء الاصطناعي لتحصين قاعدة الكود. ويثبّتها كل وكيل عبر مثبّت الإضافات الخاص به أو عبر [**skills.sh**](https://www.skills.sh/wellwelwel/lagune)، كما تعرض [صفحة التثبيت](https://lagune.ai/ar-AE/docs)، وهي تشغّل محرك Lagune في كل خطوة حتمية. ### ميثاق الأمان الطبقة الحاكمة في Lagune: مجموعة من المبادئ التي تضع الأمان أولًا وتلتزم بها كل مرحلة لاحقة. اعتبره فحص وقت الترجمة للوضع الأمني للمشروع. ويُحفظ في `.lagune/memory/charter.md`. ### مسار التطوير الأمر الشامل `/lagune` الذي يحصّن العمل أثناء كتابته. يأخذ أي موجّه في أي مرحلة، ويبني ما طلبته، ويحصّنه بإعدادات افتراضية آمنة قبل أن يعيده إليك، مسترشدًا بميثاق الأمان إن وُجد. ولا يكتب شيئًا في تتبع Lagune، لذلك منتجه الوحيد هو الكود المحصّن. ومع ميثاق الأمان (قبل) ومسار الفريق الأزرق (بعد)، هكذا يحمي Lagune أثناء البناء. ### مسار الفريق الأزرق التدقيق ذو المراحل الخمس في قلب Lagune: charter و detect و plan و harden و verify. كل مرحلة تبني على سابقتها. و"الفريق الأزرق" هو تقليد المدافعين في مجال الأمان، في مقابل الفريق الأحمر الهجومي. ### الملاحظة خطر واحد مكتشف. تحمل كل ملاحظة ماهيتها، وسبب أهميتها، والدليل عليها في الكود. والملاحظة هي الوحدة المتتبَّعة الوحيدة التي تحملها مراحل plan و harden و verify إلى الأمام، ويُعرَّف بها باسمها في كل مُخرَج. ### الضابط الأمني إجراء أمني يُطبَّق لإغلاق خطر. تطبّق مرحلة harden الضوابط، وتُثبت مرحلة verify أنها تصمد. ولا يُضعف Lagune ضابطًا أبدًا لإرضاء موجّه. ### Detect المرحلة التي تقرأ الكود وترصد ما يفعله النظام وأين تكمن المخاطر. وقاعدتها الحاكمة هي الاكتشاف، لا الاختلاق: لا تسجّل إلا ما يدعمه الكود. ### Harden المرحلة الوحيدة التي تمسّ الكود. تطبّق إصلاحات الخطة واحدًا تلو الآخر وتسجّل كلًا منها على أنه Applied أو Partial أو Blocked. و Applied لا يعني أنه أُثبت بعد. ### Verify المرحلة التي تُثبت أن كل إصلاح مطبّق يصمد، بقراءة الكود ومقابلته بما سجّلته مرحلة harden. وتعيد واحدًا من ثلاثة أحكام: Risk closed أو Risk not closed أو Cannot tell from the code. ### الإخراج من السلسلة حين تُثبت مرحلة verify إغلاق خطر، تُخرَج الملاحظة: تُزال من السلسلة كلها، بعد تأكيدك، فلا يُعاد معالجتها. ### قابلية الإغلاق خاصية أن للعمل الأمني حالة نهائية. فلأن الملاحظة التي ثبت إغلاقها تُخرَج من السلسلة، يمكن للمسار أن يستقر، ولا يُعاد فتحه إلا عند تغيّر الكود. ومنهجية SDH قابلة للإغلاق، لا حلقة لا تنتهي. ### المحرك الحزمة `lagune` على **npm**، التي تشغّلها الأوامر عبر `npx` في كل خطوة حتمية: الـ hooks، والكتالوج، والفئات. ### التخصص وحدة معرفة أمنية مركّزة ومستقلة عن لغة البرمجة، لا تُحمَّل إلا عند الحاجة، ولا تُحمَّل افتراضيًا أبدًا. والتخصص ليس أمرًا. حمّل أي تخصص في أي موجّه عبر `read catalog ` الخاص بالمحرك، مثل `npx lagune read catalog regex`. ### الفئة مجموعة مسمّاة من التخصصات المدمجة، من `owasp` إلى فئات خاصة بكل لغة مثل `javascript` و `python` و `go` و `rust`. وتحدد الفئات التي يستخدمها المشروع، المسجّلة في `.lagune/configs.json`، أي التخصصات المدمجة تنضم إلى كتالوجه. وما دامت لا توجد فئة مسجّلة، يستخدم المشروع `owasp` وحدها. ### الكتالوج مجموعة التخصصات التي يستخدمها المشروع: التخصصات المدمجة في فئاته إضافة إلى تخصصاته الخاصة، المكتوبة عبر `/lagune-specialize`. ويسرده `read catalog` الخاص بالمحرك، وتطابقه المراحل مع الكود. ### Prompt-on-demand مبدأ جلب المعرفة الأمنية ذات الصلة لما يكونه المشروع فعلًا، بدلًا من تشغيل كل فحص افتراضيًا. ### الهوية بالاسم نموذج التتبع في Lagune: اسم كل ملاحظة، المكتوب بالصيغة نفسها عنوانًا لقسم في كل مُخرَج، هو هويتها على طول السلسلة. ولا تحمل خريطة التتبع (`.lagune/tracking.json`) إلا التتبع، ولا تحمل نصوصًا أبدًا. ## الأسئلة الشائعة ### ما هي منهجية Security-Driven Hardening (SDH)؟ SDH منهجية أمنية دفاعية على طريقة الفريق الأزرق ومدركة للسياق. ترصد سياق النظام، وتفرز المخاطر التي يحملها هذا السياق، وتوجّه الإصلاحات، مع إبقاء كل ملاحظة بلغة بسيطة. و Lagune هو تنفيذها المرجعي. ### ما هو ميثاق الأمان في Lagune؟ ميثاق الأمان هو الطبقة الحاكمة في Lagune، وهو مجموعة من المبادئ التي تضع الأمان أولًا وتلتزم بها كل مرحلة لاحقة. ويُحفظ في ‎.lagune/memory/charter.md. ### ماذا يعني إخراج ملاحظة من السلسلة؟ حين تُثبت مرحلة verify إغلاق خطر، تُخرَج الملاحظة: تُزال من السلسلة كلها بعد تأكيدك، فلا يُعاد معالجتها. --- # مخطط الإعدادات > مخطط JSON Schema لإعدادات مشروع Lagune، للإكمال التلقائي والتحقق في محررك، يتبع Lagune الحالي أو مثبّتًا على إصدار. Canonical: https://lagune.ai/ar-AE/docs/references/configs-schema اللغة: ar-AE الأصل: https://lagune.ai/docs/references/configs-schema آخر تحديث: 2026-11-09 يسجّل `.lagune/configs.json` [**الفئات**](https://lagune.ai/ar-AE/docs/categories) التي يستخدمها المشروع، ويفهرس [**تخصصاته**](https://lagune.ai/ar-AE/docs/catalog) الخاصة، ويحدد ما تستثنيه [**الفاحصات**](https://lagune.ai/ar-AE/docs/hooks/configure). ويسمح مخطط JSON Schema الخاص به لمحررك بإكمال كل حقل تلقائيًا والتنبيه إلى خطأ إملائي أو فئة غير معروفة أثناء تعديل الملف. ## المخطط الحالي كلما كتب **Lagune** الملف ولم يجد فيه `$schema`، يوجّه الملف إلى المخطط الحالي: ```json { "$schema": "https://lagune.ai/schemas/configs.json", "categories": ["owasp", "javascript"] } ``` يتبع هذا العنوان دائمًا **Lagune** الحالي. والملف المكتوب قبل **Lagune** 0.16.0 يحصل عليه عند تغييره التالي، وتنبّه إليه كل مرحلة حتى ذلك الحين. ## ثبّت إصدارًا يحمل كل إصدار من **Lagune** بدءًا من 0.16.0 المخطط كما كان في ذلك الإصدار، منشورًا على **npm** ومقدَّمًا عبر **jsDelivr**. ولتثبيت إصدار، ضع رقمه بعد `lagune@` في عنوان `$schema`: ```json { "$schema": "https://cdn.jsdelivr.net/npm/lagune@0.16.0/schemas/configs.json" } ``` يقبل الإصدار أي نطاق semver: | الإصدار | المخطط | | ------------------ | ----------------------- | | `0.16.0` | مخطط الإصدار 0.16.0 | | `0.16.x` أو `0.16` | مخطط أحدث إصدار من 0.16 | | `0.x` أو `0` | مخطط أحدث إصدار من 0.x | | `latest` | مخطط أحدث إصدار | ## الأسئلة الشائعة ### هل يحتاج Lagune إلى المخطط؟ لا. المخطط يساعد محررك فقط، ويقرأ Lagune الملف بالطريقة نفسها مع ‎$schema أو بدونه. ### هل سيستبدل Lagune مخططًا مثبّتًا؟ لا. لا يكتب Lagune ‎$schema إلا حين لا يحتوي الملف عليه، ويحافظ على أي عنوان تضعه. ### متى يجب أن أثبّت إصدارًا؟ حين يعمل المشروع بإصدار محدد من Lagune، ليتحقق محررك من الملف وفق ما يقبله ذلك الإصدار. --- # Lagune مقابل Deepsec: نهجان أمنيان بالذكاء الاصطناعي جنبًا إلى جنب > مرجع يقارن بين Lagune و Deepsec من Vercel في آلية العمل، ودورة الحياة، والاكتشاف، والتكلفة، والملاحظات، والإغلاق. Canonical: https://lagune.ai/ar-AE/docs/references/deepsec اللغة: ar-AE الأصل: https://lagune.ai/docs/references/deepsec آخر تحديث: 2026-11-09 [Lagune](https://github.com/wellwelwel/lagune) و [Deepsec](https://github.com/vercel-labs/deepsec) (`v2.2.1`) إجابتان دفاعيتان عن المشكلة نفسها: الأمان في عصر التطوير بمساعدة الذكاء الاصطناعي. ومنطلقهما، وبدايتهما ووسطهما ونهايتهما، وطريقة تقديم كل منهما لنفسه للمستخدم، تختلف عن قصد، حتى حيث تتداخل آلياتهما. **نصيحة** هل Lagune مستوحى من Deepsec؟ لا، كُتب Lagune من الصفر وهو مستوحى من Spec-Driven Development ومن Security Hardening. طُوّر المشروعان بشكل مستقل، والمقارنة هنا لمساعدة المستخدمين على فهم اختلافاتهما. ## نظرة سريعة | الجانب | Lagune | Deepsec | | ------------- | ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | | النوع | منهجية (SDH) مع تنفيذ مرجعي | منتج: فاحص ثغرات يعمل بالوكلاء | | مركز الثقل | ميثاق أمان ومعرفة عند الحاجة يقودان الوكيل، مستندين إلى hooks حتمية | شبكة regex واسعة تغذي تحقيقًا إلزاميًا بالذكاء الاصطناعي | | ما ينتجه | كود محصّن، وإثباتات، وسلسلة ملاحظات متتبَّعة | تقرير ملاحظات مفرز ومرتب حسب الخطورة | | هل يمسّ الكود | نعم: `harden` يعدّل الكود | لا: تحليل ثابت فقط، يُخرج ملاحظات ونصوص توصيات | | بيئة التشغيل | يعمل على الوكيل والنموذج اللذين تشغّلهما بالفعل، بأي فئة | يشغّل خط نماذج خاصًا به، بفئة متقدمة افتراضيًا | | البدء | تثبيت إضافة واحدة أو `npx skills add`، ثم قُده بلغة بسيطة، دون أداة جديدة تحتاج إلى إعداد | أنشئ مساحة عمل `.deepsec/`، وثبّت الاعتماديات، وأضف مفتاح نموذج | ## آلية العمل Lagune يضع الوكيل أولًا: الوكيل يقود، ويجلب المعرفة عند الحاجة لما يكونه الكود، ويفوّض جزءًا قابلًا للحسم إلى hooks الحتمية. Deepsec يضع الحتمية أولًا: فحص واسع ينبّه إلى مرشحين يوجّهون نموذجًا إلزاميًا إلى ما يجب التحقيق فيه والحكم عليه. | الجانب | Lagune | Deepsec | | --------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | | الترتيب | ميثاق الأمان والمعرفة المطابقة يوجّهان الوكيل، الذي يفوّض إلى hooks ويحكم على الباقي | المطابِقات تنبّه إلى المرشحين، والنموذج يحقق في كل منهم ويحكم عليه | | الدور الحتمي | hooks متعددة اللغات تعيد حكمًا أو توجّه الوكيل، مقرونة بمعرفة الفئات | مطابِقات تنبّه إلى مرشحين ليحكم عليهم النموذج الإلزامي | | مسار التطوير | `/lagune` يبني بأمان أثناء كتابتك للكود | يراجع الكود، ولا يكتبه | | مسار التدقيق | `charter` ← `detect` ← `plan` ← `harden` ← `verify` | `scan` ← `process` ← `triage` ← `revalidate` ← `report` | | مهمة الذكاء الاصطناعي | الاستدلال من المعرفة، وتطبيق الإصلاح، وإثبات أنه يصمد | التحقيق في كل مرشح والإبلاغ عن الملاحظات | ## دورة الحياة يعمل Lagune قبل كتابة الكود وأثناءها وبعدها. أما Deepsec فيراجع المستودع بعد وجود الكود. | اللحظة | Lagune | Deepsec | | ----------------- | --------------------------------------------------------------- | ------------------------------------------------------- | | قبل وجود الكود | `charter` يصوغ سياسة أمان من النية المعلنة | يبدأ من كود موجود: `init` يحتاج إلى دليل | | أثناء البناء | `/lagune` يبني آمنًا افتراضيًا أثناء الكتابة، دون ترك أي مُخرَج | يراجع بعد البناء، لا أثناءه | | على كود موجود | `detect` ← `plan` ← `harden` ← `verify` | `scan` ← `process`، المسار الأساسي | | المراجعة المستمرة | إعادة تشغيل المراحل لكل نطاق، دون بوابة CI جاهزة | إعادة فحص تزايدية، و `process --diff` كبوابة خروج في CI | ## طبقة الاكتشاف الطبقتان الحتميتان متعاكستان في طبيعتهما: إحداهما تحسم، والأخرى تنبّه. | الجانب | Lagune | Deepsec | | ------------------ | --------------------------------------------------------- | -------------------------------------------------------------------------- | | التجميع | hooks وتخصصات، مجمّعة في فئات | مطابِقات لكل نمط أو إطار عمل | | المُخرج | حكم حرفي (ملاحظة أو مراجعة أو تنبيه استشاري) مع وسم تصنيف | مرشح بلا حكم (معرّف، وأسطر، ومقتطف، ونمط مطابَق) | | الضبط | الدقة: إدراك للتعليقات، وحمايات للقيم البديلة وللنوافذ | الاستدعاء: شبكات واسعة، ويُقلّص الذكاء الاصطناعي الإيجابيات الكاذبة لاحقًا | | العمق | أعمق في الفئات المشتركة | أوسع، وأقل عمقًا في الفئات المشتركة | | الإيجابيات الكاذبة | منخفضة من المصدر، ثم يُحكم عليها في سياقها | تُولَّد بكثرة عن قصد، ثم تُقلَّص بجولة `revalidate` | ## المعرفة والحكم كلاهما يحمل معرفة أمنية لا يستطيعها regex. ويختلفان في مكان وجودها ومن يستطيع تشكيلها. | الجانب | Lagune | Deepsec | | --------------- | ---------------------------------------------------------- | -------------------------------------------------------------- | | الشكل | وحدات markdown قابلة للتعديل، يستند عدد منها إلى hook حتمي | موجّه قصير وإبرازات لكل تقنية، تستند إلى معرفة النموذج نفسه | | الاختيار | مطابقة للكود، ولا تُحمَّل إلا عند وجود سياقها | تُحقن في كل دفعة للذكاء الاصطناعي، مع إبرازات للتقنية المكتشفة | | من يكتبها | يعدّل المستخدم الوحدات ويضيف وحدات جديدة عبر `specialize` | يملك المشرف الموجّه، ويملأ المستخدم ملف `INFO.md` | | أين يقع الحكم | تحسم hooks حدها الأدنى، ويحكم الوكيل على الباقي من المعرفة | مركزي: معالج ذكاء اصطناعي واحد يحكم على كل مرشح | | إعادة الاستخدام | وحدة واحدة توجّه كلًا من `detect` و `verify` | موجّه واحد يقود المرحلة الوحيدة `process` | ## الملاحظات والإغلاق يختلفان أكثر ما يختلفان في ما تصير إليه الملاحظة بعد حلّها. | الجانب | Lagune | Deepsec | | --------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------ | | الخطورة | درجة CVSS v4.0، معدّلة وفق الانكشاف وما هو على المحك | خطورة يقدّرها الذكاء الاصطناعي، مع فرز P0 / P1 / P2 لقابلية الاستغلال والأثر | | الأحكام | Risk closed أو not closed أو cannot tell from the code | true-positive و false-positive و fixed و uncertain و accepted-risk و duplicate | | الاستمرارية | سلسلة عمل تُوائَم مع الواقع، والملاحظات المغلقة تُختصر في سجل | سجلات لكل ملف تُضاف فقط، دون حذف أي شيء | | الحالة النهائية | قابل للإغلاق: الملاحظة المُثبتة تُخرَج، ويمكن للسلسلة أن تستقر | تُحفظ كل ملاحظة إلى الأبد، وتُخفى من العروض بعد حلّها | | تفاصيل السجل | ملخص موجز لما كان عليه الخطر | مسار الأحكام الكامل، بما في ذلك طريقة الإصلاح | ## التكلفة | الجانب | Lagune | Deepsec | | ------------------ | ----------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | الحد الأدنى الحتمي | مجاني: تعمل hooks دون ذكاء اصطناعي ودون مفتاح، وتُخرج أحكامًا بالفعل | مجاني: يعمل `scan` دون ذكاء اصطناعي، لكنه لا يُخرج أحكامًا بمفرده | | الفاتورة المعتادة | مدمجة في وكيل تشغّله بالفعل، وتصل إلى $0 مع نموذج محلي، أو سعر الخطة التي تستخدمها بالفعل، أو لكل تكرار عند الاستخدام عبر API | [ما بين $25 و $1,200 تقريبًا لكل تشغيل لما بين 100 و 2,000 ملف، وأكثر على نطاق أوسع](https://github.com/vercel-labs/deepsec/blob/f75a16803ec5250938bacfe41571d929e8564f45/docs/getting-started.md#run-the-ai-investigation) | | المسار الأرخص | أي نموذج، بما في ذلك نموذج محلي مجاني، يُغلق الدورة | توجد فئات مدفوعة أرخص، لكن الملاحظات تحتاج إلى مرحلة الذكاء الاصطناعي المدفوعة | ## قابلية التوسعة والحوكمة كل منهما يفتح الطبقة التي يبقيها الآخر مغلقة. | الجانب | Lagune | Deepsec | | -------------- | ------------------------------------------------- | --------------------------------------------- | | ما توسّعه | عدّل الوحدات، أو أضف جديدة عبر `specialize` | أضف مطابِقات، ووكلاء، ومُشعرات، وملكية | | طبقة السياسات | يحكم ميثاق الأمان كل مرحلة ويخضع لإدارة الإصدارات | الإعدادات تشغيلية (مطابِقات، ونماذج، ومسارات) | | التجاوز بالاسم | الوحدة المحسّنة تحل محل الوحدة المدمجة | عند تعارض معرّف المطابِق، يفوز مطابِقك | ## الواجهات يُخرج Deepsec مخرجات لمنظمة أمنية. أما Lagune فيعرض عرضًا مباشرًا لمن يشغّله. | الجانب | Lagune | Deepsec | | ------------------- | ------------------------------------------------- | ----------------------------------------------------------------- | | الواجهة البشرية | لوحة تحكم محلية مباشرة للسلسلة كلها، بلغة بسيطة | ملفات تقارير وتصدير ومقاييس وتعليقات PR، إضافة إلى موقع توثيق | | المساءلة | يُظهر الملفات والتخصصات التي طُبّقت | يقترح مسؤولًا عن المتابعة: المناوب، أو المدير، أو صاحب الـ commit | | إثبات قابل للتكرار | `prove` يكتب اختبارات قابلة للتشغيل ونشرة للإفصاح | يبقى ثابتًا بطبيعته، ولا ينفّذ الهدف أبدًا | | حماية الأداة لنفسها | يحصّن واجهة كتابة محلية في لوحة التحكم | يحصّن تنفيذ الذكاء الاصطناعي الخاص به ضد كود الهدف غير الموثوق | ## النطاق والنشر | الجانب | Lagune | Deepsec | | ------------ | ------------------------------------------------------------- | --------------------------------------------------------- | | التثبيت | تسعة أوامر من إضافة وكيلك أو من skills CLI، دون إنشاء أي هيكل | مساحة عمل `.deepsec/` بحزمتها واعتمادياتها الخاصة | | اتجاه النطاق | يُحصر في أي جزء، أو سياق، من ملف واحد إلى المشروع كله | يفحص مستودعات كاملة، حتى المستودعات الأحادية الكبيرة | | التوزيع | محلي فقط، والخادم الوحيد يرتبط بـ loopback | توزيع اختياري على أجهزة Vercel Sandbox الافتراضية العاملة | ## تجربة المستخدم كيف يلتقي كل منهما بمن يشغّله: ما يتطلبه التشغيل الأول، وكيف يوجّهه المشغّل. ### البدء يعمل Lagune عبر الوكيل المفتوح بالفعل. أما Deepsec فيجهّز أولًا مساحة عمله والوصول إلى النموذج. | الجانب | Lagune | Deepsec | | --------------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | | أول أمر | تثبيت الإضافة أو `npx skills add wellwelwel/lagune`، ثم `/lagune-*` في الوكيل | `npx deepsec init`، ثم `cd .deepsec` و `pnpm install` و `scan` و `process` | | بيانات اعتماد التشغيل | لا مفتاح منفصل، يستخدم وكيلك الحالي | مفتاح نموذج (مثل AI Gateway، أو رمز Vercel OIDC صالح لمدة 12 ساعة، أو رمز Anthropic) | ### توجيهه كلاهما يقبل التوجيه. يقرأ Lagune شكل المدخل في كل مرحلة. ويضيّق Deepsec مجموعة الملفات التي يعمل عليها التحقيق نفسه. | الجانب | Lagune | Deepsec | | ----------- | ---------------------------------------------------------------------- | ----------------------------------------------------- | | المشروع كله | المرحلة دون مدخل تفحص النطاق كله | `scan` و `process` يفحصان المستودع | | جزء منه | أي مرحلة تُحصر في ملفات أو أدلة محددة | `--files` أو `--files-from` أو `--diff` تضيّق التشغيل | | مصدر قلق | المرحلة تُحصر في مصدر قلق موصوف | موجّه التحقيق ثابت | | نطاق أولوية | `harden` و `verify` يُحصران في Critical أو High أو Medium أو Low | تُوسم الملاحظات بعد التشغيل | | قيمة واحدة | يقيّم hook مقتطفًا أو نمطًا أو عنوان URL مباشرة (`--pattern`، `--url`) | وحدة العمل هي الملف | ## الأسئلة الشائعة ### ما الفرق بين Lagune و Deepsec؟ Lagune يضع الوكيل أولًا ويعمل قبل كتابة الكود وأثناءها وبعدها: يضع السياسة قبل الكود، ويحصّن أثناء البناء، ويدقّق الكود المكتوب بالفعل ويحصّنه ويتحقق منه. أما Deepsec فيضع الحتمية أولًا: فحص regex واسع يغذي تحقيقًا إلزاميًا بنموذج متقدم يراجع الكود الموجود ويبلّغ عن الملاحظات، دون تغييره. ### هل يمكنني تشغيل أي منهما مجانًا؟ يمكن تشغيل مسار Lagune كله بتكلفة $0 على نموذج محلي مجاني، وتُخرج hooks الحتمية الخاصة به أحكامًا دون أي ذكاء اصطناعي. أما فحص Deepsec فمجاني لكنه لا يُخرج أحكامًا، لذلك تتطلب أي ملاحظة مرحلة الذكاء الاصطناعي المدفوعة. ### هل يعدّل أي منهما الكود الخاص بي؟ Lagune يفعل: تطبّق مرحلة harden الإصلاحات على الكود. أما Deepsec فلا: إنه تحليل ثابت فقط، يُخرج ملاحظات ونصوص توصيات يطبّقها شخص أو وكيل بشكل منفصل. --- # مصادر OWASP > مصدر معرفة تخصصات OWASP المدمجة، مربوطة بصفحات الهجمات و Cheat Sheet المرجعية من OWASP. Canonical: https://lagune.ai/ar-AE/docs/references/owasp-sources اللغة: ar-AE الأصل: https://lagune.ai/docs/references/owasp-sources آخر تحديث: 2026-11-09 يربط هذا المستند كل **هجوم** (`www-community`) وكل **Cheat Sheet** (`CheatSheetSeries`) من OWASP بفئة أمنية، مع رابط كل منها إلى صفحته العامة المرجعية. وداخل الفئة، تتشارك العناصر المتكافئة سطرًا واحدًا في قائمة التحقق: الهجمات و cheat sheets التي تعالج الخطر نفسه تُسرد معًا، مفصولة بفواصل. أما العناصر التي لا نظير مباشرًا لها فتأتي كل منها في سطر خاص. - الفضل لـ OWASP. توجد الهجمات في `https://owasp.org/www-community/attacks/` وتوجد cheat sheets في `https://cheatsheetseries.owasp.org/cheatsheets/.html`. --- ## 1. الحقن (عام) - [x] [Code Injection](https://owasp.org/www-community/attacks/Code_Injection), [Injection Prevention](https://cheatsheetseries.owasp.org/cheatsheets/Injection_Prevention_Cheat_Sheet.html), [Injection Prevention in Java](https://cheatsheetseries.owasp.org/cheatsheets/Injection_Prevention_in_Java_Cheat_Sheet.html) (interpreter) - [x] [Direct Dynamic Code Evaluation (Eval Injection)](https://owasp.org/www-community/attacks/Direct_Dynamic_Code_Evaluation_Eval_Injection) (interpreter) - [x] [Function Injection](https://owasp.org/www-community/attacks/Function_Injection) (interpreter) - [x] [Resource Injection](https://owasp.org/www-community/attacks/Resource_Injection) (network) - [x] [Special Element Injection](https://owasp.org/www-community/attacks/Special_Element_Injection) (interpreter) - [x] [Custom Special Character Injection](https://owasp.org/www-community/attacks/Custom_Special_Character_Injection) (interpreter) - [x] [Comment Injection Attack](https://owasp.org/www-community/attacks/Comment_Injection_Attack) (interpreter) - [x] [Parameter Delimiter](https://owasp.org/www-community/attacks/Parameter_Delimiter) (interpreter) - [x] [Server-Side Includes (SSI) Injection](https://owasp.org/www-community/attacks/Server-Side_Includes_%28SSI%29_Injection) (interpreter) - [x] [Input Validation](https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html), [Bean Validation](https://cheatsheetseries.owasp.org/cheatsheets/Bean_Validation_Cheat_Sheet.html) (interpreter) --- ## 2. حقن SQL وقواعد البيانات - [x] [SQL Injection](https://owasp.org/www-community/attacks/SQL_Injection), [SQL Injection Prevention](https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html), [Query Parameterization](https://cheatsheetseries.owasp.org/cheatsheets/Query_Parameterization_Cheat_Sheet.html) (sql) - [x] [Blind SQL Injection](https://owasp.org/www-community/attacks/Blind_SQL_Injection) (sql) - [x] [SQL Injection Bypassing WAF](https://owasp.org/www-community/attacks/SQL_Injection_Bypassing_WAF) (sql) - [x] [RSQL Injection](https://owasp.org/www-community/attacks/RSQL_Injection) (interpreter) - [x] [Database Security](https://cheatsheetseries.owasp.org/cheatsheets/Database_Security_Cheat_Sheet.html) (sql) - [x] [NoSQL Security](https://cheatsheetseries.owasp.org/cheatsheets/NoSQL_Security_Cheat_Sheet.html) (interpreter) --- ## 3. حقن أوامر نظام التشغيل - [x] [Command Injection](https://owasp.org/www-community/attacks/Command_Injection), [OS Command Injection Defense](https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html) (interpreter) --- ## 4. حقن LDAP و XPath و XML - [x] [LDAP Injection](https://owasp.org/www-community/attacks/LDAP_Injection), [LDAP Injection Prevention](https://cheatsheetseries.owasp.org/cheatsheets/LDAP_Injection_Prevention_Cheat_Sheet.html) (interpreter) - [x] [XPATH Injection](https://owasp.org/www-community/attacks/XPATH_Injection) (interpreter) - [x] [Blind XPath Injection](https://owasp.org/www-community/attacks/Blind_XPath_Injection) (interpreter) - [x] [XML External Entity (XXE) Prevention](https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html), [XML Security](https://cheatsheetseries.owasp.org/cheatsheets/XML_Security_Cheat_Sheet.html) (xml) --- ## 5. Cross-Site Scripting (XSS) - [x] [Cross Site Scripting (XSS)](https://owasp.org/www-community/attacks/Cross-site-Scripting-%28XSS%29), [Cross Site Scripting Prevention](https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html), [XSS Filter Evasion](https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html) (browser) - [x] [DOM Based XSS](https://owasp.org/www-community/attacks/DOM_Based_XSS), [DOM based XSS Prevention](https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html), [DOM Clobbering Prevention](https://cheatsheetseries.owasp.org/cheatsheets/DOM_Clobbering_Prevention_Cheat_Sheet.html) (browser) - [x] [Reflected DOM Injection](https://owasp.org/www-community/attacks/Reflected_DOM_Injection) (browser) - [x] [XSS in Converting File Content to Text](https://owasp.org/www-community/attacks/XSS_in_Converting_File_Content_to_Text) (browser) - [x] [XSS in subtitle](https://owasp.org/www-community/attacks/Xss_in_subtitle) (browser) - [x] [Cross Frame Scripting](https://owasp.org/www-community/attacks/Cross_Frame_Scripting) (browser) - [x] [Cross Site Tracing](https://owasp.org/www-community/attacks/Cross_Site_Tracing) (browser) - [x] [Content Security Policy](https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html) (browser) --- ## 6. Cross-Site Request Forgery (CSRF) و Clickjacking - [x] [Cross Site Request Forgery (CSRF)](https://owasp.org/www-community/attacks/cross-site-request-forgery), [XSRF](https://owasp.org/www-community/attacks/XSRF), [Cross-Site Request Forgery Prevention](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html) (http-request) - [x] [Clickjacking](https://owasp.org/www-community/attacks/Clickjacking), [Clickjacking Defense](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html) (browser) - [x] [Cross Site History Manipulation (XSHM)](https://owasp.org/www-community/attacks/Cross_Site_History_Manipulation_%28XSHM%29) (browser) - [x] [Form action hijacking](https://owasp.org/www-community/attacks/Form_action_hijacking) (network) - [x] [Reverse Tabnabbing](https://owasp.org/www-community/attacks/Reverse_Tabnabbing) (browser) --- ## 7. إعادة التوجيه والتمرير - [x] [Open Redirect](https://owasp.org/www-community/attacks/open_redirect), [Unvalidated Redirects and Forwards](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) (network) - [x] [Execution After Redirect (EAR)](https://owasp.org/www-community/attacks/Execution_After_Redirect_%28EAR%29) (browser) --- ## 8. التحكم في الوصول والتفويض - [x] [Insecure Direct Object Reference (IDOR)](https://owasp.org/www-community/attacks/insecure_direct_object_reference), [Insecure Direct Object Reference Prevention](https://cheatsheetseries.owasp.org/cheatsheets/Insecure_Direct_Object_Reference_Prevention_Cheat_Sheet.html) (access-control) - [x] [Forced browsing](https://owasp.org/www-community/attacks/Forced_browsing) (access-control) - [x] [Web Parameter Tampering](https://owasp.org/www-community/attacks/Web_Parameter_Tampering) (access-control) - [x] [Setting Manipulation](https://owasp.org/www-community/attacks/Setting_Manipulation) (access-control) - [x] [Authorization](https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html) (access-control) - [x] [Transaction Authorization](https://cheatsheetseries.owasp.org/cheatsheets/Transaction_Authorization_Cheat_Sheet.html) (access-control) - [x] [Mass Assignment](https://cheatsheetseries.owasp.org/cheatsheets/Mass_Assignment_Cheat_Sheet.html) (access-control) - [x] [Multi-Tenant Application Security](https://cheatsheetseries.owasp.org/cheatsheets/Multi_Tenant_Security_Cheat_Sheet.html) (access-control) --- ## 9. المصادقة وبيانات الاعتماد - [x] [Brute Force Attack](https://owasp.org/www-community/attacks/Brute_force_attack), [Password Spraying Attack](https://owasp.org/www-community/attacks/Password_Spraying_Attack), [Bot Management and Anti-Automation](https://cheatsheetseries.owasp.org/cheatsheets/Bot_Management_and_Anti-Automation_Cheat_Sheet.html) (credential-endpoint) - [x] [Credential stuffing](https://owasp.org/www-community/attacks/Credential_stuffing), [Credential Stuffing Prevention](https://cheatsheetseries.owasp.org/cheatsheets/Credential_Stuffing_Prevention_Cheat_Sheet.html) (credential-endpoint) - [x] [Qrljacking](https://owasp.org/www-community/attacks/Qrljacking) (federation) - [x] [Authentication](https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html), [Multifactor Authentication](https://cheatsheetseries.owasp.org/cheatsheets/Multifactor_Authentication_Cheat_Sheet.html) (access-control) - [x] [Password Storage](https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html) (access-control) - [x] [Forgot Password](https://cheatsheetseries.owasp.org/cheatsheets/Forgot_Password_Cheat_Sheet.html), [Choosing and Using Security Questions](https://cheatsheetseries.owasp.org/cheatsheets/Choosing_and_Using_Security_Questions_Cheat_Sheet.html) (access-control) - [x] [Email Validation and Verification in Identity Systems](https://cheatsheetseries.owasp.org/cheatsheets/Email_Validation_and_Verification_Cheat_Sheet.html) (access-control) --- ## 10. إدارة الجلسات - [x] [Session fixation](https://owasp.org/www-community/attacks/Session_fixation), [Session hijacking attack](https://owasp.org/www-community/attacks/Session_hijacking_attack), [Session Prediction](https://owasp.org/www-community/attacks/Session_Prediction), [Session Management](https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html) (access-control) - [x] [Cookie Theft Mitigation](https://cheatsheetseries.owasp.org/cheatsheets/Cookie_Theft_Mitigation_Cheat_Sheet.html) (access-control) --- ## 11. الهوية الموحّدة (OAuth و SAML و JWT) - [x] [OAuth 2.0 Protocol](https://cheatsheetseries.owasp.org/cheatsheets/OAuth2_Cheat_Sheet.html) (federation) - [x] [SAML Security](https://cheatsheetseries.owasp.org/cheatsheets/SAML_Security_Cheat_Sheet.html) (federation) - [x] [JSON Web Token for Java](https://cheatsheetseries.owasp.org/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.html) (federation) --- ## 12. التشفير وأمان النقل - [x] [Cryptanalysis](https://owasp.org/www-community/attacks/Cryptanalysis), [Cryptographic Storage](https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html), [Key Management](https://cheatsheetseries.owasp.org/cheatsheets/Key_Management_Cheat_Sheet.html) (crypto) - [x] [Manipulator-in-the-Middle (MITM)](https://owasp.org/www-community/attacks/Man-in-the-middle_attack), [Transport Layer Security](https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Security_Cheat_Sheet.html) (transport) - [x] [HTTP Strict Transport Security](https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Strict_Transport_Security_Cheat_Sheet.html) (transport) - [x] [Pinning](https://cheatsheetseries.owasp.org/cheatsheets/Pinning_Cheat_Sheet.html) (transport) --- ## 13. Server-Side Request Forgery (SSRF) - [x] [Server Side Request Forgery](https://owasp.org/www-community/attacks/Server_Side_Request_Forgery), [Server-Side Request Forgery Prevention](https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html) (network) --- ## 14. Path Traversal والتعامل مع الملفات - [x] [Path Traversal](https://owasp.org/www-community/attacks/Path_Traversal) (path) - [x] [Binary Planting](https://owasp.org/www-community/attacks/Binary_planting) (path) - [x] [Windows ::DATA Alternate Data Stream](https://owasp.org/www-community/attacks/Windows_DATA_alternate_data_stream) (path) - [x] [Embedding Null Code](https://owasp.org/www-community/attacks/Embedding_Null_Code) (path) - [x] [File Upload](https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html) (upload) --- ## 15. إساءة استخدام بروتوكول HTTP (الترويسات، والتخزين المؤقت، والتقسيم) - [x] [HTTP Response Splitting](https://owasp.org/www-community/attacks/HTTP_Response_Splitting), [Cross-User Defacement](https://owasp.org/www-community/attacks/Cross-User_Defacement) (interpreter) - [x] [HTTP Security Response Headers](https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html) (موزّع على: browser و transport و http-request و access-control) - [x] [Cache Poisoning](https://owasp.org/www-community/attacks/Cache_Poisoning) (interpreter) - [x] [IP Spoofing via HTTP Headers](https://owasp.org/www-community/attacks/ip_spoofing_via_http_headers) (http-request) --- ## 16. الترميز وانتحال المحتوى - [x] [Unicode Encoding](https://owasp.org/www-community/attacks/Unicode_Encoding) (interpreter) - [x] [Double Encoding](https://owasp.org/www-community/Double_Encoding) (interpreter) - [x] [Content Spoofing](https://owasp.org/www-community/attacks/Content_Spoofing) (browser) --- ## 17. حقن CSV وجداول البيانات - [x] [CSV Injection](https://owasp.org/www-community/attacks/CSV_Injection) (csv) --- ## 18. CORS (Cross-Origin Resource Sharing) - [x] [CORS OriginHeaderScrutiny](https://owasp.org/www-community/attacks/CORS_OriginHeaderScrutiny) (http-request) - [x] [CORS RequestPreflightScrutiny](https://owasp.org/www-community/attacks/CORS_RequestPreflightScrutiny) (http-request) --- ## 19. حجب الخدمة - [x] [Regular expression Denial of Service (ReDoS)](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS) (regex) --- ## 20. أمان الذاكرة والكود الأصلي - [x] [Buffer Overflow Attack](https://owasp.org/www-community/attacks/Buffer_overflow_attack), [Buffer Overflow via Environment Variables](https://owasp.org/www-community/attacks/Buffer_Overflow_via_Environment_Variables) (c-cpp) - [x] [Format string attack](https://owasp.org/www-community/attacks/Format_string_attack) (c-cpp) --- ## 21. الكود المتنقل وتنفيذ الكود غير الموثوق - [x] [Mobile code invoking untrusted mobile code](https://owasp.org/www-community/attacks/Mobile_code_invoking_untrusted_mobile_code) (interpreter) - [x] [Mobile code non-final public field](https://owasp.org/www-community/attacks/Mobile_code_non-final_public_field) (java) - [x] [Mobile code object hijack](https://owasp.org/www-community/attacks/Mobile_code_object_hijack) (java) --- ## 22. إلغاء التسلسل - [x] [Deserialization](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html) (موزّع على: python و ruby و php و java و dotnet) --- ## 23. البرمجيات الخبيثة وتهديدات جهة العميل - [x] [Man-in-the-browser attack](https://owasp.org/www-community/attacks/Man-in-the-browser_attack), [Browser Extension Security Vulnerabilities](https://cheatsheetseries.owasp.org/cheatsheets/Browser_Extension_Vulnerabilities_Cheat_Sheet.html) (browser) - [x] [Third Party JavaScript Management](https://cheatsheetseries.owasp.org/cheatsheets/Third_Party_Javascript_Management_Cheat_Sheet.html) (browser) --- ## 24. التسجيل، والإنكار، ومعالجة الأخطاء - [x] [Log Injection](https://owasp.org/www-community/attacks/Log_Injection), [Logging](https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html), [Application Logging Vocabulary](https://cheatsheetseries.owasp.org/cheatsheets/Logging_Vocabulary_Cheat_Sheet.html) (interpreter) - [x] [Repudiation Attack](https://owasp.org/www-community/attacks/Repudiation_Attack) (interpreter) --- ## 25. منطق الأعمال وإساءة استخدام الوظائف لا يملك منطق الأعمال وإساءة استخدام الوظائف سطحًا واحدًا في الكود يدافع عنه تخصص خاص بسطح بعينه: فالدفاع تصميم خاص بالتطبيق، وهو الاستدلال نفسه الذي تقوده نمذجة التهديدات في المشروع. نُقل إلى "خارج النطاق". --- ## 26. أمن الذكاء الاصطناعي و LLM والوكلاء - [x] [Prompt Injection](https://owasp.org/www-community/attacks/prompt-injection), [LLM Prompt Injection Prevention](https://cheatsheetseries.owasp.org/cheatsheets/LLM_Prompt_Injection_Prevention_Cheat_Sheet.html) (llm) - [x] [MCP Tool Poisoning](https://owasp.org/www-community/attacks/MCP_Tool_Poisoning), [MCP (Model Context Protocol) Security](https://cheatsheetseries.owasp.org/cheatsheets/MCP_Security_Cheat_Sheet.html) (llm) - [x] [HITL Dialog Forging (Lies-in-the-Loop)](https://owasp.org/www-community/attacks/lies-in-the-loop) (llm) - [x] [AI Agent Security](https://cheatsheetseries.owasp.org/cheatsheets/AI_Agent_Security_Cheat_Sheet.html), [Secure Coding with AI](https://cheatsheetseries.owasp.org/cheatsheets/Secure_Coding_with_AI_Cheat_Sheet.html) (llm) - [x] [Retrieval-Augmented Generation (RAG) Security](https://cheatsheetseries.owasp.org/cheatsheets/RAG_Security_Cheat_Sheet.html) (llm) - [x] [Secure AI/ML Model Ops](https://cheatsheetseries.owasp.org/cheatsheets/Secure_AI_Model_Ops_Cheat_Sheet.html) (llm) - [x] [AML and Sanctions Compliance for AI Agent Payments](https://cheatsheetseries.owasp.org/cheatsheets/AML_Sanctions_AI_Agent_Payments_Cheat_Sheet.html) (llm) --- ## 27. Prototype Pollution والتسريبات عبر المواقع - [x] [Prototype Pollution Prevention](https://cheatsheetseries.owasp.org/cheatsheets/Prototype_Pollution_Prevention_Cheat_Sheet.html) (javascript) - [x] [Cross-site leaks (XS-Leaks)](https://cheatsheetseries.owasp.org/cheatsheets/XS_Leaks_Cheat_Sheet.html) (browser) --- ## 28. أطر العمل ومنصات اللغات - [x] [Django Security](https://cheatsheetseries.owasp.org/cheatsheets/Django_Security_Cheat_Sheet.html), [Django REST Framework](https://cheatsheetseries.owasp.org/cheatsheets/Django_REST_Framework_Cheat_Sheet.html) (python) - [x] [Ruby on Rails](https://cheatsheetseries.owasp.org/cheatsheets/Ruby_on_Rails_Cheat_Sheet.html) (ruby) - [x] [Laravel](https://cheatsheetseries.owasp.org/cheatsheets/Laravel_Cheat_Sheet.html) (php) - [x] [Symfony](https://cheatsheetseries.owasp.org/cheatsheets/Symfony_Cheat_Sheet.html) (php) - [x] [Java Security](https://cheatsheetseries.owasp.org/cheatsheets/Java_Security_Cheat_Sheet.html) (java) - [x] [DotNet Security](https://cheatsheetseries.owasp.org/cheatsheets/DotNet_Security_Cheat_Sheet.html) (dotnet) - [x] [NodeJS Security](https://cheatsheetseries.owasp.org/cheatsheets/Nodejs_Security_Cheat_Sheet.html) (javascript) - [x] [PHP Configuration](https://cheatsheetseries.owasp.org/cheatsheets/PHP_Configuration_Cheat_Sheet.html) (php) --- ## 29. واجهة الويب الأمامية والمتصفح - [x] [HTML5 Security](https://cheatsheetseries.owasp.org/cheatsheets/HTML5_Security_Cheat_Sheet.html) (browser) - [x] [AJAX Security](https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html) (browser) - [x] [Securing Cascading Style Sheets](https://cheatsheetseries.owasp.org/cheatsheets/Securing_Cascading_Style_Sheets_Cheat_Sheet.html) (موزّع على: access-control و browser) --- ## 30. واجهات API والخدمات - [x] [GraphQL](https://cheatsheetseries.owasp.org/cheatsheets/GraphQL_Cheat_Sheet.html) (api-endpoint) - [x] [gRPC Security](https://cheatsheetseries.owasp.org/cheatsheets/gRPC_Security_Cheat_Sheet.html) (api-endpoint) - [x] [WebSocket Security](https://cheatsheetseries.owasp.org/cheatsheets/WebSocket_Security_Cheat_Sheet.html) (api-endpoint) --- ## 31. السحابة والحاويات والبنية التحتية إعدادات الحاويات وأحمال العمل إعدادات ككود يشحنها المطوّر مع التطبيق (`Dockerfile`، و Compose، و `securityContext` الخاص بـ Pod)، وهي سطح حقيقي يُصلحه `harden` ويُثبته `verify`، لذلك هي ضمن النطاق. أما إدارة العنقود (RBAC، و etcd، وخادم API، و admission، وتقسيم الشبكة) فهي مجال المشغّل وتبقى خارج النطاق. - [x] [Docker Security](https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html), [Node.js Docker](https://cheatsheetseries.owasp.org/cheatsheets/NodeJS_Docker_Cheat_Sheet.html) (container) - [x] [Kubernetes Security](https://cheatsheetseries.owasp.org/cheatsheets/Kubernetes_Security_Cheat_Sheet.html) (container: جزء workload/Pod. وتبقى إدارة العنقود خارج النطاق) - [x] [Serverless / FaaS Security](https://cheatsheetseries.owasp.org/cheatsheets/Serverless_FaaS_Security_Cheat_Sheet.html) (serverless) --- ## 32. سلسلة التوريد و CI/CD - [x] [NPM Security](https://cheatsheetseries.owasp.org/cheatsheets/NPM_Security_Cheat_Sheet.html) (interpreter) - [x] [Dependency Graph & SBOM Best Practices](https://cheatsheetseries.owasp.org/cheatsheets/Dependency_Graph_SBOM_Cheat_Sheet.html), [Vulnerable Dependency Management](https://cheatsheetseries.owasp.org/cheatsheets/Vulnerable_Dependency_Management_Cheat_Sheet.html) (interpreter) --- ## 33. الأسرار والإعدادات إدارة الأسرار مسألة تشغيلية: الخزائن، و CI/CD، وإعدادات السحابة، والتدوير. والجانب الوحيد على مستوى الكود (سر مكتوب مباشرة في المصدر) فحص حتمي، لا تخصص مخاطر. نُقل إلى "خارج النطاق". --- ## 34. العمليات والتصميم والحوكمة حماية خصوصية المستخدم مسألة سياسات وتصميم (تقليل البيانات، والشفافية، والاحتفاظ)، لا سطح في الكود يدافع عنه تخصص. نُقل إلى "خارج النطاق". --- ## 35. المدفوعات والامتثال - [x] [Secure Integration of Third-Party Payment Gateways](https://cheatsheetseries.owasp.org/cheatsheets/Third_Party_Payment_Gateway_Integration_Cheat_Sheet.html) (payment) --- ## 36. الأنظمة المدمجة و IoT والمجالات المتخصصة أمن السيارات والطائرات المسيّرة من مجالات الأنظمة المدمجة (ناقل CAN، وتحديثات البرامج الثابتة OTA، وسلامة المستشعرات والاتصال اللاسلكي، والوصول المادي)، لا من كود تطبيقات web/API الذي يدقّقه Lagune. نُقل إلى "خارج النطاق". --- ## خارج النطاق (لا سطح في الكود) هذه ليست ميادين للتخصصات ولا تحمل مربع اختيار: إنها حوكمة، أو عمليات، أو تحصين تشغيلي، أو استخدام لأطر عمل لا سطح واحدًا لها في الكود يدافع عنه تخصص خاص بسطح بعينه. قيمتها الأمنية حقيقية، لكنها تكمن في العمليات والبنية (أو، بالنسبة لإطار العمل، في المهارة الخاصة بتلك اللغة)، لا في دفاع يأتي به هذا الكتالوج. مسرودة للرجوع إليها، لا كعمل. - [Authorization Regression Testing](https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Regression_Testing_Cheat_Sheet.html), [Authorization Testing Automation](https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Testing_Automation_Cheat_Sheet.html) - [JAAS](https://cheatsheetseries.owasp.org/cheatsheets/JAAS_Cheat_Sheet.html) - [Denial of Service](https://owasp.org/www-community/attacks/Denial_of_Service), [Denial of Service](https://cheatsheetseries.owasp.org/cheatsheets/Denial_of_Service_Cheat_Sheet.html) - [HTTP/2 Reset Attack](https://owasp.org/www-community/attacks/HTTP2_Reset_Attack) - [Traffic flood](https://owasp.org/www-community/attacks/Traffic_flood) - [Web Service Amplification Attack](https://owasp.org/www-community/attacks/web_service_amplificaiton) (تضخيم SOAP/WS-Addressing، وهو نوع تشغيلي من DoS لا سطح له في الكود) - [Cash Overflow](https://owasp.org/www-community/attacks/Cash_Overflow) - [Spyware](https://owasp.org/www-community/attacks/Spyware), [Trojan Horse](https://owasp.org/www-community/attacks/Trojan_Horse) (برمجيات خبيثة لدى المستخدم النهائي، لا سطح في كود المشروع المدقَّق. وجانب التوصيل داخل المتصفح موجود في `browser`) - [REST Security](https://cheatsheetseries.owasp.org/cheatsheets/REST_Security_Cheat_Sheet.html), [REST Assessment](https://cheatsheetseries.owasp.org/cheatsheets/REST_Assessment_Cheat_Sheet.html) - [Web Service Security](https://cheatsheetseries.owasp.org/cheatsheets/Web_Service_Security_Cheat_Sheet.html) - [Cloud Architecture Security](https://cheatsheetseries.owasp.org/cheatsheets/Secure_Cloud_Architecture_Cheat_Sheet.html) (تصميم ومقايضات: IAM مقابل عناوين URL الموقّعة، و VPCs من نوع public/private، وحدود الثقة، والمسؤولية المشتركة. وعلى عكس `container`، لا يملك إعدادات ملموسة يفحصها تخصص) - [Infrastructure as Code Security](https://cheatsheetseries.owasp.org/cheatsheets/Infrastructure_as_Code_Security_Cheat_Sheet.html) (رغم اسمه، هو عمليات SDLC وأدوات _لإدارة_ IaC: إضافات IDE، والتحليل الثابت، وفحص الصور، و CI/CD، والتوقيع. ولا يقدّم تحويلًا من نمط غير آمن إلى شكل آمن في ملف Terraform/CloudFormation) - [Kubernetes Security](https://cheatsheetseries.owasp.org/cheatsheets/Kubernetes_Security_Cheat_Sheet.html) (_جزء إدارة العنقود فقط_: RBAC، و etcd، وخادم API، و admission. أما جزء workload/Pod فهو ضمن النطاق تحت `container`) - [Network Segmentation](https://cheatsheetseries.owasp.org/cheatsheets/Network_Segmentation_Cheat_Sheet.html) (بنية الشبكة وسياسة جدار الحماية) - [Subdomain Takeover Prevention](https://cheatsheetseries.owasp.org/cheatsheets/Subdomain_Takeover_Prevention_Cheat_Sheet.html) (دورة حياة DNS ومراقبتها، لا كود) - [Secrets Management](https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html) (الخزائن، و CI/CD، والتدوير. وجانب السر المكتوب في الكود فحص حتمي، لا تخصص مخاطر) - [C-Based Toolchain Hardening](https://cheatsheetseries.owasp.org/cheatsheets/C-Based_Toolchain_Hardening_Cheat_Sheet.html) (خيارات المترجم والرابط والبناء، دون نقطة sink في المصدر) - [Microservices Security](https://cheatsheetseries.owasp.org/cheatsheets/Microservices_Security_Cheat_Sheet.html), [Microservices based Security Arch Doc](https://cheatsheetseries.owasp.org/cheatsheets/Microservices_based_Security_Arch_Doc_Cheat_Sheet.html) - [Zero Trust Architecture](https://cheatsheetseries.owasp.org/cheatsheets/Zero_Trust_Architecture_Cheat_Sheet.html) - [CI/CD Security](https://cheatsheetseries.owasp.org/cheatsheets/CI_CD_Security_Cheat_Sheet.html), [GitHub Actions Security](https://cheatsheetseries.owasp.org/cheatsheets/GitHub_Actions_Security_Cheat_Sheet.html) - [Software Supply Chain Security](https://cheatsheetseries.owasp.org/cheatsheets/Software_Supply_Chain_Security_Cheat_Sheet.html) - [Error Handling](https://cheatsheetseries.owasp.org/cheatsheets/Error_Handling_Cheat_Sheet.html), [Full Path Disclosure](https://owasp.org/www-community/attacks/Full_Path_Disclosure) (إعداد معالج الأخطاء العام لكل تقنية. والتسريب هو الإفصاح نفسه الذي تحكمه معالجة الأخطاء بالفعل) - [Abuse of Functionality](https://owasp.org/www-community/attacks/Abuse_of_Functionality), [Business Logic Security](https://cheatsheetseries.owasp.org/cheatsheets/Business_Logic_Security_Cheat_Sheet.html), [Abuse Case _(historical)_](https://cheatsheetseries.owasp.org/cheatsheets/Abuse_Case_Cheat_Sheet.html) (تصميم خاص بالتطبيق، دون نقطة sink واحدة في الكود) - [User Privacy Protection](https://cheatsheetseries.owasp.org/cheatsheets/User_Privacy_Protection_Cheat_Sheet.html) (تقليل البيانات، والشفافية، وسياسة الاحتفاظ) - [Top 10 Automotive Security Vulnerabilities](https://cheatsheetseries.owasp.org/cheatsheets/Automotive_Security_Cheat_Sheet.html), [Drone Security](https://cheatsheetseries.owasp.org/cheatsheets/Drone_Security_Cheat_Sheet.html) (مجالات الأنظمة المدمجة: ناقل CAN، وتحديثات OTA، وسلامة sensor/radio، لا كود web/API) - [Mobile Application Security](https://cheatsheetseries.owasp.org/cheatsheets/Mobile_Application_Security_Cheat_Sheet.html) (تحصين منصتي Android/iOS: التخزين، والقياسات الحيوية، والتثبيت، و PII. لا سطح واحدًا له في الكود، وانتقل جانب تحميل الكود غير الموثوق إلى `interpreter`) - [Threat Modeling](https://cheatsheetseries.owasp.org/cheatsheets/Threat_Modeling_Cheat_Sheet.html), [Threat Modeling _(community page)_](https://owasp.org/www-community/Threat_Modeling) - [Attack Surface Analysis](https://cheatsheetseries.owasp.org/cheatsheets/Attack_Surface_Analysis_Cheat_Sheet.html) - [Secure Product Design](https://cheatsheetseries.owasp.org/cheatsheets/Secure_Product_Design_Cheat_Sheet.html) - [Secure Code Review](https://cheatsheetseries.owasp.org/cheatsheets/Secure_Code_Review_Cheat_Sheet.html) - [Virtual Patching](https://cheatsheetseries.owasp.org/cheatsheets/Virtual_Patching_Cheat_Sheet.html) - [Vulnerability Disclosure](https://cheatsheetseries.owasp.org/cheatsheets/Vulnerability_Disclosure_Cheat_Sheet.html) - [Legacy Application Management](https://cheatsheetseries.owasp.org/cheatsheets/Legacy_Application_Management_Cheat_Sheet.html) - [Security Terminology](https://cheatsheetseries.owasp.org/cheatsheets/Security_Terminology_Cheat_Sheet.html) --- # ‎/lagune-repair: أصلح تتبع الملاحظات المعطّل > أصلح السلسلة حين تُربك إعادة تسمية ملف أو نقله التتبع في Lagune. Canonical: https://lagune.ai/ar-AE/docs/commands/repair اللغة: ar-AE الأصل: https://lagune.ai/docs/commands/repair آخر تحديث: 2026-11-09 🧰 أصلح السلسلة حين تُربكها إعادة تسمية ملف أو نقله. **صيانة داخلية، لا مرحلة أمنية** ليست repair مرحلة سادسة في المسار الخطي. ومهمتها الحفاظ على اتساق التتبع. ```prompt # لا يأخذ أي مدخل: يُصلح السلسلة كلها دائمًا /lagune-repair ``` ## آلية العمل كل ملاحظة من detect عنصر متتبَّع واحد تحمله مراحل plan و harden و verify إلى الأمام، وتعمل عليه كل منها وتعيد ذكره باسمه. وهذا الاسم، المكتوب بالصيغة نفسها عنوانًا للقسم في كل مُخرَج، هو هويته على طول الطريق. الشيء المتغيّر الوحيد الذي يخزّنه التتبع هو مسارات الملفات التي يشير إليها العنصر. ولا توجد هذه المسارات في أي مكان آخر، لذلك لا يمكن لإعادة تسمية ملف أو نقله أن تكسر الرابط إلا هناك، لا في نسختين متباعدتين أبدًا. وحين يحدث ذلك، تصحّح repair الخريطة (`.lagune/tracking.json`) لتنجو الهوية من إعادة التسمية. فهي تقرأ المُخرَجات وخريطة التتبع، ولا تقرأ الكود المصدري إلا لمعرفة المسار الجديد لملف أُعيدت تسميته، ولا تكتب محتوى أمنيًا أبدًا. وفي الجولة نفسها، تفحص كل مُخرَج في الذاكرة مقابل قالبه وتبلّغ عما انحرف عنه، موجّهة كل انحراف إلى المرحلة التي تُصلحه. **نصيحة** - لا تمسّ الكود ولا المُخرَجات النصية، بل التتبع فقط. - نادرًا ما تشغّلها يدويًا. فحين تلاحظ مرحلة ما أن السلسلة غير متسقة، تشغّل repair نيابة عنك وتتابع. - يُحفظ التتبع الذي تحافظ عليه في `.lagune/tracking.json`، وهو حالة داخلية لا تعدّلها يدويًا أبدًا. --- # Migrate: انقل مشروع Lagune القائم على manifest إلى المهارات والإضافات > انقل مشروع Lagune القائم على manifest إلى Lagune القائم على المهارات، مع الحفاظ على ميثاق الأمان والمُخرَجات والتتبع وتخصصاتك الخاصة. Canonical: https://lagune.ai/ar-AE/docs/commands/migrate اللغة: ar-AE الأصل: https://lagune.ai/docs/commands/migrate آخر تحديث: 2026-11-09 🔀 انقل مشروع **Lagune** القائم على manifest إلى **Lagune** القائم على المهارات، مع الحفاظ على كل ما كتبته. **إشعار إهمال** يستمر المشروع الذي يحتوي على manifest في العمل كما هو حتى `v1.x`: يسلّم `npx lagune` الأوامر `init` و `pull` و `update` و `add` و `remove` و `list` ولوحة التحكم إلى `lagune@0.15.0`، آخر إصدار قائم على manifest. ## النقل 1. تأكد من أن عملك الحالي محفوظ في commit، ثم شغّل migrate من جذر المشروع: ```bash npx lagune migrate ``` 2. أضف إلى commit ما غيّره فقط، ليبقى النقل تغييرًا واحدًا قابلًا للمراجعة. 3. ثبّت الأوامر لوكيلك، كما تعرض [صفحة التثبيت](https://lagune.ai/ar-AE/docs). 4. إن كان في المشروع مُخرَج detect أو plan أو harden بالفعل، فاطلب من [`/lagune-repair`](https://lagune.ai/ar-AE/docs/commands/repair) مواءمة المراجع القديمة فيها وفي تخصصاتك الخاصة: ```prompt /lagune-repair وائم التخصصات المطبّقة (sub-skills سابقًا) في المُخرَجات تحت `.lagune/memory/` (`detect.md` و `plan.md` و `harden.md`) مع الأسماء التي يسردها الكتالوج الجديد، وأعد كتابة كل استدعاء تجريه تخصصاتي الخاصة في `.lagune/catalog/` إلى الـ hooks القديمة في `.lagune/hooks/` كاستدعاء للأداة `lagune_read` أو `lagune_write`. ``` ## ما الذي يتغيّر | قبل | بعد | | ---------------------------------------------------------------------- | ---------------------------------------------------------------------------- | | `.lagune/templates/` و `.lagune/hooks/` و `.lagune/specializations.md` | أُزيلت: تحمل كل مهارة قالبها، ويشغّل المحرك الـ hooks | | نسخ التخصصات المدمجة في `.lagune/skills/` | أُزيلت: يقدّم المحرك التخصصات المدمجة | | تخصصاتك الخاصة في `.lagune/skills/` | نُقلت إلى `.lagune/catalog/` | | `.lagune/skills.json`، فهرس تخصصاتك الخاصة | دُمج في `.lagune/configs.json` | | فئات الـ manifest | سُجّلت في `.lagune/configs.json` | | أوامر الوكيل القديمة، مثل `/lagune.detect` | أُزيلت: [تثبيت **Lagune**](https://lagune.ai/ar-AE/docs) يجلب الأوامر الجديدة، مثل `/lagune-detect` | | كتلة **Lagune** في `.gitignore` | أُزيلت، مع الملف إن لم يكن يحتوي على شيء آخر | | `.lagune/proofs/`، الذي كانت تتجاهله تلك الكتلة | يُبقيه ملف `.gitignore` الخاص به خارج كل commit | | `.lagune/manifest.json` | حُذف، في النهاية | يبقى عملك الأمني كما هو: ميثاق الأمان، والمُخرَج الذي أنتجته كل مرحلة، وخريطة التتبع بالمسارات التي تشير إليها كل ملاحظة. ## الأسئلة الشائعة ### هل يجب أن أُرحّل مشروعي؟ نعم. المشاريع القائمة على manifest مُهملة ولن تستمر في العمل إلا حتى v1.x، لذلك شغّل npx lagune migrate لنقل مشروعك. ### ما الذي يحافظ عليه migrate؟ ميثاق الأمان، وكل مُخرَجات المراحل، وخريطة التتبع، وفئاتك، وتخصصاتك الخاصة. تنتقل التخصصات إلى ‎.lagune/catalog/‎، وينضم فهرسها إلى فئاتك في ‎.lagune/configs.json. ### متى أثبّت الأوامر الجديدة؟ بعد migrate، كما تعرض صفحة التثبيت لوكيلك. والتثبيت أولًا يعمل أيضًا، لأن migrate يحافظ على الأمر الجديد ‎/lagune. ### زميلي أجرى الترحيل بالفعل. ماذا أشغّل؟ اسحب النقل، ثم شغّل npx lagune migrate مرة واحدة. يزيل ما تركه Lagune القائم على manifest في نسختك المحلية، وهو ما لم يحمله نظام التحكم في الإصدارات أبدًا، ويُبقي إثباتاتك خارج كل commit.