كيف يتعامل مع الأسرار
هذا الخادم يقف بين مدير أسرار ونموذج لغوي. الجزء المثير للاهتمام ليس ما يقدر عليه — بل ما يرفض فعله.
القيم لا تعود أبدًا
تبلّغ oneguard_env_sync وoneguard_env_push عن أسماء المتغيرات وعددها. الأداة تفكّ التشفير إلى القرص؛ لا شيء في نتيجة الأداة يحمل قيمة.
هذا ليس اتفاقًا فقط، بل اختبار: تكتب حزمة الاختبارات قيمة معروفة في سر وهمي، تزامنه، ثم تتأكد أن النص يظهر في .env على القرص ولا يظهر في نتيجة الأداة إطلاقًا.
إنشاء بيانات اعتماد لا يكشفها أبدًا
تجعل oneguard_secrets_generate الأداة تولّد القيمة وتخزّنها مباشرة، بالدمج داخل السر بحيث تبقى كل متغيراته الأخرى كما هي. يعرف الوكيل أن DB_PASSWORD أصبح موجودًا، ولا شيء أكثر.
oneguard_generate هي الأداة الوحيدة التي تعيد قيمة — فقيمة لا تُخزَّن في أي مكان لا فائدة منها ما لم تُعَد — ويوجّه وصفها النموذج إلى الأداة الأخرى كلما كانت القيمة موجَّهة إلى سر.
جلسة الوكيل ليست جلستك
تحتفظ الأداة بمفتاحها في $HOME/.oneguard/credentials.json، ملف واحد تشترك فيه كل نسخة من الأداة على الجهاز. يمنح هذا الخادم كل عملية فرعية HOME خاصًا بها.
لذا لا يستطيع auth login من الوكيل الكتابة فوق المفتاح الذي تستخدمه في طرفيتك، ولا يستطيع مفتاح رُفض هنا تسجيل خروجك هناك.
الأدوات الهدّامة تطلب إثباتًا
حذف سر يتطلب اسمه بالضبط؛ وإزالة عضو تتطلب بريده الإلكتروني بالضبط. كلاهما يُبحث عنه عند الخادم أولًا ويُقارن قبل أن يحدث أي شيء — فيُوقَف وكيل يعمل من اسم نصف متذكَّر بدل أن يُترك ليخمّن.
الأدوات التي تستبدل بدل أن تضيف تذكر ذلك في الوصف الذي يقرؤه النموذج، لأن هذا هو السلوك الذي يفاجئ الناس: كلتا oneguard_secrets_edit وoneguard_env_push تستبدل حمولة كاملة.
كابحان مستقلان
هناك طريقتان لمنع الوكيل من تغيير أي شيء، وتعملان على طبقتين مختلفتين:
| | يفرضه | الأثر |
| --- | --- | --- |
| مفتاح API للقراءة فقط | خادم OneGuard | تُرفض كل كتابة، مهما حاول الوكيل، أو هذا الخادم، أو عميل مُعدَّل |
| ONEGUARD_MCP_READONLY=1 | هذا الخادم | لا تُعرض الأدوات المغيِّرة أبدًا، فلا يمكن إقناع النموذج باستدعاء واحدة |
استخدم المفتاح للضمان، والعلامة لإبقاء قائمة الأدوات مركّزة. تبلّغ oneguard_status عن can_write، فيعرف الوكيل أيهما لديه قبل أن يجرّب شيئًا سيُرفض.
الأوامر التفاعلية لا تُستدعى أبدًا
يطبع oneguard env sync على مجلد غير مرتبط قائمة مرقّمة وينتظر إدخالًا من stdin. هذا لا يعمل حين لا يوجد إنسان على الطرف الآخر من الأنبوب — سيعلق الخادم إلى أن يوقفه شيء ما.
فيُقلَب الاختيار رأسًا على عقب: على مجلد غير مرتبط، يعيد الخادم قائمة الخزنات لتختار أنت منها، ويكتب رابط .oneguard بنفسه، ثم يستدعي المسار غير التفاعلي. يُغلق stdin للعملية الفرعية، فأي شيء يحاول أن يطلب إدخالًا يفشل فورًا بدل أن يعلق.
ما لا يحمي منه هذا
يستحق القول بوضوح:
- وكيل بمفتاح كتابة يقدر على فعل أي شيء يقدر عليه ذلك المفتاح. الضمانات أعلاه تقلّل احتمال الأخطاء؛ ولا تجعله بيئة معزولة.
- القيم المكتوبة في
.envموجودة على قرصك نصًا صريحًا، كما يجب أن تكون ليقرأها ما لديك من أدوات. أبقِ.envخارج ضبط الإصدار. - أي شيء تلصقه في محادثة يبقى في تلك المحادثة. استخدم
oneguard_secrets_generateبدل كتابة بيانات اعتماد تريد أن تبقى خاصة.