OneGuard

البدء

تسحب أداة OneGuard في سطر الأوامر متغيرات البيئة المشفّرة إلى ملف .env محلي، وتدفع التغييرات مرة أخرى، وتدير الخزنات والأسرار وأعضاء الفريق — دون مغادرة الطرفية.

التثبيت

macOS و Linux

تنشر OneGuard من مستودع Homebrew خاص بها ("tap")، فتوجّه Homebrew إليه مرة واحدة:

brew tap oneguard-sa/oneguard
brew install oneguard

أو بأمر واحد يجمع بين الإضافة والتثبيت:

brew install oneguard-sa/oneguard/oneguard

تحقّق من نجاح التثبيت:

oneguard --version
oneguard --help
which oneguard

Windows

دعم Chocolatey قيد الإنجاز:

choco install oneguard

تسجيل الدخول

ولّد مفتاح API من لوحة تحكم OneGuard — Vault → API Keys → Add — اختر صلاحية وتاريخ انتهاء، ثم انسخ المفتاح. يبدأ بـ og_ ويظهر مرة واحدة فقط.

oneguard auth login og_your_key

يُخزَّن المفتاح في مخزن بيانات الاعتماد الخاص بنظام التشغيل — Keychain على macOS، وDPAPI على Windows، وSecret Service (GNOME Keyring أو KWallet) على Linux. ويخبرك oneguard status بأيّها يُستخدم.

وحيث لا يوجد مخزن كهذا — داخل حاوية أو على خادم مجرّد — تتراجع الأداة إلى ~/.oneguard/credentials.json بصلاحية 600 وتنبّهك إلى ذلك. على تلك الأجهزة فضّل متغيّر البيئة أدناه، فهو لا يخزّن شيئًا إطلاقًا.

لتسجيل الخروج:

oneguard auth logout

في CI والحاويات والسكربتات

اضبط ONEGUARD_API_KEY واستغنِ عن auth login كليًا. لا يُكتب شيء على القرص ولا يُقرأ منه شيء:

ONEGUARD_API_KEY=og_your_key oneguard env pull --id 84e1d2b3

وبهذه الطريقة نفسها يوثّق خادم MCP الأداةَ، ولهذا لا تترك جلسة الوكيل أي بيانات اعتماد خلفها.

صلاحيات المفتاح

يُنشأ المفتاح إما للقراءة read أو للكتابة write، ويفرض الخادم هذا الفرق:

| الصلاحية | ما يمكن فعله | | --- | --- | | read | status، vault list، secrets list، env pull، env sync، teams list، logs list، وgenerate (التي لا تغادر جهازك أبدًا) | | write | كل ما سبق، بالإضافة إلى إنشاء الأسرار والخزنات وتعديلها وأرشفتها وحذفها، وenv sync --push، وsecrets generate، ودعوة الأعضاء أو إزالتهم |

مفتاح للقراءة فقط يُستخدم في عملية كتابة يُرفض برسالة واضحة، وهذا لا يسجّل خروجك — تبقى جلستك صالحة، وكل ما تحتاجه مفتاح بصلاحية الكتابة لتلك العملية.

لمعرفة ما يستطيع المفتاح الذي تستخدمه حاليًا فعله:

oneguard status

مخرجات قابلة للقراءة آليًا

يقبل أي أمر خيار --json العام، فيستبدل النص الموجّه للبشر بكائن JSON واحد. ويأتي الخيار قبل الأمر:

oneguard --json vault list
oneguard --json status
{"ok":true,"vaults":[{"id":"0d8ac74c-…-…","id_prefix":"0d8ac74c","name":"oneguard-api"}],"count":1}

ثلاثة أمور تستحق الانتباه:

  • الأخطاء أيضًا JSON، على stdout، مع رمز خروج غير صفري: {"ok":false,"error":{"code":"forbidden","message":"…"}}. والحقل code ثابت — لا يتغيّر عند إعادة صياغة الرسالة — فالتفريع عليه آمن.
  • المعرّفات تعود كاملة. المخرجات البشرية تقتصّها إلى ثمانية أحرف لتبقى مقروءة، أما JSON فلا.
  • القيم لا تظهر أبدًا. الأوامر التي تنقل .env تُبلّغ عن أسماء المتغيّرات وعددها. أما القيم فتذهب إلى الملف ولا شيء غيره.

ويرفض oneguard env sync تشغيل قائمة اختيار الخزنة التفاعلية مع --json، إذ لا يستطيع سكربت الإجابة على سؤال — اربط المجلد مرة واحدة دون الخيار، ثم يعمل كل تشغيل بعدها معه.

الترقية

brew update
brew upgrade oneguard

لمعرفة ما تستخدمه مقابل المتاح:

oneguard --help
brew info oneguard

إذا أفاد brew upgrade بعدم وجود جديد رغم توقّعك إصدارًا أحدث، فربما تكون نسخة Homebrew من الـ tap قديمة — ينعشها brew update. لإعادة تثبيت كاملة:

brew uninstall oneguard && brew install oneguard-sa/oneguard/oneguard

تشغيل نسخة محلية

عند العمل على الأداة نفسها، شغّل نسختك المبنية محليًا دون التأثير على النسخة المثبَّتة. لا تضعها على PATH:

cd oneguard_cli
dart compile exe bin/oneguard.dart -o build/oneguard
./build/oneguard vault list

تشترك كل نسخة من الأداة على الجهاز في بيانات اعتماد واحدة. لإبقاء تسجيل دخول تجريبي منفصلًا، امنح نسختك مجلد home مختلفًا — فاسم المدخل في مخزن بيانات الاعتماد مشتقّ من مجلد الإعدادات، وبالتالي home مختلف يعني مدخلًا مختلفًا:

HOME=/tmp/oneguard-dev ./build/oneguard auth login og_test_key
HOME=/tmp/oneguard-dev ./build/oneguard status

أو، أبسط من ذلك، مرّر المفتاح في البيئة ولا تخزّن شيئًا:

ONEGUARD_API_KEY=og_test_key ./build/oneguard status

في الحالتين تبقى جلستك الحقيقية دون تأثير. (والأولى هي تحديدًا كيف يعزل خادم MCP نفسه.)